[debian-edu-commits] debian-edu/pkg-team/ 01/01: Imported Upstream version 1.1.3
Petter Reinholdtsen
pere at moszumanska.debian.org
Sat Sep 19 10:03:49 UTC 2015
This is an automated email from the git hooks/post-receive script.
pere pushed a commit to annotated tag upstream/1.1.3
in repository lmms.
commit 8023ca0d6d4dca16c287fbf56ee7a3ed90f69a93
Author: Petter Reinholdtsen <pere at hungry.com>
Date: Sat Sep 19 09:18:22 2015 +0200
Imported Upstream version 1.1.3
---
.gitmodules | 0
.mailmap | 11 +
.svnignore | 6 +
.travis.yml | 32 +
CMakeLists.txt | 38 +-
README | 6 +-
README.md | 50 +
data/CMakeLists.txt | 3 +-
data/dmg_branding.png | Bin 249220 -> 18192 bytes
data/locale/ca.qm | Bin 122034 -> 118806 bytes
data/locale/ca.ts | 2932 +++-
data/locale/cs.qm | Bin 101640 -> 110029 bytes
data/locale/cs.ts | 3297 +++--
data/locale/de.qm | Bin 240099 -> 302180 bytes
data/locale/de.ts | 2213 ++-
data/locale/en.ts | 3337 +++--
data/locale/es.qm | Bin 37894 -> 38461 bytes
data/locale/es.ts | 3207 +++--
data/locale/fa.qm | Bin 36505 -> 37233 bytes
data/locale/fa.ts | 3205 +++--
data/locale/fr.qm | Bin 211795 -> 231627 bytes
data/locale/fr.ts | 3326 +++--
data/locale/gl.qm | Bin 203614 -> 197454 bytes
data/locale/gl.ts | 2968 +++-
data/locale/it.qm | Bin 195809 -> 293007 bytes
data/locale/it.ts | 3227 +++--
data/locale/ja.qm | Bin 86573 -> 81993 bytes
data/locale/ja.ts | 3863 +++--
data/locale/ko.qm | Bin 76805 -> 74791 bytes
data/locale/ko.ts | 2963 +++-
data/locale/nl.qm | Bin 78509 -> 77251 bytes
data/locale/nl.ts | 2934 +++-
data/locale/pl.qm | Bin 201179 -> 192788 bytes
data/locale/pl.ts | 2973 +++-
data/locale/pt.qm | Bin 230729 -> 225556 bytes
data/locale/pt.ts | 8619 ++++++-----
data/locale/ru.qm | Bin 213258 -> 209794 bytes
data/locale/ru.ts | 3029 +++-
data/locale/sv.qm | Bin 22527 -> 23220 bytes
data/locale/sv.ts | 3191 +++--
data/locale/zh.qm | Bin 0 -> 71398 bytes
data/locale/zh.ts | 8319 +++++++++++
data/nsis_branding.bmp | Bin 25886 -> 9742 bytes
data/presets/AudioFileProcessor/Bass-Mania.xpf | 27 +-
data/presets/AudioFileProcessor/Erazor.xpf | 82 +-
.../AudioFileProcessor/Fat-Reversed-Kick.xpf | 21 +-
.../AudioFileProcessor/Kick-4-your-Subwoofer.xpf | 21 +-
data/presets/AudioFileProcessor/SString.xpf | 95 +-
data/presets/AudioFileProcessor/orion.xpf | 66 +-
data/presets/BitInvader/alien_strings.xpf | 27 +-
data/presets/BitInvader/beehive.xpf | 27 +-
data/presets/BitInvader/bell.xpf | 27 +-
data/presets/BitInvader/cello.xpf | 27 +-
data/presets/BitInvader/drama.xpf | 27 +-
data/presets/BitInvader/epiano.xpf | 27 +-
data/presets/BitInvader/invaders_must_die.xpf | 38 +
data/presets/BitInvader/pluck.xpf | 27 +-
data/presets/BitInvader/soft_pad.xpf | 27 +-
data/presets/BitInvader/spacefx.xpf | 27 +-
data/presets/BitInvader/subbass.xpf | 27 +-
data/presets/BitInvader/sweep_pad.xpf | 27 +-
data/presets/BitInvader/toy_piano.xpf | 27 +-
data/presets/BitInvader/wah_synth.xpf | 27 +-
data/presets/Kicker/Clap dry.xpf | 44 +
data/presets/Kicker/Clap.xpf | 52 +
data/presets/Kicker/HihatClosed.xpf | 21 +
data/presets/Kicker/HihatOpen.xpf | 21 +
data/presets/Kicker/KickPower.xpf | 21 +
data/presets/Kicker/Shaker.xpf | 21 +
data/presets/Kicker/SnareLong.xpf | 21 +
data/presets/Kicker/SnareMarch.xpf | 161 +
data/presets/Kicker/TR909-RimShot.xpf | 21 +
data/presets/Kicker/TrapKick.xpf | 21 +
data/presets/LB302/AcidLead.xpf | 40 +
data/presets/LB302/AngryLead.xpf | 34 +
data/presets/LB302/DroneArp.xpf | 21 +
data/presets/LB302/GoodOldTimes.xpf | 28 +-
data/presets/LB302/Oh Synth.xpf | 35 +-
data/presets/LB302/STrash.xpf | 60 +-
data/presets/Monstro/Growl.xpf | 84 +
data/presets/Monstro/HorrorLead.xpf | 52 +
data/presets/Monstro/Phat.xpf | 34 +
data/presets/Monstro/ScaryBell.xpf | 52 +
data/presets/Nescaline/Chomp.xpf | 21 +
data/presets/Nescaline/Detune_lead.xpf | 29 +
data/presets/Nescaline/Engine_overheats.xpf | 21 +
data/presets/Nescaline/Fireball_flick.xpf | 29 +
data/presets/Nescaline/Mega_weapon.xpf | 21 +
data/presets/OpulenZ/Bagpipe.xpf | 12 +-
data/presets/OpulenZ/Bells.xpf | 12 +-
data/presets/OpulenZ/Brass.xpf | 12 +-
data/presets/OpulenZ/Bubbly_days.xpf | 12 +-
data/presets/OpulenZ/Cheesy_synth.xpf | 12 +-
data/presets/OpulenZ/Clarinet.xpf | 12 +-
data/presets/OpulenZ/Combo_organ.xpf | 12 +-
data/presets/OpulenZ/Epiano.xpf | 12 +-
data/presets/OpulenZ/Funky.xpf | 12 +-
data/presets/OpulenZ/Halo_pad.xpf | 12 +-
data/presets/OpulenZ/Harp.xpf | 12 +-
data/presets/OpulenZ/Organ_leslie.xpf | 12 +-
data/presets/OpulenZ/Pad.xpf | 12 +-
data/presets/OpulenZ/Square.xpf | 12 +-
data/presets/OpulenZ/Vibraphone.xpf | 12 +-
data/presets/Organic/Pwnage.xpf | 146 +
data/presets/Organic/Rubberband.xpf | 21 +
data/presets/Organic/organ_blues.xpf | 27 +-
data/presets/Organic/organ_risingsun.xpf | 27 +-
data/presets/Organic/organ_swish.xpf | 27 +-
data/presets/Organic/pad_ethereal.xpf | 27 +-
data/presets/Organic/pad_rich.xpf | 27 +-
data/presets/Organic/pad_sweep.xpf | 27 +-
data/presets/Organic/puresine.xpf | 27 +-
data/presets/Organic/sequencer_64.xpf | 27 +-
data/presets/SID/Bass.xpf | 21 +
data/presets/SID/CheesyGuitar.xpf | 45 +
data/presets/SID/Lead.xpf | 21 +
data/presets/SID/MadMind.xpf | 57 +
data/presets/SID/Overdrive.xpf | 57 +
data/presets/SID/Pad.xpf | 21 +
data/presets/TripleOscillator/AmazingBubbles.xpf | 33 +-
data/presets/TripleOscillator/AnalogBell.xpf | 21 +
data/presets/TripleOscillator/AnalogDreamz.xpf | 33 +-
data/presets/TripleOscillator/AnalogTimes.xpf | 33 +-
data/presets/TripleOscillator/AnalogTimes2.xpf | 21 -
data/presets/TripleOscillator/Analogous.xpf | 33 +-
data/presets/TripleOscillator/ArpKing.xpf | 17 -
data/presets/TripleOscillator/Arpeggio.xpf | 17 +
data/presets/TripleOscillator/ArpeggioPing.xpf | 21 +
data/presets/TripleOscillator/Arpeggio_1.xpf | 21 -
data/presets/TripleOscillator/Arpeggio_2.xpf | 16 -
data/presets/TripleOscillator/Bell.xpf | 46 +-
data/presets/TripleOscillator/BellArp.xpf | 21 +
data/presets/TripleOscillator/Bell_2.xpf | 18 -
data/presets/TripleOscillator/BlandModBass.xpf | 21 +
data/presets/TripleOscillator/BrokenToy.xpf | 50 +
data/presets/TripleOscillator/ChurchOrgan.xpf | 28 +-
data/presets/TripleOscillator/CryingPads.xpf | 34 +
data/presets/TripleOscillator/DeathBass.xpf | 28 -
data/presets/TripleOscillator/DetunedGhost.xpf | 37 +
data/presets/TripleOscillator/DirtyReece.xpf | 83 +
.../presets/TripleOscillator/Distorted-FM-Bass.xpf | 18 -
data/presets/TripleOscillator/DistortedPMBass.xpf | 21 +
data/presets/TripleOscillator/Drums_HardKick.xpf | 108 +
data/presets/TripleOscillator/Drums_HihatC.xpf | 21 +
data/presets/TripleOscillator/Drums_HihatO.xpf | 21 +
data/presets/TripleOscillator/Drums_Kick.xpf | 21 +
data/presets/TripleOscillator/Drums_Snare.xpf | 21 +
data/presets/TripleOscillator/Dull-Bell-Arp.xpf | 18 -
data/presets/TripleOscillator/DullBell.xpf | 21 +
data/presets/TripleOscillator/E-Organ.xpf | 28 +-
data/presets/TripleOscillator/E-Organ2.xpf | 36 +-
data/presets/TripleOscillator/ElectricOboe.xpf | 62 +
data/presets/TripleOscillator/Erazzor.xpf | 136 +-
data/presets/TripleOscillator/Fat-FMish-Bells.xpf | 18 -
data/presets/TripleOscillator/Fat-TB303-Arp.xpf | 17 -
data/presets/TripleOscillator/Fat.xpf | 16 -
data/presets/TripleOscillator/FatCheese.xpf | 31 +-
data/presets/TripleOscillator/FatPMArp.xpf | 21 +
data/presets/TripleOscillator/FatTB303Arp.xpf | 21 +
data/presets/TripleOscillator/FutureBass.xpf | 32 +-
data/presets/TripleOscillator/FuzzyAnalogBass.xpf | 21 +
data/presets/TripleOscillator/Garfunkel.xpf | 71 +
data/presets/TripleOscillator/GhostBoy.xpf | 80 +
data/presets/TripleOscillator/Gong.xpf | 18 -
data/presets/TripleOscillator/Harmonium.xpf | 30 +-
data/presets/TripleOscillator/Harp-of-a-Fairy.xpf | 29 +-
data/presets/TripleOscillator/Harpsichord.xpf | 18 -
data/presets/TripleOscillator/HiPad.xpf | 29 +-
data/presets/TripleOscillator/HugeGrittyBass.xpf | 21 +
data/presets/TripleOscillator/Jupiter.xpf | 30 +-
data/presets/TripleOscillator/Kick.xpf | 30 -
data/presets/TripleOscillator/Kick2.xpf | 30 -
data/presets/TripleOscillator/LFO-party.xpf | 28 +-
data/presets/TripleOscillator/LovelyDream.xpf | 29 +-
data/presets/TripleOscillator/MoogArpeggio.xpf | 28 +-
data/presets/TripleOscillator/MoveYourBody.xpf | 32 +-
data/presets/TripleOscillator/OldComputerGames.xpf | 109 +-
data/presets/TripleOscillator/PM-FMstring.xpf | 34 +
data/presets/TripleOscillator/PMFMFTWbass.xpf | 62 +
data/presets/TripleOscillator/PMbass.xpf | 75 +
data/presets/TripleOscillator/PercussiveBass.xpf | 44 +
data/presets/TripleOscillator/Play-some-rock.xpf | 47 +-
data/presets/TripleOscillator/PluckArpeggio.xpf | 28 +-
data/presets/TripleOscillator/PluckBass.xpf | 45 +
data/presets/TripleOscillator/Plucked.xpf | 17 -
data/presets/TripleOscillator/PowerStrings.xpf | 81 +-
data/presets/TripleOscillator/RaveBass.xpf | 28 +-
data/presets/TripleOscillator/Ravemania.xpf | 34 +-
data/presets/TripleOscillator/ResoBass.xpf | 33 +-
data/presets/TripleOscillator/ResonantPad.xpf | 33 +-
data/presets/TripleOscillator/RockOrgan.xpf | 18 -
data/presets/TripleOscillator/Rough!.xpf | 33 +-
data/presets/TripleOscillator/SBass.xpf | 54 -
data/presets/TripleOscillator/SBass2.xpf | 36 -
data/presets/TripleOscillator/SEGuitar.xpf | 117 +-
data/presets/TripleOscillator/SawLead.xpf | 21 -
data/presets/TripleOscillator/SawReso.xpf | 28 +-
data/presets/TripleOscillator/Short1.xpf | 18 -
data/presets/TripleOscillator/Short2.xpf | 18 -
data/presets/TripleOscillator/Short3.xpf | 18 -
data/presets/TripleOscillator/Short4.xpf | 18 -
data/presets/TripleOscillator/Snare.xpf | 30 -
data/presets/TripleOscillator/SoftBass.xpf | 21 -
data/presets/TripleOscillator/SoftStrings.xpf | 21 -
data/presets/TripleOscillator/SpaceBass.xpf | 29 +-
data/presets/TripleOscillator/Square.xpf | 28 +-
data/presets/TripleOscillator/SquarePing.xpf | 34 +
data/presets/TripleOscillator/SuperSawLead.xpf | 44 +
data/presets/TripleOscillator/Supernova.xpf | 123 +-
data/presets/TripleOscillator/TB303-Arpeggio.xpf | 21 -
data/presets/TripleOscillator/TB303.xpf | 28 +-
data/presets/TripleOscillator/TINTNpad.xpf | 52 +
data/presets/TripleOscillator/TheFirstOne.xpf | 29 +-
data/presets/TripleOscillator/TheMaster.xpf | 42 +-
data/presets/TripleOscillator/WarmStack.xpf | 72 +-
data/presets/TripleOscillator/Whistle.xpf | 29 +-
data/presets/TripleOscillator/Xylophon.xpf | 25 +-
data/presets/Vibed/Harpsichord.xpf | 21 +-
data/presets/Vibed/SadPad.xpf | 21 +-
data/presets/Watsyn/Epic_lead.xpf | 48 +
data/presets/Watsyn/Phase_bass.xpf | 21 +
data/presets/Watsyn/Pulse.xpf | 34 +
.../ZynAddSubFX/Arpeggios/0068-Glass Arpeggio1.xiz | Bin 0 -> 2165 bytes
.../ZynAddSubFX/Arpeggios/0069-Glass Arpeggio2.xiz | Bin 0 -> 2185 bytes
data/presets/ZynAddSubFX/Brass/0067-Brass Pad1.xiz | Bin 0 -> 1855 bytes
data/presets/ZynAddSubFX/Brass/0068-Brass Pad2.xiz | Bin 0 -> 1930 bytes
.../WillGodfrey => Collection}/0001-Xylophone.xiz | Bin
.../WillGodfrey => Collection}/0002-Vibraphone.xiz | Bin
.../WillGodfrey => Collection}/0003-Soft Vibes.xiz | Bin
.../0004-Simple Chimes.xiz | Bin
.../0005-Silver Bell.xiz | Bin
.../ZynAddSubFX/Collection/0006-Soft Hammer.xiz | Bin 0 -> 2167 bytes
.../ZynAddSubFX/Collection/0007-Ethereal.xiz | Bin 0 -> 2456 bytes
.../ZynAddSubFX/Collection/0008-Metal Drips.xiz | Bin 0 -> 2382 bytes
.../ZynAddSubFX/Collection/0009-Trem Lead.xiz | Bin 0 -> 4093 bytes
.../0010-Trem Synth Piano 3.xiz} | Bin
.../0011-Trem Synth.xiz} | Bin
.../ZynAddSubFX/Collection/0012-Simple Square.xiz | Bin 0 -> 2054 bytes
.../ZynAddSubFX/Collection/0013-Full Square.xiz | Bin 0 -> 2187 bytes
.../ZynAddSubFX/Collection/0014-Super Square.xiz | Bin 0 -> 2457 bytes
.../0015-Steel Wire.xiz} | Bin
.../ZynAddSubFX/Collection/0016-Echo Bubbles.xiz | Bin 0 -> 2294 bytes
.../ZynAddSubFX/Collection/0017-Fantasia.xiz | Bin 0 -> 1876 bytes
.../ZynAddSubFX/Collection/0018-Sub Delay.xiz | Bin 0 -> 2196 bytes
data/presets/ZynAddSubFX/Collection/0019-Soft.xiz | Bin 0 -> 2084 bytes
.../ZynAddSubFX/Collection/0020-Ultra Soft.xiz | Bin 0 -> 1927 bytes
.../ZynAddSubFX/Collection/0021-Whistle.xiz | Bin 0 -> 1952 bytes
.../ZynAddSubFX/Collection/0022-Wipe Whistle.xiz | Bin 0 -> 2039 bytes
.../ZynAddSubFX/Collection/0023-Ghost Whistle.xiz | Bin 0 -> 2228 bytes
.../0024-Full Strings.xiz} | Bin
.../0025-Slow Strings.xiz} | Bin
.../0026-Pizzicato Strings.xiz} | Bin
.../ZynAddSubFX/Collection/0027-Sweep Synth.xiz | Bin 0 -> 2513 bytes
.../0028-Warm Synth.xiz} | Bin
.../0029-Hard Synth.xiz} | Bin
.../ZynAddSubFX/Collection/0030-Bright Synth.xiz | Bin 0 -> 2389 bytes
.../0031-Multi Synth.xiz} | Bin
.../0032-Slow Saw.xiz} | Bin
.../0033-Medium Saw.xiz} | Bin
.../0034-Hard Saw.xiz} | Bin
.../0035-Voiced Saw.xiz} | Bin
.../ZynAddSubFX/Collection/0036-Sweep Saw.xiz | Bin 0 -> 1974 bytes
.../Collection/0037-Stereo Sweep Saw.xiz | Bin 0 -> 2546 bytes
.../0038-Wipe Synth.xiz} | Bin
.../0039-Hard Stereo Sweep Synth.xiz} | Bin
.../Collection/0040-Master Synth Low.xiz | Bin 0 -> 3999 bytes
.../Collection/0041-Master Synth High.xiz | Bin 0 -> 4008 bytes
.../0042-Sharp Synth.xiz} | Bin
.../0043-Fretless Bass.xiz} | Bin
.../0044-Decay Bass.xiz} | Bin
.../0045-Steel Bass.xiz} | Bin
.../0046-Synth Bass.xiz} | Bin
.../ZynAddSubFX/Collection/0047-Distorted Bass.xiz | Bin 0 -> 2041 bytes
.../ZynAddSubFX/Collection/0048-Variable Reed.xiz | Bin 0 -> 1986 bytes
.../ZynAddSubFX/Collection/0049-Reed Organ.xiz | Bin 0 -> 3739 bytes
.../ZynAddSubFX/Collection/0050-Soft Organ.xiz | Bin 0 -> 2119 bytes
.../ZynAddSubFX/Collection/0051-Thin Pipe.xiz | Bin 0 -> 3825 bytes
.../ZynAddSubFX/Collection/0052-Great Organ.xiz | Bin 0 -> 2391 bytes
.../ZynAddSubFX/Collection/0053-64ft Organ.xiz | Bin 0 -> 2808 bytes
.../0054-Hammond Organ.xiz} | Bin
.../Collection/0055-Percussion Organ.xiz | Bin 0 -> 2276 bytes
.../0064-Sines.xiz => Collection/0056-Sines.xiz} | Bin
.../0057-Soft Flute.xiz} | Bin
.../0058-Warm Flute.xiz} | Bin
.../0059-Ocarina.xiz} | Bin
.../presets/ZynAddSubFX/Collection/0060-Beyond.xiz | Bin 0 -> 2252 bytes
.../ZynAddSubFX/Collection/0061-Sweep Pad.xiz | Bin 0 -> 2076 bytes
.../ZynAddSubFX/Collection/0062-Sweep Matrix.xiz | Bin 0 -> 2219 bytes
.../presets/ZynAddSubFX/Collection/0063-Matrix.xiz | Bin 0 -> 2148 bytes
.../Collection/0064-Slow Deep Matrix.xiz | Bin 0 -> 2259 bytes
.../ZynAddSubFX/Collection/0065-Ice Field.xiz | Bin 0 -> 2769 bytes
.../Collection/0066-Hollow Ice Field.xiz | Bin 0 -> 2771 bytes
.../presets/ZynAddSubFX/Collection/0067-Smooth.xiz | Bin 0 -> 1169 bytes
.../presets/ZynAddSubFX/Collection/0068-Rushes.xiz | Bin 0 -> 1257 bytes
.../ZynAddSubFX/Collection/0069-Medium Rushes.xiz | Bin 0 -> 2491 bytes
.../ZynAddSubFX/Collection/0070-Bright Rushes.xiz | Bin 0 -> 2491 bytes
.../Collection/0071-Bright Rush Long Tail.xiz | Bin 0 -> 2507 bytes
.../Collection/0072-Extended Rushes.xiz | Bin 0 -> 3105 bytes
.../Collection/0073-Bright Rush Pipe.xiz | Bin 0 -> 3139 bytes
.../ZynAddSubFX/Collection/0074-Sweep Rushes.xiz | Bin 0 -> 1461 bytes
.../ZynAddSubFX/Collection/0075-Breathy Pad.xiz | Bin 0 -> 2155 bytes
.../ZynAddSubFX/Collection/0076-ReedBank.xiz | Bin 0 -> 1399 bytes
.../ZynAddSubFX/Collection/0077-Voyager.xiz | Bin 0 -> 1339 bytes
.../ZynAddSubFX/Collection/0078-Soft Voyager.xiz | Bin 0 -> 1398 bytes
.../Collection/0079-Soft Voyager Reverse.xiz | Bin 0 -> 1410 bytes
.../0080-Echo Choir.xiz} | Bin
data/presets/ZynAddSubFX/Collection/0081-Sharp.xiz | Bin 0 -> 2683 bytes
.../ZynAddSubFX/Collection/0082-Sharp and Warm.xiz | Bin 0 -> 2789 bytes
.../ZynAddSubFX/Collection/0083-Sharp and Deep.xiz | Bin 0 -> 2789 bytes
.../0084-Sharp Reed.xiz} | Bin
.../ZynAddSubFX/Collection/0085-Far Reed.xiz | Bin 0 -> 3717 bytes
.../0086-Clarinet.xiz} | Bin
.../0087-Bassoon.xiz} | Bin
data/presets/ZynAddSubFX/Collection/0088-Aooww.xiz | Bin 0 -> 2281 bytes
.../0107-Daooww.xiz => Collection/0089-Daooww.xiz} | Bin
.../0108-Yaooww.xiz => Collection/0090-Yaooww.xiz} | Bin
.../0109-Yiee.xiz => Collection/0091-Yiee.xiz} | Bin
.../0110-Eeoow.xiz => Collection/0092-Eeoow.xiz} | Bin
.../0093-Overdrive.xiz} | Bin
.../0094-Overdrive 2.xiz} | Bin
.../ZynAddSubFX/Collection/0095-Overdrive 3.xiz | Bin 0 -> 2270 bytes
.../0096-Power Guitar 1.xiz} | Bin
.../0097-Power Guitar 2.xiz} | Bin
.../ZynAddSubFX/Collection/0098-Wet Brass.xiz | Bin 0 -> 2193 bytes
.../ZynAddSubFX/Collection/0099-Wet Brass 2.xiz | Bin 0 -> 2300 bytes
.../0100-Prophesy.xiz} | Bin
.../presets/ZynAddSubFX/Collection/0101-Bottle.xiz | Bin 0 -> 1390 bytes
.../ZynAddSubFX/Collection/0102-Pan Pipe 32.xiz | Bin 0 -> 4322 bytes
.../ZynAddSubFX/Collection/0103-Pan Pipe.xiz | Bin 0 -> 4310 bytes
.../ZynAddSubFX/Collection/0104-Pan Pipe 96.xiz | Bin 0 -> 4313 bytes
.../0105-Lite Guitar.xiz} | Bin
.../0106-Trem Guitar.xiz} | Bin
.../0107-Smooth Guitar.xiz} | Bin
.../0108-Nylon Guitar.xiz} | Bin
.../ZynAddSubFX/Collection/0109-Tunnel Piano.xiz | Bin 0 -> 2332 bytes
.../0110-Home Piano.xiz} | Bin
.../0111-Moonlight Piano.xiz} | Bin
.../0112-Soft Piano1.xiz} | Bin
.../0113-Soft Piano2.xiz} | Bin
.../ZynAddSubFX/Collection/0114-Space Piano.xiz | Bin 0 -> 4195 bytes
.../ZynAddSubFX/Collection/0115-Space Voice.xiz | Bin 0 -> 1439 bytes
.../Collection/0116-Far Space Voice.xiz | Bin 0 -> 1426 bytes
.../ZynAddSubFX/Collection/0117-Space Voice 2.xiz | Bin 0 -> 2348 bytes
.../0118-Soft Choir.xiz} | Bin
.../ZynAddSubFX/Collection/0119-Full Choir.xiz | Bin 0 -> 2283 bytes
.../0120-Soft Ahh.xiz} | Bin
.../0121-Breathy Ahh.xiz} | Bin
.../ZynAddSubFX/Collection/0122-Another Choir.xiz | Bin 0 -> 2373 bytes
.../ZynAddSubFX/Collection/0123-Light Choir.xiz | Bin 0 -> 1764 bytes
.../0124-Super Pad.xiz} | Bin
.../0125-Hyper Pad.xiz} | Bin
.../ZynAddSubFX/Collection/0126-Hyper Matrix.xiz | Bin 0 -> 3917 bytes
.../ZynAddSubFX/Collection/0127-Extreme.xiz | Bin 0 -> 2683 bytes
.../0128-Wind and Surf.xiz} | Bin
.../Collections/WillGodfrey/0008-Ethereal.xiz | Bin 2375 -> 0 bytes
.../Collections/WillGodfrey/0010-Trem Lead.xiz | Bin 3975 -> 0 bytes
.../Collections/WillGodfrey/0015-Simple Square.xiz | Bin 1826 -> 0 bytes
.../Collections/WillGodfrey/0016-Full Square.xiz | Bin 1998 -> 0 bytes
.../Collections/WillGodfrey/0020-Fantasia.xiz | Bin 1864 -> 0 bytes
.../Collections/WillGodfrey/0021-Soft.xiz | Bin 2026 -> 0 bytes
.../Collections/WillGodfrey/0028-Echo Bubbles.xiz | Bin 2217 -> 0 bytes
.../Collections/WillGodfrey/0036-Bright Synth.xiz | Bin 2178 -> 0 bytes
.../Collections/WillGodfrey/0042-Matrix.xiz | Bin 2096 -> 0 bytes
.../Collections/WillGodfrey/0043-Sweep Matrix.xiz | Bin 2170 -> 0 bytes
.../WillGodfrey/0046-Master Synth Low.xiz | Bin 3847 -> 0 bytes
.../WillGodfrey/0047-Master Synth High.xiz | Bin 3856 -> 0 bytes
.../Collections/WillGodfrey/0057-Sub Delay.xiz | Bin 2137 -> 0 bytes
.../Collections/WillGodfrey/0058-Reed Organ.xiz | Bin 3647 -> 0 bytes
.../Collections/WillGodfrey/0059-Soft Organ.xiz | Bin 2064 -> 0 bytes
.../Collections/WillGodfrey/0060-Thin Pipe.xiz | Bin 3749 -> 0 bytes
.../Collections/WillGodfrey/0061-Great Organ.xiz | Bin 2323 -> 0 bytes
.../Collections/WillGodfrey/0073-Variable Reed.xiz | Bin 1930 -> 0 bytes
.../Collections/WillGodfrey/0075-Smooth.xiz | Bin 1174 -> 0 bytes
.../Collections/WillGodfrey/0077-Whistle.xiz | Bin 1889 -> 0 bytes
.../Collections/WillGodfrey/0078-Ghost Whistle.xiz | Bin 2104 -> 0 bytes
.../Collections/WillGodfrey/0079-Ice Field.xiz | Bin 2566 -> 0 bytes
.../WillGodfrey/0080-Hollow Ice Field.xiz | Bin 2571 -> 0 bytes
.../Collections/WillGodfrey/0081-Beyond.xiz | Bin 2199 -> 0 bytes
.../Collections/WillGodfrey/0083-Sweep Pad.xiz | Bin 2001 -> 0 bytes
.../Collections/WillGodfrey/0084-Breathy Pad.xiz | Bin 2141 -> 0 bytes
.../Collections/WillGodfrey/0085-Bottle.xiz | Bin 1392 -> 0 bytes
.../Collections/WillGodfrey/0086-ReedBank.xiz | Bin 1277 -> 0 bytes
.../Collections/WillGodfrey/0087-Sweep Rushes.xiz | Bin 1467 -> 0 bytes
.../Collections/WillGodfrey/0088-Rushes.xiz | Bin 1260 -> 0 bytes
.../Collections/WillGodfrey/0089-Medium Rushes.xiz | Bin 2478 -> 0 bytes
.../Collections/WillGodfrey/0090-Bright Rushes.xiz | Bin 2479 -> 0 bytes
.../WillGodfrey/0091-Bright Rush Pipe.xiz | Bin 3037 -> 0 bytes
.../WillGodfrey/0092-Bright Rush Long Tail.xiz | Bin 2498 -> 0 bytes
.../Collections/WillGodfrey/0093-Voyager.xiz | Bin 1197 -> 0 bytes
.../Collections/WillGodfrey/0094-Soft Voyager.xiz | Bin 1255 -> 0 bytes
.../WillGodfrey/0095-Soft Voyager Reverse.xiz | Bin 1265 -> 0 bytes
.../Collections/WillGodfrey/0097-Sharp.xiz | Bin 2456 -> 0 bytes
.../WillGodfrey/0098-Sharp and Deep.xiz | Bin 2558 -> 0 bytes
.../Collections/WillGodfrey/0100-Far Reed.xiz | Bin 3717 -> 0 bytes
.../Collections/WillGodfrey/0106-Aooww.xiz | Bin 2229 -> 0 bytes
.../Collections/WillGodfrey/0114-Overdrive 3.xiz | Bin 2216 -> 0 bytes
.../Collections/WillGodfrey/0120-Wet Brass.xiz | Bin 2155 -> 0 bytes
.../Collections/WillGodfrey/0125-Pan Pipe 32.xiz | Bin 4112 -> 0 bytes
.../Collections/WillGodfrey/0126-Pan Pipe.xiz | Bin 4107 -> 0 bytes
.../Collections/WillGodfrey/0127-Pan Pipe 96.xiz | Bin 4116 -> 0 bytes
.../Collections/WillGodfrey/0143-Space Piano.xiz | Bin 4061 -> 0 bytes
.../Collections/WillGodfrey/0146-Space Voice.xiz | Bin 1284 -> 0 bytes
.../Collections/WillGodfrey/0147-Space Voice 2.xiz | Bin 2158 -> 0 bytes
.../Collections/WillGodfrey/0150-Full Choir.xiz | Bin 2333 -> 0 bytes
.../Collections/WillGodfrey/0157-Hyper Matrix.xiz | Bin 3651 -> 0 bytes
.../Collections/WillGodfrey/0158-Extreme.xiz | Bin 2472 -> 0 bytes
.../ZynAddSubFX/Collections/WillGodfrey/README | 4 -
data/presets/ZynAddSubFX/Companion/.bankdir | 0
.../ZynAddSubFX/Companion/0004-Muffled Bells.xiz | 1616 +++
.../ZynAddSubFX/Companion/0006-Tinkle Bell.xiz | 7207 ++++++++++
.../ZynAddSubFX/Companion/0010-Metal Sweep.xiz | 7204 ++++++++++
.../ZynAddSubFX/Companion/0011-Slow Steel.xiz | 8065 +++++++++++
.../ZynAddSubFX/Companion/0013-Bright Metal.xiz | 7281 ++++++++++
.../ZynAddSubFX/Companion/0016-Soft Metal.xiz | 7262 ++++++++++
.../Companion/0019-Warm Square Swell.xiz | 7219 ++++++++++
.../presets/ZynAddSubFX/Companion/0021-Bubbles.xiz | 7175 ++++++++++
data/presets/ZynAddSubFX/Companion/0024-Solo.xiz | 7206 ++++++++++
.../ZynAddSubFX/Companion/0025-Wind Whistle.xiz | 8098 +++++++++++
.../ZynAddSubFX/Companion/0038-Smooth Saw.xiz | 1565 ++
data/presets/ZynAddSubFX/Companion/0041-Buzz.xiz | 7178 ++++++++++
data/presets/ZynAddSubFX/Companion/0045-Bite.xiz | 8602 +++++++++++
.../ZynAddSubFX/Companion/0055-Thick Bass.xiz | 7149 ++++++++++
.../ZynAddSubFX/Companion/0057-Ultra Bass.xiz | 14223 +++++++++++++++++++
.../ZynAddSubFX/Companion/0060-Stopped Pipe.xiz | 1627 +++
.../ZynAddSubFX/Companion/0074-Smooth Expanded.xiz | 7988 +++++++++++
.../ZynAddSubFX/Companion/0092-Wind Pipes.xiz | 950 ++
.../ZynAddSubFX/Companion/0106-Harpsichord.xiz | 7178 ++++++++++
.../ZynAddSubFX/Companion/0107-Cathedral Harp.xiz | 7205 ++++++++++
.../ZynAddSubFX/Companion/0108-Angel Harp.xiz | 8012 +++++++++++
.../presets/ZynAddSubFX/Companion/0116-Soprano.xiz | 1509 ++
.../ZynAddSubFX/Companion/0119-Ghost Choir.xiz | 8065 +++++++++++
data/presets/ZynAddSubFX/Cormi_Noise/.bankdir | 0
.../ZynAddSubFX/Cormi_Noise/0002-Sparo_01.xiz | Bin 0 -> 2097 bytes
.../ZynAddSubFX/Cormi_Noise/0003-Laser_01.xiz | Bin 0 -> 2047 bytes
.../ZynAddSubFX/Cormi_Noise/0005-Elettrico.xiz | Bin 0 -> 1780 bytes
.../ZynAddSubFX/Cormi_Noise/0006-Ronzio_01.xiz | Bin 0 -> 3980 bytes
.../ZynAddSubFX/Cormi_Noise/0007-Ronzio_02.xiz | Bin 0 -> 3446 bytes
.../ZynAddSubFX/Cormi_Noise/0008-Ronzio_03.xiz | Bin 0 -> 3468 bytes
.../ZynAddSubFX/Cormi_Noise/0010-Interferenze.xiz | Bin 0 -> 2066 bytes
.../Cormi_Noise/0012-Passa_astronave.xiz | Bin 0 -> 2539 bytes
.../Cormi_Noise/0013-Passa_asteroide.xiz | Bin 0 -> 2583 bytes
data/presets/ZynAddSubFX/Cormi_Noise/0015-Nave.xiz | Bin 0 -> 2193 bytes
.../ZynAddSubFX/Cormi_Noise/0017-Strano_01.xiz | Bin 0 -> 3808 bytes
.../ZynAddSubFX/Cormi_Noise/0018-Strano_02.xiz | Bin 0 -> 1482 bytes
.../presets/ZynAddSubFX/Cormi_Noise/0020-Acqua.xiz | Bin 0 -> 2699 bytes
.../ZynAddSubFX/Cormi_Noise/0021-Asteroide.xiz | Bin 0 -> 2057 bytes
.../ZynAddSubFX/Cormi_Noise/0024-tastiera.xiz | Bin 0 -> 2066 bytes
.../presets/ZynAddSubFX/Cormi_Noise/0026-beepA.xiz | Bin 0 -> 3206 bytes
.../presets/ZynAddSubFX/Cormi_Noise/0027-beepB.xiz | Bin 0 -> 3298 bytes
.../presets/ZynAddSubFX/Cormi_Noise/0028-beepC.xiz | Bin 0 -> 2931 bytes
data/presets/ZynAddSubFX/Cormi_Noise/0033-buao.xiz | Bin 0 -> 3857 bytes
.../ZynAddSubFX/Cormi_Noise/0034-creepy.xiz | Bin 0 -> 4473 bytes
.../ZynAddSubFX/Cormi_Noise/0036-Trillo.xiz | Bin 0 -> 1820 bytes
.../ZynAddSubFX/Cormi_Noise/0037-Trillo1.xiz | Bin 0 -> 1843 bytes
.../ZynAddSubFX/Cormi_Noise/0038-Trillo2.xiz | Bin 0 -> 1927 bytes
.../ZynAddSubFX/Cormi_Noise/0039-Trillo5.xiz | Bin 0 -> 2090 bytes
.../ZynAddSubFX/Cormi_Noise/0041-Scherzo.xiz | Bin 0 -> 2412 bytes
.../presets/ZynAddSubFX/Cormi_Noise/0043-Grave.xiz | Bin 0 -> 4550 bytes
.../ZynAddSubFX/Cormi_Noise/0045-Fischia_01.xiz | Bin 0 -> 1864 bytes
.../ZynAddSubFX/Cormi_Noise/0046-Fischia_02.xiz | Bin 0 -> 1832 bytes
.../ZynAddSubFX/Cormi_Noise/0047-Fischia_03.xiz | Bin 0 -> 2002 bytes
.../Cormi_Noise/0049-Resonance Pad2.xiz | Bin 0 -> 4010 bytes
.../Cormi_Noise/0050-Resonance Pad2.xiz | Bin 0 -> 3968 bytes
.../Cormi_Noise/0052-ImpossibleDream1.xiz | Bin 0 -> 3733 bytes
.../Cormi_Noise/0053-ImpossibleDream4.xiz | Bin 0 -> 3963 bytes
.../ZynAddSubFX/Cormi_Noise/0054-Delayed Echo.xiz | Bin 0 -> 2196 bytes
.../ZynAddSubFX/Cormi_Noise/0057-Glass_01.xiz | Bin 0 -> 1842 bytes
.../ZynAddSubFX/Cormi_Noise/0059-Tremulo_01.xiz | Bin 0 -> 2282 bytes
.../ZynAddSubFX/Cormi_Noise/0061-Campane.xiz | Bin 0 -> 2007 bytes
.../ZynAddSubFX/Cormi_Sound/0001-Bassoon.xiz | Bin 0 -> 4219 bytes
.../ZynAddSubFX/Cormi_Sound/0002-Bassoon2.xiz | Bin 0 -> 3628 bytes
.../ZynAddSubFX/Cormi_Sound/0003-Bassoon3.xiz | Bin 0 -> 4259 bytes
data/presets/ZynAddSubFX/Cormi_Sound/0004-Volo.xiz | Bin 0 -> 2430 bytes
.../ZynAddSubFX/Cormi_Sound/0006-Arpeggio_01.xiz | Bin 0 -> 2887 bytes
.../ZynAddSubFX/Cormi_Sound/0007-Arpeggio_02.xiz | Bin 0 -> 2061 bytes
.../ZynAddSubFX/Cormi_Sound/0008-Arpeggio_03.xiz | Bin 0 -> 5679 bytes
.../Cormi_Sound/0009-Glass Arpeggio2.xiz | Bin 0 -> 2177 bytes
.../ZynAddSubFX/Cormi_Sound/0011-abracadabra.xiz | Bin 0 -> 3006 bytes
.../ZynAddSubFX/Cormi_Sound/0012-Ghost Whistle.xiz | Bin 0 -> 2550 bytes
.../ZynAddSubFX/Cormi_Sound/0013-Spazio1.xiz | Bin 0 -> 1139 bytes
.../ZynAddSubFX/Cormi_Sound/0014-Spazio2.xiz | Bin 0 -> 1321 bytes
.../ZynAddSubFX/Cormi_Sound/0015-Space Synth.xiz | Bin 0 -> 2237 bytes
.../ZynAddSubFX/Cormi_Sound/0016-SpaceAtmo.xiz | Bin 0 -> 2232 bytes
.../Cormi_Sound/0017-friendly sines.xiz | Bin 0 -> 2407 bytes
.../ZynAddSubFX/Cormi_Sound/0019-Acquoso_1.xiz | Bin 0 -> 2679 bytes
.../ZynAddSubFX/Cormi_Sound/0020-Acquoso_5.xiz | Bin 0 -> 4325 bytes
.../ZynAddSubFX/Cormi_Sound/0021-Acquoso_6.xiz | Bin 0 -> 4127 bytes
.../ZynAddSubFX/Cormi_Sound/0023-Fagotto_01.xiz | Bin 0 -> 4023 bytes
.../ZynAddSubFX/Cormi_Sound/0024-Fagotto_02.xiz | Bin 0 -> 4115 bytes
.../ZynAddSubFX/Cormi_Sound/0025-Fagotto_03.xiz | Bin 0 -> 4276 bytes
.../ZynAddSubFX/Cormi_Sound/0027-Delicato_01.xiz | Bin 0 -> 3047 bytes
.../ZynAddSubFX/Cormi_Sound/0028-Delicato_02.xiz | Bin 0 -> 2408 bytes
.../ZynAddSubFX/Cormi_Sound/0029-Delicato_03.xiz | Bin 0 -> 6092 bytes
.../ZynAddSubFX/Cormi_Sound/0031-Wah_dolce_1.xiz | Bin 0 -> 2154 bytes
.../ZynAddSubFX/Cormi_Sound/0032-Wah_dolce_2.xiz | Bin 0 -> 2856 bytes
.../Cormi_Sound/0033-Long Space Choir 2.xiz | Bin 0 -> 1878 bytes
.../ZynAddSubFX/Cormi_Sound/0034-Choir Pad4.xiz | Bin 0 -> 1849 bytes
.../ZynAddSubFX/Cormi_Sound/0035-Ancient_Echos.xiz | Bin 0 -> 1286 bytes
.../ZynAddSubFX/Cormi_Sound/0036-Campane.xiz | Bin 0 -> 1973 bytes
.../ZynAddSubFX/Cormi_Sound/0037-Chorus.xiz | Bin 0 -> 1252 bytes
.../ZynAddSubFX/Cormi_Sound/0038-HellVoice.xiz | Bin 0 -> 2942 bytes
.../ZynAddSubFX/Cormi_Sound/0039-Chorus2.xiz | Bin 0 -> 4555 bytes
.../ZynAddSubFX/Cormi_Sound/0041-DarkNight.xiz | Bin 0 -> 4603 bytes
.../ZynAddSubFX/Cormi_Sound/0042-LightDawn.xiz | Bin 0 -> 5955 bytes
.../presets/ZynAddSubFX/Cormi_Sound/0043-Fiiuu.xiz | Bin 0 -> 3751 bytes
.../Cormi_Sound/0045-Spazio_profondo1.xiz | Bin 0 -> 3422 bytes
.../Cormi_Sound/0046-Spazio_Profondo2.xiz | Bin 0 -> 2297 bytes
.../Cormi_Sound/0047-Spazio_Profondo3.xiz | Bin 0 -> 2372 bytes
.../ZynAddSubFX/Cormi_Sound/0049-DolcePiano_01.xiz | Bin 0 -> 1752 bytes
.../ZynAddSubFX/Cormi_Sound/0050-DolcePiano_02.xiz | Bin 0 -> 2872 bytes
.../ZynAddSubFX/Cormi_Sound/0051-DolcePiano_03.xiz | Bin 0 -> 1773 bytes
.../ZynAddSubFX/Cormi_Sound/0053-Ding_01.xiz | Bin 0 -> 1898 bytes
.../ZynAddSubFX/Cormi_Sound/0054-Ding_02.xiz | Bin 0 -> 3902 bytes
.../ZynAddSubFX/Cormi_Sound/0056-Senza_tempo.xiz | Bin 0 -> 4247 bytes
.../ZynAddSubFX/Cormi_Sound/0057-Senza_tempo_2.xiz | Bin 0 -> 2362 bytes
.../ZynAddSubFX/Cormi_Sound/0058-Senza_tempo_3.xiz | Bin 0 -> 2234 bytes
.../ZynAddSubFX/Cormi_Sound/0059-Senza_tempo_4.xiz | Bin 0 -> 1277 bytes
.../ZynAddSubFX/Cormi_Sound/0060-Senza_tempo_5.xiz | Bin 0 -> 1477 bytes
.../ZynAddSubFX/Cormi_Sound/0062-Sospirato_01.xiz | Bin 0 -> 2014 bytes
.../ZynAddSubFX/Cormi_Sound/0063-Sospirato_02.xiz | Bin 0 -> 2205 bytes
.../ZynAddSubFX/Cormi_Sound/0064-Sospirato_03.xiz | Bin 0 -> 4931 bytes
.../Cormi_Sound/0065-Synth_piano_03.xiz | Bin 0 -> 1804 bytes
.../Cormi_Sound/0066-Synth_Piano_02.xiz | Bin 0 -> 1768 bytes
.../presets/ZynAddSubFX/Cormi_Sound/0068-Piano.xiz | Bin 0 -> 4087 bytes
.../ZynAddSubFX/Cormi_Sound/0069-Pianola.xiz | Bin 0 -> 5289 bytes
.../ZynAddSubFX/Cormi_Sound/0070-clavicembalo.xiz | Bin 0 -> 3826 bytes
.../ZynAddSubFX/Cormi_Sound/0072-Zufolo_1.xiz | Bin 0 -> 3620 bytes
.../ZynAddSubFX/Cormi_Sound/0073-Zufolo_2.xiz | Bin 0 -> 2329 bytes
.../ZynAddSubFX/Cormi_Sound/0074-Zufolo_3.xiz | Bin 0 -> 3153 bytes
.../ZynAddSubFX/Cormi_Sound/0075-Zufolo_4.xiz | Bin 0 -> 5900 bytes
.../ZynAddSubFX/Cormi_Sound/0076-Pinkollo.xiz | Bin 0 -> 1425 bytes
.../ZynAddSubFX/Cormi_Sound/0078-Tremulo_01.xiz | Bin 0 -> 2104 bytes
.../ZynAddSubFX/Cormi_Sound/0079-Tremulo_02.xiz | Bin 0 -> 2170 bytes
.../ZynAddSubFX/Cormi_Sound/0081-Organetto_01.xiz | Bin 0 -> 4625 bytes
.../ZynAddSubFX/Cormi_Sound/0082-Organetto_02.xiz | Bin 0 -> 4109 bytes
.../ZynAddSubFX/Cormi_Sound/0084-Organo_01.xiz | Bin 0 -> 2274 bytes
.../ZynAddSubFX/Cormi_Sound/0085-Organo_02.xiz | Bin 0 -> 1422 bytes
.../ZynAddSubFX/Cormi_Sound/0086-Organo_03.xiz | Bin 0 -> 2785 bytes
.../ZynAddSubFX/Cormi_Sound/0087-Harp 3.xiz | Bin 0 -> 3250 bytes
.../presets/ZynAddSubFX/Cormi_Sound/0088-Harp4.xiz | Bin 0 -> 2280 bytes
.../ZynAddSubFX/Cormi_Sound/0090-Dolcino_01.xiz | Bin 0 -> 3295 bytes
.../ZynAddSubFX/Cormi_Sound/0091-Dolcino_02.xiz | Bin 0 -> 6986 bytes
.../ZynAddSubFX/Cormi_Sound/0092-Dolcino_03.xiz | Bin 0 -> 1258 bytes
.../ZynAddSubFX/Cormi_Sound/0093-Dolcino_04.xiz | Bin 0 -> 4617 bytes
.../ZynAddSubFX/Cormi_Sound/0095-Accordian.xiz | Bin 0 -> 3447 bytes
.../ZynAddSubFX/Cormi_Sound/0096-padNice.xiz | Bin 0 -> 9259 bytes
data/presets/ZynAddSubFX/Cormi_Sound/0097-k.xiz | Bin 0 -> 2540 bytes
data/presets/ZynAddSubFX/Cormi_Sound/0098-z.xiz | Bin 0 -> 4201 bytes
data/presets/ZynAddSubFX/Cormi_Sound/0099-a.xiz | Bin 0 -> 3114 bytes
.../ZynAddSubFX/Cormi_Sound/0100-Steel Rhodes.xiz | Bin 0 -> 2689 bytes
.../ZynAddSubFX/Cormi_Sound/0101-Sweet_Night.xiz | Bin 0 -> 4075 bytes
.../ZynAddSubFX/Cormi_Sound/0102-Sweet_Night_2.xiz | Bin 0 -> 4129 bytes
.../presets/ZynAddSubFX/Cormi_Sound/0103-Gocce.xiz | Bin 0 -> 1071 bytes
.../ZynAddSubFX/Cormi_Sound/0104-Ice Rhodes2.xiz | Bin 0 -> 2284 bytes
.../ZynAddSubFX/Cormi_Sound/0105-Voluttuoso.xiz | Bin 0 -> 4308 bytes
.../ZynAddSubFX/Cormi_Sound/0106-Entropia.xiz | Bin 0 -> 2883 bytes
.../ZynAddSubFX/Cormi_Sound/0108-Arcano.xiz | Bin 0 -> 1405 bytes
.../ZynAddSubFX/Cormi_Sound/0109-Arcano2.xiz | Bin 0 -> 4173 bytes
.../ZynAddSubFX/Cormi_Sound/0110-Arcano3.xiz | Bin 0 -> 1209 bytes
.../ZynAddSubFX/Cormi_Sound/0112-Glass_01.xiz | Bin 0 -> 1840 bytes
.../ZynAddSubFX/Cormi_Sound/0113-Glass_02a.xiz | Bin 0 -> 2170 bytes
.../ZynAddSubFX/Cormi_Sound/0114-Glass_02b.xiz | Bin 0 -> 2169 bytes
.../ZynAddSubFX/Cormi_Sound/0115-Glass_03.xiz | Bin 0 -> 1347 bytes
.../ZynAddSubFX/Cormi_Sound/0116-Glass_04.xiz | Bin 0 -> 1233 bytes
.../ZynAddSubFX/Cormi_Sound/0119-Arcadia_1.xiz | Bin 0 -> 6879 bytes
.../ZynAddSubFX/Cormi_Sound/0120-Arcadia_2.xiz | Bin 0 -> 3611 bytes
.../ZynAddSubFX/Cormi_Sound/0121-Arcadia_3.xiz | Bin 0 -> 3522 bytes
.../ZynAddSubFX/Cormi_Sound/0122-Arcadia_4.xiz | Bin 0 -> 1785 bytes
.../ZynAddSubFX/Cormi_Sound/0124-Armonica.xiz | Bin 0 -> 2258 bytes
.../ZynAddSubFX/Cormi_Sound/0125-Fanfara.xiz | Bin 0 -> 4080 bytes
.../ZynAddSubFX/Cormi_Sound/0126-Polvere.xiz | Bin 0 -> 4745 bytes
.../ZynAddSubFX/Cormi_Sound/0127-Comb Filter.xiz | Bin 0 -> 2253 bytes
.../ZynAddSubFX/Cormi_Sound/0128-Synth Pad 5.xiz | Bin 0 -> 2485 bytes
.../presets/ZynAddSubFX/Cormi_Sound/0129-Bello.xiz | Bin 0 -> 3735 bytes
.../ZynAddSubFX/Cormi_Sound/0130-abbellimento.xiz | Bin 0 -> 1237 bytes
.../ZynAddSubFX/Cormi_Sound/0131-Carino.xiz | Bin 0 -> 1500 bytes
.../presets/ZynAddSubFX/Cormi_Sound/0132-Cigno.xiz | Bin 0 -> 2010 bytes
.../ZynAddSubFX/Cormi_Sound/0133-fluido.xiz | Bin 0 -> 5454 bytes
.../ZynAddSubFX/Cormi_Sound/0136-Romantico.xiz | Bin 0 -> 2031 bytes
.../ZynAddSubFX/Cormi_Sound/0137-Romantico2.xiz | Bin 0 -> 4742 bytes
.../ZynAddSubFX/Cormi_Sound/0138-romanticone.xiz | Bin 0 -> 2262 bytes
.../ZynAddSubFX/Cormi_Sound/0139-Emptyness3.xiz | Bin 0 -> 2061 bytes
.../ZynAddSubFX/Cormi_Sound/0140-Foglie.xiz | Bin 0 -> 1845 bytes
.../ZynAddSubFX/Cormi_Sound/0142-Solitudine.xiz | Bin 0 -> 5104 bytes
.../ZynAddSubFX/Cormi_Sound/0144-Inquietudine.xiz | Bin 0 -> 2073 bytes
data/presets/ZynAddSubFX/Cormi_Sound/0145-c.xiz | Bin 0 -> 3140 bytes
.../ZynAddSubFX/Cormi_Sound/0146-Ancestrale.xiz | Bin 0 -> 3651 bytes
.../ZynAddSubFX/Cormi_Sound/0147-Attesa.xiz | Bin 0 -> 3144 bytes
.../presets/ZynAddSubFX/Cormi_Sound/0148-vento.xiz | Bin 0 -> 2743 bytes
.../ZynAddSubFX/Cormi_Sound/0149-pioggia.xiz | Bin 0 -> 2135 bytes
.../ZynAddSubFX/Cormi_Sound/0150-nebbia.xiz | Bin 0 -> 2273 bytes
.../ZynAddSubFX/Cormi_Sound/0151-Memory.xiz | Bin 0 -> 2202 bytes
.../ZynAddSubFX/Cormi_Sound/0152-Memory2.xiz | Bin 0 -> 1981 bytes
.../ZynAddSubFX/Cormi_Sound/0153-Memory3.xiz | Bin 0 -> 2023 bytes
.../ZynAddSubFX/Cormi_Sound/0155-contorno.xiz | Bin 0 -> 3554 bytes
.../ZynAddSubFX/Cormi_Sound/0156-fantasia.xiz | Bin 0 -> 2261 bytes
.../ZynAddSubFX/Cormi_Sound/0157-nostalgia.xiz | Bin 0 -> 2461 bytes
.../ZynAddSubFX/Cormi_Sound/0158-patetico.xiz | Bin 0 -> 3761 bytes
.../ZynAddSubFX/Cormi_Sound/0159-Destino.xiz | Bin 0 -> 6390 bytes
data/presets/ZynAddSubFX/Cormi_Sound/ReadMe.txt | 27 +
.../ZynAddSubFX/Guitar/0065-Clean Guitar1.xiz | Bin 2009 -> 2013 bytes
.../ZynAddSubFX/Guitar/0066-Electric Guitar.xiz | Bin 0 -> 2456 bytes
.../ZynAddSubFX/Guitar/0097-Space Guitar.xiz | Bin 0 -> 2374 bytes
.../ZynAddSubFX/Laba170bank/0001-SquareToSine.xiz | Bin 0 -> 2243 bytes
.../ZynAddSubFX/Laba170bank/0002-GaussToSine.xiz | Bin 0 -> 2069 bytes
.../ZynAddSubFX/Laba170bank/0003-MorphingOrgan.xiz | Bin 0 -> 3651 bytes
.../ZynAddSubFX/Laba170bank/0004-ThinLead.xiz | Bin 0 -> 2029 bytes
.../ZynAddSubFX/Laba170bank/0005-BrightLead.xiz | Bin 0 -> 2332 bytes
.../ZynAddSubFX/Laba170bank/0006-GenericLead.xiz | Bin 0 -> 2220 bytes
.../Laba170bank/0007-MorphingSuperSaw.xiz | Bin 0 -> 2115 bytes
.../ZynAddSubFX/Laba170bank/0008-BrassyFlute.xiz | Bin 0 -> 1949 bytes
.../ZynAddSubFX/Laba170bank/0009-GenericLead2.xiz | Bin 0 -> 2293 bytes
.../ZynAddSubFX/Laba170bank/0027-ShortFlute.xiz | Bin 0 -> 2328 bytes
.../ZynAddSubFX/Laba170bank/0028-PianoBell.xiz | Bin 0 -> 1754 bytes
.../ZynAddSubFX/Laba170bank/0029-PianoHarp.xiz | Bin 0 -> 1735 bytes
.../ZynAddSubFX/Laba170bank/0030-ScaredPulse.xiz | Bin 0 -> 2042 bytes
.../ZynAddSubFX/Laba170bank/0031-Twang2.xiz | Bin 0 -> 1819 bytes
.../ZynAddSubFX/Laba170bank/0032-Twang1.xiz | Bin 0 -> 1760 bytes
.../ZynAddSubFX/Laba170bank/0037-FatPatch.xiz | Bin 0 -> 2752 bytes
.../Laba170bank/0038-FatPatchSimpler.xiz | Bin 0 -> 1774 bytes
.../Laba170bank/0039-FatPatchSimpler2.xiz | Bin 0 -> 1810 bytes
.../ZynAddSubFX/Laba170bank/0046-NoisyGuitar.xiz | Bin 0 -> 2298 bytes
.../ZynAddSubFX/Laba170bank/0047-NoisyGuitar2.xiz | Bin 0 -> 2397 bytes
.../ZynAddSubFX/Laba170bank/0048-NoisyGuitar3.xiz | Bin 0 -> 2408 bytes
.../Laba170bank/0049-guitar-PowerChorder.xiz | Bin 0 -> 2528 bytes
.../Laba170bank/0050-SynGuitarAcoustic1.xiz | Bin 0 -> 1843 bytes
.../Laba170bank/0051-SynGuitarAcoustic2.xiz | Bin 0 -> 1856 bytes
.../Laba170bank/0052-SynGuitarAcoustic3.xiz | Bin 0 -> 3330 bytes
.../ZynAddSubFX/Laba170bank/0054-DevilsFiddle.xiz | Bin 0 -> 2133 bytes
.../ZynAddSubFX/Laba170bank/0055-DevilsFiddle2.xiz | Bin 0 -> 2214 bytes
.../Laba170bank/0085-PanFluteSawPad.xiz | Bin 0 -> 2425 bytes
.../ZynAddSubFX/Laba170bank/0086-BlownPiano.xiz | Bin 0 -> 1900 bytes
.../ZynAddSubFX/Laba170bank/0087-ChoirPatch.xiz | Bin 0 -> 2484 bytes
.../ZynAddSubFX/Laba170bank/0088-InfraSoundPad.xiz | Bin 0 -> 2362 bytes
.../ZynAddSubFX/Laba170bank/0089-InfraSound2.xiz | Bin 0 -> 1735 bytes
.../Laba170bank/0090-Pad-RingModSine.xiz | Bin 0 -> 2535 bytes
.../ZynAddSubFX/Laba170bank/0091-FatPad.xiz | Bin 0 -> 3605 bytes
.../ZynAddSubFX/Laba170bank/0092-VibratingPad.xiz | Bin 0 -> 2419 bytes
.../ZynAddSubFX/Laba170bank/0097-AnalogBass.xiz | Bin 0 -> 2484 bytes
.../ZynAddSubFX/Laba170bank/0098-DoublePadBass.xiz | Bin 0 -> 2308 bytes
.../ZynAddSubFX/Laba170bank/0099-SharpBass1.xiz | Bin 0 -> 4374 bytes
.../ZynAddSubFX/Laba170bank/0100-SharpBass4.xiz | Bin 0 -> 2791 bytes
.../ZynAddSubFX/Laba170bank/0101-SharpBass5.xiz | Bin 0 -> 4384 bytes
.../Laba170bank/0102-PluckedWithTailBassy.xiz | Bin 0 -> 2436 bytes
.../Laba170bank/0103-PluckedAnalogBass.xiz | Bin 0 -> 2561 bytes
.../Laba170bank/0108-NoisyPulseLead.xiz | Bin 0 -> 2105 bytes
.../Laba170bank/0109-NoisyPulseLead2.xiz | Bin 0 -> 2033 bytes
.../ZynAddSubFX/Laba170bank/0110-wierdSchwoop.xiz | Bin 0 -> 1756 bytes
.../ZynAddSubFX/Laba170bank/0111-PoorAccordion.xiz | Bin 0 -> 4010 bytes
.../ZynAddSubFX/Laba170bank/0112-PoorTrumpet.xiz | Bin 0 -> 2902 bytes
.../ZynAddSubFX/Laba170bank/0113-BassyChirp.xiz | Bin 0 -> 2103 bytes
.../ZynAddSubFX/Laba170bank/0114-hoarseorgan.xiz | Bin 0 -> 1828 bytes
.../ZynAddSubFX/Laba170bank/0115-MysticlBells.xiz | Bin 0 -> 2307 bytes
.../Laba170bank/0129-chip-SlowSawStrings.xiz | Bin 0 -> 1765 bytes
.../Laba170bank/0130-chip-SIDarpSoft.xiz | Bin 0 -> 2661 bytes
.../Laba170bank/0131-chip-SIDarpSharp.xiz | Bin 0 -> 4039 bytes
.../Laba170bank/0132-chip-SIDarpSharp2.xiz | Bin 0 -> 2380 bytes
.../ZynAddSubFX/Laba170bank/0133-chip-HarshSaw.xiz | Bin 0 -> 2433 bytes
.../Laba170bank/0134-chip-VibratoLead.xiz | Bin 0 -> 4003 bytes
.../Laba170bank/0135-chip-VibratoLead2.xiz | Bin 0 -> 3921 bytes
.../Laba170bank/0136-chip-PWM-VibratoLead.xiz | Bin 0 -> 3508 bytes
.../Laba170bank/0137-chip-PolyDistorted.xiz | Bin 0 -> 2309 bytes
.../Laba170bank/0138-chip-PolyDistorted2.xiz | Bin 0 -> 2116 bytes
.../Laba170bank/0146-PluckedWithVibTail.xiz | Bin 0 -> 2727 bytes
.../Laba170bank/0147-PluckedWithTail2.xiz | Bin 0 -> 2261 bytes
.../Laba170bank/0148-PluckedWithTail.xiz | Bin 0 -> 3786 bytes
.../ZynAddSubFX/Laba170bank/descriptions.txt | 8 +
data/presets/ZynAddSubFX/Misc/0005-Bells 4.xiz | Bin 0 -> 1804 bytes
.../ZynAddSubFX/Misc/0036-Trash Synth 4.xiz | Bin 0 -> 2150 bytes
data/presets/ZynAddSubFX/Misc/0065-SuperSaw 1.xiz | Bin 0 -> 2020 bytes
data/presets/ZynAddSubFX/Misc/0066-SuperSaw 2.xiz | Bin 0 -> 2094 bytes
data/presets/ZynAddSubFX/Misc/0067-SuperSaw 3.xiz | Bin 0 -> 2035 bytes
data/presets/ZynAddSubFX/Misc/0068-SuperSaw 4.xiz | Bin 0 -> 2152 bytes
data/presets/ZynAddSubFX/Misc/0069-SuperSaw 5.xiz | Bin 0 -> 1753 bytes
data/presets/ZynAddSubFX/Misc/0070-SuperSaw 6.xiz | Bin 0 -> 1747 bytes
data/presets/ZynAddSubFX/Organ/0012-Organ 12.xiz | Bin 0 -> 2069 bytes
.../ZynAddSubFX/Organ/0040-Church Organ 4.xiz | Bin 0 -> 1939 bytes
data/presets/ZynAddSubFX/Pads/0034-Synth Pad 2.xiz | Bin 1757 -> 1791 bytes
data/presets/ZynAddSubFX/Pads/0037-Synth Pad 5.xiz | Bin 0 -> 1782 bytes
data/presets/ZynAddSubFX/Pads/0097-Bell Pad.xiz | Bin 0 -> 1785 bytes
.../ZynAddSubFX/Plucked/0065-Plucked Pad1.xiz | Bin 0 -> 1775 bytes
.../ZynAddSubFX/ReedAndWind/0040-Reed 8.xiz | Bin 0 -> 2785 bytes
.../ReedAndWind/0068-Chorused Flute.xiz | Bin 0 -> 2316 bytes
.../ZynAddSubFX/Rhodes/0034-FM Rhodes 2.xiz | Bin 2111 -> 2702 bytes
.../presets/ZynAddSubFX/Rhodes/0067-RhodesPad1.xiz | Bin 0 -> 1925 bytes
.../presets/ZynAddSubFX/Rhodes/0068-RhodesPad2.xiz | Bin 0 -> 1890 bytes
.../Splitted/0001-Strings and Reed1.xiz | Bin 0 -> 4170 bytes
.../Splitted/0002-Strings and Reed2.xiz | Bin 0 -> 4202 bytes
.../Splitted/0003-Strings and Flute.xiz | Bin 0 -> 3368 bytes
.../ZynAddSubFX/Splitted/0033-Choir and Reed.xiz | Bin 0 -> 5546 bytes
.../ZynAddSubFX/Strings/0010-Strings Pad1.xiz | Bin 0 -> 1716 bytes
.../ZynAddSubFX/Strings/0011-Strings Pad2.xiz | Bin 0 -> 1726 bytes
.../ZynAddSubFX/Strings/0012-Strings Pad3.xiz | Bin 0 -> 1726 bytes
.../ZynAddSubFX/Strings/0013-Strings Pad4.xiz | Bin 0 -> 1783 bytes
.../ZynAddSubFX/Strings/0014-Strings Pad5.xiz | Bin 0 -> 1899 bytes
.../ZynAddSubFX/Strings/0015-Strings Pad6.xiz | Bin 0 -> 1781 bytes
.../ZynAddSubFX/Strings/0066-Dual Strings.xiz | Bin 2469 -> 2468 bytes
.../ZynAddSubFX/Strings/0067-Dual Strings Oct1.xiz | Bin 0 -> 2505 bytes
.../ZynAddSubFX/Strings/0068-Dual Strings Oct2.xiz | Bin 0 -> 2502 bytes
.../ZynAddSubFX/Strings/0073-Morph Strings1.xiz | Bin 0 -> 2100 bytes
.../presets/ZynAddSubFX/Synth/0006-Pulse Pad 3.xiz | Bin 0 -> 1912 bytes
.../ZynAddSubFX/Synth/0065-Computer Lead1.xiz | Bin 0 -> 1800 bytes
.../ZynAddSubFX/Synth/0066-Computer Lead2.xiz | Bin 0 -> 2009 bytes
.../ZynAddSubFX/Synth/0070-Solo Synth 1.xiz | Bin 0 -> 2107 bytes
.../ZynAddSubFX/SynthPiano/0043-Saw Piano 1.xiz | Bin 0 -> 1779 bytes
.../ZynAddSubFX/olivers-100/0001-Folk Flute.xiz | Bin 0 -> 2247 bytes
.../ZynAddSubFX/olivers-100/0002-Bamboo Flute.xiz | Bin 0 -> 2391 bytes
.../ZynAddSubFX/olivers-100/0003-FM Flute.xiz | Bin 0 -> 2287 bytes
.../olivers-100/0004-Triple Osc Flute.xiz | Bin 0 -> 2104 bytes
.../olivers-100/0005-Soprano Double Reed.xiz | Bin 0 -> 2070 bytes
.../ZynAddSubFX/olivers-100/0006-FM Saxophone.xiz | Bin 0 -> 3164 bytes
.../olivers-100/0007-FM Saxophone 2.xiz | Bin 0 -> 3993 bytes
.../ZynAddSubFX/olivers-100/0008-Concertina.xiz | Bin 0 -> 3220 bytes
.../ZynAddSubFX/olivers-100/0009-FM Brass 1.xiz | Bin 0 -> 3929 bytes
.../ZynAddSubFX/olivers-100/0010-FM Brass 2.xiz | Bin 0 -> 4116 bytes
.../ZynAddSubFX/olivers-100/0011-FM Brass 3.xiz | Bin 0 -> 3954 bytes
.../ZynAddSubFX/olivers-100/0013-Soft Guitar.xiz | Bin 0 -> 3900 bytes
.../olivers-100/0014-Dist Jazz Guitar.xiz | Bin 0 -> 3453 bytes
.../olivers-100/0015-Dist Jazz Guitar 2.xiz | Bin 0 -> 3650 bytes
.../ZynAddSubFX/olivers-100/0016-Banjoey.xiz | Bin 0 -> 3658 bytes
.../ZynAddSubFX/olivers-100/0017-Bass Guitar.xiz | Bin 0 -> 3663 bytes
.../olivers-100/0018-Bass Guitar - Slap.xiz | Bin 0 -> 3745 bytes
.../ZynAddSubFX/olivers-100/0019-FM Sitar.xiz | Bin 0 -> 3452 bytes
.../ZynAddSubFX/olivers-100/0021-EP - Twangy.xiz | Bin 0 -> 3138 bytes
.../ZynAddSubFX/olivers-100/0022-EP - Muted.xiz | Bin 0 -> 3431 bytes
.../ZynAddSubFX/olivers-100/0023-EP - Brighter.xiz | Bin 0 -> 3165 bytes
.../ZynAddSubFX/olivers-100/0024-Far Out EP.xiz | Bin 0 -> 2598 bytes
.../ZynAddSubFX/olivers-100/0025-Clavinoid.xiz | Bin 0 -> 6850 bytes
.../ZynAddSubFX/olivers-100/0026-Harpsichord.xiz | Bin 0 -> 5203 bytes
.../ZynAddSubFX/olivers-100/0027-Toy Piano.xiz | Bin 0 -> 1723 bytes
.../ZynAddSubFX/olivers-100/0028-Mallets.xiz | Bin 0 -> 1684 bytes
.../ZynAddSubFX/olivers-100/0029-Steel Drums.xiz | Bin 0 -> 2185 bytes
.../olivers-100/0030-Balinese Chimes.xiz | Bin 0 -> 1874 bytes
.../olivers-100/0031-Muffled Chimes.xiz | Bin 0 -> 1647 bytes
.../ZynAddSubFX/olivers-100/0032-Drum Kit.xiz | Bin 0 -> 10105 bytes
.../ZynAddSubFX/olivers-100/0033-Big Crunchy.xiz | Bin 0 -> 1981 bytes
.../ZynAddSubFX/olivers-100/0034-Big Flangey.xiz | Bin 0 -> 1855 bytes
.../ZynAddSubFX/olivers-100/0035-Numanesque.xiz | Bin 0 -> 1993 bytes
.../ZynAddSubFX/olivers-100/0036-240 Grit Lead.xiz | Bin 0 -> 2528 bytes
.../ZynAddSubFX/olivers-100/0037-320 Grit Lead.xiz | Bin 0 -> 2284 bytes
.../olivers-100/0038-Gentle Triangle Lead.xiz | Bin 0 -> 1778 bytes
.../olivers-100/0039-Sliding Squares Lead.xiz | Bin 0 -> 1776 bytes
.../ZynAddSubFX/olivers-100/0040-Pheasant Lead.xiz | Bin 0 -> 1708 bytes
.../ZynAddSubFX/olivers-100/0041-Plinker Bell.xiz | Bin 0 -> 1925 bytes
.../ZynAddSubFX/olivers-100/0042-Low pH Lead.xiz | Bin 0 -> 1765 bytes
.../olivers-100/0043-Hovabotalilfanfeer.xiz | Bin 0 -> 1963 bytes
.../ZynAddSubFX/olivers-100/0044-Muted Fanfare.xiz | Bin 0 -> 1950 bytes
.../olivers-100/0045-Bink Bink Lead.xiz | Bin 0 -> 1920 bytes
.../olivers-100/0046-Bogus PWM Lead.xiz | Bin 0 -> 1807 bytes
.../olivers-100/0047-Dirty Vibrato Lead.xiz | Bin 0 -> 1737 bytes
.../ZynAddSubFX/olivers-100/0048-Wichita Whoop.xiz | Bin 0 -> 1904 bytes
.../olivers-100/0049-Bitey Triangle Lead.xiz | Bin 0 -> 1889 bytes
.../olivers-100/0050-70s Triangle Lead.xiz | Bin 0 -> 1927 bytes
.../olivers-100/0051-Agro Odds Lead.xiz | Bin 0 -> 1845 bytes
.../olivers-100/0052-Soft Synth Brass.xiz | Bin 0 -> 1805 bytes
.../olivers-100/0054-Funky Reso Bass.xiz | Bin 0 -> 1837 bytes
.../olivers-100/0055-ssaB oseR yknuF.xiz | Bin 0 -> 1812 bytes
.../olivers-100/0056-Creeky Reso Base.xiz | Bin 0 -> 1780 bytes
.../ZynAddSubFX/olivers-100/0057-Synth Bass.xiz | Bin 0 -> 1740 bytes
.../olivers-100/0058-Basic Thick Bass.xiz | Bin 0 -> 1796 bytes
.../olivers-100/0059-Dirt Encrusted Bass.xiz | Bin 0 -> 1908 bytes
.../ZynAddSubFX/olivers-100/0060-Punch Bass.xiz | Bin 0 -> 1920 bytes
.../ZynAddSubFX/olivers-100/0061-Formant Bass.xiz | Bin 0 -> 4716 bytes
.../ZynAddSubFX/olivers-100/0065-Osiris Pad.xiz | Bin 0 -> 1880 bytes
.../ZynAddSubFX/olivers-100/0066-Phased Pad.xiz | Bin 0 -> 2330 bytes
.../ZynAddSubFX/olivers-100/0067-Growing Pad.xiz | Bin 0 -> 1711 bytes
.../olivers-100/0068-Vintage Sweep Pad.xiz | Bin 0 -> 1756 bytes
.../olivers-100/0069-Mellow Echo Pad.xiz | Bin 0 -> 1772 bytes
.../olivers-100/0070-Flanged Wind Pad.xiz | Bin 0 -> 2101 bytes
.../ZynAddSubFX/olivers-100/0071-Warble Pad.xiz | Bin 0 -> 1883 bytes
.../olivers-100/0072-Organz from Outta Space.xiz | Bin 0 -> 1860 bytes
.../ZynAddSubFX/olivers-100/0073-Shimmer Swell.xiz | Bin 0 -> 1965 bytes
.../ZynAddSubFX/olivers-100/0074-80s Poly 5ths.xiz | Bin 0 -> 1818 bytes
.../ZynAddSubFX/olivers-100/0075-Swell 5ths.xiz | Bin 0 -> 1823 bytes
.../ZynAddSubFX/olivers-100/0076-Vastness 5ths.xiz | Bin 0 -> 1824 bytes
.../olivers-100/0077-Celestial 5ths.xiz | Bin 0 -> 2016 bytes
.../ZynAddSubFX/olivers-100/0078-Supersaw Snit.xiz | Bin 0 -> 1863 bytes
.../olivers-100/0079-Subtle Supersaw Strings.xiz | Bin 0 -> 1969 bytes
.../ZynAddSubFX/olivers-100/0080-Jarre Strings.xiz | Bin 0 -> 1803 bytes
.../olivers-100/0081-Phased String Machine.xiz | Bin 0 -> 2215 bytes
.../olivers-100/0082-Tronic Strings.xiz | Bin 0 -> 2674 bytes
.../ZynAddSubFX/olivers-100/0083-Tronic Voices.xiz | Bin 0 -> 2849 bytes
.../olivers-100/0084-Welcome to the 80s.xiz | Bin 0 -> 1782 bytes
.../olivers-100/0085-Bright 80s Horn Stab.xiz | Bin 0 -> 1750 bytes
.../olivers-100/0086-Star Voyage Pad.xiz | Bin 0 -> 2565 bytes
.../ZynAddSubFX/olivers-100/0087-Breathy Too.xiz | Bin 0 -> 2023 bytes
.../olivers-100/0088-Outer Galaxy Pad.xiz | Bin 0 -> 2640 bytes
.../olivers-100/0090-Vintage Unison.xiz | Bin 0 -> 3135 bytes
.../ZynAddSubFX/olivers-100/0091-Breezy Chord.xiz | Bin 0 -> 1993 bytes
.../ZynAddSubFX/olivers-100/0092-Airy Chord.xiz | Bin 0 -> 1763 bytes
.../ZynAddSubFX/olivers-100/0093-Chimey Chord.xiz | Bin 0 -> 1847 bytes
.../olivers-100/0094-Donk Donk Chord.xiz | Bin 0 -> 1617 bytes
.../ZynAddSubFX/olivers-100/0097-Passing Comet.xiz | Bin 0 -> 1741 bytes
.../olivers-100/0098-Sweepy Noisy Pulses.xiz | Bin 0 -> 1818 bytes
.../olivers-100/0099-Robot Overlords.xiz | Bin 0 -> 1830 bytes
.../olivers-100/0100-Scrubbed Launch.xiz | Bin 0 -> 1839 bytes
.../olivers-100/0101-Alien Lawnmower.xiz | Bin 0 -> 2141 bytes
.../ZynAddSubFX/olivers-100/0102-RacecaR.xiz | Bin 0 -> 2128 bytes
.../olivers-100/0103-Electric Swell.xiz | Bin 0 -> 2062 bytes
.../olivers-100/0104-Classic FM Twang.xiz | Bin 0 -> 1862 bytes
.../ZynAddSubFX/olivers-100/0105-Ominosity.xiz | Bin 0 -> 2018 bytes
.../olivers-100/0106-Unpleasantly Drunk.xiz | Bin 0 -> 2041 bytes
.../olivers-100/0107-Hammering Metal.xiz | Bin 0 -> 2067 bytes
.../olivers-100/0108-Boiling Cauldron.xiz | Bin 0 -> 2697 bytes
.../ZynAddSubFX/olivers-100/0109-Crickets.xiz | Bin 0 -> 1710 bytes
data/presets/ZynAddSubFX/olivers-100/README | 13 +
.../presets/ZynAddSubFX/olivers-100/lead-combi.xmz | Bin 0 -> 2864 bytes
.../ZynAddSubFX/olivers-100/organ-combi.xmz | Bin 0 -> 4023 bytes
.../the_mysterious_bank/0001-strings_pad.xiz | Bin 0 -> 1909 bytes
.../the_mysterious_bank/0002-analog_strings.xiz | Bin 0 -> 1883 bytes
.../0003-smooth_strings_pad.xiz | Bin 0 -> 1800 bytes
.../0004-trance_strings_pad.xiz | Bin 0 -> 1912 bytes
.../the_mysterious_bank/0005-mega_string.xiz | Bin 0 -> 1878 bytes
.../ZynAddSubFX/the_mysterious_bank/0007-bass.xiz | Bin 0 -> 2096 bytes
.../ZynAddSubFX/the_mysterious_bank/0008-bass2.xiz | Bin 0 -> 1887 bytes
.../the_mysterious_bank/0009-agressive_bass.xiz | Bin 0 -> 2366 bytes
.../the_mysterious_bank/0010-synth_bass.xiz | Bin 0 -> 1872 bytes
.../the_mysterious_bank/0011-synth_bass_fat.xiz | Bin 0 -> 1884 bytes
.../the_mysterious_bank/0013-supersaw.xiz | Bin 0 -> 1887 bytes
.../0014-supersaw_wihout_release.xiz | Bin 0 -> 1896 bytes
.../the_mysterious_bank/0015-superpulse.xiz | Bin 0 -> 1974 bytes
.../the_mysterious_bank/0016-sine_pad.xiz | Bin 0 -> 1889 bytes
.../the_mysterious_bank/0018-organ1.xiz | Bin 0 -> 1932 bytes
.../the_mysterious_bank/0020-pulse_organ.xiz | Bin 0 -> 1970 bytes
.../0021-rock_organ+distorsion.xiz | Bin 0 -> 2116 bytes
.../the_mysterious_bank/0022-rock_organ.xiz | Bin 0 -> 2017 bytes
.../the_mysterious_bank/0023-space_organ.xiz | Bin 0 -> 2191 bytes
.../the_mysterious_bank/0024-space_organ2.xiz | Bin 0 -> 2052 bytes
.../the_mysterious_bank/0026-bell_pad.xiz | Bin 0 -> 1929 bytes
.../the_mysterious_bank/0027-inna_bell_like.xiz | Bin 0 -> 2024 bytes
.../the_mysterious_bank/0029-hard_pulse.xiz | Bin 0 -> 1871 bytes
.../0030-power_pulsions_lead.xiz | Bin 0 -> 2041 bytes
.../the_mysterious_bank/0031-wah_sine.xiz | Bin 0 -> 2060 bytes
.../ZynAddSubFX/the_mysterious_bank/0032-.xiz | Bin 0 -> 1891 bytes
.../the_mysterious_bank/0034-alert_!.xiz | Bin 0 -> 1798 bytes
.../the_mysterious_bank/0035-alarm2.xiz | Bin 0 -> 1807 bytes
.../the_mysterious_bank/0036-glitch.xiz | Bin 0 -> 2032 bytes
.../the_mysterious_bank/0037-the_rain.xiz | Bin 0 -> 2171 bytes
.../0038-the_starting_machine.xiz | Bin 0 -> 1936 bytes
.../the_mysterious_bank/0039-thunder.xiz | Bin 0 -> 1897 bytes
.../presets/ZynAddSubFX/the_mysterious_bank/README | 4 +
.../the_mysterious_bank_2/0001-analog strings.xiz | Bin 0 -> 1961 bytes
.../the_mysterious_bank_2/0003-fingered_bass.xiz | Bin 0 -> 1982 bytes
.../the_mysterious_bank_2/0004-synth_bass.xiz | Bin 0 -> 2018 bytes
.../the_mysterious_bank_2/0005-synth_bass_2.xiz | Bin 0 -> 2012 bytes
.../the_mysterious_bank_2/0006-synth_bass_3.xiz | Bin 0 -> 1975 bytes
.../the_mysterious_bank_2/0007-synth_bass_4.xiz | Bin 0 -> 1900 bytes
.../the_mysterious_bank_2/0009-organ1.xiz | Bin 0 -> 1849 bytes
.../the_mysterious_bank_2/0010-organ2.xiz | Bin 0 -> 1948 bytes
.../the_mysterious_bank_2/0011-organ3.xiz | Bin 0 -> 1950 bytes
.../the_mysterious_bank_2/0012-church_organ.xiz | Bin 0 -> 2047 bytes
.../the_mysterious_bank_2/0014-synth_bell.xiz | Bin 0 -> 1966 bytes
.../the_mysterious_bank_2/0015-rhodes1.xiz | Bin 0 -> 2163 bytes
.../0016-pseudo_steeldrums.xiz | Bin 0 -> 2046 bytes
.../the_mysterious_bank_2/0017-musicbox.xiz | Bin 0 -> 2045 bytes
.../the_mysterious_bank_2/0019-sine_pad.xiz | Bin 0 -> 2033 bytes
.../the_mysterious_bank_2/0020-sine_pad2.xiz | Bin 0 -> 1884 bytes
.../the_mysterious_bank_2/0021-power_dnb.xiz | Bin 0 -> 2054 bytes
.../the_mysterious_bank_2/0022-fantasy_choir.xiz | Bin 0 -> 1236 bytes
.../0023-heavy_metal_guitar.xiz | Bin 0 -> 2059 bytes
.../the_mysterious_bank_2/0024-synth_flute.xiz | Bin 0 -> 1954 bytes
.../the_mysterious_bank_2/0026-kick.xiz | Bin 0 -> 1836 bytes
.../the_mysterious_bank_2/0027-hithat.xiz | Bin 0 -> 1275 bytes
.../the_mysterious_bank_2/0028-snare.xiz | Bin 0 -> 1912 bytes
.../the_mysterious_bank_2/0030-canyon_wind.xiz | Bin 0 -> 2568 bytes
.../the_mysterious_bank_2/0031-etrange_sound.xiz | Bin 0 -> 2472 bytes
.../the_mysterious_bank_2/0032-mega_alert.xiz | Bin 0 -> 1971 bytes
.../the_mysterious_bank_2/0033-new_glitch.xiz | Bin 0 -> 2214 bytes
.../the_mysterious_bank_2/0034-radio.xiz | Bin 0 -> 1828 bytes
.../the_mysterious_bank_2/0035-the_drunk_world.xiz | Bin 0 -> 1924 bytes
.../ZynAddSubFX/the_mysterious_bank_2/0036-ufo.xiz | Bin 0 -> 2168 bytes
.../the_mysterious_bank_2/0037-ufo2.xiz | Bin 0 -> 2175 bytes
.../the_mysterious_bank_2/0038-8_bit_car.xiz | Bin 0 -> 1845 bytes
.../the_mysterious_bank_3/0001-soft_strings.xiz | Bin 0 -> 1728 bytes
.../the_mysterious_bank_3/0002-sines_pad.xiz | Bin 0 -> 2015 bytes
.../the_mysterious_bank_3/0003-at_saturnus.xiz | Bin 0 -> 2289 bytes
.../the_mysterious_bank_3/0004-echoes.xiz | Bin 0 -> 2128 bytes
.../the_mysterious_bank_3/0005-echoes2.xiz | Bin 0 -> 2249 bytes
.../the_mysterious_bank_3/0007-compad.xiz | Bin 0 -> 1880 bytes
.../the_mysterious_bank_3/0008-padding.xiz | Bin 0 -> 1875 bytes
.../the_mysterious_bank_3/0009-res_pad.xiz | Bin 0 -> 1951 bytes
.../the_mysterious_bank_3/0010-supersaw.xiz | Bin 0 -> 1723 bytes
.../the_mysterious_bank_3/0011-portal2_lead.xiz | Bin 0 -> 1963 bytes
.../the_mysterious_bank_3/0013-fantasy_bell.xiz | Bin 0 -> 2393 bytes
.../the_mysterious_bank_3/0014-dreaming_bells.xiz | Bin 0 -> 2117 bytes
.../0015-dreaming_bells_dnb.xiz | Bin 0 -> 2118 bytes
.../the_mysterious_bank_3/0016-mega_bell.xiz | Bin 0 -> 2000 bytes
.../the_mysterious_bank_3/0017-in_the_space.xiz | Bin 0 -> 1550 bytes
.../the_mysterious_bank_3/0019-a_bass.xiz | Bin 0 -> 1958 bytes
.../the_mysterious_bank_3/0020-synth_bass.xiz | Bin 0 -> 3557 bytes
.../the_mysterious_bank_3/0021-synth_bass_2.xiz | Bin 0 -> 2147 bytes
.../the_mysterious_bank_3/0022-synth_bass_3.xiz | Bin 0 -> 1800 bytes
.../the_mysterious_bank_3/0023-dnb_bass.xiz | Bin 0 -> 2087 bytes
.../the_mysterious_bank_3/0024-fat_dnb_bass.xiz | Bin 0 -> 1906 bytes
.../the_mysterious_bank_3/0026-cool_organ.xiz | Bin 0 -> 2062 bytes
.../the_mysterious_bank_3/0027-cool_organ2.xiz | Bin 0 -> 2052 bytes
.../the_mysterious_bank_3/0029-new_arpeggio_3.xiz | Bin 0 -> 2149 bytes
.../the_mysterious_bank_3/0030-from_new_arp3.xiz | Bin 0 -> 2372 bytes
.../the_mysterious_bank_3/0032-ufo_blues.xiz | Bin 0 -> 1959 bytes
.../the_mysterious_bank_3/0033-ufo_funk.xiz | Bin 0 -> 2138 bytes
.../the_mysterious_bank_3/0034-synth_guitar.xiz | Bin 0 -> 2157 bytes
.../0035-taped_instrument.xiz | Bin 0 -> 1091 bytes
.../the_mysterious_bank_3/0037-computer.xiz | Bin 0 -> 1965 bytes
.../the_mysterious_bank_3/0038-falling_stars.xiz | Bin 0 -> 2284 bytes
.../the_mysterious_bank_3/0039-real_glitch.xiz | Bin 0 -> 1930 bytes
.../the_mysterious_bank_4/0001-res_strings_pad.xiz | Bin 0 -> 1999 bytes
.../the_mysterious_bank_4/0002-another_respad.xiz | Bin 0 -> 1957 bytes
.../the_mysterious_bank_4/0003-strings_pad.xiz | Bin 0 -> 1779 bytes
.../the_mysterious_bank_4/0004-strings_pad_2.xiz | Bin 0 -> 1856 bytes
.../the_mysterious_bank_4/0005-synth_strings.xiz | Bin 0 -> 1889 bytes
.../0007-from_another_space.xiz | Bin 0 -> 1969 bytes
.../0008-from_another_galaxy.xiz | Bin 0 -> 2052 bytes
.../0009-from_another_planet.xiz | Bin 0 -> 2159 bytes
.../the_mysterious_bank_4/0010-unamed_pad.xiz | Bin 0 -> 2520 bytes
.../the_mysterious_bank_4/0011-arpeggio1.xiz | Bin 0 -> 2116 bytes
.../the_mysterious_bank_4/0013-metal_bell.xiz | Bin 0 -> 1936 bytes
.../the_mysterious_bank_4/0014-bell.xiz | Bin 0 -> 1951 bytes
.../the_mysterious_bank_4/0015-belly.xiz | Bin 0 -> 1992 bytes
.../the_mysterious_bank_4/0016-sine_pad.xiz | Bin 0 -> 1940 bytes
.../the_mysterious_bank_4/0017-wil_aow_space.xiz | Bin 0 -> 2289 bytes
.../the_mysterious_bank_4/0019-bass_pad.xiz | Bin 0 -> 1960 bytes
.../the_mysterious_bank_4/0020-bass_pad_fat.xiz | Bin 0 -> 1999 bytes
.../the_mysterious_bank_4/0021-synth_bass.xiz | Bin 0 -> 2016 bytes
.../the_mysterious_bank_4/0022-synth_bass_2.xiz | Bin 0 -> 2208 bytes
.../the_mysterious_bank_4/0023-hard_bass.xiz | Bin 0 -> 2195 bytes
.../0024-pseudo_doublebass.xiz | Bin 0 -> 2174 bytes
.../the_mysterious_bank_4/0025-synth_bass_3.xiz | Bin 0 -> 2302 bytes
.../the_mysterious_bank_4/0027-funky_lead.xiz | Bin 0 -> 2015 bytes
.../the_mysterious_bank_4/0028-daft_punk_lead.xiz | Bin 0 -> 2051 bytes
.../the_mysterious_bank_4/0029-synth_guitar.xiz | Bin 0 -> 2122 bytes
.../the_mysterious_bank_4/0031-rhodes.xiz | Bin 0 -> 1985 bytes
.../the_mysterious_bank_4/0032-rhodes_2.xiz | Bin 0 -> 2251 bytes
.../the_mysterious_bank_4/0033-80s_rhodes.xiz | Bin 0 -> 2167 bytes
.../the_mysterious_bank_4/0035-organ.xiz | Bin 0 -> 2085 bytes
.../0036-organ_not_distorted.xiz | Bin 0 -> 2027 bytes
.../the_mysterious_bank_4/0037-old_organ.xiz | Bin 0 -> 1900 bytes
.../the_mysterious_bank_4/0039-jazz_guitar.xiz | Bin 0 -> 1811 bytes
.../CapDan-ZeroSumGame-OriginalByZakarra.mmpz | Bin 43435 -> 0 bytes
.../CapDan-TwilightArea-OriginalByAlf42red.mmpz | Bin
.../CapDan-ZeroSumGame-OriginalByZakarra.mmpz | Bin 0 -> 43494 bytes
data/projects/CoolSongs/LICENSES.TXT | 38 +-
.../projects/CoolSongs/Popsip-Electric Dancer.mmpz | Bin 0 -> 25916 bytes
.../CoolSongs/{ => Skiessi}/Skiessi-Onion.mmpz | Bin
.../Skiessi/Skiessi-RandomProjectNumber14253.mmpz | Bin 0 -> 18421 bytes
.../{ => Skiessi}/Skiessi-TurningPoint.mmpz | Bin
data/projects/CoolSongs/TobyDox-Psycho.mmpz | Bin 0 -> 6185 bytes
.../{ => Zakarra}/Zakarra-59_Degrees.mmpz | Bin
.../{ => Zakarra}/Zakarra-MainstreamMemory.mmpz | Bin
.../CoolSongs/{ => Zakarra}/Zakarra-OneDay.mmpz | Bin
data/projects/Demos/LICENSES.TXT | 12 +-
data/projects/OldStuff/BlueWolf-DreamTravel.mmp | 883 --
data/projects/OldStuff/Chris-HorizonRemix.mmp | 1328 --
data/projects/OldStuff/Malex-Horizon4.mmp | 639 -
data/projects/OldStuff/MysthR-Living.mmpz | Bin 11108 -> 0 bytes
data/projects/OldStuff/Siegel-DreamWave.mmp | 1204 --
data/projects/OldStuff/Siegel-SpeedTrack.mmp | 671 -
data/projects/OldStuff/Silva-ElvesCall.mmp | 890 --
.../OldStuff/Skiessi-RandomProjectNumber14253.mmpz | Bin 18311 -> 0 bytes
data/projects/OldStuff/TobyDox-Confused.mmp | 929 --
data/projects/OldStuff/TobyDox-Psycho.mmp | 1044 --
data/projects/Shorties/LICENSES.TXT | 8 +-
data/scripts/create_apple_dmg.sh.in | 3 +-
data/themes/default/background_artwork.png | Bin 989 -> 689 bytes
data/themes/default/fader_background.png | Bin 1618 -> 1391 bytes
data/themes/default/help.png | Bin 1222 -> 1287 bytes
data/themes/default/loop_point.png | Bin 522 -> 0 bytes
data/themes/default/loop_point_b.png | Bin 0 -> 472 bytes
data/themes/default/loop_point_e.png | Bin 0 -> 474 bytes
data/themes/default/mixer_send_off.png | Bin 0 -> 817 bytes
data/themes/default/mixer_send_on.png | Bin 0 -> 1476 bytes
data/themes/default/new_channel.png | Bin 0 -> 479 bytes
data/themes/default/pat_rec.png | Bin 0 -> 1000 bytes
data/themes/default/random_wave_active.png | Bin 0 -> 587 bytes
data/themes/default/random_wave_inactive.png | Bin 0 -> 370 bytes
data/themes/default/receive_bg_arrow.png | Bin 0 -> 289 bytes
data/themes/default/send_bg_arrow.png | Bin 0 -> 316 bytes
data/themes/default/soundfont_file.png | Bin 0 -> 1631 bytes
data/themes/default/style.css | 198 +-
data/themes/default/vst_plugin_file.png | Bin 0 -> 1761 bytes
data/themes/default/whatsthis.png | Bin 943 -> 1321 bytes
data/wavetables/CMakeLists.txt | 2 +
data/wavetables/moog.bin | Bin 0 -> 163800 bytes
data/wavetables/saw.bin | Bin 0 -> 163800 bytes
data/wavetables/sqr.bin | Bin 0 -> 163800 bytes
data/wavetables/tri.bin | Bin 0 -> 163800 bytes
include/AudioAlsa.h | 2 +-
include/AudioDevice.h | 2 +-
include/AudioDummy.h | 2 +-
include/AudioFileDevice.h | 2 +-
include/AudioFileOgg.h | 2 +-
include/AudioFileWave.h | 2 +-
include/AudioJack.h | 2 +-
include/AudioOss.h | 2 +-
include/AudioPort.h | 13 +-
include/AudioPortAudio.h | 2 +-
include/AudioPulseAudio.h | 2 +-
include/AudioSampleRecorder.h | 2 +-
include/AudioSdl.h | 2 +-
include/AutomatableModel.h | 89 +-
include/AutomatableModelView.h | 2 +-
include/AutomationEditor.h | 28 +-
include/AutomationPattern.h | 17 +-
include/AutomationPatternView.h | 13 +-
include/AutomationTrack.h | 3 +-
include/BandLimitedWave.h | 213 +
include/Clipboard.h | 2 +-
include/ComboBoxModel.h | 2 +-
include/Controller.h | 10 +-
include/ControllerConnection.h | 4 +-
include/ControllerConnectionDialog.h | 2 +-
include/ControllerDialog.h | 2 +-
include/ControllerRackView.h | 2 +-
include/ControllerView.h | 2 +-
include/DataFile.h | 20 +-
include/DetuningHelper.h | 2 +-
include/DspEffectLibrary.h | 20 +-
include/DummyEffect.h | 54 +-
include/DummyInstrument.h | 2 +-
include/DummyPlugin.h | 2 +-
include/Effect.h | 10 +-
include/EffectChain.h | 2 +-
include/EffectControlDialog.h | 2 +-
include/EffectControls.h | 2 +-
include/EffectRackView.h | 2 +-
include/EffectSelectDialog.h | 2 +-
include/EffectView.h | 2 +-
include/EnvelopeAndLfoParameters.h | 5 +-
include/EnvelopeAndLfoView.h | 5 +-
include/FileBrowser.h | 240 +
include/FileDialog.h | 2 +-
include/FxLine.h | 83 +
include/FxMixer.h | 173 +-
include/FxMixerView.h | 84 +-
include/ImportFilter.h | 2 +-
include/InlineAutomation.h | 2 +-
include/Instrument.h | 12 +-
include/InstrumentFunctionViews.h | 2 +-
include/InstrumentFunctions.h | 3 +-
include/InstrumentMidiIOView.h | 3 +-
include/InstrumentPlayHandle.h | 33 +-
include/InstrumentSoundShaping.h | 2 +-
include/InstrumentSoundShapingView.h | 2 +-
include/InstrumentTrack.h | 14 +-
include/InstrumentView.h | 2 +-
include/JournallingObject.h | 120 +-
include/LadspaBase.h | 7 +-
include/LadspaControl.h | 2 +-
include/LadspaControlView.h | 2 +-
include/LcdSpinBox.h | 2 +-
include/LcdWidget.h | 10 +-
include/LfoController.h | 2 +-
include/LmmsPalette.h | 93 +
include/LmmsStyle.h | 15 +-
include/MainWindow.h | 19 +-
include/MemoryHelper.h | 42 +
include/MeterDialog.h | 3 +-
include/MeterModel.h | 2 +-
include/MicroTimer.h | 2 +-
include/Midi.h | 4 +-
include/MidiAlsaRaw.h | 2 +-
include/MidiAlsaSeq.h | 2 +-
include/MidiClient.h | 2 +-
include/MidiController.h | 10 +-
include/MidiDummy.h | 2 +-
include/MidiEvent.h | 2 +-
include/MidiEventProcessor.h | 10 +-
include/MidiOss.h | 2 +-
include/MidiPort.h | 2 +-
include/MidiPortMenu.h | 2 +-
include/MidiTime.h | 7 +-
include/MidiWinMM.h | 2 +-
include/MixHelpers.h | 4 +-
include/Mixer.h | 39 +-
include/MixerProfiler.h | 60 +
include/MixerWorkerThread.h | 124 +
include/Model.h | 2 +-
include/ModelView.h | 2 +-
include/NotePlayHandle.h | 36 +-
include/Oscillator.h | 2 +-
include/Pattern.h | 200 +
include/PeakController.h | 2 +-
include/Piano.h | 2 +-
include/PianoRoll.h | 45 +-
include/PianoView.h | 2 +-
include/Pitch.h | 2 +-
include/PlayHandle.h | 17 +-
include/Plugin.h | 61 +-
include/PluginView.h | 2 +-
include/PresetPreviewPlayHandle.h | 2 +-
include/ProjectJournal.h | 40 +-
include/ProjectRenderer.h | 2 +-
include/RemotePlugin.h | 2 +-
include/RmsHelper.h | 94 +
include/SampleBuffer.h | 112 +-
include/SamplePlayHandle.h | 2 +-
include/SampleRecordHandle.h | 3 +-
include/SampleTrack.h | 8 +-
include/SendButtonIndicator.h | 33 +
include/SerializingObject.h | 2 +-
include/SideBar.h | 2 +-
include/SideBarWidget.h | 2 +-
include/SongEditor.h | 2 +-
include/SweepOscillator.h | 2 +-
include/TempoSyncKnob.h | 4 +-
include/TempoSyncKnobModel.h | 2 +-
include/ThreadableJob.h | 89 +
include/TimeDisplayWidget.h | 2 +-
include/ToolPlugin.h | 2 +-
include/ToolPluginView.h | 2 +-
include/TrackContainer.h | 2 +-
include/TrackContainerView.h | 5 +-
include/VersionedSaveDialog.h | 2 +-
include/VstSyncController.h | 2 +-
include/VstSyncData.h | 2 +-
include/about_dialog.h | 2 +-
include/aeffectx.h | 111 +-
include/atomic_int.h | 2 +-
include/automatable_button.h | 2 +-
include/automatable_slider.h | 2 +-
include/base64.h | 2 +-
include/basic_filters.h | 467 +-
include/bb_editor.h | 8 +-
include/bb_track.h | 56 +-
include/bb_track_container.h | 2 +-
include/caption_menu.h | 8 +-
include/combobox.h | 2 +-
include/config_mgr.h | 2 +-
include/cpuload_widget.h | 2 +-
include/custom_events.h | 2 +-
include/debug.h | 2 +-
include/drumsynth.h | 2 +-
include/embed.h | 2 +-
include/endian_handling.h | 2 +-
include/engine.h | 2 +-
include/export.h | 2 +-
include/export_project_dialog.h | 2 +-
include/fade_button.h | 2 +-
include/fader.h | 22 +-
include/fft_helpers.h | 2 +-
include/fifo_buffer.h | 2 +-
include/file_browser.h | 238 -
include/graph.h | 5 +-
include/group_box.h | 2 +-
include/gui_templates.h | 2 +-
include/interpolation.h | 60 +-
include/knob.h | 30 +-
include/ladspa_2_lmms.h | 2 +-
include/ladspa_manager.h | 2 +-
include/led_checkbox.h | 12 +-
include/lmms_basics.h | 2 +-
include/lmms_constants.h | 20 +-
include/lmms_math.h | 149 +-
include/mmp.h | 113 -
include/moc_AudioAlsa.cxx_parameters | 12 -
include/moc_AudioDevice.cxx_parameters | 12 -
include/moc_AudioDummy.cxx_parameters | 12 -
include/moc_AudioFileDevice.cxx_parameters | 12 -
include/moc_AudioFileOgg.cxx_parameters | 12 -
include/moc_AudioFileWave.cxx_parameters | 12 -
include/moc_AudioJack.cxx_parameters | 12 -
include/moc_AudioOss.cxx_parameters | 12 -
include/moc_AudioPort.cxx_parameters | 12 -
include/moc_AudioPortAudio.cxx_parameters | 12 -
include/moc_AudioPulseAudio.cxx_parameters | 12 -
include/moc_AudioSampleRecorder.cxx_parameters | 12 -
include/moc_AudioSdl.cxx_parameters | 12 -
include/moc_AutomatableModel.cxx_parameters | 12 -
include/moc_AutomatableModelView.cxx_parameters | 12 -
include/moc_AutomationEditor.cxx_parameters | 12 -
include/moc_AutomationPattern.cxx_parameters | 12 -
include/moc_AutomationPatternView.cxx_parameters | 12 -
include/moc_AutomationTrack.cxx_parameters | 12 -
include/moc_Clipboard.cxx_parameters | 12 -
include/moc_ComboBoxModel.cxx_parameters | 12 -
include/moc_Controller.cxx_parameters | 12 -
include/moc_ControllerConnection.cxx_parameters | 12 -
.../moc_ControllerConnectionDialog.cxx_parameters | 12 -
include/moc_ControllerDialog.cxx_parameters | 12 -
include/moc_ControllerRackView.cxx_parameters | 12 -
include/moc_ControllerView.cxx_parameters | 12 -
include/moc_DataFile.cxx_parameters | 12 -
include/moc_DetuningHelper.cxx_parameters | 12 -
include/moc_DspEffectLibrary.cxx_parameters | 12 -
include/moc_DummyEffect.cxx_parameters | 12 -
include/moc_DummyInstrument.cxx_parameters | 12 -
include/moc_DummyPlugin.cxx_parameters | 12 -
include/moc_Effect.cxx_parameters | 12 -
include/moc_EffectChain.cxx_parameters | 12 -
include/moc_EffectControlDialog.cxx_parameters | 12 -
include/moc_EffectControls.cxx_parameters | 12 -
include/moc_EffectRackView.cxx_parameters | 12 -
include/moc_EffectSelectDialog.cxx_parameters | 12 -
include/moc_EffectView.cxx_parameters | 12 -
.../moc_EnvelopeAndLfoParameters.cxx_parameters | 12 -
include/moc_EnvelopeAndLfoView.cxx_parameters | 12 -
include/moc_FileDialog.cxx_parameters | 12 -
include/moc_FxMixer.cxx_parameters | 12 -
include/moc_FxMixerView.cxx_parameters | 12 -
include/moc_ImportFilter.cxx_parameters | 12 -
include/moc_InlineAutomation.cxx_parameters | 12 -
include/moc_Instrument.cxx_parameters | 12 -
include/moc_InstrumentFunctionViews.cxx_parameters | 12 -
include/moc_InstrumentFunctions.cxx_parameters | 12 -
include/moc_InstrumentMidiIOView.cxx_parameters | 12 -
include/moc_InstrumentPlayHandle.cxx_parameters | 12 -
include/moc_InstrumentSoundShaping.cxx_parameters | 12 -
.../moc_InstrumentSoundShapingView.cxx_parameters | 12 -
include/moc_InstrumentTrack.cxx_parameters | 12 -
include/moc_InstrumentView.cxx_parameters | 12 -
include/moc_JournallingObject.cxx_parameters | 12 -
include/moc_LadspaBase.cxx_parameters | 12 -
include/moc_LadspaControl.cxx_parameters | 12 -
include/moc_LadspaControlView.cxx_parameters | 12 -
include/moc_LcdSpinBox.cxx_parameters | 12 -
include/moc_LcdWidget.cxx_parameters | 12 -
include/moc_LfoController.cxx_parameters | 12 -
include/moc_LmmsStyle.cxx_parameters | 12 -
include/moc_MainWindow.cxx_parameters | 12 -
include/moc_MeterDialog.cxx_parameters | 12 -
include/moc_MeterModel.cxx_parameters | 12 -
include/moc_MicroTimer.cxx_parameters | 12 -
include/moc_Midi.cxx_parameters | 12 -
include/moc_MidiAlsaRaw.cxx_parameters | 12 -
include/moc_MidiAlsaSeq.cxx_parameters | 12 -
include/moc_MidiClient.cxx_parameters | 12 -
include/moc_MidiController.cxx_parameters | 12 -
include/moc_MidiDummy.cxx_parameters | 12 -
include/moc_MidiEvent.cxx_parameters | 12 -
include/moc_MidiEventProcessor.cxx_parameters | 12 -
include/moc_MidiOss.cxx_parameters | 12 -
include/moc_MidiPort.cxx_parameters | 12 -
include/moc_MidiPortMenu.cxx_parameters | 12 -
include/moc_MidiTime.cxx_parameters | 12 -
include/moc_MidiWinMM.cxx_parameters | 12 -
include/moc_MixHelpers.cxx_parameters | 12 -
include/moc_Mixer.cxx_parameters | 12 -
include/moc_Model.cxx_parameters | 12 -
include/moc_ModelView.cxx_parameters | 12 -
include/moc_NotePlayHandle.cxx_parameters | 12 -
include/moc_Oscillator.cxx_parameters | 12 -
include/moc_PeakController.cxx_parameters | 12 -
include/moc_Piano.cxx_parameters | 12 -
include/moc_PianoRoll.cxx_parameters | 12 -
include/moc_PianoView.cxx_parameters | 12 -
include/moc_Pitch.cxx_parameters | 12 -
include/moc_PlayHandle.cxx_parameters | 12 -
include/moc_Plugin.cxx_parameters | 12 -
include/moc_PluginView.cxx_parameters | 12 -
include/moc_PresetPreviewPlayHandle.cxx_parameters | 12 -
include/moc_ProjectJournal.cxx_parameters | 12 -
include/moc_ProjectRenderer.cxx_parameters | 12 -
include/moc_RemotePlugin.cxx_parameters | 12 -
include/moc_SampleBuffer.cxx_parameters | 12 -
include/moc_SamplePlayHandle.cxx_parameters | 12 -
include/moc_SampleRecordHandle.cxx_parameters | 12 -
include/moc_SampleTrack.cxx_parameters | 12 -
include/moc_SerializingObject.cxx_parameters | 12 -
include/moc_SideBar.cxx_parameters | 12 -
include/moc_SideBarWidget.cxx_parameters | 12 -
include/moc_SongEditor.cxx_parameters | 12 -
include/moc_SweepOscillator.cxx_parameters | 12 -
include/moc_TempoSyncKnob.cxx_parameters | 12 -
include/moc_TempoSyncKnobModel.cxx_parameters | 12 -
include/moc_TimeDisplayWidget.cxx_parameters | 12 -
include/moc_ToolPlugin.cxx_parameters | 12 -
include/moc_ToolPluginView.cxx_parameters | 12 -
include/moc_TrackContainer.cxx_parameters | 12 -
include/moc_TrackContainerView.cxx_parameters | 12 -
include/moc_VersionedSaveDialog.cxx_parameters | 12 -
include/moc_VstSyncController.cxx_parameters | 12 -
include/moc_VstSyncData.cxx_parameters | 12 -
include/moc_about_dialog.cxx_parameters | 12 -
include/moc_aeffectx.cxx_parameters | 12 -
include/moc_atomic_int.cxx_parameters | 12 -
include/moc_automatable_button.cxx_parameters | 12 -
include/moc_automatable_slider.cxx_parameters | 12 -
include/moc_base64.cxx_parameters | 12 -
include/moc_basic_filters.cxx_parameters | 12 -
include/moc_bb_editor.cxx_parameters | 12 -
include/moc_bb_track.cxx_parameters | 12 -
include/moc_bb_track_container.cxx_parameters | 12 -
include/moc_caption_menu.cxx_parameters | 12 -
include/moc_combobox.cxx_parameters | 12 -
include/moc_config_mgr.cxx_parameters | 12 -
include/moc_cpuload_widget.cxx_parameters | 12 -
include/moc_custom_events.cxx_parameters | 12 -
include/moc_debug.cxx_parameters | 12 -
include/moc_drumsynth.cxx_parameters | 12 -
include/moc_embed.cxx_parameters | 12 -
include/moc_endian_handling.cxx_parameters | 12 -
include/moc_engine.cxx_parameters | 12 -
include/moc_export.cxx_parameters | 12 -
include/moc_export_project_dialog.cxx_parameters | 12 -
include/moc_fade_button.cxx_parameters | 12 -
include/moc_fader.cxx_parameters | 12 -
include/moc_fft_helpers.cxx_parameters | 12 -
include/moc_fifo_buffer.cxx_parameters | 12 -
include/moc_file_browser.cxx_parameters | 12 -
include/moc_graph.cxx_parameters | 12 -
include/moc_group_box.cxx_parameters | 12 -
include/moc_gui_templates.cxx_parameters | 12 -
include/moc_interpolation.cxx_parameters | 12 -
include/moc_knob.cxx_parameters | 12 -
include/moc_ladspa.cxx_parameters | 12 -
include/moc_ladspa_2_lmms.cxx_parameters | 12 -
include/moc_ladspa_manager.cxx_parameters | 12 -
include/moc_led_checkbox.cxx_parameters | 12 -
include/moc_lmms_basics.cxx_parameters | 12 -
include/moc_lmms_constants.cxx_parameters | 12 -
include/moc_lmms_math.cxx_parameters | 12 -
include/moc_mmp.cxx_parameters | 12 -
include/moc_note.cxx_parameters | 12 -
include/moc_nstate_button.cxx_parameters | 12 -
include/moc_panning.cxx_parameters | 12 -
include/moc_panning_constants.cxx_parameters | 12 -
include/moc_pattern.cxx_parameters | 12 -
include/moc_pixmap_button.cxx_parameters | 12 -
include/moc_plugin_browser.cxx_parameters | 12 -
include/moc_project_notes.cxx_parameters | 12 -
include/moc_project_version.cxx_parameters | 12 -
include/moc_rename_dialog.cxx_parameters | 12 -
include/moc_rubberband.cxx_parameters | 12 -
include/moc_setup_dialog.cxx_parameters | 12 -
include/moc_shared_object.cxx_parameters | 12 -
include/moc_song.cxx_parameters | 12 -
include/moc_string_pair_drag.cxx_parameters | 12 -
include/moc_tab_bar.cxx_parameters | 12 -
include/moc_tab_button.cxx_parameters | 12 -
include/moc_tab_widget.cxx_parameters | 12 -
include/moc_templates.cxx_parameters | 12 -
include/moc_text_float.cxx_parameters | 12 -
include/moc_timeline.cxx_parameters | 12 -
include/moc_tool_button.cxx_parameters | 12 -
include/moc_tooltip.cxx_parameters | 12 -
include/moc_track.cxx_parameters | 12 -
include/moc_track_label_button.cxx_parameters | 12 -
.../moc_transformable_auto_model.cxx_parameters | 12 -
include/moc_update_event.cxx_parameters | 12 -
include/moc_versioninfo.cxx_parameters | 12 -
include/moc_visualization_widget.cxx_parameters | 12 -
include/moc_volume.cxx_parameters | 12 -
include/note.h | 17 +-
include/nstate_button.h | 2 +-
include/panning.h | 2 +-
include/panning_constants.h | 2 +-
include/pattern.h | 193 -
include/pixmap_button.h | 2 +-
include/plugin_browser.h | 32 +-
include/project_notes.h | 2 +-
include/project_version.h | 2 +-
include/rename_dialog.h | 2 +-
include/rubberband.h | 2 +-
include/setup_dialog.h | 2 +-
include/shared_object.h | 2 +-
include/song.h | 8 +-
include/string_pair_drag.h | 2 +-
include/tab_bar.h | 2 +-
include/tab_button.h | 2 +-
include/tab_widget.h | 4 +-
include/templates.h | 2 +-
include/text_float.h | 10 +-
include/timeline.h | 5 +-
include/tool_button.h | 2 +-
include/tooltip.h | 2 +-
include/track.h | 54 +-
include/track_label_button.h | 2 +-
include/transformable_auto_model.h | 2 +-
include/update_event.h | 2 +-
include/visualization_widget.h | 2 +-
include/volume.h | 2 +-
lmms.rc.in | 2 +-
lmms.spec.in | 20 +-
plugins/Amplifier/Amplifier.cpp | 20 +-
plugins/Amplifier/Amplifier.h | 2 +-
plugins/Amplifier/AmplifierControlDialog.cpp | 4 +-
plugins/Amplifier/AmplifierControlDialog.h | 3 +-
plugins/Amplifier/AmplifierControls.cpp | 8 +-
plugins/Amplifier/AmplifierControls.h | 2 +-
plugins/Amplifier/CMakeLists.txt | 2 +-
.../Amplifier/moc_AmplifierControls.cxx_parameters | 16 -
plugins/BassBooster/BassBooster.cpp | 44 +-
plugins/BassBooster/BassBooster.h | 13 +-
plugins/BassBooster/BassBoosterControlDialog.cpp | 4 +-
plugins/BassBooster/BassBoosterControlDialog.h | 3 +-
plugins/BassBooster/BassBoosterControls.cpp | 35 +-
plugins/BassBooster/BassBoosterControls.h | 11 +-
plugins/BassBooster/CMakeLists.txt | 2 +-
.../moc_BassBoosterControls.cxx_parameters | 16 -
plugins/CMakeLists.txt | 13 +-
plugins/DualFilter/CMakeLists.txt | 2 +-
plugins/DualFilter/DualFilter.cpp | 48 +-
plugins/DualFilter/DualFilter.h | 2 +-
plugins/DualFilter/DualFilterControlDialog.cpp | 4 +-
plugins/DualFilter/DualFilterControlDialog.h | 3 +-
plugins/DualFilter/DualFilterControls.cpp | 29 +-
plugins/DualFilter/DualFilterControls.h | 4 +-
.../moc_DualFilterControls.cxx_parameters | 16 -
plugins/HydrogenImport/HydrogenImport.cpp | 4 +-
plugins/LadspaEffect/LadspaControlDialog.cpp | 2 +-
plugins/LadspaEffect/LadspaControlDialog.h | 6 +-
plugins/LadspaEffect/LadspaControls.cpp | 2 +-
plugins/LadspaEffect/LadspaControls.h | 6 +-
plugins/LadspaEffect/LadspaEffect.cpp | 13 +-
plugins/LadspaEffect/LadspaEffect.h | 2 +-
plugins/LadspaEffect/LadspaSubPluginFeatures.cpp | 4 +-
plugins/LadspaEffect/LadspaSubPluginFeatures.h | 2 +-
plugins/LadspaEffect/calf/CMakeLists.txt | 4 +-
plugins/LadspaEffect/calf/src/audio_fx.cpp | 16 +
plugins/LadspaEffect/calf/src/calf/audio_fx.h | 1 +
plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h | 1 +
plugins/LadspaEffect/calf/src/calf/modules.h | 2 +
plugins/LadspaEffect/calf/src/calf/modules_limit.h | 1 +
plugins/LadspaEffect/calf/src/modules.cpp | 16 +
plugins/LadspaEffect/calf/src/modules_limit.cpp | 8 +
plugins/LadspaEffect/calf/src/plugin.cpp | 5 +
plugins/LadspaEffect/caps/SweepVF.cc | 8 +-
plugins/LadspaEffect/caps/dsp/ToneStack.h | 7 -
plugins/LadspaEffect/cmt/src/lofi.cpp | 2 -
plugins/LadspaEffect/cmt/src/pink_full.cpp | 5 +-
.../moc_LadspaControlDialog.cxx_parameters | 16 -
.../LadspaEffect/moc_LadspaControls.cxx_parameters | 16 -
.../LadspaEffect/moc_LadspaEffect.cxx_parameters | 16 -
plugins/LadspaEffect/swh/bode_shifter_cv_1432.c | 2 +-
plugins/LadspaEffect/swh/dj_eq_1901.c | 4 +
plugins/LadspaEffect/swh/fad_delay_1192.c | 1 -
.../LadspaEffect/swh/fast_lookahead_limiter_1913.c | 1 +
plugins/LadspaEffect/swh/gsm/gsm_create.c | 1 -
plugins/LadspaEffect/swh/gsm_1215.c | 6 -
plugins/LadspaEffect/swh/hermes_filter_1200.c | 6 -
plugins/LadspaEffect/swh/imp_1199.c | 9 +
plugins/LadspaEffect/swh/ladspa-util.c | 2 +-
plugins/LadspaEffect/swh/pitch_scale_1193.c | 1 -
plugins/LadspaEffect/swh/ringmod_1188.c | 2 -
plugins/LadspaEffect/swh/step_muxer_1212.c | 1 -
plugins/LadspaEffect/swh/surround_encoder_1401.c | 4 +-
plugins/LadspaEffect/swh/tape_delay_1211.c | 1 -
plugins/LadspaEffect/swh/transient_1206.c | 1 -
plugins/LadspaEffect/swh/vynil_1905.c | 1 +
plugins/LadspaEffect/tap/tap_eq.c | 3 +-
plugins/LadspaEffect/tap/tap_eqbw.c | 3 +-
plugins/MidiImport/CMakeLists.txt | 8 +
plugins/MidiImport/MidiImport.cpp | 572 +
plugins/MidiImport/MidiImport.h | 128 +
.../{midi_import => MidiImport}/portsmf/README.txt | 0
.../portsmf/algrd_internal.h | 0
.../portsmf/algsmfrd_internal.h | 0
.../portsmf/allegro.cpp | 0
.../{midi_import => MidiImport}/portsmf/allegro.h | 0
.../portsmf/allegrord.cpp | 0
.../portsmf/allegroserial.cpp | 0
.../portsmf/allegrosmfrd.cpp | 0
.../portsmf/allegrosmfwr.cpp | 0
.../portsmf/allegrowr.cpp | 0
.../portsmf/license.txt | 0
.../{midi_import => MidiImport}/portsmf/mfmidi.cpp | 0
.../{midi_import => MidiImport}/portsmf/mfmidi.h | 0
.../portsmf/strparse.cpp | 0
.../{midi_import => MidiImport}/portsmf/strparse.h | 0
.../{midi_import => MidiImport}/portsmf/trace.cpp | 0
.../{midi_import => MidiImport}/portsmf/trace.h | 0
plugins/SpectrumAnalyzer/CMakeLists.txt | 2 +-
plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp | 2 +-
plugins/SpectrumAnalyzer/SpectrumAnalyzer.h | 2 +-
.../SpectrumAnalyzerControlDialog.cpp | 4 +-
.../SpectrumAnalyzerControlDialog.h | 3 +-
.../SpectrumAnalyzer/SpectrumAnalyzerControls.cpp | 2 +-
.../SpectrumAnalyzer/SpectrumAnalyzerControls.h | 2 +-
.../moc_SpectrumAnalyzerControls.cxx_parameters | 16 -
plugins/VstEffect/CMakeLists.txt | 2 +-
plugins/VstEffect/VstEffect.cpp | 2 +-
plugins/VstEffect/VstEffect.h | 2 +-
plugins/VstEffect/VstEffectControlDialog.cpp | 4 +-
plugins/VstEffect/VstEffectControlDialog.h | 3 +-
plugins/VstEffect/VstEffectControls.cpp | 2 +-
plugins/VstEffect/VstEffectControls.h | 2 +-
plugins/VstEffect/VstSubPluginFeatures.cpp | 2 +-
plugins/VstEffect/VstSubPluginFeatures.h | 2 +-
.../VstEffect/moc_VstEffectControls.cxx_parameters | 17 -
plugins/audio_file_processor/artwork.png | Bin 250771 -> 250771 bytes
.../audio_file_processor/audio_file_processor.cpp | 440 +-
.../audio_file_processor/audio_file_processor.h | 43 +-
plugins/audio_file_processor/loop_off_off.png | Bin 0 -> 3456 bytes
plugins/audio_file_processor/loop_off_on.png | Bin 0 -> 3456 bytes
.../{loop_off.png => loop_on_off.png} | Bin
.../{loop_on.png => loop_on_on.png} | Bin
plugins/audio_file_processor/loop_pingpong_off.png | Bin 0 -> 1584 bytes
plugins/audio_file_processor/loop_pingpong_on.png | Bin 0 -> 1584 bytes
.../moc_audio_file_processor.cxx_parameters | 16 -
plugins/bit_invader/bit_invader.cpp | 8 +-
plugins/bit_invader/bit_invader.h | 2 +-
plugins/bit_invader/moc_bit_invader.cxx_parameters | 16 -
plugins/carlabase/CMakeLists.txt | 12 +
plugins/carlabase/artwork-patchbay.png | Bin 0 -> 46535 bytes
plugins/carlabase/artwork-rack.png | Bin 0 -> 45788 bytes
plugins/carlabase/carla.cpp | 530 +
plugins/carlabase/carla.h | 109 +
plugins/carlapatchbay/CMakeLists.txt | 8 +
plugins/carlapatchbay/carlapatchbay.cpp | 51 +
plugins/carlapatchbay/logo.png | Bin 0 -> 3313 bytes
plugins/carlarack/CMakeLists.txt | 8 +
plugins/carlarack/carlarack.cpp | 51 +
plugins/carlarack/logo.png | Bin 0 -> 3313 bytes
plugins/delay/CMakeLists.txt | 3 +
plugins/delay/artwork.png | Bin 0 -> 9620 bytes
plugins/delay/delaycontrols.cpp | 70 +
plugins/delay/delaycontrols.h | 72 +
plugins/delay/delaycontrolsdialog.cpp | 74 +
plugins/delay/delaycontrolsdialog.h | 41 +
plugins/delay/delayeffect.cpp | 124 +
plugins/delay/delayeffect.h | 51 +
plugins/delay/lfo.cpp | 46 +
plugins/delay/lfo.h | 79 +
plugins/delay/logo.png | Bin 0 -> 3225 bytes
plugins/delay/stereodelay.cpp | 103 +
plugins/delay/stereodelay.h | 60 +
plugins/dynamics_processor/CMakeLists.txt | 2 +-
plugins/dynamics_processor/dynamics_processor.cpp | 169 +-
plugins/dynamics_processor/dynamics_processor.h | 18 +-
.../dynamics_processor_control_dialog.cpp | 4 +-
.../dynamics_processor_control_dialog.h | 7 +-
.../dynamics_processor_controls.cpp | 26 +-
.../dynamics_processor_controls.h | 8 +-
.../moc_dynamics_processor_controls.cxx_parameters | 16 -
plugins/flp_import/FlpImport.cpp | 33 +-
plugins/flp_import/FlpImport.h | 2 +-
plugins/flp_import/unrtf.cpp | 2 +-
plugins/kicker/KickerOsc.h | 108 +
plugins/kicker/artwork.png | Bin 40329 -> 117043 bytes
plugins/kicker/kicker.cpp | 198 +-
plugins/kicker/kicker.h | 43 +-
plugins/kicker/moc_kicker.cxx_parameters | 16 -
plugins/ladspa_browser/ladspa_browser.cpp | 2 +-
plugins/ladspa_browser/ladspa_browser.h | 2 +-
plugins/ladspa_browser/ladspa_description.cpp | 2 +-
plugins/ladspa_browser/ladspa_description.h | 2 +-
plugins/ladspa_browser/ladspa_port_dialog.cpp | 2 +-
plugins/ladspa_browser/ladspa_port_dialog.h | 2 +-
.../moc_ladspa_browser.cxx_parameters | 16 -
.../moc_ladspa_description.cxx_parameters | 16 -
.../moc_ladspa_port_dialog.cxx_parameters | 16 -
plugins/lb302/artwork.png | Bin 115644 -> 99448 bytes
plugins/lb302/lb302.cpp | 307 +-
plugins/lb302/lb302.h | 66 +-
plugins/lb302/moc_lb302.cxx_parameters | 16 -
plugins/lb303/lb303.cpp | 2 +-
plugins/lb303/lb303.h | 3 +-
plugins/midi_import/CMakeLists.txt | 8 -
plugins/midi_import/MidiImport.cpp | 571 -
plugins/midi_import/MidiImport.h | 127 -
plugins/monstro/CMakeLists.txt | 3 +
plugins/monstro/Monstro.cpp | 1975 +++
plugins/monstro/Monstro.h | 717 +
plugins/monstro/am_active.png | Bin 0 -> 730 bytes
plugins/monstro/am_inactive.png | Bin 0 -> 525 bytes
plugins/monstro/artwork_mat.png | Bin 0 -> 65717 bytes
plugins/monstro/artwork_op.png | Bin 0 -> 59652 bytes
plugins/monstro/exp.png | Bin 0 -> 522 bytes
plugins/monstro/fm_active.png | Bin 0 -> 678 bytes
plugins/monstro/fm_inactive.png | Bin 0 -> 484 bytes
plugins/monstro/logo.png | Bin 0 -> 4199 bytes
plugins/monstro/matview_active.png | Bin 0 -> 1992 bytes
plugins/monstro/matview_inactive.png | Bin 0 -> 1501 bytes
plugins/monstro/mix_active.png | Bin 0 -> 776 bytes
plugins/monstro/mix_inactive.png | Bin 0 -> 510 bytes
plugins/monstro/moog.png | Bin 0 -> 599 bytes
plugins/monstro/noise.png | Bin 0 -> 563 bytes
plugins/monstro/opview_active.png | Bin 0 -> 2129 bytes
plugins/monstro/opview_inactive.png | Bin 0 -> 1519 bytes
plugins/monstro/pm_active.png | Bin 0 -> 724 bytes
plugins/monstro/pm_inactive.png | Bin 0 -> 481 bytes
plugins/monstro/ramp.png | Bin 0 -> 520 bytes
plugins/monstro/rand.png | Bin 0 -> 500 bytes
plugins/monstro/saw.png | Bin 0 -> 529 bytes
plugins/monstro/sin.png | Bin 0 -> 578 bytes
plugins/monstro/sinabs.png | Bin 0 -> 468 bytes
plugins/monstro/sqr.png | Bin 0 -> 427 bytes
plugins/monstro/sqrsoft.png | Bin 0 -> 539 bytes
plugins/monstro/tinyled_off.png | Bin 0 -> 397 bytes
plugins/monstro/tinyled_on.png | Bin 0 -> 594 bytes
plugins/monstro/tri.png | Bin 0 -> 602 bytes
plugins/nes/CMakeLists.txt | 3 +
plugins/nes/Nes.cpp | 928 ++
plugins/nes/Nes.h | 361 +
plugins/nes/artwork.png | Bin 0 -> 104058 bytes
plugins/nes/logo.png | Bin 0 -> 2458 bytes
plugins/nes/nesdc1_on.png | Bin 0 -> 411 bytes
plugins/nes/nesdc2_on.png | Bin 0 -> 393 bytes
plugins/nes/nesdc3_on.png | Bin 0 -> 406 bytes
plugins/nes/nesdc4_on.png | Bin 0 -> 434 bytes
plugins/nes/nesdc_off.png | Bin 0 -> 418 bytes
plugins/nes/nesled_off.png | Bin 0 -> 345 bytes
plugins/nes/nesled_on.png | Bin 0 -> 638 bytes
plugins/opl2/logo.png.orig | Bin 2458 -> 0 bytes
plugins/opl2/moc_opl2instrument.cxx_parameters | 16 -
plugins/opl2/opl2instrument.cpp | 8 +-
plugins/opl2/opl2instrument.h | 4 +-
plugins/organic/artwork.png | Bin 44684 -> 51895 bytes
plugins/organic/logo.png | Bin 2776 -> 3536 bytes
plugins/organic/moc_organic.cxx_parameters | 16 -
plugins/organic/organic.cpp | 147 +-
plugins/organic/organic.h | 69 +-
plugins/organic/randomise.png | Bin 2342 -> 2086 bytes
plugins/organic/randomise_pressed.png | Bin 2584 -> 2709 bytes
plugins/papu/moc_papu_instrument.cxx_parameters | 16 -
plugins/papu/papu_instrument.cpp | 7 +-
plugins/papu/papu_instrument.h | 2 +-
plugins/patman/moc_patman.cxx_parameters | 16 -
plugins/patman/patman.cpp | 4 +-
plugins/patman/patman.h | 2 +-
plugins/peak_controller_effect/CMakeLists.txt | 2 +-
..._peak_controller_effect_controls.cxx_parameters | 16 -
.../peak_controller_effect.cpp | 2 +-
.../peak_controller_effect.h | 2 +-
.../peak_controller_effect_control_dialog.cpp | 3 +-
.../peak_controller_effect_control_dialog.h | 3 +-
.../peak_controller_effect_controls.cpp | 2 +-
.../peak_controller_effect_controls.h | 2 +-
.../sf2_player/moc_patches_dialog.cxx_parameters | 16 -
plugins/sf2_player/moc_sf2_player.cxx_parameters | 16 -
plugins/sf2_player/patches_dialog.cpp | 2 +-
plugins/sf2_player/patches_dialog.h | 2 +-
plugins/sf2_player/sf2_player.cpp | 12 +-
plugins/sf2_player/sf2_player.h | 4 +-
plugins/sfxr/moc_sfxr.cxx_parameters | 16 -
plugins/sfxr/sfxr.cpp | 2 +-
plugins/sfxr/sfxr.h | 2 +-
plugins/sid/moc_sid_instrument.cxx_parameters | 16 -
plugins/sid/sid_instrument.cpp | 2 +-
plugins/sid/sid_instrument.h | 2 +-
plugins/stereo_enhancer/CMakeLists.txt | 2 +-
.../moc_stereoenhancer_controls.cxx_parameters | 16 -
plugins/stereo_enhancer/stereo_enhancer.cpp | 2 +-
plugins/stereo_enhancer/stereo_enhancer.h | 2 +-
.../stereoenhancer_control_dialog.cpp | 3 +-
.../stereoenhancer_control_dialog.h | 3 +-
.../stereo_enhancer/stereoenhancer_controls.cpp | 2 +-
plugins/stereo_enhancer/stereoenhancer_controls.h | 2 +-
plugins/stereo_matrix/CMakeLists.txt | 2 +-
.../moc_stereomatrix_controls.cxx_parameters | 16 -
plugins/stereo_matrix/stereo_matrix.cpp | 2 +-
plugins/stereo_matrix/stereo_matrix.h | 2 +-
.../stereo_matrix/stereomatrix_control_dialog.cpp | 3 +-
.../stereo_matrix/stereomatrix_control_dialog.h | 3 +-
plugins/stereo_matrix/stereomatrix_controls.cpp | 2 +-
plugins/stereo_matrix/stereomatrix_controls.h | 2 +-
plugins/stk/mallets/mallets.cpp | 21 +-
plugins/stk/mallets/mallets.h | 3 +-
plugins/triple_oscillator/TripleOscillator.cpp | 2 +-
plugins/triple_oscillator/TripleOscillator.h | 2 +-
.../moc_TripleOscillator.cxx_parameters | 16 -
plugins/vestige/moc_vestige.cxx_parameters | 17 -
plugins/vestige/vestige.cpp | 28 +-
plugins/vestige/vestige.h | 4 +-
.../vibed/moc_nine_button_selector.cxx_parameters | 16 -
plugins/vibed/moc_vibed.cxx_parameters | 16 -
plugins/vibed/nine_button_selector.cpp | 7 +-
plugins/vibed/nine_button_selector.h | 2 +-
plugins/vibed/string_container.cpp | 2 +-
plugins/vibed/string_container.h | 2 +-
plugins/vibed/vibed.cpp | 7 +-
plugins/vibed/vibed.h | 2 +-
plugins/vibed/vibrating_string.cpp | 2 +-
plugins/vibed/vibrating_string.h | 2 +-
plugins/vst_base/CMakeLists.txt | 4 +-
plugins/vst_base/RemoteVstPlugin.cpp | 2 +-
plugins/vst_base/VstPlugin.cpp | 4 +-
plugins/vst_base/VstPlugin.h | 3 +-
plugins/vst_base/Win64/CMakeLists.txt | 2 +-
plugins/vst_base/communication.h | 2 +-
plugins/vst_base/moc_VstPlugin.cxx_parameters | 16 -
plugins/vst_base/vst_base.cpp | 2 +-
plugins/watsyn/CMakeLists.txt | 5 +
plugins/watsyn/Watsyn.cpp | 1287 ++
plugins/watsyn/Watsyn.h | 378 +
plugins/watsyn/a1_active.png | Bin 0 -> 767 bytes
plugins/watsyn/a1_inactive.png | Bin 0 -> 462 bytes
plugins/watsyn/a2_active.png | Bin 0 -> 815 bytes
plugins/watsyn/a2_inactive.png | Bin 0 -> 500 bytes
plugins/watsyn/aam_active.png | Bin 0 -> 830 bytes
plugins/watsyn/aam_inactive.png | Bin 0 -> 480 bytes
plugins/watsyn/amix_active.png | Bin 0 -> 1006 bytes
plugins/watsyn/amix_inactive.png | Bin 0 -> 619 bytes
plugins/watsyn/apm_active.png | Bin 0 -> 829 bytes
plugins/watsyn/apm_inactive.png | Bin 0 -> 476 bytes
plugins/watsyn/arm_active.png | Bin 0 -> 889 bytes
plugins/watsyn/arm_inactive.png | Bin 0 -> 569 bytes
plugins/watsyn/artwork.png | Bin 0 -> 97631 bytes
plugins/watsyn/b1_active.png | Bin 0 -> 712 bytes
plugins/watsyn/b1_inactive.png | Bin 0 -> 431 bytes
plugins/watsyn/b2_active.png | Bin 0 -> 764 bytes
plugins/watsyn/b2_inactive.png | Bin 0 -> 490 bytes
plugins/watsyn/bam_active.png | Bin 0 -> 712 bytes
plugins/watsyn/bam_inactive.png | Bin 0 -> 451 bytes
plugins/watsyn/bmix_active.png | Bin 0 -> 931 bytes
plugins/watsyn/bmix_inactive.png | Bin 0 -> 630 bytes
plugins/watsyn/bpm_active.png | Bin 0 -> 729 bytes
plugins/watsyn/bpm_inactive.png | Bin 0 -> 443 bytes
plugins/watsyn/brm_active.png | Bin 0 -> 792 bytes
plugins/watsyn/brm_inactive.png | Bin 0 -> 540 bytes
plugins/watsyn/inv_active.png | Bin 0 -> 655 bytes
plugins/watsyn/inv_inactive.png | Bin 0 -> 596 bytes
plugins/watsyn/load_active.png | Bin 0 -> 676 bytes
plugins/watsyn/load_inactive.png | Bin 0 -> 631 bytes
plugins/watsyn/logo.png | Bin 0 -> 4772 bytes
plugins/watsyn/norm_active.png | Bin 0 -> 702 bytes
plugins/watsyn/norm_inactive.png | Bin 0 -> 641 bytes
plugins/watsyn/phl_active.png | Bin 0 -> 734 bytes
plugins/watsyn/phl_inactive.png | Bin 0 -> 693 bytes
plugins/watsyn/phr_active.png | Bin 0 -> 708 bytes
plugins/watsyn/phr_inactive.png | Bin 0 -> 671 bytes
plugins/watsyn/saw_active.png | Bin 0 -> 706 bytes
plugins/watsyn/saw_inactive.png | Bin 0 -> 646 bytes
plugins/watsyn/sin_active.png | Bin 0 -> 734 bytes
plugins/watsyn/sin_inactive.png | Bin 0 -> 699 bytes
plugins/watsyn/smooth_active.png | Bin 0 -> 709 bytes
plugins/watsyn/smooth_inactive.png | Bin 0 -> 649 bytes
plugins/watsyn/sqr_active.png | Bin 0 -> 687 bytes
plugins/watsyn/sqr_inactive.png | Bin 0 -> 640 bytes
plugins/watsyn/tri_active.png | Bin 0 -> 738 bytes
plugins/watsyn/tri_inactive.png | Bin 0 -> 699 bytes
plugins/watsyn/wavegraph.png | Bin 0 -> 612 bytes
plugins/waveshaper/CMakeLists.txt | 2 +-
.../moc_waveshaper_controls.cxx_parameters | 16 -
plugins/waveshaper/waveshaper.cpp | 53 +-
plugins/waveshaper/waveshaper.h | 2 +-
plugins/waveshaper/waveshaper_control_dialog.cpp | 4 +-
plugins/waveshaper/waveshaper_control_dialog.h | 3 +-
plugins/waveshaper/waveshaper_controls.cpp | 28 +-
plugins/waveshaper/waveshaper_controls.h | 9 +-
plugins/zynaddsubfx/CMakeLists.txt | 123 +-
plugins/zynaddsubfx/LocalZynAddSubFx.cpp | 73 +-
plugins/zynaddsubfx/LocalZynAddSubFx.h | 4 +-
plugins/zynaddsubfx/RemoteZynAddSubFx.cpp | 30 +-
plugins/zynaddsubfx/RemoteZynAddSubFx.h | 2 +-
plugins/zynaddsubfx/ZynAddSubFx.cpp | 7 +-
plugins/zynaddsubfx/ZynAddSubFx.h | 6 +-
plugins/zynaddsubfx/moc_ZynAddSubFx.cxx_parameters | 23 -
plugins/zynaddsubfx/src/DSP/AnalogFilter.cpp | 450 -
plugins/zynaddsubfx/src/DSP/AnalogFilter.h | 81 -
plugins/zynaddsubfx/src/DSP/CMakeLists.txt | 14 -
plugins/zynaddsubfx/src/DSP/FFTwrapper.cpp | 136 -
plugins/zynaddsubfx/src/DSP/FFTwrapper.h | 70 -
plugins/zynaddsubfx/src/DSP/Filter.cpp | 87 -
plugins/zynaddsubfx/src/DSP/Filter.h | 52 -
plugins/zynaddsubfx/src/DSP/Filter_.h | 43 -
plugins/zynaddsubfx/src/DSP/FormantFilter.cpp | 231 -
plugins/zynaddsubfx/src/DSP/FormantFilter.h | 69 -
plugins/zynaddsubfx/src/DSP/SVFilter.cpp | 186 -
plugins/zynaddsubfx/src/DSP/SVFilter.h | 71 -
plugins/zynaddsubfx/src/DSP/Unison.cpp | 184 -
plugins/zynaddsubfx/src/DSP/Unison.h | 69 -
plugins/zynaddsubfx/src/Effects/Alienwah.cpp | 281 -
plugins/zynaddsubfx/src/Effects/Alienwah.h | 85 -
plugins/zynaddsubfx/src/Effects/CMakeLists.txt | 19 -
plugins/zynaddsubfx/src/Effects/Chorus.cpp | 320 -
plugins/zynaddsubfx/src/Effects/Chorus.h | 114 -
plugins/zynaddsubfx/src/Effects/Distorsion.cpp | 481 -
plugins/zynaddsubfx/src/Effects/Distorsion.h | 75 -
plugins/zynaddsubfx/src/Effects/DynamicFilter.cpp | 352 -
plugins/zynaddsubfx/src/Effects/DynamicFilter.h | 72 -
plugins/zynaddsubfx/src/Effects/EQ.cpp | 212 -
plugins/zynaddsubfx/src/Effects/EQ.h | 58 -
plugins/zynaddsubfx/src/Effects/Echo.cpp | 270 -
plugins/zynaddsubfx/src/Effects/Echo.h | 140 -
plugins/zynaddsubfx/src/Effects/Effect.cpp | 36 -
plugins/zynaddsubfx/src/Effects/Effect.h | 105 -
plugins/zynaddsubfx/src/Effects/EffectLFO.cpp | 127 -
plugins/zynaddsubfx/src/Effects/EffectLFO.h | 52 -
plugins/zynaddsubfx/src/Effects/EffectMgr.cpp | 357 -
plugins/zynaddsubfx/src/Effects/EffectMgr.h | 102 -
plugins/zynaddsubfx/src/Effects/Phaser.cpp | 473 -
plugins/zynaddsubfx/src/Effects/Phaser.h | 103 -
plugins/zynaddsubfx/src/Effects/Reverb.cpp | 551 -
plugins/zynaddsubfx/src/Effects/Reverb.h | 135 -
plugins/zynaddsubfx/src/Input/ALSAMidiIn.cpp | 118 -
plugins/zynaddsubfx/src/Input/ALSAMidiIn.h | 51 -
plugins/zynaddsubfx/src/Input/CMakeLists.txt | 19 -
plugins/zynaddsubfx/src/Input/MidiIn.cpp | 96 -
plugins/zynaddsubfx/src/Input/MidiIn.h | 52 -
plugins/zynaddsubfx/src/Input/NULLMidiIn.cpp | 41 -
plugins/zynaddsubfx/src/Input/NULLMidiIn.h | 50 -
plugins/zynaddsubfx/src/Input/OSSMidiIn.cpp | 123 -
plugins/zynaddsubfx/src/Input/OSSMidiIn.h | 50 -
plugins/zynaddsubfx/src/Input/WINMidiIn.cpp | 94 -
plugins/zynaddsubfx/src/Input/WINMidiIn.h | 34 -
plugins/zynaddsubfx/src/Misc/Bank.cpp | 644 -
plugins/zynaddsubfx/src/Misc/Bank.h | 108 -
plugins/zynaddsubfx/src/Misc/CMakeLists.txt | 24 -
plugins/zynaddsubfx/src/Misc/Config.cpp | 409 -
plugins/zynaddsubfx/src/Misc/Config.h | 73 -
plugins/zynaddsubfx/src/Misc/Control.h | 100 -
plugins/zynaddsubfx/src/Misc/Dump.cpp | 124 -
plugins/zynaddsubfx/src/Misc/Dump.h | 64 -
plugins/zynaddsubfx/src/Misc/LASHClient.cpp | 104 -
plugins/zynaddsubfx/src/Misc/LASHClient.h | 66 -
plugins/zynaddsubfx/src/Misc/Master.cpp | 828 --
plugins/zynaddsubfx/src/Misc/Master.h | 177 -
plugins/zynaddsubfx/src/Misc/Microtonal.cpp | 687 -
plugins/zynaddsubfx/src/Misc/Microtonal.h | 135 -
plugins/zynaddsubfx/src/Misc/Part.cpp | 1370 --
plugins/zynaddsubfx/src/Misc/Part.h | 206 -
plugins/zynaddsubfx/src/Misc/QtXmlWrapper.cpp | 550 -
plugins/zynaddsubfx/src/Misc/QtXmlWrapper.h | 125 -
plugins/zynaddsubfx/src/Misc/Stereo.cpp | 39 -
plugins/zynaddsubfx/src/Misc/Stereo.h | 42 -
plugins/zynaddsubfx/src/Misc/Util.cpp | 130 -
plugins/zynaddsubfx/src/Misc/Util.h | 84 -
plugins/zynaddsubfx/src/Misc/XMLwrapper.cpp | 617 -
plugins/zynaddsubfx/src/Misc/XMLwrapper.h | 275 -
plugins/zynaddsubfx/src/Output/CMakeLists.txt | 33 -
plugins/zynaddsubfx/src/Output/DSSIaudiooutput.cpp | 685 -
plugins/zynaddsubfx/src/Output/DSSIaudiooutput.h | 111 -
.../zynaddsubfx/src/Output/JACK_RTaudiooutput.cpp | 229 -
plugins/zynaddsubfx/src/Output/JACKaudiooutput.cpp | 185 -
plugins/zynaddsubfx/src/Output/JACKaudiooutput.h | 48 -
plugins/zynaddsubfx/src/Output/OSSaudiooutput.cpp | 128 -
plugins/zynaddsubfx/src/Output/OSSaudiooutput.h | 50 -
plugins/zynaddsubfx/src/Output/PAaudiooutput.cpp | 80 -
plugins/zynaddsubfx/src/Output/PAaudiooutput.h | 34 -
plugins/zynaddsubfx/src/Output/Recorder.cpp | 113 -
plugins/zynaddsubfx/src/Output/Recorder.h | 57 -
plugins/zynaddsubfx/src/Output/VSTaudiooutput.cpp | 68 -
plugins/zynaddsubfx/src/Output/VSTaudiooutput.h | 60 -
plugins/zynaddsubfx/src/Output/WAVaudiooutput.cpp | 101 -
plugins/zynaddsubfx/src/Output/WAVaudiooutput.h | 43 -
.../zynaddsubfx/src/Params/ADnoteParameters.cpp | 840 --
plugins/zynaddsubfx/src/Params/ADnoteParameters.h | 307 -
plugins/zynaddsubfx/src/Params/CMakeLists.txt | 19 -
plugins/zynaddsubfx/src/Params/Controller.cpp | 415 -
plugins/zynaddsubfx/src/Params/Controller.h | 221 -
plugins/zynaddsubfx/src/Params/EnvelopeParams.cpp | 298 -
plugins/zynaddsubfx/src/Params/EnvelopeParams.h | 90 -
plugins/zynaddsubfx/src/Params/FilterParams.cpp | 392 -
plugins/zynaddsubfx/src/Params/FilterParams.h | 103 -
plugins/zynaddsubfx/src/Params/LFOParams.cpp | 105 -
plugins/zynaddsubfx/src/Params/LFOParams.h | 72 -
.../zynaddsubfx/src/Params/PADnoteParameters.cpp | 911 --
plugins/zynaddsubfx/src/Params/PADnoteParameters.h | 183 -
plugins/zynaddsubfx/src/Params/Presets.cpp | 122 -
plugins/zynaddsubfx/src/Params/Presets.h | 57 -
plugins/zynaddsubfx/src/Params/PresetsArray.cpp | 138 -
plugins/zynaddsubfx/src/Params/PresetsArray.h | 60 -
plugins/zynaddsubfx/src/Params/PresetsStore.cpp | 195 -
plugins/zynaddsubfx/src/Params/PresetsStore.h | 67 -
.../zynaddsubfx/src/Params/SUBnoteParameters.cpp | 251 -
plugins/zynaddsubfx/src/Params/SUBnoteParameters.h | 104 -
plugins/zynaddsubfx/src/Samples/CMakeLists.txt | 11 -
plugins/zynaddsubfx/src/Samples/Sample.cpp | 193 -
plugins/zynaddsubfx/src/Samples/Sample.h | 74 -
plugins/zynaddsubfx/src/Seq/CMakeLists.txt | 11 -
plugins/zynaddsubfx/src/Seq/MIDIEvents.cpp | 93 -
plugins/zynaddsubfx/src/Seq/MIDIEvents.h | 69 -
plugins/zynaddsubfx/src/Seq/MIDIFile.cpp | 424 -
plugins/zynaddsubfx/src/Seq/MIDIFile.h | 89 -
plugins/zynaddsubfx/src/Seq/Sequencer.cpp | 189 -
plugins/zynaddsubfx/src/Seq/Sequencer.h | 90 -
plugins/zynaddsubfx/src/Synth/ADnote.cpp | 1987 ---
plugins/zynaddsubfx/src/Synth/ADnote.h | 349 -
plugins/zynaddsubfx/src/Synth/CMakeLists.txt | 16 -
plugins/zynaddsubfx/src/Synth/Envelope.cpp | 199 -
plugins/zynaddsubfx/src/Synth/Envelope.h | 65 -
plugins/zynaddsubfx/src/Synth/LFO.cpp | 184 -
plugins/zynaddsubfx/src/Synth/LFO.h | 59 -
plugins/zynaddsubfx/src/Synth/OscilGen.cpp | 1475 --
plugins/zynaddsubfx/src/Synth/OscilGen.h | 183 -
plugins/zynaddsubfx/src/Synth/PADnote.cpp | 614 -
plugins/zynaddsubfx/src/Synth/PADnote.h | 143 -
plugins/zynaddsubfx/src/Synth/Resonance.cpp | 282 -
plugins/zynaddsubfx/src/Synth/Resonance.h | 70 -
plugins/zynaddsubfx/src/Synth/SUBnote.cpp | 790 -
plugins/zynaddsubfx/src/Synth/SUBnote.h | 135 -
plugins/zynaddsubfx/src/UI/ADnoteUI.cc | 2202 ---
plugins/zynaddsubfx/src/UI/ADnoteUI.fl | 1161 --
plugins/zynaddsubfx/src/UI/ADnoteUI.h | 387 -
plugins/zynaddsubfx/src/UI/BankUI.cc | 421 -
plugins/zynaddsubfx/src/UI/BankUI.fl | 355 -
plugins/zynaddsubfx/src/UI/BankUI.h | 101 -
plugins/zynaddsubfx/src/UI/CMakeLists.txt | 32 -
plugins/zynaddsubfx/src/UI/ConfigUI.cc | 562 -
plugins/zynaddsubfx/src/UI/ConfigUI.fl | 451 -
plugins/zynaddsubfx/src/UI/ConfigUI.h | 120 -
plugins/zynaddsubfx/src/UI/EffUI.cc | 4113 ------
plugins/zynaddsubfx/src/UI/EffUI.fl | 2361 ---
plugins/zynaddsubfx/src/UI/EffUI.h | 820 --
plugins/zynaddsubfx/src/UI/EnvelopeUI.cc | 1525 --
plugins/zynaddsubfx/src/UI/EnvelopeUI.fl | 851 --
plugins/zynaddsubfx/src/UI/EnvelopeUI.h | 280 -
plugins/zynaddsubfx/src/UI/FilterUI.cc | 987 --
plugins/zynaddsubfx/src/UI/FilterUI.fl | 624 -
plugins/zynaddsubfx/src/UI/FilterUI.h | 198 -
plugins/zynaddsubfx/src/UI/LFOUI.cc | 289 -
plugins/zynaddsubfx/src/UI/LFOUI.fl | 176 -
plugins/zynaddsubfx/src/UI/LFOUI.h | 83 -
plugins/zynaddsubfx/src/UI/MasterUI.cc | 2504 ----
plugins/zynaddsubfx/src/UI/MasterUI.fl | 1815 ---
plugins/zynaddsubfx/src/UI/MasterUI.h | 448 -
plugins/zynaddsubfx/src/UI/MicrotonalUI.cc | 463 -
plugins/zynaddsubfx/src/UI/MicrotonalUI.fl | 270 -
plugins/zynaddsubfx/src/UI/MicrotonalUI.h | 112 -
plugins/zynaddsubfx/src/UI/OscilGenUI.cc | 1410 --
plugins/zynaddsubfx/src/UI/OscilGenUI.fl | 1133 --
plugins/zynaddsubfx/src/UI/OscilGenUI.h | 281 -
plugins/zynaddsubfx/src/UI/PADnoteUI.cc | 1504 --
plugins/zynaddsubfx/src/UI/PADnoteUI.fl | 1101 --
plugins/zynaddsubfx/src/UI/PADnoteUI.h | 305 -
plugins/zynaddsubfx/src/UI/PartUI.cc | 1880 ---
plugins/zynaddsubfx/src/UI/PartUI.fl | 1125 --
plugins/zynaddsubfx/src/UI/PartUI.h | 338 -
plugins/zynaddsubfx/src/UI/PresetsUI.cc | 274 -
plugins/zynaddsubfx/src/UI/PresetsUI.fl | 208 -
plugins/zynaddsubfx/src/UI/PresetsUI.h | 84 -
plugins/zynaddsubfx/src/UI/ResonanceUI.cc | 553 -
plugins/zynaddsubfx/src/UI/ResonanceUI.fl | 392 -
plugins/zynaddsubfx/src/UI/ResonanceUI.h | 120 -
plugins/zynaddsubfx/src/UI/SUBnoteUI.cc | 735 -
plugins/zynaddsubfx/src/UI/SUBnoteUI.fl | 449 -
plugins/zynaddsubfx/src/UI/SUBnoteUI.h | 179 -
plugins/zynaddsubfx/src/UI/SeqUI.cc | 98 -
plugins/zynaddsubfx/src/UI/SeqUI.fl | 73 -
plugins/zynaddsubfx/src/UI/SeqUI.h | 39 -
plugins/zynaddsubfx/src/UI/VirKeyboard.cc | 499 -
plugins/zynaddsubfx/src/UI/VirKeyboard.fl | 424 -
plugins/zynaddsubfx/src/UI/VirKeyboard.h | 90 -
plugins/zynaddsubfx/src/UI/WidgetPDial.cc | 215 -
plugins/zynaddsubfx/src/UI/WidgetPDial.fl | 253 -
plugins/zynaddsubfx/src/UI/WidgetPDial.h | 46 -
plugins/zynaddsubfx/src/UI/filechooser.h | 27 -
plugins/zynaddsubfx/src/globals.h | 235 -
plugins/zynaddsubfx/update-zynaddsubfx.sh | 9 +
plugins/zynaddsubfx/zynaddsubfx.rc | 26 -
plugins/zynaddsubfx/zynaddsubfx.rc.in | 4 +-
plugins/zynaddsubfx/zynaddsubfx/.gitmodules | 3 +
plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt | 32 +
plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt | 21 +
plugins/zynaddsubfx/zynaddsubfx/COPYING | 347 +
plugins/zynaddsubfx/zynaddsubfx/CTestConfig.cmake | 13 +
plugins/zynaddsubfx/zynaddsubfx/ChangeLog | 1038 ++
.../ExternalPrograms/Controller/Controller.C | 84 +
.../ExternalPrograms/Controller/Controller.h | 33 +
.../ExternalPrograms/Controller/ControllerUI.fl | 217 +
.../zynaddsubfx/ExternalPrograms/Controller/main.C | 16 +
.../zynaddsubfx/ExternalPrograms/Spliter/Spliter.C | 82 +
.../zynaddsubfx/ExternalPrograms/Spliter/Spliter.h | 27 +
.../ExternalPrograms/Spliter/SpliterUI.fl | 70 +
.../zynaddsubfx/ExternalPrograms/Spliter/main.C | 37 +
.../ExternalPrograms/Spliter/readme.txt | 15 +
.../zynaddsubfx/ExternalPrograms/readme.txt | 2 +
plugins/zynaddsubfx/zynaddsubfx/FAQ.txt | 27 +
plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt | 239 +
plugins/zynaddsubfx/zynaddsubfx/README.txt | 86 +
plugins/zynaddsubfx/zynaddsubfx/bugs.txt | 0
.../zynaddsubfx/zynaddsubfx/cmake/FindAlsa.cmake | 69 +
.../zynaddsubfx/cmake/FindCxxTest.cmake | 200 +
.../zynaddsubfx/zynaddsubfx/cmake/FindJACK.cmake | 17 +
.../zynaddsubfx/zynaddsubfx/cmake/FindOSS.cmake | 9 +
.../zynaddsubfx/zynaddsubfx/cmake/Findzlib.cmake | 39 +
plugins/zynaddsubfx/zynaddsubfx/doc/Doxyfile | 309 +
.../zynaddsubfx/zynaddsubfx/doc/IT/01-intro_IT.txt | 55 +
.../zynaddsubfx/doc/IT/02-filter_IT.txt | 61 +
.../zynaddsubfx/zynaddsubfx/doc/IT/03-lfo_IT.txt | 64 +
.../zynaddsubfx/doc/IT/04-envelope_IT.txt | 134 +
.../zynaddsubfx/doc/IT/05-adsynth_IT.txt | 78 +
.../zynaddsubfx/doc/IT/06-controller_IT.txt | 56 +
.../zynaddsubfx/doc/IT/08-saving_IT.txt | 54 +
.../doc/IT/APPENDIX_A-mididefaults_IT.txt | 22 +
.../zynaddsubfx/doc/IT/APPENDIX_B-build_IT.txt | 61 +
.../doc/IT/APPENDIX_C-doc_getting_IT.txt | 63 +
.../zynaddsubfx/doc/IT/zynaddsubfx_IT.txt | 28 +
plugins/zynaddsubfx/zynaddsubfx/doc/README.txt | 9 +
plugins/zynaddsubfx/zynaddsubfx/doc/adsynth.txt | 148 +
plugins/zynaddsubfx/zynaddsubfx/doc/build.txt | 59 +
plugins/zynaddsubfx/zynaddsubfx/doc/controller.txt | 54 +
plugins/zynaddsubfx/zynaddsubfx/doc/effects.txt | 531 +
plugins/zynaddsubfx/zynaddsubfx/doc/envelope.txt | 131 +
plugins/zynaddsubfx/zynaddsubfx/doc/filter.txt | 81 +
.../zynaddsubfx/zynaddsubfx/doc/gen/ad-note.tex | 37 +
plugins/zynaddsubfx/zynaddsubfx/doc/gen/chorus.tex | 38 +
.../zynaddsubfx/zynaddsubfx/doc/gen/distort.tex | 44 +
.../zynaddsubfx/zynaddsubfx/doc/gen/dynamic.tex | 46 +
plugins/zynaddsubfx/zynaddsubfx/doc/gen/echo.tex | 43 +
plugins/zynaddsubfx/zynaddsubfx/doc/gen/fig.sty | 14 +
plugins/zynaddsubfx/zynaddsubfx/doc/gen/reverb.tex | 50 +
plugins/zynaddsubfx/zynaddsubfx/doc/gen/velf.tex | 16 +
plugins/zynaddsubfx/zynaddsubfx/doc/getting.txt | 65 +
.../zynaddsubfx/doc/images/ad-global.png | Bin 0 -> 81812 bytes
.../zynaddsubfx/doc/images/ad-voice.png | Bin 0 -> 121442 bytes
.../zynaddsubfx/doc/images/envelope1.png | Bin 0 -> 41735 bytes
.../zynaddsubfx/doc/images/envelope2.png | Bin 0 -> 16088 bytes
.../zynaddsubfx/doc/images/envelope3.png | Bin 0 -> 20588 bytes
.../zynaddsubfx/doc/images/envelope4.png | Bin 0 -> 17789 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/filter0.png | Bin 0 -> 245103 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/filter1.png | Bin 0 -> 156922 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/filter2.png | Bin 0 -> 77767 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/lfo0.png | Bin 0 -> 25759 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/lfo1.png | Bin 0 -> 27044 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/lfo2.png | Bin 0 -> 60122 bytes
.../zynaddsubfx/doc/images/phaser-spectrogram.jpg | Bin 0 -> 28409 bytes
.../zynaddsubfx/doc/images/uicontroller.png | Bin 0 -> 21647 bytes
.../zynaddsubfx/doc/images/uienvelope0.jpg | Bin 0 -> 12081 bytes
.../zynaddsubfx/doc/images/uienvelope1.jpg | Bin 0 -> 5700 bytes
.../zynaddsubfx/doc/images/uienvelope2.jpg | Bin 0 -> 5342 bytes
.../zynaddsubfx/doc/images/uienvelope3.jpg | Bin 0 -> 6674 bytes
.../zynaddsubfx/doc/images/uifilter.png | Bin 0 -> 10133 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/uilfo.jpg | Bin 0 -> 6312 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/uimain.png | Bin 0 -> 44523 bytes
.../zynaddsubfx/zynaddsubfx/doc/images/uioscil.png | Bin 0 -> 38211 bytes
plugins/zynaddsubfx/zynaddsubfx/doc/intro.txt | 59 +
plugins/zynaddsubfx/zynaddsubfx/doc/lfo.txt | 65 +
.../zynaddsubfx/zynaddsubfx/doc/mididefaults.txt | 22 +
plugins/zynaddsubfx/zynaddsubfx/doc/nrpn.txt | 162 +
plugins/zynaddsubfx/zynaddsubfx/doc/saving.txt | 55 +
.../zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.1.txt | 82 +
.../zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.txt | 31 +
.../zynaddsubfx/zynaddsubfx/pixmaps/black_key.png | Bin 0 -> 892 bytes
.../zynaddsubfx/pixmaps/black_key_pressed.png | Bin 0 -> 901 bytes
plugins/zynaddsubfx/zynaddsubfx/pixmaps/knob.png | Bin 0 -> 26619 bytes
.../zynaddsubfx/pixmaps/module_backdrop.png | Bin 0 -> 1779 bytes
.../zynaddsubfx/zynaddsubfx/pixmaps/white_key.png | Bin 0 -> 504 bytes
.../zynaddsubfx/pixmaps/white_key_pressed.png | Bin 0 -> 796 bytes
.../zynaddsubfx/pixmaps/window_backdrop.png | Bin 0 -> 10962 bytes
plugins/zynaddsubfx/zynaddsubfx/src/CMakeLists.txt | 384 +
.../zynaddsubfx/src/DSP/AnalogFilter.cpp | 428 +
.../zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h | 85 +
.../zynaddsubfx/zynaddsubfx/src/DSP/CMakeLists.txt | 9 +
.../zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp | 85 +
.../zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h | 52 +
plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp | 75 +
plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h | 64 +
.../zynaddsubfx/src/DSP/FormantFilter.cpp | 230 +
.../zynaddsubfx/src/DSP/FormantFilter.h | 66 +
.../zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp | 183 +
plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h | 70 +
plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp | 203 +
plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h | 76 +
.../zynaddsubfx/src/Effects/Alienwah.cpp | 236 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h | 81 +
.../zynaddsubfx/src/Effects/CMakeLists.txt | 14 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp | 269 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h | 106 +
.../zynaddsubfx/src/Effects/Distorsion.cpp | 245 +
.../zynaddsubfx/src/Effects/Distorsion.h | 61 +
.../zynaddsubfx/src/Effects/DynamicFilter.cpp | 312 +
.../zynaddsubfx/src/Effects/DynamicFilter.h | 65 +
plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp | 198 +
plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h | 55 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp | 232 +
plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h | 106 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp | 67 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Effect.h | 124 +
.../zynaddsubfx/src/Effects/EffectLFO.cpp | 113 +
.../zynaddsubfx/src/Effects/EffectLFO.h | 53 +
.../zynaddsubfx/src/Effects/EffectMgr.cpp | 311 +
.../zynaddsubfx/src/Effects/EffectMgr.h | 86 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp | 470 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h | 98 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp | 491 +
.../zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h | 94 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp | 473 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h | 103 +
.../zynaddsubfx/src/Misc/CMakeLists.txt | 28 +
.../zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp | 323 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h | 76 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h | 99 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp | 121 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h | 63 +
.../zynaddsubfx/src/Misc/LASHClient.cpp | 103 +
.../zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h | 63 +
.../zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp | 808 ++
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h | 183 +
.../zynaddsubfx/src/Misc/Microtonal.cpp | 694 +
.../zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h | 134 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp | 1339 ++
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h | 202 +
.../zynaddsubfx/src/Misc/QtXmlWrapper.cpp | 550 +
.../zynaddsubfx/src/Misc/QtXmlWrapper.h | 125 +
.../zynaddsubfx/zynaddsubfx/src/Misc/Recorder.cpp | 91 +
.../zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h | 54 +
.../zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp | 38 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h | 40 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp | 230 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h | 116 +
.../zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp | 97 +
plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h | 44 +
.../zynaddsubfx/src/Misc/WaveShapeSmps.cpp | 189 +
.../zynaddsubfx/src/Misc/WaveShapeSmps.h | 31 +
.../zynaddsubfx/src/Misc/XMLwrapper.cpp | 623 +
.../zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h | 275 +
.../zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.cpp | 366 +
.../zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h | 82 +
.../zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp | 58 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h | 61 +
.../zynaddsubfx/zynaddsubfx/src/Nio/CMakeLists.txt | 47 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp | 28 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h | 41 +
.../zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.cpp | 156 +
.../zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.h | 43 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp | 141 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h | 55 +
.../zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp | 406 +
.../zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h | 89 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp | 77 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h | 43 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.cpp | 138 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.h | 47 +
.../zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp | 113 +
.../zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h | 56 +
.../zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp | 285 +
.../zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h | 76 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.cpp | 185 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.h | 65 +
.../zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp | 118 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h | 57 +
.../zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp | 89 +
.../zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h | 49 +
.../zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp | 133 +
.../zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h | 61 +
plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h | 112 +
.../zynaddsubfx/src/Output/DSSIaudiooutput.cpp | 711 +
.../zynaddsubfx/src/Output/DSSIaudiooutput.h | 123 +
.../zynaddsubfx/src/Params/ADnoteParameters.cpp | 796 ++
.../zynaddsubfx/src/Params/ADnoteParameters.h | 319 +
.../zynaddsubfx/src/Params/CMakeLists.txt | 13 +
.../zynaddsubfx/src/Params/Controller.cpp | 419 +
.../zynaddsubfx/src/Params/Controller.h | 220 +
.../zynaddsubfx/src/Params/EnvelopeParams.cpp | 296 +
.../zynaddsubfx/src/Params/EnvelopeParams.h | 89 +
.../zynaddsubfx/src/Params/FilterParams.cpp | 392 +
.../zynaddsubfx/src/Params/FilterParams.h | 102 +
.../zynaddsubfx/src/Params/LFOParams.cpp | 104 +
.../zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h | 71 +
.../zynaddsubfx/src/Params/PADnoteParameters.cpp | 906 ++
.../zynaddsubfx/src/Params/PADnoteParameters.h | 179 +
.../zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp | 119 +
.../zynaddsubfx/zynaddsubfx/src/Params/Presets.h | 56 +
.../zynaddsubfx/src/Params/PresetsArray.cpp | 146 +
.../zynaddsubfx/src/Params/PresetsArray.h | 59 +
.../zynaddsubfx/src/Params/PresetsStore.cpp | 184 +
.../zynaddsubfx/src/Params/PresetsStore.h | 70 +
.../zynaddsubfx/src/Params/SUBnoteParameters.cpp | 330 +
.../zynaddsubfx/src/Params/SUBnoteParameters.h | 112 +
.../zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp | 1822 +++
plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h | 325 +
.../zynaddsubfx/src/Synth/CMakeLists.txt | 11 +
.../zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp | 206 +
.../zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h | 64 +
plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp | 183 +
plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h | 58 +
.../zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp | 1503 ++
.../zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h | 175 +
.../zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp | 432 +
.../zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h | 121 +
.../zynaddsubfx/src/Synth/Resonance.cpp | 276 +
.../zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h | 70 +
.../zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp | 613 +
.../zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h | 111 +
.../zynaddsubfx/src/Synth/SynthNote.cpp | 134 +
.../zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h | 86 +
.../zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h | 201 +
.../zynaddsubfx/src/Tests/CMakeLists.txt | 35 +
.../zynaddsubfx/src/Tests/ControllerTest.h | 75 +
.../zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h | 126 +
.../zynaddsubfx/src/Tests/MicrotonalTest.h | 136 +
.../zynaddsubfx/src/Tests/OscilGenTest.h | 141 +
.../zynaddsubfx/src/Tests/PadNoteTest.h | 207 +
.../zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h | 119 +
.../zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h | 41 +
.../zynaddsubfx/src/Tests/SubNoteTest.h | 182 +
.../zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h | 183 +
.../zynaddsubfx/src/Tests/XMLwrapperTest.h | 70 +
.../zynaddsubfx/src/Tests/guitar-adnote.xmz | 3842 +++++
plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl | 1169 ++
plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl | 368 +
.../zynaddsubfx/zynaddsubfx/src/UI/CMakeLists.txt | 45 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl | 415 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/EffUI.fl | 2351 +++
.../zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl | 907 ++
plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl | 638 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl | 181 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl | 1889 +++
.../zynaddsubfx/zynaddsubfx/src/UI/MicrotonalUI.fl | 270 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.C | 163 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.H | 45 +
.../zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.C | 403 +
.../zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.H | 143 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.cpp | 76 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.h | 20 +
.../zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl | 1148 ++
.../zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl | 1118 ++
plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl | 1125 ++
.../zynaddsubfx/zynaddsubfx/src/UI/PresetsUI.fl | 278 +
.../zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl | 398 +
.../zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl | 524 +
.../zynaddsubfx/zynaddsubfx/src/UI/VirKeyboard.fl | 487 +
.../zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.cpp | 264 +
.../zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.h | 25 +
plugins/zynaddsubfx/zynaddsubfx/src/UI/common.H | 29 +
plugins/zynaddsubfx/zynaddsubfx/src/globals.h | 249 +
plugins/zynaddsubfx/zynaddsubfx/src/main.cpp | 554 +
plugins/zynaddsubfx/zynaddsubfx/style.cfg | 1218 ++
plugins/zynaddsubfx/zynaddsubfx/style.sh | 6 +
.../zynaddsubfx/zynaddsubfx-alsa.desktop | 8 +
.../zynaddsubfx/zynaddsubfx-jack.desktop | 8 +
.../zynaddsubfx.ico} | Bin
plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx.svg | 313 +
src/core/AutomatableModel.cpp | 253 +-
src/core/AutomationPattern.cpp | 98 +-
src/core/BandLimitedWave.cpp | 271 +
src/core/Clipboard.cpp | 2 +-
src/core/ComboBoxModel.cpp | 2 +-
src/core/Controller.cpp | 5 +-
src/core/ControllerConnection.cpp | 2 +-
src/core/DataFile.cpp | 68 +-
src/core/Effect.cpp | 27 +-
src/core/EffectChain.cpp | 44 +-
src/core/EnvelopeAndLfoParameters.cpp | 11 +-
src/core/FxMixer.cpp | 616 +-
src/core/ImportFilter.cpp | 2 +-
src/core/InlineAutomation.cpp | 2 +-
src/core/Instrument.cpp | 2 +-
src/core/InstrumentFunctions.cpp | 139 +-
src/core/InstrumentSoundShaping.cpp | 22 +-
src/core/JournallingObject.cpp | 138 +-
src/core/LadspaControl.cpp | 14 +-
src/core/LfoController.cpp | 2 +-
src/core/MemoryHelper.cpp | 65 +
src/core/MeterModel.cpp | 2 +-
src/core/MixHelpers.cpp | 25 +-
src/core/Mixer.cpp | 329 +-
src/core/MixerProfiler.cpp | 63 +
src/core/MixerWorkerThread.cpp | 174 +
src/core/Model.cpp | 2 +-
src/core/NotePlayHandle.cpp | 110 +-
src/core/Oscillator.cpp | 2 +-
src/core/PeakController.cpp | 2 +-
src/core/Piano.cpp | 6 +-
src/core/Plugin.cpp | 93 +-
src/core/PresetPreviewPlayHandle.cpp | 2 +-
src/core/ProjectJournal.cpp | 120 +-
src/core/ProjectRenderer.cpp | 2 +-
src/core/RemotePlugin.cpp | 2 +-
src/core/SampleBuffer.cpp | 380 +-
src/core/SamplePlayHandle.cpp | 4 +-
src/core/SampleRecordHandle.cpp | 4 +-
src/core/SerializingObject.cpp | 2 +-
src/core/TempoSyncKnobModel.cpp | 2 +-
src/core/ToolPlugin.cpp | 2 +-
src/core/TrackContainer.cpp | 14 +-
src/core/VstSyncController.cpp | 2 +-
src/core/audio/AudioAlsa.cpp | 13 +-
src/core/audio/AudioDevice.cpp | 2 +-
src/core/audio/AudioFileDevice.cpp | 2 +-
src/core/audio/AudioFileOgg.cpp | 2 +-
src/core/audio/AudioFileWave.cpp | 2 +-
src/core/audio/AudioJack.cpp | 3 +-
src/core/audio/AudioOss.cpp | 4 +-
src/core/audio/AudioPort.cpp | 15 +-
src/core/audio/AudioPortAudio.cpp | 2 +-
src/core/audio/AudioPulseAudio.cpp | 4 +-
src/core/audio/AudioSampleRecorder.cpp | 2 +-
src/core/audio/AudioSdl.cpp | 2 +-
src/core/base64.cpp | 2 +-
src/core/bb_track_container.cpp | 2 +-
src/core/config_mgr.cpp | 30 +-
src/core/drumsynth.cpp | 2 +-
src/core/engine.cpp | 9 +-
src/core/fft_helpers.cpp | 6 +-
src/core/ladspa_2_lmms.cpp | 2 +-
src/core/ladspa_manager.cpp | 2 +-
src/core/main.cpp | 52 +-
src/core/midi/MidiAlsaRaw.cpp | 2 +-
src/core/midi/MidiAlsaSeq.cpp | 2 +-
src/core/midi/MidiClient.cpp | 2 +-
src/core/midi/MidiController.cpp | 4 +-
src/core/midi/MidiOss.cpp | 2 +-
src/core/midi/MidiPort.cpp | 4 +-
src/core/midi/MidiWinMM.cpp | 2 +-
src/core/note.cpp | 56 +-
src/core/project_version.cpp | 2 +-
src/core/song.cpp | 61 +-
src/core/timeline.cpp | 22 +-
src/core/track.cpp | 315 +-
src/gui/AutomatableModelView.cpp | 4 +-
src/gui/AutomationEditor.cpp | 283 +-
src/gui/AutomationPatternView.cpp | 52 +-
src/gui/ControllerConnectionDialog.cpp | 4 +-
src/gui/ControllerDialog.cpp | 2 +-
src/gui/EffectControlDialog.cpp | 2 +-
src/gui/EffectSelectDialog.cpp | 3 +-
src/gui/FileBrowser.cpp | 1057 ++
src/gui/FxMixerView.cpp | 556 +-
src/gui/InstrumentView.cpp | 2 +-
src/gui/LfoControllerDialog.cpp | 4 +-
src/gui/LmmsPalette.cpp | 100 +
src/gui/LmmsStyle.cpp | 40 +-
src/gui/MainWindow.cpp | 58 +-
src/gui/ModelView.cpp | 2 +-
src/gui/PeakControllerDialog.cpp | 2 +-
src/gui/PianoRoll.cpp | 648 +-
src/gui/PianoView.cpp | 14 +-
src/gui/SongEditor.cpp | 2 +-
src/gui/ToolPluginView.cpp | 2 +-
src/gui/TrackContainerView.cpp | 85 +-
src/gui/about_dialog.cpp | 17 +-
src/gui/bb_editor.cpp | 37 +-
src/gui/dialogs/FileDialog.cpp | 10 +-
src/gui/dialogs/VersionedSaveDialog.cpp | 2 +-
src/gui/dialogs/about_dialog.ui | 180 +-
src/gui/dialogs/export_project.ui | 14 -
src/gui/embed.cpp | 2 +-
src/gui/export_project_dialog.cpp | 13 +-
src/gui/file_browser.cpp | 1033 --
src/gui/plugin_browser.cpp | 74 +-
src/gui/setup_dialog.cpp | 6 +-
src/gui/string_pair_drag.cpp | 2 +-
src/gui/widgets/ControllerRackView.cpp | 2 +-
src/gui/widgets/ControllerView.cpp | 8 +-
src/gui/widgets/EffectRackView.cpp | 2 +-
src/gui/widgets/EffectView.cpp | 20 +-
src/gui/widgets/EnvelopeAndLfoView.cpp | 23 +-
src/gui/widgets/FxLine.cpp | 263 +
src/gui/widgets/InstrumentFunctionViews.cpp | 2 +-
src/gui/widgets/InstrumentMidiIOView.cpp | 4 +-
src/gui/widgets/InstrumentSoundShapingView.cpp | 2 +-
src/gui/widgets/LadspaControlView.cpp | 2 +-
src/gui/widgets/LcdSpinBox.cpp | 12 +-
src/gui/widgets/LcdWidget.cpp | 71 +-
src/gui/widgets/MeterDialog.cpp | 4 +-
src/gui/widgets/MidiPortMenu.cpp | 2 +-
src/gui/widgets/SendButtonIndicator.cpp | 63 +
src/gui/widgets/SideBar.cpp | 2 +-
src/gui/widgets/SideBarWidget.cpp | 2 +-
src/gui/widgets/TimeDisplayWidget.cpp | 2 +-
src/gui/widgets/automatable_button.cpp | 2 +-
src/gui/widgets/automatable_slider.cpp | 2 +-
src/gui/widgets/caption_menu.cpp | 23 +-
src/gui/widgets/combobox.cpp | 2 +-
src/gui/widgets/cpuload_widget.cpp | 2 +-
src/gui/widgets/fade_button.cpp | 4 +-
src/gui/widgets/fader.cpp | 69 +-
src/gui/widgets/graph.cpp | 43 +-
src/gui/widgets/group_box.cpp | 2 +-
src/gui/widgets/knob.cpp | 214 +-
src/gui/widgets/led_checkbox.cpp | 69 +-
src/gui/widgets/nstate_button.cpp | 2 +-
src/gui/widgets/pixmap_button.cpp | 2 +-
src/gui/widgets/project_notes.cpp | 2 +-
src/gui/widgets/rename_dialog.cpp | 2 +-
src/gui/widgets/rubberband.cpp | 2 +-
src/gui/widgets/tab_bar.cpp | 2 +-
src/gui/widgets/tab_widget.cpp | 27 +-
src/gui/widgets/tempo_sync_knob.cpp | 10 +-
src/gui/widgets/text_float.cpp | 32 +-
src/gui/widgets/tool_button.cpp | 2 +-
src/gui/widgets/tooltip.cpp | 2 +-
src/gui/widgets/track_label_button.cpp | 4 +-
src/gui/widgets/visualization_widget.cpp | 3 +-
src/tracks/AutomationTrack.cpp | 6 +-
src/tracks/InstrumentTrack.cpp | 98 +-
src/tracks/InstrumentTrack.cpp.orig | 1667 ---
src/tracks/Pattern.cpp | 1153 ++
src/tracks/SampleTrack.cpp | 13 +-
src/tracks/bb_track.cpp | 160 +-
src/tracks/pattern.cpp | 1163 --
tests/README | 5 +
tests/emptyproject.mmp | 279 +
2365 files changed, 278721 insertions(+), 103518 deletions(-)
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..e69de29
diff --git a/.mailmap b/.mailmap
new file mode 100644
index 0000000..067e892
--- /dev/null
+++ b/.mailmap
@@ -0,0 +1,11 @@
+Tobias Doerffel <tobias.doerffel at gmail.com>
+Paul Giblock <drfaygo at gmail.com> <pgib at users.sf.net>
+Paul Giblock <drfaygo at gmail.com> <p at pgiblock.net>
+Andrew Kelley <superjoe30 at gmail.com> <andrew.r.kelley at gmail.com>
+Andrew Kelley <superjoe30 at gmail.com> <andy at debian.superjoesoftware>
+Janne Sinisalo <janne.m.sinisalo at gmail.com> <janne at janne-desktop.(none)>
+Raine M. Ekman <raine at iki.fi> <raine at raine.(none)>
+Raine M. Ekman <raine at iki.fi> <raine at raine.damex.fi>
+Lukas W <lukaswhl at googlemail.com> <lukaswhl at gmail.com>
+Vesa <contact.diizy at nbl.fi> <vesa at isokone.(none)>
+Jonathan Aquilina <eagles051387 at gmail.com>
diff --git a/.svnignore b/.svnignore
new file mode 100644
index 0000000..a9cdbbe
--- /dev/null
+++ b/.svnignore
@@ -0,0 +1,6 @@
+Makefile.in
+*.moc
+.libs
+embedded_resources.h
+.deps
+Makefile
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..cfd45e6
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,32 @@
+language: cpp
+compiler: gcc
+env:
+ - TARGET_OS=linux
+ - TARGET_OS=win32
+ - TARGET_OS=win64
+before_install:
+ - if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw-x-precise -y; fi
+ - sudo apt-get update -qq
+install:
+ - if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi
+ - if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime; fi
+ - if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime; fi
+ - if [ $TARGET_OS == linux ]; then sudo apt-get install -y libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev; fi
+before_script:
+ - mkdir build && cd build
+script:
+ - if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi
+ - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi
+ - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. && make -j4 VERBOSE=1; fi
+ - if [ $TARGET_OS != linux ]; then make; fi
+before_deploy: make package
+deploy:
+ provider: releases
+ api_key:
+ secure: d4a+x4Gugpss7JK2DcHjyBZDmEFFh4iVfKDfITSD50T6Mc6At4LMgojvEu+6qT6IyOY2vm3UVT6fhyeuWDTRDwW9tfFlaHVA0h8aTRD+eAXOA7pQ8rEMwQO3+WCKuKTfEqUkpL4wxhww8dpkv54tqeIs0S4TBqz9tk8UhzU7XbE=
+ file: lmms-${TRAVIS_TAG:1}-$TARGET_OS.exe
+ on:
+ tags: true
+ all_branches: true
+ condition: "$TARGET_OS != linux"
+ repo: LMMS/lmms
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b163485..63af96c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,7 +14,7 @@ INCLUDE(CheckIncludeFiles)
INCLUDE(FindPkgConfig)
SET(VERSION_MAJOR "1")
-SET(VERSION_MINOR "0")
+SET(VERSION_MINOR "1")
SET(VERSION_PATCH "3")
#SET(VERSION_SUFFIX "")
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
@@ -29,6 +29,7 @@ INCLUDE(DetectMachine)
OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" ON)
OPTION(WANT_CALF "Include CALF LADSPA plugins" ON)
OPTION(WANT_CAPS "Include C* Audio Plugin Suite (LADSPA plugins)" ON)
+OPTION(WANT_CARLA "Include Carla plugin" ON)
OPTION(WANT_CMT "Include Computer Music Toolkit LADSPA plugins" ON)
OPTION(WANT_JACK "Include JACK (Jack Audio Connection Kit) support" ON)
OPTION(WANT_OGGVORBIS "Include OGG/Vorbis support" ON)
@@ -45,7 +46,8 @@ OPTION(WANT_WINMM "Include WinMM MIDI support" OFF)
IF(LMMS_BUILD_APPLE)
- SET(WANT_ALSA OFF)
+ SET(WANT_SF2 OFF)
+ SET(WANT_ALSA OFF)
SET(WANT_PULSEAUDIO OFF)
SET(WANT_VST OFF)
SET(STATUS_ALSA "<not supported on this platform>")
@@ -156,6 +158,18 @@ SET(STATUS_TAP "not built as requested")
ENDIF(WANT_TAP)
+# check for CARLA
+IF(WANT_CARLA)
+ PKG_CHECK_MODULES(CARLA carla-standalone>=1.9.5)
+ IF(CARLA_FOUND)
+ SET(LMMS_HAVE_CARLA TRUE)
+ SET(STATUS_CARLA "OK")
+ ELSE(CARLA_FOUND)
+ SET(STATUS_CARLA "not found, please install the latest carla")
+ ENDIF(CARLA_FOUND)
+ENDIF(WANT_CARLA)
+
+
# check for SDL
IF(WANT_SDL)
SET(SDL_BUILDING_LIBRARY TRUE)
@@ -324,6 +338,11 @@ IF(NOT LMMS_BUILD_APPLE)
SET(WERROR_FLAGS "${WERROR_FLAGS} -Werror")
ENDIF()
+# Due to a regression in gcc-4.8.X, we need to disable array-bounds check
+IF (CMAKE_COMPILER_IS_GNUCXX AND ((CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.8.0") OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8.0")))
+ SET(WERROR_FLAGS "${WERROR_FLAGS} -Wno-array-bounds")
+ENDIF()
+
SET(CMAKE_C_FLAGS "-O2 -g ${WERROR_FLAGS} ${CMAKE_C_FLAGS}")
SET(CMAKE_CXX_FLAGS "-O2 -g -fno-exceptions ${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "-DLMMS_DEBUG")
@@ -398,7 +417,7 @@ SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010")
SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project")
SET(MACOSX_BUNDLE_MIMETYPE_ICON "project.icns")
SET(MACOSX_BUNDLE_MIMETYPE_ID "net.sourceforge.lmms")
-SET(MACOSX_BUNDLE_PROJECT_URL "http://lmms.sourceforge.net")
+SET(MACOSX_BUNDLE_PROJECT_URL "http://lmms.io")
# make sub-directories
@@ -456,14 +475,16 @@ IF(LMMS_BUILD_WIN32)
INSTALL(FILES
"${MINGW_PREFIX}/bin/QtCore4.dll"
"${MINGW_PREFIX}/bin/QtGui4.dll"
+ "${MINGW_PREFIX}/bin/QtSvg4.dll"
"${MINGW_PREFIX}/bin/QtXml4.dll"
"${MINGW_PREFIX}/bin/libsamplerate-0.dll"
"${MINGW_PREFIX}/bin/libsndfile-1.dll"
"${MINGW_PREFIX}/bin/libvorbis-0.dll"
"${MINGW_PREFIX}/bin/libvorbisenc-2.dll"
"${MINGW_PREFIX}/bin/libvorbisfile-3.dll"
+ "${MINGW_PREFIX}/bin/libjpeg-9.dll"
"${MINGW_PREFIX}/bin/libogg-0.dll"
- "${MINGW_PREFIX}/lib/libfltk.dll"
+ "${MINGW_PREFIX}/bin/libfltk.dll"
"${MINGW_PREFIX}/bin/libfluidsynth.dll"
"${MINGW_PREFIX}/bin/libfftw3f-3.dll"
"${MINGW_PREFIX}/bin/libFLAC-8.dll"
@@ -496,7 +517,7 @@ FOREACH(_ts_file ${lmms_LOCALES})
STRING(REPLACE "${CMAKE_SOURCE_DIR}/data/locale/" "" _ts_target "${_ts_file}")
STRING(REPLACE ".ts" ".qm" _qm_file "${_ts_file}")
STRING(REPLACE ".ts" ".qm" _qm_target "${_ts_target}")
- ADD_CUSTOM_TARGET(${_ts_target} COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete ${lmms_SOURCES} ${lmms_UI} `find "\"${CMAKE_SOURCE_DIR}/plugins/\"" -type f -name '*.cpp'` -ts "\"${_ts_file}\"")
+ ADD_CUSTOM_TARGET(${_ts_target} COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete -I ${CMAKE_SOURCE_DIR}/include/ ${lmms_SOURCES} ${lmms_INCLUDES} ${lmms_UI} `find "\"${CMAKE_SOURCE_DIR}/plugins/\"" -type f -name '*.cpp' -or -name '*.h'` -ts "\"${_ts_file}\"")
ADD_CUSTOM_TARGET(${_qm_target} COMMAND "${QT_LRELEASE_EXECUTABLE}" "\"${_ts_file}\"" -qm "\"${_qm_file}\"")
LIST(APPEND ts_targets "${_ts_target}")
LIST(APPEND qm_targets "${_qm_target}")
@@ -598,6 +619,7 @@ MESSAGE(
MESSAGE(
"Optional plugins\n"
"----------------\n"
+"* Carla Patchbay & Rack : ${STATUS_CARLA}\n"
"* SoundFont2 player : ${STATUS_FLUIDSYNTH}\n"
"* Stk Mallets : ${STATUS_STK}\n"
"* VST-instrument hoster : ${STATUS_VST}\n"
@@ -643,8 +665,8 @@ SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data/nsis_branding.bmp")
SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/data/lmms.ico")
SET(CPACK_NSIS_INSTALLED_ICON_NAME "lmms.exe")
SET(CPACK_NSIS_DISPLAY_NAME "LMMS ${VERSION}")
-SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\lmms.sourceforge.net")
-SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\lmms.sourceforge.net")
+SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\lmms.io")
+SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\lmms.io")
SET(CPACK_NSIS_CONTACT "lmms-devel at lists.sourceforge.net")
SET(CPACK_PACKAGE_EXECUTABLES "lmms.exe;LMMS")
SET(CPACK_NSIS_MENU_LINKS "lmms.exe;LMMS")
@@ -657,6 +679,8 @@ SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
\\\${unregisterExtension} \\\".mmp\\\" \\\"LMMS Project\\\"
\\\${unregisterExtension} \\\".mmpz\\\" \\\"LMMS Project (compressed)\\\"
+ DeleteRegKey HKCR \\\"LMMS Project\\\"
+ DeleteRegKey HKCR \\\"LMMS Project (compressed)\\\"
")
ELSE(WIN32)
SET(CPACK_STRIP_FILES "bin/lmms;${PLUGIN_DIR}/*.so")
diff --git a/README b/README
index 174f1d3..5969f40 100644
--- a/README
+++ b/README
@@ -1,10 +1,10 @@
-LMMS 1.0.3
+LMMS 1.0.93
===========
Copyright (c) 2004-2014 by LMMS developers
-This program is free software; you can redistribute it and/or modify
+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.
@@ -90,7 +90,7 @@ you're welcome to participate on the development of LMMS!
The project-homepage of LMMS, mailingslists and a list of things you can do
can be found at
-http://lmms.sourceforge.net
+http://lmms.io/
Details on development can be found in the Wiki:
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4852879
--- /dev/null
+++ b/README.md
@@ -0,0 +1,50 @@
+![LMMS Logo](http://lmms.sourceforge.net/Lmms_logo.png) LMMS
+=======================
+[![Build Status](https://travis-ci.org/LMMS/lmms.png)](https://travis-ci.org/LMMS/lmms)
+
+What is LMMS?
+--------------
+
+LMMS is a free cross-platform alternative to commercial programs like FL Studio®, which allow you to produce music with your computer. This includes the creation of melodies and beats, the synthesis and mixing of sounds, and arranging of samples. You can have fun with your MIDI-keyboard and much more; all in a user-friendly and modern interface.
+
+[Homepage](http://lmms.io)<br>
+[Downloads/Releases](https://github.com/LMMS/lmms/releases)<br>
+[Developer Wiki](https://github.com/LMMS/lmms/wiki)<br>
+[Artist & User Wiki/Documentation](http://lmms.io/documentation)<br>
+[Sound Demos](http://lmms.io/showcase/)<br>
+[LMMS Sharing Platform](http://lmms.io/lsp/) Share your songs!
+
+Features
+---------
+
+* Song-Editor for composing songs
+* A Beat+Bassline-Editor for creating beats and basslines
+* An easy-to-use Piano-Roll for editing patterns and melodies
+* An FX mixer with 64 FX channels and arbitrary number of effects allow unlimited mixing possibilities
+* Many powerful instrument and effect-plugins out of the box
+* Full user-defined track-based automation and computer-controlled automation sources
+* Compatible with many standards such as SoundFont2, VST(i), LADSPA, GUS Patches, and full MIDI support
+* Import of MIDI and FLP (FL Studio®/Fruityloops® Project) files
+
+[Latest Stable Release (1.0.3)](https://github.com/LMMS/lmms/releases/tag/v1.0.3)
+---------------------
+* Fix zyn GUI crash on win32
+* Fix SF2 note volume
+* Localization updates
+* Updated LADSPA search paths
+* Bugfixes in plugins
+
+Building
+---------
+
+See [Compiling LMMS](https://github.com/LMMS/lmms/wiki/Compiling-lmms) on our wiki for information on how to build LMMS.
+
+
+Join LMMS-development
+----------------------
+
+If you are interested in LMMS, it's programming, artwork, testing, writing demo-songs, (and improving this readme…) or something like that, you're welcome to participate on the development of LMMS!
+
+Information about what you can do and how can be found in the [wiki](https://github.com/LMMS/lmms/wiki).
+
+Before coding a new big feature, please _always_ [file an issue](https://github.com/LMMS/lmms/issues/new) for your idea and suggestions about your feature and about the intended implementation on GitHub or post to the LMMS-devel-mailinglist (lmms-devel at lists.sourceforge.net) and wait for replies! Maybe there're different ideas, improvements, hints or maybe your feature is not welcome/needed at the moment.
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
index c7f5a9d..d762f61 100644
--- a/data/CMakeLists.txt
+++ b/data/CMakeLists.txt
@@ -4,6 +4,7 @@ ADD_SUBDIRECTORY(presets)
ADD_SUBDIRECTORY(projects)
ADD_SUBDIRECTORY(samples)
ADD_SUBDIRECTORY(themes)
+ADD_SUBDIRECTORY(wavetables)
ADD_SUBDIRECTORY(scripts)
IF(LMMS_BUILD_LINUX)
@@ -20,4 +21,4 @@ ENDIF(LMMS_BUILD_WIN32)
IF(LMMS_BUILD_APPLE)
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX}/Info.plist")
-ENDIF(LMMS_BUILD_APPLE)
\ No newline at end of file
+ENDIF(LMMS_BUILD_APPLE)
diff --git a/data/dmg_branding.png b/data/dmg_branding.png
index aa76cdc..f971453 100644
Binary files a/data/dmg_branding.png and b/data/dmg_branding.png differ
diff --git a/data/locale/ca.qm b/data/locale/ca.qm
index b84bc4b..20b6264 100644
Binary files a/data/locale/ca.qm and b/data/locale/ca.qm differ
diff --git a/data/locale/ca.ts b/data/locale/ca.ts
index 5493627..d7e23bc 100644
--- a/data/locale/ca.ts
+++ b/data/locale/ca.ts
@@ -8,10 +8,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation type="unfinished"></translation>
</message>
@@ -46,7 +42,65 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">Volum:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished">PAN</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished">Panorama:</translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volum</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished">Panorama</translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -80,14 +134,6 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished">Si actives aquest botó, la mostra sencera serà invertida. Això és útil per a efectes interessants, p.e. un xoc invertit.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation type="unfinished">Bucle entre punts inicial i final</translation>
- </message>
- <message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Amplify:</source>
<translation type="unfinished">Amplificar:</translation>
</message>
@@ -100,23 +146,51 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished">Punt inicial:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>Endpoint:</source>
+ <translation type="unfinished">Punt final:</translation>
+ </message>
+ <message>
+ <source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
- <translation type="unfinished">Punt final:</translation>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>Disable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -365,6 +439,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -396,6 +474,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished">Desconnecta "%1"</translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -405,6 +487,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished">FREQ</translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished">Freqüència:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished">GUANY</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished">Guany:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished">PROPORCIÓ</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished">Proporció:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished">Freqüència</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished">Guany</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished">Proporció</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -517,6 +652,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished">Passa-Baixa</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished">Passa-Alta</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished">Passa-Banda csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">Passa-Banda czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">Osca</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">Passa-Tot</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished">2x Passa-Baixa</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -880,6 +1141,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation type="unfinished">Arrossega una mostra d'on sigui i amolla-la en aquesta finestra.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1008,14 +1273,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Alias-free oscillators</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -1029,10 +1286,81 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
- <name>FxMixer</name>
+ <name>FileBrowser</name>
<message>
- <source>Master</source>
- <translation type="unfinished">Mestre</translation>
+ <source>Browser</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
+ <message>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&Ajuda</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixer</name>
+ <message>
+ <source>Master</source>
+ <translation type="unfinished">Mestre</translation>
</message>
<message>
<source>FX %1</source>
@@ -1053,6 +1381,9 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>FX-Mixer</source>
<translation type="unfinished">Mesclador FX</translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
<translation type="unfinished"></translation>
@@ -1067,6 +1398,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
@@ -1124,6 +1462,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Sync</source>
<translation type="unfinished">Sinc</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1566,6 +1908,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1628,6 +1982,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1774,6 +2140,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1860,10 +2230,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">CONFIGURACIÓ GENERAL</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished">Pica aquí si vols desar la configuració del canal actual en una plantilla. Més tard podràs carregar aquesta plantilla picant-la dos cops al navegador de plantilles.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished">Volum d'instrument</translation>
</message>
@@ -1936,10 +2302,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">CONN</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
@@ -1947,6 +2309,14 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>RANGE</source>
<translation type="unfinished">RANG</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -1993,6 +2363,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Per favor, introdueix un nou valor entre %1 i %2:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2354,10 +2731,6 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS.</trans
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2377,6 +2750,22 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS.</trans
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2493,205 +2882,1066 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS.</trans
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation type="unfinished">Volum d'osc %1</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation type="unfinished">Panorama d'osc %1</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation type="unfinished">Desafinament gruixut d'osc %1</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation type="unfinished">Desafinament fi esquerre d'osc %1</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation type="unfinished">Desafinament fi dret d'osc %1</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation type="unfinished">Desfasament d'osc %1</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation type="unfinished">Desfasament estèreo d'osc %1</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation type="unfinished">Forma d'ona d'osc %1</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
- <translation type="unfinished">Tipus de modulació %1</translation>
+ <source>Osc 1 Sync send on fall</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation type="unfinished">Forma d'ona d'osc %1</translation>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation type="unfinished">Obre altre pedaç</translation>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation type="unfinished">Pica aquí per a obrir un altre fitxer pedaç. La configuració de Bucle i Afina no es reinicia.</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished">Bucle</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
- <translation type="unfinished">Mode Bucle</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation type="unfinished">Aquí pots canviar el mode Bucle. Si és actiu, PatMan farà servir la informació de bucle disponible al fitxer.</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
- <translation type="unfinished">Afina</translation>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
- <translation type="unfinished">Mode Afina</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation type="unfinished">Aquí pots canviar el mode Afina. Si és actiu, PatMan afinarà la mostra a la freqüència de la nota.</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
- <translation type="unfinished">Cap fitxer seleccionat</translation>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
- <translation type="unfinished">Obre fitxer pedaç</translation>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation type="unfinished">Fitxers Pedaç (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
+ <source>Osc 3 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
- <translation type="unfinished">PIC</translation>
+ <source>Osc 3 Waveform 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation type="unfinished">Controlador OBF</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
- <translation type="unfinished">BASE</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
- <translation type="unfinished">Amplitud base:</translation>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation type="unfinished">Quantitat de modulació:</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
- <translation type="unfinished">Atac:</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
- <translation type="unfinished">Alliberament:</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
- <translation type="unfinished">Valor base</translation>
+ <source>Env 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation type="unfinished">Quantitat de modulació</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
- <translation type="unfinished">Apaga la sortida</translation>
+ <source>Env 1 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation type="unfinished">Nota base</translation>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
+ <message>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Volum mestre</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished">Vibrat</translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished">Volum d'osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished">Panorama d'osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished">Desafinament gruixut d'osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished">Desafinament fi esquerre d'osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished">Desafinament fi dret d'osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished">Desfasament d'osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished">Desfasament estèreo d'osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation type="unfinished">Forma d'ona d'osc %1</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation type="unfinished">Tipus de modulació %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished">Forma d'ona d'osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation type="unfinished">Obre altre pedaç</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation type="unfinished">Pica aquí per a obrir un altre fitxer pedaç. La configuració de Bucle i Afina no es reinicia.</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="unfinished">Bucle</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished">Mode Bucle</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation type="unfinished">Aquí pots canviar el mode Bucle. Si és actiu, PatMan farà servir la informació de bucle disponible al fitxer.</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation type="unfinished">Afina</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation type="unfinished">Mode Afina</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation type="unfinished">Aquí pots canviar el mode Afina. Si és actiu, PatMan afinarà la mostra a la freqüència de la nota.</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation type="unfinished">Cap fitxer seleccionat</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished">Obre fitxer pedaç</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished">Fitxers Pedaç (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>pica dos cops per a obrir aquest patró al rotlle de piano
+usa la roda del ratolí per a ajustar el volum d'un pas</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>Obre al rotlle de piano</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>Esborra totes les notes</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>Restaura nom</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Canvia nom</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>Afegeix passos</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>Elimina passos</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished">PIC</translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished">Controlador OBF</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished">BASE</translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished">Amplitud base:</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished">Quantitat de modulació:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished">Atac:</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished">Alliberament:</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished">Valor base</translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished">Quantitat de modulació</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished">Apaga la sortida</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Talla les notes seleccionades (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Copia les notes seleccionades (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Enganxa notes des del portapapers (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Reprodueix/pausa el patró actual (Espai)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Atura la reproducció del patró actual (Espai)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Rotlle de Piano - sense patró</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Per favor, obre un patró picant-lo dos cops!</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>Rotlle de Piano - %1</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Enregistra notes des d'un dispositiu MIDI o piano de canal</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>Darrera nota</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Mode dibuixar (Maj+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Mode esborrar (Maj+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>Mode seleccionar (Maj+S)</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>Enregistra notes des d'un dispositiu MIDI o piano de canal mentre es reprodueix la cançó o pista RB</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Per favor, introdueix un nou valor entre %1 i %2:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished">Nota base</translation>
+ </message>
+</context>
+<context>
<name>Plugin</name>
<message>
<source>Plugin not found</source>
@@ -2710,6 +3960,10 @@ Reason: "%2"</source>
<source>Failed to load plugin "%1"!</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ProjectRenderer</name>
@@ -2856,6 +4110,10 @@ Reason: "%2"</source>
<source>File: </source>
<translation>Fitxer: </translation>
</message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleBuffer</name>
@@ -2864,10 +4122,6 @@ Reason: "%2"</source>
<translation type="unfinished">Obre fitxer d'àudio</translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation type="unfinished">Tots els Fitxers d'Àudio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
- </message>
- <message>
<source>Wave-Files (*.wav)</source>
<translation type="unfinished">Fitxers WAV (*.wav)</translation>
</message>
@@ -2888,10 +4142,6 @@ Reason: "%2"</source>
<translation type="unfinished">Fitxers SPEEX (*.spx)</translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation type="unfinished">Fitxers MP3 (*.mp3)</translation>
- </message>
- <message>
<source>VOC-Files (*.voc)</source>
<translation type="unfinished">Fitxers VOC (*.voc)</translation>
</message>
@@ -2907,6 +4157,10 @@ Reason: "%2"</source>
<source>RAW-Files (*.raw)</source>
<translation type="unfinished">Fitxers RAW (*.raw)</translation>
</message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleTCOView</name>
@@ -2919,50 +4173,196 @@ Reason: "%2"</source>
<translation type="unfinished">Esborra (botó del mig del ratolí)</translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">Talla</translation>
+ <source>Cut</source>
+ <translation type="unfinished">Talla</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">Copia</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">Enganxa</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished">Apaga/encén (<Ctrl> + clic del mig)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">Pista de mostra</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volum</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished">Volum de pista</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished">Volum de canal:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Pica aquí si vols aturar la reproducció de la cançó. El marcador de posició de cançó serà col·locat a l'inici de la cançó.</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>No es pot obrir el fitxer</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>No es pot escriure el fitxer</translation>
+ </message>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Editor de Cançó</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Pica aquí si vols reproduir la cançó sencera. La reproducció començarà al marcador de posició de cançó (verd). També pots moure'l mentre es reprodueix.</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Reprodueix cançó (Espai)</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Atura cançó (Espai)</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Afegeix ritme base</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Afegeix pista de mostra</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Mode dibuixar</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Mode editar (selecciona i mou)</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>Afegeix pista d'automatització</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished">Tempo</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished">TEMPO/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">tempo de cançó</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished">Mode alta qualitat</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Volum mestre</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished">volum mestre</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation type="unfinished">To mestre</translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">Copia</translation>
+ <source>master pitch</source>
+ <translation type="unfinished">to mestre</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">Enganxa</translation>
+ <source>Value: %1%</source>
+ <translation type="unfinished">Valor: %1%</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation type="unfinished">Apaga/encén (<Ctrl> + clic del mig)</translation>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished">Valor: %1 semitons</translation>
</message>
<message>
- <source>Set/clear record</source>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">Pista de mostra</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Espectre lineal</translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">Volum</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Eix Y lineal</translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation type="unfinished">Volum de pista</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Espectre lineal</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">Volum de canal:</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Eix Y lineal</translation>
</message>
<message>
- <source>VOL</source>
- <translation type="unfinished">VOL</translation>
+ <source>Channel mode</source>
+ <translation type="unfinished">Mode del canal</translation>
</message>
</context>
<context>
@@ -3278,191 +4678,439 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct
<translation type="unfinished">Pica aquí per a mostrar o amagar la interfície gràfica d'usuari (GUI) del connector VST.</translation>
</message>
<message>
- <source>Turn off all notes</source>
- <translation type="unfinished">Apaga totes les notes</translation>
+ <source>Turn off all notes</source>
+ <translation type="unfinished">Apaga totes les notes</translation>
+ </message>
+ <message>
+ <source>Open VST-plugin</source>
+ <translation type="unfinished">Obre connector VST</translation>
+ </message>
+ <message>
+ <source>DLL-files (*.dll)</source>
+ <translation type="unfinished">Fitxers DLL (*.dll)</translation>
+ </message>
+ <message>
+ <source>EXE-files (*.exe)</source>
+ <translation type="unfinished">Fitxers EXE (*.exe)</translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation type="unfinished">Cap connector VST carregat</translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished">Carregant connector</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin</source>
- <translation type="unfinished">Obre connector VST</translation>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DLL-files (*.dll)</source>
- <translation type="unfinished">Fitxers DLL (*.dll)</translation>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>EXE-files (*.exe)</source>
- <translation type="unfinished">Fitxers EXE (*.exe)</translation>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
- <translation type="unfinished">Cap connector VST carregat</translation>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Right detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Right detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Right detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Right detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>A-B Mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>A-B Mix envelope amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>A-B Mix envelope attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>A-B Mix envelope hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>A-B Mix envelope decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>A1-B2 Crosstalk</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
+ <source>A2-A1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>VstEffectControlDialog</name>
+ <name>WatsynView</name>
<message>
- <source>Show/hide</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>Modulate amplitude of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation type="unfinished">Carregant connector</translation>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation type="unfinished">Per favor, espera mentre es carrega el connector VST...</translation>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation type="unfinished">Ha fallat la càrrega del connector VST</translation>
+ <source>Phase left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation type="unfinished">El connector VST %1 no s'ha pogut carregar per alguna raó.
-Si funciona amb altre programari VST sota Linux, per favor contacta amb un desenvolupador de LMMS!</translation>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Click to shift phase by +15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Normalize</source>
+ <translation type="unfinished">Normalitza</translation>
+ </message>
+ <message>
+ <source>Click to normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
+ <source>Smooth</source>
+ <translation type="unfinished">Suavitza</translation>
+ </message>
+ <message>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Sine wave</source>
+ <translation type="unfinished">Ona sinusoïdal</translation>
+ </message>
+ <message>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Triangle wave</source>
+ <translation type="unfinished">Ona triangular</translation>
+ </message>
+ <message>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Square wave</source>
+ <translation type="unfinished">Ona quadrada</translation>
+ </message>
+ <message>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3591,54 +5239,32 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen
<translation>Inverteix mostra</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Bucle</translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation>FREQ</translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation>Freqüència:</translation>
- </message>
<message>
- <source>GAIN</source>
- <translation>GUANY</translation>
- </message>
- <message>
- <source>Gain:</source>
- <translation>Guany:</translation>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
- <translation>PROPORCIÓ</translation>
+ <source>Loop mode</source>
+ <translation type="unfinished">Mode Bucle</translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>Proporció:</translation>
+ <source>Interpolation mode</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
- <translation>Freqüència</translation>
+ <source>None</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Guany</translation>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
- <translation>Proporció</translation>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3698,6 +5324,10 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen
<source>Change color</source>
<translation>Canvia color</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3793,6 +5423,120 @@ Si funciona amb altre programari VST sota Linux, per favor contacta amb un desen
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3829,90 +5573,104 @@ Per favor, assegura't que tens permís d'escriptura per al fitxer i el
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
+ <source>Graph</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Start frequency</source>
+ <translation>Freqüència inicial</translation>
+ </message>
+ <message>
+ <source>End frequency</source>
+ <translation>Freqüència final</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>Guany</translation>
+ </message>
+ <message>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Envelope Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Noise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Click</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
+ <source>Frequency Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End to note</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
- <translation>Freqüència inicial</translation>
+ <source>Start frequency:</source>
+ <translation>Freqüència inicial:</translation>
</message>
<message>
- <source>End frequency</source>
- <translation>Freqüència final</translation>
+ <source>End frequency:</source>
+ <translation>Freqüència final:</translation>
</message>
<message>
- <source>Decay</source>
- <translation>Decaïment</translation>
+ <source>Gain:</source>
+ <translation>Guany:</translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Distorsió</translation>
+ <source>Frequency Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Guany</translation>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Start frequency:</source>
- <translation>Freqüència inicial:</translation>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
- <translation>Freqüència final:</translation>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Decaïment:</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Distorsió:</translation>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
- <translation>Guany:</translation>
+ <source>Distortion End:</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4200,6 +5958,38 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports.</tr
<source>Click here for white-noise.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4795,13 +6585,29 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports.</tr
<translation>Panorama d'osc %1:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Desafinament fi esquerre d'osc %1:</translation>
- </message>
- <message>
<source>cents</source>
<translation>cents</translation>
</message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>papuInstrument</name>
@@ -5057,225 +6863,15 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports.</tr
<translation type="unfinished"></translation>
</message>
<message>
- <source>Square Channel 1 Volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The delay between step change</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Draw the wave here</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>No es pot congelar el patró</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>El patró no es pot congelar ara mateix perquè estàs en mode de reproducció. Per favor, atura i torna-ho a provar!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Congelant patró...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Cancel·la</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>pica dos cops per a obrir aquest patró al rotlle de piano
-usa la roda del ratolí per a ajustar el volum d'un pas</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>Obre al rotlle de piano</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>Esborra totes les notes</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>Restaura nom</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>Canvia nom</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation>Recongela</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation>Congela</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation>Descongela</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>Afegeix passos</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>Elimina passos</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Talla les notes seleccionades (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Copia les notes seleccionades (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Enganxa notes des del portapapers (Ctrl+V)</translation>
- </message>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Reprodueix/pausa el patró actual (Espai)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Atura la reproducció del patró actual (Espai)</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Rotlle de Piano - sense patró</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Per favor, obre un patró picant-lo dos cops!</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>Rotlle de Piano - %1</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Enregistra notes des d'un dispositiu MIDI o piano de canal</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>Darrera nota</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>Mode dibuixar (Maj+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>Mode esborrar (Maj+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>Mode seleccionar (Maj+S)</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>Enregistra notes des d'un dispositiu MIDI o piano de canal mentre es reprodueix la cançó o pista RB</translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark/unmark current semitone</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current chord</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unmark all</source>
+ <source>Square Channel 1 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No scale</source>
+ <source>The delay between step change</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No chord</source>
+ <source>Draw the wave here</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5298,10 +6894,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
<translation>Filtre per a importar fitxers MIDI a LMMS</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>tres potents oscil·ladors que pots modular de vàries maneres</translation>
- </message>
- <message>
<source>VST-host for using VST(i)-plugins within LMMS</source>
<translation>servidor VST per a usar connectors VST(i) amb LMMS</translation>
</message>
@@ -5314,10 +6906,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
<translation>Sintetitzador Additiu per a sons com d'orgue</translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>mostrejador simple amb diferents paràmetres per a usar mostres (p.e. bateria) en una pista d'instrument</translation>
- </message>
- <message>
<source>Tuneful things to bang on</source>
<translation>Coses melòdiques per a fer soroll</translation>
</message>
@@ -5326,14 +6914,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
<translation>connector per a usar efectes LADSPA arbitraris a LMMS.</translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation>connector per a usar efectes VST arbitraris a LMMS.</translation>
- </message>
- <message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation>sintetitzador versàtil de guitza & bombo</translation>
- </message>
- <message>
<source>GUS-compatible patch instrument</source>
<translation>Instrument de pedaç compatible GUS</translation>
</message>
@@ -5354,10 +6934,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas</translation>
<translation>Connector per a manipular lliurement la sortida estèreo</translation>
</message>
<message>
- <source>plugin for boosting bass</source>
- <translation>connector per a augmentar el baix</translation>
- </message>
- <message>
<source>Plugin for controlling knobs with sound peaks</source>
<translation>Connector per a controlar rodes amb pics de so</translation>
</message>
@@ -5402,6 +6978,62 @@ This chip was used in the Commodore 64 computer.</source>
<source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>projectNotes</name>
@@ -6101,152 +7733,6 @@ Latència: %2 ms</translation>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Pica aquí si vols aturar la reproducció de la cançó. El marcador de posició de cançó serà col·locat a l'inici de la cançó.</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>No es pot obrir el fitxer</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>No es pot escriure el fitxer</translation>
- </message>
- <message>
- <source>Song-Editor</source>
- <translation>Editor de Cançó</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Pica aquí si vols reproduir la cançó sencera. La reproducció començarà al marcador de posició de cançó (verd). També pots moure'l mentre es reprodueix.</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Reprodueix cançó (Espai)</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Atura cançó (Espai)</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Afegeix ritme base</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Afegeix pista de mostra</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>Mode dibuixar</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>Mode editar (selecciona i mou)</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation>Afegeix pista d'automatització</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished">Tempo</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished">TEMPO/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">tempo de cançó</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished">Mode alta qualitat</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished">Volum mestre</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished">volum mestre</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished">To mestre</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished">to mestre</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished">Valor: %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished">Valor: %1 semitons</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Espectre lineal</translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation>Eix Y lineal</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Espectre lineal</translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation>Eix Y lineal</translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation>Mode del canal</translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6432,6 +7918,18 @@ Latència: %2 ms</translation>
<source>Solo</source>
<translation>Solo</translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6766,4 +8264,74 @@ El LED a la cantonada dreta baixa de l'editor de forma d'ona determina
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/cs.qm b/data/locale/cs.qm
index e98c77b..b45aa44 100644
Binary files a/data/locale/cs.qm and b/data/locale/cs.qm differ
diff --git a/data/locale/cs.ts b/data/locale/cs.ts
index c31bb09..5f384f1 100644
--- a/data/locale/cs.ts
+++ b/data/locale/cs.ts
@@ -5,15 +5,11 @@
<name>AboutDialog</name>
<message>
<source>About LMMS</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">O LMMS</translation>
</message>
<message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Verze %1 (%2/%3, Qt %4, %5)</translation>
</message>
<message>
<source>About</source>
@@ -21,15 +17,15 @@
</message>
<message>
<source>LMMS - easy music production for everyone</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LMMS - jednoduchá hudební produkce pro každého</translation>
</message>
<message>
<source>Authors</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Autoři</translation>
</message>
<message>
<source>Translation</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Překlad</translation>
</message>
<message>
<source>Current language not translated (or native English).
@@ -39,14 +35,72 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>License</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Licence</translation>
</message>
<message>
<source>Copyright (c) 2004-2014, LMMS developers</source>
+ <translation type="unfinished">Copyright (c) 2004-2014, vývojáři</translation>
+ </message>
+ <message>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished">LMMS</translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">Hlasitost:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Hlasitost</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -69,7 +123,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Kliknutím sem můžete otevřít jiný audio soubor. Ukáže se dialog, pomocí kterého si soubor můžete vybrat. Nastavení jako režim smyčkování, počáteční a koncové body, hodnota zesílení apod. zůstanou stejná, takže to nemusí znít jako původní sampl.</translation>
</message>
<message>
<source>Reverse sample</source>
@@ -77,46 +131,66 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.</source>
- <translation type="unfinished">Zapnete-li toto tlačítko, celý sampl bude přehráván pozpátku. Tato volba je užitečná pro zajímavé efekty např. pozpátku přehraná srážka.</translation>
+ <translation type="unfinished">Zapnete-li toto tlačítko, celý sampl bude přehráván pozpátku. Tato volba je užitečná pro zajímavé efekty jako např. pozpátku přehraná srážka.</translation>
+ </message>
+ <message>
+ <source>Amplify:</source>
+ <translation type="unfinished">Zesílení:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <translation type="unfinished">Tímto ovladačem můžete nastavit poměr zesílení. Pokud nastavíte hodnotu 100%, sampl se nezmění. Jinak se zesílí nebo ztiší (soubor samplu se tím vůbec nezmění!)</translation>
+ </message>
+ <message>
+ <source>Startpoint:</source>
+ <translation type="unfinished">Počáteční bod:</translation>
+ </message>
+ <message>
+ <source>Endpoint:</source>
+ <translation type="unfinished">Koncový bod:</translation>
+ </message>
+ <message>
+ <source>Continue sample playback across notes</source>
+ <translation type="unfinished">Přehrávat sampl napříč tóny</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation type="unfinished">Smyčka od počátečního ke koncovému bodu</translation>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <translation type="unfinished">Povolení této možnosti způsobí, že se sampl bude přehrávat přes různé tóny - pokud změníte ladění (pitch), nebo když tón skončí před koncem samplu, tak bude další přehrávaný tón pokračovat kde přestal. Pro obnovení přehrávání na začátek samplu, vložte tón do spodní části kláves (< 20 Hz)</translation>
</message>
<message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
+ <source>Disable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amplify:</source>
- <translation type="unfinished">Zesílení:</translation>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <source>Enable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Startpoint:</source>
- <translation type="unfinished">Počáteční bod:</translation>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
- <translation type="unfinished">Koncový bod:</translation>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>Loopback point:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -124,7 +198,7 @@ If you're interested in translating LMMS in another language or want to imp
<name>AudioFileProcessorWaveView</name>
<message>
<source>Sample length:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Délka samplu:</translation>
</message>
</context>
<context>
@@ -237,11 +311,11 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Remove song-global automation</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Odebrat obecnou automatizaci</translation>
</message>
<message>
<source>Remove all linked controls</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Odebrat všechny propjené ovladače</translation>
</message>
</context>
<context>
@@ -256,7 +330,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.</source>
- <translation type="unfinished">Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci neboť pattern je automaticky přehráván ve smyčce.</translation>
+ <translation type="unfinished">Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci, neboť pattern je automaticky přehráván ve smyčce.</translation>
</message>
<message>
<source>Click here if you want to stop playing of the current pattern.</source>
@@ -324,39 +398,39 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Discrete progression</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Oddělený vývoj</translation>
</message>
<message>
<source>Linear progression</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Lineární vývoj</translation>
</message>
<message>
<source>Cubic Hermite progression</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Cubic Hermite vývoj</translation>
</message>
<message>
<source>Tension: </source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Napětí: </translation>
</message>
<message>
<source>Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Kliknutím sem vyberete oddělený vývoj pro tento automatizační pattern. Hodnota připojeného objektu zůstane konstantní mezi ovládacími body a okamžitě nastavena na novou hodnotu když se dosáhne každého ovládacího bodu.</translation>
</message>
<message>
<source>Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Kliknutím sem vyberete lineární vývoj pro tento automatizační pattern. Hodnota připojeného objektu se změní ve stabilní frekvenci mezi ovládacími body, aby postupně došlo k dosažení dalšího kontrolního bodu.</translation>
</message>
<message>
<source>Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Kliknutím sem vyberte cubic hermite vývoj pro tento automatizační pattern. Hodnota připojeného objektu se změní po plynulé křivce a lehce přejde do vrchních a spodních bodů.</translation>
</message>
<message>
<source>Tension value for spline</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Hodnota napětí pro spline</translation>
</message>
<message>
<source>A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Větší hodnota napětí vytvoří plynulejší křivku ale překročí některé hodnoty. Malá hodnota napětí způsobí vyrovnání sklonu křivky na každém ovládacím bodě.</translation>
</message>
</context>
<context>
@@ -365,6 +439,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished">Ovladač táhni při stisknutém <CTRL></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -396,6 +474,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished">Odpojit "%1"</translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Nastav/vyčisti záznam</translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -405,6 +487,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished">Frekvence:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished">Zisk:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished">POMĚR</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished">Poměr:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished">Frekvence</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished">Zisk</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished">Poměr</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -482,11 +617,11 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Confirm Delete</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Potvrdit Smazání</translation>
</message>
<message>
<source>Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Opravdu smazat? Tento kontrolér má jedno nebo více existujících připojení. Tento krok nelze vrátit zpět.</translation>
</message>
</context>
<context>
@@ -513,159 +648,285 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>&Help</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Nápověda</translation>
</message>
</context>
<context>
- <name>Effect</name>
+ <name>DualFilterControlDialog</name>
<message>
- <source>Effect enabled</source>
- <translation type="unfinished">Efekt aktivován</translation>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wet/Dry mix</source>
+ <source>Filter 2 enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gate</source>
- <translation type="unfinished">Brána</translation>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Click to enable/disable Filter 2</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>EffectChain</name>
+ <name>DualFilterControls</name>
<message>
- <source>Effects enabled</source>
- <translation type="unfinished">Efekty aktivovány</translation>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectRackView</name>
<message>
- <source>EFFECTS CHAIN</source>
- <translation type="unfinished">ŘETĚZ EFEKTŮ</translation>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Add effect</source>
- <translation type="unfinished">Přidat efekt</translation>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectSelectDialog</name>
<message>
- <source>Add effect</source>
- <translation type="unfinished">Přidat efekt</translation>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin description</source>
+ <source>Gain 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectView</name>
<message>
- <source>Toggles the effect on or off.</source>
- <translation type="unfinished">Zapnout nebo vypnout efekty.</translation>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>On/Off</source>
- <translation type="unfinished">Zap/Vyp</translation>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>W/D</source>
+ <source>Filter 2 type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wet Level:</source>
+ <source>Cutoff 2 frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
+ <source>Q/Resonance 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DECAY</source>
+ <source>Gain 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Time:</source>
- <translation type="unfinished">Čas:</translation>
+ <source>LowPass</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
+ <source>HiPass</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>GATE</source>
- <translation type="unfinished">BRÁNA</translation>
+ <source>BandPass csg</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gate:</source>
- <translation type="unfinished">Brána:</translation>
+ <source>BandPass czpg</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
- <translation type="unfinished">Tlačítko Brána určuje sílu signálu který je považován za ticho při rozhodování kdy skončit se zpracováním signálů.</translation>
+ <source>Notch</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Controls</source>
- <translation type="unfinished">Ovladače</translation>
+ <source>Allpass</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
-
-The On/Off switch allows you to bypass a given plugin at any point in time.
-
-The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
-
-The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
-
-The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
-
-The Controls button opens a dialog for editing the effect's parameters.
-
-Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
+ <source>Moog</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Move &up</source>
- <translation type="unfinished">Posunout &nahoru</translation>
+ <source>2x LowPass</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move &down</source>
- <translation type="unfinished">Posunout &dolu</translation>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Remove this plugin</source>
- <translation type="unfinished">&Odstranit tento plugin</translation>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Help</source>
+ <source>RC HighPass 12dB</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EnvelopeAndLfoParameters</name>
<message>
- <source>Predelay</source>
+ <source>RC LowPass 24dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>RC BandPass 24dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hold</source>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>Effect</name>
+ <message>
+ <source>Effect enabled</source>
+ <translation type="unfinished">Efekt aktivován</translation>
+ </message>
+ <message>
+ <source>Wet/Dry mix</source>
+ <translation type="unfinished">Wet/Dry mix</translation>
+ </message>
+ <message>
+ <source>Gate</source>
+ <translation type="unfinished">Brána</translation>
+ </message>
<message>
<source>Decay</source>
+ <translation type="unfinished">Doznívání</translation>
+ </message>
+</context>
+<context>
+ <name>EffectChain</name>
+ <message>
+ <source>Effects enabled</source>
+ <translation type="unfinished">Efekty aktivovány</translation>
+ </message>
+</context>
+<context>
+ <name>EffectRackView</name>
+ <message>
+ <source>EFFECTS CHAIN</source>
+ <translation type="unfinished">ŘETĚZ EFEKTŮ</translation>
+ </message>
+ <message>
+ <source>Add effect</source>
+ <translation type="unfinished">Přidat efekt</translation>
+ </message>
+</context>
+<context>
+ <name>EffectSelectDialog</name>
+ <message>
+ <source>Add effect</source>
+ <translation type="unfinished">Přidat efekt</translation>
+ </message>
+ <message>
+ <source>Plugin description</source>
+ <translation type="unfinished">Popis pluginu</translation>
+ </message>
+</context>
+<context>
+ <name>EffectView</name>
+ <message>
+ <source>Toggles the effect on or off.</source>
+ <translation type="unfinished">Zapnout nebo vypnout efekty.</translation>
+ </message>
+ <message>
+ <source>On/Off</source>
+ <translation type="unfinished">Zap/Vyp</translation>
+ </message>
+ <message>
+ <source>W/D</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wet Level:</source>
+ <translation type="unfinished">Wet Hodnota:</translation>
+ </message>
+ <message>
+ <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
+ <translation type="unfinished">Wet/Dry ovladač nastavuje poměr mezi vstupním signálem a signálem efektu, který formuje výstup.</translation>
+ </message>
+ <message>
+ <source>DECAY</source>
+ <translation type="unfinished">DOZNÍVÁNÍ</translation>
+ </message>
+ <message>
+ <source>Time:</source>
+ <translation type="unfinished">Čas:</translation>
+ </message>
+ <message>
+ <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
+ <translation type="unfinished">Ovladač Doznívání ovládá, kolik bufferů ticha musí projít před tím, než plugin přestane zpracovávat. Menší hodnoty zredukují využití CPU, ale můžou způsobit uříznutí ozvěn.</translation>
+ </message>
+ <message>
+ <source>GATE</source>
+ <translation type="unfinished">BRÁNA</translation>
+ </message>
+ <message>
+ <source>Gate:</source>
+ <translation type="unfinished">Brána:</translation>
+ </message>
+ <message>
+ <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
+ <translation type="unfinished">Tlačítko Brána určuje sílu signálu který je považován za ticho při rozhodování kdy skončit se zpracováním signálů.</translation>
+ </message>
+ <message>
+ <source>Controls</source>
+ <translation type="unfinished">Ovladače</translation>
+ </message>
+ <message>
+ <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
+
+The On/Off switch allows you to bypass a given plugin at any point in time.
+
+The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
+
+The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
+
+The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
+
+The Controls button opens a dialog for editing the effect's parameters.
+
+Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &up</source>
+ <translation type="unfinished">Posunout &nahoru</translation>
+ </message>
+ <message>
+ <source>Move &down</source>
+ <translation type="unfinished">Posunout &dolu</translation>
+ </message>
+ <message>
+ <source>&Remove this plugin</source>
+ <translation type="unfinished">&Odstranit tento plugin</translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">Nápověda</translation>
+ </message>
+</context>
+<context>
+ <name>EnvelopeAndLfoParameters</name>
+ <message>
+ <source>Predelay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <source>Decay</source>
+ <translation type="unfinished">Doznívání</translation>
+ </message>
+ <message>
<source>Sustain</source>
<translation type="unfinished"></translation>
</message>
@@ -750,7 +1011,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>Decay:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Doznívání:</translation>
</message>
<message>
<source>Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.</source>
@@ -880,6 +1141,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation type="unfinished">Sampl odněkud přetáhněte a pusťte jej v tomto okně.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1008,23 +1273,86 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
+ <source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Alias-free oscillators</source>
+ <source>Cancel</source>
+ <translation type="unfinished">Zrušit</translation>
+ </message>
+ <message>
+ <source>Export as loop (remove end silence)</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowser</name>
<message>
- <source>Start</source>
+ <source>Browser</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
+ <message>
+ <source>Send to active instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="unfinished">Zrušit</translation>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Export as loop (remove end silence)</source>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1053,6 +1381,9 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>FX-Mixer</source>
<translation type="unfinished">FX-Mixer</translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
<translation type="unfinished"></translation>
@@ -1067,6 +1398,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
@@ -1124,6 +1462,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Sync</source>
<translation type="unfinished">Synchronizovaný</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1566,6 +1908,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1628,6 +1982,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1641,19 +2007,19 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>CUTOFF</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">SEŘÍZNUTÍ</translation>
</message>
<message>
<source>Cutoff frequency</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Frekvence seříznutí</translation>
</message>
<message>
<source>RESO</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">REZO</translation>
</message>
<message>
<source>Resonance</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Rezonance</translation>
</message>
<message>
<source>Envelopes/LFOs</source>
@@ -1756,7 +2122,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>RESO</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">REZO</translation>
</message>
<message>
<source>Resonance:</source>
@@ -1774,6 +2140,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1860,10 +2230,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">HLAVNÍ NASTAVENÍ</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished">Hlasitost nástroje</translation>
</message>
@@ -1936,10 +2302,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">PLUGIN</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
@@ -1947,6 +2309,14 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>RANGE</source>
<translation type="unfinished">ROZSAH</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -1993,6 +2363,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Vložte prosím novou hodnotu mezi %1 a %2:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2342,39 +2719,51 @@ Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/w
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save as new &version</source>
+ <source>LMMS (*.mmp *.mmpz)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E&xport tracks...</source>
+ <source>Version %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS (*.mmp *.mmpz)</source>
+ <source>Project recovery</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
+ <source>It looks like the last session did not end properly. Do you want to recover the project of this session?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Version %1</source>
+ <source>Configuration file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Project recovery</source>
+ <source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>It looks like the last session did not end properly. Do you want to recover the project of this session?</source>
+ <source>Volumes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Configuration file</source>
+ <source>Save as new &version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error while parsing configuration file at line %1:%2: %3</source>
+ <source>E&xport tracks...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2493,404 +2882,1265 @@ Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/w
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation type="unfinished">Osc %1 hlasitost</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation type="unfinished">Osc %1 panorama</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
+ <source>Osc 1 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation type="unfinished">Osc %1 jemné rozladění vlevo</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
+ <source>Osc 1 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
+ <source>Osc 1 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
+ <source>Osc 1 Pulse width</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation type="unfinished">Osc %1 forma vlny</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
+ <source>Osc 1 Sync send on fall</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation type="unfinished">Osc %1 vlna</translation>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation type="unfinished">Otevřít jiný patch</translation>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation type="unfinished">Klikněte zde, pokud chcete otevřít další patch-soubor. Nastavení smyčky a režimu ladění budou zachována.</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished">Smyčka</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
- <translation type="unfinished">Režim smyčky</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation type="unfinished">Zde můžete zapnout režim smyčky, Jestliže je režim aktivní PatMan použije dostupné informace o smyčcem ze souboru.</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
- <translation type="unfinished">Ladit</translation>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
- <translation type="unfinished">Režim ladění</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation type="unfinished">Zde můžete zapnout režim smyčky, Jestliže je režim aktivní PatMan naladí sampl tak, aby frekvence odpovídala tónu.</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
- <translation type="unfinished">Žádný soubor není vybrán</translation>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
- <translation type="unfinished">Otevřít patch soubor</translation>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation type="unfinished">Patch-Soubory (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
+ <source>Osc 3 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
+ <source>Osc 3 Waveform 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
+ <source>Osc 3 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
+ <source>Osc 3 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
- <translation type="unfinished">Základní míra:</translation>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
+ <source>LFO 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
+ <source>LFO 1 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
+ <source>LFO 1 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
- <translation type="unfinished">Základní hodnota</translation>
+ <source>Env 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation type="unfinished">Stupeň (amount) modulace</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
+ <source>Env 1 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation type="unfinished">Základní nota</translation>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
- <translation type="unfinished">Plugin nenalezen</translation>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
- <translation type="unfinished">Plugin "%1" nebyl nalezen nebo nemůže být načten!
-Důvod: "%2"</translation>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Error while loading plugin</source>
- <translation type="unfinished">Při načítání pluginu došlo k chybě</translation>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
- <translation type="unfinished">Načtení pluginu "%1" selhalo!</translation>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
- <translation type="unfinished">WAV soubor (*.wav)</translation>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation type="unfinished">Komprimovaný soubor OGG (*.ogg)</translation>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
+ <source>Selected view</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
+ <source>Vol1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
+ <source>Vol1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eb</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D#</source>
- <comment>Note name</comment>
+ <source>Vol2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E</source>
- <comment>Note name</comment>
+ <source>Vol2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Fb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>F#</source>
- <comment>Note name</comment>
+ <source>Vol3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G</source>
- <comment>Note name</comment>
+ <source>Vol3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ab</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G#</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A</source>
- <comment>Note name</comment>
+ <source>Phs1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Bb</source>
- <comment>Note name</comment>
+ <source>Phs1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A#</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>B</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWidget</name>
<message>
- <source>Name: </source>
- <translation>Název:</translation>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>File: </source>
- <translation>Soubor:</translation>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Maker: </source>
- <translation>Tvůrce:</translation>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Copyright: </source>
- <translation>Copyright:</translation>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Requires Real Time: </source>
- <translation>Vyžadován Real Time:</translation>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
- <translation>Ano</translation>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
- <translation>Ne</translation>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Real Time Capable: </source>
- <translation>Real time schopnost:</translation>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channels In: </source>
- <translation>Kanály vstup:</translation>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channels Out: </source>
- <translation>Kanály výstup:</translation>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>In Place Broken: </source>
+ <source>Pit1-LFO1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleBuffer</name>
<message>
- <source>Open audio file</source>
- <translation type="unfinished">Otevřít audio soubor</translation>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation type="unfinished">Všechny audio soubory (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wave-Files (*.wav)</source>
- <translation type="unfinished">Wav soubory (*.wav)</translation>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>OGG-Files (*.ogg)</source>
- <translation type="unfinished">OGG soubory (*.ogg)</translation>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DrumSynth-Files (*.ds)</source>
- <translation type="unfinished">DrumSynth soubory (*.ds)</translation>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>FLAC-Files (*.flac)</source>
- <translation type="unfinished">FLAC soubory (*.flac)</translation>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SPEEX-Files (*.spx)</source>
- <translation type="unfinished">SPEEX soubory (*.spx)</translation>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation type="unfinished">MP3 soubory (*.mp3)</translation>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Hlavní hlasitost</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished">Vibráto</translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished">Osc %1 hlasitost</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished">Osc %1 panorama</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished">Osc %1 jemné rozladění vlevo</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation type="unfinished">Osc %1 forma vlny</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished">Osc %1 vlna</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation type="unfinished">Otevřít jiný patch</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation type="unfinished">Klikněte zde, pokud chcete otevřít další patch-soubor. Nastavení smyčky a režimu ladění budou zachována.</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="unfinished">Smyčka</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished">Režim smyčky</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation type="unfinished">Zde můžete zapnout režim smyčky, Jestliže je režim aktivní PatMan použije dostupné informace o smyčcem ze souboru.</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation type="unfinished">Ladit</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation type="unfinished">Režim ladění</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation type="unfinished">Zde můžete zapnout režim smyčky, Jestliže je režim aktivní PatMan naladí sampl tak, aby frekvence odpovídala tónu.</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation type="unfinished">Žádný soubor není vybrán</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished">Otevřít patch soubor</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished">Patch-Soubory (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>dvojitým kliknutím otevřete tento pattern v piano-roll
+k nastavení zesílení kroku použijte kolečko myši</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>Otevřít v piano-roll</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>Vyčistit všechny noty</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>Resetovat jméno</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Změnit jméno</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>Přidat kroky</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>Odstranit kroky</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished">Základní míra:</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished">Základní hodnota</translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished">Stupeň (amount) modulace</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Přehrát nebo pozastavit přehrávání aktuálního patternu (mezerník)</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Nahrávat noty z MIDI-zařízení/piano kanálu</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Zastavit přehrávání aktuálního patternu (mezerník)</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Režim kreslení (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Režim mazání (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>Režim výběru (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Vyjmout označené noty (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Kopírovat označené noty (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Vložit noty ze schránky (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>Trvání noty</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Piano-Roll - žádný pattern</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>Piano-Roll - %1</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Otevřete prosím pattern jeho dvojitým poklepáním!</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>Nahrávat tóny z MIDI zařízení / kanálu piána při přehrávání skladby nebo BB stopy</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation>Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci. Pattern je automaticky přehráván ve smyčce.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation>Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu, následně si je můžete přehrát nebo upravit.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation>Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu a na pozadí uslyšíte skladbu nebo BB stopu.</translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation>Klikněte zde, pokud chcete zastavit přehrávání aktuálního patternu.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Klikněte zde pokud chcete označené noty vyjmout a uložit do schránky. Vložit je pak můžete kdekoliv v libovolném patternu pomocí tlačítka Vložit.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Klikněte zde pokud chcete označené noty zkopírovat do schránky. Vložit je pak můžete kdekoliv v libovolného patternu pomocí tlačítka Vložit.</translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation>Kliknete-li zde, budou noty ze schránky vloženy do prvního viditelného taktu.</translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation>Zámek noty</translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Vložte prosím novou hodnotu mezi %1 a %2:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished">Základní nota</translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation type="unfinished">Plugin nenalezen</translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation type="unfinished">Plugin "%1" nebyl nalezen nebo nemůže být načten!
+Důvod: "%2"</translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation type="unfinished">Při načítání pluginu došlo k chybě</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation type="unfinished">Načtení pluginu "%1" selhalo!</translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation type="unfinished">WAV soubor (*.wav)</translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation type="unfinished">Komprimovaný soubor OGG (*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>Name: </source>
+ <translation>Název:</translation>
+ </message>
+ <message>
+ <source>File: </source>
+ <translation>Soubor:</translation>
+ </message>
+ <message>
+ <source>Maker: </source>
+ <translation>Tvůrce:</translation>
+ </message>
+ <message>
+ <source>Copyright: </source>
+ <translation>Copyright:</translation>
+ </message>
+ <message>
+ <source>Requires Real Time: </source>
+ <translation>Vyžadován Real Time:</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>Ano</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>Ne</translation>
+ </message>
+ <message>
+ <source>Real Time Capable: </source>
+ <translation>Real time schopnost:</translation>
+ </message>
+ <message>
+ <source>Channels In: </source>
+ <translation>Kanály vstup:</translation>
+ </message>
+ <message>
+ <source>Channels Out: </source>
+ <translation>Kanály výstup:</translation>
+ </message>
+ <message>
+ <source>In Place Broken: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleBuffer</name>
+ <message>
+ <source>Open audio file</source>
+ <translation type="unfinished">Otevřít audio soubor</translation>
+ </message>
+ <message>
+ <source>Wave-Files (*.wav)</source>
+ <translation type="unfinished">Wav soubory (*.wav)</translation>
+ </message>
+ <message>
+ <source>OGG-Files (*.ogg)</source>
+ <translation type="unfinished">OGG soubory (*.ogg)</translation>
+ </message>
+ <message>
+ <source>DrumSynth-Files (*.ds)</source>
+ <translation type="unfinished">DrumSynth soubory (*.ds)</translation>
+ </message>
+ <message>
+ <source>FLAC-Files (*.flac)</source>
+ <translation type="unfinished">FLAC soubory (*.flac)</translation>
+ </message>
+ <message>
+ <source>SPEEX-Files (*.spx)</source>
+ <translation type="unfinished">SPEEX soubory (*.spx)</translation>
</message>
<message>
<source>VOC-Files (*.voc)</source>
@@ -2908,62 +4158,213 @@ Důvod: "%2"</translation>
<source>RAW-Files (*.raw)</source>
<translation type="unfinished">RAW soubory (*.raw)</translation>
</message>
-</context>
-<context>
- <name>SampleTCOView</name>
<message>
- <source>double-click to select sample</source>
- <translation type="unfinished">dvojitým kliknutím vyberte sampl</translation>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTCOView</name>
+ <message>
+ <source>double-click to select sample</source>
+ <translation type="unfinished">dvojitým kliknutím vyberte sampl</translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation type="unfinished">Smazat (prostřední tlačítko myši)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">Vyjmout</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">Kopírovat</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">Vložit</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished">Ztlumit/neztlumit (<Ctrl> + prostřední klik)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Nastav/vyčisti záznam</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">Stopa samplů</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Hlasitost</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished">Hlasitost stopy</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished">Hlasitost kanálu:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Editor skladby</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Přehrát skladbu (mezerník)</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Zastavit přehrávání skladby (mezerník)</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Přidat beat/bassline</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Přidat stopu samplů</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Režim kreslení</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Režim editace (označit a přesunout)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Klikněte zde, pokud chcete přehrát celou skladbu. Přehrávání začne v místě kde se nalézá zelený označovač pozice se kterým lze též při přehrávání pohybovat.</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Klikněte zde, pokud chcete zastavit přehrávání skladby. Označovač pozice bude odeslán na začátek skladby.</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>Nemohu otevřít soubor</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>Nemohu zapsat soubor</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>Přidat automatizační stopu</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation>Nahrát samply z audio zařízení</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>Nahrát samply z audio zařízení při přehrávání skladby nebo BB stopy</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished">Nelze otevřít soubor %1. Pravděpodobně nemáte oprávnění číst tento soubor.
+ Ujistěte se prosím, že mát oprávnění alespoň číst tento soubor a zkuste to znovu.</translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished">Chyba v souboru</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished">Soubor %1 nejspíše obsahuje chyby a nemohl být načten.</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished">Tempo</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished">TEMPO/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">tempo skladby</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished">Tempo skladby je uvedeno v úderech za minutu (BPS). Chcete-li změnit tempo skladby, změňte tuto hodnotu. Každý takt má čtyři beaty, takže tempo v BPS specifikuje kolik taktů / 4 bude za minutu přehráno (nebo kolik taktů bude přehráno ve čtyřech minutách).</translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished">Režim vysoké kvality</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Hlavní hlasitost</translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
- <translation type="unfinished">Smazat (prostřední tlačítko myši)</translation>
+ <source>master volume</source>
+ <translation type="unfinished">hlavní hlasitost</translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">Vyjmout</translation>
+ <source>Master pitch</source>
+ <translation type="unfinished">Hlavní ladění (pitch)</translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">Kopírovat</translation>
+ <source>master pitch</source>
+ <translation type="unfinished">hlavní ladění</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">Vložit</translation>
+ <source>Value: %1%</source>
+ <translation type="unfinished">Hodnota: %1%</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation type="unfinished">Ztlumit/neztlumit (<Ctrl> + prostřední klik)</translation>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished">Hodnota: %1 půltónů</translation>
</message>
<message>
- <source>Set/clear record</source>
- <translation type="unfinished">Nastav/vyčisti záznam</translation>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation type="unfinished">Nelze zapisovat do souboru %1. Pravděpodobně nemáte oprávnění zapisovat do tohoto souboru. Ujistěte se prosím, že máte oprávnění zapisovat do tohoto souboru a zkuse to znovu.</translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">Stopa samplů</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Lineární spektrum</translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">Hlasitost</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Lineární osa Y</translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation type="unfinished">Hlasitost stopy</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Lineární spektrum</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">Hlasitost kanálu:</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Lineární osa Y</translation>
</message>
<message>
- <source>VOL</source>
- <translation type="unfinished">VOL</translation>
+ <source>Channel mode</source>
+ <translation type="unfinished">Režim kanálu</translation>
</message>
</context>
<context>
@@ -3049,7 +4450,7 @@ Důvod: "%2"</translation>
<name>TimeDisplayWidget</name>
<message>
<source>click to change time units</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">kliknutí změní časové jednotky</translation>
</message>
</context>
<context>
@@ -3394,76 +4795,324 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu
<translation type="unfinished">Uložit předvolbu</translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished">Načítám plugin</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A1-B2 Crosstalk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A2-A1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B2-B1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected graph</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynView</name>
+ <message>
+ <source>Select oscillator A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of A2 to A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-modulate A1 and A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of B2 to B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-modulate B1 and B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phase left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Click to shift phase by -15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation type="unfinished">Načítám plugin</translation>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation type="unfinished">Prosím čekejte dokud se nenačte VST plugin...</translation>
+ <source>Normalize</source>
+ <translation type="unfinished">Normalizovat</translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation type="unfinished">Chyba načítání VST pluginu</translation>
+ <source>Click to normalize</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation type="unfinished">VST plugin %1 nemohl být z určitých důvodů načten.
-Jestliže tento plugin funguje v Linuxu v jiném VST softwaru, kontaktujte prosím LMMS vývojáře!</translation>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
- <translation type="unfinished"></translation>
+ <source>Smooth</source>
+ <translation type="unfinished">Uhladit</translation>
</message>
<message>
- <source>: default</source>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
- <translation type="unfinished"></translation>
+ <source>Sine wave</source>
+ <translation type="unfinished">Sinusová vlna</translation>
</message>
<message>
- <source>'</source>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
- <translation type="unfinished"></translation>
+ <source>Triangle wave</source>
+ <translation type="unfinished">Trianglová vlna</translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
- <translation type="unfinished"></translation>
+ <source>Square wave</source>
+ <translation type="unfinished">Pravoúhlá (square) vlna</translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3580,10 +5229,6 @@ Jestliže tento plugin funguje v Linuxu v jiném VST softwaru, kontaktujte pros
<translation>Přehrávat pozpátku</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Smyčka</translation>
- </message>
- <message>
<source>Amplify</source>
<translation>Zesílení</translation>
</message>
@@ -3599,47 +5244,29 @@ Jestliže tento plugin funguje v Linuxu v jiném VST softwaru, kontaktujte pros
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>Frequency:</source>
- <translation>Frekvence:</translation>
- </message>
- <message>
- <source>Gain:</source>
- <translation>Zisk:</translation>
- </message>
<message>
- <source>RATIO</source>
- <translation>POMĚR</translation>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>Poměr:</translation>
+ <source>Loop mode</source>
+ <translation type="unfinished">Režim smyčky</translation>
</message>
<message>
- <source>FREQ</source>
+ <source>Interpolation mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>GAIN</source>
+ <source>None</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
- <message>
- <source>Frequency</source>
- <translation>Frekvence</translation>
- </message>
<message>
- <source>Gain</source>
- <translation>Zisk</translation>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
- <translation>Poměr</translation>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3699,6 +5326,10 @@ Jestliže tento plugin funguje v Linuxu v jiném VST softwaru, kontaktujte pros
<source>Change color</source>
<translation>Změnit barvu</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3794,6 +5425,120 @@ Jestliže tento plugin funguje v Linuxu v jiném VST softwaru, kontaktujte pros
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3830,66 +5575,60 @@ Přesvědčte se prosím, že máte právo zápisu do tohoto souboru a příslu
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation type="unfinished"></translation>
+ <source>Graph</source>
+ <translation>Graf</translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
- <translation type="unfinished"></translation>
+ <source>Start frequency</source>
+ <translation type="unfinished">Počáteční frekvence</translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
- <translation type="unfinished"></translation>
+ <source>End frequency</source>
+ <translation type="unfinished">Konečná frekvence</translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
- <translation type="unfinished"></translation>
+ <source>Gain</source>
+ <translation type="unfinished">Zisk</translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation>Graf</translation>
+ <source>Envelope Slope</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrument</name>
<message>
- <source>Start frequency</source>
- <translation type="unfinished">Počáteční frekvence</translation>
+ <source>Noise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency</source>
- <translation type="unfinished">Konečná frekvence</translation>
+ <source>Click</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
- <translation type="unfinished">Zkreslení</translation>
+ <source>Frequency Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation type="unfinished">Zisk</translation>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>End to note</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3904,15 +5643,35 @@ Přesvědčte se prosím, že máte právo zápisu do tohoto souboru a příslu
<translation type="unfinished">Konečná frekvence:</translation>
</message>
<message>
- <source>Distortion:</source>
- <translation type="unfinished">Zkreslení:</translation>
- </message>
- <message>
<source>Gain:</source>
<translation type="unfinished">Zisk:</translation>
</message>
<message>
- <source>Decay:</source>
+ <source>Frequency Slope:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion End:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4127,7 +5886,7 @@ Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech.</t
</message>
<message>
<source>Decay:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Doznívání:</translation>
</message>
<message>
<source>303-es-que, 24dB/octave, 3 pole filter</source>
@@ -4170,35 +5929,67 @@ Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech.</t
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for a square-wave with a rounded end.</source>
+ <source>Click here for a square-wave with a rounded end.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Moog wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a moog-like wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation>Sinusová vlna</translation>
+ </message>
+ <message>
+ <source>Click for a sine-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>White noise wave</source>
+ <translation>Bílý šum</translation>
+ </message>
+ <message>
+ <source>Click here for an exponential wave.</source>
+ <translation>Klikněte zde pro exponenciální vlnu.</translation>
+ </message>
+ <message>
+ <source>Click here for white-noise.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Moog wave</source>
+ <source>Click here for bandlimited saw wave.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for a moog-like wave.</source>
+ <source>Bandlimited square wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sine wave</source>
- <translation>Sinusová vlna</translation>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click for a sine-wave.</source>
+ <source>Bandlimited triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>White noise wave</source>
- <translation>Bílý šum</translation>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for an exponential wave.</source>
- <translation>Klikněte zde pro exponenciální vlnu.</translation>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for white-noise.</source>
+ <source>Click here for bandlimited moog saw wave.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4277,7 +6068,7 @@ Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech.</t
</message>
<message>
<source>Decay:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Doznívání:</translation>
</message>
<message>
<source>DEC</source>
@@ -4796,11 +6587,27 @@ Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech.</t
<translation>Osc %1 panorama:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Osc %1 jemné rozladění vlevo:</translation>
+ <source>cents</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5071,336 +6878,162 @@ Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech.</t
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>Nemohu zmrazit pattern</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>Pattern nemůže být nyní zmrazen, neboť jste v režimu přehrávání. Zastavte přehrávání a zkuste to znovu!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Zmrazuji pattern...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Zrušit</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>dvojitým kliknutím otevřete tento pattern v piano-roll
-k nastavení zesílení kroku použijte kolečko myši</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>Otevřít v piano-roll</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>Vyčistit všechny noty</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>Resetovat jméno</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>Změnit jméno</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation>Znovu zmrazit</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation>Zmrazit</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation>Rozmrazit</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>Přidat kroky</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>Odstranit kroky</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Přehrát nebo pozastavit přehrávání aktuálního patternu (mezerník)</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Nahrávat noty z MIDI-zařízení/piano kanálu</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Zastavit přehrávání aktuálního patternu (mezerník)</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>Režim kreslení (Shift+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>Režim mazání (Shift+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>Režim výběru (Shift+S)</translation>
- </message>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Vyjmout označené noty (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Kopírovat označené noty (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Vložit noty ze schránky (Ctrl+V)</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>Trvání noty</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Piano-Roll - žádný pattern</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>Piano-Roll - %1</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Otevřete prosím pattern jeho dvojitým poklepáním!</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>Nahrávat tóny z MIDI zařízení / kanálu piána při přehrávání skladby nebo BB stopy</translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation>Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci. Pattern je automaticky přehráván ve smyčce.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation>Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu, následně si je můžete přehrát nebo upravit.</translation>
- </message>
+ <name>pluginBrowser</name>
<message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation>Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu a na pozadí uslyšíte skladbu nebo BB stopu.</translation>
+ <source>no description</source>
+ <translation>bez popisu</translation>
</message>
<message>
- <source>Click here to stop playback of current pattern.</source>
- <translation>Klikněte zde, pokud chcete zastavit přehrávání aktuálního patternu.</translation>
+ <source>Instrument plugins</source>
+ <translation>Pluginy nástrojů</translation>
</message>
<message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Klikněte zde pokud chcete označené noty vyjmout a uložit do schránky. Vložit je pak můžete kdekoliv v libovolném patternu pomocí tlačítka Vložit.</translation>
+ <source>Filter for importing MIDI-files into LMMS</source>
+ <translation>Filtr pro import MIDI souborů do LMMS</translation>
</message>
<message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Klikněte zde pokud chcete označené noty zkopírovat do schránky. Vložit je pak můžete kdekoliv v libovolného patternu pomocí tlačítka Vložit.</translation>
+ <source>GUS-compatible patch instrument</source>
+ <translation>GUS kompatibilní patch instrument</translation>
</message>
<message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation>Kliknete-li zde, budou noty ze schránky vloženy do prvního viditelného taktu.</translation>
+ <source>Additive Synthesizer for organ-like sounds</source>
+ <translation>Aditivní syntezátor pro zvuky podobné varhanám</translation>
</message>
<message>
- <source>Note lock</source>
- <translation>Zámek noty</translation>
+ <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <translation>Plugin pro zvýšení stereo separace vstupních stereo souborů</translation>
</message>
<message>
- <source>Note Volume</source>
- <translation type="unfinished"></translation>
+ <source>Vibrating string modeler</source>
+ <translation>Vibrační modelátor strun</translation>
</message>
<message>
- <source>Note Panning</source>
- <translation type="unfinished"></translation>
+ <source>List installed LADSPA plugins</source>
+ <translation>Seznam instalovaných LADSPA pluginů</translation>
</message>
<message>
- <source>Detune mode (Shift+T)</source>
- <translation type="unfinished"></translation>
+ <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
+ <translation>plugin pro užití libovolných LADSPA efektů uvnitř LMMS.</translation>
</message>
<message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation type="unfinished"></translation>
+ <source>VST-host for using VST(i)-plugins within LMMS</source>
+ <translation>VST host pro užití VST(i) pluginů v LMMS</translation>
</message>
<message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
+ <source>Incomplete monophonic imitation tb303</source>
+ <translation>Nekompletní monofonní imitace tb303</translation>
</message>
<message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation type="unfinished"></translation>
+ <source>Filter for importing FL Studio projects into LMMS</source>
+ <translation>Filtr určený k import projektů z FL Studia do LMMS</translation>
</message>
<message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
+ <source>Tuneful things to bang on</source>
+ <translation>Libozvučná klepátka</translation>
</message>
<message>
- <source>Mark/unmark current semitone</source>
- <translation type="unfinished"></translation>
+ <source>Instrument browser</source>
+ <translation>Prohlížeč nástrojů</translation>
</message>
<message>
- <source>Mark current scale</source>
- <translation type="unfinished"></translation>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <translation>Nástroj přetáhněte buď do Editoru skladby, Beat+Bassline Editoru nebo do existující nástrojové stopy.</translation>
</message>
<message>
- <source>Mark current chord</source>
+ <source>Plugin for freely manipulating stereo output</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Unmark all</source>
+ <source>Plugin for controlling knobs with sound peaks</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No scale</source>
+ <source>Emulation of the MOS6581 and MOS8580 SID.
+This chip was used in the Commodore 64 computer.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No chord</source>
+ <source>Customizable wavetable synthesizer</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>pluginBrowser</name>
- <message>
- <source>no description</source>
- <translation>bez popisu</translation>
- </message>
- <message>
- <source>Instrument plugins</source>
- <translation>Pluginy nástrojů</translation>
- </message>
- <message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation>plugin pro užití libovolných VST efektů uvnitř LMMS.</translation>
- </message>
- <message>
- <source>Filter for importing MIDI-files into LMMS</source>
- <translation>Filtr pro import MIDI souborů do LMMS</translation>
- </message>
- <message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>tři výkonné oscilátory které můžete modulovat rozličnými způsoby</translation>
- </message>
- <message>
- <source>GUS-compatible patch instrument</source>
- <translation>GUS kompatibilní patch instrument</translation>
- </message>
- <message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>jednoduchý sampler s rozmanitým nastavením pro použití samplů (např. bicích) v nástrojové stopě</translation>
- </message>
- <message>
- <source>Additive Synthesizer for organ-like sounds</source>
- <translation>Aditivní syntezátor pro zvuky podobné varhanám</translation>
- </message>
<message>
- <source>Plugin for enhancing stereo separation of a stereo input file</source>
- <translation>Plugin pro zvýšení stereo separace vstupních stereo souborů</translation>
- </message>
- <message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation>mnohostranný kick & bassdrum syntezátor</translation>
- </message>
- <message>
- <source>Vibrating string modeler</source>
- <translation>Vibrační modelátor strun</translation>
+ <source>Player for SoundFont files</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>List installed LADSPA plugins</source>
- <translation>Seznam instalovaných LADSPA pluginů</translation>
+ <source>Emulation of GameBoy (TM) APU</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
- <translation>plugin pro užití libovolných LADSPA efektů uvnitř LMMS.</translation>
+ <source>Embedded ZynAddSubFX</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VST-host for using VST(i)-plugins within LMMS</source>
- <translation>VST host pro užití VST(i) pluginů v LMMS</translation>
+ <source>2-operator FM Synth</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Incomplete monophonic imitation tb303</source>
- <translation>Nekompletní monofonní imitace tb303</translation>
+ <source>Filter for importing Hydrogen files into LMMS</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing FL Studio projects into LMMS</source>
- <translation>Filtr určený k import projektů z FL Studia do LMMS</translation>
+ <source>LMMS port of sfxr</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tuneful things to bang on</source>
- <translation>Libozvučná klepátka</translation>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument browser</source>
- <translation>Prohlížeč nástrojů</translation>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
- <translation>Nástroj přetáhněte buď do Editoru skladby, Beat+Bassline Editoru nebo do existující nástrojové stopy.</translation>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for freely manipulating stereo output</source>
+ <source>Carla Rack Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for controlling knobs with sound peaks</source>
+ <source>4-oscillator modulatable wavetable synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of the MOS6581 and MOS8580 SID.
-This chip was used in the Commodore 64 computer.</source>
+ <source>plugin for waveshaping</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Customizable wavetable synthesizer</source>
+ <source>Boost your bass the fast and simple way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Player for SoundFont files</source>
+ <source>Versatile drum synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for boosting bass</source>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of GameBoy (TM) APU</source>
+ <source>plugin for processing dynamics in a flexible way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Embedded ZynAddSubFX</source>
+ <source>Carla Patchbay Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>2-operator FM Synth</source>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing Hydrogen files into LMMS</source>
+ <source>Graphical spectrum analyzer plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS port of sfxr</source>
+ <source>A NES-like synthesizer</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5700,35 +7333,35 @@ Zpoždění %2 ms</translation>
</message>
<message>
<source>One instrument track window mode</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Režim jedné stopy pro nástroje</translation>
</message>
<message>
<source>Compact track buttons</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Malá tlačítka u stop</translation>
</message>
<message>
<source>Sync VST plugins to host playback</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Synchronizace VST pluginů s hostujícím přehráváním</translation>
</message>
<message>
<source>Enable note labels in piano roll</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Povolit názvy tónů v piano rollu</translation>
</message>
<message>
<source>Enable waveform display by default</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Povolit zobrazení waveformu ve výchozím nastavení</translation>
</message>
<message>
<source>Smooth scroll in Song Editor</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Plynulé posouvání v Song Editoru</translation>
</message>
<message>
<source>Enable auto save feature</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Povolit automatické ukládání</translation>
</message>
<message>
<source>Show playback cursor in AudioFileProcessor</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Zobrazit přehrávací kurzor v AudioFileProcessoru</translation>
</message>
</context>
<context>
@@ -5884,7 +7517,7 @@ Zpoždění %2 ms</translation>
</message>
<message>
<source>Resonance</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Rezonance</translation>
</message>
<message>
<source>Voice 3 off</source>
@@ -5951,7 +7584,7 @@ Zpoždění %2 ms</translation>
</message>
<message>
<source>Decay:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Doznívání:</translation>
</message>
<message>
<source>Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.</source>
@@ -6102,152 +7735,6 @@ Zpoždění %2 ms</translation>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation>Editor skladby</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Přehrát skladbu (mezerník)</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Zastavit přehrávání skladby (mezerník)</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Přidat beat/bassline</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Přidat stopu samplů</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>Režim kreslení</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>Režim editace (označit a přesunout)</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Klikněte zde, pokud chcete přehrát celou skladbu. Přehrávání začne v místě kde se nalézá zelený označovač pozice se kterým lze též při přehrávání pohybovat.</translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Klikněte zde, pokud chcete zastavit přehrávání skladby. Označovač pozice bude odeslán na začátek skladby.</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>Nemohu otevřít soubor</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>Nemohu zapsat soubor</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation>Přidat automatizační stopu</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation>Nahrát samply z audio zařízení</translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation>Nahrát samply z audio zařízení při přehrávání skladby nebo BB stopy</translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished">Tempo</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished">TEMPO/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">tempo skladby</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished">Tempo skladby je uvedeno v úderech za minutu (BPS). Chcete-li změnit tempo skladby, změňte tuto hodnotu. Každý takt má čtyři beaty, takže tempo v BPS specifikuje kolik taktů / 4 bude za minutu přehráno (nebo kolik taktů bude přehráno ve čtyřech minutách).</translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished">Režim vysoké kvality</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished">Hlavní hlasitost</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished">hlavní hlasitost</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished">Hlavní ladění (pitch)</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished">hlavní ladění</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished">Hodnota: %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished">Hodnota: %1 půltónů</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>Width:</source>
@@ -6433,6 +7920,18 @@ Zpoždění %2 ms</translation>
<source>Solo</source>
<translation>Sólo</translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6751,4 +8250,74 @@ The LED in the lower right corner of the waveform editor determines whether the
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/de.qm b/data/locale/de.qm
index 534645f..353543c 100644
Binary files a/data/locale/de.qm and b/data/locale/de.qm differ
diff --git a/data/locale/de.ts b/data/locale/de.ts
index 171c0ce..1676866 100644
--- a/data/locale/de.ts
+++ b/data/locale/de.ts
@@ -8,10 +8,6 @@
<translation>Über LMMS</translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation>LMMS (Linux MultiMedia Studio)</translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation>Version %1 (%2/%3, Qt %4, %5)</translation>
</message>
@@ -35,7 +31,9 @@
<source>Current language not translated (or native English).
If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer!</source>
- <translation>Deutsche Übersetzung von Tobias Doerffel und Daniel Winzen.</translation>
+ <translation>Deutsche Übersetzung von Tobias Doerffel und Daniel Winzen.
+
+Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder eine bereits existierende Übersetzung verbessern möchten, können Sie uns gerne helfen! Kontaktieren Sie einfach den Betreiber!</translation>
</message>
<message>
<source>License</source>
@@ -46,8 +44,20 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Copyright (c) 2004-2014, LMMS-Entwickler</translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
- <translation><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></translation>
+ <source>LMMS</source>
+ <translation>LMMS</translation>
+ </message>
+ <message>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></translation>
+ </message>
+ <message>
+ <source>Involved</source>
+ <translation>Beteiligt</translation>
+ </message>
+ <message>
+ <source>Contributors ordered by number of commits:</source>
+ <translation>Mitwirkende sortiert nach der Anzahl an Einreichungen:</translation>
</message>
</context>
<context>
@@ -131,7 +141,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.</source>
- <translation>Wenn Sie diesen Button aktivieren, wird das gesamte Sample umgekehrt. Das kann nützlich für coole Effekte sein, wie z.B. eine umgekehrte Crash.</translation>
+ <translation>Wenn Sie diesen Knopf aktivieren, wird das gesamte Sample umgekehrt. Das kann nützlich für coole Effekte sein, wie z.B. eine umgekehrte Crash.</translation>
</message>
<message>
<source>Amplify:</source>
@@ -139,7 +149,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
- <translation>Mit diesem Knopf können Sie die Verstärkungsrate festlegen. Wenn Sie einen Wert von 100% setzen, wird das Sample nicht geändert. Ansonsten wird es hoch oder runter verstärkt (Ihre Audio-Datei wird dabei nicht verändert!)</translation>
+ <translation>Mit diesem Regler können Sie die Verstärkungsrate festlegen. Wenn Sie einen Wert von 100% setzen, wird das Sample nicht geändert. Ansonsten wird es hoch oder runter verstärkt (Ihre Audio-Datei wird dabei nicht verändert!)</translation>
</message>
<message>
<source>Startpoint:</source>
@@ -158,20 +168,40 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Wenn Sie diese Option aktivieren, wird das Sample über verschiedene Noten weitergespielt. Wenn Sie die Tonhöhe ändern oder die Note endet, bevor das Ende des Samples erreicht ist, dann fängt die nächste Note da an, wo aufgehört wurde. Um die Wiedergabe an den Anfang des Samples zurückzusetzen, fügen Sie eine Note am unteren Ende des Keyboards ein (< 20Hz)</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation>Sample am Start- und Endpunkt wiederholen</translation>
+ <source>Disable loop</source>
+ <translation>Wiederholung deaktivieren</translation>
+ </message>
+ <message>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation>Dieser Regler deaktiviert Wiederholung. Das Sample wird nur einmal vom Anfang bis zum Ende wiedergegeben .</translation>
+ </message>
+ <message>
+ <source>Enable loop</source>
+ <translation>Wiederholung aktivieren</translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation>Dieser Knopf aktiviert Vorwärts-Wiederholung. Das Sample wird zwischen dem Endpunkt und dem Loop-Punkt wiederholt.</translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation>Dieser Knopf aktiviert Ping-Pong-Wiederholung. Das Sample wird zwischen dem Endpunkt und dem Loop-Punkt rückwärts und vorwärts wiederholt.</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation>Mit diesem Regler können Sie festlegen, wo AudioFileProcessor anfangen soll, Ihr Sample zu spielen. </translation>
</message>
<message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation>Hier können Sie festlegen, ob der Wiederholungsmodus aktiviert ist. Wenn aktiviert, wiederholt AudioFileProcessor das Sample, bis die ganze Note gespielt wurde. Dies ist nützlich für Sachen, wie Streicher oder Chor Samples.</translation>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation>Mit diesem Regler können Sie festlegen, wo AudioFileProcessor aufhören soll, Ihr Sample zu spielen. </translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Mit diesem Knopf können Sie den Punkt festlegen, an dem AudioFileProcessor anfangen soll Ihr Sample abzuspielen. Wenn Sie den Wiederholungsmodus aktivieren, ist dies der Punkt, an dem AudioFileProcessor wieder anfängt zu spielen, wenn eine Note länger ist, als das Sample zwischen den Start- und Endpunkten.</translation>
+ <source>Loopback point:</source>
+ <translation>Wiederholungspunkt:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Mit diesem Knopf können Sie den Punkt festlegen, an dem AudioFileProcessor aufhören soll Ihr Sample abzuspielen. Wenn Sie den Wiederholungsmodus aktivieren, ist dies der Punkt, an dem AudioFileProcessor wieder von vorne anfängt zu spielen, wenn eine Note länger ist, als das Sample zwischen den Start- und Endpunkten.</translation>
+ <source>With this knob you can set the point where the loop starts. </source>
+ <translation>Mit diesem Regler können Sie festlegen, wo die Wiederholung beginnt.</translation>
</message>
</context>
<context>
@@ -199,9 +229,6 @@ If you're interested in translating LMMS in another language or want to imp
<source>The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS.</source>
<translation>Der JACK-Server scheint heruntergefahren worden zu sein und es war nicht möglich, eine neue Instanz zu starten. LMMS ist daher nicht in der Lage, fortzufahren. Sie sollten Ihr Projekt speichern und JACK und LMMS neustarten.</translation>
</message>
-</context>
-<context>
- <name>AudioJack::setupWidget</name>
<message>
<source>CLIENT-NAME</source>
<translation>CLIENT-NAME</translation>
@@ -326,11 +353,11 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.</source>
- <translation>Klicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus können Sie einzelne Werte hinzufügen und verschieben. Das ist der Standard-Modus, der meistens benutzt wird. Sie können auch 'Umschalt+D' auf Ihrer Tastatur drücken, um in diesen Modus zu gelangen.</translation>
+ <translation>Klicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus können Sie einzelne Werte hinzufügen und verschieben. Das ist der Standard-Modus, der meistens benutzt wird. Sie können auch »Umschalt+D« auf Ihrer Tastatur drücken, um in diesen Modus zu gelangen.</translation>
</message>
<message>
<source>Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation>Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus können Sie einzelne Werte löschen. Sie können auch 'Umschalt+E' auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren.</translation>
+ <translation>Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus können Sie einzelne Werte löschen. Sie können auch »Umschalt+E« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren.</translation>
</message>
<message>
<source>Cut selected values (Ctrl+X)</source>
@@ -346,11 +373,11 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Klicken Sie hier, um die markierten Werte auszuschneiden und in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Button klicken.</translation>
+ <translation>Klicken Sie hier, um die markierten Werte auszuschneiden und in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Knopf klicken.</translation>
</message>
<message>
<source>Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Klicken Sie hier, um die markierten Werte in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Button klicken.</translation>
+ <translation>Klicken Sie hier, um die markierten Werte in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Knopf klicken.</translation>
</message>
<message>
<source>Click here and the values from the clipboard will be pasted at the first visible measure.</source>
@@ -419,6 +446,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation>Ein Steuerelement mit <Strg> hier her ziehen</translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation>Modell ist bereits mit diesem Pattern verbunden.</translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -448,7 +479,11 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Disconnect "%1"</source>
- <translation>"%1" trennen</translation>
+ <translation>»%1« trennen</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation>Aufnahme setzen/löschen</translation>
</message>
</context>
<context>
@@ -501,6 +536,17 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation>GUI anzeigen</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation>Klicken Sie hier, um die grafische Oberfläche von Carla anzuzeigen bzw. auszublenden.</translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -593,7 +639,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Controllers are able to automate the value of a knob, slider, and other controls.</source>
- <translation>Mit Controller können Sie den Wert eines Knopfes, Schiebereglers und anderer Steuerelemente automatisieren.</translation>
+ <translation>Mit Controller können Sie den Wert eines Reglers, Schiebereglers und anderer Steuerelemente automatisieren.</translation>
</message>
<message>
<source>Rename controller</source>
@@ -607,9 +653,62 @@ If you're interested in translating LMMS in another language or want to imp
<source>&Remove this plugin</source>
<translation>Plugin entfe&rnen</translation>
</message>
+</context>
+<context>
+ <name>DelayControls</name>
<message>
- <source>&Help</source>
- <translation>&Hilfe</translation>
+ <source>Delay Samples</source>
+ <translation>Samples verzögern</translation>
+ </message>
+ <message>
+ <source>Feedback</source>
+ <translation>Rückkopplung</translation>
+ </message>
+ <message>
+ <source>Lfo Frequency</source>
+ <translation>LFO-Frequenz</translation>
+ </message>
+ <message>
+ <source>Lfo Amount</source>
+ <translation>LFO-Stärke</translation>
+ </message>
+</context>
+<context>
+ <name>DelayControlsDialog</name>
+ <message>
+ <source>Delay</source>
+ <translation>Verzögerung</translation>
+ </message>
+ <message>
+ <source>Delay Time</source>
+ <translation>Verzögerungszeit</translation>
+ </message>
+ <message>
+ <source>Regen</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Feedback Amount</source>
+ <translation>Rückkopplungsstärke</translation>
+ </message>
+ <message>
+ <source>Rate</source>
+ <translation>Rate</translation>
+ </message>
+ <message>
+ <source>Lfo</source>
+ <translation>LFO</translation>
+ </message>
+ <message>
+ <source>Lfo Amt</source>
+ <translation>LFO-Stärke</translation>
+ </message>
+</context>
+<context>
+ <name>DetuningHelper</name>
+ <message>
+ <source>Note detuning</source>
+ <translation>Noten-Verstimmung</translation>
</message>
</context>
<context>
@@ -739,6 +838,13 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DummyEffect</name>
+ <message>
+ <source>NOT FOUND</source>
+ <translation>NICHT GEFUNDEN</translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -806,7 +912,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
- <translation>Der Wet/Dry-Knopf legt das Verhältnis zwischen Eingangssignal und vom Effekt bearbeiteten Signal im Ausgang fest.</translation>
+ <translation>Der Wet/Dry-Regler legt das Verhältnis zwischen Eingangssignal und vom Effekt bearbeiteten Signal im Ausgang fest.</translation>
</message>
<message>
<source>DECAY</source>
@@ -818,7 +924,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
- <translation>Der Abfallzeit-Knopf legt fest, wie viele Puffer mit Stille durchgelaufen sein müssen, bis der Effekt mit der Verarbeitung stoppt. Kleinere Werte reduzieren die CPU-Last, können jedoch unter Umständen das Ende von Delay-Effekten o.ä. abschneiden.</translation>
+ <translation>Der Abfallzeit-Regler legt fest, wie viele Puffer mit Stille durchgelaufen sein müssen, bis der Effekt mit der Verarbeitung stoppt. Kleinere Werte reduzieren die CPU-Last, können jedoch unter Umständen das Ende von Delay-Effekten o.ä. abschneiden.</translation>
</message>
<message>
<source>GATE</source>
@@ -830,7 +936,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
- <translation>Der Gate-Knopf legt die Stärke des Signals fest, welches als Stille angesehen wird, um zu entscheiden, wann das Plugin mit der Verarbeitung aufhören kann.</translation>
+ <translation>Der Gate-Regler legt die Stärke des Signals fest, welches als »Stille« angesehen wird, um zu entscheiden, wann das Plugin mit der Verarbeitung aufhören soll.</translation>
</message>
<message>
<source>Controls</source>
@@ -854,11 +960,11 @@ Right clicking will bring up a context menu where you can change the order in wh
Der Ein-/Ausschalter ermöglicht es Ihnen ein Plugin jeder Zeit zu umgehen.
-Der Wet/Dry-Knopf legt das Verhältnis zwischen Eingangssignal und vom Effekt bearbeiteten Signal im Ausgang fest. Der Eingag dieses Effekts ist der Ausgang des vorherigen Effekts. Somit enthält das »dry«-Signal, für Effekte weiter unten in der Kette, alle vorherigen Effekte.
+Der Wet/Dry-Regler legt das Verhältnis zwischen Eingangssignal und vom Effekt bearbeiteten Signal im Ausgang fest. Der Eingag dieses Effekts ist der Ausgang des vorherigen Effekts. Somit enthält das »dry«-Signal, für Effekte weiter unten in der Kette, alle vorherigen Effekte.
-Der Abfallzeit-Knopf legt fest, wie lange das Signal weiterverarbeitet werden soll, nachdem die Noten losgelassen wurde. Der Effekt hört auf Signale zu verarbeiten, wenn die Lautstärke eines Signals für eine festgelegte Zeit unter einen festgelegten Schwellwert gefallen ist. Dieser Knopf legt die »festgelegte Zeit« fest. Längere Zeiten brauchen mehr Rechenleistung, deshalb sollte diese Zahl für die meisten Effekte niedrig sein. Es muss für Effekte, die über längere Zeit Stille erzeug [...]
+Der Abfallzeit-Regler legt fest, wie lange das Signal weiterverarbeitet werden soll, nachdem die Noten losgelassen wurde. Der Effekt hört auf Signale zu verarbeiten, wenn die Lautstärke eines Signals für eine festgelegte Zeit unter einen festgelegten Schwellwert gefallen ist. Dieser Regler legt die »festgelegte Zeit« fest. Längere Zeiten brauchen mehr Rechenleistung, deshalb sollte diese Zahl für die meisten Effekte niedrig sein. Es muss für Effekte, die über längere Zeit Stille erze [...]
-Der Gate-Knopf kontrolliert den »festgelegten Schwellwert« für das automatische Ausschalten des Effekts. Die Uhr für die »festgelegte Zeit« beginnt sobald der Pegel des verarbeiteten Signals unter den mit diesem Knopf festgelegten Pegel fällt.
+Der Gate-Regler kontrolliert den »festgelegten Schwellwert« für das automatische Ausschalten des Effekts. Die Uhr für die »festgelegte Zeit« beginnt sobald der Pegel des verarbeiteten Signals unter den mit diesem Knopf festgelegten Pegel fällt.
Der Regler-Knopf öffnet einen Dialog zum Bearbeiten der Parameter des Effekts.
@@ -876,10 +982,6 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
<source>&Remove this plugin</source>
<translation>Plugin entfe&rnen</translation>
</message>
- <message>
- <source>&Help</source>
- <translation>&Hilfe</translation>
- </message>
</context>
<context>
<name>EnvelopeAndLfoParameters</name>
@@ -952,7 +1054,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.</source>
- <translation>Benutzen Sie diesen Knopf, um die Verzögerung (predelay) für die aktuelle Hüllkurven einzustellen. Je größer dieser Wert, desto länger dauert es, bis die eigentliche Hüllkurve beginnt.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Verzögerung (predelay) für die aktuelle Hüllkurven einzustellen. Je größer dieser Wert, desto länger dauert es, bis die eigentliche Hüllkurve beginnt.</translation>
</message>
<message>
<source>ATT</source>
@@ -964,7 +1066,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.</source>
- <translation>Benutzen Sie diesen Knopf, um die Anschwellzeit (attack) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto länger braucht die Hüllkurve, um bis zum Anschwellpegel (attack-level) zu steigen. Wählen Sie einen kleinen Wert für Instrumente wie Klavier und einen großen Wert für Streichinstrumente.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Anschwellzeit (attack) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto länger braucht die Hüllkurve, um bis zum Anschwellpegel (attack-level) zu steigen. Wählen Sie einen kleinen Wert für Instrumente wie Klavier und einen großen Wert für Streichinstrumente.</translation>
</message>
<message>
<source>HOLD</source>
@@ -976,7 +1078,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.</source>
- <translation>Benutzen Sie diesen Knopf, um die Haltezeit (hold) der aktuellen Hüllkurve zu setzen. Je größer der Wert, desto länger hält die Hüllkurve den Anschwellpegel, bevor sie zum Haltepegel (sustain-level) abfällt.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Haltezeit (hold) der aktuellen Hüllkurve zu setzen. Je größer der Wert, desto länger hält die Hüllkurve den Anschwellpegel, bevor sie zum Haltepegel (sustain-level) abfällt.</translation>
</message>
<message>
<source>DEC</source>
@@ -988,7 +1090,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.</source>
- <translation>Benutzen Sie diesen Knopf, um die Abfallzeit (decay) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto länger braucht die Hüllkurve, um vom Anschwellpegel (attack-level) zum Dauerpegel (sustain-level) abzufallen. Wählen Sie einen kleinen Wert für Instrumente wie Klavier.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Abfallzeit (decay) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto länger braucht die Hüllkurve, um vom Anschwellpegel (attack-level) zum Dauerpegel (sustain-level) abzufallen. Wählen Sie einen kleinen Wert für Instrumente wie Klavier.</translation>
</message>
<message>
<source>SUST</source>
@@ -1000,7 +1102,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.</source>
- <translation>Benutzen Sie diesen Knopf, um den Dauerpegel (sustain-level) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto höher der Pegel, den die Hüllkurve hält, bevor sie auf Null abfällt.</translation>
+ <translation>Benutzen Sie diesen Regler, um den Dauerpegel (sustain-level) für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto höher der Pegel, den die Hüllkurve hält, bevor sie auf Null abfällt.</translation>
</message>
<message>
<source>REL</source>
@@ -1012,7 +1114,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.</source>
- <translation>Benutzen Sie diesen Knopf, um die Ausklingzeit der aktuellen Hüllkurve einzustellen. Je größer der Wert, desto länger braucht die Hüllkurve um vom Dauerpegel (sustain-level) auf Null abzufallen. Wählen Sie einen großen Wert für weiche Instrumente, wie z.B. Streicher.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Ausklingzeit der aktuellen Hüllkurve einzustellen. Je größer der Wert, desto länger braucht die Hüllkurve um vom Dauerpegel (sustain-level) auf Null abzufallen. Wählen Sie einen großen Wert für weiche Instrumente, wie z.B. Streicher.</translation>
</message>
<message>
<source>AMT</source>
@@ -1024,7 +1126,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.</source>
- <translation>Benutzen Sie diesen Knopf, um die Modulationsintensität für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cutoff-Frequenz) von der Hüllkurve beeinflusst.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Modulationsintensität für die aktuelle Hüllkurve einzustellen. Je größer dieser Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cutoff-Frequenz) von der Hüllkurve beeinflusst.</translation>
</message>
<message>
<source>LFO predelay:</source>
@@ -1032,7 +1134,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.</source>
- <translation>Benutzen Sie diesen Knopf, um die Verzögerungszeit für den aktuellen LFO einzustellen. Je größer dieser Wert, desto länger die Zeit, bis der LFO anfängt zu schwingen.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Verzögerungszeit für den aktuellen LFO einzustellen. Je größer dieser Wert, desto länger die Zeit, bis der LFO anfängt zu schwingen.</translation>
</message>
<message>
<source>LFO- attack:</source>
@@ -1040,7 +1142,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.</source>
- <translation>Benutzen Sie diesen Knopf, um die Anschwellzeit für den aktuellen LFO einzustellen. Je größer dieser Wert, desto länger dauert es, bis die Amplitude des LFOs bis zum Maximum angestiegen ist.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Anschwellzeit für den aktuellen LFO einzustellen. Je größer dieser Wert, desto länger dauert es, bis die Amplitude des LFOs bis zum Maximum angestiegen ist.</translation>
</message>
<message>
<source>SPD</source>
@@ -1052,11 +1154,11 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.</source>
- <translation>Benutzen Sie diesen Knopf, um die Geschwindigkeit für den aktuellen LFO einzustellen. Je größer der Wert, desto schneller schwingt der LFO und desto schneller ist der entsprechende Effekt.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Geschwindigkeit für den aktuellen LFO einzustellen. Je größer der Wert, desto schneller schwingt der LFO und desto schneller ist der entsprechende Effekt.</translation>
</message>
<message>
<source>Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.</source>
- <translation>Benutzen Sie diesen Knopf, um die Modulationsintensität des aktuellen LFOs einzustellen. Je größer der Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cuttoff-Frequenz) von diesem LFO beeinflusst.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Modulationsintensität des aktuellen LFOs einzustellen. Je größer der Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cuttoff-Frequenz) von diesem LFO beeinflusst.</translation>
</message>
<message>
<source>Click here for a sine-wave.</source>
@@ -1064,7 +1166,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Click here for a triangle-wave.</source>
- <translation>Klick für eine Dreieckswelle.</translation>
+ <translation>Klick für eine Dreieckwelle.</translation>
</message>
<message>
<source>Click here for a saw-wave for current.</source>
@@ -1072,7 +1174,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Click here for a square-wave.</source>
- <translation>Klick für eine Rechteckswelle.</translation>
+ <translation>Klick für eine Rechteckwelle.</translation>
</message>
<message>
<source>Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.</source>
@@ -1114,6 +1216,10 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation>Ziehen Sie ein Sample von irgendwo und lassen es in diesem Fenster fallen.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation>Klick für eine zufällige Welle.</translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1253,13 +1359,78 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
<source>Export as loop (remove end silence)</source>
<translation>Als Schleife exportieren (Stille am Ende entfernen)</translation>
</message>
+</context>
+<context>
+ <name>FileBrowser</name>
+ <message>
+ <source>Browser</source>
+ <translation>Browser</translation>
+ </message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
+ <message>
+ <source>Send to active instrument-track</source>
+ <translation>An aktive Instrumentspur senden</translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation>In neuer Instrumentspur im Song-Editor öffnen</translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation>In neuer Instrumentspur im B+B-Editor öffnen</translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation>Lade Sample</translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation>Bitte warten, lade Sample für Vorschau…</translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation>--- Mitgelieferte Dateien ---</translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation>Kanal Sendemenge</translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation>Der FX Kanal erhält von ein oder mehr Instrumentenspuren Eingabesignale.
+ Er kann wiederum durch mehrere andere FX Kanäle gesendet werden. LMMS verhindert Endlosschleifen automatisch für Sie und erlaubt es nicht eine Verbindung zu erstellen, die in einer Endlosschleife resultiert.
+
+Um den Kanal an einen anderen Kanal zu senden, wählen Sie den FX Kanal aus und klicken Sie auf den »Senden« Knopf in dem Kananl, an den Sie den Kanal senden möchten. Der Knopf unter dem Sendeknopf kontrolliert die Stärke des gesendeten Signals.
+
+Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch einen Rechtsklick auf dem FX Kanal aufgerufen wird.
+</translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation>Nach &links verschieben</translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation>Nach &rechts verschieben</translation>
+ </message>
<message>
- <source>Sample-exact controllers</source>
- <translation>Sample-exakte Regler</translation>
+ <source>Rename &channel</source>
+ <translation>&Kanal umbenennen</translation>
</message>
<message>
- <source>Alias-free oscillators</source>
- <translation>Unterschiedsfreie Oszillatoren</translation>
+ <source>R&emove channel</source>
+ <translation>Kanal &Entfernen</translation>
</message>
</context>
<context>
@@ -1301,6 +1472,13 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
</context>
<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation>Anteil, der von Kanal %1 zu Kanal %2 gesendet werden soll</translation>
+ </message>
+</context>
+<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
@@ -1358,6 +1536,10 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
<source>Sync</source>
<translation>Synchron</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation>Hoch und runter</translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1383,7 +1565,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.</source>
- <translation>Benutzen Sie diesen Knopf, um den Arpeggio-Bereich in Oktaven zu setzen. Das gewähle Arpeggio wird innerhalb der angegebenen Anzahl von Oktaven abgespielt.</translation>
+ <translation>Benutzen Sie diesen Regler, um den Arpeggio-Bereich in Oktaven zu setzen. Das gewähle Arpeggio wird innerhalb der angegebenen Anzahl von Oktaven abgespielt.</translation>
</message>
<message>
<source>TIME</source>
@@ -1399,7 +1581,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.</source>
- <translation>Benutzen Sie diesen Knopf, um die Arpeggio-Zeit in Millisekunden zu setzen. Die Arpeggio-Zeit gibt an, wie lange jeder einzelne Arpeggio-Ton gespielt werden soll.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Arpeggio-Zeit in Millisekunden zu setzen. Die Arpeggio-Zeit gibt an, wie lange jeder einzelne Arpeggio-Ton gespielt werden soll.</translation>
</message>
<message>
<source>GATE</source>
@@ -1415,7 +1597,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.</source>
- <translation>Benutzen Sie diesen Knopf, um das Arpeggio-Gate zu setzen. Das Arpeggio-Gate gibt an, wie viel Prozent eines ganzen Arpeggio-Tons gespielt werden sollen. Damit können Sie coole Staccato-Arpeggios erzeugen.</translation>
+ <translation>Benutzen Sie diesen Regler, um das Arpeggio-Gate zu setzen. Das Arpeggio-Gate gibt an, wie viel Prozent eines ganzen Arpeggio-Tons gespielt werden sollen. Damit können Sie coole Staccato-Arpeggios erzeugen.</translation>
</message>
<message>
<source>Chord:</source>
@@ -1726,7 +1908,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Jap in sen</source>
- <translation></translation>
+ <translation>Jap in sen</translation>
</message>
<message>
<source>Major bebop</source>
@@ -1806,7 +1988,11 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Half-Whole Diminished</source>
- <translation type="unfinished"></translation>
+ <translation>Halbton-Ganzton-Leiter</translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation>5</translation>
</message>
</context>
<context>
@@ -1825,7 +2011,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves.</source>
- <translation>Benutzen Sie diesen Knopf, um den Akkord-Bereich in Oktaven zu setzen. Der gewähle Akkord wird innerhalb der angegebenen Anzahl von Oktaven abgespielt.</translation>
+ <translation>Benutzen Sie diesen Regler, um den Akkord-Bereich in Oktaven zu setzen. Der gewähle Akkord wird innerhalb der angegebenen Anzahl von Oktaven abgespielt.</translation>
</message>
<message>
<source>STACKING</source>
@@ -1990,7 +2176,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff freque [...]
- <translation>Diese Tabs enthalten Hüllkurven. Diese sind sehr wichtig, um einen Klang zu verändern, insbesondere bei der substraktiven Synthese. Wenn Sie zum Beispiel eine Lautstärke-Hüllkurve haben, können Sie festlegen, wann der Klang welchen Lautstärke-Pegel haben soll. Vielleicht wollen Sie ein weiches Streichinstrument erstellen. Dann muss ihr Sound sehr sanft ein- und ausgeblendet werden. Das kann man ganz einfach erreichen, indem man eine große Anschwell(attack)- und Auskl [...]
+ <translation>Diese Tabs enthalten Hüllkurven. Diese sind sehr wichtig, um einen Klang zu verändern, insbesondere bei der substraktiven Synthese. Wenn Sie zum Beispiel eine Lautstärke-Hüllkurve haben, können Sie festlegen, wann der Klang welchen Lautstärke-Pegel haben soll. Vielleicht wollen Sie ein weiches Streichinstrument erstellen. Dann muss ihr Sound sehr sanft ein- und ausgeblendet werden. Das kann man ganz einfach erreichen, indem man eine große Anschwell(attack)- und Auskl [...]
</message>
<message>
<source>FILTER</source>
@@ -2006,7 +2192,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...</source>
- <translation>Benutzen Sie diesen Knopf, um die Kennfrequenz (cutoff-frequency) für den gewählten Filter einzustellen. Die Kennfrequenz wird vom Filter zum Beschneiden des Signals verwendet. Zum Beispiel filtert ein Tiefpass-Filter alle Frequenzen oberhalb der Kennfrequenz heraus. Ein Hochpass-Filter filtert alle Frequenzen unterhalb der Kennfrequenz heraus usw...</translation>
+ <translation>Benutzen Sie diesen Regler, um die Kennfrequenz (cutoff-frequency) für den gewählten Filter einzustellen. Die Kennfrequenz wird vom Filter zum Beschneiden des Signals verwendet. Zum Beispiel filtert ein Tiefpass-Filter alle Frequenzen oberhalb der Kennfrequenz heraus. Ein Hochpass-Filter filtert alle Frequenzen unterhalb der Kennfrequenz heraus usw...</translation>
</message>
<message>
<source>RESO</source>
@@ -2018,7 +2204,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.</source>
- <translation>Benutzen Sie diesen Knopf, um Q/die Resonanz für den gewählten Filter einzustellen. Q/Resonanz teilt dem Filter mit, wie stark er die Frequenzen in der Nähe der Cutoff-Frequenz verstärken soll.</translation>
+ <translation>Benutzen Sie diesen Regler, um Q/die Resonanz für den gewählten Filter einzustellen. Q/Resonanz teilt dem Filter mit, wie stark er die Frequenzen in der Nähe der Cutoff-Frequenz verstärken soll.</translation>
</message>
<message>
<source>FREQ</source>
@@ -2061,7 +2247,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>With this knob you can set the volume of the opened channel.</source>
- <translation>Mit diesem Knopf können Sie die Lautstärke des geöffneten Kanals ändern.</translation>
+ <translation>Mit diesem Regler können Sie die Lautstärke des geöffneten Kanals ändern.</translation>
</message>
<message>
<source>Base note</source>
@@ -2118,10 +2304,6 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
<translation>GRUNDLEGENDE EINSTELLUNGEN</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation>Klicken Sie hier, wenn Sie die aktuellen Kanal-Einstellungen in einer Preset-Datei speichern wollen. Spätern können Sie dieses Preset laden, indem Sie es im Preset-Browser doppelt anklicken.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation>Instrument-Lautstärke</translation>
</message>
@@ -2194,10 +2376,6 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
<translation>PLUGIN</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation>Aktuelle Instrumenteinstellungen in einer Presetdatei speichern</translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation>Tonhöhenbereich (Halbtöne)</translation>
</message>
@@ -2205,6 +2383,14 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
<source>RANGE</source>
<translation>RANGE</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation>Aktuelle Instrumentenspur-Einstelungen in einer Presetdatei speichern</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation>Klicken Sie hier, wenn Sie die aktuellen Instrumentenspur-Einstellungen in einer Presetdatei speichern möchten. Sie können dieses Preset später durch Doppelklicken auf die Datei im Preset-Browser öffnen.</translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -2320,7 +2506,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect.</source>
- <translation>Benutzen Sie diesen Knopf, um die Geschwindigkeit des LFOs einzustellen. Je größer der Wert, desto schneller schwingt der LFO und desto schneller ist der entsprechende Effekt.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Geschwindigkeit des LFOs einzustellen. Je größer der Wert, desto schneller schwingt der LFO und desto schneller ist der entsprechende Effekt.</translation>
</message>
<message>
<source>AMT</source>
@@ -2332,7 +2518,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO.</source>
- <translation>Benutzen Sie diesen Knopf, um die Modulationsintensität des LFOs einzustellen. Je größer der Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cuttoff-Frequenz) von diesem LFO beeinflusst.</translation>
+ <translation>Benutzen Sie diesen Regler, um die Modulationsintensität des LFOs einzustellen. Je größer der Wert, desto mehr wird die gewählte Größe (z.B. Lautstärke oder Cuttoff-Frequenz) von diesem LFO beeinflusst.</translation>
</message>
<message>
<source>PHS</source>
@@ -2348,7 +2534,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
- <translation>Mit diesem Knopf können Sie die Phasen-Verschiebung des LFOs einstellen. Das heißt, Sie können den Punkt innerhalb einer Schwingung verschieben, an dem der Oszillator anfangen soll zu schwingen. Wenn Sie zum Beispiel eine Sinus-Welle haben und eine Phasen-Verschiebung von 180 Grad einstellen, wird die Welle zu erst runter gehen. Das gleiche trifft auch bei einer Rechteck-Welle zu.</translation>
+ <translation>Mit diesem Regler können Sie die Phasenverschiebung des LFOs einstellen. Das heißt, Sie können den Punkt innerhalb einer Schwingung verschieben, an dem der Oszillator anfangen soll zu schwingen. Wenn Sie zum Beispiel eine Sinuswelle haben und eine Phasenverschiebung von 180 Grad einstellen, wird die Welle zu erst runter gehen. Das gleiche trifft auch bei einer Rechteckwelle zu.</translation>
</message>
<message>
<source>Click here for a sine-wave.</source>
@@ -2356,7 +2542,7 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Click here for a triangle-wave.</source>
- <translation>Klick für eine Dreieckswelle.</translation>
+ <translation>Klick für eine Dreieckwelle.</translation>
</message>
<message>
<source>Click here for a saw-wave.</source>
@@ -2364,15 +2550,11 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte
</message>
<message>
<source>Click here for a square-wave.</source>
- <translation>Klick für eine Rechteckswelle.</translation>
- </message>
- <message>
- <source>Click here for a a moog saw-wave.</source>
- <translation>Klick für eine Moog-ähnliche Welle.</translation>
+ <translation>Klick für eine Rechteckwelle.</translation>
</message>
<message>
<source>Click here for an exponential wave.</source>
- <translation>Klick für eine Exponential-Welle.</translation>
+ <translation>Klick für eine exponentielle Welle.</translation>
</message>
<message>
<source>Click here for white-noise.</source>
@@ -2384,6 +2566,10 @@ Double click to pick a file.</source>
<translation>Klicken Sie hier für eine benutzerdefinierte From.
Doppelklicken Sie, um eine Datei auszuwählen.</translation>
</message>
+ <message>
+ <source>Click here for a moog saw-wave.</source>
+ <translation>Klick für eine Moog-Sägezahnwelle.</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -2640,9 +2826,21 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
<translation>Version %1</translation>
</message>
<message>
+ <source>Undo</source>
+ <translation>Rückgängig</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>Wiederholen</translation>
+ </message>
+ <message>
<source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
<translation>LMMS Projekt (*.mmpz *.mmp);;LMMS Projektvorlage (*.mpt)</translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation>Volumes</translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2678,7 +2876,7 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
</message>
</context>
<context>
- <name>MidiAlsaSeq::setupWidget</name>
+ <name>MidiAlsaSeq</name>
<message>
<source>DEVICE</source>
<translation>GERÄT</translation>
@@ -2765,181 +2963,963 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
</message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation>Oszillator %1 Lautstärke</translation>
+ <source>Osc 1 Volume</source>
+ <translation>Oszillator 1 Lautstärke</translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation>Oszillator %1 Balance</translation>
+ <source>Osc 1 Panning</source>
+ <translation>Oszillator 1 Balance</translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation>Oszillator %1 Grob-Verstimmung</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation>Oszillator 1 Grob-Verstimmung</translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation>Oszillator %1 Fein-Verstimmung links</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation>Oszillator 1 Fein-Verstimmung links</translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation>Oszillator %1 Fein-Verstimmung rechts</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation>Oszillator 1 Fein-Verstimmung rechts</translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation>Oszillator %1 Phasen-Verschiebung</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation>Oszillator 1 Stereo Phasenverschiebung</translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation>Oszillator %1 Stereo Phasen-Verschiebung</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation>Oszilator 1 Pulsweite</translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation>Oszillator %1 Wellenform</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation>Oszillator 1 Sync beim Steigen senden</translation>
</message>
<message>
- <source>Modulation type %1</source>
- <translation>Modulationsart %1</translation>
+ <source>Osc 1 Sync send on fall</source>
+ <translation>Oszillator 2 Sync beim Abfallen senden</translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation>Oszillator %1 Wellenform</translation>
+ <source>Osc 2 Volume</source>
+ <translation>Oszillator 2 Lautstärke</translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation>Andere Patch-Datei öffnen</translation>
+ <source>Osc 2 Panning</source>
+ <translation>Oszillator 2 Balance</translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation>Klicken Sie hier, um eine andere Patch-Datei zu laden. Wiederholungs- und Stimmungseinstellungen werden nicht zurückgesetzt.</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation>Oszillator 2 Grob-Verstimmung</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Wiederholen</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation>Oszillator 2 Fein-Verstimmung links</translation>
</message>
<message>
- <source>Loop mode</source>
- <translation>Modus beim Wiederholen</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation>Oszillator 2 Fein-Verstimmung rechts</translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation>Hier können Sie den Wiederholen-Modus (de-)aktivieren. Wenn aktiviert, verwendet PatMan die in der Datei verfügbaren Informationen zum Wiederholen.</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation>Oszillator 2 Stereo Phasenverschiebung</translation>
</message>
<message>
- <source>Tune</source>
- <translation>Stimmung</translation>
+ <source>Osc 2 Waveform</source>
+ <translation>Oszillator 2 Wellenform</translation>
</message>
<message>
- <source>Tune mode</source>
- <translation>Stimmungsmodus</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation>Oszillator 2 hart synchronisieren</translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation>Hier können Sie den Stimmungs-Modus (de-)aktivieren. Wenn aktiviert, wird der Klang automatisch an die Frequenz der Note angepasst.</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation>Oszillator 2 rückwärts synchronisieren</translation>
</message>
<message>
- <source>No file selected</source>
- <translation>Keine Datei ausgewählt</translation>
+ <source>Osc 3 Volume</source>
+ <translation>Oszillator 3 Lautstärke</translation>
</message>
<message>
- <source>Open patch file</source>
- <translation>Patch-Datei öffnen</translation>
+ <source>Osc 3 Panning</source>
+ <translation>Oszillator 3 Balance</translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation>Patch-Dateien (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation>Oszillator 3 Grob-Verstimmung</translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
- <translation>Peak Controller</translation>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation>Oszillator 3 Stereo Phasenverschiebung</translation>
</message>
<message>
- <source>Peak Controller Bug</source>
- <translation>Peak Controller Fehler</translation>
+ <source>Osc 3 Sub-oscillator mix</source>
+ <translation>Oszillator 3 Unter-Oszillator Mischung</translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
- <translation>Aufgrud eines Fehlers in einer älteren Version von LMMS, sind die Peak Controller möglicherweise nicht richtig verbunden. Bitte stellen Sie sicher, dass die Peak Controller richtig verbunden sind und speichern Sie die Datei erneut. Entschuldigung für jegliche verursachte Unannehmlichkeiten.</translation>
+ <source>Osc 3 Waveform 1</source>
+ <translation>Oszillator 3 Wellenform 1</translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
- <translation>PEAK</translation>
+ <source>Osc 3 Waveform 2</source>
+ <translation>Oszillator 3 Wellenform 2</translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation>LFO-Controller</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation>Oszillator 2 hart synchronisieren</translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
- <translation>BASE</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation>Oszillator 2 rückwärts synchronisieren</translation>
</message>
<message>
- <source>Base amount:</source>
- <translation>Grundstärke:</translation>
+ <source>LFO 1 Waveform</source>
+ <translation>LFO 1 Wellenform</translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Modulationsintensität:</translation>
+ <source>LFO 1 Attack</source>
+ <translation>LFO 1 Anschwellzeit</translation>
</message>
<message>
- <source>Attack:</source>
- <translation>Anschwellzeit (attack):</translation>
+ <source>LFO 1 Rate</source>
+ <translation>LFO 1 Rate</translation>
</message>
<message>
- <source>Release:</source>
- <translation>Ausklingzeit (release):</translation>
+ <source>LFO 1 Phase</source>
+ <translation>LFO 1 Phase</translation>
</message>
<message>
- <source>AMNT</source>
- <translation>AMNT</translation>
+ <source>LFO 2 Waveform</source>
+ <translation>LFO 2 Wellenform</translation>
</message>
<message>
- <source>MULT</source>
- <translation>MULT</translation>
+ <source>LFO 2 Attack</source>
+ <translation>LFO 2 Anschwellzeit</translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
- <translation>Stärkenmultiplikator:</translation>
+ <source>LFO 2 Rate</source>
+ <translation>LFO 2 Rate</translation>
</message>
<message>
- <source>ATCK</source>
- <translation>ATCK</translation>
+ <source>LFO 2 Phase</source>
+ <translation>Hüllkurve 2 Phase</translation>
</message>
<message>
- <source>DCAY</source>
- <translation>DCAY</translation>
+ <source>Env 1 Pre-delay</source>
+ <translation>Hüllkurve 1 Verzögerung</translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
- <translation>Grundwert</translation>
+ <source>Env 1 Attack</source>
+ <translation>Hüllkurve 1 Anschwellzeit</translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation>Modulationsintensität</translation>
+ <source>Env 1 Hold</source>
+ <translation>Hüllkurve 1 Haltezeit</translation>
</message>
<message>
- <source>Mute output</source>
- <translation>Ausgang stummschalten</translation>
+ <source>Env 1 Decay</source>
+ <translation>Hüllkurve 1 Abfallzeit</translation>
</message>
<message>
- <source>Attack</source>
- <translation>Anschwellzeit (attack)</translation>
+ <source>Env 1 Sustain</source>
+ <translation>Hüllkurve 1 Dauerpegel</translation>
+ </message>
+ <message>
+ <source>Env 1 Release</source>
+ <translation>Hüllkurve 1 Ausklingzeit</translation>
+ </message>
+ <message>
+ <source>Env 1 Slope</source>
+ <translation>Hüllkurve 1 Neigung</translation>
+ </message>
+ <message>
+ <source>Env 2 Pre-delay</source>
+ <translation>Hüllkurve 2 Verzögerung</translation>
+ </message>
+ <message>
+ <source>Env 2 Attack</source>
+ <translation>Hüllkurve 2 Anschwellzeit</translation>
+ </message>
+ <message>
+ <source>Env 2 Hold</source>
+ <translation>Hüllkurve 2 Haltezeit</translation>
+ </message>
+ <message>
+ <source>Env 2 Decay</source>
+ <translation>Hüllkurve 2 Abfallzeit</translation>
+ </message>
+ <message>
+ <source>Env 2 Sustain</source>
+ <translation>Hüllkurve 2 Dauerpegel</translation>
+ </message>
+ <message>
+ <source>Env 2 Release</source>
+ <translation>Hüllkurve 2 Ausklingzeit</translation>
+ </message>
+ <message>
+ <source>Env 2 Slope</source>
+ <translation>Hüllkurve 2 Neigung</translation>
+ </message>
+ <message>
+ <source>Osc2-3 modulation</source>
+ <translation>Oszillator2-3 Modulation</translation>
+ </message>
+ <message>
+ <source>Selected view</source>
+ <translation>Ausgewählte Ansicht</translation>
+ </message>
+ <message>
+ <source>Vol1-Env1</source>
+ <translation>Vol1-Env1</translation>
+ </message>
+ <message>
+ <source>Vol1-Env2</source>
+ <translation>Vol1-Env2</translation>
+ </message>
+ <message>
+ <source>Vol1-LFO1</source>
+ <translation>Vol1-LFO1</translation>
+ </message>
+ <message>
+ <source>Vol1-LFO2</source>
+ <translation>Vol1-LFO2</translation>
+ </message>
+ <message>
+ <source>Vol2-Env1</source>
+ <translation>Vol2-Env1</translation>
+ </message>
+ <message>
+ <source>Vol2-Env2</source>
+ <translation>Vol2-Env2</translation>
+ </message>
+ <message>
+ <source>Vol2-LFO1</source>
+ <translation>Vol2-LFO1</translation>
+ </message>
+ <message>
+ <source>Vol2-LFO2</source>
+ <translation>Vol2-LFO2</translation>
+ </message>
+ <message>
+ <source>Vol3-Env1</source>
+ <translation>Vol3-Env1</translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation>Vol3-Env2</translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation>Vol3-LFO1</translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation>Vol3-LFO2</translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation>Phs1-Env1</translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation>Phs1-Env2</translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation>Phs1-LFO1</translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation>Phs1-LFO2</translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation>Phs2-Env1</translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation>Phs2-Env2</translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation>Phs2-LFO1</translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation>Phs2-LFO2</translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation>Phs3-Env1</translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation>Phs3-LFO1</translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation>Phs3-LFO2</translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation>Pit1-Env1</translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation>Pit1-Env2</translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation>Pit1-LFO1</translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation>Pit1-LFO2</translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation>Pit2-Env1</translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation>Pit2-Env2</translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation>Pit2-LFO1</translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation>Pit2-LFO2</translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation>Pit3-Env1</translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation>Pit3-Env2</translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation>Pit3-LFO1</translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation>Pit3-LFO2</translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation>PW1-Env1</translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation>PW1-Env2</translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation>PW1-LFO1</translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation>PW1-LFO2</translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation>Sub3-Env1</translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation>Sub3-Env2</translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation>Sub3-LFO1</translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation>Sub3-LFO2</translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation>Sinuswelle</translation>
+ </message>
+ <message>
+ <source>Bandlimited Triangle wave</source>
+ <translation>Bandlimittierte Dreieckwelle</translation>
+ </message>
+ <message>
+ <source>Bandlimited Saw wave</source>
+ <translation>Bandbegrenzte Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Bandlimited Ramp wave</source>
+ <translation>Bandbegrenzte Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Bandlimited Square wave</source>
+ <translation>Bandbegrenzte Rechteckwelle</translation>
+ </message>
+ <message>
+ <source>Bandlimited Moog saw wave</source>
+ <translation>Bandbegrenzte Moog-Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Soft square wave</source>
+ <translation>Weiche Rechteckwelle</translation>
+ </message>
+ <message>
+ <source>Absolute sine wave</source>
+ <translation>Absolute Sinuswelle</translation>
+ </message>
+ <message>
+ <source>Exponential wave</source>
+ <translation>Exponentielle Welle</translation>
+ </message>
+ <message>
+ <source>White noise</source>
+ <translation>Weißes Rauschen</translation>
+ </message>
+ <message>
+ <source>Digital Triangle wave</source>
+ <translation>Digitale Dreieckwelle</translation>
+ </message>
+ <message>
+ <source>Digital Saw wave</source>
+ <translation>Digitale Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Digital Ramp wave</source>
+ <translation>Digitale Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Digital Square wave</source>
+ <translation>Digitale Rechteckwelle</translation>
+ </message>
+ <message>
+ <source>Digital Moog saw wave</source>
+ <translation>Digitale Moog-Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Triangle wave</source>
+ <translation>Dreieckwelle</translation>
+ </message>
+ <message>
+ <source>Saw wave</source>
+ <translation>Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Ramp wave</source>
+ <translation>Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Square wave</source>
+ <translation>Rechteckwelle</translation>
+ </message>
+ <message>
+ <source>Moog saw wave</source>
+ <translation>Moog-Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Abs. sine wave</source>
+ <translation>Abs. Sinuswelle</translation>
+ </message>
+ <message>
+ <source>Random</source>
+ <translation>Zufällig</translation>
+ </message>
+ <message>
+ <source>Random smooth</source>
+ <translation>Zufällig gleitend</translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation>Operator-Ansicht</translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation>Matrix-Ansicht</translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation>Oszillator 2 mit Oszillator 3 Mischen</translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation>Amplitude von Oszillator 3 mit Oszillator 2 modulieren</translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation>Frequenz von Oszillator 3 mit Oszillator 2 modulieren</translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation>Phase von Oszillator 3 mit Oszillator 2 modulieren</translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation>Die Operator-Ansicht enthält alle Operatoren. Diese beinhalten beide, hörbare Operatoren (Oszillatoren) und nicht hörbare Operatoren oder Modulatoren: Niedrig-Frequenz-Oszillatoren und Hüllkurven.
+
+Regler und andere Dinge in der Operator-Ansicht haben ihren eigenen »Was ist das?« Texte, sodass Sie auf diese Weise spezifischere Hilfe für diese bekommen können. </translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation>Die Matrix-Ansicht enthält die Modulationsmatrix. Hier können Sie die Modulationsverhältnisse zwischen den verschiedenen Operatoren definieren: Jeder hörbare Oberator (Oszillatorern 1-3) hat 3-4 Einstellungen, die durch jeden der Modulatoren moduliert werden können. Mehr Modulation braucht mehr Rechenleistung.
+
+Die Ansicht ist in Modulationsziele, gruppiert nach dem Zieloszillator, eingeteilt. Verfügbare Ziele sind Lautstärke, Tonhöhe, Phase, Pulsweite und Unter-Oszillator Rate. Hinweis: einige Ziele sind speziell für einen Oszillator.
+
+Jedes Modulationsziel hat 4 Regler, einen für jeden Modulator. Standardmäßig sind alle Regler bei 0, was keine Modulation bedeutet. Wenn der Regler auf 1 gestellt wird, wird das Modulationsziel vom Modulator so viel wie möglich beeinflusst. Wenn er auf -1 gestellt wird, passiert das gleiche, aber die Modulation ist invertiert. </translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation>Der CRS Regler ändert die Stimmung des Oszillators 1 in Halbtonschritten. </translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation>Der CRS Regler ändert die Stimmung des Oszillators 2 in Halbtonschritten. </translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation>Der CRS Regler ändert die Stimmung des Oszillators 3 in Halbtonschritten. </translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation>FTL und FTR ändern die Feinabstimmung des Oszillators jeweils für den linken und rechten Kanal. Diese können Stereoverstimmug zum Oszillator hinzufügen, was das Stereobild weitet und eine Illusion von Raum erzeugt. </translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation>Der SPO Regler ändert die Phasendifferenz zwischen dem linken und rechten Kanal. Höhere Differenz erzeugt ein breiteres Stereobild. </translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation>Der PW Regler kontrolliert die Pulsweite, auch bekannt als Tastgrad, von Oszillator 1. Oszillator 1 ist ein digitaler Pulswellen Oszillator, es erzeugt keine bandbegrenzte Ausgabe, was bedeutet, dass Sie es als einen hörbaren Oszillator einsetzen können, aber es wird Aliasing verursachen. Sie können es auch als eine nicht hörbare Quelle für ein sync Signal benutzen, dass benutzt werden kann, um die Oszillatoren 2 und 3 zu synchronisieren. </translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation>Sync beim Ansteigen senden: Wenn aktiviert, wird das Sync-Signal jedes Mal gesendet, wenn sich der Zustand von Oszillator 1 von niedrig nach hoch ändert, z.B. wenn sich die Amplitude von -1 nach 1 ändert. Die Tonhöhe, Phase und Pulsweite von Oszillator 1 können das Timing von Syncs beeinflussen, aber die Lautstärke hat keinen Effekt darauf. Sync-Signale werden unabhängig vom linken und rechten Kanal gesendet. </translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation>Sync beim Absteigen senden: Wenn aktiviert, wird das Sync-Signal jedes Mal gesendet, wenn sich der Zustand von Oszillator 1 von hoch nach niedrig ändert, z.B. wenn sich die Amplitude von 1 nach -1 ändert. Die Tonhöhe, Phase und Pulsweite von Oszillator 1 können das Timing von Syncs beeinflussen, aber die Lautstärke hat keinen Effekt darauf. Sync-Signale werden unabhängig vom linken und rechten Kanal gesendet. </translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation>Hard sync: Jedes Mal, wenn der Oszillator ein sync-Signal von Oszillator 1 empfäng, wird die Phase auf 0 zurückgesetzt, egal was die Phasendifferenz ist. </translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation>Reverse sync: Jedes Mal, wenn der Oszillator ein sync-Signal von Oszillator 1 empfäng, wird die Amplitude des Oszillators invertiert. </translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation>Wellenform für Oszillator 2 auswählen. </translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation>Wellenform für den ersten Unter-Oszillator von Oszillator 3 auswählen. Oszillator 3 kann gleitend zwischen zwei verschiedenen Wellenformen interpolieren. </translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation>Wellenform für den zweiten Unter-Oszillator von Oszillator 3 auswählen. Oszillator 3 kann gleitend zwischen zwei verschiedenen Wellenformen interpolieren. </translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation>Der SUB Regler ändert das Mischverhältnis der beiden Unter-Oszillatoren von Oszillator 3. Jeder Unter-Oszillator kann auf eine andere Wellenform eingestellt werden und Oszillator 3 kann zwischen diesen gleitend interpolieren. Alle eingehenden Modulationen zu Oszillator 3 werden auf beide Unter-Oszillator/Wellenformen auf gleiche Weise angewandt. </translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation>Zusätzlich zu fest zugeordneten Modulatoren, ermöglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren.
+
+Mix-Modus bedeutet keine Modulation: Die Ausgaben der Oszillatoren werden einfach zusammengemischt. </translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation>Zusätzlich zu fest zugeordneten Modulatoren, ermöglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren.
+
+AM bedeutet Amplituden-Modulation: Die Amplitude (Lautstärke) von Oszillator 3 wird durch Oszillator 2 moduliert. </translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation>Zusätzlich zu fest zugeordneten Modulatoren, ermöglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren.
+
+FM bedeutet Frequenz-Modulation: Die Frequenz (Tonhöhe) von Oszillator 3 wird durch Oszillator 2 Moduliert. Die Frequenz-Modulation ist als Phasen-Modulation implementiert, was eine stabielere Gesamttonhöhe erzeugt, als »reine« Frequenz-Modulation. </translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation>Zusätzlich zu fest zugeordneten Modulatoren, ermöglicht Monstro es Oszillator 3 mit der Ausgabe von Oszillator 2 zu modulieren.
+
+PM bedeutet Phasen-Modulation: Die Phase von Oszillator 3 wird durch Oszillator 2 moduliert. Es unterscheidet sich von der Frequenz-Modulation dadurch, dass die Phasenänderungen nicht zunehmend sind. </translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation>Die Wellenform für LFO 1 auswählen.
+»Zufällig« und »Zufällig gleitend« sind spzielle Wellenformen: Sie erzeugen zufällige Ausgabe, wobei die Rate des LFO kontrolliert, wie oft sich der Zustand des LFO ändert. Die gleitende Version intrpoliert zwischen diesen Zuständen mit Cosinus-Interpolation. Diese zufälligen Modi können benutzt werden um Ihren Presets »Leben« zu geben - Etwas von der analogen Unberechenbarkeit hinzuzufügen… </translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation>Die Wellenform für LFO 2 auswählen.
+»Zufällig« und »Zufällig gleitend« sind spzielle Wellenformen: Sie erzeugen zufällige Ausgabe, wobei die Rate des LFO kontrolliert, wie oft sich der Zustand des LFO ändert. Die gleitende Version intrpoliert zwischen diesen Zuständen mit Cosinus-Interpolation. Diese zufälligen Modi können benutzt werden um Ihren Presets »Leben« zu geben - Etwas von der analogen Unberechenbarkeit hinzuzufügen… </translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation>Anschwellzeit verursacht, dass der LFO allmählich vom Anfang der Note angeht. </translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation>Rate setzt die Geschwindigkeit des LFO, in Millisekunden pro Durchlauf gemessen. Kann zum Tempo synchronisiert werden. </translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation>PHS kontrolliert die Phasenverschiebung des LFO. </translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation>PRE, oder Vor-Verzögerung, verzögert den Beginn der Hüllkurve vom Anfang der Note. 0 bedeutet keine Verzögerung. </translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation>ATT, oder Anschwellzeit, kontrolliert wie schnell die Hüllkurve am Anfang steigt, in Millisekunden gemessen. Ein Wert von 0 bedeutet sofort. </translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation>HOLD kontrolliert, wie lange die Hüllkurve nach der Anschwellphase an der Spitze bleibt. </translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation>DEC, oder Abschwellzeit, kontrolliert, wie schnell die Hüllkurve von ihrer Spitze auf Null abfällt, in Millisekunden gemessen. Die tatsächliche Abschwellzeit ist möglicherweise kürzer, wenn Dauerpegel benutzt wird. </translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation>SUS, oder Dauerpegel, kontrolliert den Dauerpgel der Hüllkurve. Die Abfall-Phase geht nicht unter diesen Pegel, solange die Note gehalten wird. </translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation>REL, oder Ausklingzeit, kontrolliert, wie lange die Ausklingzeit für die Note von ihrer Spitze auf Null ist, gemessen in Millisekunden. Die tatsächliche Ausklingzeit ist möglicherweise kürzer, abhängig davon, in welcher Phase die Note losgelassen wird. </translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation>Der Neigung-Regler kontrolliert die Kurve oder Form der Hüllkurve. Ein Wert von 0 erzeugt einen direkten Anstieg und Abfall. Negative Werte erzeugen Kurven, die langsam starten, schnell die Spitze erreichen und wieder langsam abfallen. Positive Werte erzeugen Kurven, die schnell starten und enden und länger in der Nähe der Spitze bleiben. </translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation>Kanal 1 Grob-Verstimmung</translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation>Kanal 1 Lautstärke</translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation>Kanal 1 Hüllkurvenlänge</translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation>Kanal 1 Tastgrad</translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation>Kanal 1 Streichmenge</translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation>Kanal 1 Streichrate</translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation>Kanal 2 Grob-Verstimmung</translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation>Kanal 2 Lautstärke</translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation>Kanal 2 Hüllkurvenlänge</translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation>Kanal 2 Tastgrad</translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation>Kanal 2 Streichmenge</translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation>Kanal 2 Streichrate</translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation>Kanal 3 Grob-Verstimmung</translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation>Kanal 3 Lautstärke</translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation>Kanal 4 Lautstärke</translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation>Kanal 4 Hüllkurvenlänge</translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation>Kanal 4 Rauschfrequenz</translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation>Kanal 4 Rauschfrequenz-Streichen</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>Master-Lautstärke</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation>Vibrato</translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation>Oszillator %1 Lautstärke</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation>Oszillator %1 Balance</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation>Oszillator %1 Grob-Verstimmung</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation>Oszillator %1 Fein-Verstimmung links</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation>Oszillator %1 Fein-Verstimmung rechts</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation>Oszillator %1 Phasenverschiebung</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation>Oszillator %1 Stereo Phasenverschiebung</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation>Oszillator %1 Wellenform</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation>Modulationsart %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation>Oszillator %1 Wellenform</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation>Oszillator %1 Harmonie</translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation>Andere Patch-Datei öffnen</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation>Klicken Sie hier, um eine andere Patch-Datei zu laden. Wiederholungs- und Stimmungseinstellungen werden nicht zurückgesetzt.</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation>Wiederholen</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation>Modus beim Wiederholen</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation>Hier können Sie den Wiederholen-Modus (de-)aktivieren. Wenn aktiviert, verwendet PatMan die in der Datei verfügbaren Informationen zum Wiederholen.</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation>Stimmung</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation>Stimmungsmodus</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation>Hier können Sie den Stimmungs-Modus (de-)aktivieren. Wenn aktiviert, wird der Klang automatisch an die Frequenz der Note angepasst.</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation>Keine Datei ausgewählt</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation>Patch-Datei öffnen</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation>Patch-Dateien (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>Doppelklick, um dieses Pattern im Piano-Roll zu öffnen
+Lautstärke eines Schritts kann mit dem Mausrad geändert werden</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>Im Piano-Roll öffnen</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>Alle Noten löschen</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>Name zurücksetzen</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Name ändern</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>Schritte hinzufügen</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>Schritte entfernen</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation>Peak Controller</translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation>Peak Controller Fehler</translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation>Aufgrud eines Fehlers in einer älteren Version von LMMS, sind die Peak Controller möglicherweise nicht richtig verbunden. Bitte stellen Sie sicher, dass die Peak Controller richtig verbunden sind und speichern Sie die Datei erneut. Entschuldigung für jegliche verursachte Unannehmlichkeiten.</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation>PEAK</translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation>LFO-Controller</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation>BASE</translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation>Grundstärke:</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation>Modulationsintensität:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation>Anschwellzeit (attack):</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation>Ausklingzeit (release):</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation>AMNT</translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation>MULT</translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation>Stärkenmultiplikator:</translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation>ATCK</translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation>DCAY</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation>Grundwert</translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation>Modulationsintensität</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation>Ausgang stummschalten</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation>Anschwellzeit (attack)</translation>
</message>
<message>
<source>Release</source>
@@ -3030,11 +4010,11 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
</message>
<message>
<source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Klicken Sie hier, um die markierten Noten in die Zwischenablage auszuschneiden. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Button klicken.</translation>
+ <translation>Klicken Sie hier, um die markierten Noten in die Zwischenablage auszuschneiden. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Knopf klicken.</translation>
</message>
<message>
<source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Klicken Sie hier, um die markierten Noten in die Zwischenablage zu kopieren. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Button klicken.</translation>
+ <translation>Klicken Sie hier, um die markierten Noten in die Zwischenablage zu kopieren. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Knopf klicken.</translation>
</message>
<message>
<source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
@@ -3096,6 +4076,46 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
<source>No chord</source>
<translation>Kein Akkord</translation>
</message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation>Lautstärke: %1%</translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation>Balance: %1% links</translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation>Balance: %1% rechts</translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation>Balance: mittig</translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation>Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein:</translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation>Dies kontrolliert die Vergrößerung einer Axe. Es kann hilfreich für bestimmte Aufgaben sein, eine Vergrößerung auszuwählen. Für normales Bearbeiten, sollte die Vergrößerung an Ihre kleinsten Noten angepasst sein. </translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation>Das »Q« steht für Quantisierung und kontrolliert die Rastergröße an denen Noten und Kontrollpunkte einrasten. Mit kleineren Quantisierungswerten können Sie kleinere Noten im Piano Roll und exaktere Kontrollpunkte im Automation-Editor eintragen.</translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation>Dies lässt Sie die Länge von neuen Noten auswählen. »Letzte Note« bedeutet, dass LMMS die Länge der Note benutz, die Sie als letzes bearbeitet haben.</translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation>Diese Funktion ist direkt mit dem Kontextmenü auf dem virtuellen Keyboard, links im Piano Roll, verbunden. Nachdem Sie die Tonleiter ausgewählt haben, die Sie im Aufklapp-Menü haben möchten, können Sie auf eine gewünschte Taste auf dem virtuellen Keyboard einen Rechtsklick machen und »Aktuelle Tonleiter markieren« auswählen. LMMS markiert dann alle Noten, die zu dieser Tonleiter und Taste gehören, die Sie ausgewählt haben!</translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation>Lässt Sie einen Akkord auswählen, den LMMS dann eintragen oder markieren kann. Sie können die am häufigsten benutzten Akkorde in diesem Aufklapp-Menü finden. Nachdem Sie einen Akkord ausgewählt haben, klicken Sie irgendwo hin, um den Akkord dort zu platzieren oder machen Sie einen Rechtsklick auf dem virtuellen Keyboard, um das Kontextmenü zu öffnen und den Akkord zu makieren. Um Noten wieder einzeln einzutragen, müssen Sie »Kein Akkord« in diesem Aufklapp-Menü auswä [...]
+ </message>
</context>
<context>
<name>PianoView</name>
@@ -3113,8 +4133,8 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
<message>
<source>The plugin "%1" wasn't found or could not be loaded!
Reason: "%2"</source>
- <translation>Das Plugin "%1" konnte nicht gefunden oder geladen werden!
-Grund: "%2"</translation>
+ <translation>Das Plugin »%1« konnte nicht gefunden oder geladen werden!
+Grund: »%2«</translation>
</message>
<message>
<source>Error while loading plugin</source>
@@ -3122,7 +4142,26 @@ Grund: "%2"</translation>
</message>
<message>
<source>Failed to load plugin "%1"!</source>
- <translation>Das Plugin "%1" konnte nicht geladen werden!</translation>
+ <translation>Das Plugin »%1« konnte nicht geladen werden!</translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation>LMMS Plugin %1 hat keinen Plugin-Deskriptor namens %2!</translation>
+ </message>
+</context>
+<context>
+ <name>PluginBrowser</name>
+ <message>
+ <source>Instrument plugins</source>
+ <translation>Instrument-Plugins</translation>
+ </message>
+ <message>
+ <source>Instrument browser</source>
+ <translation>Instrument-Browser</translation>
+ </message>
+ <message>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <translation>Ziehen Sie ein Instrument entweder in den Song-Editor, den Beat+Bassline-Editor oder in eine existierende Instrumentspur.</translation>
</message>
</context>
<context>
@@ -3568,10 +4607,6 @@ Grund: "%2"</translation>
<translation>Benutzerdefiniert...</translation>
</message>
<message>
- <source>&Help</source>
- <translation>&Hilfe</translation>
- </message>
- <message>
<source>Custom </source>
<translation> Benutzerdefiniert</translation>
</message>
@@ -3702,7 +4737,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
- <translation>Mit diesem Knopf können Sie die Lautstärke von Oszillator %1 setzen. Wenn Sie einen Wert von 0 setzen, wird der Oszillator ausgeschaltet. Ansonsten können Sie ihn so laut hören, wie Sie es hier einstellen.</translation>
+ <translation>Mit diesem Regler können Sie die Lautstärke von Oszillator %1 setzen. Wenn Sie einen Wert von 0 setzen, wird der Oszillator ausgeschaltet. Ansonsten können Sie ihn so laut hören, wie Sie es hier einstellen.</translation>
</message>
<message>
<source>Osc %1 panning:</source>
@@ -3710,7 +4745,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
- <translation>Mit diesem Knopf können Sie die Balance von Oszillator %1 setzen. Ein Wert von -100 heißt 100% links und ein Wert von 100 verschiebt den Oszillator-Ausgang nach rechts.</translation>
+ <translation>Mit diesem Regler können Sie die Balance von Oszillator %1 setzen. Ein Wert von -100 heißt 100% links und ein Wert von 100 verschiebt den Oszillator-Ausgang nach rechts.</translation>
</message>
<message>
<source>Osc %1 coarse detuning:</source>
@@ -3722,7 +4757,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
- <translation>Mit diesem Knopf können Sie die grobe Verstimmung von Oszillator %1 setzen. Sie können den Oszillator 12 Halbtöne (1 Oktave) nach oben und unten verstimmen. Das ist nützlich, wenn Sie einen Sound mit einem Akkord erstellen möchten.</translation>
+ <translation>Mit diesem Regler können Sie die grobe Verstimmung von Oszillator %1 setzen. Sie können den Oszillator 12 Halbtöne (1 Oktave) nach oben und unten verstimmen. Das ist nützlich, wenn Sie einen Sound mit einem Akkord erstellen möchten.</translation>
</message>
<message>
<source>Osc %1 fine detuning left:</source>
@@ -3734,7 +4769,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
- <translation>Mit diesem Knopf können Sie die Fein-Verstimmung von Oszillator %1 für den linken Kanal einstellen. Die Fein-Verstimmung liegt zwischen -100 Cent und +100 Cent. Das ist nützlich, um "fette" Sounds zu erzeugen.</translation>
+ <translation>Mit diesem Regler können Sie die Fein-Verstimmung von Oszillator %1 für den linken Kanal einstellen. Die Fein-Verstimmung liegt zwischen -100 Cent und +100 Cent. Das ist nützlich, um »fette« Sounds zu erzeugen.</translation>
</message>
<message>
<source>Osc %1 fine detuning right:</source>
@@ -3742,11 +4777,11 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
- <translation>Mit diesem Knopf können Sie die Fein-Verstimmung von Oszillator %1 für den rechten Kanal einstellen. Die Fein-Verstimmung liegt zwischen -100 Cent und +100 Cent. Das ist nützlich, um "fette" Sounds zu erzeugen.</translation>
+ <translation>Mit diesem Regler können Sie die Fein-Verstimmung von Oszillator %1 für den rechten Kanal einstellen. Die Fein-Verstimmung liegt zwischen -100 Cent und +100 Cent. Das ist nützlich, um »fette« Sounds zu erzeugen.</translation>
</message>
<message>
<source>Osc %1 phase-offset:</source>
- <translation>Oszillator %1 Phasen-Verschiebung:</translation>
+ <translation>Oszillator %1 Phasenverschiebung:</translation>
</message>
<message>
<source>degrees</source>
@@ -3754,15 +4789,15 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
- <translation>Mit diesem Knopf können Sie die Phasen-Verschiebung von Oszillator %1 setzen. Das heißt, Sie können den Punkt innerhalb einer Schwingung verschieben, an dem der Oszillator anfangen soll zu schwingen. Wenn Sie zum Beispiel eine Sinus-Welle haben und eine Phasen-Verschiebung von 180 Grad einstellen, wird die Welle zu erst runter gehen. Das gleiche trifft auch bei einer Rechteck-Welle zu.</translation>
+ <translation>Mit diesem Regler können Sie die Phasenverschiebung von Oszillator %1 setzen. Das heißt, Sie können den Punkt innerhalb einer Schwingung verschieben, an dem der Oszillator anfangen soll zu schwingen. Wenn Sie zum Beispiel eine Sinuswelle haben und eine Phasenverschiebung von 180 Grad einstellen, wird die Welle zu erst runter gehen. Das gleiche trifft auch bei einer Rechteckwelle zu.</translation>
</message>
<message>
<source>Osc %1 stereo phase-detuning:</source>
- <translation>Oszillator %1 Stereo Phasen-Verschiebung:</translation>
+ <translation>Oszillator %1 Stereo Phasenverschiebung:</translation>
</message>
<message>
<source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
- <translation>Mit diesem Knopf können Sie die Stereo Phasen-Verschiebung von Oszillator %1 setzen. Die Stereo Phasen-Verschiebung gibt die Differenz zwischen den Phasen-Verschiebungen zwischen dem linken und rechten Kanal an. Dies eignet sich gut, um großräumig-klingende Stereo-Klänge zu erzeugen.</translation>
+ <translation>Mit diesem Regler können Sie die Stereo Phasenverschiebung von Oszillator %1 setzen. Die Stereo Phasenverschiebung gibt die Differenz zwischen den Phasenverschiebungen zwischen dem linken und rechten Kanal an. Dies eignet sich gut, um großräumig-klingende Stereo-Klänge zu erzeugen.</translation>
</message>
<message>
<source>Use a sine-wave for current oscillator.</source>
@@ -3770,7 +4805,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>Use a triangle-wave for current oscillator.</source>
- <translation>Dreieckswelle für aktuellen Oszillator nutzen.</translation>
+ <translation>Dreieckwelle für aktuellen Oszillator nutzen.</translation>
</message>
<message>
<source>Use a saw-wave for current oscillator.</source>
@@ -3778,7 +4813,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>Use a square-wave for current oscillator.</source>
- <translation>Rechteckswelle für aktuellen Oszillator nutzen.</translation>
+ <translation>Rechteckwelle für aktuellen Oszillator nutzen.</translation>
</message>
<message>
<source>Use a moog-like saw-wave for current oscillator.</source>
@@ -3786,7 +4821,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>Use an exponential wave for current oscillator.</source>
- <translation>Exponentialwelle für aktuellen Oszillator nutzen.</translation>
+ <translation>Exponentielle Welle für aktuellen Oszillator nutzen.</translation>
</message>
<message>
<source>Use white-noise for current oscillator.</source>
@@ -3798,17 +4833,6 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
</context>
<context>
- <name>Ui</name>
- <message>
- <source>Contributors ordered by number of commits:</source>
- <translation>Mitwirkende sortiert nach der Anzahl an Einreichungen:</translation>
- </message>
- <message>
- <source>Involved</source>
- <translation>Beteiligt</translation>
- </message>
-</context>
-<context>
<name>VersionedSaveDialog</name>
<message>
<source>Increment version number</source>
@@ -3827,7 +4851,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
- <translation>Klicken Sie hier, um ein anderes VST-Plugin zu öffnen. Nachdem Sie auf diesen Button geklickt haben, erscheint ein Datei-öffnen-Dialog und Sie können Ihre Datei wählen.</translation>
+ <translation>Klicken Sie hier, um ein anderes VST-Plugin zu öffnen. Nachdem Sie auf diesen Knopf geklickt haben, erscheint ein Datei-öffnen-Dialog und Sie können Ihre Datei wählen.</translation>
</message>
<message>
<source>Show/hide GUI</source>
@@ -3968,60 +4992,310 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
<context>
<name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation>Lade Plugin</translation>
+ <source>Loading plugin</source>
+ <translation>Lade Plugin</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation>Preset öffnen</translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation>VST-Plugin-Preset (*.fxp *.fxb)</translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation>: Standard</translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation>"</translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation>'</translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation>Preset speichern</translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation>.fxp</translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation>.FXP</translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation>.FXB</translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation>.fxb</translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation>Bitte warten, während das VST-Plugin geladen wird…</translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation>Laden des VST-Plugins fehlgeschlagen</translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation>Das VST-Plugin %1 konnte aus irgend einem Grund nicht geladen werden.</translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation>Lautstärke A1</translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation>Lautstärke A2</translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation>Lautstärke B1</translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation>Lautstärke B2</translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation>Balance A1</translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation>Balance A2</translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation>Balance B1</translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation>Balance B2</translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation>Frequenzmultiplikator-A1</translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation>Frequenzmultiplikator-A2</translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation>Frequenzmultiplikator-B1</translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation>Frequenzmultiplikator-B2</translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation>Links-Verstimmung A1</translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation>Links-Verstimmung A2</translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation>Links-Verstimmung B1</translation>
+ </message>
+ <message>
+ <source>Left detune B2</source>
+ <translation>Links-Verstimmung B2</translation>
+ </message>
+ <message>
+ <source>Right detune A1</source>
+ <translation>Rechts-Verstimmung A1</translation>
+ </message>
+ <message>
+ <source>Right detune A2</source>
+ <translation>Rechts-Verstimmung A2</translation>
+ </message>
+ <message>
+ <source>Right detune B1</source>
+ <translation>Rechts-Verstimmung B1</translation>
+ </message>
+ <message>
+ <source>Right detune B2</source>
+ <translation>Rechts-Verstimmung B2</translation>
+ </message>
+ <message>
+ <source>A-B Mix</source>
+ <translation>A-B Mischung</translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope amount</source>
+ <translation>A-B Mischung Hüllkurvenintensität</translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope attack</source>
+ <translation>A-B Mischung Hüllkurvenanschwellzeit</translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope hold</source>
+ <translation>A-B Mischung Hüllkurvenhaltezeit</translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope decay</source>
+ <translation>A-B Mischung Hüllkurvenabfallzeit</translation>
+ </message>
+ <message>
+ <source>A1-B2 Crosstalk</source>
+ <translation>A1-B2 Überlagerung</translation>
+ </message>
+ <message>
+ <source>A2-A1 modulation</source>
+ <translation>A2-A1 Modulation</translation>
+ </message>
+ <message>
+ <source>B2-B1 modulation</source>
+ <translation>B2-B1 Modulation</translation>
+ </message>
+ <message>
+ <source>Selected graph</source>
+ <translation>Ausgewählter Graph</translation>
+ </message>
+</context>
+<context>
+ <name>WatsynView</name>
+ <message>
+ <source>Select oscillator A1</source>
+ <translation>Oszilator A1 auswählen</translation>
+ </message>
+ <message>
+ <source>Select oscillator A2</source>
+ <translation>Oszilator A2 auswählen</translation>
+ </message>
+ <message>
+ <source>Select oscillator B1</source>
+ <translation>Oszilator B1 auswählen</translation>
+ </message>
+ <message>
+ <source>Select oscillator B2</source>
+ <translation>Oszilator B2 auswählen</translation>
+ </message>
+ <message>
+ <source>Mix output of A2 to A1</source>
+ <translation>Mische Ausgang von A2 zu A1</translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of A1 with output of A2</source>
+ <translation>Amplitude von A1 mit der Ausgabe von A2 modulieren</translation>
+ </message>
+ <message>
+ <source>Ring-modulate A1 and A2</source>
+ <translation>A1 und A2 ringmodulieren</translation>
+ </message>
+ <message>
+ <source>Modulate phase of A1 with output of A2</source>
+ <translation>Phase von A1 mit der Ausgabe von A2 modulieren</translation>
+ </message>
+ <message>
+ <source>Mix output of B2 to B1</source>
+ <translation>Mische Ausgang von B2 zu B1</translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation>Amplitude von B1 mit der Ausgabe von B2 modulieren</translation>
+ </message>
+ <message>
+ <source>Ring-modulate B1 and B2</source>
+ <translation>B1 und B2 ringmodulieren</translation>
+ </message>
+ <message>
+ <source>Modulate phase of B1 with output of B2</source>
+ <translation>Phase von B1 mit der Ausgabe von B2 modulieren</translation>
+ </message>
+ <message>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation>Zeichnen Sie heier eigene Wellenformen, indem Sie die Maus über den Graph ziehen.</translation>
+ </message>
+ <message>
+ <source>Load waveform</source>
+ <translation>Wellenform laden</translation>
+ </message>
+ <message>
+ <source>Click to load a waveform from a sample file</source>
+ <translation>Klicken Sie hier, um eine Wellenform aus einer Sampledatei zu laden</translation>
+ </message>
+ <message>
+ <source>Phase left</source>
+ <translation>Nach links verschieben</translation>
+ </message>
+ <message>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation>Klicken Sie hier, um die Phase um -15 Grad zu verscheiben</translation>
+ </message>
+ <message>
+ <source>Phase right</source>
+ <translation>Nach rechts verschieben</translation>
+ </message>
+ <message>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation>Klicken Sie hier, um die Phase um +15 Grad zu verscheiben</translation>
</message>
<message>
- <source>Open Preset</source>
- <translation>Preset öffnen</translation>
+ <source>Normalize</source>
+ <translation>Normalisieren</translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
- <translation>VST-Plugin-Preset (*.fxp *.fxb)</translation>
+ <source>Click to normalize</source>
+ <translation>Klicken zum Normalisieren</translation>
</message>
<message>
- <source>: default</source>
- <translation>: Standard</translation>
+ <source>Invert</source>
+ <translation>Invertieren</translation>
</message>
<message>
- <source>"</source>
- <translation>"</translation>
+ <source>Click to invert</source>
+ <translation>Klicken zum Invertieren</translation>
</message>
<message>
- <source>'</source>
- <translation>'</translation>
+ <source>Smooth</source>
+ <translation>Glätten</translation>
</message>
<message>
- <source>Save Preset</source>
- <translation>Preset speichern</translation>
+ <source>Click to smooth</source>
+ <translation>Klicken zum Glätten</translation>
</message>
<message>
- <source>.fxp</source>
- <translation>.fxp</translation>
+ <source>Sine wave</source>
+ <translation>Sinuswelle</translation>
</message>
<message>
- <source>.FXP</source>
- <translation>.FXP</translation>
+ <source>Click for sine wave</source>
+ <translation>Klicken für Sinuswelle</translation>
</message>
<message>
- <source>.FXB</source>
- <translation>.FXB</translation>
+ <source>Triangle wave</source>
+ <translation>Dreieckwelle</translation>
</message>
<message>
- <source>.fxb</source>
- <translation>.fxb</translation>
+ <source>Click for triangle wave</source>
+ <translation>Klicken für Dreieckwelle</translation>
</message>
<message>
- <source>Please wait while loading VST plugin...</source>
- <translation>Bitte warten, während das VST-Plugin geladen wird…</translation>
+ <source>Click for saw wave</source>
+ <translation>Klicken für Sägezahnwelle</translation>
</message>
<message>
- <source>Failed loading VST plugin</source>
- <translation>Laden des VST-Plugins fehlgeschlagen</translation>
+ <source>Square wave</source>
+ <translation>Rechteckwelle</translation>
</message>
<message>
- <source>The VST plugin %1 could not be loaded for some reason.</source>
- <translation>Das VST-Plugin %1 konnte aus irgend einem Grund nicht geladen werden.</translation>
+ <source>Click for square wave</source>
+ <translation>Klicken für Rechteckwelle</translation>
</message>
</context>
<context>
@@ -4153,8 +5427,28 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
<translation>Stottern</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Wiederholen</translation>
+ <source>Loopback point</source>
+ <translation>Wiederholungspunkt</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation>Wiederholungsmodus</translation>
+ </message>
+ <message>
+ <source>Interpolation mode</source>
+ <translation>Interpolationsmodus</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>Keiner</translation>
+ </message>
+ <message>
+ <source>Linear</source>
+ <translation>Linear</translation>
+ </message>
+ <message>
+ <source>Sinc</source>
+ <translation>Sinc</translation>
</message>
</context>
<context>
@@ -4214,6 +5508,10 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
<source>Change color</source>
<translation>Farbe ändern</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation>Farbe auf Standard zurücksetzen</translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -4241,19 +5539,19 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>Sine wave</source>
- <translation>Sinus-Welle</translation>
+ <translation>Sinuswelle</translation>
</message>
<message>
<source>Triangle wave</source>
- <translation>Dreiecks-Welle</translation>
+ <translation>Dreieckwelle</translation>
</message>
<message>
<source>Saw wave</source>
- <translation>Sägezahn-Welle</translation>
+ <translation>Sägezahnwelle</translation>
</message>
<message>
<source>Square wave</source>
- <translation>Rechtecks-Welle</translation>
+ <translation>Rechteckwelle</translation>
</message>
<message>
<source>White noise wave</source>
@@ -4289,7 +5587,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>Click here for a triangle-wave.</source>
- <translation>Klick für eine Dreieckswelle.</translation>
+ <translation>Klick für eine Dreieckwelle.</translation>
</message>
<message>
<source>Click here for a saw-wave.</source>
@@ -4297,7 +5595,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>Click here for a square-wave.</source>
- <translation>Klick für eine Rechteckswelle.</translation>
+ <translation>Klick für eine Rechteckwelle.</translation>
</message>
<message>
<source>Click here for white-noise.</source>
@@ -4309,6 +5607,17 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
</context>
<context>
+ <name>captionMenu</name>
+ <message>
+ <source>&Help</source>
+ <translation>&Hilfe</translation>
+ </message>
+ <message>
+ <source>Help (not available)</source>
+ <translation>Hilfe (nicht verfügbar)</translation>
+ </message>
+</context>
+<context>
<name>dynProcControlDialog</name>
<message>
<source>INPUT</source>
@@ -4459,67 +5768,61 @@ Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeic
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation>Browser</translation>
+ <source>Graph</source>
+ <translation>Graph</translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
- <translation>An aktive Instrumentspur senden</translation>
+ <source>Start frequency</source>
+ <translation>Startfrequenz</translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
- <translation>In neuer Instrumentspur im Song-Editor öffnen</translation>
+ <source>End frequency</source>
+ <translation>Endfrequenz</translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
- <translation>In neuer Instrumentspur im B+B-Editor öffnen</translation>
+ <source>Gain</source>
+ <translation>Gain</translation>
</message>
<message>
- <source>Loading sample</source>
- <translation>Lade Sample</translation>
+ <source>Length</source>
+ <translation>Länge</translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
- <translation>Bitte warten, lade Sample für Vorschau…</translation>
+ <source>Distortion Start</source>
+ <translation>Verzerrungsanfang</translation>
</message>
<message>
- <source>--- Factory files ---</source>
- <translation>--- Mitgelieferte Dateien ---</translation>
+ <source>Distortion End</source>
+ <translation>Verzerrungsende</translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation>Graph</translation>
+ <source>Envelope Slope</source>
+ <translation>Hüllkurvenneigung</translation>
</message>
-</context>
-<context>
- <name>kickerInstrument</name>
<message>
- <source>Start frequency</source>
- <translation>Startfrequenz</translation>
+ <source>Noise</source>
+ <translation>Rauschen</translation>
</message>
<message>
- <source>End frequency</source>
- <translation>Endfrequenz</translation>
+ <source>Click</source>
+ <translation>Klick</translation>
</message>
<message>
- <source>Gain</source>
- <translation>Gain</translation>
+ <source>Frequency Slope</source>
+ <translation>Frequenzabfall</translation>
</message>
<message>
- <source>Decay</source>
- <translation>Abfallzeit</translation>
+ <source>Start from note</source>
+ <translation>Starte bei Note</translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Verzerrung</translation>
+ <source>End to note</source>
+ <translation>Ende bei Note</translation>
</message>
</context>
<context>
@@ -4537,21 +5840,37 @@ Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeic
<translation>Gain:</translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Abfallzeit:</translation>
+ <source>Frequency Slope:</source>
+ <translation>Frequenzabfall:</translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Verzerrung:</translation>
+ <source>Envelope Length:</source>
+ <translation>Hüllkurvenlänge:</translation>
+ </message>
+ <message>
+ <source>Envelope Slope:</source>
+ <translation>Hüllkurvenneigung:</translation>
+ </message>
+ <message>
+ <source>Click:</source>
+ <translation>Klick:</translation>
+ </message>
+ <message>
+ <source>Noise:</source>
+ <translation>Rauschen:</translation>
+ </message>
+ <message>
+ <source>Distortion Start:</source>
+ <translation>Verzerrungsanfang:</translation>
+ </message>
+ <message>
+ <source>Distortion End:</source>
+ <translation>Verzerrungsende:</translation>
</message>
</context>
<context>
<name>knob</name>
<message>
- <source>&Help</source>
- <translation>&Hilfe</translation>
- </message>
- <message>
<source>Please enter a new value between %1 and %2:</source>
<translation>Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein:</translation>
</message>
@@ -4559,6 +5878,14 @@ Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeic
<source>Please enter a new value between -96.0 dBV and 6.0 dBV:</source>
<translation>Bitte geben Sie einen Wert zwischen -96.0 dBV und 6.0 dBV ein:</translation>
</message>
+ <message>
+ <source>Set linear</source>
+ <translation>Linear einstellen</translation>
+ </message>
+ <message>
+ <source>Set logarithmic</source>
+ <translation>Logarithmisch einstellen</translation>
+ </message>
</context>
<context>
<name>ladspaBrowserView</name>
@@ -4772,7 +6099,7 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Saw wave</source>
- <translation>Sägezahn-Welle</translation>
+ <translation>Sägezahnwelle</translation>
</message>
<message>
<source>Click here for a saw-wave.</source>
@@ -4780,27 +6107,27 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Triangle wave</source>
- <translation>Dreiecks-Welle</translation>
+ <translation>Dreieckwelle</translation>
</message>
<message>
<source>Click here for a triangle-wave.</source>
- <translation>Klick für eine Dreieckswelle.</translation>
+ <translation>Klick für eine Dreieckwelle.</translation>
</message>
<message>
<source>Square wave</source>
- <translation>Rechtecks-Welle</translation>
+ <translation>Rechteckwelle</translation>
</message>
<message>
<source>Click here for a square-wave.</source>
- <translation>Klick für eine Rechteckswelle.</translation>
+ <translation>Klick für eine Rechteckwelle.</translation>
</message>
<message>
<source>Rounded square wave</source>
- <translation>Abgerundete Rechtecks-Welle</translation>
+ <translation>Abgerundete Rechteckwelle</translation>
</message>
<message>
<source>Click here for a square-wave with a rounded end.</source>
- <translation>Klick für eine abgerundete Rechtecks-Welle.</translation>
+ <translation>Klick für eine abgerundete Rechteckwelle.</translation>
</message>
<message>
<source>Moog wave</source>
@@ -4812,7 +6139,7 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Sine wave</source>
- <translation>Sinus-Welle</translation>
+ <translation>Sinuswelle</translation>
</message>
<message>
<source>Click for a sine-wave.</source>
@@ -4824,12 +6151,44 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Click here for an exponential wave.</source>
- <translation>Klick für eine Exponential-Welle.</translation>
+ <translation>Klick für eine exponentielle-Welle.</translation>
</message>
<message>
<source>Click here for white-noise.</source>
<translation>Klick für weißes Rauschen.</translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation>Bandbegrenzte Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation>Klick für eine bandbegrenzte Sägezahnwelle.</translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation>Bandbegrenzte Rechteckwelle</translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation>Klick für eine bandbegrenzte Rechteckwelle.</translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation>Bandlimittierte Dreieckwelle</translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation>Klick für eine bandbegrenzte Dreieckwelle.</translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation>Bandbegrenzte Moog-Sägezahnwelle</translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation>Klick für eine bandbegrenzte Moog-Sägezahnwelle.</translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -5227,7 +6586,7 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Close VST effect knob-controller window.</source>
- <translation>VST Effekt Knopf-Controllerfenster schließen.</translation>
+ <translation>VST Effekt Regler-Controllerfenster schließen.</translation>
</message>
</context>
<context>
@@ -5258,14 +6617,7 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Close VST plugin knob-controller window.</source>
- <translation>VST Effekt Knopf-Controllerfenster schließen.</translation>
- </message>
-</context>
-<context>
- <name>nineButtonSelector</name>
- <message>
- <source>&Help</source>
- <translation>&Hilfe</translation>
+ <translation>VST Effekt Regler-Controllerfenster schließen.</translation>
</message>
</context>
<context>
@@ -5308,7 +6660,7 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Op 1 Key Scaling Rate</source>
- <translation type="unfinished"></translation>
+ <translation>Op 1 Tonart Skalierungsrate</translation>
</message>
<message>
<source>Op 1 Percussive Envelope</source>
@@ -5356,7 +6708,7 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Op 2 Key Scaling Rate</source>
- <translation type="unfinished"></translation>
+ <translation>Op 2 Tonart Skalierungsrate</translation>
</message>
<message>
<source>Op 2 Percussive Envelope</source>
@@ -5429,8 +6781,24 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
<translation>Lautstärke:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Oszillator %1 Fein-Verstimmung links:</translation>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation>Der Verzerrungsregler fügt Verzerrung zur Ausgabe des Instruments hinzu.</translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation>Der Lautstärkeregler kontrolliert die Lautstärke des Instruments. Er ist gleich dem Lautstärkeregler des Instrumentenfensters. </translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation>Der Zufallsknopf setzt alle Regler auf zufällige Werte, außer den Harmonien, der Hauptlautstärke und den Verzerrungsreglern. </translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation>Oszillator %1 Stereo Verstimmung</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation>Oszillator %1 Harmonie:</translation>
</message>
</context>
<context>
@@ -5517,7 +6885,7 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Treble</source>
- <translation type="unfinished"></translation>
+ <translation>Höhe</translation>
</message>
<message>
<source>Bass</source>
@@ -5612,11 +6980,11 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>Treble:</source>
- <translation type="unfinished"></translation>
+ <translation>Höhe:</translation>
</message>
<message>
<source>Treble</source>
- <translation type="unfinished"></translation>
+ <translation>Höhe</translation>
</message>
<message>
<source>Bass:</source>
@@ -5684,7 +7052,7 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
<message>
<source>The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.</source>
- <translation type="unfinished"></translation>
+ <translation>Der Tastgrad ist das Verhältnis der Dauter (Zeit), in dem das Signal AN ist, im Gegensatz zur gesamten Periodendauer des Signals.</translation>
</message>
<message>
<source>Square Channel 1 Volume</source>
@@ -5700,45 +7068,8 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
</message>
</context>
<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>Doppelklick, um diesen Pattern im Piano-Roll zu öffnen
-Lautstärke eines Schritts kann mit Mausrad geändert werden</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>Im Piano-Roll öffnen</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>Alle Noten löschen</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>Name zurücksetzen</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>Name ändern</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>Schritte hinzufügen</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>Schritte entfernen</translation>
- </message>
-</context>
-<context>
<name>pluginBrowser</name>
<message>
- <source>Instrument plugins</source>
- <translation>Instrument-Plugins</translation>
- </message>
- <message>
<source>VST-host for using VST(i)-plugins within LMMS</source>
<translation>VST-Host zum Benutzen von VST(i)-Plugins innerhalb von LMMS</translation>
</message>
@@ -5801,14 +7132,6 @@ This chip was used in the Commodore 64 computer.</source>
Dieser Chip wurde in Commodore 64 Computern genutzt.</translation>
</message>
<message>
- <source>Instrument browser</source>
- <translation>Instrument-Browser</translation>
- </message>
- <message>
- <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
- <translation>Ziehen Sie ein Instrument entweder in den Song-Editor, den Beat+Bassline-Editor oder in eine existierende Instrumentspur.</translation>
- </message>
- <message>
<source>Player for SoundFont files</source>
<translation>Wiedergabe von SoundFont-Dateien</translation>
</message>
@@ -5849,28 +7172,52 @@ Dieser Chip wurde in Commodore 64 Computern genutzt.</translation>
<translation>Graphisches Spektrumanalyzer Plugin</translation>
</message>
<message>
+ <source>A NES-like synthesizer</source>
+ <translation>Ein NES ähnlicher Synthesizer</translation>
+ </message>
+ <message>
<source>Boost your bass the fast and simple way</source>
<translation>Verstärken Sie Ihren Bass auf schnellen und einfachen Wege</translation>
</message>
<message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation>4-Oszillator modulierbarer Wellenformtabellen Synth</translation>
+ </message>
+ <message>
<source>plugin for waveshaping</source>
<translation>Plugin für Wellenformen</translation>
</message>
<message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation>Monströser 3-Oszillator Synth mit Modulationsmatrix</translation>
+ </message>
+ <message>
<source>plugin for using arbitrary VST effects inside LMMS.</source>
<translation>Plugin um beliebige VST-Effekte in LMMS zu benutzen.</translation>
</message>
<message>
+ <source>Versatile drum synthesizer</source>
+ <translation>Vielseitiger Trommel-Synthesizer</translation>
+ </message>
+ <message>
<source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
<translation>Einfacher Sampler mit verschiedenen Einstellungen zum Benutzen von Samples (z.B. Trommeln) in einer Instrumentenspur</translation>
</message>
<message>
<source>Three powerful oscillators you can modulate in several ways</source>
- <translation>Drei mächtige Oszillatoren, die Sie auf mehrere Arten modulieren können</translation>
+ <translation>Drei mächtige Oszillatoren, die Sie auf mehrere Weisen modulieren können</translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation>Carla Rack Instrument</translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation>Carla Patchbay Instrument</translation>
</message>
<message>
- <source>Versatile kick- & bassdrum-synthesizer</source>
- <translation>Vielseitiger Kick- & Bassdrum-Synthesizer</translation>
+ <source>A native delay plugin</source>
+ <translation>Ein natives Verzögerung-Plugin</translation>
</message>
</context>
<context>
@@ -6173,7 +7520,7 @@ Latenz: %2 ms</translation>
</message>
<message>
<source>Compact track buttons</source>
- <translation>Kompakte Track-Buttons</translation>
+ <translation>Kompakte Spur-Knöpfe</translation>
</message>
<message>
<source>Smooth scroll in Song Editor</source>
@@ -6201,6 +7548,57 @@ Latenz: %2 ms</translation>
</message>
</context>
<context>
+ <name>setupWidget</name>
+ <message>
+ <source>OSS (Open Sound System)</source>
+ <translation>OSS (Open Sound System)</translation>
+ </message>
+ <message>
+ <source>SDL (Simple DirectMedia Layer)</source>
+ <translation>SDL (Simple DirectMedia Layer)</translation>
+ </message>
+ <message>
+ <source>ALSA-Sequencer (Advanced Linux Sound Architecture)</source>
+ <translation>ALSA-Sequencer (Advanced Linux Sound Architecture)</translation>
+ </message>
+ <message>
+ <source>JACK (JACK Audio Connection Kit)</source>
+ <translation>JACK (JACK Audio Connection Kit)</translation>
+ </message>
+ <message>
+ <source>ALSA Raw-MIDI (Advanced Linux Sound Architecture)</source>
+ <translation>ALSA Raw-MIDI (Advanced Linux Sound Architecture)</translation>
+ </message>
+ <message>
+ <source>PulseAudio (bad latency!)</source>
+ <translation>PulseAudio (Schlechte Latenz!)</translation>
+ </message>
+ <message>
+ <source>Dummy (no sound output)</source>
+ <translation>Dummy (Keine Soundausgabe)</translation>
+ </message>
+ <message>
+ <source>Dummy (no MIDI support)</source>
+ <translation>Dummy (Keine MIDI-Unterstützung)</translation>
+ </message>
+ <message>
+ <source>WinMM MIDI</source>
+ <translation>WinMM MIDI</translation>
+ </message>
+ <message>
+ <source>OSS Raw-MIDI (Open Sound System)</source>
+ <translation>OSS Raw-MIDI (Open Sound System)</translation>
+ </message>
+ <message>
+ <source>ALSA (Advanced Linux Sound Architecture)</source>
+ <translation>ALSA (Advanced Linux Sound Architecture)</translation>
+ </message>
+ <message>
+ <source>PortAudio</source>
+ <translation>PortAudio</translation>
+ </message>
+</context>
+<context>
<name>sf2Instrument</name>
<message>
<source>Bank</source>
@@ -6307,7 +7705,7 @@ Latenz: %2 ms</translation>
</message>
<message>
<source>This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.</source>
- <translation>Dieser knopf aktiviert den Chorus-Effekt. Das ist nützlich für Echo-Effekte, funktioniert jedoch nur mit Dateien, die dies unterstützen.</translation>
+ <translation>Dieser Knopf aktiviert den Chorus-Effekt. Das ist nützlich für Echo-Effekte, funktioniert jedoch nur mit Dateien, die dies unterstützen.</translation>
</message>
<message>
<source>Chorus Lines:</source>
@@ -6432,11 +7830,11 @@ Latenz: %2 ms</translation>
</message>
<message>
<source>Triangle Wave</source>
- <translation>Dreiecks-Welle</translation>
+ <translation>Dreieckwelle</translation>
</message>
<message>
<source>SawTooth</source>
- <translation>Sägezahn-Welle</translation>
+ <translation>Sägezahnwelle</translation>
</message>
<message>
<source>Noise</source>
@@ -6472,7 +7870,7 @@ Latenz: %2 ms</translation>
</message>
<message>
<source>The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.</source>
- <translation type="unfinished"></translation>
+ <translation>Die Pulsweitenauflösung ermöglicht es die Weite gleitend, ohne erkennbare Schritte zu ändern. Die Puls-Wellenform von Oszillator %1 muss ausgewählt werden, um eine hörbaren Effekt zu haben.</translation>
</message>
<message>
<source>The Coarse detuning allows to detune Voice %1 one octave up or down.</source>
@@ -6480,11 +7878,11 @@ Latenz: %2 ms</translation>
</message>
<message>
<source>Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.</source>
- <translation>Sync synchronisiert die Grundfrequenz von Oszillator %1 mit der Grundfrequenz von Oszillator %2, was einen "Hard Sync" Effekt hervorruft.</translation>
+ <translation>Sync synchronisiert die Grundfrequenz von Oszillator %1 mit der Grundfrequenz von Oszillator %2, was einen »Hard Sync« Effekt hervorruft.</translation>
</message>
<message>
<source>Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.</source>
- <translation>Ringmodus ersetzt die Dreiecks-Wellenfrom-Ausgabe von Oszillator %1 mit einer ringmodulierten Kombination der Oszillatoren %1 und %2.</translation>
+ <translation>Ringmodus ersetzt die Dreieck-Wellenfrom-Ausgabe von Oszillator %1 mit einer ringmodulierten Kombination der Oszillatoren %1 und %2.</translation>
</message>
<message>
<source>When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.</source>
@@ -6627,6 +8025,13 @@ Latenz: %2 ms</translation>
</message>
</context>
<context>
+ <name>tabWidget</name>
+ <message>
+ <source>Settings for %1</source>
+ <translation>Einstellungen für %1</translation>
+ </message>
+</context>
+<context>
<name>timeLine</name>
<message>
<source>Enable/disable auto-scrolling</source>
@@ -6738,7 +8143,7 @@ Latenz: %2 ms</translation>
</message>
<message>
<source>Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action.</source>
- <translation>Drücken Sie <Strg> während des Klicks auf den Verschiebe-Griff, um eine neue Drag'n'Drop-Aktion zu beginnen.</translation>
+ <translation>Drücken Sie <Strg> während des Klicks auf den Verschiebe-Griff, um eine neue Klicken und Ziehen-Aktion zu beginnen.</translation>
</message>
<message>
<source>Actions for this track</source>
@@ -6756,6 +8161,18 @@ Latenz: %2 ms</translation>
<source>Solo</source>
<translation>Solo</translation>
</message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation>Alle Aufnahmen einschalten</translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation>Alle Aufnahmen ausschalten</translation>
+ </message>
+ <message>
+ <source>Clear this track</source>
+ <translation>Diese Spur leeren</translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6829,7 +8246,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The 'V' knob sets the volume of the selected string.</source>
- <translation>Der 'V'-Knopf setzt die Lautstärke der gewählten Saite.</translation>
+ <translation>Der »V«-Regler setzt die Lautstärke der gewählten Saite.</translation>
</message>
<message>
<source>String stiffness:</source>
@@ -6837,7 +8254,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring.</source>
- <translation>Der 'S'-Knopf setzt die Härte der gewählten Saite. Die Härte der Saite beeinflusst deren Ausklang-Dauer. Je kleiner die Einstellung, desto länger klingt die Saite aus.</translation>
+ <translation>Der »S«-Regler setzt die Härte der gewählten Saite. Die Härte der Saite beeinflusst deren Ausklang-Dauer. Je kleiner die Einstellung, desto länger klingt die Saite aus.</translation>
</message>
<message>
<source>Pick position:</source>
@@ -6845,7 +8262,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge.</source>
- <translation>Der 'P'-Knopf bestimmt die Position, an der die Saite angezupft wird. Je kleiner die Einstellung, desto näher wird am Steg gezupft.</translation>
+ <translation>Der »P«-Regler bestimmt die Position, an der die Saite angezupft wird. Je kleiner die Einstellung, desto näher wird am Steg gezupft.</translation>
</message>
<message>
<source>Pickup position:</source>
@@ -6853,7 +8270,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge.</source>
- <translation>Der 'PU'-Knopf bestimmt die Position, an der die Schwingungen an der gewählten Saite abgenommen werden. Je kleiner die Einstellung, desto näher ist der Abnehmer am Steg.</translation>
+ <translation>Der »PU«-Regler bestimmt die Position, an der die Schwingungen an der gewählten Saite abgenommen werden. Je kleiner die Einstellung, desto näher ist der Abnehmer am Steg.</translation>
</message>
<message>
<source>Pan:</source>
@@ -6861,7 +8278,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The Pan knob determines the location of the selected string in the stereo field.</source>
- <translation>Der Balance-Knopf bestimmt den Ort der gewählten Saite im Stereo-Raum.</translation>
+ <translation>Der Balance-Regler bestimmt den Ort der gewählten Saite im Stereo-Raum.</translation>
</message>
<message>
<source>Detune:</source>
@@ -6869,7 +8286,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp.</source>
- <translation>Der Verstimmungs-Knopf verändert die Tonhöhe der gewählten Saite. Einstellungen kleiner als 0 lassen die Saite flacher klingen, während Werte über 0 zu einem eher scharfen Klang führen.</translation>
+ <translation>Der Verstimmungs-Regler verändert die Tonhöhe der gewählten Saite. Einstellungen kleiner als 0 lassen die Saite flacher klingen, während Werte über 0 zu einem eher scharfen Klang führen.</translation>
</message>
<message>
<source>Fuzziness:</source>
@@ -6877,7 +8294,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'.</source>
- <translation>Der Unschärfe-Knopf fügt dem Klang der Saite etwas 'Fuzz' hinzu, welcher hauptsächlich während des Anschlages zum Tragen kommt, wenngleich er auch genutzt werden kann, um den Klang etwas metallischer zu gestalten.</translation>
+ <translation>Der Unschärfe-Regler fügt dem Klang der Saite etwas »Fuzz« hinzu, welcher hauptsächlich während des Anschlages zum Tragen kommt, wenngleich er auch genutzt werden kann, um den Klang etwas metallischer zu gestalten.</translation>
</message>
<message>
<source>Length:</source>
@@ -6885,7 +8302,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles.</source>
- <translation>Der Länge-Knopf bestimmt die Länge der gewählten Saite. Längere Saiten klingen länger und klingen heller, wobei sie gleichzeitig auch mehr CPU-Leistung fressen.</translation>
+ <translation>Der Länge-Regler bestimmt die Länge der gewählten Saite. Längere Saiten klingen länger und klingen heller, wobei sie gleichzeitig auch mehr CPU-Leistung fressen.</translation>
</message>
<message>
<source>Impulse or initial state</source>
@@ -6893,7 +8310,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string.</source>
- <translation>Mit dem 'Imp'-Knopf legen Sie fest, ob die Wellenform in diesem Graph als Impuls zum Anzupfen der Saite oder als Grundstellung für die Saite genutzt werden soll.</translation>
+ <translation>Mit dem »Imp«-Knopf legen Sie fest, ob die Wellenform in diesem Graph als Impuls zum Anzupfen der Saite oder als Grundstellung für die Saite genutzt werden soll.</translation>
</message>
<message>
<source>Octave</source>
@@ -6901,7 +8318,7 @@ Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitt
</message>
<message>
<source>The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental.</source>
- <translation>Mit dem Oktaven-Wähler kann der Oktavenversatz gegenüber der Note verändert werden. So meint beispielsweise eine Einstellung von '-2', dass die Saite zwei Oktaven unterhalb des Grundtons ('F') schwingen wird und '6' dementsprechend 6 Oktaven über dem Grundton.</translation>
+ <translation>Mit dem Oktaven-Wähler kann der Oktavenversatz gegenüber der Note verändert werden. So meint beispielsweise eine Einstellung von »-2«, dass die Saite zwei Oktaven unterhalb des Grundtons (»F«) schwingen wird und »6« dementsprechend 6 Oktaven über dem Grundton.</translation>
</message>
<message>
<source>Impulse Editor</source>
@@ -6915,13 +8332,13 @@ The waveform can also be drawn in the graph.
The 'S' button will smooth the waveform.
The 'N' button will normalize the waveform.</source>
- <translation>Der Wellenform-Editor ermöglicht die Kontrolle über die Grundstellung oder den Impuls, der genutzt wird, um die Saite zum Schwingen zu bringen. Die Buttons rechts des Graphes initialisieren die Wellenform mit dem gewünschten Typ. Der '?'-Button lässt Sie eine Wellenform aus einer Datei laden - allerdings werden nur die ersten 128 Samples geladen.
+ <translation>Der Wellenform-Editor ermöglicht die Kontrolle über die Grundstellung oder den Impuls, der genutzt wird, um die Saite zum Schwingen zu bringen. Die Knöpfe rechts des Graphes initialisieren die Wellenform mit dem gewünschten Typ. Der »?«-Knopf lässt Sie eine Wellenform aus einer Datei laden - allerdings werden nur die ersten 128 Samples geladen.
Die Wellenform kann ebenfalls in dem Graph gezeichnet werden.
-Der 'S'-Button glättet die Wellenform.
+Der »S«-Knopf glättet die Wellenform.
-Der 'N'-Button normalisiert die Wellenform.</translation>
+Der »N«-Knopf normalisiert die Wellenform.</translation>
</message>
<message>
<source>Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at.
@@ -6935,15 +8352,15 @@ The 'V' knob controls the volume. The 'S' knob controls the
The 'Length' knob controls the length of the string.
The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument.</source>
- <translation>Vibed modelliert bis zu 9 unabhängige schwingende Saiten. Der Saiten-Wähler ermöglicht die Wahl der gerade aktiven Saite. Der 'Imp'-Knopf bestimmt, ob der Graph einen Impuls oder die Grundstellung der Saite repräsentiert. Der Oktaven-Wähler gibt den Oktavenversatz der Saite gegenüber dem Grundton an.
+ <translation>Vibed modelliert bis zu 9 unabhängige schwingende Saiten. Der Saiten-Wähler ermöglicht die Wahl der gerade aktiven Saite. Der »Imp«-Knopf bestimmt, ob der Graph einen Impuls oder die Grundstellung der Saite repräsentiert. Der Oktaven-Wähler gibt den Oktavenversatz der Saite gegenüber dem Grundton an.
Der Graph ermöglicht die Kontrolle über die Grundstellung der Saite oder den Impuls, der zum Anzupfen der Saite genutzt wird.
-Der 'V'-Knopf bestimmt die Lautstärke. Mit dem 'S'-Knopf wird die Härte der Saite eingestellt. Der 'P'-Knopf beeinflusst den Ort, an dem die Saite angezupft wird, während der 'PU'-Knopf die Position des Abnehmers bestimmt.
+Der »V«-Regler bestimmt die Lautstärke. Mit dem »S«-Regler wird die Härte der Saite eingestellt. Der »P«-Regler beeinflusst den Ort, an dem die Saite angezupft wird, während der »PU«-Regler die Position des Abnehmers bestimmt.
-'Balance' und 'Verstimmung' bedürfen hoffentlich keiner Erklärung. Der Unschärfe-Knopf fügt dem Klang der Saite etwas 'Fuzz' hinzu.
+»Balance« und »Verstimmung« bedürfen hoffentlich keiner Erklärung. Der Unschärfe-Regler fügt dem Klang der Saite etwas »Fuzz« hinzu.
-Der Länge-Knopf bestimmt die Länge der Saite.
+Der Länge-Regler bestimmt die Länge der Saite.
Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist.</translation>
</message>
@@ -6965,19 +8382,19 @@ Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist.</tr
</message>
<message>
<source>Sine wave</source>
- <translation>Sinus-Welle</translation>
+ <translation>Sinuswelle</translation>
</message>
<message>
<source>Triangle wave</source>
- <translation>Dreiecks-Welle</translation>
+ <translation>Dreieckwelle</translation>
</message>
<message>
<source>Saw wave</source>
- <translation>Sägezahn-Welle</translation>
+ <translation>Sägezahnwelle</translation>
</message>
<message>
<source>Square wave</source>
- <translation>Rechtecks-Welle</translation>
+ <translation>Rechteckwelle</translation>
</message>
<message>
<source>White noise wave</source>
@@ -7004,16 +8421,12 @@ Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist.</tr
<translation>Hier klicken, um die Wellenform zu normalisieren.</translation>
</message>
<message>
- <source>&Help</source>
- <translation>&Hilfe</translation>
- </message>
- <message>
<source>Use a sine-wave for current oscillator.</source>
<translation>Sinuswelle für aktuellen Oszillator nutzen.</translation>
</message>
<message>
<source>Use a triangle-wave for current oscillator.</source>
- <translation>Dreieckswelle für aktuellen Oszillator nutzen.</translation>
+ <translation>Dreieckwelle für aktuellen Oszillator nutzen.</translation>
</message>
<message>
<source>Use a saw-wave for current oscillator.</source>
@@ -7021,7 +8434,7 @@ Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist.</tr
</message>
<message>
<source>Use a square-wave for current oscillator.</source>
- <translation>Rechteckswelle für aktuellen Oszillator nutzen.</translation>
+ <translation>Rechteckwelle für aktuellen Oszillator nutzen.</translation>
</message>
<message>
<source>Use white-noise for current oscillator.</source>
diff --git a/data/locale/en.ts b/data/locale/en.ts
index f2aca61..9ed5994 100644
--- a/data/locale/en.ts
+++ b/data/locale/en.ts
@@ -8,10 +8,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation type="unfinished"></translation>
</message>
@@ -46,7 +42,65 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source>LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -80,43 +134,63 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
+ <source>Amplify:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
+ <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amplify:</source>
+ <source>Startpoint:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <source>Endpoint:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Startpoint:</source>
+ <source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
+ <source>Disable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>Enable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -365,6 +439,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -396,6 +474,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -405,6 +487,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -517,239 +652,419 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
- <name>Effect</name>
+ <name>DelayControls</name>
<message>
- <source>Effect enabled</source>
+ <source>Delay Samples</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wet/Dry mix</source>
+ <source>Feedback</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gate</source>
+ <source>Lfo Frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Lfo Amount</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>EffectChain</name>
+ <name>DelayControlsDialog</name>
<message>
- <source>Effects enabled</source>
+ <source>Delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectRackView</name>
<message>
- <source>EFFECTS CHAIN</source>
+ <source>Delay Time Samples:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add effect</source>
+ <source>Feedback</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectSelectDialog</name>
<message>
- <source>Add effect</source>
+ <source>Feedback Amount:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin description</source>
+ <source>Lfo Hz</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectView</name>
<message>
- <source>Toggles the effect on or off.</source>
+ <source>Lfo Hz:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>On/Off</source>
+ <source>Lfo Amt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>W/D</source>
+ <source>Lfo Amt:</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>DualFilterControlDialog</name>
<message>
- <source>Wet Level:</source>
+ <source>Filter 1 enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
+ <source>Filter 2 enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DECAY</source>
+ <source>Click to enable/disable Filter 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Time:</source>
+ <source>Click to enable/disable Filter 2</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>DualFilterControls</name>
<message>
- <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
+ <source>Filter 1 enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>GATE</source>
+ <source>Filter 1 type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gate:</source>
+ <source>Cutoff 1 frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
+ <source>Q/Resonance 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Controls</source>
+ <source>Gain 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
-
-The On/Off switch allows you to bypass a given plugin at any point in time.
-
-The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
-
-The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
-
-The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
-
-The Controls button opens a dialog for editing the effect's parameters.
-
-Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
+ <source>Mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Move &up</source>
+ <source>Filter 2 enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Move &down</source>
+ <source>Filter 2 type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&Remove this plugin</source>
+ <source>Cutoff 2 frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&Help</source>
+ <source>Q/Resonance 2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EnvelopeAndLfoParameters</name>
<message>
- <source>Predelay</source>
+ <source>Gain 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>LowPass</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hold</source>
+ <source>HiPass</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>BandPass csg</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sustain</source>
+ <source>BandPass czpg</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Notch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation</source>
+ <source>Allpass</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Predelay</source>
+ <source>Moog</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Attack</source>
+ <source>2x LowPass</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO speed</source>
+ <source>RC LowPass 12dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Modulation</source>
+ <source>RC BandPass 12dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Wave Shape</source>
+ <source>RC HighPass 12dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Freq x 100</source>
+ <source>RC LowPass 24dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulate Env-Amount</source>
+ <source>RC BandPass 24dB</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EnvelopeAndLfoView</name>
<message>
- <source>DEL</source>
+ <source>RC HighPass 24dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Predelay:</source>
+ <source>Vocal Formant Filter</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>Effect</name>
<message>
- <source>Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.</source>
+ <source>Effect enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATT</source>
+ <source>Wet/Dry mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
+ <source>Gate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.</source>
+ <source>Decay</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EffectChain</name>
<message>
- <source>HOLD</source>
+ <source>Effects enabled</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EffectRackView</name>
<message>
- <source>Hold:</source>
+ <source>EFFECTS CHAIN</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.</source>
+ <source>Add effect</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EffectSelectDialog</name>
<message>
- <source>DEC</source>
+ <source>Add effect</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
+ <source>Plugin description</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EffectView</name>
+ <message>
+ <source>Toggles the effect on or off.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>On/Off</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>W/D</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wet Level:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DECAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GATE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gate:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Controls</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
+
+The On/Off switch allows you to bypass a given plugin at any point in time.
+
+The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
+
+The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
+
+The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
+
+The Controls button opens a dialog for editing the effect's parameters.
+
+Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &up</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &down</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Remove this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EnvelopeAndLfoParameters</name>
+ <message>
+ <source>Predelay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Predelay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO speed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Wave Shape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq x 100</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate Env-Amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EnvelopeAndLfoView</name>
+ <message>
+ <source>DEL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Predelay:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hold:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decay:</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -880,6 +1195,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1008,14 +1327,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Alias-free oscillators</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -1029,106 +1340,191 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
- <name>FxMixer</name>
- <message>
- <source>Master</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>FileBrowser</name>
<message>
- <source>FX %1</source>
+ <source>Browser</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>FxMixerView</name>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Rename FX channel</source>
+ <source>Send to active instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enter the new name for this FX channel</source>
+ <source>Open in new instrument-track/Song-Editor</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>FX-Mixer</source>
+ <source>Open in new instrument-track/B+B Editor</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>FX Fader %1</source>
+ <source>Loading sample</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mute</source>
+ <source>Please wait, loading sample for preview...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mute this FX channel</source>
+ <source>--- Factory files ---</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>InstrumentFunctionArpeggio</name>
+ <name>FxLine</name>
<message>
- <source>Arpeggio</source>
+ <source>Channel send amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Arpeggio type</source>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Arpeggio range</source>
+ <source>Move &left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Arpeggio time</source>
+ <source>Move &right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Arpeggio gate</source>
+ <source>Rename &channel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Arpeggio direction</source>
+ <source>R&emove channel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Arpeggio mode</source>
+ <source>&Help</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixer</name>
<message>
- <source>Up</source>
+ <source>Master</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Down</source>
+ <source>FX %1</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixerView</name>
<message>
- <source>Up and down</source>
+ <source>Rename FX channel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Random</source>
+ <source>Enter the new name for this FX channel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Free</source>
+ <source>FX-Mixer</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
- <source>Sort</source>
+ <source>FX Fader %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sync</source>
+ <source>Mute</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>InstrumentFunctionArpeggioView</name>
<message>
- <source>ARPEGGIO</source>
+ <source>Mute this FX channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentFunctionArpeggio</name>
+ <message>
+ <source>Arpeggio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio gate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio direction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Up and down</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Random</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Free</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sort</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentFunctionArpeggioView</name>
+ <message>
+ <source>ARPEGGIO</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1566,6 +1962,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1628,6 +2036,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1774,6 +2194,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1860,10 +2284,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished"></translation>
</message>
@@ -1936,15 +2356,19 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
+ <source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pitch range (semitones)</source>
+ <source>RANGE</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RANGE</source>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1993,6 +2417,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2352,10 +2783,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2375,6 +2802,22 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2491,973 +2934,2232 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
+ <source>Osc 1 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
+ <source>Osc 1 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
+ <source>Osc 1 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
+ <source>Osc 1 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
+ <source>Osc 1 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
+ <source>Osc 1 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
+ <source>Osc 1 Pulse width</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
+ <source>Osc 1 Sync send on rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
+ <source>Osc 1 Sync send on fall</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
+ <source>Osc 2 Volume</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
+ <source>Osc 2 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <source>Osc 2 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
+ <source>Osc 2 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
+ <source>Osc 2 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <source>Osc 2 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
+ <source>Osc 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
+ <source>Osc 2 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <source>Osc 2 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
+ <source>Osc 3 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
+ <source>Osc 3 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
+ <source>Osc 3 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
+ <source>Osc 3 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
+ <source>Osc 3 Waveform 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
+ <source>Osc 3 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
+ <source>Osc 3 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
+ <source>LFO 1 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
+ <source>LFO 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
+ <source>LFO 1 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
+ <source>LFO 1 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
+ <source>Env 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
+ <source>Env 1 Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
+ <source>Env 1 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
+ <source>Env 2 Attack</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
+ <source>Env 2 Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
+ <source>Env 2 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error while loading plugin</source>
+ <source>Env 2 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
+ <source>Env 2 Release</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
+ <source>Env 2 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
+ <source>Osc2-3 modulation</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
+ <source>Selected view</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
+ <source>Vol1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
+ <source>Vol1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eb</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D#</source>
- <comment>Note name</comment>
+ <source>Vol2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E</source>
- <comment>Note name</comment>
+ <source>Vol2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Fb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>F#</source>
- <comment>Note name</comment>
+ <source>Vol3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G</source>
- <comment>Note name</comment>
+ <source>Vol3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ab</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G#</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A</source>
- <comment>Note name</comment>
+ <source>Phs1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Bb</source>
- <comment>Note name</comment>
+ <source>Phs1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A#</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>B</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWidget</name>
<message>
- <source>Name: </source>
+ <source>Phs2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Maker: </source>
+ <source>Phs2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Copyright: </source>
+ <source>Phs2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Requires Real Time: </source>
+ <source>Phs2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
+ <source>Phs3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
+ <source>Phs3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Real Time Capable: </source>
+ <source>Phs3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>In Place Broken: </source>
+ <source>Phs3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels In: </source>
+ <source>Pit1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels Out: </source>
+ <source>Pit1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>File: </source>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maker: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copyright: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Requires Real Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Real Time Capable: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In Place Broken: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels In: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels Out: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleBuffer</name>
+ <message>
+ <source>Open audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wave-Files (*.wav)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OGG-Files (*.ogg)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DrumSynth-Files (*.ds)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FLAC-Files (*.flac)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SPEEX-Files (*.spx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VOC-Files (*.voc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AIFF-Files (*.aif *.aiff)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AU-Files (*.au)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RAW-Files (*.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleBuffer</name>
+ <name>SampleTCOView</name>
+ <message>
+ <source>double-click to select sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControlDialog</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControls</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TempoSyncKnob</name>
+ <message>
+ <source>Tempo Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eight beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Whole note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Quarter note</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <source>Open audio file</source>
+ <source>8th note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
+ <source>16th note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wave-Files (*.wav)</source>
+ <source>32nd note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>OGG-Files (*.ogg)</source>
+ <source>Custom...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DrumSynth-Files (*.ds)</source>
+ <source>&Help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>FLAC-Files (*.flac)</source>
+ <source>Custom </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>SPEEX-Files (*.spx)</source>
+ <source>Synced to Eight Beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Whole Note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
+ <source>Synced to Half Note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VOC-Files (*.voc)</source>
+ <source>Synced to Quarter Note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AIFF-Files (*.aif *.aiff)</source>
+ <source>Synced to 8th Note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AU-Files (*.au)</source>
+ <source>Synced to 16th Note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RAW-Files (*.raw)</source>
+ <source>Synced to 32nd Note</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTCOView</name>
+ <name>TimeDisplayWidget</name>
<message>
- <source>double-click to select sample</source>
+ <source>click to change time units</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>TrackContainer</name>
<message>
- <source>Delete (middle mousebutton)</source>
+ <source>Couldn't import file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Cut</source>
+ <source>Couldn't find a filter for importing file %1.
+You should convert this file into a format supported by LMMS using another software.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Copy</source>
+ <source>Couldn't open file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Paste</source>
+ <source>Couldn't open file %1 for reading.
+Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <source>Loading project...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Set/clear record</source>
+ <source>Cancel</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleTrack</name>
<message>
- <source>Sample track</source>
+ <source>Please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Volume</source>
+ <source>Importing MIDI-file...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Importing FLP-file...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>TripleOscillatorView</name>
<message>
- <source>Track volume</source>
+ <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channel volume:</source>
+ <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VOL</source>
+ <source>Mix output of oscillator 1 & 2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TempoSyncKnob</name>
<message>
- <source>Tempo Sync</source>
+ <source>Synchronize oscillator 1 with oscillator 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No Sync</source>
+ <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eight beats</source>
+ <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Whole note</source>
+ <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Half note</source>
+ <source>Mix output of oscillator 2 & 3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Quarter note</source>
+ <source>Synchronize oscillator 2 with oscillator 3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>8th note</source>
+ <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>16th note</source>
+ <source>Osc %1 volume:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>32nd note</source>
+ <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Custom...</source>
+ <source>Osc %1 panning:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&Help</source>
+ <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Custom </source>
+ <source>Osc %1 coarse detuning:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Eight Beats</source>
+ <source>semitones</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Whole Note</source>
+ <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Half Note</source>
+ <source>Osc %1 fine detuning left:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Quarter Note</source>
+ <source>cents</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 8th Note</source>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 16th Note</source>
+ <source>Osc %1 fine detuning right:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 32nd Note</source>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>degrees</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a sine-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a triangle-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a square-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a moog-like saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use an exponential wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use white-noise for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a user-defined waveform for current oscillator.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TimeDisplayWidget</name>
+ <name>Ui</name>
<message>
- <source>click to change time units</source>
+ <source>Contributors ordered by number of commits:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Involved</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TrackContainer</name>
+ <name>VersionedSaveDialog</name>
<message>
- <source>Couldn't import file</source>
+ <source>Increment version number</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't find a filter for importing file %1.
-You should convert this file into a format supported by LMMS using another software.</source>
+ <source>Decrement version number</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>VestigeInstrumentView</name>
<message>
- <source>Couldn't open file</source>
+ <source>Open other VST-plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't open file %1 for reading.
-Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
+ <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading project...</source>
+ <source>Show/hide GUI</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel</source>
+ <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait...</source>
+ <source>Turn off all notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Importing MIDI-file...</source>
+ <source>Open VST-plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Importing FLP-file...</source>
+ <source>DLL-files (*.dll)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EXE-files (*.exe)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TripleOscillatorView</name>
+ <name>VstEffectControlDialog</name>
<message>
- <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Show/hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Control VST-plugin from LMMS host</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 1 & 2</source>
+ <source>Click here, if you want to control VST-plugin from host.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 1 with oscillator 2</source>
+ <source>Open VST-plugin preset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Previous (-)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 2 & 3</source>
+ <source>Next (+)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 2 with oscillator 3</source>
+ <source>Click here to select presets that are currently loaded in VST.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Save preset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 volume:</source>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
+ <source>Effect by: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning:</source>
+ <source> <br /></source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>VstPlugin</name>
<message>
- <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
+ <source>Loading plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning:</source>
+ <source>Open Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>semitones</source>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
+ <source>: default</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
+ <source>"</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
+ <source>'</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <source>Save Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right:</source>
+ <source>.fxp</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <source>.FXP</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset:</source>
+ <source>.FXB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>degrees</source>
+ <source>.fxb</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <source>Please wait while loading VST plugin...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning:</source>
+ <source>Failed loading VST plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
<message>
- <source>Use a sine-wave for current oscillator.</source>
+ <source>Volume A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a triangle-wave for current oscillator.</source>
+ <source>Volume A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a saw-wave for current oscillator.</source>
+ <source>Volume B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a square-wave for current oscillator.</source>
+ <source>Volume B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a moog-like saw-wave for current oscillator.</source>
+ <source>Panning A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use an exponential wave for current oscillator.</source>
+ <source>Panning A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use white-noise for current oscillator.</source>
+ <source>Panning B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a user-defined waveform for current oscillator.</source>
+ <source>Panning B2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Ui</name>
<message>
- <source>Contributors ordered by number of commits:</source>
+ <source>Freq. multiplier A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Involved</source>
+ <source>Freq. multiplier A2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VersionedSaveDialog</name>
<message>
- <source>Increment version number</source>
+ <source>Freq. multiplier B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decrement version number</source>
+ <source>Freq. multiplier B2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VestigeInstrumentView</name>
<message>
- <source>Open other VST-plugin</source>
+ <source>Left detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <source>Left detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show/hide GUI</source>
+ <source>Left detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <source>Left detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Turn off all notes</source>
+ <source>Right detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin</source>
+ <source>Right detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DLL-files (*.dll)</source>
+ <source>Right detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>EXE-files (*.exe)</source>
+ <source>Right detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
+ <source>A-B Mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>A-B Mix envelope amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>A-B Mix envelope attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>A-B Mix envelope hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>A-B Mix envelope decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>A1-B2 Crosstalk</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>A2-A1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynView</name>
<message>
- <source>Next (+)</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstEffectControlDialog</name>
<message>
- <source>Show/hide</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Modulate amplitude of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Load waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>Click to load a waveform from a sample file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Phase left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Click to shift phase by -15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
+ <source>Click to shift phase by +15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
+ <source>Normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
+ <source>Click to normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
+ <source>Invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
+ <source>Triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
+ <source>Square wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3586,53 +5288,31 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation type="unfinished"></translation>
- </message>
<message>
- <source>Gain:</source>
+ <source>Loopback point</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
+ <source>Loop mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio:</source>
+ <source>Interpolation mode</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
+ <source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Linear</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
+ <source>Sinc</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3693,6 +5373,10 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<source>Change color</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3788,6 +5472,120 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3823,66 +5621,60 @@ Please make sure you have write-permission to the file and the directory contain
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
+ <source>Graph</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Start frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>End frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Gain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
+ <source>Envelope Slope</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrument</name>
<message>
- <source>Start frequency</source>
+ <source>Noise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency</source>
+ <source>Click</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Frequency Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
+ <source>Start from note</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>End to note</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3897,15 +5689,35 @@ Please make sure you have write-permission to the file and the directory contain
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
+ <source>Gain:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
+ <source>Frequency Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion End:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4182,6 +5994,38 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<source>Click here for white-noise.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4777,11 +6621,27 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
+ <source>cents</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5052,335 +6912,166 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Change name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Last note</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>pluginBrowser</name>
<message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <source>no description</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <source>Instrument plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <source>Incomplete monophonic imitation tb303</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <source>Plugin for freely manipulating stereo output</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark/unmark current semitone</source>
+ <source>Plugin for controlling knobs with sound peaks</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current scale</source>
+ <source>Plugin for enhancing stereo separation of a stereo input file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current chord</source>
+ <source>List installed LADSPA plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Unmark all</source>
+ <source>Filter for importing FL Studio projects into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No scale</source>
+ <source>GUS-compatible patch instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No chord</source>
+ <source>Additive Synthesizer for organ-like sounds</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>pluginBrowser</name>
<message>
- <source>no description</source>
+ <source>Tuneful things to bang on</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument plugins</source>
+ <source>VST-host for using VST(i)-plugins within LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Incomplete monophonic imitation tb303</source>
+ <source>Vibrating string modeler</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for freely manipulating stereo output</source>
+ <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for controlling knobs with sound peaks</source>
+ <source>Filter for importing MIDI-files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <source>Instrument browser</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>List installed LADSPA plugins</source>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
+ <source>Emulation of the MOS6581 and MOS8580 SID.
+This chip was used in the Commodore 64 computer.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing FL Studio projects into LMMS</source>
+ <source>Player for SoundFont files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
+ <source>Emulation of GameBoy (TM) APU</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>GUS-compatible patch instrument</source>
+ <source>Customizable wavetable synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
+ <source>Embedded ZynAddSubFX</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Additive Synthesizer for organ-like sounds</source>
+ <source>2-operator FM Synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for boosting bass</source>
+ <source>Filter for importing Hydrogen files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tuneful things to bang on</source>
+ <source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VST-host for using VST(i)-plugins within LMMS</source>
+ <source>Three powerful oscillators you can modulate in several ways</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vibrating string modeler</source>
+ <source>A native amplifier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
+ <source>Carla Rack Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing MIDI-files into LMMS</source>
+ <source>4-oscillator modulatable wavetable synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument browser</source>
+ <source>plugin for waveshaping</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <source>Boost your bass the fast and simple way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of the MOS6581 and MOS8580 SID.
-This chip was used in the Commodore 64 computer.</source>
+ <source>Versatile drum synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Player for SoundFont files</source>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of GameBoy (TM) APU</source>
+ <source>plugin for processing dynamics in a flexible way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Customizable wavetable synthesizer</source>
+ <source>Carla Patchbay Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Embedded ZynAddSubFX</source>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>2-operator FM Synth</source>
+ <source>Graphical spectrum analyzer plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing Hydrogen files into LMMS</source>
+ <source>A NES-like synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS port of sfxr</source>
+ <source>A native delay plugin</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -6081,152 +7772,6 @@ Latency: %2 ms</source>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6412,6 +7957,18 @@ Latency: %2 ms</source>
<source>Remove this track</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6729,4 +8286,74 @@ The LED in the lower right corner of the waveform editor determines whether the
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/es.qm b/data/locale/es.qm
index 5a0ac55..2ecf474 100644
Binary files a/data/locale/es.qm and b/data/locale/es.qm differ
diff --git a/data/locale/es.ts b/data/locale/es.ts
index 4bb9f5e..a3563f4 100644
--- a/data/locale/es.ts
+++ b/data/locale/es.ts
@@ -8,10 +8,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation type="unfinished"></translation>
</message>
@@ -46,7 +42,65 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -80,43 +134,63 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished">Si activa este botón la muestra será reproducida al revés. Esto es útil para buenos efectos, como por ejemplo, golpes del revés.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
+ <source>Amplify:</source>
+ <translation type="unfinished">Amplificar:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Startpoint:</source>
+ <translation type="unfinished">Punto inicial:</translation>
+ </message>
+ <message>
+ <source>Endpoint:</source>
+ <translation type="unfinished">Punto final:</translation>
+ </message>
+ <message>
+ <source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amplify:</source>
- <translation type="unfinished">Amplificar:</translation>
+ <source>Disable loop</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Startpoint:</source>
- <translation type="unfinished">Punto inicial:</translation>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
- <translation type="unfinished">Punto final:</translation>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -365,6 +439,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -396,6 +474,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -405,6 +487,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -517,6 +652,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished">PasoBajo</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished">PasoAlto</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished">PasoBanda csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">PasoBanda czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">Notch</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">PasaTodo</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished">2x PasoBajo</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -880,6 +1141,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1008,25 +1273,88 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
+ <source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Alias-free oscillators</source>
- <translation type="unfinished"></translation>
+ <source>Cancel</source>
+ <translation type="unfinished">Cancelar</translation>
</message>
<message>
- <source>Start</source>
+ <source>Export as loop (remove end silence)</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowser</name>
<message>
- <source>Cancel</source>
- <translation type="unfinished">Cancelar</translation>
+ <source>Browser</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Export as loop (remove end silence)</source>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&Ayuda</translation>
+ </message>
</context>
<context>
<name>FxMixer</name>
@@ -1053,6 +1381,9 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>FX-Mixer</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
<translation type="unfinished"></translation>
@@ -1067,6 +1398,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
@@ -1124,6 +1462,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Sync</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1566,6 +1908,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1628,6 +1982,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1774,6 +2140,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1860,10 +2230,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished">Click aquí, si quiere guardar la configuración del canal en una plantilla. Después podrá cargarlo haciendo doble click en el navegador de plantillas.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished"></translation>
</message>
@@ -1936,15 +2302,19 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">PLUGIN</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
+ <source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pitch range (semitones)</source>
+ <source>RANGE</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RANGE</source>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1993,6 +2363,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2352,10 +2729,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2375,6 +2748,22 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2491,974 +2880,2233 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation type="unfinished">Osc. %1 Volumen</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation type="unfinished">Osc %1 encuadramiento</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation type="unfinished">Osc %1 desintonización gruesa</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation type="unfinished">Osc %1 desintonización fina izquierda</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation type="unfinished">Osc %1 desintonización fina derecha</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation type="unfinished">Osc %1 fase de compensación</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation type="unfinished">Osc %1 fase de desintonización</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
+ <source>Osc 1 Sync send on rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
+ <source>Osc 1 Sync send on fall</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
+ <source>Osc 2 Volume</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
+ <source>Osc 2 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <source>Osc 2 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
+ <source>Osc 2 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
+ <source>Osc 2 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <source>Osc 2 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
+ <source>Osc 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
+ <source>Osc 2 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <source>Osc 2 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
+ <source>Osc 3 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
+ <source>Osc 3 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
+ <source>Osc 3 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
+ <source>Osc 3 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
+ <source>Osc 3 Waveform 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
+ <source>Osc 3 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
+ <source>Osc 3 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
+ <source>LFO 1 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation type="unfinished">Cantidad de modulación:</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
- <translation type="unfinished">Ataque:</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
- <translation type="unfinished">Release:</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
+ <source>Env 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation type="unfinished">Cantidad de modulación</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
+ <source>Env 1 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
+ <source>Env 2 Attack</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
+ <source>Env 2 Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
+ <source>Env 2 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error while loading plugin</source>
- <translation type="unfinished">Error al cargar plugin</translation>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
+ <source>Env 2 Release</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
+ <source>Env 2 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation type="unfinished">Archivo OGG comprimido (*.ogg)</translation>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
+ <source>Selected view</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
+ <source>Vol1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
+ <source>Vol1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eb</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D#</source>
- <comment>Note name</comment>
+ <source>Vol2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E</source>
- <comment>Note name</comment>
+ <source>Vol2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Fb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>F#</source>
- <comment>Note name</comment>
+ <source>Vol3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G</source>
- <comment>Note name</comment>
+ <source>Vol3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ab</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G#</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A</source>
- <comment>Note name</comment>
+ <source>Phs1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Bb</source>
- <comment>Note name</comment>
+ <source>Phs1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A#</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>B</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWidget</name>
<message>
- <source>Name: </source>
+ <source>Phs2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Maker: </source>
+ <source>Phs2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Copyright: </source>
+ <source>Phs2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Requires Real Time: </source>
+ <source>Phs2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
+ <source>Phs3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
+ <source>Phs3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Real Time Capable: </source>
+ <source>Phs3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>In Place Broken: </source>
+ <source>Phs3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels In: </source>
+ <source>Pit1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels Out: </source>
+ <source>Pit1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>File: </source>
+ <source>Pit1-LFO1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleBuffer</name>
<message>
- <source>Open audio file</source>
- <translation type="unfinished">Abrir archivo de audio</translation>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
+ <source>Pit2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wave-Files (*.wav)</source>
- <translation type="unfinished">Archivos Wave (*.wav)</translation>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>OGG-Files (*.ogg)</source>
- <translation type="unfinished">Archivos OGG (*.ogg)</translation>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DrumSynth-Files (*.ds)</source>
+ <source>Pit2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>FLAC-Files (*.flac)</source>
+ <source>Pit3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>SPEEX-Files (*.spx)</source>
+ <source>Pit3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
+ <source>Pit3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VOC-Files (*.voc)</source>
- <translation type="unfinished">Archivos VOC (*.voc)</translation>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AIFF-Files (*.aif *.aiff)</source>
- <translation type="unfinished">Archivos AIFF (*.aif *.aiff)</translation>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AU-Files (*.au)</source>
- <translation type="unfinished">Archivos AU (*.au)</translation>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RAW-Files (*.raw)</source>
- <translation type="unfinished">Archivos RAW (*.raw)</translation>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTCOView</name>
+ <name>MonstroView</name>
<message>
- <source>double-click to select sample</source>
- <translation type="unfinished">doble click para seleccionar ejemplo</translation>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">Cortar</translation>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">Copiar</translation>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">Pegar</translation>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Set/clear record</source>
+ <source>Modulate frequency of Osc3 with Osc2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleTrack</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">Pista de ejemplo</translation>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume</source>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleTrackView</name>
<message>
- <source>Track volume</source>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">Volumen del canal</translation>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VOL</source>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TempoSyncKnob</name>
<message>
- <source>Tempo Sync</source>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No Sync</source>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eight beats</source>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Whole note</source>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Half note</source>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Quarter note</source>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>8th note</source>
+ <source>Choose waveform for oscillator 2. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>16th note</source>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>32nd note</source>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Custom...</source>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&Help</source>
- <translation type="unfinished">&Ayuda</translation>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Custom </source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Eight Beats</source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Whole Note</source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Half Note</source>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Quarter Note</source>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 8th Note</source>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 16th Note</source>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 32nd Note</source>
+ <source>PHS controls the phase offset of the LFO. </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TimeDisplayWidget</name>
<message>
- <source>click to change time units</source>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TrackContainer</name>
+ <name>NesInstrument</name>
<message>
- <source>Couldn't import file</source>
+ <source>Channel 1 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't find a filter for importing file %1.
-You should convert this file into a format supported by LMMS using another software.</source>
+ <source>Channel 1 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't open file</source>
+ <source>Channel 1 Envelope length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't open file %1 for reading.
-Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
+ <source>Channel 1 Duty cycle</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading project...</source>
- <translation type="unfinished">Cargando proyecto...</translation>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="unfinished">Cancelar</translation>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait...</source>
- <translation type="unfinished">Por favor, espere...</translation>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Importing MIDI-file...</source>
- <translation type="unfinished">Importar archivo MIDI...</translation>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Importing FLP-file...</source>
+ <source>Channel 2 Envelope length</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TripleOscillatorView</name>
<message>
- <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Channel 2 Duty cycle</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Channel 2 Sweep amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 1 & 2</source>
+ <source>Channel 2 Sweep rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 1 with oscillator 2</source>
+ <source>Channel 3 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Channel 3 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Channel 4 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Channel 4 Envelope length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 2 & 3</source>
+ <source>Channel 4 Noise frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 2 with oscillator 3</source>
+ <source>Channel 4 Noise frequency sweep</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Master volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 volume:</source>
- <translation type="unfinished">Osc %1 Volumen:</translation>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>OscillatorObject</name>
<message>
- <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
- <translation type="unfinished">Con este control usted puede establecer el volumen del oscilador %1. Al fijar un valor de 0 se apaga. De lo contrario usted podrá oir al oscilador tan alto como lo especifique aquí.</translation>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished">Osc. %1 Volumen</translation>
</message>
<message>
- <source>Osc %1 panning:</source>
- <translation type="unfinished">Osc %1 encuadramiento:</translation>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished">Osc %1 encuadramiento</translation>
</message>
<message>
- <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
- <translation type="unfinished">Con este control usted podrá establecer el encuadramiento del oscilador %1. Un valor de -100 significa 100% a la izquierda y un valor de 100 mueve el oscilador totalmente a la derecha.</translation>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished">Osc %1 desintonización gruesa</translation>
</message>
<message>
- <source>Osc %1 coarse detuning:</source>
- <translation type="unfinished">Osc %1 desintonización gruesa:</translation>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished">Osc %1 desintonización fina izquierda</translation>
</message>
<message>
- <source>semitones</source>
- <translation type="unfinished">semitonos</translation>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished">Osc %1 desintonización fina derecha</translation>
</message>
<message>
- <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
- <translation type="unfinished">Con este control usted podrá establecer la desintonización gruesa del oscilador %1. Usted puede desintonizar el oscilador 12 semitonos (1 octava) arriba y abajo. Esto es útil para la creación de sonidos con acorde.</translation>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished">Osc %1 fase de compensación</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation type="unfinished">Osc %1 desintonización fina izquierda:</translation>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished">Osc %1 fase de desintonización</translation>
</message>
<message>
- <source>cents</source>
- <translation type="unfinished">cents</translation>
+ <source>Osc %1 wave shape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation type="unfinished">Abrir en piano-roll</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation type="unfinished">Borrar todas las notas</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation type="unfinished">Cambiar nombre</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished">Cantidad de modulación:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished">Ataque:</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished">Release:</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished">Cantidad de modulación</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Cortar las notas seleccionadas (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Copiar las notas seleccionadas (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Pegar notas desde el portapapeles (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Reproducir/Pausar el patrón actual (Espaciador)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Detener la reproducción del patrón actual (Espaciador)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Piano Roll - ningún patrón</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Por favor abra el patrón haciendo doble click sobre él!</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation type="unfinished">Piano-Roll - %1</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation type="unfinished">Error al cargar plugin</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation type="unfinished">Archivo OGG comprimido (*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maker: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copyright: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Requires Real Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Real Time Capable: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In Place Broken: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels In: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels Out: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleBuffer</name>
+ <message>
+ <source>Open audio file</source>
+ <translation type="unfinished">Abrir archivo de audio</translation>
+ </message>
+ <message>
+ <source>Wave-Files (*.wav)</source>
+ <translation type="unfinished">Archivos Wave (*.wav)</translation>
+ </message>
+ <message>
+ <source>OGG-Files (*.ogg)</source>
+ <translation type="unfinished">Archivos OGG (*.ogg)</translation>
+ </message>
+ <message>
+ <source>DrumSynth-Files (*.ds)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FLAC-Files (*.flac)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SPEEX-Files (*.spx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VOC-Files (*.voc)</source>
+ <translation type="unfinished">Archivos VOC (*.voc)</translation>
+ </message>
+ <message>
+ <source>AIFF-Files (*.aif *.aiff)</source>
+ <translation type="unfinished">Archivos AIFF (*.aif *.aiff)</translation>
+ </message>
+ <message>
+ <source>AU-Files (*.au)</source>
+ <translation type="unfinished">Archivos AU (*.au)</translation>
+ </message>
+ <message>
+ <source>RAW-Files (*.raw)</source>
+ <translation type="unfinished">Archivos RAW (*.raw)</translation>
+ </message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTCOView</name>
+ <message>
+ <source>double-click to select sample</source>
+ <translation type="unfinished">doble click para seleccionar ejemplo</translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">Cortar</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">Copiar</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">Pegar</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">Pista de ejemplo</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished">Volumen del canal</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Click aquí si usted desea detener la reproducción de su canción. El marcador de posición de la canción va a ser puesta al inicio de la canción.</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>No se puede abrir el archivo</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>No se puede escribir en el archivo</translation>
+ </message>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Editor de canción</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Click aquí, si usted desea reproducir su canción completa. La reproducción se iniciara en el marcador de posición (verde). Usted puede también moverla mientras se reproduce.</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Reproducir canción (Espaciador)</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Detener canción (Espaciador)</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Agregar beat/bassline</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Agregar pista de ejemplo.</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">tiempo de canción</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation type="unfinished">tono principal</translation>
+ </message>
+ <message>
+ <source>Value: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControlDialog</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControls</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TempoSyncKnob</name>
+ <message>
+ <source>Tempo Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eight beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Whole note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Quarter note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>8th note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>16th note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>32nd note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Custom...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&Ayuda</translation>
+ </message>
+ <message>
+ <source>Custom </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Eight Beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Whole Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Half Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Quarter Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 8th Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 16th Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 32nd Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimeDisplayWidget</name>
+ <message>
+ <source>click to change time units</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TrackContainer</name>
+ <message>
+ <source>Couldn't import file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't find a filter for importing file %1.
+You should convert this file into a format supported by LMMS using another software.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't open file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't open file %1 for reading.
+Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading project...</source>
+ <translation type="unfinished">Cargando proyecto...</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">Cancelar</translation>
+ </message>
+ <message>
+ <source>Please wait...</source>
+ <translation type="unfinished">Por favor, espere...</translation>
+ </message>
+ <message>
+ <source>Importing MIDI-file...</source>
+ <translation type="unfinished">Importar archivo MIDI...</translation>
+ </message>
+ <message>
+ <source>Importing FLP-file...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TripleOscillatorView</name>
+ <message>
+ <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of oscillator 1 & 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synchronize oscillator 1 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of oscillator 2 & 3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synchronize oscillator 2 with oscillator 3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 volume:</source>
+ <translation type="unfinished">Osc %1 Volumen:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
+ <translation type="unfinished">Con este control usted puede establecer el volumen del oscilador %1. Al fijar un valor de 0 se apaga. De lo contrario usted podrá oir al oscilador tan alto como lo especifique aquí.</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning:</source>
+ <translation type="unfinished">Osc %1 encuadramiento:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
+ <translation type="unfinished">Con este control usted podrá establecer el encuadramiento del oscilador %1. Un valor de -100 significa 100% a la izquierda y un valor de 100 mueve el oscilador totalmente a la derecha.</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning:</source>
+ <translation type="unfinished">Osc %1 desintonización gruesa:</translation>
+ </message>
+ <message>
+ <source>semitones</source>
+ <translation type="unfinished">semitonos</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
+ <translation type="unfinished">Con este control usted podrá establecer la desintonización gruesa del oscilador %1. Usted puede desintonizar el oscilador 12 semitonos (1 octava) arriba y abajo. Esto es útil para la creación de sonidos con acorde.</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left:</source>
+ <translation type="unfinished">Osc %1 desintonización fina izquierda:</translation>
+ </message>
+ <message>
+ <source>cents</source>
+ <translation type="unfinished">cents</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished">Con este control usted podra establecer la desintonización fina del oscilador %1 para el canal derecho
+La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es útil para la creación de sonidos \"gordos\".</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right:</source>
+ <translation type="unfinished">Osc %1 desintonización fina derecha:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished">Con este control usted podrá establecer la desintonización fina del oscilador %1 para el canal derecho. La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es útil para la creación de sonidos \"gordos\".</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset:</source>
+ <translation type="unfinished">Osc %1 fase de compensación:</translation>
+ </message>
+ <message>
+ <source>degrees</source>
+ <translation type="unfinished">grados</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <translation type="unfinished">Con este control usted podrá establecer la fase de compensación del oscilador %1. Esto significa que usted puede mover el punto dentro de una oscilación donde el oscilador comienza a oscilar. Por ejemplo si usted tiene una onda senoidal y tiene una fase de compensación de 180 grados, la onda ira primero abajo. Lo mismo sucede con una onda cuadrada.</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a sine-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a triangle-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a square-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a moog-like saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use an exponential wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use white-noise for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a user-defined waveform for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Ui</name>
+ <message>
+ <source>Contributors ordered by number of commits:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Involved</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VersionedSaveDialog</name>
+ <message>
+ <source>Increment version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrement version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VestigeInstrumentView</name>
+ <message>
+ <source>Open other VST-plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn off all notes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DLL-files (*.dll)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EXE-files (*.exe)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
- <translation type="unfinished">Con este control usted podra establecer la desintonización fina del oscilador %1 para el canal derecho
-La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es útil para la creación de sonidos \"gordos\".</translation>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right:</source>
- <translation type="unfinished">Osc %1 desintonización fina derecha:</translation>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
- <translation type="unfinished">Con este control usted podrá establecer la desintonización fina del oscilador %1 para el canal derecho. La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es útil para la creación de sonidos \"gordos\".</translation>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset:</source>
- <translation type="unfinished">Osc %1 fase de compensación:</translation>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>degrees</source>
- <translation type="unfinished">grados</translation>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
- <translation type="unfinished">Con este control usted podrá establecer la fase de compensación del oscilador %1. Esto significa que usted puede mover el punto dentro de una oscilación donde el oscilador comienza a oscilar. Por ejemplo si usted tiene una onda senoidal y tiene una fase de compensación de 180 grados, la onda ira primero abajo. Lo mismo sucede con una onda cuadrada.</translation>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning:</source>
+ <source>Failed loading VST plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
<message>
- <source>Use a sine-wave for current oscillator.</source>
+ <source>Volume A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a triangle-wave for current oscillator.</source>
+ <source>Volume A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a saw-wave for current oscillator.</source>
+ <source>Volume B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a square-wave for current oscillator.</source>
+ <source>Volume B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a moog-like saw-wave for current oscillator.</source>
+ <source>Panning A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use an exponential wave for current oscillator.</source>
+ <source>Panning A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use white-noise for current oscillator.</source>
+ <source>Panning B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a user-defined waveform for current oscillator.</source>
+ <source>Panning B2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Ui</name>
<message>
- <source>Contributors ordered by number of commits:</source>
+ <source>Freq. multiplier A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Involved</source>
+ <source>Freq. multiplier A2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VersionedSaveDialog</name>
<message>
- <source>Increment version number</source>
+ <source>Freq. multiplier B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decrement version number</source>
+ <source>Freq. multiplier B2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VestigeInstrumentView</name>
<message>
- <source>Open other VST-plugin</source>
+ <source>Left detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <source>Left detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show/hide GUI</source>
+ <source>Left detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <source>Left detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Turn off all notes</source>
+ <source>Right detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin</source>
+ <source>Right detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DLL-files (*.dll)</source>
+ <source>Right detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>EXE-files (*.exe)</source>
+ <source>Right detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
+ <source>A-B Mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>A-B Mix envelope amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>A-B Mix envelope attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>A-B Mix envelope hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>A-B Mix envelope decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>A1-B2 Crosstalk</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>A2-A1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynView</name>
<message>
- <source>Next (+)</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstEffectControlDialog</name>
<message>
- <source>Show/hide</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Modulate amplitude of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Load waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>Click to load a waveform from a sample file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Phase left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Click to shift phase by -15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
+ <source>Click to shift phase by +15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
+ <source>Normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
+ <source>Click to normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
+ <source>Invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
+ <source>Triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
+ <source>Square wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3587,53 +5235,31 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation type="unfinished"></translation>
- </message>
<message>
- <source>Gain:</source>
+ <source>Loopback point</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
+ <source>Loop mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio:</source>
+ <source>Interpolation mode</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
+ <source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Linear</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
+ <source>Sinc</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3694,6 +5320,10 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<source>Change color</source>
<translation type="unfinished">Cambiar color</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3789,6 +5419,120 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3812,101 +5556,115 @@ Please make sure you have write-permission to the file and the directory contain
<translation type="unfinished"></translation>
</message>
<message>
- <source>Export project to %1</source>
- <translation type="unfinished">Exportar proyecto a %1</translation>
+ <source>Export project to %1</source>
+ <translation type="unfinished">Exportar proyecto a %1</translation>
+ </message>
+</context>
+<context>
+ <name>fader</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>graphModel</name>
+ <message>
+ <source>Graph</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>kickerInstrument</name>
+ <message>
+ <source>Start frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>fader</name>
<message>
- <source>Please enter a new value between %1 and %2:</source>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>fileBrowser</name>
<message>
- <source>Browser</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>fileBrowserTreeWidget</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>Envelope Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Noise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Click</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Frequency Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Start from note</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
+ <source>End to note</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
+ <source>Start frequency:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency</source>
+ <source>End frequency:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Gain:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
+ <source>Frequency Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Envelope Length:</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Start frequency:</source>
+ <source>Envelope Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
+ <source>Click:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
- <translation type="unfinished">Decay:</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
+ <source>Distortion Start:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
+ <source>Distortion End:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4183,6 +5941,38 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<source>Click here for white-noise.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4778,13 +6568,29 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation type="unfinished">Osc %1 encuadramiento:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation type="unfinished">Osc %1 desintonización fina izquierda:</translation>
- </message>
- <message>
<source>cents</source>
<translation type="unfinished">cents</translation>
</message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>papuInstrument</name>
@@ -5053,335 +6859,162 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>No se puede congelar el patrón</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>El patrón actual no puede ser congelado debido a que usted esta en el modo de reproducción. Por favor detenga la reproducción y vuelva a intentarlo!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Congelando patrón...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Cancelar</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation type="unfinished">Abrir en piano-roll</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation type="unfinished">Borrar todas las notas</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Change name</source>
- <translation type="unfinished">Cambiar nombre</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation type="unfinished">Recongelar</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation type="unfinished">Congelar</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation type="unfinished">Descongelar</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Cortar las notas seleccionadas (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Copiar las notas seleccionadas (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Pegar notas desde el portapapeles (Ctrl+V)</translation>
- </message>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Reproducir/Pausar el patrón actual (Espaciador)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Detener la reproducción del patrón actual (Espaciador)</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Piano Roll - ningún patrón</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Por favor abra el patrón haciendo doble click sobre él!</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation type="unfinished">Piano-Roll - %1</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Last note</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>pluginBrowser</name>
<message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <source>no description</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <source>Instrument plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <source>Incomplete monophonic imitation tb303</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark/unmark current semitone</source>
+ <source>Plugin for freely manipulating stereo output</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current scale</source>
+ <source>Plugin for controlling knobs with sound peaks</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current chord</source>
+ <source>Plugin for enhancing stereo separation of a stereo input file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Unmark all</source>
+ <source>List installed LADSPA plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No scale</source>
+ <source>Filter for importing FL Studio projects into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No chord</source>
+ <source>GUS-compatible patch instrument</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>pluginBrowser</name>
<message>
- <source>no description</source>
+ <source>Additive Synthesizer for organ-like sounds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument plugins</source>
+ <source>Tuneful things to bang on</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Incomplete monophonic imitation tb303</source>
+ <source>VST-host for using VST(i)-plugins within LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for freely manipulating stereo output</source>
+ <source>Vibrating string modeler</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for controlling knobs with sound peaks</source>
+ <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <source>Filter for importing MIDI-files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>List installed LADSPA plugins</source>
+ <source>Instrument browser</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing FL Studio projects into LMMS</source>
+ <source>Emulation of the MOS6581 and MOS8580 SID.
+This chip was used in the Commodore 64 computer.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
+ <source>Player for SoundFont files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>GUS-compatible patch instrument</source>
+ <source>Emulation of GameBoy (TM) APU</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
+ <source>Customizable wavetable synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Additive Synthesizer for organ-like sounds</source>
+ <source>Embedded ZynAddSubFX</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for boosting bass</source>
+ <source>2-operator FM Synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tuneful things to bang on</source>
+ <source>Filter for importing Hydrogen files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VST-host for using VST(i)-plugins within LMMS</source>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vibrating string modeler</source>
+ <source>Three powerful oscillators you can modulate in several ways</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
+ <source>A native amplifier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing MIDI-files into LMMS</source>
+ <source>Carla Rack Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument browser</source>
+ <source>4-oscillator modulatable wavetable synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <source>plugin for waveshaping</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of the MOS6581 and MOS8580 SID.
-This chip was used in the Commodore 64 computer.</source>
+ <source>Boost your bass the fast and simple way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Player for SoundFont files</source>
+ <source>Versatile drum synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of GameBoy (TM) APU</source>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Customizable wavetable synthesizer</source>
+ <source>plugin for processing dynamics in a flexible way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Embedded ZynAddSubFX</source>
+ <source>Carla Patchbay Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>2-operator FM Synth</source>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing Hydrogen files into LMMS</source>
+ <source>Graphical spectrum analyzer plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS port of sfxr</source>
+ <source>A NES-like synthesizer</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -6082,152 +7715,6 @@ Latency: %2 ms</source>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Click aquí si usted desea detener la reproducción de su canción. El marcador de posición de la canción va a ser puesta al inicio de la canción.</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>No se puede abrir el archivo</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>No se puede escribir en el archivo</translation>
- </message>
- <message>
- <source>Song-Editor</source>
- <translation>Editor de canción</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Click aquí, si usted desea reproducir su canción completa. La reproducción se iniciara en el marcador de posición (verde). Usted puede también moverla mientras se reproduce.</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Reproducir canción (Espaciador)</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Detener canción (Espaciador)</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Agregar beat/bassline</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Agregar pista de ejemplo.</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">tiempo de canción</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished">tono principal</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6413,6 +7900,18 @@ Latency: %2 ms</source>
<source>Remove this track</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6730,4 +8229,74 @@ The LED in the lower right corner of the waveform editor determines whether the
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/fa.qm b/data/locale/fa.qm
index 97c0f1f..dcd394b 100644
Binary files a/data/locale/fa.qm and b/data/locale/fa.qm differ
diff --git a/data/locale/fa.ts b/data/locale/fa.ts
index 24fee5a..83b1202 100644
--- a/data/locale/fa.ts
+++ b/data/locale/fa.ts
@@ -8,10 +8,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation type="unfinished"></translation>
</message>
@@ -46,7 +42,65 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -80,43 +134,63 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished">اگر این دکمه را فعال کنید,تمام نمونه معکوس می شود.این برای جلوه های جالب مانند یک تصادف معکوس مناسب است.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
+ <source>Amplify:</source>
+ <translation type="unfinished">تقویت:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Startpoint:</source>
+ <translation type="unfinished">نقطه ی شروع:</translation>
+ </message>
+ <message>
+ <source>Endpoint:</source>
+ <translation type="unfinished">نقطه ی پایان:</translation>
+ </message>
+ <message>
+ <source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amplify:</source>
- <translation type="unfinished">تقویت:</translation>
+ <source>Disable loop</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Startpoint:</source>
- <translation type="unfinished">نقطه ی شروع:</translation>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
- <translation type="unfinished">نقطه ی پایان:</translation>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -365,6 +439,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -396,6 +474,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -405,6 +487,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -517,6 +652,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished">پایین گذر</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished">بالا گذر</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished">میان گذر csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">میان گذر czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">نچ</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">تمام گذر</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">موگ Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished">پایین گذر 2x</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -880,6 +1141,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1008,25 +1273,88 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
+ <source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Alias-free oscillators</source>
- <translation type="unfinished"></translation>
+ <source>Cancel</source>
+ <translation type="unfinished">لغو</translation>
</message>
<message>
- <source>Start</source>
+ <source>Export as loop (remove end silence)</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowser</name>
<message>
- <source>Cancel</source>
- <translation type="unfinished">لغو</translation>
+ <source>Browser</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Export as loop (remove end silence)</source>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&راهنما</translation>
+ </message>
</context>
<context>
<name>FxMixer</name>
@@ -1053,6 +1381,9 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>FX-Mixer</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
<translation type="unfinished"></translation>
@@ -1067,6 +1398,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
@@ -1124,6 +1462,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Sync</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1566,6 +1908,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1628,6 +1982,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1774,6 +2140,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1860,10 +2230,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished">اگر می خواهید تنظیمات کانال جاری را در پرونده-از قبل چیده شده ذخیره کنید اینجا را کلیک کنید.بعدا شما می توانید این چیده شده را در مرور گر از پیش چیده شده بار گذاری کنید.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished"></translation>
</message>
@@ -1936,15 +2302,19 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">اضافات</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
+ <source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pitch range (semitones)</source>
+ <source>RANGE</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RANGE</source>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1993,6 +2363,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2352,10 +2729,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2375,6 +2748,22 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2491,973 +2880,2232 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation type="unfinished">حجم نوسان ساز %1</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation type="unfinished">تراز نوسان ساز %1</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation type="unfinished">کوک زمختی نوسان ساز %1</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation type="unfinished">کوک دقیق چپ نوسان ساز %1</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation type="unfinished">کوک دقیق راست نوسان ساز %1</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation type="unfinished">انحراف فاز نوسان ساز %1</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation type="unfinished">کوک فاز استریوی نوسان ساز %1</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
+ <source>Osc 1 Sync send on rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
+ <source>Osc 1 Sync send on fall</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
+ <source>Osc 2 Volume</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
+ <source>Osc 2 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <source>Osc 2 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
+ <source>Osc 2 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
+ <source>Osc 2 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <source>Osc 2 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
+ <source>Osc 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
+ <source>Osc 2 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <source>Osc 2 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
+ <source>Osc 3 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
+ <source>Osc 3 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
+ <source>Osc 3 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
+ <source>Osc 3 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
+ <source>Osc 3 Waveform 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
+ <source>Osc 3 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
+ <source>Osc 3 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
+ <source>LFO 1 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation type="unfinished">میزان مدولاسیون:</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
- <translation type="unfinished">تهاجم(Attack):</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
- <translation type="unfinished">رهایی(Release):</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
+ <source>Env 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation type="unfinished">مقدار مدولاسیون</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
+ <source>Env 1 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
+ <source>Env 2 Attack</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
+ <source>Env 2 Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
+ <source>Env 2 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error while loading plugin</source>
- <translation type="unfinished">در بارگذاری اضافات اشتباه رخ داد</translation>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
+ <source>Env 2 Release</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
+ <source>Env 2 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation type="unfinished">پرونده ی OGG فشرده شده(*.ogg)</translation>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
+ <source>Selected view</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
+ <source>Vol1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
+ <source>Vol1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eb</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D#</source>
- <comment>Note name</comment>
+ <source>Vol2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E</source>
- <comment>Note name</comment>
+ <source>Vol2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Fb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>F#</source>
- <comment>Note name</comment>
+ <source>Vol3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G</source>
- <comment>Note name</comment>
+ <source>Vol3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ab</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G#</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A</source>
- <comment>Note name</comment>
+ <source>Phs1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Bb</source>
- <comment>Note name</comment>
+ <source>Phs1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A#</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>B</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWidget</name>
<message>
- <source>Name: </source>
+ <source>Phs2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Maker: </source>
+ <source>Phs2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Copyright: </source>
+ <source>Phs2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Requires Real Time: </source>
+ <source>Phs2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
+ <source>Phs3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
+ <source>Phs3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Real Time Capable: </source>
+ <source>Phs3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>In Place Broken: </source>
+ <source>Phs3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels In: </source>
+ <source>Pit1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels Out: </source>
+ <source>Pit1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>File: </source>
+ <source>Pit1-LFO1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleBuffer</name>
<message>
- <source>Open audio file</source>
- <translation type="unfinished">باز کردن پرونده ی صوتی</translation>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
+ <source>Pit2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wave-Files (*.wav)</source>
- <translation type="unfinished"> Wave- پرونده های(*.wav)</translation>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>OGG-Files (*.ogg)</source>
- <translation type="unfinished">OGG-پرونده های (*.ogg)</translation>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DrumSynth-Files (*.ds)</source>
+ <source>Pit2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>FLAC-Files (*.flac)</source>
+ <source>Pit3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>SPEEX-Files (*.spx)</source>
+ <source>Pit3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
+ <source>Pit3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VOC-Files (*.voc)</source>
- <translation type="unfinished">VOC-پرونده های (*.voc)</translation>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AIFF-Files (*.aif *.aiff)</source>
- <translation type="unfinished">AIFF-پرونده های (*.aif *.aiff)</translation>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AU-Files (*.au)</source>
- <translation type="unfinished">AU-پرونده های (*.au)</translation>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RAW-Files (*.raw)</source>
- <translation type="unfinished">RAW-پرونده های (*.raw)</translation>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTCOView</name>
+ <name>MonstroView</name>
<message>
- <source>double-click to select sample</source>
- <translation type="unfinished">برای انتخاب نمونه دوبار کلیک کنید</translation>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">برش</translation>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">کپی</translation>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">چسباندن</translation>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Set/clear record</source>
+ <source>Modulate frequency of Osc3 with Osc2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleTrack</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">تراک نمونه</translation>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume</source>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleTrackView</name>
<message>
- <source>Track volume</source>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">حجم کانال:</translation>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VOL</source>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TempoSyncKnob</name>
<message>
- <source>Tempo Sync</source>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No Sync</source>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eight beats</source>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Whole note</source>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Half note</source>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Quarter note</source>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>8th note</source>
+ <source>Choose waveform for oscillator 2. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>16th note</source>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>32nd note</source>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Custom...</source>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&Help</source>
- <translation type="unfinished">&راهنما</translation>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Custom </source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Eight Beats</source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Whole Note</source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Half Note</source>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Quarter Note</source>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 8th Note</source>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 16th Note</source>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 32nd Note</source>
+ <source>PHS controls the phase offset of the LFO. </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TimeDisplayWidget</name>
<message>
- <source>click to change time units</source>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TrackContainer</name>
+ <name>NesInstrument</name>
<message>
- <source>Couldn't import file</source>
+ <source>Channel 1 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't find a filter for importing file %1.
-You should convert this file into a format supported by LMMS using another software.</source>
+ <source>Channel 1 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't open file</source>
+ <source>Channel 1 Envelope length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't open file %1 for reading.
-Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
+ <source>Channel 1 Duty cycle</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading project...</source>
- <translation type="unfinished">بارگذاری پروژه...</translation>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="unfinished">لغو</translation>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait...</source>
- <translation type="unfinished">لطفا صبر کنید...</translation>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Importing MIDI-file...</source>
- <translation type="unfinished">وارد کردن پرونده ی MIDI...</translation>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Importing FLP-file...</source>
+ <source>Channel 2 Envelope length</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TripleOscillatorView</name>
<message>
- <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Channel 2 Duty cycle</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Channel 2 Sweep amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 1 & 2</source>
+ <source>Channel 2 Sweep rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 1 with oscillator 2</source>
+ <source>Channel 3 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Channel 3 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Channel 4 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Channel 4 Envelope length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 2 & 3</source>
+ <source>Channel 4 Noise frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 2 with oscillator 3</source>
+ <source>Channel 4 Noise frequency sweep</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Master volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 volume:</source>
- <translation type="unfinished">حجم نوسان ساز %1:</translation>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>OscillatorObject</name>
<message>
- <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
- <translation type="unfinished">با این دستگیره می توانید حجم نوسان ساز %1 را تنظیم کنید.هنگام تنظیم به ۰ ,نوسان ساز خاموش است.در غیر این صورت همان قدر که تنظیم کنید صدای نوسان سار را بلند خواهید شنید.</translation>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished">حجم نوسان ساز %1</translation>
</message>
<message>
- <source>Osc %1 panning:</source>
- <translation type="unfinished">تراز نوسان ساز %1:</translation>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished">تراز نوسان ساز %1</translation>
</message>
<message>
- <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
- <translation type="unfinished">با این دستگیره می توانید تراز نوسان ساز %1 را تنظیم کنید.مقدار ۱۰۰- یعنی ۱۰۰٪ چپ و مقدار ۱۰۰ خروجی نوسان ساز را به راست منتقل می کند.</translation>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished">کوک زمختی نوسان ساز %1</translation>
</message>
<message>
- <source>Osc %1 coarse detuning:</source>
- <translation type="unfinished">کوک زمختی نوسان ساز %1:</translation>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished">کوک دقیق چپ نوسان ساز %1</translation>
</message>
<message>
- <source>semitones</source>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished">کوک دقیق راست نوسان ساز %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished">انحراف فاز نوسان ساز %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished">کوک فاز استریوی نوسان ساز %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
- <translation type="unfinished">با این دستگیره می توانید کوک زمختی نوسان ساز %1 را تنظیم کنید.شما می توانید کوک نوسان ساز را در ۱۲ نیم صدا (۱ نت) بالا یا پایین کنید. این برای ایجاد صدا به همراه زه (Chord) مفید خواهد بود.</translation>
+ <source>Modulation type %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation type="unfinished">کوک دقیق چپ نوسان ساز %1:</translation>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
- <translation type="unfinished">درصد</translation>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
- <translation type="unfinished">با این دستگیره می توانید کانال چپ نوسان ساز %1 را کوک دقیق کنید.کوک دقیق بین ۱۰۰- در صد و ۱۰۰ در صد محدود شده است.این برای ایجاد صدا های چاق (fat) مفید است.</translation>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation type="unfinished">در غلتک پیانو باز کن</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation type="unfinished">پاک کردن تمامی نت ها</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation type="unfinished">باز نشانی نام</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation type="unfinished">تغییر نام</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished">میزان مدولاسیون:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished">تهاجم(Attack):</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished">رهایی(Release):</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished">مقدار مدولاسیون</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>برش نت های انتخاب شده(Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>کپی نت های انتخاب شده(Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>چسباندن نت ها از حافظه ی موقت(Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>پخش/مکث الگوی جاری (فاصله)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>توقف پخش الگوی جاری (فاصله)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>غلتک پیانو - %1</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>غلتک پیانو - بدون الگو</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>لطفا یک الگو را با دوبار کلیک روی أن باز کنید!</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation type="unfinished">در بارگذاری اضافات اشتباه رخ داد</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation type="unfinished">پرونده ی OGG فشرده شده(*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Maker: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copyright: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Requires Real Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Real Time Capable: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In Place Broken: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels In: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels Out: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleBuffer</name>
+ <message>
+ <source>Open audio file</source>
+ <translation type="unfinished">باز کردن پرونده ی صوتی</translation>
+ </message>
+ <message>
+ <source>Wave-Files (*.wav)</source>
+ <translation type="unfinished"> Wave- پرونده های(*.wav)</translation>
+ </message>
+ <message>
+ <source>OGG-Files (*.ogg)</source>
+ <translation type="unfinished">OGG-پرونده های (*.ogg)</translation>
+ </message>
+ <message>
+ <source>DrumSynth-Files (*.ds)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FLAC-Files (*.flac)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SPEEX-Files (*.spx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VOC-Files (*.voc)</source>
+ <translation type="unfinished">VOC-پرونده های (*.voc)</translation>
+ </message>
+ <message>
+ <source>AIFF-Files (*.aif *.aiff)</source>
+ <translation type="unfinished">AIFF-پرونده های (*.aif *.aiff)</translation>
+ </message>
+ <message>
+ <source>AU-Files (*.au)</source>
+ <translation type="unfinished">AU-پرونده های (*.au)</translation>
+ </message>
+ <message>
+ <source>RAW-Files (*.raw)</source>
+ <translation type="unfinished">RAW-پرونده های (*.raw)</translation>
+ </message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTCOView</name>
+ <message>
+ <source>double-click to select sample</source>
+ <translation type="unfinished">برای انتخاب نمونه دوبار کلیک کنید</translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">برش</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">کپی</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">چسباندن</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">تراک نمونه</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished">حجم کانال:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>اگر می خواهید پخش ترانه ی خود را متوقف کنید اینجا را کلیک کنید.سازنده موقعیت ترانه به شروع ترانه تنظیم خواهد شد.</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>پرونده باز نشد</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>پرونده نوشته نشد</translation>
+ </message>
+ <message>
+ <source>Song-Editor</source>
+ <translation>ویرایشگر ترانه</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>اگر می خواهید تمام ترانه ی خود را پخش کنید اینجا را کلیک کنید.پخش از محل سازنده ی موقعیت شروع خواهد شد(سبز).همچنین می توانید در حال پخش آن را جابجا کنید.</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>پخش ترانه(فاصله)</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>توقف ترانه (فاصله)</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>اضافه ی خط بم/تپش (beat/baseline)</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>اضافه ی باریکه ی نمونه</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">گام ترانه(tempo)</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation type="unfinished">دانگ صدا(Pitch)</translation>
+ </message>
+ <message>
+ <source>Value: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControlDialog</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControls</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TempoSyncKnob</name>
+ <message>
+ <source>Tempo Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eight beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Whole note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Quarter note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>8th note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>16th note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>32nd note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Custom...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&راهنما</translation>
+ </message>
+ <message>
+ <source>Custom </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Eight Beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Whole Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Half Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Quarter Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 8th Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 16th Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 32nd Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimeDisplayWidget</name>
+ <message>
+ <source>click to change time units</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TrackContainer</name>
+ <message>
+ <source>Couldn't import file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't find a filter for importing file %1.
+You should convert this file into a format supported by LMMS using another software.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't open file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't open file %1 for reading.
+Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading project...</source>
+ <translation type="unfinished">بارگذاری پروژه...</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">لغو</translation>
+ </message>
+ <message>
+ <source>Please wait...</source>
+ <translation type="unfinished">لطفا صبر کنید...</translation>
+ </message>
+ <message>
+ <source>Importing MIDI-file...</source>
+ <translation type="unfinished">وارد کردن پرونده ی MIDI...</translation>
+ </message>
+ <message>
+ <source>Importing FLP-file...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TripleOscillatorView</name>
+ <message>
+ <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of oscillator 1 & 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synchronize oscillator 1 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of oscillator 2 & 3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synchronize oscillator 2 with oscillator 3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 volume:</source>
+ <translation type="unfinished">حجم نوسان ساز %1:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
+ <translation type="unfinished">با این دستگیره می توانید حجم نوسان ساز %1 را تنظیم کنید.هنگام تنظیم به ۰ ,نوسان ساز خاموش است.در غیر این صورت همان قدر که تنظیم کنید صدای نوسان سار را بلند خواهید شنید.</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning:</source>
+ <translation type="unfinished">تراز نوسان ساز %1:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
+ <translation type="unfinished">با این دستگیره می توانید تراز نوسان ساز %1 را تنظیم کنید.مقدار ۱۰۰- یعنی ۱۰۰٪ چپ و مقدار ۱۰۰ خروجی نوسان ساز را به راست منتقل می کند.</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning:</source>
+ <translation type="unfinished">کوک زمختی نوسان ساز %1:</translation>
+ </message>
+ <message>
+ <source>semitones</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
+ <translation type="unfinished">با این دستگیره می توانید کوک زمختی نوسان ساز %1 را تنظیم کنید.شما می توانید کوک نوسان ساز را در ۱۲ نیم صدا (۱ نت) بالا یا پایین کنید. این برای ایجاد صدا به همراه زه (Chord) مفید خواهد بود.</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left:</source>
+ <translation type="unfinished">کوک دقیق چپ نوسان ساز %1:</translation>
+ </message>
+ <message>
+ <source>cents</source>
+ <translation type="unfinished">درصد</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished">با این دستگیره می توانید کانال چپ نوسان ساز %1 را کوک دقیق کنید.کوک دقیق بین ۱۰۰- در صد و ۱۰۰ در صد محدود شده است.این برای ایجاد صدا های چاق (fat) مفید است.</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right:</source>
+ <translation type="unfinished">کوک دقیق راست نوسان ساز %1:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished">با این دستگیره می توانید کانال راست نوسان ساز %1 را کوک دقیق کنید.کوک دقیق بین ۱۰۰- در صد و ۱۰۰ در صد محدود شده است.این برای ایجاد صدا های چاق (fat) مفید است.</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset:</source>
+ <translation type="unfinished">انحراف فاز نوسان ساز %1:</translation>
+ </message>
+ <message>
+ <source>degrees</source>
+ <translation type="unfinished">درجه ها</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <translation type="unfinished">با این دستگیره می توانید انحراف فاز نوسان ساز %1 را تنظیم کنید.این یعنی اینکه شما می توانید نقطه ی شروع نوسان نوسان ساز را جابجا کنید.برای مثال اگر یک موج سینوسی و انحراف فاز ۱۸۰ داشته باشید, موج در ابتدا به پایین می رود.برای موج مربعی نیز شبیه همین است.</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning:</source>
+ <translation type="unfinished">کوک فاز استریوی نوسان ساز %1:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a sine-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a triangle-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a square-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a moog-like saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use an exponential wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use white-noise for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a user-defined waveform for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Ui</name>
+ <message>
+ <source>Contributors ordered by number of commits:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Involved</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VersionedSaveDialog</name>
+ <message>
+ <source>Increment version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrement version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VestigeInstrumentView</name>
+ <message>
+ <source>Open other VST-plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn off all notes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DLL-files (*.dll)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EXE-files (*.exe)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right:</source>
- <translation type="unfinished">کوک دقیق راست نوسان ساز %1:</translation>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
- <translation type="unfinished">با این دستگیره می توانید کانال راست نوسان ساز %1 را کوک دقیق کنید.کوک دقیق بین ۱۰۰- در صد و ۱۰۰ در صد محدود شده است.این برای ایجاد صدا های چاق (fat) مفید است.</translation>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset:</source>
- <translation type="unfinished">انحراف فاز نوسان ساز %1:</translation>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>degrees</source>
- <translation type="unfinished">درجه ها</translation>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
- <translation type="unfinished">با این دستگیره می توانید انحراف فاز نوسان ساز %1 را تنظیم کنید.این یعنی اینکه شما می توانید نقطه ی شروع نوسان نوسان ساز را جابجا کنید.برای مثال اگر یک موج سینوسی و انحراف فاز ۱۸۰ داشته باشید, موج در ابتدا به پایین می رود.برای موج مربعی نیز شبیه همین است.</translation>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning:</source>
- <translation type="unfinished">کوک فاز استریوی نوسان ساز %1:</translation>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
<message>
- <source>Use a sine-wave for current oscillator.</source>
+ <source>Volume A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a triangle-wave for current oscillator.</source>
+ <source>Volume A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a saw-wave for current oscillator.</source>
+ <source>Volume B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a square-wave for current oscillator.</source>
+ <source>Volume B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a moog-like saw-wave for current oscillator.</source>
+ <source>Panning A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use an exponential wave for current oscillator.</source>
+ <source>Panning A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use white-noise for current oscillator.</source>
+ <source>Panning B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a user-defined waveform for current oscillator.</source>
+ <source>Panning B2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Ui</name>
<message>
- <source>Contributors ordered by number of commits:</source>
+ <source>Freq. multiplier A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Involved</source>
+ <source>Freq. multiplier A2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VersionedSaveDialog</name>
<message>
- <source>Increment version number</source>
+ <source>Freq. multiplier B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decrement version number</source>
+ <source>Freq. multiplier B2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VestigeInstrumentView</name>
<message>
- <source>Open other VST-plugin</source>
+ <source>Left detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <source>Left detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show/hide GUI</source>
+ <source>Left detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <source>Left detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Turn off all notes</source>
+ <source>Right detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin</source>
+ <source>Right detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DLL-files (*.dll)</source>
+ <source>Right detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>EXE-files (*.exe)</source>
+ <source>Right detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
+ <source>A-B Mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>A-B Mix envelope amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>A-B Mix envelope attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>A-B Mix envelope hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>A-B Mix envelope decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>A1-B2 Crosstalk</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>A2-A1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynView</name>
<message>
- <source>Next (+)</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstEffectControlDialog</name>
<message>
- <source>Show/hide</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Modulate amplitude of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Load waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>Click to load a waveform from a sample file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Phase left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Click to shift phase by -15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
+ <source>Click to shift phase by +15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
+ <source>Normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
+ <source>Click to normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
+ <source>Invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
+ <source>Triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
+ <source>Square wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3586,53 +5234,31 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation type="unfinished"></translation>
- </message>
<message>
- <source>Gain:</source>
+ <source>Loopback point</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
+ <source>Loop mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio:</source>
+ <source>Interpolation mode</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
+ <source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Linear</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
+ <source>Sinc</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3693,6 +5319,10 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<source>Change color</source>
<translation type="unfinished">تغییر رنگ</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3788,6 +5418,120 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3811,101 +5555,115 @@ Please make sure you have write-permission to the file and the directory contain
<translation type="unfinished"></translation>
</message>
<message>
- <source>Export project to %1</source>
- <translation type="unfinished">استخراج پرونده به %1</translation>
+ <source>Export project to %1</source>
+ <translation type="unfinished">استخراج پرونده به %1</translation>
+ </message>
+</context>
+<context>
+ <name>fader</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>graphModel</name>
+ <message>
+ <source>Graph</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>kickerInstrument</name>
+ <message>
+ <source>Start frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>fader</name>
<message>
- <source>Please enter a new value between %1 and %2:</source>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>fileBrowser</name>
<message>
- <source>Browser</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>fileBrowserTreeWidget</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>Envelope Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Noise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Click</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Frequency Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Start from note</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
+ <source>End to note</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
+ <source>Start frequency:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency</source>
+ <source>End frequency:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Gain:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
+ <source>Frequency Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Envelope Length:</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Start frequency:</source>
+ <source>Envelope Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
+ <source>Click:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
- <translation type="unfinished">محو شدن(Decay):</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
+ <source>Distortion Start:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
+ <source>Distortion End:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4182,6 +5940,38 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<source>Click here for white-noise.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4777,13 +6567,29 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation type="unfinished">تراز نوسان ساز %1:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation type="unfinished">کوک دقیق چپ نوسان ساز %1:</translation>
- </message>
- <message>
<source>cents</source>
<translation type="unfinished">درصد</translation>
</message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>papuInstrument</name>
@@ -5052,335 +6858,162 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>الگو منجمد نشد</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>الگوی جاری منجمد نشد زیرا شما در حالت پخش هستید.لطفا توقف کنید و دوباره تلاش کنید!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>انجماد الگو...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>لغو</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation type="unfinished">در غلتک پیانو باز کن</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation type="unfinished">پاک کردن تمامی نت ها</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation type="unfinished">باز نشانی نام</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation type="unfinished">تغییر نام</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation type="unfinished">انجماد مجدد</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation type="unfinished">انجماد</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation type="unfinished">نامنجمد</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>برش نت های انتخاب شده(Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>کپی نت های انتخاب شده(Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>چسباندن نت ها از حافظه ی موقت(Ctrl+V)</translation>
- </message>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>پخش/مکث الگوی جاری (فاصله)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>توقف پخش الگوی جاری (فاصله)</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>غلتک پیانو - %1</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>غلتک پیانو - بدون الگو</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>لطفا یک الگو را با دوبار کلیک روی أن باز کنید!</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Last note</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>pluginBrowser</name>
<message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <source>no description</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <source>Instrument plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <source>Incomplete monophonic imitation tb303</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark/unmark current semitone</source>
+ <source>Plugin for freely manipulating stereo output</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current scale</source>
+ <source>Plugin for controlling knobs with sound peaks</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current chord</source>
+ <source>Plugin for enhancing stereo separation of a stereo input file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Unmark all</source>
+ <source>List installed LADSPA plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No scale</source>
+ <source>Filter for importing FL Studio projects into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No chord</source>
+ <source>GUS-compatible patch instrument</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>pluginBrowser</name>
<message>
- <source>no description</source>
+ <source>Additive Synthesizer for organ-like sounds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument plugins</source>
+ <source>Tuneful things to bang on</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Incomplete monophonic imitation tb303</source>
+ <source>VST-host for using VST(i)-plugins within LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for freely manipulating stereo output</source>
+ <source>Vibrating string modeler</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for controlling knobs with sound peaks</source>
+ <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <source>Filter for importing MIDI-files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>List installed LADSPA plugins</source>
+ <source>Instrument browser</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing FL Studio projects into LMMS</source>
+ <source>Emulation of the MOS6581 and MOS8580 SID.
+This chip was used in the Commodore 64 computer.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
+ <source>Player for SoundFont files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>GUS-compatible patch instrument</source>
+ <source>Emulation of GameBoy (TM) APU</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
+ <source>Customizable wavetable synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Additive Synthesizer for organ-like sounds</source>
+ <source>Embedded ZynAddSubFX</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for boosting bass</source>
+ <source>2-operator FM Synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tuneful things to bang on</source>
+ <source>Filter for importing Hydrogen files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VST-host for using VST(i)-plugins within LMMS</source>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vibrating string modeler</source>
+ <source>Three powerful oscillators you can modulate in several ways</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
+ <source>A native amplifier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing MIDI-files into LMMS</source>
+ <source>Carla Rack Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument browser</source>
+ <source>4-oscillator modulatable wavetable synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <source>plugin for waveshaping</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of the MOS6581 and MOS8580 SID.
-This chip was used in the Commodore 64 computer.</source>
+ <source>Boost your bass the fast and simple way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Player for SoundFont files</source>
+ <source>Versatile drum synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of GameBoy (TM) APU</source>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Customizable wavetable synthesizer</source>
+ <source>plugin for processing dynamics in a flexible way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Embedded ZynAddSubFX</source>
+ <source>Carla Patchbay Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>2-operator FM Synth</source>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing Hydrogen files into LMMS</source>
+ <source>Graphical spectrum analyzer plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS port of sfxr</source>
+ <source>A NES-like synthesizer</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -6081,152 +7714,6 @@ Latency: %2 ms</source>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>اگر می خواهید پخش ترانه ی خود را متوقف کنید اینجا را کلیک کنید.سازنده موقعیت ترانه به شروع ترانه تنظیم خواهد شد.</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>پرونده باز نشد</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>پرونده نوشته نشد</translation>
- </message>
- <message>
- <source>Song-Editor</source>
- <translation>ویرایشگر ترانه</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>اگر می خواهید تمام ترانه ی خود را پخش کنید اینجا را کلیک کنید.پخش از محل سازنده ی موقعیت شروع خواهد شد(سبز).همچنین می توانید در حال پخش آن را جابجا کنید.</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>پخش ترانه(فاصله)</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>توقف ترانه (فاصله)</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>اضافه ی خط بم/تپش (beat/baseline)</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>اضافه ی باریکه ی نمونه</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">گام ترانه(tempo)</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished">دانگ صدا(Pitch)</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6412,6 +7899,18 @@ Latency: %2 ms</source>
<source>Remove this track</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6729,4 +8228,74 @@ The LED in the lower right corner of the waveform editor determines whether the
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/fr.qm b/data/locale/fr.qm
index da1da6e..1f7bc5c 100644
Binary files a/data/locale/fr.qm and b/data/locale/fr.qm differ
diff --git a/data/locale/fr.ts b/data/locale/fr.ts
index e6ccb95..c8d3e3e 100644
--- a/data/locale/fr.ts
+++ b/data/locale/fr.ts
@@ -8,10 +8,6 @@
<translation>À propos de LMMS</translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation>LMMS (Linux MultiMedia Studio)</translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation>Version %1 (%2/%3, Qt %4, %5)</translation>
</message>
@@ -43,10 +39,68 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Copyright (c) 2004-2014, LMMS developers</source>
- <translation type="unfinished">Copyright (c) 2004-2008, les développeurs de LMMS {2004-2010,?} {2004-2014,?}</translation>
+ <translation>Copyright (c) 2004-2014, les développeurs de LMMS</translation>
+ </message>
+ <message>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished">LMMS</translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">Volume :</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished">PAN</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished">Panoramique :</translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volume</translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source>Panning</source>
+ <translation type="unfinished">Panoramique</translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -80,14 +134,6 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Si vous activez ce bouton, l'échantillon complet est inversé. Ceci est utile pour certains effets, p. ex. une cymbale crash inversée.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation>Jouer l'échantillon en boucle entre les marqueurs de début et de fin</translation>
- </message>
- <message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation>Ici vous pouvez indiquer si le mode de jeu en boucle est activé ou non. S'il est activé, AudioFileProcessor joue en boucle entre les marqueurs de début et de fin d'un échantillon jusqu'à ce que la note entière ait été jouée. Ceci est utile pour les échantillons de type corde ou chœur.</translation>
- </message>
- <message>
<source>Amplify:</source>
<translation>Amplifier :</translation>
</message>
@@ -100,23 +146,51 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Marqueur de début :</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Avec ce bouton vous pouvez placer le marqueur à partir duquel AudioFileProcessor devra commencer à jouer votre échantillon. Si vous activez le mode de jeu en boucle, c'est le marqueur auquel AudioFileProcessor reviendra lorsqu'une note sera plus longue que la portion de l'échantillon située entre les marqueurs de début et de fin.</translation>
- </message>
- <message>
<source>Endpoint:</source>
<translation>Marqueur de fin :</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Avec ce bouton vous pouvez placer le marqueur auquel AudioFileProcessor devra arrêter de jouer votre échantillon. Si vous activez le mode de jeu en boucle, c'est le marqueur à partir duquel AudioFileProcessor reviendra lorsqu'une note sera plus longue que la portion de l'échantillon située entre les marqueurs de début et de fin.</translation>
+ <source>Continue sample playback across notes</source>
+ <translation>Continuer de jouer l'échantillon à traver les notes</translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <translation>Activer cette option fait que l'échantillon continue de jouer à traver les différentes notes - si vous changez la hauteur, ou si la longueur de la note s'arrête avant la fin de l'échantillon, alors la note suivante jouée continuera où elle aura été arrêtée. Pour remettre à zéro le jeu au début de l'échantillon, insérez une note en bas du clavier (< 20 Hz)</translation>
+ </message>
+ <message>
+ <source>Disable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -124,7 +198,7 @@ If you're interested in translating LMMS in another language or want to imp
<name>AudioFileProcessorWaveView</name>
<message>
<source>Sample length:</source>
- <translation type="unfinished"></translation>
+ <translation>Longueur de l'échantillon:</translation>
</message>
</context>
<context>
@@ -237,171 +311,232 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Remove song-global automation</source>
- <translation type="unfinished"></translation>
+ <translation>Supprime l'automation globale de la chanson</translation>
</message>
<message>
<source>Remove all linked controls</source>
- <translation type="unfinished"></translation>
+ <translation>Supprime tous les contrôles liés</translation>
</message>
</context>
<context>
<name>AutomationEditor</name>
<message>
<source>Play/pause current pattern (Space)</source>
- <translation type="unfinished">Jouer/Mettre en pause le motif (Barre d'espace)</translation>
+ <translation>Jouer/Mettre en pause le motif (Barre d'espace)</translation>
</message>
<message>
<source>Stop playing of current pattern (Space)</source>
- <translation type="unfinished">Arrêter de jouer le motif (Barre d'espace)</translation>
+ <translation>Arrêter de jouer le motif courant (Barre d'espace)</translation>
</message>
<message>
<source>Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.</source>
- <translation type="unfinished">Cliquez ici si vous souhaitez jouer le motif. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte.</translation>
+ <translation>Cliquez ici si vous souhaitez jouer le motif courant. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte.</translation>
</message>
<message>
<source>Click here if you want to stop playing of the current pattern.</source>
- <translation type="unfinished">Cliquez ici si vous souhaitez arrêter de jouer le motif.</translation>
+ <translation>Cliquez ici si vous souhaitez arrêter de jouer le motif courant.</translation>
</message>
<message>
<source>Draw mode (Shift+D)</source>
- <translation type="unfinished">Mode dessin (Shift+D)</translation>
+ <translation>Mode dessin (Shift+D)</translation>
</message>
<message>
<source>Erase mode (Shift+E)</source>
- <translation type="unfinished">Mode effacement (Shift+E)</translation>
+ <translation>Mode effacement (Shift+E)</translation>
</message>
<message>
<source>Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.</source>
- <translation type="unfinished">Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter et déplacer des valeurs particulières. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode.</translation>
+ <translation>Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter et déplacer des valeurs particulières. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode.</translation>
</message>
<message>
<source>Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation type="unfinished">Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des valeurs particulières. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode.</translation>
+ <translation>Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des valeurs particulières. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode.</translation>
</message>
<message>
<source>Cut selected values (Ctrl+X)</source>
- <translation type="unfinished">Couper les valeurs sélectionnées (Ctrl+X)</translation>
+ <translation>Couper les valeurs sélectionnées (Ctrl+X)</translation>
</message>
<message>
<source>Copy selected values (Ctrl+C)</source>
- <translation type="unfinished">Copier les valeurs sélectionnées (Ctrl+C)</translation>
+ <translation>Copier les valeurs sélectionnées (Ctrl+C)</translation>
</message>
<message>
<source>Paste values from clipboard (Ctrl+V)</source>
- <translation type="unfinished">Coller les valeurs sélectionnées (Ctrl+V)</translation>
+ <translation>Coller les valeurs sélectionnées (Ctrl+V)</translation>
</message>
<message>
<source>Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished">Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller.</translation>
+ <translation>Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller.</translation>
</message>
<message>
<source>Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished">Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller.</translation>
+ <translation>Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller.</translation>
</message>
<message>
<source>Click here and the values from the clipboard will be pasted at the first visible measure.</source>
- <translation type="unfinished">Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible.</translation>
+ <translation>Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible.</translation>
</message>
<message>
<source>Automation Editor - no pattern</source>
- <translation type="unfinished">Éditeur d'automation - pas de motif</translation>
+ <translation>Éditeur d'automation - pas de motif</translation>
</message>
<message>
<source>Automation Editor - %1</source>
- <translation type="unfinished">Éditeur d'automation - %1</translation>
+ <translation>Éditeur d'automation - %1</translation>
</message>
<message>
<source>Please open an automation pattern with the context menu of a control!</source>
- <translation type="unfinished">Veuillez ouvrir un motif d'automation avec le menu contextuel d'un contrôle !</translation>
+ <translation>Veuillez ouvrir un motif d'automation avec le menu contextuel d'un contrôle !</translation>
</message>
<message>
<source>Values copied</source>
- <translation type="unfinished">Les valeurs ont été copiées</translation>
+ <translation>Les valeurs ont été copiées</translation>
</message>
<message>
<source>All selected values were copied to the clipboard.</source>
- <translation type="unfinished">Toutes les valeurs ont été copiées dans le presse-papier.</translation>
+ <translation>Toutes les valeurs ont été copiées dans le presse-papier.</translation>
</message>
<message>
<source>Discrete progression</source>
- <translation type="unfinished"></translation>
+ <translation>Progression discrète</translation>
</message>
<message>
<source>Linear progression</source>
- <translation type="unfinished"></translation>
+ <translation>Progression linéaire</translation>
</message>
<message>
<source>Cubic Hermite progression</source>
- <translation type="unfinished"></translation>
+ <translation>Progression cubique de Hermite</translation>
</message>
<message>
<source>Tension: </source>
- <translation type="unfinished"></translation>
+ <translation>Tension : </translation>
</message>
<message>
<source>Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici pour choisir la progression discrète pour ce motif d'automation. La valeur de l'objet connecté restera contante entre les points de contrôle et se verra affecter immédiatement une nouvelle valeur quand un point de contrôle est atteint.</translation>
</message>
<message>
<source>Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici pour choisir la progression linéaire pour ce motif d'automation. La valeur de l'objet connecté changera à un taux contant entre les points de contrôle et atteindra la valeur correcte à chaque point de contrôle sans changement soudain.</translation>
</message>
<message>
<source>Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici pour choisir la progression cubique de Hermite pour ce motif d'automation. La valeur de l'objet connecté changera suivant une courbe lisse.</translation>
</message>
<message>
<source>Tension value for spline</source>
- <translation type="unfinished"></translation>
+ <translation>Valeur de tension pour la spline</translation>
</message>
<message>
<source>A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.</source>
- <translation type="unfinished"></translation>
+ <translation>Une valeur de tension élevée donne une courbe plus lisse mais introduit des dépassements pour certaines valeurs. Une valeur de tension basse fera que la pente de la courbe se stabilisera à chaque point de contrôle.</translation>
</message>
</context>
<context>
<name>AutomationPattern</name>
<message>
<source>Drag a control while pressing <Ctrl></source>
- <translation type="unfinished">Déplacer un contrôle en appuyant sur <Ctrl></translation>
+ <translation>Déplacer un contrôle en appuyant sur <Ctrl></translation>
+ </message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutomationPatternView</name>
<message>
<source>double-click to open this pattern in automation editor</source>
- <translation type="unfinished">double-cliquer pour ouvrir ce motif dans l'éditeur d'automation</translation>
+ <translation>double-cliquer pour ouvrir ce motif dans l'éditeur d'automation</translation>
</message>
<message>
<source>Open in Automation editor</source>
- <translation type="unfinished">Ouvrir dans l'éditeur d'automation</translation>
+ <translation>Ouvrir dans l'éditeur d'automation</translation>
</message>
<message>
<source>Clear</source>
- <translation type="unfinished">Effacer</translation>
+ <translation>Effacer</translation>
</message>
<message>
<source>Reset name</source>
- <translation type="unfinished">Réinitialiser le nom</translation>
+ <translation>Réinitialiser le nom</translation>
</message>
<message>
<source>Change name</source>
- <translation type="unfinished">Changer le nom</translation>
+ <translation>Changer le nom</translation>
</message>
<message>
<source>%1 Connections</source>
- <translation type="unfinished">%1 connexions</translation>
+ <translation>%1 connexions</translation>
</message>
<message>
<source>Disconnect "%1"</source>
- <translation type="unfinished">Déconnecter "%1"</translation>
+ <translation>Déconnecter "%1"</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Régler/Effacer l'enregistrement</translation>
</message>
</context>
<context>
<name>AutomationTrack</name>
<message>
<source>Automation track</source>
- <translation type="unfinished">Piste d'automation</translation>
+ <translation>Piste d'automation</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished">FRÉQ</translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished">Fréquence :</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished">GAIN</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished">Gain :</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished">RAPPORT</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished">Rapport :</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished">Fréquence</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished">Gain</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished">Rapport</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished">Montrer l'interface utilisateur graphique</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -482,11 +617,11 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Confirm Delete</source>
- <translation type="unfinished"></translation>
+ <translation>Confirmer la suppression</translation>
</message>
<message>
<source>Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo.</source>
- <translation type="unfinished"></translation>
+ <translation>Confirmer la suppression ? Il existe des connection(s) associée(s) avec ce contrôleur. Il n'est pas possible d'annuler cette action.</translation>
</message>
</context>
<context>
@@ -517,6 +652,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished">Passe-bas</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished">Passe-haut</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished">Passe-bande "csg"</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">Passe-bande "czpg"</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">Coupe-bande</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">Passe-tout</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished">Passe-bas x2</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished">RC Passe Bas 12dB</translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished">RC Passe Bande 12dB</translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished">RC Passe Haut 12dB</translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished">RC Passe Bas 24dB</translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished">RC Passe Bande 24dB</translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished">RC Passe Haut 24dB</translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished">Filtre Formant Vocal</translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -892,6 +1153,10 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation>Faites glisser un échantillon et déposez-le dans cette fenêtre.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1020,14 +1285,6 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
<translation>8x</translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translation>Contrôleurs d'échantillon exact</translation>
- </message>
- <message>
- <source>Alias-free oscillators</source>
- <translation>Oscillateurs sans alias</translation>
- </message>
- <message>
<source>Start</source>
<translation>Démarrer</translation>
</message>
@@ -1037,18 +1294,89 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
</message>
<message>
<source>Export as loop (remove end silence)</source>
- <translation type="unfinished"></translation>
+ <translation>Exporter sous la forme d'une boucle (supprime le silence de fin)</translation>
</message>
</context>
<context>
- <name>FxMixer</name>
- <message>
- <source>Master</source>
- <translation>Général</translation>
- </message>
+ <name>FileBrowser</name>
<message>
- <source>FX %1</source>
- <translation>Effet %1</translation>
+ <source>Browser</source>
+ <translation type="unfinished">Explorateur</translation>
+ </message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
+ <message>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished">Envoyer vers la piste d'instrument actif</translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished">Ouvrir dans une nouvelle piste d'instrument/Éditeur de morceau</translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished">Ouvrir dans une nouvelle piste d'instrument/Éditeur de rythme et de ligne de basse</translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished">Chargement de l'échantillon</translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished">Veuillez patienter, chargement de l'échantillon pour un aperçu...</translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished">--- Fichiers usine ---</translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">Aid&e</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixer</name>
+ <message>
+ <source>Master</source>
+ <translation>Général</translation>
+ </message>
+ <message>
+ <source>FX %1</source>
+ <translation>Effet %1</translation>
</message>
</context>
<context>
@@ -1065,75 +1393,89 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
<source>FX-Mixer</source>
<translation>Mélangeur d'effets</translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
- <translation>Curseur d'effet %1</translation>
+ <translation type="unfinished">Curseur d'effet %1</translation>
</message>
<message>
<source>Mute</source>
- <translation>Couper</translation>
+ <translation type="unfinished">Couper</translation>
</message>
<message>
<source>Mute this FX channel</source>
- <translation>Couper ce canal d'effet</translation>
+ <translation type="unfinished">Couper ce canal d'effet</translation>
+ </message>
+</context>
+<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
- <translation type="unfinished">Arpège</translation>
+ <translation>Arpège</translation>
</message>
<message>
<source>Arpeggio type</source>
- <translation type="unfinished">Type d'arpège</translation>
+ <translation>Type d'arpège</translation>
</message>
<message>
<source>Arpeggio range</source>
- <translation type="unfinished">Gamme d'arpège</translation>
+ <translation>Plage d'arpège</translation>
</message>
<message>
<source>Arpeggio time</source>
- <translation type="unfinished">Temps d'arpège</translation>
+ <translation>Temps d'arpège</translation>
</message>
<message>
<source>Arpeggio gate</source>
- <translation type="unfinished">Durée d'arpège</translation>
+ <translation>Durée d'arpège</translation>
</message>
<message>
<source>Arpeggio direction</source>
- <translation type="unfinished">Sens d'arpège</translation>
+ <translation>Direction de l'arpège</translation>
</message>
<message>
<source>Arpeggio mode</source>
- <translation type="unfinished">Mode d'arpège</translation>
+ <translation>Mode d'arpège</translation>
</message>
<message>
<source>Up</source>
- <translation type="unfinished">Ascendant</translation>
+ <translation>Ascendant</translation>
</message>
<message>
<source>Down</source>
- <translation type="unfinished">Descendant</translation>
+ <translation>Descendant</translation>
</message>
<message>
<source>Up and down</source>
- <translation type="unfinished">Ascendant et descendant</translation>
+ <translation>Ascendant et descendant</translation>
</message>
<message>
<source>Random</source>
- <translation type="unfinished">Aléatoire</translation>
+ <translation>Aléatoire</translation>
</message>
<message>
<source>Free</source>
- <translation type="unfinished">Libre</translation>
+ <translation>Libre</translation>
</message>
<message>
<source>Sort</source>
- <translation type="unfinished">Tri</translation>
+ <translation>Tri</translation>
</message>
<message>
<source>Sync</source>
+ <translation>Sync</translation>
+ </message>
+ <message>
+ <source>Down and up</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1141,71 +1483,71 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
<name>InstrumentFunctionArpeggioView</name>
<message>
<source>ARPEGGIO</source>
- <translation type="unfinished">ARPÈGE</translation>
+ <translation>ARPÈGE</translation>
</message>
<message>
<source>An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.</source>
- <translation type="unfinished">Un arpège est une façon de jouer des instruments (en particulier ceux à cordes pincées), qui rend la musique plus vivante. Les cordes de tels instruments (p. ex. les harpes) sont pincées comme des accords. La seule différence est que cela est fait de manière séquentielle, ce qui fait que les notes ne sont pas jouées en même temps. Les arpèges typiques sont des triades majeures ou mineures, mais il y a beaucoup d'autres accords possibles, vous p [...]
+ <translation>Un arpège est une façon de jouer des instruments (en particulier ceux à cordes pincées), qui rend la musique plus vivante. Les cordes de tels instruments (p. ex. les harpes) sont pincées comme des accords. La seule différence est que cela est fait de manière séquentielle, ce qui fait que les notes ne sont pas jouées en même temps. Les arpèges typiques sont des triades majeures ou mineures, mais il y a beaucoup d'autres accords possibles, vous pouvez choisr.</tra [...]
</message>
<message>
<source>RANGE</source>
- <translation type="unfinished">GAMME</translation>
+ <translation>PLAGE</translation>
</message>
<message>
<source>Arpeggio range:</source>
- <translation type="unfinished">Gamme d'arpège :</translation>
+ <translation>Plage d'arpège :</translation>
</message>
<message>
<source>octave(s)</source>
- <translation type="unfinished">octave(s)</translation>
+ <translation>octave(s)</translation>
</message>
<message>
<source>Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.</source>
- <translation type="unfinished">Utilisez ce bouton pour régler la gamme d'octaves de l'arpège. L'arpège sélectionné sera joué sur le nombre d'octaves choisi.</translation>
+ <translation>Utilisez ce bouton pour régler la plage de l'arpège en octaves. L'arpège sélectionné sera joué sur le nombre d'octaves choisi.</translation>
</message>
<message>
<source>TIME</source>
- <translation type="unfinished">TEMPS</translation>
+ <translation>TEMPS</translation>
</message>
<message>
<source>Arpeggio time:</source>
- <translation type="unfinished">Temps d'arpège :</translation>
+ <translation>Temps d'arpège :</translation>
</message>
<message>
<source>ms</source>
- <translation type="unfinished">ms</translation>
+ <translation>ms</translation>
</message>
<message>
<source>Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.</source>
- <translation type="unfinished">Utilisez ce bouton pour régler le temps d'arpège en millisecondes. Le temps d'arpège indique la durée pendant laquelle chaque note de l'arpège sera joué.</translation>
+ <translation>Utilisez ce bouton pour régler le temps d'arpège en millisecondes. Le temps d'arpège indique la durée pendant laquelle chaque note de l'arpège sera joué.</translation>
</message>
<message>
<source>GATE</source>
- <translation type="unfinished"></translation>
+ <translation>DUREE</translation>
</message>
<message>
<source>Arpeggio gate:</source>
- <translation type="unfinished">Durée d'arpège :</translation>
+ <translation>Durée d'arpège :</translation>
</message>
<message>
<source>%</source>
- <translation type="unfinished">%</translation>
+ <translation>%</translation>
</message>
<message>
<source>Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.</source>
- <translation type="unfinished">Utilisez ce bouton pour régler la durée d'arpège. La durée d'arpège indique le pourcentage d'une note complète de l'arpège qui sera joué. Avec ceci vous pouvez faire de beaux arpèges staccato.</translation>
+ <translation>Utilisez ce bouton pour régler la durée d'arpège. La durée d'arpège indique le pourcentage d'une note complète de l'arpège qui sera joué. Avec ceci vous pouvez faire de beaux arpèges staccato.</translation>
</message>
<message>
<source>Chord:</source>
- <translation type="unfinished"></translation>
+ <translation>Accord:</translation>
</message>
<message>
<source>Direction:</source>
- <translation type="unfinished">Sens :</translation>
+ <translation>Direction :</translation>
</message>
<message>
<source>Mode:</source>
- <translation type="unfinished">Mode :</translation>
+ <translation>Mode :</translation>
</message>
</context>
<context>
@@ -1576,8 +1918,20 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
</message>
<message>
<source>Minor</source>
+ <translation>Mineur</translation>
+ </message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished">8x {5?}</translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1599,11 +1953,11 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
</message>
<message>
<source>STACKING</source>
- <translation type="unfinished"></translation>
+ <translation>EMPILEMENT</translation>
</message>
<message>
<source>Chord:</source>
- <translation type="unfinished"></translation>
+ <translation>Accord:</translation>
</message>
</context>
<context>
@@ -1638,6 +1992,18 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
</message>
<message>
<source>NOTE</source>
+ <translation>NOTE</translation>
+ </message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1713,31 +2079,31 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
</message>
<message>
<source>RC LowPass 12dB</source>
- <translation type="unfinished"></translation>
+ <translation>RC Passe Bas 12dB</translation>
</message>
<message>
<source>RC BandPass 12dB</source>
- <translation type="unfinished"></translation>
+ <translation>RC Passe Bande 12dB</translation>
</message>
<message>
<source>RC HighPass 12dB</source>
- <translation type="unfinished"></translation>
+ <translation>RC Passe Haut 12dB</translation>
</message>
<message>
<source>RC LowPass 24dB</source>
- <translation type="unfinished"></translation>
+ <translation>RC Passe Bas 24dB</translation>
</message>
<message>
<source>RC BandPass 24dB</source>
- <translation type="unfinished"></translation>
+ <translation>RC Passe Bande 24dB</translation>
</message>
<message>
<source>RC HighPass 24dB</source>
- <translation type="unfinished"></translation>
+ <translation>RC Passe Haut 24dB</translation>
</message>
<message>
<source>Vocal Formant Filter</source>
- <translation type="unfinished"></translation>
+ <translation>Filtre Formant Vocal</translation>
</message>
</context>
<context>
@@ -1780,10 +2146,14 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
</message>
<message>
<source>FREQ</source>
- <translation type="unfinished">FRÉQ</translation>
+ <translation>FRÉQ</translation>
</message>
<message>
<source>cutoff frequency:</source>
+ <translation>Fréquence de coupure:</translation>
+ </message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1823,7 +2193,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
</message>
<message>
<source>Pitch range</source>
- <translation type="unfinished"></translation>
+ <translation>Plage de hauteur</translation>
</message>
</context>
<context>
@@ -1872,10 +2242,6 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
<translation>CONFIGURATION GÉNÉRALE</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation>Cliquez ici si vous souhaitez enregistrer la configuration du canal dans un fichier de préréglage. Plus tard vous pourrez charger ce préréglage en double-cliquant sur son nom dans le sélecteur de préréglages.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation>Volume de l'instrument</translation>
</message>
@@ -1948,16 +2314,20 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
<translation>GREFFON</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation>Enregistrer la configuration du canal dans un fichier de préréglage</translation>
+ <source>Pitch range (semitones)</source>
+ <translation>Plage de hauteur (demi-tons)</translation>
</message>
<message>
- <source>Pitch range (semitones)</source>
+ <source>RANGE</source>
+ <translation>PLAGE</translation>
+ </message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RANGE</source>
- <translation type="unfinished">GAMME</translation>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2005,6 +2375,13 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Veuillez entrer un valeur entre %1 et %2 :</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2128,7 +2505,8 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo
<message>
<source>Click here for a user-defined shape.
Double click to pick a file.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici pour une forme définie par l'utilisateur.
+Double cliquez pour choisir un fichier.</translation>
</message>
</context>
<context>
@@ -2355,38 +2733,50 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.</transla
</message>
<message>
<source>Save as new &version</source>
- <translation type="unfinished"></translation>
+ <translation>Enregistrer comme nouvelle &version</translation>
</message>
<message>
<source>E&xport tracks...</source>
- <translation type="unfinished"></translation>
+ <translation>E&xporter les pistes...</translation>
</message>
<message>
<source>LMMS (*.mmp *.mmpz)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
+ <translation>LMMS (*.mmp *.mmpz)</translation>
</message>
<message>
<source>Version %1</source>
- <translation type="unfinished"></translation>
+ <translation>Version %1</translation>
</message>
<message>
<source>Project recovery</source>
- <translation type="unfinished"></translation>
+ <translation>Récupération de projet</translation>
</message>
<message>
<source>It looks like the last session did not end properly. Do you want to recover the project of this session?</source>
- <translation type="unfinished"></translation>
+ <translation>Il semble que la dernière session ne se soit pas terminée correctement. Voulez-vous récupérer le projet de cette session?</translation>
</message>
<message>
<source>Configuration file</source>
- <translation type="unfinished"></translation>
+ <translation>Fichier de configuration</translation>
</message>
<message>
<source>Error while parsing configuration file at line %1:%2: %3</source>
+ <translation>Erreur pendant l'analyse du fichier de configuration à la ligne %1:%2:%3</translation>
+ </message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2503,198 +2893,1059 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.</transla
</message>
<message>
<source>Fixed output note</source>
+ <translation>Note de sortie fixe</translation>
+ </message>
+ <message>
+ <source>Base velocity</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation>Volume de l'oscillateur %1</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation>Panoramique de l'oscillateur %1</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation>Désaccordage grossier de l'oscillateur %1</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation>Désaccordage fin (gauche) de l'oscillateur %1</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation>Désaccordage fin (droite) de l'oscillateur %1</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation>Décalage de phase de l'oscillateur %1</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation>Désaccordage stéréo de la phase de l'oscillateur %1</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation>Forme d'onde de l'oscillateur %1</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
- <translation>Modulation de type %1</translation>
+ <source>Osc 1 Sync send on fall</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation>Forme d'onde de l'oscillateur %1</translation>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation>Ouvrir un autre son</translation>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation>Cliquez ici pour ouvrir un autre fichier de son. Les réglages de tonalité et d'accordage ne sont pas réinitialisés.</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation>Rejouer</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
- <translation>Mode de jeu en boucle</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation>Ici vous pouvez permuter le mode de jeu en boucle. Si il est activé, PatMan utilisera les informations de jeu en boucle disponibles dans le fichier.</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
- <translation>Accordage</translation>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
- <translation>Mode accordage</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation>Ici vous pouvez permuter le mode d'accordage. Si il est activé, PatMan accordera l'échantillon pour en fonction de la fréquence de la note.</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
- <translation>Aucun fichier n'est sélectionné</translation>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
- <translation>Ouvrir un fichier de son</translation>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation>Fichiers de son (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
- <translation>Contrôleur de crêtes</translation>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
- <translation>CRÊTE</translation>
+ <source>Osc 3 Waveform 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation>Contrôleur du LFO</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
- <translation>BASE</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
- <translation>Niveau de la base :</translation>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Niveau de modulation :</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
- <translation type="unfinished">Attaque :</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
- <translation type="unfinished">Relâchement :</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
- <translation>Valeur de base</translation>
+ <source>Env 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation>Niveau de modulation</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
- <translation>Couper la sortie</translation>
+ <source>Env 1 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Pre-delay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Volume général</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished">Vibrato</translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation>Volume de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation>Panoramique de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation>Désaccordage grossier de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation>Désaccordage fin (gauche) de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation>Désaccordage fin (droite) de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation>Décalage de phase de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation>Désaccordage stéréo de la phase de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation>Forme d'onde de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation>Modulation de type %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation>Forme d'onde de l'oscillateur %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation>Ouvrir un autre son</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation>Cliquez ici pour ouvrir un autre fichier de son. Les réglages de tonalité et d'accordage ne sont pas réinitialisés.</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation>Rejouer</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation>Mode de jeu en boucle</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation>Ici vous pouvez permuter le mode de jeu en boucle. Si il est activé, PatMan utilisera les informations de jeu en boucle disponibles dans le fichier.</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation>Accordage</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation>Mode accordage</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation>Ici vous pouvez permuter le mode d'accordage. Si il est activé, PatMan accordera l'échantillon pour en fonction de la fréquence de la note.</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation>Aucun fichier n'est sélectionné</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation>Ouvrir un fichier de son</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation>Fichiers de son (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>double-cliquer pour ouvrir ce motif dans le piano virtuel
+utilisez la molette de la souris pour régler le volume d'un pas</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>Ouvrir dans le piano virtuel</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>Effacer toutes les notes</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>Réinitialiser le nom</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Changer le nom</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>Ajouter des pas</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>Supprimer des pas</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation>Contrôleur de crêtes</translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation>Bug du contrôleur de crêtes</translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation>A cause d'un bug dans les anciennes versions de LMMS, les contrôleurs de crêtes peuvent ne pas s'être connecté correctement. Verifiez que les contrôleurs de crêtes sont connectés correctement et re-sauvegardez ce fichier. Désolé pour la gène occasionnée.</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation>CRÊTE</translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation>Contrôleur du LFO</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation>BASE</translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation>Niveau de la base :</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation>Niveau de modulation :</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation>Attaque :</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation>Relâchement :</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation>AMNT</translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation>MULT</translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation>Multiplicateur de quantité:</translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation>ATCK</translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation>DCAY</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation>Valeur de base</translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation>Niveau de modulation</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation>Couper la sortie</translation>
</message>
<message>
<source>Attack</source>
- <translation type="unfinished">Attaque</translation>
+ <translation>Attaque</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation>Relâchement</translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation>Valeur Abs</translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation>Multiplicateur de quantité</translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Jouer/Mettre en pause le motif (Barre d'espace)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Arrêter de jouer le motif (Barre d'espace)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Couper les notes sélectionnées (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Copier les notes sélectionnées (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Coller les notes se trouvant dans le presse-papier (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Piano virtuel - pas de motif</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>Piano virtuel - %1</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Veuillez ouvrir un motif en double-cliquant dessus !</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano pendant l'écoute d'un morceau ou bien d'une piste de rythme ou de ligne de basse</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Mode dessin (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Mode effacement (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>Mode sélection (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>Dernière note</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation>Cliquez ici pour jouer le motif. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation>Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous pourrez ensuite les jouer et les éditer.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation>Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous entendrez le morceau ou bien le rythme ou la ligne de basse en fond sonore.</translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation>Cliquez ici pour arrêter de jouer le motif.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller.</translation>
</message>
<message>
- <source>Release</source>
- <translation type="unfinished">Relâchement</translation>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation>Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible.</translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Note lock</source>
+ <translation>Vérouiller la note</translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation>Volume de la note </translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation>Panoramique de la note</translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation>Mode désaccordage (Shift+T)</translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation>Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter, redimensionner et déplacer des notes. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. Dans ce mode, appuyez sur Ctrl pour passer temporairement dans le mode sélection.</translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation>Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des notes. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode.</translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation>Cliquez ici et le mode sélection sera activé. Dans ce mode vous pourrez sélectionner des notes. Dans ce mode, appuyez appuyer sur Ctrl pour passer temporairement en mode dessin.</translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation>Cliquez ici et le mode désaccordage sera activé. Dans ce mode vous pourrer cliquer sur une note pour accéder à l'automation de son désaccordage. Vous pouvez utiliser ceci pour lier des notes entre-elles. Vous pouvez aussi appuyer sur les touches 'Shift+T' de votre clavier pour activer ce mode.</translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation>Cocher/décocher le demi-ton courant</translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation>Cocher la gamme courante</translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation>Cocher l'accord courant</translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation>Déchocher tout</translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation>Pas de gamme</translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation>Pas d'accord</translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Veuillez entrer un valeur entre %1 et %2 :</translation>
+ </message>
</context>
<context>
<name>PianoView</name>
@@ -2723,6 +3974,10 @@ Raison : "%2"</translation>
<source>Failed to load plugin "%1"!</source>
<translation>Le chargement du greffon "%1" a échoué !</translation>
</message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ProjectRenderer</name>
@@ -2740,87 +3995,87 @@ Raison : "%2"</translation>
<message>
<source>C</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>C</translation>
</message>
<message>
<source>Db</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>Db</translation>
</message>
<message>
<source>C#</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>C#</translation>
</message>
<message>
<source>D</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>D</translation>
</message>
<message>
<source>Eb</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>Eb</translation>
</message>
<message>
<source>D#</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>D#</translation>
</message>
<message>
<source>E</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>E</translation>
</message>
<message>
<source>Fb</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>Fb</translation>
</message>
<message>
<source>Gb</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>Gb</translation>
</message>
<message>
<source>F#</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>F#</translation>
</message>
<message>
<source>G</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>G</translation>
</message>
<message>
<source>Ab</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>Ab</translation>
</message>
<message>
<source>G#</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>G#</translation>
</message>
<message>
<source>A</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>A</translation>
</message>
<message>
<source>Bb</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>Bb</translation>
</message>
<message>
<source>A#</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>A#</translation>
</message>
<message>
<source>B</source>
<comment>Note name</comment>
- <translation type="unfinished"></translation>
+ <translation>B</translation>
</message>
</context>
<context>
@@ -2869,113 +4124,260 @@ Raison : "%2"</translation>
<source>File: </source>
<translation>Fichier : </translation>
</message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleBuffer</name>
<message>
<source>Open audio file</source>
- <translation type="unfinished">Ouvrir un fichier audio</translation>
- </message>
- <message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation type="unfinished">Tous les fichiers audio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
+ <translation>Ouvrir un fichier audio</translation>
</message>
<message>
<source>Wave-Files (*.wav)</source>
- <translation type="unfinished">Fichiers WAVE (*.wav)</translation>
+ <translation>Fichiers WAVE (*.wav)</translation>
</message>
<message>
<source>OGG-Files (*.ogg)</source>
- <translation type="unfinished">Fichiers OGG (*.ogg)</translation>
+ <translation>Fichiers OGG (*.ogg)</translation>
</message>
<message>
<source>DrumSynth-Files (*.ds)</source>
- <translation type="unfinished">Fichiers DrumSynth (*.ds)</translation>
+ <translation>Fichiers DrumSynth (*.ds)</translation>
</message>
<message>
<source>FLAC-Files (*.flac)</source>
- <translation type="unfinished">Fichiers FLAC (*.flac)</translation>
+ <translation>Fichiers FLAC (*.flac)</translation>
</message>
<message>
<source>SPEEX-Files (*.spx)</source>
- <translation type="unfinished">Fichiers SPEEX (*.spx)</translation>
- </message>
- <message>
- <source>MP3-Files (*.mp3)</source>
- <translation type="unfinished">Fichiers MP3 (*.mp3)</translation>
+ <translation>Fichiers SPEEX (*.spx)</translation>
</message>
<message>
<source>VOC-Files (*.voc)</source>
- <translation type="unfinished">Fichiers VOC (*.voc)</translation>
+ <translation>Fichiers VOC (*.voc)</translation>
</message>
<message>
<source>AIFF-Files (*.aif *.aiff)</source>
- <translation type="unfinished">Fichiers AIFF (*.aif *.aiff)</translation>
+ <translation>Fichiers AIFF (*.aif *.aiff)</translation>
</message>
<message>
<source>AU-Files (*.au)</source>
- <translation type="unfinished">Fichiers AU (*.au)</translation>
+ <translation>Fichiers AU (*.au)</translation>
</message>
<message>
<source>RAW-Files (*.raw)</source>
- <translation type="unfinished">Fichiers RAW (*.raw)</translation>
+ <translation>Fichiers RAW (*.raw)</translation>
+ </message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SampleTCOView</name>
<message>
<source>double-click to select sample</source>
- <translation type="unfinished">Double-cliquez pour choisir un échantillon</translation>
+ <translation>Double-cliquez pour choisir un échantillon</translation>
</message>
<message>
<source>Delete (middle mousebutton)</source>
- <translation type="unfinished"></translation>
+ <translation>Supprimer (bouton du milieu de la souris)</translation>
</message>
<message>
<source>Cut</source>
- <translation type="unfinished">Couper</translation>
+ <translation>Couper</translation>
</message>
<message>
<source>Copy</source>
- <translation type="unfinished">Copier</translation>
+ <translation>Copier</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>Coller</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation>Couper/Jouer (<Ctrl> + clic-milieu)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation>Régler/Effacer l'enregistrement</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation>Piste d'échantillon</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation>Volume</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation>Volume de la piste</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation>Volume du canal :</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation>VOL</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Éditeur de morceau</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Jouer le morceau (Barre d'espace)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Cliquez ici si vous souhaitez jouer le morceau en entier. L'écoute commencera à partir du marquer (vert) de position dans le morceau. Vous pouvez aussi déplacer ce curseur pendant l'écoute.</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Arrêter de jouer le morceau (Barre d'espace)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Cliquez ici si vous souhaitez ne plus jouer le morceau. Le curseur de position sera placé au début du morceau.</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Ajouter une piste de rythme ou de ligne de basse</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Ajouter une piste d'échantillon</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>Le fichier n'a pas pu être ouvert</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>Le fichier n'a pas pu être écrit</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>Ajouter une piste d'automation</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Mode dessin</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Mode édition (Sélectionner et déplacer)</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation>Enregistrer des échantillons à partir d'un périphérique audio</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>Enregistrer des échantillons à partir d'un périphérique audio pendant l'écoute d'un morceau ou bien d'un rythme ou d'une ligne de basse</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation>Le fichier %1 n'a pas pu être ouvert. Vos n'avez probablement pas le droit de lire ce fichier.
+Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le répertoire qui contient ce fichier et réessayez.</translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation>Il y a une ou plusieurs erreurs dans le fichier</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation>Le fichier %1 semble contenir des erreurs et ne peut donc pas être chargés.</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation>Tempo</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation>TEMPO/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation>tempo du morceau</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation>Le tempo de ce morceau est spécifié en battements par minute (BPM). Si vous souhaitez changer le tempo de votre morceau, modifiez cette valeur. Chaque mesure à quatre battements, ce qui fait que le tempo en BPM indique le nombre de mesures / 4 qui doivent être jouées dans une minute (ou le nombre de mesures qui doivent être jouées en quatre minutes).</translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation>Mode haute qualité</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>Volume général</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation>volume général</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation>Tonalité générale</translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation>tonalité générale</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">Coller</translation>
+ <source>Value: %1%</source>
+ <translation>Valeur : %1%</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation type="unfinished">Couper/Jouer (<Ctrl> + clic-milieu)</translation>
+ <source>Value: %1 semitones</source>
+ <translation>Valeur : %1 demi-tons</translation>
</message>
<message>
- <source>Set/clear record</source>
- <translation type="unfinished">Régler/Effacer l'enregistrement</translation>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation>Ne peux pas ouvrir %1 en écriture. Vous n'avez probablement pas les droits pour écrire dans ce fichier. Assurez vous que vous avez les droits d'accès en écriture pour ce fichier et essayez à nouveau.</translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">Piste d'échantillon</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Spectre linéaire</translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">Volume</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Axe Y linéaire</translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation type="unfinished">Volume de la piste</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Spectre linéaire</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">Volume du canal :</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Axe Y linéaire</translation>
</message>
<message>
- <source>VOL</source>
- <translation type="unfinished">VOL</translation>
+ <source>Channel mode</source>
+ <translation type="unfinished">Mode du canal</translation>
</message>
</context>
<context>
@@ -3061,50 +4463,50 @@ Raison : "%2"</translation>
<name>TimeDisplayWidget</name>
<message>
<source>click to change time units</source>
- <translation type="unfinished"></translation>
+ <translation>cliquez pour changer les unités de temps</translation>
</message>
</context>
<context>
<name>TrackContainer</name>
<message>
<source>Couldn't import file</source>
- <translation type="unfinished">Le fichier n'a pas pu être importé</translation>
+ <translation>Le fichier n'a pas pu être importé</translation>
</message>
<message>
<source>Couldn't find a filter for importing file %1.
You should convert this file into a format supported by LMMS using another software.</source>
- <translation type="unfinished">Aucun filtre n'a pu être trouvé pour importer le fichier %1.
+ <translation>Aucun filtre n'a pu être trouvé pour importer le fichier %1.
Vous devriez convertir ce fichier dans un format pris en charge par LMMS en utilisant un autre logiciel.</translation>
</message>
<message>
<source>Couldn't open file</source>
- <translation type="unfinished">Le fichier n'a pas pu être ouvert</translation>
+ <translation>Le fichier n'a pas pu être ouvert</translation>
</message>
<message>
<source>Couldn't open file %1 for reading.
Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
- <translation type="unfinished">Le fichier %1 n'a pas pu être ouvert en lecture.
+ <translation>Le fichier %1 n'a pas pu être ouvert en lecture.
Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le répertoire qui contient ce fichier et réessayez !</translation>
</message>
<message>
<source>Loading project...</source>
- <translation type="unfinished">Chargement du projet...</translation>
+ <translation>Chargement du projet...</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Annuler</translation>
+ <translation>Annuler</translation>
</message>
<message>
<source>Please wait...</source>
- <translation type="unfinished">Veuillez patienter...</translation>
+ <translation>Veuillez patienter...</translation>
</message>
<message>
<source>Importing MIDI-file...</source>
- <translation type="unfinished">Importation du fichier MIDI...</translation>
+ <translation>Importation du fichier MIDI...</translation>
</message>
<message>
<source>Importing FLP-file...</source>
- <translation type="unfinished">Importation du fichier FLP...</translation>
+ <translation>Importation du fichier FLP...</translation>
</message>
</context>
<context>
@@ -3254,22 +4656,22 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré
<name>Ui</name>
<message>
<source>Contributors ordered by number of commits:</source>
- <translation type="unfinished"></translation>
+ <translation>Contributeurs classés par nombre de commits:</translation>
</message>
<message>
<source>Involved</source>
- <translation type="unfinished"></translation>
+ <translation>Impliqué</translation>
</message>
</context>
<context>
<name>VersionedSaveDialog</name>
<message>
<source>Increment version number</source>
- <translation type="unfinished"></translation>
+ <translation>Incrémenter le numéro de version</translation>
</message>
<message>
<source>Decrement version number</source>
- <translation type="unfinished"></translation>
+ <translation>Décrémenter le numéro de version</translation>
</message>
</context>
<context>
@@ -3312,110 +4714,110 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré
</message>
<message>
<source>Control VST-plugin from LMMS host</source>
- <translation type="unfinished"></translation>
+ <translation>Contrôler le greffon VST à partir de l'hôte LMMS</translation>
</message>
<message>
<source>Click here, if you want to control VST-plugin from host.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez contrôler le greffon VST à partir de l'hôte.</translation>
</message>
<message>
<source>Open VST-plugin preset</source>
- <translation type="unfinished"></translation>
+ <translation>Ouvrir les pré-réglages du greffon VST</translation>
</message>
<message>
<source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez ouvrir un autre pré-réglage de greffon VST *.fxp, *.fxb.</translation>
</message>
<message>
<source>Previous (-)</source>
- <translation type="unfinished"></translation>
+ <translation>Précédent (-)</translation>
</message>
<message>
<source>Click here, if you want to switch to another VST-plugin preset program.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez passer à un autre programme de pré-réglage de plugin VST.</translation>
</message>
<message>
<source>Save preset</source>
- <translation type="unfinished">Enregistrer le préréglage</translation>
+ <translation>Enregistrer le pré-réglage</translation>
</message>
<message>
<source>Click here, if you want to save current VST-plugin preset program.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez sauvegarder le programme de pré-réglage de greffon VST courant.</translation>
</message>
<message>
<source>Next (+)</source>
- <translation type="unfinished"></translation>
+ <translation>Suivant (+)</translation>
</message>
<message>
<source>Click here to select presets that are currently loaded in VST.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici pour sélectionner les pré-réglages qui sont actuellement chargés dans le VST.</translation>
</message>
<message>
<source>Preset</source>
- <translation type="unfinished"></translation>
+ <translation>Pré-réglage</translation>
</message>
<message>
<source>by </source>
- <translation type="unfinished"></translation>
+ <translation>par </translation>
</message>
<message>
<source> - VST plugin control</source>
- <translation type="unfinished"></translation>
+ <translation> - contrôle de greffon VST</translation>
</message>
</context>
<context>
<name>VstEffectControlDialog</name>
<message>
<source>Show/hide</source>
- <translation type="unfinished"></translation>
+ <translation>Montrer/Cacher</translation>
</message>
<message>
<source>Control VST-plugin from LMMS host</source>
- <translation type="unfinished"></translation>
+ <translation>Contrôler le greffon VST à partir de l'hôte LMMS</translation>
</message>
<message>
<source>Click here, if you want to control VST-plugin from host.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez contrôler le greffon VST à partir de l'hôte.</translation>
</message>
<message>
<source>Open VST-plugin preset</source>
- <translation type="unfinished"></translation>
+ <translation>Ouvrir le pré-réglage du greffon VST</translation>
</message>
<message>
<source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez ouvrir un autre pré-réglage de greffon VST *.fxp, *.fxb.</translation>
</message>
<message>
<source>Previous (-)</source>
- <translation type="unfinished"></translation>
+ <translation>Précédent (-)</translation>
</message>
<message>
<source>Click here, if you want to switch to another VST-plugin preset program.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez passer à un autre programme de pré-réglage de plugin VST.</translation>
</message>
<message>
<source>Next (+)</source>
- <translation type="unfinished"></translation>
+ <translation>Suivant (+)</translation>
</message>
<message>
<source>Click here to select presets that are currently loaded in VST.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici pour sélectionner les pré-réglages qui sont actuellement chargés dans le VST.</translation>
</message>
<message>
<source>Save preset</source>
- <translation type="unfinished">Enregistrer le préréglage</translation>
+ <translation>Enregistrer le pré-réglage</translation>
</message>
<message>
<source>Click here, if you want to save current VST-plugin preset program.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez sauvegarder le programme de pré-réglage de greffon VST courant.</translation>
</message>
<message>
<source>Effect by: </source>
- <translation type="unfinished"></translation>
+ <translation>Effet par:</translation>
</message>
<message>
<source> <br /></source>
- <translation type="unfinished"></translation>
+ <translation> <br /></translation>
</message>
</context>
<context>
@@ -3425,57 +4827,305 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré
<translation>Chargement du greffon</translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation>Veuillez patienter pendant le chargement du greffon VST...</translation>
+ <source>Open Preset</source>
+ <translation>Ouvrir le Pré-réglage</translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation>Le chargement du greffon VST a échoué</translation>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation>Pré-réglage de Greffon VST (*.fxp *.fxb)</translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation>Le greffon VST %1 n'a pas pu être chargé pour une raison quelconque.
-S'il fonctionne avec d'autres logiciels VST sous Linux, merci de contacter un développeur LMMS !</translation>
+ <source>: default</source>
+ <translation>: défaut</translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>"</source>
+ <translation>"</translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation>'</translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation>Enregistrer le pré-réglage</translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation>.fxp</translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation>.FXP</translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation>.FXB</translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation>.fxb</translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Failed loading VST plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
<message>
- <source>"</source>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A1-B2 Crosstalk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A2-A1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B2-B1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected graph</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynView</name>
+ <message>
+ <source>Select oscillator A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Mix output of A2 to A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-modulate A1 and A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of B2 to B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-modulate B1 and B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished">Dessinez ici votre propre forme d'onde en faisant glisser votre souris sur ce graphique.</translation>
+ </message>
+ <message>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phase left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phase right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Normalize</source>
+ <translation type="unfinished">Normaliser</translation>
+ </message>
+ <message>
+ <source>Click to normalize</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to invert</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth</source>
+ <translation type="unfinished">Lisser</translation>
+ </message>
+ <message>
+ <source>Click to smooth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation type="unfinished">Onde sinusoïdale</translation>
+ </message>
+ <message>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
- <translation type="unfinished"></translation>
+ <source>Triangle wave</source>
+ <translation type="unfinished">Onde triangulaire</translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
- <translation type="unfinished"></translation>
+ <source>Square wave</source>
+ <translation type="unfinished">Onde carrée</translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3483,35 +5133,35 @@ S'il fonctionne avec d'autres logiciels VST sous Linux, merci de conta
<name>ZynAddSubFxInstrument</name>
<message>
<source>Portamento</source>
- <translation type="unfinished"></translation>
+ <translation>Portamento</translation>
</message>
<message>
<source>Filter Frequency</source>
- <translation type="unfinished"></translation>
+ <translation>Fréquence du Filtre</translation>
</message>
<message>
<source>Filter Resonance</source>
- <translation type="unfinished"></translation>
+ <translation>Résonance du Filtre</translation>
</message>
<message>
<source>Bandwidth</source>
- <translation type="unfinished"></translation>
+ <translation>Largeur de bande</translation>
</message>
<message>
<source>FM Gain</source>
- <translation type="unfinished"></translation>
+ <translation>Gain FM</translation>
</message>
<message>
<source>Resonance Center Frequency</source>
- <translation type="unfinished"></translation>
+ <translation>Fréquence Centrale de la Résonance</translation>
</message>
<message>
<source>Resonance Bandwidth</source>
- <translation type="unfinished"></translation>
+ <translation>Largeur de Bande de la Résonance</translation>
</message>
<message>
<source>Forward MIDI Control Change Events</source>
- <translation type="unfinished"></translation>
+ <translation>Transmet les évènements MIDI Control Change</translation>
</message>
</context>
<context>
@@ -3526,63 +5176,63 @@ S'il fonctionne avec d'autres logiciels VST sous Linux, merci de conta
</message>
<message>
<source>Portamento:</source>
- <translation type="unfinished"></translation>
+ <translation>Portamento:</translation>
</message>
<message>
<source>PORT</source>
- <translation type="unfinished"></translation>
+ <translation>PORT</translation>
</message>
<message>
<source>Filter Frequency:</source>
- <translation type="unfinished"></translation>
+ <translation>Fréquence du Filtre:</translation>
</message>
<message>
<source>FREQ</source>
- <translation type="unfinished">FRÉQ</translation>
+ <translation>FRÉQ</translation>
</message>
<message>
<source>Filter Resonance:</source>
- <translation type="unfinished"></translation>
+ <translation>Résonance du Filtre:</translation>
</message>
<message>
<source>RES</source>
- <translation type="unfinished">RES</translation>
+ <translation>RES</translation>
</message>
<message>
<source>Bandwidth:</source>
- <translation type="unfinished"></translation>
+ <translation>Largeur de bande:</translation>
</message>
<message>
<source>BW</source>
- <translation type="unfinished"></translation>
+ <translation>BW</translation>
</message>
<message>
<source>FM Gain:</source>
- <translation type="unfinished"></translation>
+ <translation>Gain FM:</translation>
</message>
<message>
<source>FM GAIN</source>
- <translation type="unfinished"></translation>
+ <translation>GAIN FM</translation>
</message>
<message>
<source>Resonance center frequency:</source>
- <translation type="unfinished"></translation>
+ <translation>Fréquence centrale de la résonance:</translation>
</message>
<message>
<source>RES CF</source>
- <translation type="unfinished"></translation>
+ <translation>RES CF</translation>
</message>
<message>
<source>Resonance bandwidth:</source>
- <translation type="unfinished"></translation>
+ <translation>Largeur de Bande de la Résonance:</translation>
</message>
<message>
<source>RES BW</source>
- <translation type="unfinished"></translation>
+ <translation>RES BW</translation>
</message>
<message>
<source>Forward MIDI Control Changes</source>
- <translation type="unfinished"></translation>
+ <translation>Transmet les évènements MIDI Control Change</translation>
</message>
</context>
<context>
@@ -3604,54 +5254,33 @@ S'il fonctionne avec d'autres logiciels VST sous Linux, merci de conta
<translation>Inverser l'échantillon</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Jouer en boucle</translation>
- </message>
- <message>
<source>Stutter</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation>FRÉQ</translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation>Fréquence :</translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation>GAIN</translation>
+ <translatorcomment>??</translatorcomment>
+ <translation>Bégaiement</translation>
</message>
<message>
- <source>Gain:</source>
- <translation>Gain :</translation>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
- <translation>RAPPORT</translation>
+ <source>Loop mode</source>
+ <translation type="unfinished">Mode de jeu en boucle</translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>Rapport :</translation>
+ <source>Interpolation mode</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
- <translation>Fréquence</translation>
+ <source>None</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Gain</translation>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
- <translation>Rapport</translation>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3686,11 +5315,11 @@ S'il fonctionne avec d'autres logiciels VST sous Linux, merci de conta
</message>
<message>
<source>Remove steps</source>
- <translation type="unfinished">Supprimer des pas</translation>
+ <translation>Supprimer des pas</translation>
</message>
<message>
<source>Add steps</source>
- <translation type="unfinished">Ajouter des pas</translation>
+ <translation>Ajouter des pas</translation>
</message>
</context>
<context>
@@ -3711,6 +5340,10 @@ S'il fonctionne avec d'autres logiciels VST sous Linux, merci de conta
<source>Change color</source>
<translation>Changer la couleur</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3720,7 +5353,7 @@ S'il fonctionne avec d'autres logiciels VST sous Linux, merci de conta
</message>
<message>
<source>Clone of %1</source>
- <translation type="unfinished"></translation>
+ <translation>Clone de %1</translation>
</message>
</context>
<context>
@@ -3806,6 +5439,120 @@ S'il fonctionne avec d'autres logiciels VST sous Linux, merci de conta
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3838,71 +5585,65 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f
<name>fader</name>
<message>
<source>Please enter a new value between %1 and %2:</source>
- <translation type="unfinished">Veuillez entrer un valeur entre %1 et %2 :</translation>
+ <translation>Veuillez entrer un valeur entre %1 et %2 :</translation>
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation>Explorateur</translation>
+ <source>Graph</source>
+ <translation>Graphique</translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
- <translation>Envoyer vers la piste d'instrument actif</translation>
+ <source>Start frequency</source>
+ <translation>Fréquence de début</translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
- <translation>Ouvrir dans une nouvelle piste d'instrument/Éditeur de morceau</translation>
+ <source>End frequency</source>
+ <translation>Fréquence de fin</translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
- <translation>Ouvrir dans une nouvelle piste d'instrument/Éditeur de rythme et de ligne de basse</translation>
+ <source>Gain</source>
+ <translation>Gain</translation>
</message>
<message>
- <source>Loading sample</source>
- <translation>Chargement de l'échantillon</translation>
+ <source>Length</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
- <translation>Veuillez patienter, chargement de l'échantillon pour un aperçu...</translation>
+ <source>Distortion Start</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
- <translation>--- Fichiers usine ---</translation>
+ <source>Distortion End</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation>Graphique</translation>
+ <source>Envelope Slope</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrument</name>
<message>
- <source>Start frequency</source>
- <translation>Fréquence de début</translation>
+ <source>Noise</source>
+ <translation type="unfinished">Bruit</translation>
</message>
<message>
- <source>End frequency</source>
- <translation>Fréquence de fin</translation>
+ <source>Click</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
- <translation>Descente</translation>
+ <source>Frequency Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Distorsion</translation>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Gain</translation>
+ <source>End to note</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3916,16 +5657,36 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f
<translation>Fréquence de fin :</translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Descente :</translation>
+ <source>Gain:</source>
+ <translation>Gain :</translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Distorsion :</translation>
+ <source>Frequency Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
- <translation>Gain :</translation>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion End:</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4213,6 +5974,38 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur
<source>Click here for white-noise.</source>
<translation>Cliquez ici pour un bruit blanc.</translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4586,62 +6379,62 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur
<name>manageVSTEffectView</name>
<message>
<source> - VST parameter control</source>
- <translation type="unfinished"></translation>
+ <translation> - Paramètre de contrôle VST</translation>
</message>
<message>
<source>VST Sync</source>
- <translation type="unfinished"></translation>
+ <translation>VST Sync</translation>
</message>
<message>
<source>Click here if you want to synchronize all parameters with VST plugin.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez synchroniser tous les paramètres avec le greffon VST.</translation>
</message>
<message>
<source>Automated</source>
- <translation type="unfinished"></translation>
+ <translation>Automatique</translation>
</message>
<message>
<source>Click here if you want to display automated parameters only.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez seulement afficher les paramètres automatiques.</translation>
</message>
<message>
<source> Close </source>
- <translation type="unfinished"></translation>
+ <translation> Fermer </translation>
</message>
<message>
<source>Close VST effect knob-controller window.</source>
- <translation type="unfinished"></translation>
+ <translation>Fermer la fenêtre des boutons contrôleurs des effets VST.</translation>
</message>
</context>
<context>
<name>manageVestigeInstrumentView</name>
<message>
<source> - VST plugin control</source>
- <translation type="unfinished"></translation>
+ <translation> - contrôle de greffon VST</translation>
</message>
<message>
<source>VST Sync</source>
- <translation type="unfinished"></translation>
+ <translation>VST Sync</translation>
</message>
<message>
<source>Click here if you want to synchronize all parameters with VST plugin.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez synchroniser tous les paramètres avec le greffon VST.</translation>
</message>
<message>
<source>Automated</source>
- <translation type="unfinished"></translation>
+ <translation>Automatique</translation>
</message>
<message>
<source>Click here if you want to display automated parameters only.</source>
- <translation type="unfinished"></translation>
+ <translation>Cliquez ici si vous voulez seulement afficher les paramètres automatiques.</translation>
</message>
<message>
<source> Close </source>
- <translation type="unfinished"></translation>
+ <translation> Fermer </translation>
</message>
<message>
<source>Close VST plugin knob-controller window.</source>
- <translation type="unfinished"></translation>
+ <translation>Fermer la fenêtre des boutons contrôleurs des effets VST.</translation>
</message>
</context>
<context>
@@ -4655,39 +6448,39 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur
<name>opl2instrument</name>
<message>
<source>Patch</source>
- <translation type="unfinished">Son</translation>
+ <translation>Son</translation>
</message>
<message>
<source>Op 1 Attack</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Op 1 Decay</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Op 1 Sustain</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Op 1 Release</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Op 1 Level</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Op 1 Level Scaling</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Op 1 Frequency Multiple</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Op 1 Feedback</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Op 1 Key Scaling Rate</source>
@@ -4759,15 +6552,15 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur
</message>
<message>
<source>FM</source>
- <translation type="unfinished"></translation>
+ <translation>FM</translation>
</message>
<message>
<source>Vibrato Depth</source>
- <translation type="unfinished"></translation>
+ <translation>Profondeur de Vibrato</translation>
</message>
<message>
<source>Tremolo Depth</source>
- <translation type="unfinished"></translation>
+ <translation>Profondeur de Trémolo</translation>
</message>
</context>
<context>
@@ -4808,13 +6601,29 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur
<translation>Panoramique de l'oscillateur %1 :</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Désaccordage fin (gauche) de l'oscillateur %1 :</translation>
- </message>
- <message>
<source>cents</source>
<translation>centièmes</translation>
</message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>papuInstrument</name>
@@ -5083,216 +6892,6 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>Le motif n'a pas pu être gelé</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>Le motif n'a pas pu être gelé car vous êtes en mode écoute. Veuillez arrêter de jouer le motif et recommencer !</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Gel du motif...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Annuler</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>double-cliquer pour ouvrir ce motif dans le piano virtuel
-utilisez la molette de la souris pour régler le volume d'un pas</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>Ouvrir dans le piano virtuel</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>Effacer toutes les notes</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>Réinitialiser le nom</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>Changer le nom</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation>Regeler</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation>Geler</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation>Dégeler</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>Ajouter des pas</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>Supprimer des pas</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Jouer/Mettre en pause le motif (Barre d'espace)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Arrêter de jouer le motif (Barre d'espace)</translation>
- </message>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Couper les notes sélectionnées (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Copier les notes sélectionnées (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Coller les notes se trouvant dans le presse-papier (Ctrl+V)</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Piano virtuel - pas de motif</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>Piano virtuel - %1</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Veuillez ouvrir un motif en double-cliquant dessus !</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano pendant l'écoute d'un morceau ou bien d'une piste de rythme ou de ligne de basse</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>Mode dessin (Shift+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>Mode effacement (Shift+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>Mode sélection (Shift+S)</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>Dernière note</translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation>Cliquez ici pour jouer le motif. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation>Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous pourrez ensuite les jouer et les éditer.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation>Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous entendrez le morceau ou bien le rythme ou la ligne de basse en fond sonore.</translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation>Cliquez ici pour arrêter de jouer le motif.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller.</translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation>Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible.</translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation>Vérouiller la note</translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation>Volume de la note </translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation>Panoramique de la note</translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation>Mode désaccordage (Shift+T)</translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation>Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter, redimensionner et déplacer des notes. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. Dans ce mode, appuyez sur Ctrl pour passer temporairement dans le mode sélection.</translation>
- </message>
- <message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation>Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des notes. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode.</translation>
- </message>
- <message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation>Cliquez ici et le mode sélection sera activé. Dans ce mode vous pourrez sélectionner des notes. Dans ce mode, appuyez appuyer sur Ctrl pour passer temporairement en mode dessin.</translation>
- </message>
- <message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation>Cliquez ici et le mode désaccordage sera activé. Dans ce mode vous pourrer cliquer sur une note pour accéder à l'automation de son désaccordage. Vous pouvez utiliser ceci pour lier des notes entre-elles. Vous pouvez aussi appuyer sur les touches 'Shift+T' de votre clavier pour activer ce mode.</translation>
- </message>
- <message>
- <source>Mark/unmark current semitone</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current chord</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unmark all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No chord</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>pluginBrowser</name>
<message>
<source>no description</source>
@@ -5323,42 +6922,22 @@ utilisez la molette de la souris pour régler le volume d'un pas</translati
<translation>Liste des greffons LADSPA installés</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>Trois puissants oscillateurs que vous pouvez moduler de plusieurs façons</translation>
- </message>
- <message>
<source>Filter for importing FL Studio projects into LMMS</source>
<translation>Filtre pour l'importation de projets Fruity Loops Studio dans LMMS</translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation>Synthétiseur de kick et grosse caisse polyvalent</translation>
- </message>
- <message>
<source>GUS-compatible patch instrument</source>
<translation>Sons d'instruments compatibles avec la carte Gravis UltraSound (GUS)</translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation>Greffon pour l'utilisation d'effets VST dans LMMS.</translation>
- </message>
- <message>
<source>Additive Synthesizer for organ-like sounds</source>
<translation>Synthétiseur additif pour sons d'orgue</translation>
</message>
<message>
- <source>plugin for boosting bass</source>
- <translation>Greffon pour l'augmentation des basses</translation>
- </message>
- <message>
<source>Tuneful things to bang on</source>
<translation>Instruments à frapper mélodieux</translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>Échantilloneur simple avec différents réglages pour l'utilisation d'échantillons (p. ex. batteries) dans une piste d'instrument</translation>
- </message>
- <message>
<source>VST-host for using VST(i)-plugins within LMMS</source>
<translation>Hôte VST pour l'utilisation de greffons VST(i) dans LMMS</translation>
</message>
@@ -5405,14 +6984,70 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>2-operator FM Synth</source>
- <translation type="unfinished"></translation>
+ <translation>Synthé FM à 2 opérateurs</translation>
</message>
<message>
<source>Filter for importing Hydrogen files into LMMS</source>
- <translation type="unfinished"></translation>
+ <translation>Filtre pour importer des fichiers Hydrogen dans LMMS</translation>
</message>
<message>
<source>LMMS port of sfxr</source>
+ <translation>Port LMMS de sfxr</translation>
+ </message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5712,35 +7347,35 @@ Latence : %2 ms</translation>
</message>
<message>
<source>One instrument track window mode</source>
- <translation type="unfinished"></translation>
+ <translation>Mode fenêtre une piste d'instrument</translation>
</message>
<message>
<source>Compact track buttons</source>
- <translation type="unfinished"></translation>
+ <translation>Boutons de piste compacte</translation>
</message>
<message>
<source>Sync VST plugins to host playback</source>
- <translation type="unfinished"></translation>
+ <translation>Sync les greffons VST à la lecture de l'hôte</translation>
</message>
<message>
<source>Enable note labels in piano roll</source>
- <translation type="unfinished"></translation>
+ <translation>Activer les étiquettes de note dans le piano virtuel</translation>
</message>
<message>
<source>Enable waveform display by default</source>
- <translation type="unfinished"></translation>
+ <translation>Activer l'affichage de forme d'onde par défaut</translation>
</message>
<message>
<source>Smooth scroll in Song Editor</source>
- <translation type="unfinished"></translation>
+ <translation>Déplacement fluide dans l'Editeur de Chanson</translation>
</message>
<message>
<source>Enable auto save feature</source>
- <translation type="unfinished"></translation>
+ <translation>Activer la fonction de sauvegarde automatique</translation>
</message>
<message>
<source>Show playback cursor in AudioFileProcessor</source>
- <translation type="unfinished"></translation>
+ <translation>Afficher le curseur de lecture dans AudioFileProcessor</translation>
</message>
</context>
<context>
@@ -5877,7 +7512,7 @@ Latence : %2 ms</translation>
<name>sfxrInstrument</name>
<message>
<source>Wave Form</source>
- <translation type="unfinished"></translation>
+ <translation>Forme d'Onde</translation>
</message>
</context>
<context>
@@ -6106,158 +7741,11 @@ Latence : %2 ms</translation>
</message>
<message>
<source>Hydrogen projects</source>
- <translation type="unfinished"></translation>
+ <translation>Projets Hydrogen</translation>
</message>
<message>
<source>Select directory for writing exported tracks...</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation>Éditeur de morceau</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Jouer le morceau (Barre d'espace)</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Cliquez ici si vous souhaitez jouer le morceau en entier. L'écoute commencera à partir du marquer (vert) de position dans le morceau. Vous pouvez aussi déplacer ce curseur pendant l'écoute.</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Arrêter de jouer le morceau (Barre d'espace)</translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Cliquez ici si vous souhaitez ne plus jouer le morceau. Le curseur de position sera placé au début du morceau.</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Ajouter une piste de rythme ou de ligne de basse</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Ajouter une piste d'échantillon</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>Le fichier n'a pas pu être ouvert</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>Le fichier n'a pas pu être écrit</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation>Ajouter une piste d'automation</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>Mode dessin</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>Mode édition (Sélectionner et déplacer)</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation>Enregistrer des échantillons à partir d'un périphérique audio</translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation>Enregistrer des échantillons à partir d'un périphérique audio pendant l'écoute d'un morceau ou bien d'un rythme ou d'une ligne de basse</translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation>Le fichier %1 n'a pas pu être ouvert. Vos n'avez probablement pas le droit de lire ce fichier.
-Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le répertoire qui contient ce fichier et réessayez.</translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation>Il y a une ou plusieurs erreurs dans le fichier</translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation>Le fichier %1 semble contenir des erreurs et ne peut donc pas être chargés.</translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation>Tempo</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation>TEMPO/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation>tempo du morceau</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation>Le tempo de ce morceau est spécifié en battements par minute (BPM). Si vous souhaitez changer le tempo de votre morceau, modifiez cette valeur. Chaque mesure à quatre battements, ce qui fait que le tempo en BPM indique le nombre de mesures / 4 qui doivent être jouées dans une minute (ou le nombre de mesures qui doivent être jouées en quatre minutes).</translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation>Mode haute qualité</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation>Volume général</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation>volume général</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation>Tonalité générale</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation>tonalité générale</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation>Valeur : %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation>Valeur : %1 demi-tons</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Spectre linéaire</translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation>Axe Y linéaire</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Spectre linéaire</translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation>Axe Y linéaire</translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation>Mode du canal</translation>
+ <translation>Sélectionnez un répertoire pour écrire les pistes exportées...</translation>
</message>
</context>
<context>
@@ -6344,11 +7832,11 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré
</message>
<message>
<source>Press <Ctrl> to disable magnetic loop points.</source>
- <translation type="unfinished"></translation>
+ <translation>Appuyez sur <Ctrl> pour désactiver les marqueur magnétiques de jeu en boucle.</translation>
</message>
<message>
<source>Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points.</source>
- <translation type="unfinished"></translation>
+ <translation>Maintenez <Shift> pour déplacer le marqueur de début de jeu en boucle. Appuyez sur <Ctrl> pour désactiver les marqueurs magnétiques de jeu en boucle.</translation>
</message>
</context>
<context>
@@ -6446,6 +7934,18 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré
<source>Remove this track</source>
<translation>Supprimer cette piste</translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6780,4 +8280,74 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o
<translation>Test de la voix %1</translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/gl.qm b/data/locale/gl.qm
index 97cee73..c36f2b4 100644
Binary files a/data/locale/gl.qm and b/data/locale/gl.qm differ
diff --git a/data/locale/gl.ts b/data/locale/gl.ts
index d830c55..fcbd587 100644
--- a/data/locale/gl.ts
+++ b/data/locale/gl.ts
@@ -8,10 +8,6 @@
<translation>Sobre o LMMS</translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation>LMMS (Estudio Multimedia de Linux)</translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation>Versión %1 (%2/%3, Qt %4, %5)</translation>
</message>
@@ -48,7 +44,65 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións
<translation type="unfinished">Copyright (c) 2004-2009, os desenvolvedores do LMMS {2004-2013,?} {2004-2014,?}</translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished">LMMS</translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">Volume:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished">PAN</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished">Panorámica:</translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volume</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished">Panorámica</translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -82,14 +136,6 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións
<translation>Ao activar este botón invértese a mostra completa. Isto é útil para efectos gaioleiros, como un crash invertido.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation>Repetir a mostra en bucle nos puntos inicial e final</translation>
- </message>
- <message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation>Aquí pódese configurar se se desexa activar o modo de bucle. De activalo, o procesador de ficheiros de son repite entre os puntos inicial e final dunha mostra até que se toca a nota enteira. Isto é últil para cousas como mostras de corda e coro.</translation>
- </message>
- <message>
<source>Amplify:</source>
<translation>Amplificar:</translation>
</message>
@@ -102,18 +148,10 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións
<translation>Punto inicial:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Con este botón pódese indicar o punto se desexa que o AudioFileProcessor comece a reproducir a mostra. Se o modo en bucle estiver activado, este é o punto ao que volta o AudioFileProcessor se unha nota é máis longa do que a mostra entre os puntos inicial e final.</translation>
- </message>
- <message>
<source>Endpoint:</source>
<translation>Punto final:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Con este botón pódese indicar o punto no que desexe o AudioFileProcessor pare a reprodución da mostra. Se o modo en bucle estiver activado, este é o punto ao que o AudioFileProcessor volve se a nota for máis longa que a mostra entre os puntos inicial e final.</translation>
- </message>
- <message>
<source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
@@ -121,6 +159,42 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións
<source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Disable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioFileProcessorWaveView</name>
@@ -367,6 +441,10 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished">Arrastre un control mentres ten <Ctrl> premido</translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -398,6 +476,10 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións
<source>Disconnect "%1"</source>
<translation type="unfinished">Desconectar «%1»</translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Indicar/Limpar a gravación</translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -407,6 +489,59 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished">FREQ</translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished">Frecuencia:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished">GAIN</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished">Ganancia:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished">TAXA</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished">Taxa:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished">Frecuencia</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished">Ganancia</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished">Taxa</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished">Mostrar a interface gráfica</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -519,6 +654,132 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished">Pasa-baixas</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished">Pasa-altas</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished">Pasa-faixa csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">Pasa-faixa czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">Entalle</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">Pasa-todo</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished">2x Pasa-baixas</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished">RC pasa-baixa 12dB</translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished">RC pasa-faixa 12dB</translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished">RC pasa-alta 12dB</translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished">RC pasa-baixa 24dB</translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished">RC pasa-faixa 24dB</translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished">RC pasa-alta 24dB</translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished">Filtro de formante vocal</translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -894,6 +1155,10 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation>Arrastre un exemplo doutro sitio e sólteo sobre esta xanela.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1022,14 +1287,6 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
<translation>8x</translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translation>Controladores de mostras exactas</translation>
- </message>
- <message>
- <source>Alias-free oscillators</source>
- <translation>Osciladores sen alias</translation>
- </message>
- <message>
<source>Start</source>
<translation>Comezar</translation>
</message>
@@ -1043,41 +1300,122 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
</message>
</context>
<context>
- <name>FxMixer</name>
- <message>
- <source>Master</source>
- <translation>Global</translation>
- </message>
+ <name>FileBrowser</name>
<message>
- <source>FX %1</source>
- <translation>Efecto %1</translation>
+ <source>Browser</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>FxMixerView</name>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Rename FX channel</source>
- <translation>Mudar o nome desta canle de efectos especiais</translation>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Enter the new name for this FX channel</source>
- <translation>Introduza o novo nome para esta canle de efectos especiais</translation>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>FX-Mixer</source>
- <translation>Mesturador de efectos especiais</translation>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>FX Fader %1</source>
- <translation>Fader de efectos %1</translation>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute</source>
- <translation>Silenciar</translation>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&Axuda</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixer</name>
+ <message>
+ <source>Master</source>
+ <translation>Global</translation>
+ </message>
+ <message>
+ <source>FX %1</source>
+ <translation>Efecto %1</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView</name>
+ <message>
+ <source>Rename FX channel</source>
+ <translation>Mudar o nome desta canle de efectos especiais</translation>
+ </message>
+ <message>
+ <source>Enter the new name for this FX channel</source>
+ <translation>Introduza o novo nome para esta canle de efectos especiais</translation>
+ </message>
+ <message>
+ <source>FX-Mixer</source>
+ <translation>Mesturador de efectos especiais</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
+ <message>
+ <source>FX Fader %1</source>
+ <translation type="unfinished">Fader de efectos %1</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished">Silenciar</translation>
</message>
<message>
<source>Mute this FX channel</source>
- <translation>Silenciar esta canle de efectos especiais</translation>
+ <translation type="unfinished">Silenciar esta canle de efectos especiais</translation>
+ </message>
+</context>
+<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1138,6 +1476,10 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
<source>Sync</source>
<translation type="unfinished">Sincronizar</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1151,7 +1493,7 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
</message>
<message>
<source>RANGE</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">INTERVALO</translation>
</message>
<message>
<source>Arpeggio range:</source>
@@ -1159,7 +1501,7 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
</message>
<message>
<source>octave(s)</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">oitava(s)</translation>
</message>
<message>
<source>Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.</source>
@@ -1580,6 +1922,18 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished">5</translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1642,6 +1996,18 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1788,6 +2154,10 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1874,10 +2244,6 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
<translation>CONFIGURACIÓN XERAL</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation>Prema aquí se desexa gravar a configuración desta canle nun ficheiro de predefinicións. Noutras ocasións poderá cargar estas predefinicións facendo duplo clic no navegador de predefinicións.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation>Volume do instrumento</translation>
</message>
@@ -1950,15 +2316,19 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
<translation>ENGADIDO</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
+ <source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pitch range (semitones)</source>
+ <source>RANGE</source>
+ <translation type="unfinished">INTERVALO</translation>
+ </message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RANGE</source>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2007,6 +2377,13 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Introduza un valor novo entre %1 e %2:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2383,11 +2760,23 @@ Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
+ <source>Version %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Version %1</source>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2506,202 +2895,1063 @@ Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS.</translation>
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation>Volume do oscilador %1</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation>Panorámica do oscilador %1</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation>Desafinación bruta do oscilador %1</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation>Desafinación fina esquerda do oscilador %1</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation>Desafinación fina dereita do oscilador %1</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation>Desprazamento da fase do oscilador %1</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation>Desafinación de fase en estéreo do oscilador %1</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation>Forma da onda do oscilador %1</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
- <translation>Tipo de modulación %1</translation>
+ <source>Osc 1 Sync send on fall</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation>Forma de onda do oscilador %1</translation>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation>Abrir outro parche</translation>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation>Prema aquí para abrir outro ficheiro de parche. A configuración dos bucles e a afinación non se restauran.</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation>Bucle</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
- <translation>Modo de bucle</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation>Aquí pódese alternar entre modos de bucle. Cando está activado, o PatMan emprega a información sobre o bucle dispoñíbel no ficheiro.</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
- <translation>Afinación</translation>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
- <translation>Modo de afinación</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation>Aquí pódese alternar entre modos de afinación. Cando está activado o Patman afina a mostra para que coincida coa frecuencia da nota.</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
- <translation>Non escolleu ningún ficheiro</translation>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
- <translation>Abrir un ficheiro de parches</translation>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation>Ficheiros de parches (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
- <translation>Controlador de picos</translation>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
- <translation>PICO</translation>
+ <source>Osc 3 Waveform 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation>Controlador do LFO</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
- <translation>BASE</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
- <translation>Cantidade base:</translation>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Cantidade de modulación:</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
- <translation>Ataque:</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
- <translation>Relaxamento:</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
- <translation>Valor base</translation>
+ <source>Env 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation>Cantidade de modulación</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
- <translation>Ataque</translation>
+ <source>Env 1 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
- <translation>Relaxamento</translation>
+ <source>Env 1 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
- <translation>Silenciar a saída</translation>
+ <source>Env 1 Release</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation>Nota base</translation>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Volume global</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished">Vibrato</translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation>Volume do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation>Panorámica do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation>Desafinación bruta do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation>Desafinación fina esquerda do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation>Desafinación fina dereita do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation>Desprazamento da fase do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation>Desafinación de fase en estéreo do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation>Forma da onda do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation>Tipo de modulación %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation>Forma de onda do oscilador %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation>Abrir outro parche</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation>Prema aquí para abrir outro ficheiro de parche. A configuración dos bucles e a afinación non se restauran.</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation>Bucle</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation>Modo de bucle</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation>Aquí pódese alternar entre modos de bucle. Cando está activado, o PatMan emprega a información sobre o bucle dispoñíbel no ficheiro.</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation>Afinación</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation>Modo de afinación</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation>Aquí pódese alternar entre modos de afinación. Cando está activado o Patman afina a mostra para que coincida coa frecuencia da nota.</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation>Non escolleu ningún ficheiro</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation>Abrir un ficheiro de parches</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation>Ficheiros de parches (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>faga duplo clic para abrir este padrón na pianola
+empregue a roda do rato para modificar o volume un paso</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>Abrir na pianola</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>Limpar todas as notas</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>Restaurar o nome</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Mudar o nome</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>Engadir pasos</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>Eliminar pasos</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation>Controlador de picos</translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation>PICO</translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation>Controlador do LFO</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation>BASE</translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation>Cantidade base:</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation>Cantidade de modulación:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation>Ataque:</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation>Relaxamento:</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation>Valor base</translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation>Cantidade de modulación</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation>Ataque</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation>Relaxamento</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation>Silenciar a saída</translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Reproducir/Deter o padrón actual (Espazo)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Parar a execución do padrón actual (Espazo)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Recortar as notas escollidas (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Copiar as notas escollidas (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Apegar as notas do porta-retallos (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Pianola - non hai ningún padrón</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>Pianola - %1</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Abra un padrón facendo duplo clic nel!</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Gravar notas dun dispositivo MIDI/piano de canle</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>Gravar notas dun dispositivo MIDI/piano de canle mentres se reproduce a canción ou pista de ritmos/liña do baixo</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Modo de debuxo (Maiúsculas+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Modo de borrado (Maiúsculas+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>Modo de selección (Maiúscula+S)</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>Última nota</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation>Prema aquí para reproducir este padrón. Isto é útil mentres se edita. O padrón repítese en bucle automaticamente ao chegar ao final.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation>Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e despois pódense editar.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation>Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e escóitase a canción ou pista de ritmos/liña do baixo no fondo.</translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation>Prema aquí para parar a reprodución deste padrón.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Prema aquí e os valores escollidos recórtanse e van para o porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Prema aquí e os valores escollidos cópianse no porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar.</translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation>Prema aquí e os valores do porta-retallos apegaranse no primeiro compás visíbel.</translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation>Bloqueo de notas</translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation>Volume das notas</translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation>Panormámica das notas</translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation>Modo de desafinación (Maiúsculas+T)</translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation>Prema aquí e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este é o modo por omisión que se emprega a maior parte do tempo. Tamén pode premer «Maiúsculas+D» no teclado para activar este modo. Neste modo, manteña Ctrl para ir temporalmente ao modo de selección.</translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation>Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Tamén pode premer «Maiúsculas+E» no teclado para activar este modo.</translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation>Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Como alternativa pode premer Ctrl no modo de debuxo para empregar temporalmente o modo de selección.</translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation>Prema aquí e actívase o modo de desafinación.Neste modo pódese premer unhanota para abrir a súa desafinación de automatización. Pódese empregar isto para escorregar entre as notas. Tamén se pode premer «Maiúsculas+T» no teclado para activar este mdo.</translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Introduza un valor novo entre %1 e %2:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation>Nota base</translation>
</message>
</context>
<context>
@@ -2724,6 +3974,10 @@ Razón: «%2»</translation>
<source>Failed to load plugin "%1"!</source>
<translation>Fallou a carga do engadido «%1»!</translation>
</message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ProjectRenderer</name>
@@ -2870,6 +4124,10 @@ Razón: «%2»</translation>
<source>File: </source>
<translation>Ficheiro: </translation>
</message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleBuffer</name>
@@ -2878,10 +4136,6 @@ Razón: «%2»</translation>
<translation type="unfinished">Abrir un ficheiro de son</translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation type="unfinished">Todos os ficheiros de son (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
- </message>
- <message>
<source>Wave-Files (*.wav)</source>
<translation type="unfinished">Ficheiros wave (*.wav)</translation>
</message>
@@ -2902,10 +4156,6 @@ Razón: «%2»</translation>
<translation type="unfinished">Ficheiros SPEEX (*.spx)</translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation type="unfinished">Ficheiros MP3 (*.mp3)</translation>
- </message>
- <message>
<source>VOC-Files (*.voc)</source>
<translation type="unfinished">Ficheiros VOC (*.voc)</translation>
</message>
@@ -2921,6 +4171,10 @@ Razón: «%2»</translation>
<source>RAW-Files (*.raw)</source>
<translation type="unfinished">Ficheiros RAW (*.raw)</translation>
</message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleTCOView</name>
@@ -2929,54 +4183,200 @@ Razón: «%2»</translation>
<translation type="unfinished">faga duplo clic para escoller unha mostra</translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
- <translation type="unfinished">Eliminar (botón do medio do rato)</translation>
+ <source>Delete (middle mousebutton)</source>
+ <translation type="unfinished">Eliminar (botón do medio do rato)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">Recortar</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">Copiar</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">Apegar</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished">Silenciar/Darlle volume (<Ctrl> + botón central do rato)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Indicar/Limpar a gravación</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">Pista de mostras</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volume</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished">Volume da pista</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished">Volume da canle:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Editor de cancións</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Reproducir unha canción (Espazo)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Prema aquí se desexa reproducir a canción enteira. A reprodución comeza no marcador de posición da canción (verde). Tamén se pode mover durante a reprodución.</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Parar a canción (Espazo)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Prema aquí se desexa parar a reprodución da canción. O marcador de posición da canción irá para o principio da canción.</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Engadir un ritmo/liña do baixo</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Engadir unha pista de mostra</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>Non foi posíbel abrir o ficheiro</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>Non foi posíbel escribir no ficheiro</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>Engaidr unha pista de automatización</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Modo de debuxo</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Modo de edición (escoller e mover)</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation>Gravar mostras dun dispositivo de son</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>Gravar mostras dun dispositivo de son mentres se reproduce a canción ou pista de ritmos/liña do baixo</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation>Non foi posíbel abrir o ficheiro %1. Probabelmente vostede non teña permiso para ler este ficheiro. Asegúrese de ter cando menos permiso para ler o ficheiro e ténteo de novo.</translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation>Hai un erro no ficheiro</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation>Parece que o ficheiro %1 contén erros e por iso non se pode cargar.</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished">Tempo</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished">TEMPO/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">tempo da canción</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished">O tempo dunha canción indícase en pulsos por minuto (BPM). Para cambiar o tempo da canción hai que cambiar este valor. Cada compás ten catro pulsos, polo que o tempo en BPM indica cantos compases / 4 hai que tocar nun minuto (ou cantos compases habería que tocar en catro minutos).</translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished">Modo de alta calidade</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Volume global</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished">volume global</translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">Recortar</translation>
+ <source>Master pitch</source>
+ <translation type="unfinished">Altura global</translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">Copiar</translation>
+ <source>master pitch</source>
+ <translation type="unfinished">altura global</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">Apegar</translation>
+ <source>Value: %1%</source>
+ <translation type="unfinished">Valor: %1%</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation type="unfinished">Silenciar/Darlle volume (<Ctrl> + botón central do rato)</translation>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished">Valor: %1 semitóns</translation>
</message>
<message>
- <source>Set/clear record</source>
- <translation type="unfinished">Indicar/Limpar a gravación</translation>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">Pista de mostras</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Espectro linear</translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">Volume</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Eixo linear Y</translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation type="unfinished">Volume da pista</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Espectro linear</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">Volume da canle:</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Eixo linear Y</translation>
</message>
<message>
- <source>VOL</source>
- <translation type="unfinished">VOL</translation>
+ <source>Channel mode</source>
+ <translation type="unfinished">Modo da canle</translation>
</message>
</context>
<context>
@@ -3312,171 +4712,419 @@ Asegúrese de ter permiso de lectura sobre o ficheiro e o directorio que o cont
<translation>Non se cargou ningún engadido de VST</translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished">Gardar as predefinicións</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished">Predefinición</translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished">Gardar as predefinicións</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation>A cargar un engadido</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Right detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Right detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Right detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>A-B Mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>A-B Mix envelope amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
- <translation type="unfinished">Gardar as predefinicións</translation>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>A-B Mix envelope hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>A-B Mix envelope decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>A1-B2 Crosstalk</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
- <translation type="unfinished">Predefinición</translation>
+ <source>A2-A1 modulation</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>VstEffectControlDialog</name>
+ <name>WatsynView</name>
<message>
- <source>Show/hide</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
- <translation type="unfinished">Gardar as predefinicións</translation>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
- <translation type="unfinished"></translation>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished">Debuxe aquí a súa propia forma de onda arrastrando o rato polo gráfico.</translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation>A cargar un engadido</translation>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation>Agarde mentres se carga o engadido de VST...</translation>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation>Fallou a carga do engadido de VST</translation>
+ <source>Phase left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation>Non foi posíbel cargar o engadido de VST %1 por algunha razón.
-Se funciona con outro software de VST en Linux, contacte cun desenvolvedor do LMMS!</translation>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Click to shift phase by +15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Normalize</source>
+ <translation type="unfinished">Normalizar</translation>
+ </message>
+ <message>
+ <source>Click to normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
+ <source>Smooth</source>
+ <translation type="unfinished">Suave</translation>
+ </message>
+ <message>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Sine wave</source>
+ <translation type="unfinished">Onda senoidal</translation>
+ </message>
+ <message>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Triangle wave</source>
+ <translation type="unfinished">Onda triangular</translation>
+ </message>
+ <message>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Square wave</source>
+ <translation type="unfinished">Onda cadrada</translation>
+ </message>
+ <message>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3605,54 +5253,32 @@ Se funciona con outro software de VST en Linux, contacte cun desenvolvedor do LM
<translation>Inverter a mostra</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Bucle</translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation>FREQ</translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation>Frecuencia:</translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation>GAIN</translation>
- </message>
<message>
- <source>Gain:</source>
- <translation>Ganancia</translation>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
- <translation>TAXA</translation>
+ <source>Loop mode</source>
+ <translation type="unfinished">Modo de bucle</translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>Taxa:</translation>
+ <source>Interpolation mode</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
- <translation>Frecuencia</translation>
+ <source>None</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Ganancia</translation>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
- <translation>Taxa</translation>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3712,6 +5338,10 @@ Se funciona con outro software de VST en Linux, contacte cun desenvolvedor do LM
<source>Change color</source>
<translation>Mudar a cor</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3807,6 +5437,120 @@ Se funciona con outro software de VST en Linux, contacte cun desenvolvedor do LM
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Export project to %1</source>
@@ -3843,90 +5587,104 @@ Asegúrese de ter permisos sobre o ficheiro e o directorio que o contén e tente
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation type="unfinished"></translation>
+ <source>Graph</source>
+ <translation>Gráfico</translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Start frequency</source>
+ <translation>Frecuencia inicial</translation>
+ </message>
+ <message>
+ <source>End frequency</source>
+ <translation>Frecuencia final</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>Ganancia</translation>
+ </message>
+ <message>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Envelope Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Noise</source>
+ <translation type="unfinished">Ruído</translation>
+ </message>
+ <message>
+ <source>Click</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Frequency Slope</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation>Gráfico</translation>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End to note</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
- <translation>Frecuencia inicial</translation>
+ <source>Start frequency:</source>
+ <translation>Frecuencia inicial:</translation>
</message>
<message>
- <source>End frequency</source>
- <translation>Frecuencia final</translation>
+ <source>End frequency:</source>
+ <translation>Frecuencia final:</translation>
</message>
<message>
- <source>Decay</source>
- <translation>Decaemento</translation>
+ <source>Gain:</source>
+ <translation>Ganancia:</translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Distorsión</translation>
+ <source>Frequency Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Ganancia</translation>
- </message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <source>Start frequency:</source>
- <translation>Frecuencia inicial:</translation>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
- <translation>Frecuencia final:</translation>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Decaemento:</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Distorsión:</translation>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
- <translation>Ganancia:</translation>
+ <source>Distortion End:</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4214,6 +5972,38 @@ Facendo duplo clic sobre calquera dos engadidos mostra información sobre os por
<source>Click here for white-noise.</source>
<translation>Prema aquí para ruído branco.</translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4809,13 +6599,29 @@ Facendo duplo clic sobre calquera dos engadidos mostra información sobre os por
<translation>Panorámica do oscilador %1:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Desafinación fina esquerda do oscilador %1:</translation>
- </message>
- <message>
<source>cents</source>
<translation>cents</translation>
</message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>papuInstrument</name>
@@ -5076,221 +6882,11 @@ Facendo duplo clic sobre calquera dos engadidos mostra información sobre os por
</message>
<message>
<source>The delay between step change</source>
- <translation>A demora entre cambios de paso</translation>
- </message>
- <message>
- <source>Draw the wave here</source>
- <translation>Debuxe a onda aquí</translation>
- </message>
-</context>
-<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>Non é posíbel conxelar o padrón</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>Non é posíbel conxelar agora o padrón porque estamos no modo de reprodución. Pare e ténteo de novo!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>A conxelar o padrón...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Cancelar</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>faga duplo clic para abrir este padrón na pianola
-empregue a roda do rato para modificar o volume un paso</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>Abrir na pianola</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>Limpar todas as notas</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>Restaurar o nome</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>Mudar o nome</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation>Reconxelar</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation>Conxelar</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation>Desconxelar</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>Engadir pasos</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>Eliminar pasos</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Reproducir/Deter o padrón actual (Espazo)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Parar a execución do padrón actual (Espazo)</translation>
- </message>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Recortar as notas escollidas (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Copiar as notas escollidas (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Apegar as notas do porta-retallos (Ctrl+V)</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Pianola - non hai ningún padrón</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>Pianola - %1</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Abra un padrón facendo duplo clic nel!</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Gravar notas dun dispositivo MIDI/piano de canle</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>Gravar notas dun dispositivo MIDI/piano de canle mentres se reproduce a canción ou pista de ritmos/liña do baixo</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>Modo de debuxo (Maiúsculas+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>Modo de borrado (Maiúsculas+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>Modo de selección (Maiúscula+S)</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>Última nota</translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation>Prema aquí para reproducir este padrón. Isto é útil mentres se edita. O padrón repítese en bucle automaticamente ao chegar ao final.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation>Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e despois pódense editar.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation>Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e escóitase a canción ou pista de ritmos/liña do baixo no fondo.</translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation>Prema aquí para parar a reprodución deste padrón.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Prema aquí e os valores escollidos recórtanse e van para o porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Prema aquí e os valores escollidos cópianse no porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar.</translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation>Prema aquí e os valores do porta-retallos apegaranse no primeiro compás visíbel.</translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation>Bloqueo de notas</translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation>Volume das notas</translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation>Panormámica das notas</translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation>Modo de desafinación (Maiúsculas+T)</translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation>Prema aquí e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este é o modo por omisión que se emprega a maior parte do tempo. Tamén pode premer «Maiúsculas+D» no teclado para activar este modo. Neste modo, manteña Ctrl para ir temporalmente ao modo de selección.</translation>
- </message>
- <message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation>Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Tamén pode premer «Maiúsculas+E» no teclado para activar este modo.</translation>
- </message>
- <message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation>Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Como alternativa pode premer Ctrl no modo de debuxo para empregar temporalmente o modo de selección.</translation>
- </message>
- <message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation>Prema aquí e actívase o modo de desafinación.Neste modo pódese premer unhanota para abrir a súa desafinación de automatización. Pódese empregar isto para escorregar entre as notas. Tamén se pode premer «Maiúsculas+T» no teclado para activar este mdo.</translation>
- </message>
- <message>
- <source>Mark/unmark current semitone</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current chord</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unmark all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No scale</source>
- <translation type="unfinished"></translation>
+ <translation>A demora entre cambios de paso</translation>
</message>
<message>
- <source>No chord</source>
- <translation type="unfinished"></translation>
+ <source>Draw the wave here</source>
+ <translation>Debuxe a onda aquí</translation>
</message>
</context>
<context>
@@ -5324,42 +6920,22 @@ empregue a roda do rato para modificar o volume un paso</translation>
<translation>Enumerar os engadidos de LADSPA instalados</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>tres potentes osciladores que se poden modular de varias maneiras</translation>
- </message>
- <message>
<source>Filter for importing FL Studio projects into LMMS</source>
<translation>Filtro para importar proxectos do FL Studio ao LMMS</translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation>sintetizador de kick e tambor baixo versátil</translation>
- </message>
- <message>
<source>GUS-compatible patch instrument</source>
<translation>Instrumento de parcheo compatíbel con GUS</translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation>engadido para empregar efectos de VST arbitrarios no LMMS.</translation>
- </message>
- <message>
<source>Additive Synthesizer for organ-like sounds</source>
<translation>Sintetizador aditivo para sons tipo órgano</translation>
</message>
<message>
- <source>plugin for boosting bass</source>
- <translation>engadido para potenciar os graves</translation>
- </message>
- <message>
<source>Tuneful things to bang on</source>
<translation>Cousas melodiosas nas que bater</translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>sampleador simple con varias opcións para empregar mostras (p.ex. batería) nunha pista de instrumento</translation>
- </message>
- <message>
<source>VST-host for using VST(i)-plugins within LMMS</source>
<translation>Hóspede de VST para empregar engadidos de VST(i) co LMMS</translation>
</message>
@@ -5417,6 +6993,62 @@ Este chip empregábase no computador Commodore 64.</translation>
<source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>projectNotes</name>
@@ -6116,152 +7748,6 @@ Latencia: %2 ms</translation>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation>Editor de cancións</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Reproducir unha canción (Espazo)</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Prema aquí se desexa reproducir a canción enteira. A reprodución comeza no marcador de posición da canción (verde). Tamén se pode mover durante a reprodución.</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Parar a canción (Espazo)</translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Prema aquí se desexa parar a reprodución da canción. O marcador de posición da canción irá para o principio da canción.</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Engadir un ritmo/liña do baixo</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Engadir unha pista de mostra</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>Non foi posíbel abrir o ficheiro</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>Non foi posíbel escribir no ficheiro</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation>Engaidr unha pista de automatización</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>Modo de debuxo</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>Modo de edición (escoller e mover)</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation>Gravar mostras dun dispositivo de son</translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation>Gravar mostras dun dispositivo de son mentres se reproduce a canción ou pista de ritmos/liña do baixo</translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation>Non foi posíbel abrir o ficheiro %1. Probabelmente vostede non teña permiso para ler este ficheiro. Asegúrese de ter cando menos permiso para ler o ficheiro e ténteo de novo.</translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation>Hai un erro no ficheiro</translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation>Parece que o ficheiro %1 contén erros e por iso non se pode cargar.</translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished">Tempo</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished">TEMPO/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">tempo da canción</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished">O tempo dunha canción indícase en pulsos por minuto (BPM). Para cambiar o tempo da canción hai que cambiar este valor. Cada compás ten catro pulsos, polo que o tempo en BPM indica cantos compases / 4 hai que tocar nun minuto (ou cantos compases habería que tocar en catro minutos).</translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished">Modo de alta calidade</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished">Volume global</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished">volume global</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished">Altura global</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished">altura global</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished">Valor: %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished">Valor: %1 semitóns</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Espectro linear</translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation>Eixo linear Y</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Espectro linear</translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation>Eixo linear Y</translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation>Modo da canle</translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6447,6 +7933,18 @@ Latencia: %2 ms</translation>
<source>Remove this track</source>
<translation>Eliminar esta pista</translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6781,4 +8279,74 @@ O LED do recanto inferior dereito do editor da forma da onda determina se a cord
<translation>Proba da voz %1</translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/it.qm b/data/locale/it.qm
index 28ddcfd..a65af6f 100644
Binary files a/data/locale/it.qm and b/data/locale/it.qm differ
diff --git a/data/locale/it.ts b/data/locale/it.ts
index 7fc41fe..70434db 100644
--- a/data/locale/it.ts
+++ b/data/locale/it.ts
@@ -36,7 +36,9 @@
If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer!</source>
<translatorcomment>Se hai partecipato alla traduzione ed il tuo nome non è presente in questa lista, aggiungilo!</translatorcomment>
- <translation>Roberto Giaconia <derobyj at gmail.com></translation>
+ <translation>Roberto Giaconia <derobyj at gmail.com>
+
+Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, sei il benvenuto!</translation>
</message>
<message>
<source>License</source>
@@ -47,8 +49,62 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Copyright (c) 2004-2014, LMMS developers</translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
- <translation><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></translation>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation>VOL</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation>Volume:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation>BIL</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation>Bilanciamento:</translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation>SX</translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation>Guadagno a sinistra:</translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation>DX</translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation>Guadagno a destra:</translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation>Volume</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation>Bilanciamento</translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation>Guadagno a sinistra</translation>
+ </message>
+ <message>
+ <source>Right gain</source>
+ <translation>Guadagno a destra</translation>
</message>
</context>
<context>
@@ -81,14 +137,6 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Attivando questo pulsante, l'intero campione viene invertito. Ciò è utile per effetti particolari, ad es. un crash invertito.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation>Ripeti il campione tra i punti di inizio e fine</translation>
- </message>
- <message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation>Qui è possibile impostare se la modalità ripetizione è attiva. AudioFileProcessor riproduce tra i punti di inizio e fine di un campione finché tutta la nota è stata suonata. Ciò è utile per campioni di strumenti a corda e cori.</translation>
- </message>
- <message>
<source>Amplify:</source>
<translation>Amplificazione:</translation>
</message>
@@ -101,18 +149,10 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Punto di inizio:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Questa manopola regola il punto in cui AudioFileProcessor inizierà la riproduzione. Se la modalità ripetizione è attiva, questo è il punto in cui la riproduzione ritorna se una nota è più lunga del campione tra i punti di inizio e fine.</translation>
- </message>
- <message>
<source>Endpoint:</source>
<translation>Punto di fine:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Questa manopola regola il punto in cui AudioFileProcessor terminerà la riproduzione. Se la modalità ripetizione è attiva, questo è il punto in cui la riproduzione si ferma se una nota è più lunga del campione tra i punti di inizio e fine.</translation>
- </message>
- <message>
<source>Continue sample playback across notes</source>
<translation>Continua la ripetizione del campione tra le note</translation>
</message>
@@ -120,6 +160,42 @@ If you're interested in translating LMMS in another language or want to imp
<source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
<translation>Attivando questa opzione, il campione audio viene riprodotto tra note differenti: se cambi l'altezza, o la nota finisce prima del punto di fine del campione, allora la nota seguente riprodurrà il campione da dove si era fermata la precedente. Se invece si vuol far ripartire il campione dal punto d'inizio, bisogna inserire una nota molto grave (< 20 Hz)</translation>
</message>
+ <message>
+ <source>Disable loop</source>
+ <translation>Disabilità ripetizione</translation>
+ </message>
+ <message>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation>Questo pulsante disabilità la ripetizione. Il suono viene eseguito solo una volta dall'inizio alla fine.</translation>
+ </message>
+ <message>
+ <source>Enable loop</source>
+ <translation>Abilita ripetizione</translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation>Questo pulsante abilità la ripetizione diretta. Il suono viene ripetuto indefinitamente dal loop point al punto di fine.</translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation>Questo pulsante abilita la ripetizione ing-pong. Il suono viene eseguito avanti e indietro tra il punto di fine e il loop point.</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation>Con questa manopola puoi impostare il punto da cui AudioFileProcessor inizia a riprodurre il suono.</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation>Con questa manopola puoi impostare il punti in cui AudioFileProcessor finisce di riprodurre il suono.</translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation>Punto LoopBack:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
+ <translation>Con questa modalità puoi impostare il punto dove la ripetizione comincia: la parte del suono tra il LoopBack e il punto di fine è quella che verà ripetuta.</translation>
+ </message>
</context>
<context>
<name>AudioFileProcessorWaveView</name>
@@ -366,6 +442,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation>Trascina un controllo tenendo premuto <Ctrl></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation>Il cntrollo è già connesso a questo pattern.</translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -397,6 +477,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation>Disconnetti "%1"</translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation>Accendi/spegni registrazione</translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -406,6 +490,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation>FREQ</translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation>Frequenza:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation>GUAD</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation>Guadagno:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation>RAPP</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation>Rapporto:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation>Frequenza</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>Guadagno</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation>Rapporto dinamico</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation>Mostra GUI</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation>Clicca qui per mostrare o nascondere l'interfaccia grafica (GUI) di Carla.</translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -518,6 +655,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation>Abilita filtro 1</translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation>Abilita filtro 2</translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation>Clicca qui per abilitare/disabilitare il filtro 1</translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation>Clicca qui per abilitare/disabilitare il filtro 2</translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation>Attiva Filtro 1</translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation>Tipo del Filtro 1</translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation>Frequenza di taglio Filtro 1</translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation>Risonanza Filtro 1</translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation>Guadagno Filtro 1</translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation>Mix</translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation>Abilita Filtro 2</translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation>Tipo del Filtro 2</translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation>Frequenza di taglio Filtro 2</translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation>Risonanza Filtro 2</translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation>Guadagno Filtro 2</translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation>PassaBasso</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation>PassaAlto</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation>PassaBanda csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation>PassaBanda czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation>Notch</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation>Passatutto</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation>Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation>PassaBasso 2x</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation>RC PassaBasso 12dB</translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation>RC PassaBanda 12dB</translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation>RC PassaAlto 12dB</translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation>RC PassaBasso 24dB</translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation>RC PassaBanda 24dB</translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation>RC PassaAlto 24dB</translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation>Filtro a Formante di Voce</translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -893,6 +1156,10 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation>È possibile trascinare un campione in questa finestra.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation>Clicca qui per un'onda randomica.</translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1021,14 +1288,6 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<translation></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translation></translation>
- </message>
- <message>
- <source>Alias-free oscillators</source>
- <translation></translation>
- </message>
- <message>
<source>Start</source>
<translation>Inizia</translation>
</message>
@@ -1042,52 +1301,138 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
</message>
</context>
<context>
- <name>FxMixer</name>
- <message>
- <source>Master</source>
- <translation>Master</translation>
- </message>
+ <name>FileBrowser</name>
<message>
- <source>FX %1</source>
- <translation>FX %1</translation>
+ <source>Browser</source>
+ <translation>Browser</translation>
</message>
</context>
<context>
- <name>FxMixerView</name>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Rename FX channel</source>
- <translation>Rinomina il canale FX</translation>
+ <source>Send to active instrument-track</source>
+ <translation>Sostituisci questo strumento alla traccia attiva</translation>
</message>
<message>
- <source>Enter the new name for this FX channel</source>
- <translation>Inserire il nuovo nome di questo canale FX</translation>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation>Usa in una nuova traccia nel Song-Editor</translation>
</message>
<message>
- <source>FX-Mixer</source>
- <translation>Mixer FX</translation>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation>Usa in una nuova traccia nel B+B Editor</translation>
</message>
<message>
- <source>FX Fader %1</source>
- <translation>Fader FX %1</translation>
+ <source>Loading sample</source>
+ <translation>Caricamento campione</translation>
</message>
<message>
- <source>Mute</source>
- <translation>Muto</translation>
+ <source>Please wait, loading sample for preview...</source>
+ <translation>Attendere, stiamo caricando il file per l'anteprima...</translation>
</message>
<message>
- <source>Mute this FX channel</source>
- <translation>Silenzia questo canale FX</translation>
+ <source>--- Factory files ---</source>
+ <translation>--- File di fabbrica ---</translation>
</message>
</context>
<context>
- <name>InstrumentFunctionArpeggio</name>
- <message>
- <source>Arpeggio</source>
- <translation>Arpeggio</translation>
- </message>
+ <name>FxLine</name>
<message>
- <source>Arpeggio type</source>
- <translation>Tipo di arpeggio</translation>
+ <source>Channel send amount</source>
+ <translation>Quantità di segnale inviata dal canale</translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation>Il canale FX riceve input da uno o più tracce strumentali.
+Il segnale così ricevuto può essere girato ad altri canali FX. LMMS eviterà che si creino cicli infiniti non permettendo la creazione di connessioni pericolose in tal senso.
+
+Per inviare il suono di un canale ad un altro, seleziona il canale FX e premi sul pulsante "send" su un altro canale a cui vuoi inviare segnale. La manopola sotto il pulsante send controlla il livello di segnale che viene ricevuto dal canale.
+
+Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tasto destro su un canale FX.</translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation>Sposta a &sinistra</translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation>Sposta a $destra</translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation>Rinomina &canale</translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation>R&imuovi canale</translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>&Aiuto</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixer</name>
+ <message>
+ <source>Master</source>
+ <translation>Master</translation>
+ </message>
+ <message>
+ <source>FX %1</source>
+ <translation>FX %1</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView</name>
+ <message>
+ <source>Rename FX channel</source>
+ <translation>Rinomina il canale FX</translation>
+ </message>
+ <message>
+ <source>Enter the new name for this FX channel</source>
+ <translation>Inserire il nuovo nome di questo canale FX</translation>
+ </message>
+ <message>
+ <source>FX-Mixer</source>
+ <translation>Mixer FX</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
+ <message>
+ <source>FX Fader %1</source>
+ <translation>Volume FX %1</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>Muto</translation>
+ </message>
+ <message>
+ <source>Mute this FX channel</source>
+ <translation>Silenzia questo canale FX</translation>
+ </message>
+</context>
+<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation>Quantità da mandare dal canale %1 al canale %2</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentFunctionArpeggio</name>
+ <message>
+ <source>Arpeggio</source>
+ <translation>Arpeggio</translation>
+ </message>
+ <message>
+ <source>Arpeggio type</source>
+ <translation>Tipo di arpeggio</translation>
</message>
<message>
<source>Arpeggio range</source>
@@ -1137,6 +1482,10 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<source>Sync</source>
<translation>Sincronizzato</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation>Giù e su</translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1579,6 +1928,18 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<source>Minor</source>
<translation>Minore</translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation>Cromatica</translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation>Diminuita semitono-tono</translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation>Quinta</translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1641,6 +2002,18 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<source>NOTE</source>
<translation></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation>VELOCITY BASE PERSONALIZZATA</translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation>Specifica la normalizzazione della velocity per strumenti MIDI al volume della nota 100%</translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation>VELOCITY BASE</translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1787,6 +2160,10 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<source>cutoff frequency:</source>
<translation>Frequenza del cutoff:</translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation>Gli inviluppi, gli LFO e i filtri non sono supportati dallo strumento corrente.</translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1873,10 +2250,6 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<translation>IMPOSTAZIONI GENERALI</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation>Cliccando qui si salvano le attuali impostazioni del canale in un file. Sarà poi possibile ricaricare queste impostazioni facendo doppio-click su questo file nel navigatore dei preset.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation>Volume dello strumento</translation>
</message>
@@ -1949,10 +2322,6 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<translation>PLUGIN</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation>Salva le attuali impostazioni del canale in un file di preset</translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation>Ampiezza dell'altezza (in semitoni)</translation>
</message>
@@ -1960,6 +2329,14 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
<source>RANGE</source>
<translation>AMPIEZZA</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation>Salva le impostazioni di questa traccia in un file preset</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation>Clicca qui per salvare lo strumento corrente come preset. Al prossimo avvio, questo preset sarà visibile nel preset browser ("I miei preset").</translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -2006,6 +2383,13 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation>Inserire un valore compreso tra %1 e %2:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2361,17 +2745,13 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS.</translation>
</message>
<message>
<source>E&xport tracks...</source>
- <translation>E&sporta traccie...</translation>
+ <translation type="unfinished">E&sporta tracce...</translation>
</message>
<message>
<source>LMMS (*.mmp *.mmpz)</source>
<translation></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation>Progetto LMMS (*mmp *mmpz);;Template di Progetto LMMS (*.mpt)</translation>
- </message>
- <message>
<source>Version %1</source>
<translation>Versione %1</translation>
</message>
@@ -2391,6 +2771,22 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS.</translation>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation>Si è riscontrato un errore nell'analisi del file di configurazione alle linee %1:%2: %3</translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation>Volumi</translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation>Annulla</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>Rifai</translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation>Progetto LMMS (*mmpz *.mmp);;Progetto Template LMMS (*.mpt)</translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2507,252 +2903,1133 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS.</translation>
<source>Fixed output note</source>
<translation>Nota fissa in uscita</translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation>Velocity base</translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation>Volume osc %1</translation>
+ <source>Osc 1 Volume</source>
+ <translation>Osc 1 Volume</translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation>Panning osc %1</translation>
+ <source>Osc 1 Panning</source>
+ <translation>Osc 1 Bilanciamento</translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation>Intonazione osc %1</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation>Osc 1 Intonazione Grezza</translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation>Intonazione precisa osc %1 sinistra</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation>Osc 1 Intonazione precisa sinistra</translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation>Intonazione precisa osc %1 destra</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation>Osc 1 Intonazione precisa destra</translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation>Scostamento fase osc %1</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation>Osc 1 Spostamento di fase stereo</translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation>Intonazione fase stereo osc %1</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation>Osc 1 Profondità impulso</translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation>Forma d'onda Osc %1</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation>Osc 1 Manda sync in salita</translation>
</message>
<message>
- <source>Modulation type %1</source>
- <translation>Modulazione di tipo %1</translation>
+ <source>Osc 1 Sync send on fall</source>
+ <translation>Osc 1 Manda sync in discesa</translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation>Forma d'onda osc %1</translation>
+ <source>Osc 2 Volume</source>
+ <translation>Osc 2 Volume</translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation>Apri un'altra patch</translation>
+ <source>Osc 2 Panning</source>
+ <translation>Osc 2 Bilanciamento</translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation>Clicca qui per aprire un altro file di patch. Le impostazioni di ripetizione e intonazione non vengono reimpostate.</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation>Osc 2 Intonazione Grezza</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Ripetizione</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation>Osc 2 Intonazione precisa sinistra</translation>
</message>
<message>
- <source>Loop mode</source>
- <translation>Modalità ripetizione</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation>Osc 2 Intonazione precisa destra</translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation>Qui puoi scegliere la modalità di ripetizione. Se abilitata, PatMan userà l'informazione sulla ripetizione disponibile nel file.</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation>Osc 2 Spostamento di fase stereo</translation>
</message>
<message>
- <source>Tune</source>
- <translation>Intonazione</translation>
+ <source>Osc 2 Waveform</source>
+ <translation>Osc 2 Forma d'onda</translation>
</message>
<message>
- <source>Tune mode</source>
- <translation>Modalità intonazione</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation>Osc 2 Sync pesante</translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation>Qui puoi scegliere la modalità di intonazione. Se abilitata, PatMan intonerà il campione alla frequenza della nota.</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation>Osc 2 Sync inverso</translation>
</message>
<message>
- <source>No file selected</source>
- <translation>Nessun file selezionato</translation>
+ <source>Osc 3 Volume</source>
+ <translation>Osc 3 Volume</translation>
</message>
<message>
- <source>Open patch file</source>
- <translation>Apri file di patch</translation>
+ <source>Osc 3 Panning</source>
+ <translation>Osc 3 Bilanciamento</translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation>File di patch (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation>Osc 3 Intonazione Grezza</translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
- <translation>Controller dei picchi</translation>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation>Osc 3 Spostamento di fase stereo</translation>
</message>
<message>
- <source>Peak Controller Bug</source>
- <translation>Bug del controller dei picchi</translation>
+ <source>Osc 3 Sub-oscillator mix</source>
+ <translation>Osc 3 Miscela sub-oscillatori</translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
- <translation>A causa di un bug nelle versioni precedenti di LMMS, i controller dei picchi potrebbero non essere connessi come dovuto. Assicurati che i controller dei picchi siano connessi e salva questo file di nuovo. Ci scusiamo per gli inconvenienti causati.</translation>
+ <source>Osc 3 Waveform 1</source>
+ <translation>Osc 3 Forma d'onda 1</translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
- <translation>PICCO</translation>
+ <source>Osc 3 Waveform 2</source>
+ <translation>Osc 3 Forma d'onda 2</translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation>Controller dell'LFO</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation>Osc 3 Sync pesante</translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
- <translation>BASE</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation>Osc 3 Sync inverso</translation>
</message>
<message>
- <source>Base amount:</source>
- <translation>Quantità di base:</translation>
+ <source>LFO 1 Waveform</source>
+ <translation>LFO 1 Forma d'onda</translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Quantità di modulazione:</translation>
+ <source>LFO 1 Attack</source>
+ <translation>LFO 1 Attacco</translation>
</message>
<message>
- <source>Attack:</source>
- <translation>Attacco:</translation>
+ <source>LFO 1 Rate</source>
+ <translation>LFO 1 Rate</translation>
</message>
<message>
- <source>Release:</source>
- <translation>Rilascio:</translation>
+ <source>LFO 1 Phase</source>
+ <translation>LFO 1 Fase</translation>
</message>
<message>
- <source>AMNT</source>
- <translation>Q.TÀ</translation>
+ <source>LFO 2 Waveform</source>
+ <translation>LFO 2 Forma d'onda</translation>
</message>
<message>
- <source>MULT</source>
- <translation>MOLT</translation>
+ <source>LFO 2 Attack</source>
+ <translation>LFO 2 Attacco</translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
- <translation>Moltiplicatore di quantità:</translation>
+ <source>LFO 2 Rate</source>
+ <translation>LFO 2 Rate</translation>
</message>
<message>
- <source>ATCK</source>
- <translation>ATCC</translation>
+ <source>LFO 2 Phase</source>
+ <translation>LFO 2 Fase</translation>
</message>
<message>
- <source>DCAY</source>
- <translation>DCAD</translation>
+ <source>Env 1 Pre-delay</source>
+ <translation>Env 1 Pre-ritardo</translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
- <translation>Valore di base</translation>
+ <source>Env 1 Attack</source>
+ <translation>Env 1 Attacco</translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation>Quantità di modulazione</translation>
+ <source>Env 1 Hold</source>
+ <translation>Env 1 Mantenimento</translation>
</message>
<message>
- <source>Mute output</source>
- <translation>Silenzia l'output</translation>
+ <source>Env 1 Decay</source>
+ <translation>Env 1 Decadimento</translation>
</message>
<message>
- <source>Attack</source>
- <translation>Attacco</translation>
+ <source>Env 1 Sustain</source>
+ <translation>Env 1 Sostegno</translation>
</message>
<message>
- <source>Release</source>
- <translation>Rilascio</translation>
+ <source>Env 1 Release</source>
+ <translation>Env 1 Rilascio</translation>
</message>
<message>
- <source>Abs Value</source>
- <translation>Valore Assoluto</translation>
+ <source>Env 1 Slope</source>
+ <translation>Env 1 Inclinazione</translation>
</message>
<message>
- <source>Amount Multiplicator</source>
- <translation>Moltiplicatore della quantità</translation>
+ <source>Env 2 Pre-delay</source>
+ <translation>Env 2 Pre-ritardo</translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation>Nota base</translation>
+ <source>Env 2 Attack</source>
+ <translation>Env 2 Attacco</translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
- <translation>Plugin non trovato</translation>
+ <source>Env 2 Hold</source>
+ <translation>Env 2 Mantenimento</translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
- <translation>Il plugin "%1" non è stato trovato o non è stato possibile caricarlo!
-Motivo: "%2"</translation>
+ <source>Env 2 Decay</source>
+ <translation>Env 2 Decadimento</translation>
</message>
<message>
- <source>Error while loading plugin</source>
- <translation>Errore nel caricamento del plugin</translation>
+ <source>Env 2 Sustain</source>
+ <translation>Env 2 Sostegno</translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
- <translation>Non è stato possibile caricare il plugin "%1"!</translation>
+ <source>Env 2 Release</source>
+ <translation>Env 2 Rilascio</translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
- <translation>File WAV (*.wav)</translation>
+ <source>Env 2 Slope</source>
+ <translation>Env 2 Inclinazione</translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation>File in formato OGG compresso (*.ogg)</translation>
+ <source>Osc2-3 modulation</source>
+ <translation>Modulazione Osc2-3</translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
- <translation>Do</translation>
+ <source>Selected view</source>
+ <translation>Seleziona vista</translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
- <translation>Dob</translation>
+ <source>Vol1-Env1</source>
+ <translation></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
- <translation>Do#</translation>
+ <source>Vol1-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol2-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol2-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol3-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation>Vista operatori</translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation>La vista operatori contiene tutti gli operatori. Vi sono sia operatori udibili (oscillatori), che silenziosi, o modulatori: LFO e inviluppi.
+
+Usa il "Cos'è questo?" su tutte le manopole di questa vista per avere informazioni specifiche su di esse.</translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation>Vista Matrice</translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation>La vista matrice contiene la matrice di modulazione. Qui puoi definire le relazioni di modulazione tra i vari operatori: ogni operatore udibile (gli oscillatori da 1 a 3) ha 3-4 proprietà che possono essere modulate da qualsiasi modulatore. L'utilizzo eccessivo di modulazioni può appesantire la CPU.
+
+La vista è divisa in obiettivi di modulazione, raggruppati dagli oscillatori. Possono essere modulati il volume, l'altezza, la fase, la larghezza dell'impulso e il rateo del sottooscillatorie. Nota: alcune proprietà sono esclusive di un solo oscillatore.
+
+Ogni proprietà modulabile ha 4 manopole, una per ogni modulatore. Sono tutti a 0 di default, ossia non vi è modulazione. Il massimo della modulazione si ottiene portando una manopola a 1. I valori negativi invertono l'effetto che avrebbero quelli positivi.</translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation>Mescola l'Osc2 con l'Osc3</translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation>Modula l'amplificazione dell'Osc3 con l'Osc2</translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation>Modula la frequenza dell'Osc3 con l'Osc2</translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation>Modula la fase dell'Osc3 con l'Osc2</translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation>La manopola CRS cambia l'intonazione dell'oscillatore 1 per semitoni.</translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation>La manopola CRS cambia l'intonazione dell'oscillatore 2 per semitoni.</translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation>La manopola CRS cambia l'intonazione dell'oscillatore 3 per semitoni.</translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation>FTL e FTR cambiano l'intonazione precisa dell'oscillatore per i canali sinistro e destro rispettivamente. Possono essere usati per creare un'illusione di spazio.</translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation>La manopola SPO altera la differenza in fase tra i canali sinistro e destro. Una differenza maggiore crea un'immagine stereo più larga.</translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation>La manopola PW controlla la profondità dell'impulso, conosciuta anche come duty cycle, dell'oscillatore 1. L'oscillatore 1 è un oscillatore d'onda a impulso digitale, non produce un output con banda limitata, il che vuol dire che è possibile usarlo come un oscillatore udibile ma ciò creerà aliasing. Puoi anche usarlo come fonte silenziosa di un segnale di sincronizzazione, che sincronizza gli altri due oscillatori.</translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation>Manda sync in salita: se abilitato, il segnale di sync viene mandato ogni volta che lo stato dell'oscillatore 1 cambia da basso ad alto, per esempio se l'amplificazione passa da -1 a 1. Sia l'altezza che la fase che i'mpulso possono interessare il tempo dei sync, ma il volume no. I segnali di sync vengono trattati indipendentemente per i canali destro e sinistro.</translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation>Manda sync in discesa: se abilitato, il segnale di sync viene mandato ogni volta che lo stato dell'oscillatore 1 cambia da alto a basso, per esempio se l'amplificazione passa da 1 a -1. Sia l'altezza che la fase che i'mpulso possono interessare il tempo dei sync, ma il volume no. I segnali di sync vengono trattati indipendentemente per i canali destro e sinistro.</translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation>Sync potente: ogni volta che l'oscillatore siceve un segnale di sync dall'Osc1, la sua fase viene resettata alla sua origine.</translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation>Sync di inversione: ogni volta che l'oscillatore riceve un segnale di sync dall'Osc1, l'amplificazione dell'oscillatore viene invertita.</translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation>Seleziona la forma d'onda per l'Osc2.</translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation>Seleziona la forma d'onda per il primo sub-oscillatore dell'Osc3. L'Osc3 può interpolare morbidamente tra due forme d'onda diverse.</translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation>Seleziona la forma d'onda per il secondo sub-oscillatore dell'Osc3. L'Osc3 può interpolare morbidamente tra due forme d'onda diverse.</translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation>La manopola SUB cambia le qualtità per la miscela tra i due sub-oscillatori.</translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation>Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2.
+
+La modalità Mix non produce nessuna modulazione: i due oscillatori sono semplicemente miscelati tra di loro.</translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation>Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2.
+
+AM vuol dire modulazione di amplificazione: quella dell'Osc3 (il suo volume) è modulata dall'output dell'Osc2.</translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation>Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'output dell'Osc2.
+
+FM vuol dire modulazione di frequenza: quella dell'Osc3 (la sua altezza) è modulata dall'Osc2. Questa modulazione è implementata come una modulazione di fase, in modo da avere una frequenza risultate più stabile di una FM pura.</translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation>Oltre ai modulatori dedicati, Monstro permette di modulare l'Osc3 tramite l'outpit dell'Osc2.
+
+PM è la modulazione di fase: quella dell'Osc3 è modulata dall'Osc2. La differenza con la modulazione di frequenza consiste nel fatto che in quella i cambiamenti di fase non sono cumulativi.</translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation>Selezioa la forma d'onda per l'LFO 1.
+Vi sono due forme speciali: "Random" e "Random morbido" sono onde speciali che producono un aoutup randomico, dove il rate dell'LFO controlla quanto spesso lo stato dell'LFO cambia. La versione morbila interpola tra questi stati con una interpolazione a coseno. Queste modalità possono essere usate per ridare "vita" ai toi preset o aggiungere un po' di quella imprevedibilità degli stumenti analogici...</translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation>Selezioa la forma d'onda per l'LFO 2.
+Vi sono due forme speciali: "Random" e "Random morbido" sono onde speciali che producono un aoutup randomico, dove il rate dell'LFO controlla quanto spesso lo stato dell'LFO cambia. La versione morbila interpola tra questi stati con una interpolazione a coseno. Queste modalità possono essere usate per ridare "vita" ai toi preset o aggiungere un po' di quella imprevedibilità degli stumenti analogici...</translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation>L'attacco fa sì che l'LFO arrivi gradualmente al suo stato da quello della nota suonata.</translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation>Il rate setta la velocità dell'LFO, misurata in millisecondi per ciclo. Può essere sincronizzata al tempo nel suo menù a tendina.</translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation>PHS controlla lo spostamento di fase dell'LFO.</translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation>PRE, o pre-ritardo, ritarda l'inizio dell'inviluppo dal momento in cui la nota viene suonata. 0 vuol dire nessun ritardo.</translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation>ATT, o attacco, controlla quanto velocemente l'inviluppo arriva al suo masimmo, misurando questo tempo in millisecondi. 0 vuol dire che il valore massimo viene raggiunto istantaneamente.</translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation>HOLD controlla per quanto tempo l'inviluppo rimane al suo massimo dopo l'attacco.</translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation>DEC, o decadimento, controlla in quanto tempo l'inviluppo cade dal suo massimo, misurandolo in missilecondi. Il decadimento effettivo potrebbe essere più lento se viene alterato il sostegno.</translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation>SUS, o sostegno, controlla il livello di sostegno dell'inviluppo. La fase di decadimento non scenderà oltre questo livello fino a che la nota viene suonata.</translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation>REL, o rilascio, controlla il tempo di rilascio della nota, misurandola in millisecondi. Se l'inviluppo non si trova al suo valore massimo quando la nota è rilasciata, il rilascio potrebbe durare di meno.</translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation>SLOPE, o inclinazione, controlla la curva (o la forma) dell'inviluppo. Un valore pari a 0 lascia le salite e le discese come linee dritte. Valori negativi creeranno dei movimenti che partono lentamente, arrivano a un picco ripido, e poi terminano di nuovo lentamente. Valori positivi daranno curve che salgono e scendono velocemente, ma si fermano ai picchi.</translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation>Intonazione grezza Canale 1</translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation>Volume Canale 1</translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation>Lunghezza inviluppo Canale 1</translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation>Duty cycle del Canale 1</translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation>Quantità di sweep Canale 1</translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation>Velocità di sweep Canale 1</translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation>Intonazione grezza Canale 2</translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation>Volume Canale 2</translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation>Lunghezza inviluppo Canale 2</translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation>Duty cycle del Canale 2</translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation>Quantità di sweep Canale 2</translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation>Velocità di sweep Canale 2</translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation>Intonazione grezza Canale 3</translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation>Volume Canale 3</translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation>Volume Canale 4</translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation>Lunghezza inviluppo Canale 4</translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation>Frequenza rumore Canale 4</translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation>Frequenza rumore di sweep Canale 4</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>Volume principale</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation>Vibrato</translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation>Volume osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation>Panning osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation>Intonazione osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation>Intonazione precisa osc %1 sinistra</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation>Intonazione precisa osc %1 destra</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation>Scostamento fase osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation>Intonazione fase stereo osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation>Forma d'onda Osc %1</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation>Modulazione di tipo %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation>Forma d'onda osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation>Armoniche Osc %1</translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation>Apri un'altra patch</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation>Clicca qui per aprire un altro file di patch. Le impostazioni di ripetizione e intonazione non vengono reimpostate.</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation>Ripetizione</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation>Modalità ripetizione</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation>Qui puoi scegliere la modalità di ripetizione. Se abilitata, PatMan userà l'informazione sulla ripetizione disponibile nel file.</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation>Intonazione</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation>Modalità intonazione</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation>Qui puoi scegliere la modalità di intonazione. Se abilitata, PatMan intonerà il campione alla frequenza della nota.</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation>Nessun file selezionato</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation>Apri file di patch</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation>File di patch (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>un doppio click apre questo pattern nel piano-roll
+la rotellina del mouse impostare il volume delle note</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>Apri nel piano-roll</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>Cancella tutte le note</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>Reimposta il nome</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Cambia nome</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>Aggiungi note</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>Elimina note</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation>Controller dei picchi</translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation>Bug del controller dei picchi</translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation>A causa di un bug nelle versioni precedenti di LMMS, i controller dei picchi potrebbero non essere connessi come dovuto. Assicurati che i controller dei picchi siano connessi e salva questo file di nuovo. Ci scusiamo per gli inconvenienti causati.</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation>PICCO</translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation>Controller dell'LFO</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation>BASE</translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation>Quantità di base:</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation>Quantità di modulazione:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation>Attacco:</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation>Rilascio:</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation>Q.TÀ</translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation>MOLT</translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation>Moltiplicatore di quantità:</translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation>ATCC</translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation>DCAD</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation>Valore di base</translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation>Quantità di modulazione</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation>Silenzia l'output</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation>Attacco</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation>Rilascio</translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation>Valore Assoluto</translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation>Moltiplicatore della quantità</translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Riproduci/metti in pausa questo pattern (Spazio)</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Registra note da una periferica/canale piano MIDI</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Ferma la riproduzione di questo pattern (Spazio)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Taglia le note selezionate (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Copia le note selezionate (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Incolla le note selezionate (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Piano-Roll - nessun pattern</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>Piano-Roll - %1</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Aprire un pattern con un doppio-click sul pattern stesso!</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>Ultima nota</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>Registra note da una periferica MIDI/canale piano mentre la traccia o la BB track è in riproduzione</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Modalità disegno (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Modalità cancellazione (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>Modalità selezione (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation>Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation>Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern e in seguito le si potrà riprodurre e modificare.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation>Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern, sentendo contemporaneamente la canzone o la traccia BB in sottofondo.</translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation>Cliccando qui si ferma la riproduzione del pattern attivo.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Cliccando qui le note selezionate verranno spostate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Cliccando qui le note selezionate verranno copiate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla.</translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation>Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile.</translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation>Note lock</translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation>Volume Note</translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation>Panning Note</translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation>Modalità intonanzione (Shift+T)</translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation>Cliccando qui si attiva la modalità disegno. In questa modalità è possibile aggiungere e spostare singoli valori. Questa è la modalità predefinita, che viene usata la maggior parte del tempo. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+D'. Tieni premuto Ctfl per andare temporaneamente in modalità selezione.</translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation>Cliccando qui si attiva la modalità cancellazione. In questa modalità è possibile cancellare singoli valori. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+E'.</translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation>Cliccando qui viene attivata la modalità selezione. Puoi selezionare le note. Puoi anche tenere premuto Ctrl durante la modalità disegno per usare la modalità selezione temporaneamente.</translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation>Cliccando qui viene attivata la modalità intonazione. Puoi cliccare una nota per aprire la finestra di automazione dell'intonazione. Puoi usare questa modalità per fare uno slide da una nota ad un'altra. Puoi anche premere Shift+T per attivare questa modalità.</translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation>Evidenza (o togli evidenziazione) questo semitono</translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation>Evidenza la scala corrente</translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation>Evidenza l'accordo corrente</translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation>Togli tutte le evidenziazioni</translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation>- Scale</translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation>- Accordi</translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation>Controlla l'ingrandimento di un asse. Normalmente, l'ingrandimento dev'essere adatto alle note più piccole che si sta scrivendo.</translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation>la 'Q' sta per quantizzazione, e controlla la lunghezza minima di modifica della nota. Con quantità minori, puoi scrivere note più piccole nel Piano Roll, o punti di controllo più precisi nell'Editor di Automazione.</translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation>Puoi selezionare la grandezza delle nuove note. 'Ultima nota' significa che LMMS userà la lunghezza dell'ultima nota modificata</translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation>Questa funzionalità è connessa al menù contestuale della tastiera viruale a sinistra. Dopo aver scelto la scala in questo menù a tendina, puoi cliccare con il tasto destro sulla nota desiderata nella tastiera, e selezionare 'Evidenza la scala corrente'. LMMS evidenzierà tutte le note che compongono la scala selezionata partendo dalla nota selezionata come tonica!</translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation>Ti permette di selezionare un accordo che LMMS può scriviere o evidenziare. Trovi tutti gli accordi più comuni in questo menù a tendina. Dopo averne selezionato uno, clicca dove vuoi per posizionarlo, oppure fai tasto destro sulla tastiera virtuale per evidenziare l'accordo. Per tornare alla scrittura per singola nota, devi selezionare '-Accordi' in questo menù.</translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation>Volume: %1%</translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation>Bilanciamento: %1% a sinistra</translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation>Bilanciamento: %1% a destra</translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation>Bilanciamento: centrato</translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation>Inserire un valore compreso tra %1 e %2:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation>Nota base</translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation>Plugin non trovato</translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation>Il plugin "%1" non è stato trovato o non è stato possibile caricarlo!
+Motivo: "%2"</translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation>Errore nel caricamento del plugin</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation>Non è stato possibile caricare il plugin "%1"!</translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation>Il plugin LMMS %1 non ha una descrizione chiamata %2!</translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation>File WAV (*.wav)</translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation>File in formato OGG compresso (*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation>Do</translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation>Dob</translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation>Do#</translation>
</message>
<message>
<source>D</source>
@@ -2871,6 +4148,10 @@ Motivo: "%2"</translation>
<source>In Place Broken: </source>
<translation>In Place Broken:</translation>
</message>
+ <message>
+ <source>File: %1</source>
+ <translation>File: %1</translation>
+ </message>
</context>
<context>
<name>SampleBuffer</name>
@@ -2879,10 +4160,6 @@ Motivo: "%2"</translation>
<translation>Apri file audio</translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation>Tutti i file audio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
- </message>
- <message>
<source>Wave-Files (*.wav)</source>
<translation>File wave (*.wav)</translation>
</message>
@@ -2903,10 +4180,6 @@ Motivo: "%2"</translation>
<translation>File SPEEX (*.spx)</translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation>File MP3 (*.mp3)</translation>
- </message>
- <message>
<source>VOC-Files (*.voc)</source>
<translation>File VOC (*.voc)</translation>
</message>
@@ -2922,6 +4195,10 @@ Motivo: "%2"</translation>
<source>RAW-Files (*.raw)</source>
<translation>File RAW (*.raw)</translation>
</message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation>Tutti i file audio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</translation>
+ </message>
</context>
<context>
<name>SampleTCOView</name>
@@ -2955,29 +4232,176 @@ Motivo: "%2"</translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation>Traccia di campione</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation>Volume</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation>Volume della traccia</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation>Volume del canale:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation>VOL</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Song-Editor</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Riproduci la canzone (Spazio)</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Ferma la riproduzione della canzone (Spazio)</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Aggiungi beat/bassline</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Aggiungi traccia di campione</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Cliccando qui si riproduce l'intera canzone. La riproduzione inizierà alla posizione attuale del segnaposto (verde). È possibile spostarlo anche durante la riproduzione.</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Cliccando qui si ferma la riproduzione della canzone. Il segnaposto verrà portato all'inizio della canzone.</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>Non è stato possibile aprire il file</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>Impossibile scrivere il file</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Modalità disegno</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Modalità modifica (seleziona e sposta)</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>Aggiungi una traccia di automazione</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation>Registra campioni da una periferica audio</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>Registra campioni da una periferica audio mentre la canzone o la BB track sono in riproduzione</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation>Impossibile aprire il file %1. Probabilmente non disponi dei permessi necessari alla sua lettura.
+Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.</translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation>Errore nel file</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation>Il file %1 sembra contenere errori, quindi non può essere caricato.</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation>Tempo</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation>TEMPO/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation>tempo della canzone</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation>Il tempo della canzone è specificato in battiti al minuto (BPM). Per cambiare il tempo della canzone bisogna cambiare questo valore. Ogni marcatore ha 4 battiti, pertanto il tempo in BPM specifica quanti marcatori / 4 verranno riprodotti in un minuto (o quanti marcatori in 4 minuti).</translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation>Modalità ad alta qualità</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>Volume principale</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation>volume principale</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation>Altezza principale</translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation>altezza principale</translation>
+ </message>
+ <message>
+ <source>Value: %1%</source>
+ <translation>Valore: %1%</translation>
+ </message>
+ <message>
+ <source>Value: %1 semitones</source>
+ <translation>Valore: %1 semitoni</translation>
+ </message>
+ <message>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation>Impossibile aprire il file %1 per la scrittura. Probabilmente non disponi dei permessi necessari alla scrittura di questo file. Assicurati di avere tali permessi e prova di nuovo.</translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation>Traccia di campione</translation>
+ <source>Linear spectrum</source>
+ <translation>Spettro lineare</translation>
</message>
<message>
- <source>Volume</source>
- <translation>Volume</translation>
+ <source>Linear Y axis</source>
+ <translation>Asse Y lineare</translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation>Volume della traccia</translation>
+ <source>Linear spectrum</source>
+ <translation>Spettro lineare</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation>Volume del canale:</translation>
+ <source>Linear Y axis</source>
+ <translation>Asse Y lineare</translation>
</message>
<message>
- <source>VOL</source>
- <translation>VOL</translation>
+ <source>Channel mode</source>
+ <translation>Modalità del canale</translation>
</message>
</context>
<context>
@@ -3255,230 +4679,478 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo
<context>
<name>Ui</name>
<message>
- <source>Contributors ordered by number of commits:</source>
- <translation>Hanno collaborato: (ordinati per numero di contributi)</translation>
+ <source>Contributors ordered by number of commits:</source>
+ <translation>Hanno collaborato (ordinati per numero di contributi):</translation>
+ </message>
+ <message>
+ <source>Involved</source>
+ <translation>Coinvolti</translation>
+ </message>
+</context>
+<context>
+ <name>VersionedSaveDialog</name>
+ <message>
+ <source>Increment version number</source>
+ <translation>Nuova versione</translation>
+ </message>
+ <message>
+ <source>Decrement version number</source>
+ <translation>Riduci numero versione</translation>
+ </message>
+</context>
+<context>
+ <name>VestigeInstrumentView</name>
+ <message>
+ <source>Open other VST-plugin</source>
+ <translation>Apri un altro plugin VST</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <translation>Clicca qui per aprire un altro plugin VST. Una volta cliccato questo pulsante, si aprirà una finestra di dialogo dove potrai selezionare il file.</translation>
+ </message>
+ <message>
+ <source>Show/hide GUI</source>
+ <translation>Mostra/nascondi l'interfaccia</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <translation>Clicca qui per mostrare o nascondere l'interfaccia grafica (GUI) per i plugin VST.</translation>
+ </message>
+ <message>
+ <source>Turn off all notes</source>
+ <translation>Disabilita tutte le note</translation>
+ </message>
+ <message>
+ <source>Open VST-plugin</source>
+ <translation>Apri plugin VST</translation>
+ </message>
+ <message>
+ <source>DLL-files (*.dll)</source>
+ <translation>File DLL (*.dll)</translation>
+ </message>
+ <message>
+ <source>EXE-files (*.exe)</source>
+ <translation>File EXE (*.exe)</translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation>Nessun plugin VST caricato</translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation>Controlla il plugin VST dal terminale LMMS</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation>Cliccando qui, si apre una finestra di LMMS dove è possibile modificare le variabili del plugin VST.</translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation>Apri un preset del plugin VST</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation>Cliccando qui, è possibile aprire un altro preset del plugin VST (*fxp, *fxb).</translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation>Precedente (-)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation>Cliccando qui, viene cambiato il preset del plugin VST.</translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation>Salva il preset</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation>Cliccando qui è possibile salvare il preset corrente del plugin VST.</translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation>Successivo (+)</translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation>Cliccando qui, è possibile selezionare i preset che sono caricati nel VST al momento.</translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation>Preset</translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation>da </translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation> - Controllo del plugin VST</translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation>Mostra/nascondi</translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation>Controlla il plugin VST dal terminale LMMS</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation>Cliccando qui, si apre una finestra di LMMS dove è possibile modificare le variabili del plugin VST.</translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation>Apri un preset del plugin VST</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation>Cliccando qui, è possibile aprire un altro preset del plugin VST (*fxp, *fxb).</translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation>Precedente (-)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation>Cliccando qui, viene cambiato il preset del plugin VST.</translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation>Successivo (+)</translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation>Cliccando qui, è possibile selezionare i preset che sono caricati nel VST al momento.</translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation>Salva il preset</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation>Cliccando qui è possibile salvare il preset corrente del plugin VST.</translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation>Effetto da: </translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation> <br /></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation>Caricamento plugin</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation>Apri preset</translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation>Preset di plugin VST (*.fxp *.fxb)</translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation>: default</translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation>"</translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation>'</translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation>Salva Preset</translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation>.fxp</translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation>.FXP</translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation>.FXB</translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation>.fxb</translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation>Sto caricando il plugin VST...</translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation>Caricamento del VST fallito</translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation>Il VST %1 non è stato caricato correttamente per qualche ragione.</translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation>Volume A1</translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation>Volume A2</translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation>Volume B1</translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation>Volume B2</translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation>Bilanciamento A1</translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation>Bilanciamento A2</translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation>Bilanciamento B1</translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation>Bilanciamento B2</translation>
</message>
<message>
- <source>Involved</source>
- <translation>Coinvolti</translation>
+ <source>Freq. multiplier A1</source>
+ <translation>Moltiplicatore di freq. A1</translation>
</message>
-</context>
-<context>
- <name>VersionedSaveDialog</name>
<message>
- <source>Increment version number</source>
- <translation>Nuova versione</translation>
+ <source>Freq. multiplier A2</source>
+ <translation>Moltiplicatore di freq. A2</translation>
</message>
<message>
- <source>Decrement version number</source>
- <translation>Riduci numero versione</translation>
+ <source>Freq. multiplier B1</source>
+ <translation>Moltiplicatore di freq. B1</translation>
</message>
-</context>
-<context>
- <name>VestigeInstrumentView</name>
<message>
- <source>Open other VST-plugin</source>
- <translation>Apri un altro plugin VST</translation>
+ <source>Freq. multiplier B2</source>
+ <translation>Moltiplicatore di freq. B2</translation>
</message>
<message>
- <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
- <translation>Clicca qui per aprire un altro plugin VST. Una volta cliccato questo pulsante, si aprirà una finestra di dialogo dove potrai selezionare il file.</translation>
+ <source>Left detune A1</source>
+ <translation>Intonazione Sinistra A1</translation>
</message>
<message>
- <source>Show/hide GUI</source>
- <translation>Mostra/nascondi l'interfaccia</translation>
+ <source>Left detune A2</source>
+ <translation>Intonazione Sinistra A2</translation>
</message>
<message>
- <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
- <translation>Clicca qui per mostrare o nascondere l'interfaccia grafica (GUI) per i plugin VST.</translation>
+ <source>Left detune B1</source>
+ <translation>Intonazione Sinistra B1</translation>
</message>
<message>
- <source>Turn off all notes</source>
- <translation>Disabilita tutte le note</translation>
+ <source>Left detune B2</source>
+ <translation>Intonazione Sinistra B2</translation>
</message>
<message>
- <source>Open VST-plugin</source>
- <translation>Apri plugin VST</translation>
+ <source>Right detune A1</source>
+ <translation>Intonazione Destra A1</translation>
</message>
<message>
- <source>DLL-files (*.dll)</source>
- <translation>File DLL (*.dll)</translation>
+ <source>Right detune A2</source>
+ <translation>Intonazione Destra A2</translation>
</message>
<message>
- <source>EXE-files (*.exe)</source>
- <translation>File EXE (*.exe)</translation>
+ <source>Right detune B1</source>
+ <translation>Intonazione Destra B1</translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
- <translation>Nessun plugin VST caricato</translation>
+ <source>Right detune B2</source>
+ <translation>Intonazione Destra B2</translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
- <translation>Controlla il plugin VST dal terminale LMMS</translation>
+ <source>A-B Mix</source>
+ <translation>Mix A-B</translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
- <translation>Cliccando qui, si apre una finestra di LMMS dove è possibile modificare le variabili del plugin VST.</translation>
+ <source>A-B Mix envelope amount</source>
+ <translation>Quantità di inviluppo Mix A-B</translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
- <translation>Apri un preset del plugin VST</translation>
+ <source>A-B Mix envelope attack</source>
+ <translation>Attacco inviluppo Mix A-B</translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
- <translation>Cliccando qui, è possibile aprire un altro preset del plugin VST (*fxp, *fxb).</translation>
+ <source>A-B Mix envelope hold</source>
+ <translation>Mantenimento inviluppo Mix A-B</translation>
</message>
<message>
- <source>Previous (-)</source>
- <translation>Precedente (-)</translation>
+ <source>A-B Mix envelope decay</source>
+ <translation>Decadimento inviluppo Mix A-B</translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
- <translation>Cliccando qui, viene cambiato il preset del plugin VST.</translation>
+ <source>A1-B2 Crosstalk</source>
+ <translation>Scambio A1-B2</translation>
</message>
<message>
- <source>Save preset</source>
- <translation>Salva il preset</translation>
+ <source>A2-A1 modulation</source>
+ <translation>Modulazione A2-A1</translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
- <translation>Cliccando qui è possibile salvare il preset corrente del plugin VST.</translation>
+ <source>B2-B1 modulation</source>
+ <translation>Modulazione B2-B1</translation>
</message>
<message>
- <source>Next (+)</source>
- <translation>Successivo (+)</translation>
+ <source>Selected graph</source>
+ <translation>Grafico selezionato</translation>
</message>
+</context>
+<context>
+ <name>WatsynView</name>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
- <translation>Cliccando qui, è possibile selezionare i preset che sono caricati nel VST al momento.</translation>
+ <source>Select oscillator A1</source>
+ <translation>Passa all'oscillatore A1</translation>
</message>
<message>
- <source>Preset</source>
- <translation>Preset</translation>
+ <source>Select oscillator A2</source>
+ <translation>Passa all'oscillatore A2</translation>
</message>
<message>
- <source>by </source>
- <translation>da </translation>
+ <source>Select oscillator B1</source>
+ <translation>Passa all'oscillatore B1</translation>
</message>
<message>
- <source> - VST plugin control</source>
- <translation> - Controllo del plugin VST</translation>
+ <source>Select oscillator B2</source>
+ <translation>Passa all'oscillatore B2</translation>
</message>
-</context>
-<context>
- <name>VstEffectControlDialog</name>
<message>
- <source>Show/hide</source>
- <translation>Mostra/nascondi</translation>
+ <source>Mix output of A2 to A1</source>
+ <translation>Mescola output di A2 a A1</translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
- <translation>Controlla il plugin VST dal terminale LMMS</translation>
+ <source>Modulate amplitude of A1 with output of A2</source>
+ <translation>Modula l'amplificzione di A1 con l'output di A2</translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
- <translation>Cliccando qui, si apre una finestra di LMMS dove è possibile modificare le variabili del plugin VST.</translation>
+ <source>Ring-modulate A1 and A2</source>
+ <translation>Modulazione Ring tra A1 e A2</translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
- <translation>Apri un preset del plugin VST</translation>
+ <source>Modulate phase of A1 with output of A2</source>
+ <translation>Modula la fase di A1 con l'output di A2</translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
- <translation>Cliccando qui, è possibile aprire un altro preset del plugin VST (*fxp, *fxb).</translation>
+ <source>Mix output of B2 to B1</source>
+ <translation>Mescola output di B2 a B1</translation>
</message>
<message>
- <source>Previous (-)</source>
- <translation>Precedente (-)</translation>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation>Modula l'amplificzione di B1 con l'output di B2</translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
- <translation>Cliccando qui, viene cambiato il preset del plugin VST.</translation>
+ <source>Ring-modulate B1 and B2</source>
+ <translation>Modulazione Ring tra B1 e B2</translation>
</message>
<message>
- <source>Next (+)</source>
- <translation>Successivo (+)</translation>
+ <source>Modulate phase of B1 with output of B2</source>
+ <translation>Modula la fase di B1 con l'output di B2</translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
- <translation>Cliccando qui, è possibile selezionare i preset che sono caricati nel VST al momento.</translation>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation>Cliccando e trascinando il mouse in questo grafico è possibile disegnare una forma d'onda personalizzata.</translation>
</message>
<message>
- <source>Save preset</source>
- <translation>Salva il preset</translation>
+ <source>Load waveform</source>
+ <translation>Carica forma d'onda</translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
- <translation>Cliccando qui è possibile salvare il preset corrente del plugin VST.</translation>
+ <source>Click to load a waveform from a sample file</source>
+ <translation>Clicca per usare la forma d'onda di un file esterno</translation>
</message>
<message>
- <source>Effect by: </source>
- <translation>Effetto da: </translation>
+ <source>Phase left</source>
+ <translation>Sposta fase a sinistra</translation>
</message>
<message>
- <source> <br /></source>
- <translation> <br /></translation>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation>Clicca per spostare la fase di -15°</translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation>Caricamento plugin</translation>
+ <source>Phase right</source>
+ <translation>Sposta fase a destra</translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation>Attendere, caricamento del plugin VST...</translation>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation>Clicca per spostare la fase di +15°</translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation>Errore nel caricamento del plugin VST</translation>
+ <source>Normalize</source>
+ <translation>Normalizza</translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation>Non è stato possibile caricare il plugin VST %1 a causa di alcuni errori.
-Se, con altre applicazioni GNU/Linux, il plugin funziona, si prega di contattare uno sviluppatore di LMMS!</translation>
+ <source>Click to normalize</source>
+ <translation>Clicca per normalizzare</translation>
</message>
<message>
- <source>Open Preset</source>
- <translation>Apri preset</translation>
+ <source>Invert</source>
+ <translation>Inverti</translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
- <translation>Preset di plugin VST (*.fxp *.fxb)</translation>
+ <source>Click to invert</source>
+ <translation>Clicca per invertire</translation>
</message>
<message>
- <source>: default</source>
- <translation>: default</translation>
+ <source>Smooth</source>
+ <translation>Ammorbidisci</translation>
</message>
<message>
- <source>"</source>
- <translation>"</translation>
+ <source>Click to smooth</source>
+ <translation>Clicca per ammorbidire la forma d'onda</translation>
</message>
<message>
- <source>'</source>
- <translation>'</translation>
+ <source>Sine wave</source>
+ <translation>Onda sinusoidale</translation>
</message>
<message>
- <source>Save Preset</source>
- <translation>Salva Preset</translation>
+ <source>Click for sine wave</source>
+ <translation>Clicca per rimpiazzare il grafico con una forma d'onda sinusoidale</translation>
</message>
<message>
- <source>.fxp</source>
- <translation>.fxp</translation>
+ <source>Triangle wave</source>
+ <translation>Onda triangolare</translation>
</message>
<message>
- <source>.FXP</source>
- <translation>.FXP</translation>
+ <source>Click for triangle wave</source>
+ <translation>Clicca per rimpiazzare il grafico con una forma d'onda triangolare</translation>
</message>
<message>
- <source>.FXB</source>
- <translation>.FXB</translation>
+ <source>Click for saw wave</source>
+ <translation>Clicca per rimpiazzare il grafico con una forma d'onda a dente si sega</translation>
</message>
<message>
- <source>.fxb</source>
- <translation>.fxb</translation>
+ <source>Square wave</source>
+ <translation>Onda quadra</translation>
+ </message>
+ <message>
+ <source>Click for square wave</source>
+ <translation>Clicca per rimpiazzare il grafico con una forma d'onda quadra</translation>
</message>
</context>
<context>
@@ -3606,54 +5278,32 @@ Se, con altre applicazioni GNU/Linux, il plugin funziona, si prega di contattare
<translation>Fine del campione</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Ripetizione</translation>
- </message>
- <message>
<source>Stutter</source>
<translation></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation>FREQ</translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation>Frequenza:</translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation>GUAD</translation>
- </message>
<message>
- <source>Gain:</source>
- <translation>Guadagno:</translation>
+ <source>Loopback point</source>
+ <translation>Punto di LoopBack</translation>
</message>
<message>
- <source>RATIO</source>
- <translation>LIV</translation>
+ <source>Loop mode</source>
+ <translation>Modalità ripetizione</translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>Livello:</translation>
+ <source>Interpolation mode</source>
+ <translation>Modalità Interpolazione</translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
- <translation>Frequenza</translation>
+ <source>None</source>
+ <translation>Nessuna</translation>
</message>
<message>
- <source>Gain</source>
- <translation>Guadagno</translation>
+ <source>Linear</source>
+ <translation>Lineare</translation>
</message>
<message>
- <source>Ratio</source>
- <translation>Livello</translation>
+ <source>Sinc</source>
+ <translation>Sincronizzata</translation>
</message>
</context>
<context>
@@ -3713,6 +5363,10 @@ Se, con altre applicazioni GNU/Linux, il plugin funziona, si prega di contattare
<source>Change color</source>
<translation>Cambia colore</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation>Reimposta il colore a default</translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3808,6 +5462,120 @@ Se, con altre applicazioni GNU/Linux, il plugin funziona, si prega di contattare
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation>INPUT</translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation>Guadagno in Input:</translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation>OUTPUT</translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation>Guadagno in Output:</translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation>ATTACCO</translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation>Attacco del picco:</translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation>RILASCIO</translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation>Rilascio del picco:</translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation>Resetta forma d'onda</translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation>Clicca per riportare la forma d'onda allo stato originale</translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation>Ammorbidisci forma d'onda</translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation>Clicca per ammorbidire la forma d'onda</translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation>Aumenta l'amplificazione di 1dB</translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation>Clicca per aumentare l'amplificazione del grafico d'onda di 1dB</translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation>Diminuisci l'amplificazione di 1dB</translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation>Clicca qui per diminuire l'amplificazione del grafico d'onda di 1dB</translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation>Modalità stereo: Massimo</translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation>L'effetto si basa sul valore massimo tra i due canali stereo</translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation>Modalità stereo: Media</translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation>L'effetto si basa sul valore medio tra i due canali stereo</translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation>Modalità stereo: Indipendenti</translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation>L'effetto tratta i due canali stereo indipendentemente</translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation>Guadagno in input</translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation>Guadagno in output</translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation>Tempo di Attacco</translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation>Tempo di Rilascio</translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation>Modalità stereo</translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3844,67 +5612,61 @@ Assicurarsi di avere i permessi in scrittura per il file e per la directory cont
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation>Browser</translation>
+ <source>Graph</source>
+ <translation>Grafico</translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
- <translation>Sostituisci questo strumento alla traccia attiva</translation>
+ <source>Start frequency</source>
+ <translation>Frequenza iniziale</translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
- <translation>Usa in una nuova traccia nel Song-Editor</translation>
+ <source>End frequency</source>
+ <translation>Frequenza finale</translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
- <translation>Usa in una nuova traccia nel B+B Editor</translation>
+ <source>Gain</source>
+ <translation>Guadagno</translation>
</message>
<message>
- <source>Loading sample</source>
- <translation>Caricamento campione</translation>
+ <source>Length</source>
+ <translation>Lunghezza</translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
- <translation>Attendere, stiamo caricando il file per l'anteprima...</translation>
+ <source>Distortion Start</source>
+ <translation>Distorsione iniziale</translation>
</message>
<message>
- <source>--- Factory files ---</source>
- <translation>--- File di fabbrica ---</translation>
+ <source>Distortion End</source>
+ <translation>Distorsione finale</translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation>Grafico</translation>
+ <source>Envelope Slope</source>
+ <translation>Inclinazione Inviluppo</translation>
</message>
-</context>
-<context>
- <name>kickerInstrument</name>
<message>
- <source>Start frequency</source>
- <translation>Frequenza iniziale</translation>
+ <source>Noise</source>
+ <translation>Rumore</translation>
</message>
<message>
- <source>End frequency</source>
- <translation>Frequenza finale</translation>
+ <source>Click</source>
+ <translation>Click</translation>
</message>
<message>
- <source>Decay</source>
- <translation>Decadimento</translation>
+ <source>Frequency Slope</source>
+ <translation>Inclinazione Frequenza</translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Distorsione</translation>
+ <source>Start from note</source>
+ <translation>Inizia dalla nota</translation>
</message>
<message>
- <source>Gain</source>
- <translation>Guadagno</translation>
+ <source>End to note</source>
+ <translation>Finisci sulla nota</translation>
</message>
</context>
<context>
@@ -3918,16 +5680,36 @@ Assicurarsi di avere i permessi in scrittura per il file e per la directory cont
<translation>Frequenza finale:</translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Decadimento:</translation>
+ <source>Gain:</source>
+ <translation>Guadagno:</translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Distorsione:</translation>
+ <source>Frequency Slope:</source>
+ <translation>Inclinazione Frequenza:</translation>
</message>
<message>
- <source>Gain:</source>
- <translation>Guadagno:</translation>
+ <source>Envelope Length:</source>
+ <translation>Lunghezza Inviluppo:</translation>
+ </message>
+ <message>
+ <source>Envelope Slope:</source>
+ <translation>Inclinazione Inviluppo:</translation>
+ </message>
+ <message>
+ <source>Click:</source>
+ <translation>Click:</translation>
+ </message>
+ <message>
+ <source>Noise:</source>
+ <translation>Rumore:</translation>
+ </message>
+ <message>
+ <source>Distortion Start:</source>
+ <translation>Distorsione iniziale:</translation>
+ </message>
+ <message>
+ <source>Distortion End:</source>
+ <translation>Distorsione finale:</translation>
</message>
</context>
<context>
@@ -4215,6 +5997,38 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por
<source>Click here for white-noise.</source>
<translation>Cliccando qui si ottiene rumore bianco.</translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation>Onda a dente di sega limitata</translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation>Clicca per usare un'onda a dente di sega a banda limitata.</translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation>Onda quadra limitata</translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation>Clicca per usare un'onda quadra a banda limitata.</translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation>Onda triangolare limitata</translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation>Clicca per usare un'onda triangolare a banda limitata.</translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation>Onda Moog limitata</translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation>Clicca per usare un'onda Moog a banda limitata.</translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4810,13 +6624,29 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por
<translation>Panning osc %1:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Intonazione precisa osc %1 sinistra:</translation>
- </message>
- <message>
<source>cents</source>
<translation>centesimi</translation>
</message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation>La manopola di distorsione aggiunge distorsione all'ouyput dello strumento.</translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation>La manopola di volume cntrolla il volume di output dello strumento. Si rapporta al volume della finestra del plugin in modo cumulativo.</translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation>Il pulsante randomize genera un nuovo suono randomizzando tutte le manopole tranne le Armoniche, il volume principale e la distorsione.</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation>Osc %1 intonazione stereo</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation>Osc %1 armoniche:</translation>
+ </message>
</context>
<context>
<name>papuInstrument</name>
@@ -4969,7 +6799,7 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por
</message>
<message>
<source>Wave Channel Volume</source>
- <translation>Volume wave del canale:</translation>
+ <translation>Volume wave del canale</translation>
</message>
<message>
<source>Noise Channel Volume:</source>
@@ -5052,246 +6882,36 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por
<translation>Canale 3 a SO2 (sinistra)</translation>
</message>
<message>
- <source>Channel4 to SO2 (Left)</source>
- <translation>Canale 4 a SO2 (sinistra)</translation>
- </message>
- <message>
- <source>Wave Pattern</source>
- <translation>Wave Pattern</translation>
- </message>
- <message>
- <source>The amount of increase or decrease in frequency</source>
- <translation>La quantità di aumento o diminuzione di frequenza</translation>
- </message>
- <message>
- <source>The rate at which increase or decrease in frequency occurs</source>
- <translation>La velocità a cui l'aumento o la diminuzione di frequenza avvengono</translation>
- </message>
- <message>
- <source>The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.</source>
- <translation>Il duty cycle è il rapporto tra il tempo in cui il segnale è ON e il periodo completo del segnale.</translation>
- </message>
- <message>
- <source>Square Channel 1 Volume</source>
- <translation>Volume square del canale 1</translation>
- </message>
- <message>
- <source>The delay between step change</source>
- <translation>Ritardo tra i cambi di step</translation>
- </message>
- <message>
- <source>Draw the wave here</source>
- <translation>Disegnare l'onda qui</translation>
- </message>
-</context>
-<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>Impossibile congelare il pattern</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>Non è stato possibile congelare questo pattern perché in modalità riproduzione. Fermare la riproduzione e riprovare!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Congelamento del pattern...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Annulla</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>un doppio click apre questo pattern nel piano-roll
-la rotellina del mouse impostare il volume delle note</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>Apri nel piano-roll</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>Cancella tutte le note</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>Reimposta il nome</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>Cambia nome</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation>Congela nuovamente</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation>Congela</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation>Scongela</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>Aggiungi note</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>Elimina note</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Riproduci/metti in pausa questo pattern (Spazio)</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Registra note da una periferica/canale piano MIDI</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Ferma la riproduzione di questo pattern (Spazio)</translation>
- </message>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Taglia le note selezionate (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Copia le note selezionate (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Incolla le note selezionate (Ctrl+V)</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Piano-Roll - nessun pattern</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>Piano-Roll - %1</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Aprire un pattern con un doppio-click sul pattern stesso!</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>Ultima nota</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>Registra note da una periferica MIDI/canale piano mentre la traccia o la BB track è in riproduzione</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>Modalità disegno (Shift+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>Modalità cancellazione (Shift+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>Modalità selezione (Shift+S)</translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation>Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation>Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern e in seguito le si potrà riprodurre e modificare.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation>Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern, sentendo contemporaneamente la canzone o la traccia BB in sottofondo.</translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation>Cliccando qui si ferma la riproduzione del pattern attivo.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Cliccando qui le note selezionate verranno spostate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Cliccando qui le note selezionate verranno copiate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla.</translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation>Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile.</translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation>Note lock</translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation>Volume Note</translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation>Panning Note</translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation>Modalità intonanzione (Shift+T)</translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation>Cliccando qui si attiva la modalità disegno. In questa modalità è possibile aggiungere e spostare singoli valori. Questa è la modalità predefinita, che viene usata la maggior parte del tempo. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+D'. Tieni premuto Ctfl per andare temporaneamente in modalità selezione.</translation>
- </message>
- <message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation>Cliccando qui si attiva la modalità cancellazione. In questa modalità è possibile cancellare singoli valori. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+E'.</translation>
- </message>
- <message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation>Cliccando qui viene attivata la modalità selezione. Puoi selezionare le note. Puoi anche tenere premuto Ctrl durante la modalità disegno per usare la modalità selezione temporaneamente.</translation>
+ <source>Channel4 to SO2 (Left)</source>
+ <translation>Canale 4 a SO2 (sinistra)</translation>
</message>
<message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation>Cliccando qui viene attivata la modalità intonazione. Puoi cliccare una nota per aprire la finestra di automazione dell'intonazione. Puoi usare questa modalità per fare uno slide da una nota ad un'altra. Puoi anche premere Shift+T per attivare questa modalità.</translation>
+ <source>Wave Pattern</source>
+ <translation>Wave Pattern</translation>
</message>
<message>
- <source>Mark/unmark current semitone</source>
- <translation>Evidenza (o togli evidenziazione) questo semitono</translation>
+ <source>The amount of increase or decrease in frequency</source>
+ <translation>La quantità di aumento o diminuzione di frequenza</translation>
</message>
<message>
- <source>Mark current scale</source>
- <translation>Evidenza la scala corrente</translation>
+ <source>The rate at which increase or decrease in frequency occurs</source>
+ <translation>La velocità a cui l'aumento o la diminuzione di frequenza avvengono</translation>
</message>
<message>
- <source>Mark current chord</source>
- <translation>Evidenza l'accordo corrente</translation>
+ <source>The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.</source>
+ <translation>Il duty cycle è il rapporto tra il tempo in cui il segnale è ON e il periodo completo del segnale.</translation>
</message>
<message>
- <source>Unmark all</source>
- <translation>Togli tutte le evidenziazioni</translation>
+ <source>Square Channel 1 Volume</source>
+ <translation>Volume square del canale 1</translation>
</message>
<message>
- <source>No scale</source>
- <translation>- Scale</translation>
+ <source>The delay between step change</source>
+ <translation>Ritardo tra i cambi di step</translation>
</message>
<message>
- <source>No chord</source>
- <translation>- Accordi</translation>
+ <source>Draw the wave here</source>
+ <translation>Disegnare l'onda qui</translation>
</message>
</context>
<context>
@@ -5301,10 +6921,6 @@ la rotellina del mouse impostare il volume delle note</translation>
<translation>Plugin strumentali</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>tre potenti oscillatori che puoi modulare in diversi modi</translation>
- </message>
- <message>
<source>no description</source>
<translation>nessuna descrizione</translation>
</message>
@@ -5313,10 +6929,6 @@ la rotellina del mouse impostare il volume delle note</translation>
<translation>Host VST per usare i plugin VST con LMMS</translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>Semplice campionatore con molte impostazioni per usare campioni (ad es. di percussioni) in una traccia</translation>
- </message>
- <message>
<source>Filter for importing FL Studio projects into LMMS</source>
<translation>Filtro per importare progetti di FL Studio in LMMS</translation>
</message>
@@ -5341,10 +6953,6 @@ la rotellina del mouse impostare il volume delle note</translation>
<translation>Plugin per controllare le manopole con picchi di suono</translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation>sintetizzatore di colpo di cassa versatile</translation>
- </message>
- <message>
<source>GUS-compatible patch instrument</source>
<translation>strumento compatibile con GUS</translation>
</message>
@@ -5361,18 +6969,10 @@ la rotellina del mouse impostare il volume delle note</translation>
<translation>Imitazione monofonica del tb303 incompleta</translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation>Plugin per usare qualsiasi effetto VST in LMMS.</translation>
- </message>
- <message>
<source>Tuneful things to bang on</source>
<translation>Oggetti dotati di intonazione su cui picchiare</translation>
</message>
<message>
- <source>plugin for boosting bass</source>
- <translation>Plugin per aumentare notevolmente i bassi</translation>
- </message>
- <message>
<source>List installed LADSPA plugins</source>
<translation>Elenca i plugin LADSPA installati</translation>
</message>
@@ -5418,6 +7018,62 @@ Questo chip era utilizzato nel Commode 64.</translation>
<source>LMMS port of sfxr</source>
<translation>Port di sfxr su LMMS</translation>
</message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation>Sintetizzatore mostruoso con 3 oscillatori e matrice di modulazione</translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation>Tre potenti oscillatori modulabili in vari modi</translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation>Un plugin di amplificazione nativo</translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation>Strutmento Rack Carla</translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation>Sintetizzatore wavetable con 4 oscillatori modulabili</translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation>Plugin per la modifica della forma d'onda</translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation>Potenzia il tuo basso in modo veloce e semplice</translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation>Sintetizzatore di percussioni versatile</translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation>Semplice sampler con varie impostazioni, per usare suoni (come percussioni) in una traccia strumentale</translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation>Un versatile processore di dynamic</translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation>Strumento Patchbay Carla</translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation>Plugin per usare effetti VST arbitrari dentro LMMS.</translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation>Analizzatore di spettro grafico</translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation>Un sintetizzatore che imita i suoni del Nintendo Entertainment System</translation>
+ </message>
</context>
<context>
<name>projectNotes</name>
@@ -6117,153 +7773,6 @@ Latenza: %2 ms</translation>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation>Song-Editor</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Riproduci la canzone (Spazio)</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Ferma la riproduzione della canzone (Spazio)</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Aggiungi beat/bassline</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Aggiungi traccia di campione</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Cliccando qui si riproduce l'intera canzone. La riproduzione inizierà alla posizione attuale del segnaposto (verde). È possibile spostarlo anche durante la riproduzione.</translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Cliccando qui si ferma la riproduzione della canzone. Il segnaposto verrà portato all'inizio della canzone.</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>Non è stato possibile aprire il file</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>Impossibile scrivere il file</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>Modalità disegno</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>Modalità modifica (seleziona e sposta)</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation>Aggiungi una traccia di automazione</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation>Registra campioni da una periferica audio</translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation>Registra campioni da una periferica audio mentre la canzone o la BB track sono in riproduzione</translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation>Impossibile aprire il file %1. Probabilmente non disponi dei permessi necessari alla sua lettura.
-Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.</translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation>Errore nel file</translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation>Il file %1 sembra contenere errori, quindi non può essere caricato.</translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation>Tempo</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation>TEMPO/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation>tempo della canzone</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation>Il tempo della canzone è specificato in battiti al minuto (BPM). Per cambiare il tempo della canzone bisogna cambiare questo valore. Ogni marcatore ha 4 battiti, pertanto il tempo in BPM specifica quanti marcatori / 4 verranno riprodotti in un minuto (o quanti marcatori in 4 minuti).</translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation>Modalità ad alta qualità</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation>Volume principale</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation>volume principale</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation>Altezza principale</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation>altezza principale</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation>Valore: %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation>Valore: %1 semitoni</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation>Impossibile aprire il file %1 per la scrittura. Probabilmente non disponi dei permessi necessari alla scrittura di questo file. Assicurati di avere tali permessi e prova di nuovo.</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Spettro lineare</translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation>Asse Y lineare</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Spettro lineare</translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation>Asse Y lineare</translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation>Modalità del canale</translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6449,6 +7958,18 @@ Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.</tra
<source>Solo</source>
<translation>Solo</translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation>Pulisci questa traccia</translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation>Accendi tutti i processi di registrazione</translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation>Spegni tutti i processi di registrazione</translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6783,4 +8304,74 @@ Il LED nell'angolo in basso a destra sull'editor della forma d'on
<translation>Test voce %1</translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation>INPUT</translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation>Guadagno in Input:</translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation>OUTPUT</translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation>Guadagno in output:</translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation>Resetta forma d'onda</translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation>Clicca qui per resettare il grafico d'onda alla condizione originale</translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation>Spiana forma d'onda</translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation>Clicca qui per addolcire il grafico d'onda</translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation>Aumenta l'amplificazione di 1dB</translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation>Clicca qui per aumentare l'amplificazione del grafico d'onda di 1dB</translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation>Diminuisi l'amplificatore di 1dB</translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation>Clicca qui per diminuire l'amplificazione del grafico d'onda di 1dB</translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation>Taglia input</translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation>Taglia in segnale di input a 0dB</translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation>Guadagno in input</translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation>Guadagno in output</translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/ja.qm b/data/locale/ja.qm
index 65bd82e..74415c4 100644
Binary files a/data/locale/ja.qm and b/data/locale/ja.qm differ
diff --git a/data/locale/ja.ts b/data/locale/ja.ts
index 0298ffb..8aa452b 100644
--- a/data/locale/ja.ts
+++ b/data/locale/ja.ts
@@ -5,11 +5,7 @@
<name>AboutDialog</name>
<message>
<source>About LMMS</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
+ <translation>LMMS について</translation>
</message>
<message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
@@ -17,7 +13,7 @@
</message>
<message>
<source>About</source>
- <translation type="unfinished"></translation>
+ <translation>LMMS について</translation>
</message>
<message>
<source>LMMS - easy music production for everyone</source>
@@ -25,28 +21,88 @@
</message>
<message>
<source>Authors</source>
- <translation type="unfinished"></translation>
+ <translation>製作者</translation>
</message>
<message>
<source>Translation</source>
- <translation type="unfinished"></translation>
+ <translation>翻訳</translation>
</message>
<message>
<source>Current language not translated (or native English).
If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer!</source>
- <translation type="unfinished"></translation>
+ <translation>現在、この言語では翻訳されていません(もしくは英語のままです)。
+
+もし、あなたがLMMSを他の言語に翻訳することや既に存在する翻訳を改善することに興味があるならば、ぜひとも私たちを助けてください! ただ Maintainer にコンタクトを取るだけです!</translation>
</message>
<message>
<source>License</source>
- <translation type="unfinished"></translation>
+ <translation>ライセンス</translation>
</message>
<message>
<source>Copyright (c) 2004-2014, LMMS developers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">音量:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">音量</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -69,54 +125,74 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.</source>
- <translation type="unfinished">クリックすると、ほかのオーディオファイルをひらきます。ファイルを選べる場所にアイアログが表示されます。ループモード・開始点と終了点・倍率などの設定はリセットされません。オリジナルのサンプルとは異なる音になるかもしれません。</translation>
+ <translation type="unfinished">ここをクリックすると、他のオーディオファイルを開きます。ファイルを選択することができるダイアログが表示されます。ループモード・開始点と終了点・増幅率などの設定はリセットされませんが、オリジナルのサンプルとは異なる音になるかもしれません。</translation>
</message>
<message>
<source>Reverse sample</source>
- <translation type="unfinished">サンプル逆回転</translation>
+ <translation type="unfinished">サンプルを逆回転</translation>
</message>
<message>
<source>If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.</source>
- <translation type="unfinished">このボタンを有効にすれば、すべてのサンプルが逆回転されます。リバースドクラッシュというかっこいいエフェクトに使えます。</translation>
+ <translation type="unfinished">このボタンを有効にすると、すべてのサンプルが逆回転されます。例えばリバースドクラッシュといったクールなエフェクトで役立ちます。</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation type="unfinished">開始点と終了点でサンプルをループ</translation>
+ <source>Amplify:</source>
+ <translation type="unfinished">増幅:</translation>
</message>
<message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation type="unfinished">どこからループモードが始まるかを指定します。ループモードが始まるとオーディオプロセッサーは、すべての音(ノート)が演奏されるまで、サンプルの開始点と終了点の間をループします。 ストリングやクワイヤーのサンプルなどに効果的です。</translation>
+ <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <translation type="unfinished">このつまみでは増幅率を設定することができます。この値を100%にするとサンプルは変化しません。そうでないときは増幅率が上下します(実際のサンプルファイルは変更されません!)</translation>
</message>
<message>
- <source>Amplify:</source>
+ <source>Startpoint:</source>
+ <translation type="unfinished">開始点:</translation>
+ </message>
+ <message>
+ <source>Endpoint:</source>
+ <translation type="unfinished">終了点:</translation>
+ </message>
+ <message>
+ <source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
- <translation type="unfinished">このつまみで増幅率を調整できます。この値を100%にするとサンプルは変化しません。そうでないときは増幅率が上下します(実際のサンプルファイルそのままで)。</translation>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Startpoint:</source>
+ <source>Disable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation type="unfinished">このつまみでオーディオファイルプロセッサががサンプル演奏を開始する場所をセットします。ループモードをONにしてる場合でひとつのノートがスタートポイントとエンドポイントの間のサンプルより長い場合、これで指定した位置がオーディオプロセッサが戻る点です。</translation>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
+ <source>Enable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation type="unfinished">このつまみでオーディオプロセッサがサンプル演奏をストップする位置を指定します。もしループモードがONの場合でひとつのノートが開始点と終了点のあいだのサンプルより長い場合、この位置はオーディオプロセッサが戻る位置です。</translation>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -150,22 +226,22 @@ If you're interested in translating LMMS in another language or want to imp
<name>AudioJack::setupWidget</name>
<message>
<source>CLIENT-NAME</source>
- <translation type="unfinished">クライアント名</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>CHANNELS</source>
- <translation type="unfinished">チャンネル</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AudioOss::setupWidget</name>
<message>
<source>DEVICE</source>
- <translation type="unfinished">デバイス</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>CHANNELS</source>
- <translation type="unfinished">チャンネル</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -176,25 +252,25 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>DEVICE</source>
- <translation type="unfinished">デバイス</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AudioPulseAudio::setupWidget</name>
<message>
<source>DEVICE</source>
- <translation type="unfinished">デバイス</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>CHANNELS</source>
- <translation type="unfinished">チャンネル</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AudioSdl::setupWidget</name>
<message>
<source>DEVICE</source>
- <translation type="unfinished">デバイス</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -209,11 +285,11 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>&Paste value (%1%2)</source>
- <translation type="unfinished">値をペースト(&P) (%1%2)</translation>
+ <translation type="unfinished">値を貼り付け(&P) (%1%2)</translation>
</message>
<message>
<source>Edit song-global automation</source>
- <translation type="unfinished">歌全体のオートメーションを編集</translation>
+ <translation type="unfinished">曲全体のオートメーションを編集</translation>
</message>
<message>
<source>Connected to %1</source>
@@ -221,19 +297,19 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Connected to controller</source>
- <translation type="unfinished">コントローラに接続済</translation>
+ <translation type="unfinished">コントローラーに接続済</translation>
</message>
<message>
<source>Edit connection...</source>
- <translation type="unfinished">接続を編集</translation>
+ <translation type="unfinished">接続を編集...</translation>
</message>
<message>
<source>Remove connection</source>
- <translation type="unfinished">接続を消去</translation>
+ <translation type="unfinished">接続を削除</translation>
</message>
<message>
<source>Connect to controller...</source>
- <translation type="unfinished">コントローラに接続</translation>
+ <translation type="unfinished">コントローラーに接続...</translation>
</message>
<message>
<source>Remove song-global automation</source>
@@ -248,7 +324,7 @@ If you're interested in translating LMMS in another language or want to imp
<name>AutomationEditor</name>
<message>
<source>Play/pause current pattern (Space)</source>
- <translation type="unfinished">現在のパターンの再生/ポーズ (Space)</translation>
+ <translation type="unfinished">現在のパターンの再生/一時停止 (Space)</translation>
</message>
<message>
<source>Stop playing of current pattern (Space)</source>
@@ -268,7 +344,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Erase mode (Shift+E)</source>
- <translation type="unfinished">消去 モード (shift+E)</translation>
+ <translation type="unfinished">消去モード (shift+E)</translation>
</message>
<message>
<source>Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.</source>
@@ -280,7 +356,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Cut selected values (Ctrl+X)</source>
- <translation type="unfinished">選択した値をカット (Shift+M)</translation>
+ <translation type="unfinished">選択した値を切り取り (Shift+M)</translation>
</message>
<message>
<source>Copy selected values (Ctrl+C)</source>
@@ -288,7 +364,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Paste values from clipboard (Ctrl+V)</source>
- <translation type="unfinished">値をクリップボードからペースト (Ctrl+V)</translation>
+ <translation type="unfinished">クリップボードから値を貼り付け (Ctrl+V)</translation>
</message>
<message>
<source>Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
@@ -304,23 +380,23 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Automation Editor - no pattern</source>
- <translation type="unfinished">オートメーションエディタ - パターンなし</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>Automation Editor - %1</source>
- <translation type="unfinished">オートメーションエディタ - %1</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>Please open an automation pattern with the context menu of a control!</source>
- <translation type="unfinished">コントロールのコンテクストメニューでオートメーションパターンを選んでください</translation>
+ <translation type="unfinished">コントロールのコンテキストメニューでオートメーションパターンを選択してください!</translation>
</message>
<message>
<source>Values copied</source>
- <translation type="unfinished">値はコピーされました</translation>
+ <translation type="unfinished">値をコピーしました</translation>
</message>
<message>
<source>All selected values were copied to the clipboard.</source>
- <translation type="unfinished">選択された値はすべてクリップボードにコピーされました</translation>
+ <translation type="unfinished">選択された値はすべてクリップボードにコピーされました。</translation>
</message>
<message>
<source>Discrete progression</source>
@@ -363,18 +439,22 @@ If you're interested in translating LMMS in another language or want to imp
<name>AutomationPattern</name>
<message>
<source>Drag a control while pressing <Ctrl></source>
- <translation type="unfinished">実行中のドラッグコントロール<Ctrl></translation>
+ <translation type="unfinished"><Ctrl>を押しながらコントロールをドラッグしてください</translation>
+ </message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AutomationPatternView</name>
<message>
<source>double-click to open this pattern in automation editor</source>
- <translation type="unfinished">ダブルクリックでこのパターンをオートメーションエディタ中にひらきます</translation>
+ <translation type="unfinished">ダブルクリックすると、このパターンをAutomation Editorで開きます</translation>
</message>
<message>
<source>Open in Automation editor</source>
- <translation type="unfinished">オートメーションエディタ中に開く</translation>
+ <translation type="unfinished">Automation Editor で開く</translation>
</message>
<message>
<source>Clear</source>
@@ -386,7 +466,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Change name</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">名前を変更</translation>
</message>
<message>
<source>%1 Connections</source>
@@ -396,30 +476,87 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished">"%1" を切断</translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">録音をセット/クリア</translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
<message>
<source>Automation track</source>
- <translation type="unfinished">オートメーショントラック</translation>
+ <translation type="unfinished">Automation track</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished">周波数:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished">ゲイン:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished">比率:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished">周波数</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished">ゲイン</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished">比率</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
- <translation type="unfinished">コントローラ %1</translation>
+ <translation type="unfinished">Controller %1</translation>
</message>
</context>
<context>
<name>ControllerConnectionDialog</name>
<message>
<source>Connection Settings</source>
- <translation type="unfinished">コントローラ設定</translation>
+ <translation type="unfinished">接続設定</translation>
</message>
<message>
<source>MIDI CONTROLLER</source>
- <translation type="unfinished">MIDI コントローラ</translation>
+ <translation type="unfinished">MIDI コントローラー</translation>
</message>
<message>
<source>Input channel</source>
@@ -431,11 +568,11 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Input controller</source>
- <translation type="unfinished">インプット コントローラ</translation>
+ <translation type="unfinished">入力コントローラー</translation>
</message>
<message>
<source>CONTROLLER</source>
- <translation type="unfinished">コントローラ</translation>
+ <translation type="unfinished">コントローラー</translation>
</message>
<message>
<source>Auto Detect</source>
@@ -447,7 +584,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>USER CONTROLLER</source>
- <translation type="unfinished">ユーザ コントローラ</translation>
+ <translation type="unfinished">ユーザー コントローラー</translation>
</message>
<message>
<source>MAPPING FUNCTION</source>
@@ -455,34 +592,34 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>OK</source>
- <translation type="unfinished"></translation>
+ <translation>OK</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">キャンセル</translation>
+ <translation>キャンセル</translation>
</message>
<message>
<source>LMMS</source>
- <translation type="unfinished"></translation>
+ <translation>LMMS</translation>
</message>
<message>
<source>Cycle Detected.</source>
- <translation type="unfinished">サイクルは消去されました。</translation>
+ <translation type="unfinished">サイクルが検出されました。</translation>
</message>
</context>
<context>
<name>ControllerRackView</name>
<message>
<source>Controller Rack</source>
- <translation type="unfinished">コントローラ ラック</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>Add</source>
- <translation type="unfinished">追加</translation>
+ <translation>追加</translation>
</message>
<message>
<source>Confirm Delete</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">削除の確認</translation>
</message>
<message>
<source>Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo.</source>
@@ -497,19 +634,19 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Controllers are able to automate the value of a knob, slider, and other controls.</source>
- <translation type="unfinished">コントローラーは つまみやスライダーやその他のコントロールの値を自動化することができます。</translation>
+ <translation type="unfinished">コントローラーでは、つまみやスライダー、その他のコントロールの値を自動化することができます。</translation>
</message>
<message>
<source>Rename controller</source>
- <translation type="unfinished">コントローラの改名</translation>
+ <translation type="unfinished">コントローラー名の変更</translation>
</message>
<message>
<source>Enter the new name for this controller</source>
- <translation type="unfinished">コントローラの新しい名前を入れてください</translation>
+ <translation type="unfinished">コントローラーの新しい名前を入力してください</translation>
</message>
<message>
<source>&Remove this plugin</source>
- <translation type="unfinished">このプラグインを除去(&R)</translation>
+ <translation type="unfinished">このプラグインを削除(&R)</translation>
</message>
<message>
<source>&Help</source>
@@ -517,198 +654,324 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
- <name>Effect</name>
+ <name>DualFilterControlDialog</name>
<message>
- <source>Effect enabled</source>
- <translation type="unfinished">エフェクト有効</translation>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wet/Dry mix</source>
+ <source>Filter 2 enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gate</source>
+ <source>Click to enable/disable Filter 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Click to enable/disable Filter 2</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>EffectChain</name>
+ <name>DualFilterControls</name>
<message>
- <source>Effects enabled</source>
- <translation type="unfinished">エフェクト有効</translation>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectRackView</name>
<message>
- <source>EFFECTS CHAIN</source>
- <translation type="unfinished">エフェクトチェイン</translation>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Add effect</source>
- <translation type="unfinished">エフェクト追加</translation>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectSelectDialog</name>
<message>
- <source>Add effect</source>
- <translation type="unfinished">エフェクト追加</translation>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin description</source>
+ <source>Gain 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EffectView</name>
<message>
- <source>Toggles the effect on or off.</source>
- <translation type="unfinished">エフェクトの オン/オフ</translation>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>On/Off</source>
+ <source>Filter 2 enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>W/D</source>
+ <source>Filter 2 type</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wet Level:</source>
+ <source>Cutoff 2 frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
- <translation type="unfinished">Wet/Dry つまみで 出力中の入力シグナルとエフェクトシグナルの割合をきめます。</translation>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DECAY</source>
+ <source>Gain 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Time:</source>
+ <source>LowPass</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
- <translation type="unfinished">ディケイ つまみは いくつの無音バッファがプラグインがプロセスを終了するまえに渡されないといけないかを調整します。小さくするとCPUのオーバヘッドをへらせますが、ディレイとリバー部エフェクトの尻尾がクリッピングする危険があります。</translation>
+ <source>HiPass</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>GATE</source>
+ <source>BandPass csg</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gate:</source>
+ <source>BandPass czpg</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
- <translation type="unfinished">ゲートつまみはシグナルレベルをコントールします。このシグナルレベルはシグナル処理をいつ終了するか決定する際に無音と判断されるレベルです。</translation>
+ <source>Notch</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Controls</source>
- <translation type="unfinished">コントロール</translation>
+ <source>Allpass</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
-
-The On/Off switch allows you to bypass a given plugin at any point in time.
-
-The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
-
-The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
-
-The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
-
-The Controls button opens a dialog for editing the effect's parameters.
-
-Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
- <translation type="unfinished">エフェクトプラグイン関数はいつつかのエフェクトのひと連なりです。シグナルは上から下に処理されます。
-On/Off スイッチでいつでも指定したプラグインをパイパスすることができます.
-
-Wet/Dry つまみで エフェクトの出力中の入力シグナルとエフェクトシグナルのバランスをコントロールできます。
-
-入力ステージは一つ前のステージからの出力です。なので連鎖の下の方のエフェクトの 'dry'シグナルはそれまでのエフェクトをすべて含んでいす。
-
-Decay つまみで ノートが終わったあとどれだけの時間シグナルを処理するかをきめます。与えられた時間内に与えられたしきい値以下に音量が落ちたときにエフェクトは処理を停止します。このつまみで”与えられた時間”をきめます。この時間を長くするとCPUを食います、すなわちた大抵のエフェクトについては Decayは小さくするべきです。ディレイのような長い時間の沈黙を生じるエフェクトの場合はDecayを増やす必要があります。
-
-Gate のつまみで エフェクトが自動停止するための”与えられたしきい値"を決めます。このノブで決めたレベル以下にシグナルレベルが落ちるととすぐに”与えられた時間”がはじまります。
-コントロール ボタンで エフェクトのパラメタの編集ダイアログをひらきます。
-
-右クリックするとコンテキストメニューが開きます。そこでエフェクトが実行される順番をかえたりエフェクトを完全に消去したりできます。
-</translation>
+ <source>Moog</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move &up</source>
- <translation type="unfinished">上方移動(&u)</translation>
+ <source>2x LowPass</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Move &down</source>
- <translation type="unfinished">下方移動(&d)</translation>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Remove this plugin</source>
- <translation type="unfinished">このプラグインを除去(&R)</translation>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Help</source>
- <translation type="unfinished">ヘルプ(&H)</translation>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EnvelopeAndLfoParameters</name>
<message>
- <source>Predelay</source>
+ <source>RC LowPass 24dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>RC BandPass 24dB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Hold</source>
+ <source>RC HighPass 24dB</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Effect</name>
+ <message>
+ <source>Effect enabled</source>
+ <translation type="unfinished">エフェクト有効</translation>
+ </message>
+ <message>
+ <source>Wet/Dry mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gate</source>
+ <translation type="unfinished">ゲート</translation>
+ </message>
+ <message>
<source>Decay</source>
+ <translation type="unfinished">ディケイ</translation>
+ </message>
+</context>
+<context>
+ <name>EffectChain</name>
+ <message>
+ <source>Effects enabled</source>
+ <translation type="unfinished">エフェクト有効</translation>
+ </message>
+</context>
+<context>
+ <name>EffectRackView</name>
+ <message>
+ <source>EFFECTS CHAIN</source>
+ <translation type="unfinished">エフェクトチェイン</translation>
+ </message>
+ <message>
+ <source>Add effect</source>
+ <translation type="unfinished">エフェクトを追加</translation>
+ </message>
+</context>
+<context>
+ <name>EffectSelectDialog</name>
+ <message>
+ <source>Add effect</source>
+ <translation type="unfinished">エフェクトを追加</translation>
+ </message>
+ <message>
+ <source>Plugin description</source>
+ <translation type="unfinished">プラグインの説明</translation>
+ </message>
+</context>
+<context>
+ <name>EffectView</name>
+ <message>
+ <source>Toggles the effect on or off.</source>
+ <translation type="unfinished">エフェクトの有効/無効を切り替えます。</translation>
+ </message>
+ <message>
+ <source>On/Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sustain</source>
+ <source>W/D</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Wet Level:</source>
+ <translation type="unfinished">Wet レベル:</translation>
+ </message>
+ <message>
+ <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
+ <translation type="unfinished">Wet/Dry つまみでは、出力中の入力シグナルとエフェクトシグナルの割合を設定します。</translation>
+ </message>
+ <message>
+ <source>DECAY</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation</source>
+ <source>Time:</source>
+ <translation type="unfinished">時間:</translation>
+ </message>
+ <message>
+ <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
+ <translation type="unfinished">ディケイつまみでは、プラグインがプロセスを終了する前にいくつの無音バッファが渡されなければならないかをコントロールします。値を小さくするほどCPUのオーバヘッドは減少しますが、ディレイとリバーブエフェクトの末尾がクリッピングする危険があります。</translation>
+ </message>
+ <message>
+ <source>GATE</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <source>Gate:</source>
+ <translation type="unfinished">ゲート:</translation>
+ </message>
+ <message>
+ <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
+ <translation type="unfinished">ゲートつまみではシグナルレベルをコントロールします。このシグナルレベルとはシグナル処理をいつ終了するか決定する際に無音と判断されるレベルです。</translation>
+ </message>
+ <message>
+ <source>Controls</source>
+ <translation type="unfinished">コントロール</translation>
+ </message>
+ <message>
+ <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
+
+The On/Off switch allows you to bypass a given plugin at any point in time.
+
+The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
+
+The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
+
+The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
+
+The Controls button opens a dialog for editing the effect's parameters.
+
+Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
+ <translation type="unfinished">エフェクトプラグイン関数とは連鎖するエフェクト系列です。シグナルは上から下に処理されます。
+
+On/Off スイッチでいつでも指定したプラグインをバイパスすることができます。
+
+Wet/Dry つまみでは、エフェクトの出力中の入力シグナルとエフェクトシグナルのバランスをコントロールします。ステージの入力とは一つ前のステージからの出力です。そのため連鎖の下の方のエフェクトの 'dry'シグナルはそれまでのエフェクトをすべて含んでいます。
+
+ディケイつまみでは、ノートのリリース後に処理されるシグナルの長さをコントロールします。与えられた時間内に与えられた閾値以下に音量が落ちたときにエフェクトは処理を停止します。このつまみで”与えられた時間”を設定します。この時間を長くするほどCPUを必要とするので、多くのエフェクトでは小さい値を指定するべきでしょう。ディレイのような長時間の沈黙が発生するエフェクトの場合は値を増やす必要があります。
+
+ゲートつまみでは、エフェクトの自動停止ために”与えられる閾値”をコントロールします。このつまみで指定したレベル以下にシグナルレベルが落ちるとすぐに”与えられた時間長”が開始します。
+
+コントロールボタンはエフェクトのパラメータの編集ダイアログを開きます。
+
+右クリックするとコンテキストメニューが開きます。メニューではエフェクトが実行される順番を変更したり、エフェクトを完全に消去することができます。
+</translation>
+ </message>
+ <message>
+ <source>Move &up</source>
+ <translation type="unfinished">一つ上へ(&u)</translation>
+ </message>
+ <message>
+ <source>Move &down</source>
+ <translation type="unfinished">一つ下へ(&d)</translation>
+ </message>
+ <message>
+ <source>&Remove this plugin</source>
+ <translation type="unfinished">このプラグインを削除(&R)</translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>ヘルプ(&H)</translation>
+ </message>
+</context>
+<context>
+ <name>EnvelopeAndLfoParameters</name>
+ <message>
+ <source>Predelay</source>
+ <translation type="unfinished">プレディレイ</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished">アタック</translation>
+ </message>
+ <message>
+ <source>Hold</source>
+ <translation type="unfinished">ホールド</translation>
+ </message>
+ <message>
+ <source>Decay</source>
+ <translation type="unfinished">ディケイ</translation>
+ </message>
+ <message>
+ <source>Sustain</source>
+ <translation type="unfinished">サスティン</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished">リリース</translation>
+ </message>
+ <message>
+ <source>Modulation</source>
+ <translation type="unfinished">モジュレーション</translation>
+ </message>
+ <message>
<source>LFO Predelay</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO プレディレイ</translation>
</message>
<message>
<source>LFO Attack</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO アタック</translation>
</message>
<message>
<source>LFO speed</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO の速度</translation>
</message>
<message>
<source>LFO Modulation</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO のモジュレーション</translation>
</message>
<message>
<source>LFO Wave Shape</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO の波形</translation>
</message>
<message>
<source>Freq x 100</source>
@@ -727,11 +990,11 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Predelay:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">プレディレイ:</translation>
</message>
<message>
<source>Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.</source>
- <translation type="unfinished">このつまみで現在のエンベロープのプレディレイを指定します。この時間を長くすると実際のエンベロープがスタートする前の時間が長くなります。</translation>
+ <translation type="unfinished">このつまみで現在のエンベロープのプレディレイを指定します。この値を大きくするほど実際のエンベロープの開始前の時間が長くなります。</translation>
</message>
<message>
<source>ATT</source>
@@ -739,11 +1002,11 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Attack:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">アタック:</translation>
</message>
<message>
<source>Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.</source>
- <translation type="unfinished">このつまみで現在のエンベロープのアタックタイムを指定します。この値を大きくするとエンベロープのアタックレベルを増やすのに長い時間が必要になります。</translation>
+ <translation type="unfinished">このつまみで現在のエンベロープのアタック時間を指定します。この値を大きくするほどエンベロープのアタックレベルを増やすのに長い時間が必要になります。ピアノのようなインストゥルメントには小さい値を、ストリングスには大きい値を選択してください。</translation>
</message>
<message>
<source>HOLD</source>
@@ -751,11 +1014,11 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Hold:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ホールド:</translation>
</message>
<message>
<source>Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.</source>
- <translation type="unfinished">このつまみで現在のエンベロープのホールドタイムを指定します。 この値を大きくするとエンベロープがサステインレベルへの減衰を始める前にアタックレベルををどれくらい保持する時間が長くなります。</translation>
+ <translation type="unfinished">このつまみで現在のエンベロープのホールド時間を指定します。この値を大きくするほどエンベロープがサスティンレベルへの減衰の開始前にアタックレベルを保持する時間が長くなります。</translation>
</message>
<message>
<source>DEC</source>
@@ -763,11 +1026,11 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Decay:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ディケイ:</translation>
</message>
<message>
<source>Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.</source>
- <translation type="unfinished">このつまみで現在のエンベロープのディケイタイムを指定します。この値を大きくするとエンベロープがアタックレベルからサスティンレベルに減衰するのに必要な時間が長くなります。ピアノのような楽器には短い時間を選びます。</translation>
+ <translation type="unfinished">このつまみで現在のエンベロープのディケイ時間を指定します。この値を大きくするほどエンベロープがアタックレベルからサスティンレベルに減衰するのに必要な時間が長くなります。ピアノのようなインストゥルメントには小さい値を選択してください。</translation>
</message>
<message>
<source>SUST</source>
@@ -775,11 +1038,11 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Sustain:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">サスティン:</translation>
</message>
<message>
<source>Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.</source>
- <translation type="unfinished">このつまみで現在のエンベロープのサスティンレベルを指定します。値を大きくするとエンベロー部がゼロになる前にとどまってるレベルが高くなります。</translation>
+ <translation type="unfinished">このつまみで現在のエンベロープのサスティンレベルを指定します。この値を大きくするほどエンベロープがゼロになる前に留まるレベルが高くなります。</translation>
</message>
<message>
<source>REL</source>
@@ -787,11 +1050,11 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Release:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">リリース:</translation>
</message>
<message>
<source>Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.</source>
- <translation type="unfinished">このつまみで現在のエンベロープのリリースタイムを指定します。値を大きくするとサスティンレベルからゼロに減少するのに必要な時間が長くなります。ストリングのような楽器ではこの値を大きくしてください</translation>
+ <translation type="unfinished">このつまみで現在のエンベロープのリリース時間を指定します。この値を大きくするほどサスティンレベルからゼロに減少するのに必要な時間が長くなります。ストリングスのようなインストゥルメントでは大きい値を指定してください。</translation>
</message>
<message>
<source>AMT</source>
@@ -799,27 +1062,27 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Modulation amount:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">モジュレーション量:</translation>
</message>
<message>
<source>Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.</source>
- <translation type="unfinished">このつまみで現在のエンベロープのモジュレーション量を指定します。この値を大きくするとこのエンベロ部が影響する対応する値(音量とかコントロール周波数とか)が大きくなりまります。</translation>
+ <translation type="unfinished">このつまみで現在のエンベロープのモジュレーション量を指定します。この値を大きくするほど対応する値(音量やカットオフ周波数など)はエンベロープの影響を受けます。</translation>
</message>
<message>
<source>LFO predelay:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO プレディレイ:</translation>
</message>
<message>
<source>Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.</source>
- <translation type="unfinished">このつまみで現在のLFOのプレデイレイタイムを指定します。この値を大きくすると LSFOがオシレートを始めるまでの時間が長くなります。</translation>
+ <translation type="unfinished">このつまみで現在のLFOのプレディレイ時間を指定します。この値を大きくするほどLFOがオシレートを開始するまでの時間が長くなります。</translation>
</message>
<message>
<source>LFO- attack:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO アタック:</translation>
</message>
<message>
<source>Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.</source>
- <translation type="unfinished">このつまみで現在のLFOのアタックタイムを指定します。大きくするとLFOの振幅が最大になるまでにかかる時間が長くなります。</translation>
+ <translation type="unfinished">このつまみで現在のLFOのアタック時間を指定します。この値を大きくするほどLFOの振幅が最大になるまでにかかる時間が長くなります。</translation>
</message>
<message>
<source>SPD</source>
@@ -827,35 +1090,35 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>LFO speed:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO の速度:</translation>
</message>
<message>
<source>Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.</source>
- <translation type="unfinished">このつまみで現在のLFOのスピードを指定します。値を大きくするとLFOのオシレートが早くなってエフェクトも早くなります。</translation>
+ <translation type="unfinished">このつまみで現在のLFOの速度を指定します。この値を大きくするほどLFOのオシレートが速くなり、エフェクトも速くなります。</translation>
</message>
<message>
<source>Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.</source>
- <translation type="unfinished">このつまみで現在のLFOのモジュレーション量を指定します。あたりを大きくするとLFOの影響をうける選んだ値(ボリウムとかカットオフ周波数とか)がおおきくなります。</translation>
+ <translation type="unfinished">このつまみで現在のLFOのモジュレーション量を指定します。この値を大きくするほど選んだ値(音量やカットオフ周波数等)はLFOの影響を受けます。</translation>
</message>
<message>
<source>Click here for a sine-wave.</source>
- <translation type="unfinished">クリックでサイン波</translation>
+ <translation type="unfinished">ここをクリックするとサイン波形にします。</translation>
</message>
<message>
<source>Click here for a triangle-wave.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ここをクリックすると三角波形にします。</translation>
</message>
<message>
<source>Click here for a saw-wave for current.</source>
- <translation type="unfinished">クリックでのこぎり波</translation>
+ <translation type="unfinished">ここをクリックするとのこぎり波形にします。</translation>
</message>
<message>
<source>Click here for a square-wave.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ここをクリックすると方形波形にします。</translation>
</message>
<message>
<source>Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.</source>
- <translation type="unfinished">クリックでユーザー定義波形。あとで、対応するサンプルファイルをLFOグラフの上にドラッグしてください。</translation>
+ <translation type="unfinished">ここをクリックするとユーザー定義波形にします。その後、対応するサンプルファイルをLFOグラフの上にドラッグしてください。</translation>
</message>
<message>
<source>FREQ x 100</source>
@@ -863,11 +1126,11 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Click here if the frequency of this LFO should be multiplied by 100.</source>
- <translation type="unfinished">クリックでLFO周波数を100倍</translation>
+ <translation type="unfinished">ここをクリックするとLFO周波数を100倍にします。</translation>
</message>
<message>
<source>multiply LFO-frequency by 100</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">LFO周波数を100倍にする</translation>
</message>
<message>
<source>MODULATE ENV-AMOUNT</source>
@@ -875,7 +1138,7 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Click here to make the envelope-amount controlled by this LFO.</source>
- <translation type="unfinished">クリックすると エンベロープの量がこのLFOでコントロールされます。</translation>
+ <translation type="unfinished">ここをクリックするとエンベロープ量をこのLFOでコントロールします。</translation>
</message>
<message>
<source>control envelope-amount by this LFO</source>
@@ -887,30 +1150,34 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Hint</source>
- <translation type="unfinished">ヒント</translation>
+ <translation>ヒント</translation>
</message>
<message>
<source>Drag a sample from somewhere and drop it in this window.</source>
- <translation type="unfinished">どっかからサンプルをドラッグしてきてこのウインドウにドロップしてください。</translation>
+ <translation type="unfinished">任意の場所からサンプルをドラッグし、このウィンドウ内にドロップしてください。</translation>
+ </message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExportProjectDialog</name>
<message>
<source>Export project</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">プロジェクトのエクスポート</translation>
</message>
<message>
<source>Output</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">出力</translation>
</message>
<message>
<source>File format:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ファイル フォーマット:</translation>
</message>
<message>
<source>Samplerate:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">サンプルレート:</translation>
</message>
<message>
<source>44100 Hz</source>
@@ -934,7 +1201,7 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Bitrate:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ビットレート:</translation>
</message>
<message>
<source>64 KBit/s</source>
@@ -962,7 +1229,7 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Depth:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">深度:</translation>
</message>
<message>
<source>16 Bit Integer</source>
@@ -978,11 +1245,11 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Quality settings</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">品質設定</translation>
</message>
<message>
<source>Interpolation:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">補間:</translation>
</message>
<message>
<source>Zero Order Hold</source>
@@ -1002,7 +1269,7 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Oversampling (use with care!):</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">オーバーサンプリング(慎重に扱ってください!):</translation>
</message>
<message>
<source>1x (None)</source>
@@ -1021,51 +1288,117 @@ Gate のつまみで エフェクトが自動停止するための”与えら
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
+ <source>Start</source>
+ <translation type="unfinished">開始</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>キャンセル</translation>
+ </message>
+ <message>
+ <source>Export as loop (remove end silence)</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowser</name>
<message>
- <source>Alias-free oscillators</source>
+ <source>Browser</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Start</source>
+ <source>Send to active instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="unfinished">キャンセル</translation>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Export as loop (remove end silence)</source>
+ <source>Open in new instrument-track/B+B Editor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>ヘルプ(&H)</translation>
+ </message>
</context>
<context>
<name>FxMixer</name>
<message>
<source>Master</source>
- <translation type="unfinished">マスタ</translation>
+ <translation type="unfinished">マスター</translation>
</message>
<message>
<source>FX %1</source>
- <translation type="unfinished">エフェクト %1</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FxMixerView</name>
<message>
<source>Rename FX channel</source>
- <translation type="unfinished">エフェクトチャンネルの改名</translation>
+ <translation type="unfinished">FXチャンネル名を変更</translation>
</message>
<message>
<source>Enter the new name for this FX channel</source>
- <translation type="unfinished">このエフェクトチャンネルの新しい名前を入力</translation>
+ <translation type="unfinished">このFXチャンネルの新しい名前を入力してください</translation>
</message>
<message>
<source>FX-Mixer</source>
- <translation type="unfinished">エフェクトミキサー</translation>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
<translation type="unfinished"></translation>
@@ -1076,7 +1409,14 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
<message>
<source>Mute this FX channel</source>
- <translation type="unfinished">このエフェクトチャンネルをミュート</translation>
+ <translation type="unfinished">このFXチャンネルをミュート</translation>
+ </message>
+</context>
+<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1137,6 +1477,10 @@ Gate のつまみで エフェクトが自動停止するための”与えら
<source>Sync</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1579,6 +1923,18 @@ Gate のつまみで エフェクトが自動停止するための”与えら
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1641,12 +1997,24 @@ Gate のつまみで エフェクトが自動停止するための”与えら
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>InstrumentSoundShaping</name>
<message>
- <source>VOLUME</source>
- <translation type="unfinished">ボリウム</translation>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentSoundShaping</name>
+ <message>
+ <source>VOLUME</source>
+ <translation type="unfinished">ボリウム</translation>
</message>
<message>
<source>Volume</source>
@@ -1787,6 +2155,10 @@ Gate のつまみで エフェクトが自動停止するための”与えら
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1873,10 +2245,6 @@ Gate のつまみで エフェクトが自動停止するための”与えら
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished">くりっくすると、プリセットファイルに現在のチャンネルセッティングをセーブできます。後からプリセットブラウザ中でこのプリセットをダブルクリックするとこのプリセットをロードできます。</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished"></translation>
</message>
@@ -1949,15 +2317,19 @@ Gate のつまみで エフェクトが自動停止するための”与えら
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
+ <source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pitch range (semitones)</source>
+ <source>RANGE</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RANGE</source>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2006,6 +2378,13 @@ Gate のつまみで エフェクトが自動停止するための”与えら
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">%1 と %2 の間の新しい値を入力してください:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2368,10 +2747,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2391,6 +2766,22 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2436,22 +2827,22 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<name>MidiController</name>
<message>
<source>MIDI Controller</source>
- <translation type="unfinished">MIDI コントローラ</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>unnamed_midi_controller</source>
- <translation type="unfinished">名なし_MIDI_コントローラ</translation>
+ <translation type="unfinished">名称未設定_MIDI_コントローラー</translation>
</message>
</context>
<context>
<name>MidiImport</name>
<message>
<source>Setup incomplete</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">セットアップの未完了</translation>
</message>
<message>
<source>You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">設定ダイアログ (編集->設定)でデフォルトのサウンドフォントを設定していません。そのため、MIDIファイルをインポート後に音声が再生されません。一般的なMIDI サウンドフォントダウンロードして設定ダイアログにて設定を行い、その後で再試行してください。</translation>
</message>
<message>
<source>You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file.</source>
@@ -2462,7 +2853,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<name>MidiOss::setupWidget</name>
<message>
<source>DEVICE</source>
- <translation type="unfinished">デバイス</translation>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2477,19 +2868,19 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
</message>
<message>
<source>Input controller</source>
- <translation type="unfinished">インプット コントローラ</translation>
+ <translation type="unfinished">入力コントローラー</translation>
</message>
<message>
<source>Output controller</source>
- <translation type="unfinished">アウトプット コントローラ</translation>
+ <translation type="unfinished">出力コントローラー</translation>
</message>
<message>
<source>Fixed input velocity</source>
- <translation type="unfinished">入力ベロシティ固定</translation>
+ <translation type="unfinished">固定入力ベロシティ</translation>
</message>
<message>
<source>Fixed output velocity</source>
- <translation type="unfinished">出力ベロシティ固定</translation>
+ <translation type="unfinished">固定出力ベロシティ</translation>
</message>
<message>
<source>Output MIDI program</source>
@@ -2507,476 +2898,1488 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
+ <source>Osc 1 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
+ <source>Osc 1 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
+ <source>Osc 1 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
+ <source>Osc 1 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
+ <source>Osc 1 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
+ <source>Osc 1 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
+ <source>Osc 1 Pulse width</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
+ <source>Osc 1 Sync send on rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
+ <source>Osc 1 Sync send on fall</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
+ <source>Osc 2 Volume</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation type="unfinished">ほかのパッチを開く</translation>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation type="unfinished">ここをクリックして ほかのパッチファイルを開きます。ループとチューンの設定はリセットされません。</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished">ループ</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
- <translation type="unfinished">ループモード</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation type="unfinished">ここでループモードをON/OFfします。ループモードONなら、PatManはファイル中にあるループ情報をを使います。</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
- <translation type="unfinished">チューン</translation>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
- <translation type="unfinished">チューンモード</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation type="unfinished">ここでチューンモードをON/OFFします。チューンモードONなら、PatMan はノートの周波数にあうようにサンプルをチューンします。</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
- <translation type="unfinished">ファイルが選択されてません</translation>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
- <translation type="unfinished">パッチファイルを開く</translation>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation type="unfinished">パッチファイル (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
- <translation type="unfinished">ピーク コントローラ</translation>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
+ <source>Osc 3 Waveform 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
+ <source>Osc 3 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
+ <source>Osc 3 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
+ <source>LFO 1 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
+ <source>LFO 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
+ <source>LFO 1 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
+ <source>LFO 1 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
+ <source>Env 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
+ <source>Env 1 Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
+ <source>Env 1 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation type="unfinished">ベース ノート</translation>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
- <translation type="unfinished">プラグインが見つかりません</translation>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
- <translation type="unfinished">プラグイン "%1" は見つからないかロードできません。
-原因は "%2"です。</translation>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Error while loading plugin</source>
- <translation type="unfinished">プラグインロード中のエラー</translation>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
- <translation type="unfinished">プラグイン "%1" のロードに失敗!</translation>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
- <translation type="unfinished">WAV-ファイル (*.wav)</translation>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation type="unfinished">圧縮 OGG-ファイル (*.ogg)</translation>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
+ <source>Selected view</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
+ <source>Vol1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
+ <source>Vol1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eb</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D#</source>
- <comment>Note name</comment>
+ <source>Vol2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E</source>
- <comment>Note name</comment>
+ <source>Vol2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Fb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>F#</source>
- <comment>Note name</comment>
+ <source>Vol3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G</source>
- <comment>Note name</comment>
+ <source>Vol3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ab</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G#</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A</source>
- <comment>Note name</comment>
+ <source>Phs1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Bb</source>
- <comment>Note name</comment>
+ <source>Phs1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A#</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>B</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWidget</name>
<message>
- <source>Name: </source>
- <translation type="unfinished">名前</translation>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Maker: </source>
- <translation type="unfinished">製造元</translation>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Copyright: </source>
- <translation type="unfinished">コピーライト</translation>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Requires Real Time: </source>
- <translation type="unfinished">リアルタイムが必要: </translation>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
- <translation type="unfinished">はい</translation>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
- <translation type="unfinished">いいえ</translation>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Real Time Capable: </source>
- <translation type="unfinished">リアルタイム可能: </translation>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>In Place Broken: </source>
+ <source>Phs3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels In: </source>
- <translation type="unfinished">入力チャンネル</translation>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channels Out: </source>
- <translation type="unfinished">出力チャンネル</translation>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>File: </source>
- <translation type="unfinished">ファイル</translation>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleBuffer</name>
<message>
- <source>Open audio file</source>
+ <source>Pit1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
+ <source>Pit2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wave-Files (*.wav)</source>
+ <source>Pit2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>OGG-Files (*.ogg)</source>
+ <source>Pit2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DrumSynth-Files (*.ds)</source>
+ <source>Pit2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>FLAC-Files (*.flac)</source>
+ <source>Pit3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>SPEEX-Files (*.spx)</source>
+ <source>Pit3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
+ <source>Pit3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VOC-Files (*.voc)</source>
+ <source>Pit3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AIFF-Files (*.aif *.aiff)</source>
+ <source>PW1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AU-Files (*.au)</source>
+ <source>PW1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RAW-Files (*.raw)</source>
+ <source>PW1-LFO1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleTCOView</name>
<message>
- <source>double-click to select sample</source>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">マスターボリウム</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation type="unfinished">ほかのパッチを開く</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation type="unfinished">ここをクリックして ほかのパッチファイルを開きます。ループとチューンの設定はリセットされません。</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="unfinished">ループ</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished">ループモード</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation type="unfinished">ここでループモードをON/OFfします。ループモードONなら、PatManはファイル中にあるループ情報をを使います。</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation type="unfinished">チューン</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation type="unfinished">チューンモード</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation type="unfinished">ここでチューンモードをON/OFFします。チューンモードONなら、PatMan はノートの周波数にあうようにサンプルをチューンします。</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation type="unfinished">ファイルが選択されてません</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished">パッチファイルを開く</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished">パッチファイル (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation type="unfinished">ダプルクリックでこのパターンをピアノロールに開きます。
+マウスホイールでステップの音量をセットします。</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation type="unfinished">ピアノロールを開く</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation type="unfinished">すべてのノートをクリア</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation type="unfinished">名前をリセット</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation type="unfinished">名前変更</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation type="unfinished">ステップ追加</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation type="unfinished">ステップ除去</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished">ピーク コントローラ</translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>現在のパターンの再生/一時停止 (Space)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>現在のパターンの再生を停止 (Space)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>選択したノートの切り取り (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>選択したノートのコピー (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>クリップボードからノートを貼り付け (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>パターン上でダブルクリックして、パターンを開いてください!</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation type="unfinished">MIDI-デバイス/チャンネル-ピアノからノートを録音</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation type="unfinished">曲やBBトラックを再生中に MIDI-デバイス/チャンネル-ピアノからノートを録音</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>ドローモード (shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>消去モード (shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>選択モード (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>最後に使用したノート</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation type="unfinished">ここをクリックすると現在のパターンを再生します。これはパターン編集する際に便利です。パターンの最後で自動的にループします。</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation type="unfinished">ここをクリックすると、MIDIデバイスまたは対応するチャンネルウィンドウのバーチャルテストピアノからノートを現在のパターンに録音します。録音の際、再生したすべてのノートは現在のパターンに書き込まれます。書き込まれたノートは後から再生/編集できます。</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation type="unfinished">ここをクリックすると MIDIデバイスまたは対応するチャンネルウィンドウのバーチャルテストピアノから、ノートを現在のパターンに録音します。録音の際、再生したすべてのノートは現在のパターンに書き込まれます。曲またはBBトラックがバックグラウンドで演奏されます。</translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation type="unfinished">ここをクリックすると現在のパターンの録音再生を停止します。</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished">ここをクリックすると選択しているノートをクリップボードへ切り取ります。貼り付けボタンを押すと任意のパターンの任意の場所に切り取ったノートを貼り付けることができます。</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished">ここをクリックすると選択しているノートをクリップボードへコピーします。貼り付けボタンを押すと任意のパターンの任意の場所にコピーしたノートを貼り付けることができます。</translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished">ここをクリックするとクリップボード内のノートが最初に表示されている小節に貼り付けられます。</translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation type="unfinished">ノートをロック</translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished">ノートの音量</translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished">ノートのパンニング</translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished">ディチューン モード (Shift+T)</translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished">ここをクリックするとドローモードになります。ドローモードでは個々のノートを追加・リサイズ・移動することができます。普段このモードをデフォルトで使用します。'Shift+D' を押してもこのモードになります。このモードではCtrlを長押しすることで一時的に選択モードにすることができます。</translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished">ここをクリックすると消去モードになります。消去モードでは個々のノートを消去することができます。'Shift+E' を押してもこのモードにすることができます。</translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished">ここをクリックすると選択モードになります。選択モードでは個々のノートを選択することができます。また、ドローモード中にCtrlを長押しすることで一時的に選択モードを使用することができます。</translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">%1 と %2 の間の新しい値を入力してください:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished">ベース ノート</translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation type="unfinished">プラグインが見つかりません</translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation type="unfinished">プラグイン "%1" は見つからないかロードできません。
+原因は "%2"です。</translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation type="unfinished">プラグインロード中のエラー</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation type="unfinished">プラグイン "%1" のロードに失敗!</translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation type="unfinished">WAV-ファイル (*.wav)</translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation type="unfinished">圧縮 OGG-ファイル (*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished">名前</translation>
+ </message>
+ <message>
+ <source>Maker: </source>
+ <translation type="unfinished">製造元</translation>
+ </message>
+ <message>
+ <source>Copyright: </source>
+ <translation type="unfinished">コピーライト</translation>
+ </message>
+ <message>
+ <source>Requires Real Time: </source>
+ <translation type="unfinished">リアルタイムが必要: </translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished">はい</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished">いいえ</translation>
+ </message>
+ <message>
+ <source>Real Time Capable: </source>
+ <translation type="unfinished">リアルタイム可能: </translation>
+ </message>
+ <message>
+ <source>In Place Broken: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels In: </source>
+ <translation type="unfinished">入力チャンネル</translation>
+ </message>
+ <message>
+ <source>Channels Out: </source>
+ <translation type="unfinished">出力チャンネル</translation>
+ </message>
+ <message>
+ <source>File: </source>
+ <translation type="unfinished">ファイル:</translation>
+ </message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished">ファイル: %1</translation>
+ </message>
+</context>
+<context>
+ <name>SampleBuffer</name>
+ <message>
+ <source>Open audio file</source>
+ <translation type="unfinished">オーディオファイルを開く</translation>
+ </message>
+ <message>
+ <source>Wave-Files (*.wav)</source>
+ <translation type="unfinished">WAV ファイル (*.wav)</translation>
+ </message>
+ <message>
+ <source>OGG-Files (*.ogg)</source>
+ <translation type="unfinished">OGG ファイル (*.ogg)</translation>
+ </message>
+ <message>
+ <source>DrumSynth-Files (*.ds)</source>
+ <translation type="unfinished">DrumSynth ファイル (*.ds)</translation>
+ </message>
+ <message>
+ <source>FLAC-Files (*.flac)</source>
+ <translation type="unfinished">FLAC ファイル (*.flac)</translation>
+ </message>
+ <message>
+ <source>SPEEX-Files (*.spx)</source>
+ <translation type="unfinished">SPEEX ファイル (*.spx)</translation>
+ </message>
+ <message>
+ <source>VOC-Files (*.voc)</source>
+ <translation type="unfinished">VOC ファイル (*.voc)</translation>
+ </message>
+ <message>
+ <source>AIFF-Files (*.aif *.aiff)</source>
+ <translation type="unfinished">AIFF ファイル (*.aif *.aiff)</translation>
+ </message>
+ <message>
+ <source>AU-Files (*.au)</source>
+ <translation type="unfinished">AU ファイル (*.au)</translation>
+ </message>
+ <message>
+ <source>RAW-Files (*.raw)</source>
+ <translation type="unfinished">RAW ファイル (*.raw)</translation>
+ </message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished">すべてのオーディオファイル (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTCOView</name>
+ <message>
+ <source>double-click to select sample</source>
<translation type="unfinished">ダブルクリックでサンプル選択</translation>
</message>
<message>
<source>Delete (middle mousebutton)</source>
+ <translation type="unfinished">削除 (マウス中ボタン)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">切り取り</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">コピー</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">貼り付け</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished">ミュート/ミュート解除(<Ctrl> + 中ボタンクリック)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">録音をセット/クリア</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">Sample track</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">音量</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished">トラック音量</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished">チャンネル音量:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">カット</translation>
+ <source>Play song (Space)</source>
+ <translation type="unfinished">曲を再生 (Space)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation type="unfinished">ここをクリックすると曲全体を再生します。ソングポジションマーカー(緑色)の位置から再生開始します。再生中にマーカーを移動させることもできます。</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation type="unfinished">曲を停止 (Space)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation type="unfinished">ここをクリックすると曲の再生を停止します。再生後、ソングポジションマーカーは曲の最初にセットされます。</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation type="unfinished">Beat/Bassline を追加</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation type="unfinished">Sample-Track を追加</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation type="unfinished">ファイルを開くことができませんでした</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation type="unfinished">ファイルに書き込むことができませんでした</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation type="unfinished">Automation-Track を追加</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation type="unfinished">ドローモード</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation type="unfinished">編集モード (選択と移動)</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation type="unfinished">オーディオデバイスからサンプルを録音</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation type="unfinished">曲またはBBトラックを再生中にオーディオデバイスからサンプルを録音</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished">ファイル %1 を開くことができませんでした。おそらくこのファイルの読み込み権限がありません。
+ファイルが読み込み可能か確認してから再度読み込んでください。</translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished">ファイルの内部エラー</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished">ファイル %1 は内部エラーを含んでいるか、読み込むことができません。</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished">テンポ</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished">テンポ/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">曲のテンポ</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished">曲のテンポは分毎のビート数(BPM)で指定します。曲のテンポを変更する場合はこの値を変更してください。各小節は4つのビートをもちますから、BPMであらわされるテンポは 一分間に いくつの小節(テンポ/4) が演奏される(あるいは4分間にいくつの小節が演奏されるか)かをきめます。</translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished">ハイクオリティモード</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">マスター音量</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished">マスター音量</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation type="unfinished">マスターピッチ</translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation type="unfinished">マスター ピッチ</translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">コピー</translation>
+ <source>Value: %1%</source>
+ <translation type="unfinished">音量: %1%</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">ペースト</translation>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished">音量: %1 半音</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
<translation type="unfinished"></translation>
</message>
- <message>
- <source>Set/clear record</source>
- <translation type="unfinished">録音をセット/クリア</translation>
- </message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">Sample track</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">ボリウム</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation type="unfinished">トラック ボリウム</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">チャンネルボリウム</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VOL</source>
+ <source>Channel mode</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2984,7 +4387,7 @@ Reason: "%2"</source>
<name>TempoSyncKnob</name>
<message>
<source>Tempo Sync</source>
- <translation type="unfinished">テンポ同期</translation>
+ <translation type="unfinished">テンポの同期</translation>
</message>
<message>
<source>No Sync</source>
@@ -2992,7 +4395,7 @@ Reason: "%2"</source>
</message>
<message>
<source>Eight beats</source>
- <translation type="unfinished">エイトビート</translation>
+ <translation type="unfinished">8ビート</translation>
</message>
<message>
<source>Whole note</source>
@@ -3020,19 +4423,19 @@ Reason: "%2"</source>
</message>
<message>
<source>Custom...</source>
- <translation type="unfinished">カスタム</translation>
+ <translation>カスタム...</translation>
</message>
<message>
<source>&Help</source>
- <translation type="unfinished">ヘルプ(&H)</translation>
+ <translation>ヘルプ(&H)</translation>
</message>
<message>
<source>Custom </source>
- <translation type="unfinished">カスタム</translation>
+ <translation>カスタム</translation>
</message>
<message>
<source>Synced to Eight Beats</source>
- <translation type="unfinished">エイトビートに同期</translation>
+ <translation type="unfinished">8ビートに同期</translation>
</message>
<message>
<source>Synced to Whole Note</source>
@@ -3070,27 +4473,27 @@ Reason: "%2"</source>
<name>TrackContainer</name>
<message>
<source>Couldn't import file</source>
- <translation type="unfinished">ファイルをインポートできません</translation>
+ <translation type="unfinished">ファイルをインポートすることができませんでした</translation>
</message>
<message>
<source>Couldn't find a filter for importing file %1.
You should convert this file into a format supported by LMMS using another software.</source>
- <translation type="unfinished">ファイル %1をインポート中フィルターが見つかりませんでした。
-ほかのソフトウェアで、このファイルをLMMSでサポートしてるフォーマットに変換してください。</translation>
+ <translation type="unfinished">インポート中のファイル %1のフィルターが見つかりませんでした。
+他のソフトウェアで、このファイルをLMMSがサポートしてるフォーマットに変換してください。</translation>
</message>
<message>
<source>Couldn't open file</source>
- <translation type="unfinished">ファイルをオープンできません。</translation>
+ <translation type="unfinished">ファイルを開くことができませんでした</translation>
</message>
<message>
<source>Couldn't open file %1 for reading.
Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
- <translation type="unfinished">ファイル %1 を読み込み用にオープンできません。
-ファイルとファイルの入ってるディレクトリが読み込み可能かチェックしてもう一度読み込んでください。</translation>
+ <translation type="unfinished">ファイル %1 を読み込み用に開くことができませんでした。
+ファイルとファイルのディレクトリが読み込み可能かチェックしてから再度読み込んでください!</translation>
</message>
<message>
<source>Loading project...</source>
- <translation type="unfinished">プロジェクトロード中</translation>
+ <translation type="unfinished">プロジェクトをロードしています...</translation>
</message>
<message>
<source>Cancel</source>
@@ -3102,11 +4505,11 @@ Please make sure you have read-permission to the file and the directory containi
</message>
<message>
<source>Importing MIDI-file...</source>
- <translation type="unfinished">MIDI-ファイルをインポート中...</translation>
+ <translation type="unfinished">MIDI-ファイルをインポートしています...</translation>
</message>
<message>
<source>Importing FLP-file...</source>
- <translation type="unfinished">FLP-ファイルをインポート中...</translation>
+ <translation type="unfinished">FLP-ファイルをインポートしています...</translation>
</message>
</context>
<context>
@@ -3278,19 +4681,19 @@ Please make sure you have read-permission to the file and the directory containi
<name>VestigeInstrumentView</name>
<message>
<source>Open other VST-plugin</source>
- <translation type="unfinished">ほかの VST-プラグインをオープン</translation>
+ <translation type="unfinished">他の VST-プラグインを開く</translation>
</message>
<message>
<source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
- <translation type="unfinished">ほかの VST-プラグインをオープンしたいならクリック。このボタンをクリックするとファイルオープンダイアログが現れてファイルを選べます。</translation>
+ <translation type="unfinished">他の VST-プラグインを開くときはここをクリックします。クリックすると「ファイルを開く」ダイアログが表示され、ファイルを選択することができます。</translation>
</message>
<message>
<source>Show/hide GUI</source>
- <translation type="unfinished">GUIの表示/非表示</translation>
+ <translation type="unfinished">GUIを表示/非表示</translation>
</message>
<message>
<source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
- <translation type="unfinished">ここをクリックすると VST-プラグインのグラフィカルユーザーインターフェース(GUI)が表示されたり非表示になったりします。</translation>
+ <translation type="unfinished">ここをクリックするとVST-プラグインのグラフィカルユーザーインターフェース(GUI)の表示/非表示を切り替えます。</translation>
</message>
<message>
<source>Turn off all notes</source>
@@ -3337,147 +4740,395 @@ Please make sure you have read-permission to the file and the directory containi
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished">プラグインをロード中</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A1-B2 Crosstalk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A2-A1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynView</name>
<message>
- <source>Next (+)</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstEffectControlDialog</name>
<message>
- <source>Show/hide</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Modulate amplitude of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
- <translation type="unfinished"></translation>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished">グラフの上でマウスドラッグしてここに波形を描きます</translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
- <translation type="unfinished"></translation>
+ <source>Load waveform</source>
+ <translation type="unfinished">波形の読み込み</translation>
</message>
<message>
- <source>Save preset</source>
+ <source>Click to load a waveform from a sample file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Phase left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Click to shift phase by -15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation type="unfinished">プラグインをロード中</translation>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation type="unfinished">VST-プラグインをロードする間お待ちください</translation>
+ <source>Normalize</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation type="unfinished">VST-プラグインのロード失敗</translation>
+ <source>Click to normalize</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation type="unfinished">VST-plugin %1 がいくつかの理由でロードできませんでした。
-もしそのVSTがLinuxのほかのVST-ソフトウェアで動くなら LMMS の開発者に連絡してください。</translation>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
+ <source>Triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
+ <source>Square wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3520,7 +5171,7 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<name>ZynAddSubFxView</name>
<message>
<source>Show GUI</source>
- <translation type="unfinished"></translation>
+ <translation>GUI を表示</translation>
</message>
<message>
<source>Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX.</source>
@@ -3606,53 +5257,31 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<translation type="unfinished">サンプル逆回転</translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished">ループ</translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation type="unfinished"></translation>
- </message>
<message>
- <source>GAIN</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Gain:</source>
+ <source>Loopback point</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
- <translation type="unfinished"></translation>
+ <source>Loop mode</source>
+ <translation type="unfinished">ループモード</translation>
</message>
<message>
- <source>Ratio:</source>
+ <source>Interpolation mode</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
+ <source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Linear</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
+ <source>Sinc</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3660,11 +5289,11 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<name>bbEditor</name>
<message>
<source>Beat+Bassline Editor</source>
- <translation type="unfinished">ビート+ベースライン エディタ</translation>
+ <translation>Beat+Bassline-Editor</translation>
</message>
<message>
<source>Play/pause current beat/bassline (Space)</source>
- <translation type="unfinished">現在の beat/bassline を 再生/ポーズ (Space)</translation>
+ <translation type="unfinished">現在の beat/bassline を 再生/一時停止 (Space)</translation>
</message>
<message>
<source>Add beat/bassline</source>
@@ -3699,7 +5328,7 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<name>bbTCOView</name>
<message>
<source>Open in Beat+Bassline-Editor</source>
- <translation type="unfinished">ビート+ベースライン-エディタを開く</translation>
+ <translation>Beat+Bassline-Editor を開く</translation>
</message>
<message>
<source>Reset name</source>
@@ -3713,6 +5342,10 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<source>Change color</source>
<translation type="unfinished">色を変更</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3740,19 +5373,19 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
<message>
<source>Sine wave</source>
- <translation type="unfinished"></translation>
+ <translation>サイン波</translation>
</message>
<message>
<source>Triangle wave</source>
- <translation type="unfinished"></translation>
+ <translation>三角波</translation>
</message>
<message>
<source>Saw wave</source>
- <translation type="unfinished"></translation>
+ <translation>のこぎり波</translation>
</message>
<message>
<source>Square wave</source>
- <translation type="unfinished"></translation>
+ <translation>矩形波</translation>
</message>
<message>
<source>White noise wave</source>
@@ -3796,7 +5429,7 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
<message>
<source>Click here for a square-wave.</source>
- <translation type="unfinished">クリックすると方形波</translation>
+ <translation type="unfinished">クリックすると矩形波</translation>
</message>
<message>
<source>Click here for white-noise.</source>
@@ -3808,6 +5441,120 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation>入力ゲイン:</translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation>出力ゲイン:</translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation>波形をリセット</translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation>入力ゲイン</translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation>出力ゲイン</translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3844,66 +5591,60 @@ Please make sure you have write-permission to the file and the directory contain
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation type="unfinished"></translation>
+ <source>Graph</source>
+ <translation type="unfinished">グラフ</translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Start frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>End frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Gain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation type="unfinished">グラフ</translation>
+ <source>Envelope Slope</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrument</name>
<message>
- <source>Start frequency</source>
+ <source>Noise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency</source>
+ <source>Click</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Frequency Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
- <translation type="unfinished">説明</translation>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>End to note</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3918,15 +5659,35 @@ Please make sure you have write-permission to the file and the directory contain
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
+ <source>Gain:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
+ <source>Frequency Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion End:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4182,36 +5943,68 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for a square-wave with a rounded end.</source>
- <translation type="unfinished">クリックで尻尾がまるまった方形波</translation>
+ <source>Click here for a square-wave with a rounded end.</source>
+ <translation type="unfinished">クリックで尻尾がまるまった方形波</translation>
+ </message>
+ <message>
+ <source>Moog wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a moog-like wave.</source>
+ <translation type="unfinished">クリックで Moog みたいな波形</translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click for a sine-wave.</source>
+ <translation type="unfinished">クリックでサイン波</translation>
+ </message>
+ <message>
+ <source>White noise wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for an exponential wave.</source>
+ <translation type="unfinished">クリックで指数波形</translation>
+ </message>
+ <message>
+ <source>Click here for white-noise.</source>
+ <translation type="unfinished">クリックでホワイトノイズ</translation>
+ </message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Moog wave</source>
+ <source>Click here for bandlimited saw wave.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for a moog-like wave.</source>
- <translation type="unfinished">クリックで Moog みたいな波形</translation>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sine wave</source>
+ <source>Click here for bandlimited square wave.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click for a sine-wave.</source>
- <translation type="unfinished">クリックでサイン波</translation>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>White noise wave</source>
+ <source>Click here for bandlimited triangle wave.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for an exponential wave.</source>
- <translation type="unfinished">クリックで指数波形</translation>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for white-noise.</source>
- <translation type="unfinished">クリックでホワイトノイズ</translation>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4808,11 +6601,27 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
+ <source>cents</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5083,337 +6892,163 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation type="unfinished">パターンをフリーズできません</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation type="unfinished">プレイモードになってるのでパターンは現在フリーズできません。プレイモードを停止して再試行してください。</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation type="unfinished">フリーズ中のパターン</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="unfinished">キャンセル</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation type="unfinished">ダプルクリックでこのパターンをピアノロールに開きます。
-マウスホイールでステップのボリウムをセットします。</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation type="unfinished">ピアノロールを開く</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation type="unfinished">すべてのノートをクリア</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation type="unfinished">名前をリセット</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation type="unfinished">名前変更</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation type="unfinished">再フリーズ</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation type="unfinished">フリーズ</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation type="unfinished">フリーズ解除</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation type="unfinished">ステップ追加</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation type="unfinished">ステップ除去</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
+ <name>pluginBrowser</name>
<message>
- <source>Play/pause current pattern (Space)</source>
- <translation type="unfinished">現在のパターンの再生/ポーズ (Space)</translation>
+ <source>no description</source>
+ <translation type="unfinished">説明なし</translation>
</message>
<message>
- <source>Stop playing of current pattern (Space)</source>
- <translation type="unfinished">現在のパターンの演奏停止 (Space)</translation>
+ <source>Instrument plugins</source>
+ <translation type="unfinished">Instrument Plugins</translation>
</message>
<message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation type="unfinished">選択ノートの切り取り (Ctrl+X)</translation>
+ <source>Incomplete monophonic imitation tb303</source>
+ <translation type="unfinished">不完全なモノフォニック イミテーション tb303</translation>
</message>
<message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation type="unfinished">選択ノートのコピー (Ctrl+C)</translation>
+ <source>Plugin for freely manipulating stereo output</source>
+ <translation type="unfinished">ステレオ出力を自由に操作するプラグイン</translation>
</message>
<message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation type="unfinished">クリップボードからノートをペースト (Ctrl+V)</translation>
+ <source>Plugin for controlling knobs with sound peaks</source>
+ <translation type="unfinished">サウンドのピークをつまみでコントロールするプラグイン</translation>
</message>
<message>
- <source>Piano-Roll - no pattern</source>
- <translation type="unfinished">ピアノロール - パターンなし</translation>
+ <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <translation type="unfinished">ステレオ入力ファイルのセパレーションを強調するプラグイン</translation>
</message>
<message>
- <source>Piano-Roll - %1</source>
- <translation type="unfinished">ピアノロール - %1</translation>
+ <source>List installed LADSPA plugins</source>
+ <translation type="unfinished">インストールされている LADSPA プラグインのリスト</translation>
</message>
<message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation type="unfinished">”パターン”!の上でダブルクリックして”パターン”を開いてください</translation>
+ <source>Filter for importing FL Studio projects into LMMS</source>
+ <translation type="unfinished">FL Studio プロジェクトを LMMS にインポートするためのフィルター</translation>
</message>
<message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation type="unfinished">MIDI-デバイス/チャンネル-ピアノからノートを録音</translation>
+ <source>GUS-compatible patch instrument</source>
+ <translation type="unfinished">GUS互換パッチのインストゥルメント</translation>
</message>
<message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation type="unfinished">曲やBBトラックを再生中に MIDI-デバイス/チャンネル-ピアノからノートを録音</translation>
+ <source>Additive Synthesizer for organ-like sounds</source>
+ <translation type="unfinished">オルガン風サウンドのアディティブ シンセサイザー</translation>
</message>
<message>
- <source>Draw mode (Shift+D)</source>
- <translation type="unfinished">ドローモード (shift+D)</translation>
+ <source>Tuneful things to bang on</source>
+ <translation type="unfinished">打楽器風の音色を奏でるインストゥルメント</translation>
</message>
<message>
- <source>Erase mode (Shift+E)</source>
- <translation type="unfinished">消去 モード (shift+E)</translation>
+ <source>VST-host for using VST(i)-plugins within LMMS</source>
+ <translation type="unfinished">VST(i)プラグインを LMMS で使用するためのVSTホスト</translation>
</message>
<message>
- <source>Select mode (Shift+S)</source>
- <translation type="unfinished">選択モード (Shift+S)</translation>
+ <source>Vibrating string modeler</source>
+ <translation type="unfinished">バイブレーティング ストリング モジュレーター</translation>
</message>
<message>
- <source>Last note</source>
- <translation type="unfinished">最後のノート</translation>
+ <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
+ <translation type="unfinished">任意の LADSPA エフェクトを LMMS で使うためのプラグイン</translation>
</message>
<message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation type="unfinished">クリックすると現在のパターンを再生。これはパターン編集中に便利。パターンの最後で自動的にループします。</translation>
+ <source>Filter for importing MIDI-files into LMMS</source>
+ <translation type="unfinished">MIDI ファイルを LMMS にインポートするためのフィルター</translation>
</message>
<message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation type="unfinished">クリックすると MIDIデバイスまたは対応するチャンネルウインドウのバーチャルテストピアノからのノートを現在のパターンに録音します。録音の際再生したすべてのノートは現在のパターンに書き込まれます。書き込まれたノートは後から再生/編集できます。</translation>
+ <source>Instrument browser</source>
+ <translation type="unfinished">Instrument Browser</translation>
</message>
<message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation type="unfinished">クリックすると MIDIデバイスまたは対応するチャンネルウインドウのバーチャルテストピアノからのノートを現在のパターンに録音します。録音の際再生したすべてのノートは現在のパターンに書き込まれます。曲またはBBトラックがバックグラウンドで演奏されます。</translation>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <translation type="unfinished">インストゥルメントをSong-EditorやBeat+Bassline Editorまたは存在する Instrument Trackにドラッグしてください。</translation>
</message>
<message>
- <source>Click here to stop playback of current pattern.</source>
- <translation type="unfinished">クリックすると 現在のパターンのプレイバックを停止します。</translation>
+ <source>Emulation of the MOS6581 and MOS8580 SID.
+This chip was used in the Commodore 64 computer.</source>
+ <translation type="unfinished">MOS6581やMOS8580 SIDのエミュレーション。
+このチップはCommodore 64 computerで採用されていました。</translation>
</message>
<message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished">クリックすると選択しているノートがクリップボードにカットされます。ペーストボタンを押すと任意のパターンのどこにでもカットしたノートをペーストできます。</translation>
+ <source>Player for SoundFont files</source>
+ <translation type="unfinished">サウンドフォント ファイル用プレイヤー</translation>
</message>
<message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished">クリックすると選択しているノートがクリップボードにコピーされます。ペーストボタンを押すと任意のパターンのどこにでもコピーしたノートをペーストできます。</translation>
+ <source>Emulation of GameBoy (TM) APU</source>
+ <translation type="unfinished">GameBoy (TM) APUのエミュレーション</translation>
</message>
<message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation type="unfinished">クリックするとクリップボードの中のノートが最初の表示されてる小節にペーストされます。</translation>
+ <source>Customizable wavetable synthesizer</source>
+ <translation type="unfinished">カスタマイズ可能なウェーブテーブルシンセサイザー</translation>
</message>
<message>
- <source>Note lock</source>
- <translation type="unfinished">ノート ロック</translation>
+ <source>Embedded ZynAddSubFX</source>
+ <translation type="unfinished">埋め込み ZynAddSubFX</translation>
</message>
<message>
- <source>Note Volume</source>
+ <source>2-operator FM Synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Note Panning</source>
+ <source>Filter for importing Hydrogen files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Detune mode (Shift+T)</source>
+ <source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished">様々な方法でモジュレートできる3つのパワフルなオシレータ群</translation>
</message>
<message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <source>A native amplifier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <source>Carla Rack Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark/unmark current semitone</source>
+ <source>4-oscillator modulatable wavetable synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current scale</source>
+ <source>plugin for waveshaping</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current chord</source>
+ <source>Boost your bass the fast and simple way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Unmark all</source>
+ <source>Versatile drum synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No scale</source>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No chord</source>
+ <source>plugin for processing dynamics in a flexible way</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>pluginBrowser</name>
- <message>
- <source>no description</source>
- <translation type="unfinished">記述なし</translation>
- </message>
- <message>
- <source>Instrument plugins</source>
- <translation type="unfinished">楽器プラグイン</translation>
- </message>
- <message>
- <source>Incomplete monophonic imitation tb303</source>
- <translation type="unfinished">tb303の不完全なモノフォニックイミテーション</translation>
- </message>
- <message>
- <source>Plugin for freely manipulating stereo output</source>
- <translation type="unfinished">ステレオ出力を自由にいじるプラグイン</translation>
- </message>
- <message>
- <source>Plugin for controlling knobs with sound peaks</source>
- <translation type="unfinished">サウンドのピークでつまみをコントロールするプラグイン</translation>
- </message>
- <message>
- <source>Plugin for enhancing stereo separation of a stereo input file</source>
- <translation type="unfinished">ステレオ入力ファイルのセパレーションを強調するプラグイン</translation>
- </message>
- <message>
- <source>List installed LADSPA plugins</source>
- <translation type="unfinished">インストールされてる LADSPA プラグインのリスト</translation>
- </message>
- <message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation type="unfinished">いくつかの方法でモジュレートできるフリーでパワフルなオシレータ群</translation>
- </message>
- <message>
- <source>Filter for importing FL Studio projects into LMMS</source>
- <translation type="unfinished">FL Studio のプロジェクトをLMMSにインポートするフィルター</translation>
- </message>
- <message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation type="unfinished">versatile キックとバスドラムのシンセサイザー</translation>
- </message>
- <message>
- <source>GUS-compatible patch instrument</source>
- <translation type="unfinished">GUS互換パッチの楽器</translation>
- </message>
- <message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation type="unfinished">任意のVSTエフェクトをLMMSの中で使うためのプラグイン</translation>
- </message>
- <message>
- <source>Additive Synthesizer for organ-like sounds</source>
- <translation type="unfinished">オルガンみたいなサウンドのための付加的シンセサイザー</translation>
- </message>
- <message>
- <source>plugin for boosting bass</source>
- <translation type="unfinished">バスをブースとするプラグイン</translation>
- </message>
- <message>
- <source>Tuneful things to bang on</source>
- <translation type="unfinished">どんどんたたく音楽的な音をだすもの</translation>
- </message>
- <message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation type="unfinished">楽器トラックでサンプル(ドラムとか)を使うためのいろいろ設定できる単純なサンプラ</translation>
- </message>
- <message>
- <source>VST-host for using VST(i)-plugins within LMMS</source>
- <translation type="unfinished"> VST(i)プラグインをLMMSでつかうためのVSTホスト</translation>
- </message>
- <message>
- <source>Vibrating string modeler</source>
- <translation type="unfinished">バイブレーティングストリングモジュレータ</translation>
- </message>
- <message>
- <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
- <translation type="unfinished">任意のLADSPAエフェクトをLMMSで使うためのプラグイン</translation>
- </message>
- <message>
- <source>Filter for importing MIDI-files into LMMS</source>
- <translation type="unfinished">MIDIファイルをLMMSにインポートするためのフィルタ</translation>
- </message>
- <message>
- <source>Instrument browser</source>
- <translation type="unfinished">楽器ブラウザ</translation>
- </message>
- <message>
- <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
- <translation type="unfinished">楽器を ソングエディタまたはビート+ベースラインエディタまたは存在する楽器トラックにドラッグできます。</translation>
- </message>
- <message>
- <source>Emulation of the MOS6581 and MOS8580 SID.
-This chip was used in the Commodore 64 computer.</source>
- <translation type="unfinished">MOS6581 and MOS8580 SIDのエミュレーション。
-このチップはコモドール64コンピュータで採用されていた。</translation>
- </message>
- <message>
- <source>Player for SoundFont files</source>
- <translation type="unfinished">サウンドフォントファイルのプレイヤー</translation>
- </message>
- <message>
- <source>Emulation of GameBoy (TM) APU</source>
- <translation type="unfinished">GameBoy (TM) APUのエミュレーション</translation>
- </message>
- <message>
- <source>Customizable wavetable synthesizer</source>
- <translation type="unfinished">カストマイズ可能なウエーブテーブルシンセサイザー</translation>
- </message>
<message>
- <source>Embedded ZynAddSubFX</source>
+ <source>Carla Patchbay Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>2-operator FM Synth</source>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing Hydrogen files into LMMS</source>
+ <source>Graphical spectrum analyzer plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS port of sfxr</source>
+ <source>A NES-like synthesizer</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5421,19 +7056,19 @@ This chip was used in the Commodore 64 computer.</source>
<name>projectNotes</name>
<message>
<source>Project notes</source>
- <translation type="unfinished">プロジェクトノート</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>Put down your project notes here.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ここにプロジェクトに関するメモを記入してください。</translation>
</message>
<message>
<source>Edit Actions</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">編集機能</translation>
</message>
<message>
<source>&Undo</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">元に戻す(&U)</translation>
</message>
<message>
<source>Ctrl+Z</source>
@@ -5441,7 +7076,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Redo</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">やり直し(&R)</translation>
</message>
<message>
<source>Ctrl+Y</source>
@@ -5449,7 +7084,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Copy</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">コピー(&C)</translation>
</message>
<message>
<source>Ctrl+C</source>
@@ -5457,7 +7092,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>Cu&t</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">切り取り(&t)</translation>
</message>
<message>
<source>Ctrl+X</source>
@@ -5465,7 +7100,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Paste</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">貼り付け(&P)</translation>
</message>
<message>
<source>Ctrl+V</source>
@@ -5473,11 +7108,11 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>Format Actions</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">フォーマット機能</translation>
</message>
<message>
<source>&Bold</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">太字(&B)</translation>
</message>
<message>
<source>Ctrl+B</source>
@@ -5485,7 +7120,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Italic</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">斜体(&I)</translation>
</message>
<message>
<source>Ctrl+I</source>
@@ -5493,7 +7128,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Underline</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">下線(&U)</translation>
</message>
<message>
<source>Ctrl+U</source>
@@ -5501,7 +7136,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Left</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">左揃え(&L)</translation>
</message>
<message>
<source>Ctrl+L</source>
@@ -5509,7 +7144,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>C&enter</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">中央揃え(&e)</translation>
</message>
<message>
<source>Ctrl+E</source>
@@ -5517,7 +7152,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Right</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">右揃え(&R)</translation>
</message>
<message>
<source>Ctrl+R</source>
@@ -5525,7 +7160,7 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Justify</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">両端揃え(&J)</translation>
</message>
<message>
<source>Ctrl+J</source>
@@ -5533,29 +7168,29 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>&Color...</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">文字の色(&C)...</translation>
</message>
</context>
<context>
<name>renameDialog</name>
<message>
<source>Rename...</source>
- <translation type="unfinished">リネーム</translation>
+ <translation type="unfinished">名前の変更...</translation>
</message>
</context>
<context>
<name>setupDialog</name>
<message>
<source>Setup LMMS</source>
- <translation type="unfinished">LMMS設定</translation>
+ <translation type="unfinished">LMMS 設定</translation>
</message>
<message>
<source>General settings</source>
- <translation type="unfinished">設定を生成</translation>
+ <translation type="unfinished">一般設定</translation>
</message>
<message>
<source>BUFFER SIZE</source>
- <translation type="unfinished">バッファサイズ</translation>
+ <translation type="unfinished">バッファ サイズ</translation>
</message>
<message>
<source>Reset to default-value</source>
@@ -5567,43 +7202,43 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>Enable tooltips</source>
- <translation type="unfinished">ツールチップ ON</translation>
+ <translation type="unfinished">ツールチップを有効にする</translation>
</message>
<message>
<source>Show restart warning after changing settings</source>
- <translation type="unfinished">設定変更後 "リスタート警告" を表示</translation>
+ <translation type="unfinished">設定変更後に「再起動警告」を表示する</translation>
</message>
<message>
<source>Display volume as dBV </source>
- <translation type="unfinished">ボリウムを dBV で表示</translation>
+ <translation type="unfinished">音量を dBV で表示する</translation>
</message>
<message>
<source>Compress project files per default</source>
- <translation type="unfinished">プロジェクトファイルの圧縮をデフォルトに</translation>
+ <translation type="unfinished">プロジェクト ファイルの圧縮をデフォルトにする</translation>
</message>
<message>
<source>HQ-mode for output audio-device</source>
- <translation type="unfinished">出力オーディオデバイスを HQ-モードに</translation>
+ <translation type="unfinished">出力オーディオデバイスを高品質モードにする</translation>
</message>
<message>
<source>LMMS working directory</source>
- <translation type="unfinished">LMMSの作業ディレクトリー</translation>
+ <translation type="unfinished">LMMS作業ディレクトリー</translation>
</message>
<message>
<source>VST-plugin directory</source>
- <translation type="unfinished">VST-プラグインディレクトリ</translation>
+ <translation type="unfinished">VST-プラグイン ディレクトリー</translation>
</message>
<message>
<source>Artwork directory</source>
- <translation type="unfinished">アートワークのディレクトリ</translation>
+ <translation type="unfinished">アートワーク ディレクトリー</translation>
</message>
<message>
<source>FL Studio installation directory</source>
- <translation type="unfinished">FL Studio のディレクトリ</translation>
+ <translation type="unfinished">FL Studio のディレクトリー</translation>
</message>
<message>
<source>STK rawwave directory</source>
- <translation type="unfinished">STK rawwave のディレクトリ</translation>
+ <translation type="unfinished">STK rawwave のディレクトリー</translation>
</message>
<message>
<source>Performance settings</source>
@@ -5611,15 +7246,15 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>UI effects vs. performance</source>
- <translation type="unfinished">UIエフェクト vs. パフォーマンス</translation>
+ <translation type="unfinished">UI エフェクト vs. パフォーマンス</translation>
</message>
<message>
<source>Audio settings</source>
- <translation type="unfinished">自動セッティング</translation>
+ <translation type="unfinished">オーディオ設定</translation>
</message>
<message>
<source>AUDIO INTERFACE</source>
- <translation type="unfinished">オーディオインターフェース</translation>
+ <translation type="unfinished">オーディオ インターフェース</translation>
</message>
<message>
<source>MIDI settings</source>
@@ -5635,56 +7270,57 @@ This chip was used in the Commodore 64 computer.</source>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">キャンセル</translation>
+ <translation>キャンセル</translation>
</message>
<message>
<source>Restart LMMS</source>
- <translation type="unfinished">LMMS 再起動</translation>
+ <translation type="unfinished">LMMS の再起動</translation>
</message>
<message>
<source>Please note that most changes won't take effect until you restart LMMS!</source>
- <translation type="unfinished">LMMS を再起動するまで たいていの変更は有効になりません</translation>
+ <translation type="unfinished">変更した設定の大部分は、LMMSの再起動後に有効になります!</translation>
</message>
<message>
<source>Frames: %1
Latency: %2 ms</source>
- <translation type="unfinished">フレーム: %1レイテンシイ: %2 ms</translation>
+ <translation type="unfinished">フレーム: %1
+レイテンシー: %2 ms</translation>
</message>
<message>
<source>Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel.</source>
- <translation type="unfinished">ここで LMMS で使用する内部バッファサイズを指定します。値が小さいとレイテンシーが小さくなりますが小さすぎると古いコンピュータやリアルタイムカーネルじゃないシステムではひどい音やパフォーマンスの低下をひきおこします。</translation>
+ <translation type="unfinished">ここではLMMSで使用する内部バッファサイズを指定します。値が小さいとレイテンシーが小さくなるだけでなく、特に古いコンピュータやリアルタイムカーネルではないシステムでは酷い音やパフォーマンスの低下を引き起こします。</translation>
</message>
<message>
<source>Choose LMMS working directory</source>
- <translation type="unfinished">LMMSの作業ディレクトリを選びます</translation>
+ <translation type="unfinished">LMMSの作業ディレクトリーを選択してください</translation>
</message>
<message>
<source>Choose your VST-plugin directory</source>
- <translation type="unfinished">VSTプラグインディレクトリを選びます</translation>
+ <translation type="unfinished">VSTプラグインディレクトリーを選択してください</translation>
</message>
<message>
<source>Choose artwork-theme directory</source>
- <translation type="unfinished">アートワークテーマディレクトリを選びます</translation>
+ <translation type="unfinished">アートワークテーマディレクトリーを選択してください</translation>
</message>
<message>
<source>Choose FL Studio installation directory</source>
- <translation type="unfinished">FL Studioのディレクトリを選びます</translation>
+ <translation type="unfinished">FL Studioがインストールされているディレクトリーを選択してください</translation>
</message>
<message>
<source>Choose LADSPA plugin directory</source>
- <translation type="unfinished">LADSPAプラグインのディレクトリを選びます</translation>
+ <translation type="unfinished">LADSPAプラグインのディレクトリーを選択してください</translation>
</message>
<message>
<source>Choose STK rawwave directory</source>
- <translation type="unfinished">STK rawwave のディレクトリを選びます</translation>
+ <translation type="unfinished">STK rawwave のディレクトリーを選択してください</translation>
</message>
<message>
<source>Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface.</source>
- <translation type="unfinished">ここで 優先するオーディオインターフェースを選びます。コンパイル時のシステム設定によってALSA,JACK, OSS 等が選べます。下に選択したオーディオインターフェースのコントロール用のボックスがあります。</translation>
+ <translation type="unfinished">ここでは優先するオーディオインターフェースを選択することができます。コンパイル時のシステム設定によってALSA,JACK, OSS 等を選択することができます。選択したオーディオインターフェースのコントロール設定項目は下部にあります。</translation>
</message>
<message>
<source>Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface.</source>
- <translation type="unfinished">ここで MIDI インターフェースを選びます コンパイル時のシステム設定によって ALSA OSS 等がえらべます。選択した MIDI インターフェースをのコントール設定の欄が下にあります。</translation>
+ <translation type="unfinished">ここではMIDI インターフェースを選択することができます。コンパイル時のシステム設定によって、ALSAやOSS等を選択することができます。選択したMIDIインターフェースのコントロール設定項目は下部にあります。</translation>
</message>
<message>
<source>Paths</source>
@@ -5692,7 +7328,7 @@ Latency: %2 ms</source>
</message>
<message>
<source>LADSPA plugin paths</source>
- <translation type="unfinished">LADSAPA プラグインパス</translation>
+ <translation type="unfinished">LADSAPA プラグインのパス</translation>
</message>
<message>
<source>Default Soundfont File</source>
@@ -5704,11 +7340,11 @@ Latency: %2 ms</source>
</message>
<message>
<source>Choose default SoundFont</source>
- <translation type="unfinished">デフォルトサウンドフォントを選びます</translation>
+ <translation type="unfinished">デフォルトのサウンドフォントを選択してください</translation>
</message>
<message>
<source>Choose background artwork</source>
- <translation type="unfinished">背景用アートワークを選びます</translation>
+ <translation type="unfinished">背景用アートワークを選択してください</translation>
</message>
<message>
<source>One instrument track window mode</source>
@@ -5728,15 +7364,15 @@ Latency: %2 ms</source>
</message>
<message>
<source>Enable waveform display by default</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">デフォルトで波形表示を有効にする</translation>
</message>
<message>
<source>Smooth scroll in Song Editor</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Song Editor でスムーズ スクロールする</translation>
</message>
<message>
<source>Enable auto save feature</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">自動保存機能を有効にする</translation>
</message>
<message>
<source>Show playback cursor in AudioFileProcessor</source>
@@ -5747,19 +7383,19 @@ Latency: %2 ms</source>
<name>sf2Instrument</name>
<message>
<source>Bank</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">バンク</translation>
</message>
<message>
<source>Patch</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">パッチ</translation>
</message>
<message>
<source>Gain</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ゲイン</translation>
</message>
<message>
<source>Reverb</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">リバーブ</translation>
</message>
<message>
<source>Reverb Roomsize</source>
@@ -5802,27 +7438,27 @@ Latency: %2 ms</source>
<name>sf2InstrumentView</name>
<message>
<source>Open other SoundFont file</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">他のサウンドフォント ファイルを開く</translation>
</message>
<message>
<source>Click here to open another SF2 file</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ここをクリックすると他のSF2 ファイルを開きます</translation>
</message>
<message>
<source>Choose the patch</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">パッチを選択</translation>
</message>
<message>
<source>Gain</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ゲイン</translation>
</message>
<message>
<source>Apply reverb (if supported)</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">(サポートしているならば)リバーブを適用</translation>
</message>
<message>
<source>This button enables the reverb effect. This is useful for cool effects, but only works on files that support it.</source>
- <translation type="unfinished">このボタンでリバー部エフェクトをON。 かっこいいエフェクトに有効。 しかしリバーブをサポートしたファイルにしか効かない。</translation>
+ <translation type="unfinished">このボタンでリバーブ エフェクトを有効にします。クールなエフェクトには有効ですが、リバーブをサポートしたファイルにしか効果がありません。</translation>
</message>
<message>
<source>Reverb Roomsize:</source>
@@ -5842,11 +7478,11 @@ Latency: %2 ms</source>
</message>
<message>
<source>Apply chorus (if supported)</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">(サポートしているならば)コーラスを適用</translation>
</message>
<message>
<source>This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.</source>
- <translation type="unfinished">このぼたんでコーラスエフェクトをON。かっこいいエコーエフェクトに有効。しかしコーラスをサポートしたファイルにしか効かない。</translation>
+ <translation type="unfinished">このボタンでコーラス エフェクトを有効にします。クールなエコー エフェクトには有効ですが、コーラスをサポートしたファイルにしか効果がありません。</translation>
</message>
<message>
<source>Chorus Lines:</source>
@@ -5866,11 +7502,11 @@ Latency: %2 ms</source>
</message>
<message>
<source>Open SoundFont file</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">サウンドフォント ファイルを開く</translation>
</message>
<message>
<source>SoundFont2 Files (*.sf2)</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">SoundFont2 ファイル (*.sf2)</translation>
</message>
</context>
<context>
@@ -5884,15 +7520,15 @@ Latency: %2 ms</source>
<name>sidInstrument</name>
<message>
<source>Cutoff</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">カットオフ</translation>
</message>
<message>
<source>Resonance</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">レゾナンス</translation>
</message>
<message>
<source>Filter type</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">フィルターの種類</translation>
</message>
<message>
<source>Voice 3 off</source>
@@ -5900,38 +7536,38 @@ Latency: %2 ms</source>
</message>
<message>
<source>Volume</source>
- <translation type="unfinished">ボリウム</translation>
+ <translation type="unfinished">音量</translation>
</message>
<message>
<source>Chip model</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">チップモデル</translation>
</message>
</context>
<context>
<name>sidInstrumentView</name>
<message>
<source>Volume:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">音量:</translation>
</message>
<message>
<source>Resonance:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">レゾナンス:</translation>
</message>
<message>
<source>Cutoff frequency:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">カットオフ周波数:</translation>
</message>
<message>
<source>High-Pass filter </source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ハイパスフィルター</translation>
</message>
<message>
<source>Band-Pass filter </source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">バンドパスフィルター</translation>
</message>
<message>
<source>Low-Pass filter </source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ローパスフィルター</translation>
</message>
<message>
<source>Voice3 Off </source>
@@ -5947,43 +7583,43 @@ Latency: %2 ms</source>
</message>
<message>
<source>Attack:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">アタック:</translation>
</message>
<message>
<source>Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.</source>
- <translation type="unfinished">アタック速度は出力ボイス %!1 がゼロからピーク振幅にどれだけ早く大きくなるからを決めます。</translation>
+ <translation type="unfinished">アタック速度は、ボイス %1 の出力がゼロからピーク振幅にどれだけ早く大きくなるかを決定します。</translation>
</message>
<message>
<source>Decay:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ディケイ:</translation>
</message>
<message>
<source>Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.</source>
- <translation type="unfinished">ディケイ速度は出力がピーク振幅からサスティンレベルまでどれだけ早く小さくなるかを決めます。</translation>
+ <translation type="unfinished">ディケイ速度では、出力がピーク振幅から選択したサスティン レベルまでどれだけ早く小さくなるかを設定します。</translation>
</message>
<message>
<source>Sustain:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">サスティン:</translation>
</message>
<message>
<source>Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.</source>
- <translation type="unfinished">出力ボイス %1 はノートが保持されてる間、選ばれたサスティン振幅を保持します。</translation>
+ <translation type="unfinished">ボイス %1 の出力はノートが保持されてる間、選択されたサスティン振幅を保持します。</translation>
</message>
<message>
<source>Release:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">リリース:</translation>
</message>
<message>
<source>The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.</source>
- <translation type="unfinished">出力ボイス %1 は 選択されたリリースレートで指定した大きさでサスティンレベルからゼロに小さくなります。</translation>
+ <translation type="unfinished">ボイス %1 の出力は、選択されたリリースレートでサスティンの大きさから0へと小さくなります。</translation>
</message>
<message>
<source>Pulse Width:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">パルス幅:</translation>
</message>
<message>
<source>The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.</source>
- <translation type="unfinished">パルス幅解像度は 明らかなステップを生じることなくスムーズにスイープ可能な幅を与えます。オシレータ %1 のパルス波形は聞き取れる効果を持つように選択されなければなれません。</translation>
+ <translation type="unfinished">パルス幅解像度は認識可能なステップを生じることなくスムーズにスイープ可能な幅を与えます。オシレータ %1 のパルス波形は聞き取り可能なエフェクトを持つように選択しなければなりません。</translation>
</message>
<message>
<source>Coarse:</source>
@@ -5995,11 +7631,11 @@ Latency: %2 ms</source>
</message>
<message>
<source>Pulse Wave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">パルス波形</translation>
</message>
<message>
<source>Triangle Wave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">三角波</translation>
</message>
<message>
<source>SawTooth</source>
@@ -6007,15 +7643,15 @@ Latency: %2 ms</source>
</message>
<message>
<source>Noise</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ノイズ</translation>
</message>
<message>
<source>Sync</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">同期</translation>
</message>
<message>
<source>Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.</source>
- <translation type="unfinished">Sync ”Hard Sync"エフェクトを生じながらオシレータ %1 の基本周波数を オシレータ %2 の基本周波数に同期します。</translation>
+ <translation type="unfinished">オシレータ %1 の基本周波数と、"同期の難しい"エフェクトを生み出しているオシレータ %2 の基本周波数を同期します。</translation>
</message>
<message>
<source>Ring-Mod</source>
@@ -6050,7 +7686,7 @@ Latency: %2 ms</source>
</message>
<message>
<source>Master volume</source>
- <translation type="unfinished">マスターボリウム</translation>
+ <translation type="unfinished">マスター音量</translation>
</message>
<message>
<source>Master pitch</source>
@@ -6062,19 +7698,19 @@ Latency: %2 ms</source>
</message>
<message>
<source>The project %1 is now saved.</source>
- <translation type="unfinished">プロジェクト %1 をセーブしました</translation>
+ <translation type="unfinished">プロジェクト %1 を保存しました</translation>
</message>
<message>
<source>Project NOT saved.</source>
- <translation type="unfinished">プロジェクトはセーブされてません</translation>
+ <translation type="unfinished">プロジェクトは保存されていません。</translation>
</message>
<message>
<source>The project %1 was not saved!</source>
- <translation type="unfinished">プロジェクト %1 はセーブされてません</translation>
+ <translation type="unfinished">プロジェクト %1 は保存されませんでした!</translation>
</message>
<message>
<source>Import file</source>
- <translation type="unfinished">インポートファイル</translation>
+ <translation type="unfinished">ファイルのインポート</translation>
</message>
<message>
<source>untitled</source>
@@ -6082,15 +7718,15 @@ Latency: %2 ms</source>
</message>
<message>
<source>Select file for project-export...</source>
- <translation type="unfinished">プロジェクト-エクスポートするファイルを選んでください</translation>
+ <translation type="unfinished">プロジェクトをエクスポートするファイルを選択してください...</translation>
</message>
<message>
<source>Empty project</source>
- <translation type="unfinished">空プロジェクト</translation>
+ <translation type="unfinished">空のプロジェクト</translation>
</message>
<message>
<source>This project is empty so exporting makes no sense. Please put some items into Song Editor first!</source>
- <translation type="unfinished">プロジェクトは空ですエキスポートは無駄です。ソングエディタにアイテムを置いてからエクスポートしてください。</translation>
+ <translation type="unfinished">プロジェクトが空なのでエクスポートは無効です。Song Editor にアイテムを置いてからエクスポートしてください!</translation>
</message>
<message>
<source>MIDI sequences</source>
@@ -6102,11 +7738,11 @@ Latency: %2 ms</source>
</message>
<message>
<source>All file types</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">すべてのファイル</translation>
</message>
<message>
<source>Hydrogen projects</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Hydrogen プロジェクト</translation>
</message>
<message>
<source>Select directory for writing exported tracks...</source>
@@ -6114,152 +7750,6 @@ Latency: %2 ms</source>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation type="unfinished">ソングエディタ</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation type="unfinished">ソング再生 (Space)</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation type="unfinished">クリックすると曲全体を演奏します。ソングポジションマーカー(緑色)の位置から再生開始します。再生中にマーカーを移動さすこともできます。</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation type="unfinished">ソング停止 (Space)</translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation type="unfinished">クリックすると 曲の再生を停止します。 再生後ソングポジションマーカーは曲の最初にセットされます。</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation type="unfinished">beat/bassline 追加</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation type="unfinished">sample-track 追加</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation type="unfinished">ファイルをオープンできません</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation type="unfinished">ファイルに書き込めません</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation type="unfinished">automation-track 追加</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation type="unfinished">ドローモード</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation type="unfinished">編集モード (選択等)</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation type="unfinished">オーディオデバイスからサンプルを録音</translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation type="unfinished">ソングまたはBBトラックを再生中にオーディオデバイスからサンプルを録音</translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished">テンポ</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished">テンポ/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">曲のテンポ</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished">曲のテンポは分毎のビート数(BPM)で指定します。曲のテンポを変更する場合はこの値を変更してください。各小節は4つのビートをもちますから、BPMであらわされるテンポは 一分間に いくつの小節(テンポ/4) が演奏される(あるいは4分間にいくつの小節が演奏されるか)かをきめます。</translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished">ハイクオリティモード</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished">マスターボリウム</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished">マスターボリウム</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished">マスターピッチ</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished">マスター ピッチ</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished">ボリウム %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished">ボリウム %1 半音</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6319,23 +7809,23 @@ Latency: %2 ms</source>
<name>timeLine</name>
<message>
<source>Enable/disable auto-scrolling</source>
- <translation type="unfinished">オートスクロールの ON/OFF</translation>
+ <translation type="unfinished">オートスクロールを有効/無効</translation>
</message>
<message>
<source>Enable/disable loop-points</source>
- <translation type="unfinished">ループポイントの ON/OFF</translation>
+ <translation type="unfinished">ループポイントを有効/無効</translation>
</message>
<message>
<source>After stopping go back to begin</source>
- <translation type="unfinished">終了後 開始位置にもどる</translation>
+ <translation type="unfinished">終了後、開始位置に戻る</translation>
</message>
<message>
<source>After stopping go back to position at which playing was started</source>
- <translation type="unfinished">終了後 再生が開始された位置にもどる</translation>
+ <translation type="unfinished">終了後、再生が開始された位置に戻る</translation>
</message>
<message>
<source>After stopping keep position</source>
- <translation type="unfinished">終了後 その位置のまま</translation>
+ <translation type="unfinished">終了後、位置を保持する</translation>
</message>
<message>
<source>Hint</source>
@@ -6343,7 +7833,7 @@ Latency: %2 ms</source>
</message>
<message>
<source>Press <Ctrl> to disable magnetic loop points.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">マグネティック ループポイントを無効化するには<Ctrl>を押してください。</translation>
</message>
<message>
<source>Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points.</source>
@@ -6400,7 +7890,7 @@ Latency: %2 ms</source>
</message>
<message>
<source>Cut</source>
- <translation type="unfinished">カット</translation>
+ <translation type="unfinished">切り取り</translation>
</message>
<message>
<source>Copy</source>
@@ -6408,7 +7898,7 @@ Latency: %2 ms</source>
</message>
<message>
<source>Paste</source>
- <translation type="unfinished">ペースト</translation>
+ <translation type="unfinished">貼り付け</translation>
</message>
<message>
<source>Mute/unmute (<Ctrl> + middle click)</source>
@@ -6419,7 +7909,7 @@ Latency: %2 ms</source>
<name>trackOperationsWidget</name>
<message>
<source>Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action.</source>
- <translation type="unfinished">移動グリップをクリック中に <Ctl >を押せば 新しいドラッグ&ドロップアクションを始められます。</translation>
+ <translation type="unfinished">新しいドラッグ&ドロップアクションを開始するには、移動グリップをクリック中に <Ctrl>を押してください。</translation>
</message>
<message>
<source>Actions for this track</source>
@@ -6439,43 +7929,55 @@ Latency: %2 ms</source>
</message>
<message>
<source>Clone this track</source>
- <translation type="unfinished">トラックを複製</translation>
+ <translation type="unfinished">このトラックを複製</translation>
</message>
<message>
<source>Remove this track</source>
- <translation type="unfinished">トラックを消去</translation>
+ <translation type="unfinished">このトラックを削除</translation>
+ </message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished">このトラックをクリア</translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>vestigeInstrument</name>
<message>
<source>Loading plugin</source>
- <translation type="unfinished">プラグインをロード中</translation>
+ <translation type="unfinished">プラグインを読み込んでいます</translation>
</message>
<message>
<source>Please wait while loading VST-plugin...</source>
- <translation type="unfinished">VST-プラグインをロードする間お待ちください</translation>
+ <translation type="unfinished">VST-プラグインを読み込む間お待ちください...</translation>
</message>
<message>
<source>Failed loading VST-plugin</source>
- <translation type="unfinished">VST-プラグインのロード失敗</translation>
+ <translation type="unfinished">VST-プラグインの読み込みに失敗しました</translation>
</message>
<message>
<source>The VST-plugin %1 could not be loaded for some reason.
If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation type="unfinished">VST-plugin %1 がいくつかの理由でロードできませんでした。
-もしそのVSTがLinuxのほかのVST-ソフトウェアで動くなら LMMS の開発者に連絡してください。</translation>
+ <translation type="unfinished">VST-plugin %1 がいくつかの理由で読み込みできませんでした。
+もしその VST が Linuxの他のVST-ソフトウェアで動作するならば LMMS の開発者に連絡してください!</translation>
</message>
</context>
<context>
<name>vibed</name>
<message>
<source>String %1 volume</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ストリング %1 の音量</translation>
</message>
<message>
<source>String %1 stiffness</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ストリング %1 のスティフネス</translation>
</message>
<message>
<source>Pick %1 position</source>
@@ -6514,67 +8016,67 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<name>vibedView</name>
<message>
<source>Volume:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">音量:</translation>
</message>
<message>
<source>The 'V' knob sets the volume of the selected string.</source>
- <translation type="unfinished">V つまみで選択したストリングのボリウムをセットします。</translation>
+ <translation type="unfinished">V つまみでは選択したストリングの音量を設定します。</translation>
</message>
<message>
<source>String stiffness:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ストリングのスティフネス:</translation>
</message>
<message>
<source>The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring.</source>
- <translation type="unfinished">S つまみで選択したストリングのスチフネス(堅さ)をセットします。 ストリングのスチフネスはストリングがどれだけ長くなり響くかに影響します。値をちいさくするとストリングは長く鳴り響きます。</translation>
+ <translation type="unfinished">S つまみで選択したストリングのスティフネス(堅さ)を設定します。ストリングのスティフネスはストリングがどれだけ長く鳴り響くかに影響します。値を小さくするほどストリングは長く鳴り響きます。</translation>
</message>
<message>
<source>Pick position:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ピック位置:</translation>
</message>
<message>
<source>The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge.</source>
- <translation type="unfinished">P つまみでストリングがピッキングされる位置をセットします。値が小さいほどブリッジに近いところがピッキングされます。</translation>
+ <translation type="unfinished">P つまみでは、選択したストリングをピッキングする位置を指定します。指定した値が小さいほど、ブリッジに近い箇所がピッキングされます。</translation>
</message>
<message>
<source>Pickup position:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ピックアップ位置:</translation>
</message>
<message>
<source>The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge.</source>
- <translation type="unfinished">PUつまみで選択したストリングのどの位置で振動をモニターするかをセットします。 小さい値ほどブリッジとピックアップの位置がちかいことになります。</translation>
+ <translation type="unfinished">PU つまみでは選択したストリングのどの位置で振動をモニターするかを設定します。値が小さくなるほどブリッジとピックアップの位置が近くなります。</translation>
</message>
<message>
<source>Pan:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">パン:</translation>
</message>
<message>
<source>The Pan knob determines the location of the selected string in the stereo field.</source>
- <translation type="unfinished">Pan つまみはステレオ音場中の選択したストリングの位置を指定します。</translation>
+ <translation type="unfinished">Pan つまみではステレオ音場中の選択したストリングの位置を指定します。</translation>
</message>
<message>
<source>Detune:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ディチューン:</translation>
</message>
<message>
<source>The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp.</source>
- <translation type="unfinished">Detune つまみは選択したストリングのピッチを変更します。ゼロより小さい値を設定するとフラットになります。ゼロより大きい値を指定するとシャープになります。</translation>
+ <translation type="unfinished">Detune つまみでは選択したストリングのピッチを変更します。ゼロより小さい値を指定すると音がフラットになります。ゼロより大きい値を指定すると音がシャープになります。</translation>
</message>
<message>
<source>Fuzziness:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ファジネス:</translation>
</message>
<message>
<source>The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'.</source>
- <translation type="unfinished">Slapつまみは選択されたストリングに少しだけファズを加えます。アタック期間にもっとも明確な影響があります。ストリングを金属ぽい音にするのにつかえます。</translation>
+ <translation type="unfinished">Slap つまみでは選択したストリングに少しだけファズを追加します。アタックの際にとてもはっきりとこの効果を理解できます。ストリングを金属風の音にするのに使用できます。</translation>
</message>
<message>
<source>Length:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">長さ:</translation>
</message>
<message>
<source>The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles.</source>
- <translation type="unfinished">Length つまみで選択されたストリングの長さをセットします。より長いストリングは、より長い間鳴って、より明るく聞こえるでしょう、しかし、よりCPUサイクルを食います。</translation>
+ <translation type="unfinished">Length つまみでは選択したストリングの長さを指定します。ストリングを長くすれば、長い時間鳴り、より明るく聞こえます。しかし、よりCPUサイクルを消費します。</translation>
</message>
<message>
<source>Impulse or initial state</source>
@@ -6582,15 +8084,15 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
<message>
<source>The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string.</source>
- <translation type="unfinished">Imp セレクタは グラフの波形がピッキングによってストリングに与えられるインパルスとして扱われるかストリングの初期状態として扱われるかをきめます。</translation>
+ <translation type="unfinished">Imp セレクタは、グラフの波形がピッキングによってストリングに与えられるインパルスとして扱われるのか、ストリングの初期状態として扱われるのかを指定します。</translation>
</message>
<message>
<source>Octave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">オクターブ</translation>
</message>
<message>
<source>The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental.</source>
- <translation type="unfinished">オクターブセレクタはストリングでノートのどの倍音が鳴るかをを選べます。'-2'は基音のしたオクターブまで鳴ることを意味します。'F'はストリングが基音で鳴ることを意味します。'6'はストリングが基本から6オクターブの間でなることを意味します。</translation>
+ <translation type="unfinished">オクターブセレクタは、ストリングをノートのどの倍音で鳴らすかを選択するために使用します。例えば、'-2'は基音の2オクターブ下まで鳴ることを意味し、'F'は、ストリングが基音で鳴ることを意味します。そして'6'は、ストリングが基本から6オクターブ上で鳴ることを意味します。</translation>
</message>
<message>
<source>Impulse Editor</source>
@@ -6604,14 +8106,13 @@ The waveform can also be drawn in the graph.
The 'S' button will smooth the waveform.
The 'N' button will normalize the waveform.</source>
- <translation type="unfinished">The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded.
-波形エディタは、ストリングの振動開始字に使われる初期状態またはインパルスのコントロールに使います。グラフの右側のボタンで波形をを選択したタイプに初期化します。'?' ぼたんでファイルから波形をロードします--最初の128個のサンプルだけがロードされます。
+ <translation type="unfinished">波形エディターは、ストリングの振動開始時に使われる初期状態またはインパルスのコントロールに使用します。グラフの右側のボタンで波形を選択した種類に初期化します。'?' ボタンでファイルから波形を--最初の128個のサンプルのみ読み込みます。
-波形をグラフの中にかけます
+波形はグラフ内に描くこともできます。
-'S'ボタンで波形を平滑化します。
+'S'ボタンは、波形を平滑化します。
-'N' ボタンで波形をノーマライズします。</translation>
+'N' ボタンは、波形をノーマライズ化します。</translation>
</message>
<message>
<source>Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at.
@@ -6625,112 +8126,112 @@ The 'V' knob controls the volume. The 'S' knob controls the
The 'Length' knob controls the length of the string.
The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument.</source>
- <translation type="unfinished">Vibed は7個までの独立して振動しているストリングをモデル化します。 'String'セレクタで現在エディットしているストリングを選べます。'Imp' セレクタで グラフがインパルスをあらわしてるのがストリングの初期状態を表しているのか選ぶことができます。'Octavve' セレクタでどの倍音でストリングが振動するのかが選べます。
+ <translation type="unfinished">Vibed は独立して振動しているストリングを9つまでモデル化します。'String'セレクタでは、現在編集しているストリングを選ぶことができます。'Imp' セレクタでは、インパルスと、ストリングの初期状態のどちらをグラフで表すのかを選択します。'Octave' セレクタでは、どの倍音でストリングを振動させるのかを選択します。
-グラフで初期状態またはストリングを動かすときにつかうインパルスをコントールできます。
+グラフでは、動作中のストリングを設定する際に使用する、初期状態またはインパルスをコントールすることができます。
-’V’つまみでボリュームをコントロール 'S'つまみでスチフネス(堅さ)をコントロール ’P'つまみで引く位置 ’PU'つまみで録音ピックアップの位置
+'V' つまみでは音量を、'S' つまみではスティフネス(堅さ)をコントロールします。'P' つまみでは弾く位置を、'PU' つまみではピックアップの位置をコントロールします。
-'Pan' と 'Detune' の説明はいらないでしょう。 'Slap'のつまみは ストリングの音にファズを多少加えます。
+'Pan' と 'Detune' の説明は不要でしょう。'Slap'のつまみは、ストリングの音にファズを少し加えます。
-'length' つまみはストリングの長さをコントロールします
+'Length' つまみでは、ストリングの長さをコントロールします。
-波形エディタの右下すみのLEDは現在の楽器でどのストリングがアクティブなのか表しています。</translation>
+波形エディターの右下隅のLEDは、現在のインストゥルメントのストリングがアクティブなのかどうかを示しています。</translation>
</message>
<message>
<source>Enable waveform</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">波形を有効</translation>
</message>
<message>
<source>Click here to enable/disable waveform.</source>
- <translation type="unfinished">クリックすると 波形の有効/無効の切換</translation>
+ <translation type="unfinished">ここをクリックすると波形の有効/無効を切り替えます。</translation>
</message>
<message>
<source>String</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ストリング</translation>
</message>
<message>
<source>The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active.</source>
- <translation type="unfinished">ストリングセレクタはコントローラーが編集しているストリングを選ぶのにつかいます。Vibed 楽器は 9本までの独立した振動してるストリングを含んでいます。波形エディタの右下すみのLEDはどのストリングがアクティブかを示しています。</translation>
+ <translation type="unfinished">ストリングセレクタはコントローラーが編集しているストリングを選択するのに使用します。Vibed インストゥルメントは 最大9本の独立した振動したストリングを含むことができます。波形エディターの右下隅のLEDはどのストリングがアクティブかを示しています。</translation>
</message>
<message>
<source>Sine wave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">サイン波形</translation>
</message>
<message>
<source>Triangle wave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">三角波形</translation>
</message>
<message>
<source>Saw wave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">のこぎり波形</translation>
</message>
<message>
<source>Square wave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">方形波形</translation>
</message>
<message>
<source>White noise wave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ホワイトノイズ波形</translation>
</message>
<message>
<source>User defined wave</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ユーザー定義波形</translation>
</message>
<message>
<source>Smooth</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">平滑化</translation>
</message>
<message>
<source>Click here to smooth waveform.</source>
- <translation type="unfinished">クリックすると波形をスムーズ化</translation>
+ <translation type="unfinished">ここをクリックすると波形を平滑化します。</translation>
</message>
<message>
<source>Normalize</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">ノーマライズ</translation>
</message>
<message>
<source>Click here to normalize waveform.</source>
- <translation type="unfinished">クリックすると波形をノーマライズ</translation>
+ <translation type="unfinished">ここをクリックすると波形をノーマライズ化します。</translation>
</message>
<message>
<source>&Help</source>
- <translation type="unfinished">ヘルプ(&H)</translation>
+ <translation>ヘルプ(&H)</translation>
</message>
<message>
<source>Use a sine-wave for current oscillator.</source>
- <translation type="unfinished">サイン波を現在のオシレータで使用</translation>
+ <translation type="unfinished">サイン波形を現在のオシレータで使用する。</translation>
</message>
<message>
<source>Use a triangle-wave for current oscillator.</source>
- <translation type="unfinished">三角波を現在のオシレータで使用</translation>
+ <translation type="unfinished">三角波形を現在のオシレータで使用する。</translation>
</message>
<message>
<source>Use a saw-wave for current oscillator.</source>
- <translation type="unfinished">のこぎり波を現在のオシレータで使用</translation>
+ <translation type="unfinished">のこぎり波形を現在のオシレータで使用する。</translation>
</message>
<message>
<source>Use a square-wave for current oscillator.</source>
- <translation type="unfinished">方形波を現在のオシレータで使用</translation>
+ <translation type="unfinished">方形波形を現在のオシレータで使用する。</translation>
</message>
<message>
<source>Use white-noise for current oscillator.</source>
- <translation type="unfinished">ホワイトノイズを現在のオシレータで使用</translation>
+ <translation type="unfinished">ホワイトノイズ波形を現在のオシレータで使用する。</translation>
</message>
<message>
<source>Use a user-defined waveform for current oscillator.</source>
- <translation type="unfinished">ユーザー定義波形を現在のオシレータで使用</translation>
+ <translation type="unfinished">ユーザー定義波形を現在のオシレータで使用する。</translation>
</message>
</context>
<context>
<name>visualizationWidget</name>
<message>
<source>click to enable/disable visualization of master-output</source>
- <translation type="unfinished">クリックするとマスターアウトプットの表/示非表示 切換</translation>
+ <translation type="unfinished">ここをクリックするとマスター出力の表示/非表示を切り替えます</translation>
</message>
<message>
<source>Click to enable</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">有効にするにはここをクリック</translation>
</message>
</context>
<context>
@@ -6780,4 +8281,74 @@ The LED in the lower right corner of the waveform editor determines whether the
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation>入力ゲイン</translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation>出力ゲイン</translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/ko.qm b/data/locale/ko.qm
index 2548158..9f1fc76 100644
Binary files a/data/locale/ko.qm and b/data/locale/ko.qm differ
diff --git a/data/locale/ko.ts b/data/locale/ko.ts
index 423a25f..4718f4a 100644
--- a/data/locale/ko.ts
+++ b/data/locale/ko.ts
@@ -8,10 +8,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation type="unfinished"></translation>
</message>
@@ -46,7 +42,65 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">볼륨</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">볼륨:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished">패닝</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished">패닝:</translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">볼륨</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished">패닝</translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -80,14 +134,6 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation type="unfinished">샘플 시작과 끝점 반복</translation>
- </message>
- <message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Amplify:</source>
<translation type="unfinished">증폭</translation>
</message>
@@ -100,23 +146,51 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished">시작점</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>Endpoint:</source>
+ <translation type="unfinished">끝점</translation>
+ </message>
+ <message>
+ <source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
- <translation type="unfinished">끝점</translation>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>Disable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -365,6 +439,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished"><Ctrl> 누르는 동안 제어를 끌기</translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -396,6 +474,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished">연결해제 "%1"</translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">녹음 설정/해제</translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -405,6 +487,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished">주파수</translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished">주파수:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished">이득</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished">이득:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished">비</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished">비:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished">주파수</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished">이득</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished">비</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -517,6 +652,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -880,6 +1141,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1008,14 +1273,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Alias-free oscillators</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@@ -1029,9 +1286,80 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
- <name>FxMixer</name>
+ <name>FileBrowser</name>
<message>
- <source>Master</source>
+ <source>Browser</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
+ <message>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">도움말(&H)</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixer</name>
+ <message>
+ <source>Master</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1053,6 +1381,9 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>FX-Mixer</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
<translation type="unfinished"></translation>
@@ -1067,6 +1398,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
@@ -1124,6 +1462,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Sync</source>
<translation type="unfinished">동기</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1566,6 +1908,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1628,6 +1982,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1774,6 +2140,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1860,10 +2230,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">일반 설정</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished">사전 설정 파일을 저장하고 싶으면 여기를 클릭. 나중에 사전 설정 브라우저에서 이중 클릭으로 사전 설정을 읽어올 수 있습니다.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished">기기 볼륨</translation>
</message>
@@ -1936,10 +2302,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">플러그인</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
@@ -1947,6 +2309,14 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>RANGE</source>
<translation type="unfinished">범위</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -1993,6 +2363,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">%1 과 %2 사이 새로운 값을 입력하시오:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2353,10 +2730,6 @@ LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요.</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2376,6 +2749,22 @@ LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요.</translation>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2492,301 +2881,1166 @@ LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요.</translation>
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
+ <source>Osc 1 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
+ <source>Osc 1 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
+ <source>Osc 1 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
+ <source>Osc 1 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
+ <source>Osc 1 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
+ <source>Osc 1 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
+ <source>Osc 1 Pulse width</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
+ <source>Osc 1 Sync send on rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
+ <source>Osc 1 Sync send on fall</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
+ <source>Osc 2 Volume</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
+ <source>Osc 2 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <source>Osc 2 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished">반복</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
+ <source>Osc 2 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <source>Osc 2 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
+ <source>Osc 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
+ <source>Osc 2 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <source>Osc 2 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
+ <source>Osc 3 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
+ <source>Osc 3 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
+ <source>Osc 3 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
+ <source>Osc 3 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
+ <source>Osc 3 Waveform 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation type="unfinished">LFO 제어기</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
- <translation type="unfinished">베이스</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
- <translation type="unfinished">베이스 양:</translation>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
+ <source>LFO 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
+ <source>LFO 1 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
+ <source>LFO 1 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
+ <source>Env 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
+ <source>Env 1 Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
- <translation type="unfinished">무음 출력</translation>
+ <source>Env 1 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation type="unfinished">베이스 박자</translation>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
- <translation type="unfinished">플러그인 찾을 수 없음</translation>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
- <translation type="unfinished">플러그인 "%1" 찾을 수 없어 읽어올 수 없습니다!
-이유: "%2"</translation>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Error while loading plugin</source>
- <translation type="unfinished">플러그인 읽는 중 오류</translation>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
- <translation type="unfinished">플러그인 "%1"을 읽는 중 실패!</translation>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
- <translation type="unfinished">WAV 파일 (*.wav)</translation>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation type="unfinished">압축 OGG 파일 (*.ogg)</translation>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
+ <source>Selected view</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
+ <source>Vol1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
+ <source>Vol1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eb</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D#</source>
- <comment>Note name</comment>
+ <source>Vol2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E</source>
- <comment>Note name</comment>
+ <source>Vol2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Fb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>F#</source>
- <comment>Note name</comment>
+ <source>Vol3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G</source>
- <comment>Note name</comment>
+ <source>Vol3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ab</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G#</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">마스터 볼륨</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="unfinished">반복</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>피아노-롤에서 이 패턴을 열기위해 이중 클릭
+한 단계 볼륨을 설정하기위하여 마우스 휠 사용</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>피아노-롤에서 열기</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>전체 박자 지우기</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>이름 초기화</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>이름 변경</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>단계 더하기</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>단계 제거</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished">LFO 제어기</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished">베이스</translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished">베이스 양:</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished">무음 출력</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>현재 패턴 재생/잠시 중지 (Space)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>현재 패턴 재생을 중지 (Space)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>선택 박자를 잘라내기 (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>선택 박자를 복사 (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>클립보드에서 박자 붙여넣기 (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>피아노-롤 - 패턴 없음</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>피아노-롤 - %1</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>이것을 이중 클릭을 함으로서 패턴을 열어주세요.</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>미디 기기/채널 피아노에서 박자 기록</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>노래 또는 BB 트랙 재생시 미디 기기/채널에서 박자 기록</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>그리기 모드 (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>지우기 모드 (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>선택 모드 (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>마지막 박자</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation>박자 잠금</translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">%1 과 %2 사이 새로운 값을 입력하시오:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished">베이스 박자</translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation type="unfinished">플러그인 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation type="unfinished">플러그인 "%1" 찾을 수 없어 읽어올 수 없습니다!
+이유: "%2"</translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation type="unfinished">플러그인 읽는 중 오류</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation type="unfinished">플러그인 "%1"을 읽는 중 실패!</translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation type="unfinished">WAV 파일 (*.wav)</translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation type="unfinished">압축 OGG 파일 (*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G#</source>
+ <comment>Note name</comment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -2856,6 +4110,10 @@ Reason: "%2"</source>
<source>File: </source>
<translation>파일: </translation>
</message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleBuffer</name>
@@ -2864,10 +4122,6 @@ Reason: "%2"</source>
<translation type="unfinished">오디오 파일 열기</translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation type="unfinished">전체 오디오 파일 (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
- </message>
- <message>
<source>Wave-Files (*.wav)</source>
<translation type="unfinished">Wave 파일 (*.wav)</translation>
</message>
@@ -2888,10 +4142,6 @@ Reason: "%2"</source>
<translation type="unfinished">SPEEX 파일 (*.spx)</translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation type="unfinished">MP3 파일 (*.mp3)</translation>
- </message>
- <message>
<source>VOC-Files (*.voc)</source>
<translation type="unfinished">VOC 파일 (*.voc)</translation>
</message>
@@ -2907,6 +4157,10 @@ Reason: "%2"</source>
<source>RAW-Files (*.raw)</source>
<translation type="unfinished">RAW 파일 (*.raw)</translation>
</message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleTCOView</name>
@@ -2915,54 +4169,200 @@ Reason: "%2"</source>
<translation type="unfinished">샘플을 선택하기 위하여 이중 클릭</translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
- <translation type="unfinished"></translation>
+ <source>Delete (middle mousebutton)</source>
+ <translation type="unfinished">삭제 (중간 마우스버튼)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">잘라내기</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">복사</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">붙여넣기</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished">무음/무음해제 (<Ctrl> + 중간 클릭)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">녹음 설정/해제</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">샘플 트랙</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">볼륨</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished">트랙 볼륨</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished">채널 볼륨</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">볼륨</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation>노래-편집기</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>노래 재생 (Space)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>노래 정지 (Space)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>샘플 트랙 더하기</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>파일을 열 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>파일을 쓸 수 없음</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>자동화 트랙 더하기</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>그리기 모드</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>편집 모드(선택 및 이동)</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation>오디오 기기에서 샘플 녹음</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>노래 재생 또는 BB트랙 동안 오디오 기기에서 샘플 녹음</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation type="unfinished">beat/bassline 더하기</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished">탬포</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished">템포/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">노래 템포</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished">고 양질 모드</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">마스터 볼륨</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished">마스터 볼륨</translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">잘라내기</translation>
+ <source>Master pitch</source>
+ <translation type="unfinished">마스터 피치</translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">복사</translation>
+ <source>master pitch</source>
+ <translation type="unfinished">마스터 피치</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">붙여넣기</translation>
+ <source>Value: %1%</source>
+ <translation type="unfinished">값: %1%</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation type="unfinished">무음/무음해제 (<Ctrl> + 중간 클릭)</translation>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished">값: %1 세미톤</translation>
</message>
<message>
- <source>Set/clear record</source>
- <translation type="unfinished">녹음 설정/해제</translation>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">샘플 트랙</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">선형 스펙트럼</translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">볼륨</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">선형 Y 축</translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation type="unfinished">트랙 볼륨</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">선형 스펙트럼</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">채널 볼륨</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">선형 Y 축</translation>
</message>
<message>
- <source>VOL</source>
- <translation type="unfinished">볼륨</translation>
+ <source>Channel mode</source>
+ <translation type="unfinished">채널 모드</translation>
</message>
</context>
<context>
@@ -3288,178 +4688,427 @@ Please make sure you have read-permission to the file and the directory containi
<translation type="unfinished">DLL 파일 (*.dll)</translation>
</message>
<message>
- <source>EXE-files (*.exe)</source>
- <translation type="unfinished">EXE 파일 (*.exe)</translation>
+ <source>EXE-files (*.exe)</source>
+ <translation type="unfinished">EXE 파일 (*.exe)</translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation type="unfinished">읽은 VST 플러그인 없음</translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished">사전 설정 저장</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished">사전 설정 저장</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished">플러그인 읽는 중</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
- <translation type="unfinished">읽은 VST 플러그인 없음</translation>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Right detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Right detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Right detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Right detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>A-B Mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>A-B Mix envelope amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
- <translation type="unfinished">사전 설정 저장</translation>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>A-B Mix envelope hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>A-B Mix envelope decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>A1-B2 Crosstalk</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
+ <source>A2-A1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>VstEffectControlDialog</name>
+ <name>WatsynView</name>
<message>
- <source>Show/hide</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
- <translation type="unfinished">사전 설정 저장</translation>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation type="unfinished">플러그인 읽는 중</translation>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation type="unfinished">VST 플러그인 읽은 동안 잠시 대기...</translation>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation type="unfinished">VST 플러그인 읽는 중 오류</translation>
+ <source>Phase left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
+ <source>Click to shift phase by -15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Click to shift phase by +15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Normalize</source>
+ <translation type="unfinished">일반화</translation>
+ </message>
+ <message>
+ <source>Click to normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
+ <source>Smooth</source>
+ <translation type="unfinished">부드럽게</translation>
+ </message>
+ <message>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Sine wave</source>
+ <translation type="unfinished">사인 파형</translation>
+ </message>
+ <message>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Triangle wave</source>
+ <translation type="unfinished">삼각 파형</translation>
+ </message>
+ <message>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Square wave</source>
+ <translation type="unfinished">사각 파형</translation>
+ </message>
+ <message>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3588,54 +5237,32 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<translation>샘플 역으로</translation>
</message>
<message>
- <source>Loop</source>
- <translation>반복</translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation>주파수</translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation>주파수:</translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation>이득</translation>
- </message>
<message>
- <source>Gain:</source>
- <translation>이득:</translation>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
- <translation>비</translation>
+ <source>Loop mode</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>비:</translation>
+ <source>Interpolation mode</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
- <translation>주파수</translation>
+ <source>None</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>이득</translation>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
- <translation>비</translation>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3695,6 +5322,10 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<source>Change color</source>
<translation>색상 변경</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3790,6 +5421,120 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3825,90 +5570,104 @@ Please make sure you have write-permission to the file and the directory contain
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation type="unfinished"></translation>
+ <source>Graph</source>
+ <translation></translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Start frequency</source>
+ <translation>시작 주파수</translation>
+ </message>
+ <message>
+ <source>End frequency</source>
+ <translation>끝 주파수</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>이득</translation>
+ </message>
+ <message>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Envelope Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Noise</source>
+ <translation type="unfinished">잡음</translation>
+ </message>
+ <message>
+ <source>Click</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Frequency Slope</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation></translation>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End to note</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
- <translation>시작 주파수</translation>
+ <source>Start frequency:</source>
+ <translation>시작 주파수:</translation>
</message>
<message>
- <source>End frequency</source>
- <translation>끝 주파수</translation>
+ <source>End frequency:</source>
+ <translation>끝 주파수:</translation>
</message>
<message>
- <source>Decay</source>
- <translation>감쇄</translation>
+ <source>Gain:</source>
+ <translation>이득:</translation>
</message>
<message>
- <source>Distortion</source>
- <translation>왜곡</translation>
+ <source>Frequency Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>이득</translation>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Start frequency:</source>
- <translation>시작 주파수:</translation>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
- <translation>끝 주파수:</translation>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
- <translation>감쇄:</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>왜곡:</translation>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
- <translation>이득:</translation>
+ <source>Distortion End:</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4184,6 +5943,38 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<source>Click here for white-noise.</source>
<translation></translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4779,12 +6570,28 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
+ <source>cents</source>
<translation></translation>
</message>
<message>
- <source>cents</source>
- <translation></translation>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -5054,216 +6861,6 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation></translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation></translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation></translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation></translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>피아노-롤에서 이 패턴을 열기위해 이중 클릭
-한 단계 볼륨을 설정하기위하여 마우스 휠 사용</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>피아노-롤에서 열기</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>전체 박자 지우기</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>이름 초기화</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>이름 변경</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation></translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation></translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation></translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>단계 더하기</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>단계 제거</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>현재 패턴 재생/잠시 중지 (Space)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>현재 패턴 재생을 중지 (Space)</translation>
- </message>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>선택 박자를 잘라내기 (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>선택 박자를 복사 (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>클립보드에서 박자 붙여넣기 (Ctrl+V)</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>피아노-롤 - 패턴 없음</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>피아노-롤 - %1</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>이것을 이중 클릭을 함으로서 패턴을 열어주세요.</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>미디 기기/채널 피아노에서 박자 기록</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>노래 또는 BB 트랙 재생시 미디 기기/채널에서 박자 기록</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>그리기 모드 (Shift+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>지우기 모드 (Shift+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>선택 모드 (Shift+S)</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>마지막 박자</translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation></translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation></translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation></translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation>박자 잠금</translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark/unmark current semitone</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current chord</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unmark all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No chord</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>pluginBrowser</name>
<message>
<source>no description</source>
@@ -5294,42 +6891,22 @@ use mouse wheel to set volume of a step</source>
<translation>설치된 LADSPA 플러그인 목록</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation></translation>
- </message>
- <message>
<source>Filter for importing FL Studio projects into LMMS</source>
<translation></translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation></translation>
- </message>
- <message>
<source>GUS-compatible patch instrument</source>
<translation></translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation></translation>
- </message>
- <message>
<source>Additive Synthesizer for organ-like sounds</source>
<translation></translation>
</message>
<message>
- <source>plugin for boosting bass</source>
- <translation></translation>
- </message>
- <message>
<source>Tuneful things to bang on</source>
<translation></translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation></translation>
- </message>
- <message>
<source>VST-host for using VST(i)-plugins within LMMS</source>
<translation></translation>
</message>
@@ -5386,6 +6963,62 @@ This chip was used in the Commodore 64 computer.</source>
<source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>projectNotes</name>
@@ -6086,152 +7719,6 @@ Latency: %2 ms</source>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation>노래-편집기</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>노래 재생 (Space)</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation></translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>노래 정지 (Space)</translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation></translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>샘플 트랙 더하기</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>파일을 열 수 없음</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>파일을 쓸 수 없음</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation>자동화 트랙 더하기</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>그리기 모드</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>편집 모드(선택 및 이동)</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation>오디오 기기에서 샘플 녹음</translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation>노래 재생 또는 BB트랙 동안 오디오 기기에서 샘플 녹음</translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation type="unfinished">beat/bassline 더하기</translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished">탬포</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished">템포/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">노래 템포</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished">고 양질 모드</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished">마스터 볼륨</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished">마스터 볼륨</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished">마스터 피치</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished">마스터 피치</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished">값: %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished">값: %1 세미톤</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation>선형 스펙트럼</translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation>선형 Y 축</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation>선형 스펙트럼</translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation>선형 Y 축</translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation>채널 모드</translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6417,6 +7904,18 @@ Latency: %2 ms</source>
<source>Remove this track</source>
<translation>이 트랙을 제거</translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6734,4 +8233,74 @@ The LED in the lower right corner of the waveform editor determines whether the
<translation>소리 %1 테스트</translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/nl.qm b/data/locale/nl.qm
index 024d468..1331a35 100644
Binary files a/data/locale/nl.qm and b/data/locale/nl.qm differ
diff --git a/data/locale/nl.ts b/data/locale/nl.ts
index b9605d9..7745ab5 100644
--- a/data/locale/nl.ts
+++ b/data/locale/nl.ts
@@ -8,10 +8,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation type="unfinished"></translation>
</message>
@@ -46,7 +42,65 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">Volume:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volume</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -80,14 +134,6 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished">Met deze knop word de sample achterste voren gespeeld. Dit is goed bruikbaar voor leuke effecten, zoals een 'reversed crash'.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation type="unfinished">Sample herhalen tussen start- en eindpunt</translation>
- </message>
- <message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Amplify:</source>
<translation type="unfinished">Versterking:</translation>
</message>
@@ -100,23 +146,51 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished">Startpunt:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>Endpoint:</source>
+ <translation type="unfinished">Eindpunt:</translation>
+ </message>
+ <message>
+ <source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
- <translation type="unfinished">Eindpunt:</translation>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>Disable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -365,6 +439,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -396,6 +474,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -405,6 +487,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -459,7 +594,7 @@ If you're interested in translating LMMS in another language or want to imp
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Annuleren</translation>
</message>
<message>
<source>LMMS</source>
@@ -517,6 +652,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished">LowPass</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished">HiPass</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished">Bandpass csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">Bandpass czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">Notch</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">Allpass</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished">2x LowPass</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -880,6 +1141,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation type="unfinished">Sleep een willekeurige sample en plaats hem in dit venster.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1008,25 +1273,88 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
+ <source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Alias-free oscillators</source>
+ <source>Cancel</source>
+ <translation type="unfinished">Annuleren</translation>
+ </message>
+ <message>
+ <source>Export as loop (remove end silence)</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowser</name>
<message>
- <source>Start</source>
+ <source>Browser</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Cancel</source>
+ <source>Send to active instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Export as loop (remove end silence)</source>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&Help</translation>
+ </message>
</context>
<context>
<name>FxMixer</name>
@@ -1053,6 +1381,9 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>FX-Mixer</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
<translation type="unfinished"></translation>
@@ -1067,6 +1398,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
@@ -1124,6 +1462,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Sync</source>
<translation type="unfinished">Synchroon</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1566,6 +1908,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1628,6 +1982,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1774,6 +2140,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1860,10 +2230,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished"></translation>
</message>
@@ -1936,10 +2302,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">PLUGIN</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
@@ -1947,6 +2309,14 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>RANGE</source>
<translation type="unfinished">BEREIK</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -1993,6 +2363,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Voer aub. een waarde in tussen %1 en %2 in:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2352,10 +2729,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2375,6 +2748,22 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2491,284 +2880,1149 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation type="unfinished">Oscillator %1 Volume</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation type="unfinished">Oscillator %1 Balans</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation type="unfinished">Osc %1 grove ontstemming</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation type="unfinished">Oscillator %1 Fijn ontstemming links</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation type="unfinished">Oscillator %1 Fijn ontstemming rechts</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation type="unfinished">Oscillator %1 fase-verschuiving </translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation type="unfinished">Oscillator %1 stereo fase-veschuiving</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation type="unfinished">Oscillator %1 Golfvorm</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
+ <source>Osc 1 Sync send on fall</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation type="unfinished">Oscillator %1 Golfvorm</translation>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
+ <source>Osc 2 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <source>Osc 2 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
+ <source>Osc 2 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
+ <source>Osc 2 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <source>Osc 2 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
+ <source>Osc 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
+ <source>Osc 2 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <source>Osc 2 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
+ <source>Osc 3 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
+ <source>Osc 3 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
+ <source>Osc 3 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
+ <source>Osc 3 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
+ <source>Osc 3 Waveform 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
+ <source>Osc 3 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
+ <source>Osc 3 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
+ <source>LFO 1 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation type="unfinished">Modulatie-intensiteit:</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
- <translation type="unfinished">Attack:</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
- <translation type="unfinished">Release:</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
+ <source>Env 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation type="unfinished">Modulatie-intensiteit</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
+ <source>Env 1 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation type="unfinished">Grandtoon</translation>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
- <translation type="unfinished">Plugin niet gevonden</translation>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
+ <source>Env 2 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error while loading plugin</source>
- <translation type="unfinished">Fout bij laden Plugin</translation>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
+ <source>Env 2 Release</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
+ <source>Env 2 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation type="unfinished">Gecomprimeerd OGG-Bestand (*.ogg)</translation>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
+ <source>Selected view</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
+ <source>Vol1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
+ <source>Vol1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eb</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D#</source>
- <comment>Note name</comment>
+ <source>Vol2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E</source>
- <comment>Note name</comment>
+ <source>Vol2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Fb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>F#</source>
+ <source>Vol3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Master volume</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished">Oscillator %1 Volume</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished">Oscillator %1 Balans</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished">Osc %1 grove ontstemming</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished">Oscillator %1 Fijn ontstemming links</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished">Oscillator %1 Fijn ontstemming rechts</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished">Oscillator %1 fase-verschuiving </translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished">Oscillator %1 stereo fase-veschuiving</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation type="unfinished">Oscillator %1 Golfvorm</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished">Oscillator %1 Golfvorm</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation type="unfinished">dubbel-klik om deze pattern in Piano-Roll te openen
+volume van de steps is met het muiswiel te veranderen</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation type="unfinished">In Piano-Roll openen</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation type="unfinished">Alle noten verwijderen</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation type="unfinished">Naam herstellen</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation type="unfinished">Steps toevoegen</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation type="unfinished">Steps verwijderen</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished">Modulatie-intensiteit:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished">Attack:</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished">Release:</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished">Modulatie-intensiteit</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Knip geselecteerde noten (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Kopieer geselecteerde noten (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Plak noten van klembord (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Huidige pattern afspelen/pauseren (Spatie)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Afspelen huidige pattern stoppen (Spatie)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>Piano-Roll - %1</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Piano-Roll -geen pattern</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Open aub. een pattern door er op te dubbel-klikken!</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Noten van MIDI-apparaat/kanaal-piano opnemen</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>Laatste noot</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Teken modus (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Wis modus (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>Selecteer modus (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Voer aub. een waarde in tussen %1 en %2 in:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished">Grandtoon</translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation type="unfinished">Plugin niet gevonden</translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation type="unfinished">Fout bij laden Plugin</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation type="unfinished">Gecomprimeerd OGG-Bestand (*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F#</source>
<comment>Note name</comment>
<translation type="unfinished"></translation>
</message>
@@ -2854,6 +4108,10 @@ Reason: "%2"</source>
<source>File: </source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleBuffer</name>
@@ -2862,10 +4120,6 @@ Reason: "%2"</source>
<translation type="unfinished">Audio-bestand openen</translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Wave-Files (*.wav)</source>
<translation type="unfinished">Wave-Bestanden (*.wav)</translation>
</message>
@@ -2886,10 +4140,6 @@ Reason: "%2"</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>VOC-Files (*.voc)</source>
<translation type="unfinished">VOC-Bestanden (*.voc)</translation>
</message>
@@ -2905,6 +4155,10 @@ Reason: "%2"</source>
<source>RAW-Files (*.raw)</source>
<translation type="unfinished">RAW-Bestanden (*.raw)</translation>
</message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleTCOView</name>
@@ -2925,41 +4179,187 @@ Reason: "%2"</source>
<translation type="unfinished">Kopieren</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">Plakken</translation>
+ <source>Paste</source>
+ <translation type="unfinished">Plakken</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished">Dempen/geluid aan (<Ctrl> + middelklik)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">Sample spoor</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volume</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Klik hier, wanneer je het afspelen van de song wilt stoppen. De song-position-marker zal weer naar het begin van je song worden gezet.</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>Kan bestand niet openen</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>Kan bestand niet schrijven</translation>
+ </message>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Song-Editor</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Klik hier, als je de gehele song wil afspelen. Het afspelen start bij de song-positie-marker (groen). Je kunt ook verplaatsen tijdens het afspelen.</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Song afspelen (Spatie)</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Stop afspelen song (Spatie)</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Beat/Bassline toevoegen</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Sample spoor toevoegen</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Teken modus</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Bewerk modus (selecteren en verplaatsen)</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished">Tempo</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished">TEMPO/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">afspeelsnelheid</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished">High quality modus</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Master volume</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished">master volume</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation type="unfinished">Master toonhoogte</translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation type="unfinished">master toonhoogte</translation>
+ </message>
+ <message>
+ <source>Value: %1%</source>
+ <translation type="unfinished">Waarde: %1%</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation type="unfinished">Dempen/geluid aan (<Ctrl> + middelklik)</translation>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished">Waarde: %1 semitonen</translation>
</message>
<message>
- <source>Set/clear record</source>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">Sample spoor</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">Volume</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
+ <source>Linear spectrum</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channel volume:</source>
+ <source>Linear Y axis</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VOL</source>
+ <source>Channel mode</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3077,7 +4477,7 @@ Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en prob
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Annuleren</translation>
</message>
<message>
<source>Please wait...</source>
@@ -3249,218 +4649,466 @@ Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en prob
<context>
<name>VersionedSaveDialog</name>
<message>
- <source>Increment version number</source>
+ <source>Increment version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrement version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VestigeInstrumentView</name>
+ <message>
+ <source>Open other VST-plugin</source>
+ <translation type="unfinished">Open ander VST-plugin</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <translation type="unfinished">Klik hier, wanner je een andere VST-plugin wilt openen. Nadat je op deze knop gedrukt hebt zal er een bestand-openen-dialoog openen en kun je je bestand selecteren.</translation>
+ </message>
+ <message>
+ <source>Show/hide GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <translation type="unfinished">Klik hier, wanneer je de Grafische Gebruiker Interface (GUI) van je VST-plugin wilt tonen/verbergen.</translation>
+ </message>
+ <message>
+ <source>Turn off all notes</source>
+ <translation type="unfinished">Alle noten verwijderen</translation>
+ </message>
+ <message>
+ <source>Open VST-plugin</source>
+ <translation type="unfinished">Open VST-plugin</translation>
+ </message>
+ <message>
+ <source>DLL-files (*.dll)</source>
+ <translation type="unfinished">DLL-Bestanden (*.dll)</translation>
+ </message>
+ <message>
+ <source>EXE-files (*.exe)</source>
+ <translation type="unfinished">EXE-Bestanden (*.exe)</translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation type="unfinished">Geen VST-plugin geladen</translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished">Plugin laden</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decrement version number</source>
+ <source>Panning B1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VestigeInstrumentView</name>
<message>
- <source>Open other VST-plugin</source>
- <translation type="unfinished">Open ander VST-plugin</translation>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
- <translation type="unfinished">Klik hier, wanner je een andere VST-plugin wilt openen. Nadat je op deze knop gedrukt hebt zal er een bestand-openen-dialoog openen en kun je je bestand selecteren.</translation>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Show/hide GUI</source>
+ <source>Freq. multiplier A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
- <translation type="unfinished">Klik hier, wanneer je de Grafische Gebruiker Interface (GUI) van je VST-plugin wilt tonen/verbergen.</translation>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Turn off all notes</source>
- <translation type="unfinished">Alle noten verwijderen</translation>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin</source>
- <translation type="unfinished">Open VST-plugin</translation>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DLL-files (*.dll)</source>
- <translation type="unfinished">DLL-Bestanden (*.dll)</translation>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>EXE-files (*.exe)</source>
- <translation type="unfinished">EXE-Bestanden (*.exe)</translation>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
- <translation type="unfinished">Geen VST-plugin geladen</translation>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Right detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Right detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Right detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Right detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>A-B Mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>A-B Mix envelope amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>A-B Mix envelope attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>A-B Mix envelope hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>A-B Mix envelope decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>A1-B2 Crosstalk</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
+ <source>A2-A1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>VstEffectControlDialog</name>
+ <name>WatsynView</name>
<message>
- <source>Show/hide</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>Modulate amplitude of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation type="unfinished">Plugin laden</translation>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation type="unfinished">Wacht aub, de VST-plugin word geladen...</translation>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation type="unfinished">VST-plugin laden mislukt</translation>
+ <source>Phase left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation type="unfinished">De VST-plugin %1 kan om onbekende reden niet worden geladen.
-Als het wel werkt met andere VST-software onder Linux, neem dan contact op met een LMMS-ontwikkelaar!</translation>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Click to shift phase by +15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Normalize</source>
+ <translation type="unfinished">Normaliseren</translation>
+ </message>
+ <message>
+ <source>Click to normalize</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
+ <source>Smooth</source>
+ <translation type="unfinished">Uitstrijker</translation>
+ </message>
+ <message>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Sine wave</source>
+ <translation type="unfinished">Sinus golf</translation>
+ </message>
+ <message>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Triangle wave</source>
+ <translation type="unfinished">Driehoeks golf</translation>
+ </message>
+ <message>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Square wave</source>
+ <translation type="unfinished">Vierkants golf</translation>
+ </message>
+ <message>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3589,53 +5237,31 @@ Als het wel werkt met andere VST-software onder Linux, neem dan contact op met e
<translation>Sample omdraaien</translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation type="unfinished"></translation>
- </message>
<message>
- <source>Gain:</source>
+ <source>Loopback point</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
+ <source>Loop mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio:</source>
+ <source>Interpolation mode</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
+ <source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Linear</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
+ <source>Sinc</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3696,6 +5322,10 @@ Als het wel werkt met andere VST-software onder Linux, neem dan contact op met e
<source>Change color</source>
<translation type="unfinished">Kleur veranderen</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3791,6 +5421,120 @@ Als het wel werkt met andere VST-software onder Linux, neem dan contact op met e
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3826,89 +5570,103 @@ Please make sure you have write-permission to the file and the directory contain
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
+ <source>Graph</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Start frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>End frequency</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Gain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Length</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
+ <source>Envelope Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End to note</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
+ <source>Start frequency:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency</source>
+ <source>End frequency:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Gain:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
+ <source>Frequency Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Envelope Length:</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Start frequency:</source>
+ <source>Envelope Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
+ <source>Click:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
- <translation type="unfinished">Decay:</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
+ <source>Distortion Start:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
+ <source>Distortion End:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4185,6 +5943,38 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<source>Click here for white-noise.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4780,11 +6570,27 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation type="unfinished">Oscillator %1 Balans:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation type="unfinished">Oscillator %1 Fijn ontstemming links:</translation>
+ <source>cents</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5055,226 +6861,12 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>Kan pattern niet bevriezen</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>De pattern kan nu niet bevroren worden, omdat deze in de afspeel-modus is. Stop aub. en probeer opnieuw!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Pattern bevriezen...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Annuleren</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation type="unfinished">dubbel-klik om deze pattern in Piano-Roll te openen
-volume van de steps is met het muiswiel te veranderen</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation type="unfinished">In Piano-Roll openen</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation type="unfinished">Alle noten verwijderen</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation type="unfinished">Naam herstellen</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation type="unfinished">Opnieuw bevriezen</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation type="unfinished">Bevriezen</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation type="unfinished">Bevriezen ongedaan maken</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation type="unfinished">Steps toevoegen</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation type="unfinished">Steps verwijderen</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Knip geselecteerde noten (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Kopieer geselecteerde noten (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Plak noten van klembord (Ctrl+V)</translation>
- </message>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Huidige pattern afspelen/pauseren (Spatie)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Afspelen huidige pattern stoppen (Spatie)</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>Piano-Roll - %1</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Piano-Roll -geen pattern</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Open aub. een pattern door er op te dubbel-klikken!</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Noten van MIDI-apparaat/kanaal-piano opnemen</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>Laatste noot</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>Teken modus (Shift+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>Wis modus (Shift+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>Selecteer modus (Shift+S)</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark/unmark current semitone</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current chord</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unmark all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No chord</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>pluginBrowser</name>
<message>
<source>Instrument plugins</source>
<translation>Instrument Plugins</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>Drie krachtige Oscillatoren, welke je op verschillende manieren kan moduleren</translation>
- </message>
- <message>
<source>VST-host for using VST(i)-plugins within LMMS</source>
<translation>VST-Host voor bebruik van VST(i)-Plugins binnen LMMS</translation>
</message>
@@ -5292,11 +6884,7 @@ volume van de steps is met het muiswiel te veranderen</translation>
</message>
<message>
<source>Filter for importing MIDI-files into LMMS</source>
- <translation>Filter, om MIDI-bestanden in LMMS te importeren</translation>
- </message>
- <message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>Eenvoudige Sampler met verschillende instellingen voor gebruik van samples (z.B. Drums) in in een instrument-spoor</translation>
+ <translation>Filter, om MIDI-bestanden in LMMS te importeren</translation>
</message>
<message>
<source>Filter for importing FL Studio projects into LMMS</source>
@@ -5323,22 +6911,10 @@ volume van de steps is met het muiswiel te veranderen</translation>
<translation type="unfinished"></translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>GUS-compatible patch instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>plugin for boosting bass</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Tuneful things to bang on</source>
<translation type="unfinished"></translation>
</message>
@@ -5387,6 +6963,62 @@ This chip was used in the Commodore 64 computer.</source>
<source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>projectNotes</name>
@@ -6086,152 +7718,6 @@ Vertraging: %2 ms</translation>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Klik hier, wanneer je het afspelen van de song wilt stoppen. De song-position-marker zal weer naar het begin van je song worden gezet.</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>Kan bestand niet openen</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>Kan bestand niet schrijven</translation>
- </message>
- <message>
- <source>Song-Editor</source>
- <translation>Song-Editor</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Klik hier, als je de gehele song wil afspelen. Het afspelen start bij de song-positie-marker (groen). Je kunt ook verplaatsen tijdens het afspelen.</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Song afspelen (Spatie)</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Stop afspelen song (Spatie)</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Beat/Bassline toevoegen</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Sample spoor toevoegen</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>Teken modus</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>Bewerk modus (selecteren en verplaatsen)</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished">Tempo</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished">TEMPO/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">afspeelsnelheid</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished">High quality modus</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished">Master volume</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished">master volume</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished">Master toonhoogte</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished">master toonhoogte</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished">Waarde: %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished">Waarde: %1 semitonen</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6417,6 +7903,18 @@ Vertraging: %2 ms</translation>
<source>Solo</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6754,4 +8252,74 @@ De LED in de rechter benedenhoek van de golfvorm bewerker geeft aan of de snaar
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/pl.qm b/data/locale/pl.qm
index d4d7dac..1738f34 100644
Binary files a/data/locale/pl.qm and b/data/locale/pl.qm differ
diff --git a/data/locale/pl.ts b/data/locale/pl.ts
index fee00ba..704fff4 100644
--- a/data/locale/pl.ts
+++ b/data/locale/pl.ts
@@ -8,10 +8,6 @@
<translation>O programie LMMS</translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation>LMMS (Linux MultiMedia Studio)</translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation>Wersja %1 (%2/%3, Qt %4, %5)</translation>
</message>
@@ -52,7 +48,65 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail:
<translation type="unfinished">Copyright (c) 2004-2010, LMMS developers {2004-2014,?}</translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished">LMMS</translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">Głośność:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished">PAN</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished">Panoramowanie:</translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Głośność</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished">Panoramowanie</translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -86,14 +140,6 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail:
<translation>Jeśli uaktywnisz tę kontrolkę cała próbka będzie odtwarzana wstecz. Może to być przydatne do stworzenia efektów dźwiękowych np. puszczonej wstecz blachy crash.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation>Zapętl próbkę od znacznika początkowego do końcowego</translation>
- </message>
- <message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation>Jeśli uaktywnisz tę kontrolkę próbka będzie odtwarzana w zakresie od znacznika początkowego do końcowego podczas gdy klawisz instrumentu jest naciśnięty. Może być to przydatne w przypadku sampli instrumentów strunowych czy chórków.</translation>
- </message>
- <message>
<source>Amplify:</source>
<translation>Wzmocnienie:</translation>
</message>
@@ -106,18 +152,10 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail:
<translation>Znacznik-początkowy:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Za pomocą tego pokrętła możesz ustawić położenie znacznika początku odtwarzania, czyli miejsca, od którego próbka ma być odtwarzana. Gdy uaktywnisz tryb zapętlenia będzie to punkt do którego Sampler będzie powracał jeśli nuta jest dłuższa niż wycinek próbki pomiędzy znacznikami początku i końca.</translation>
- </message>
- <message>
<source>Endpoint:</source>
<translation>Znacznik końcowy:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Za pomocą tego pokrętła możesz ustawić położenie znacznika końca odtwarzania, czyli miejsca gdzie kończy się odtwarzanie próbki. Gdy uaktywnisz tryb zapętlenia będzie to punkt z którego Sampler będzie przeskakiwał do znacznika początkowego jeśli nuta jest dłuższa niż wycinek próbki pomiędzy znacznikami początku i końca.</translation>
- </message>
- <message>
<source>Continue sample playback across notes</source>
<translation type="unfinished"></translation>
</message>
@@ -125,6 +163,42 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail:
<source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Disable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioFileProcessorWaveView</name>
@@ -371,6 +445,10 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail:
<source>Drag a control while pressing <Ctrl></source>
<translation>Przeciągnij trzymając wciśnięty klawisz <Ctrl></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -402,6 +480,10 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail:
<source>Disconnect "%1"</source>
<translation>Rozłącz "%1"</translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Ustaw/wyczyść nagranie</translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -411,6 +493,59 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail:
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished">FREQ</translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished">Częstotliwość:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished">GAIN</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished">Wzmocnienie:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished">RATIO</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished">Współczynnik:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished">Częstotliwość</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished">Wzmocnienie</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished">Współczynnik</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished">Pokaż GUI</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -523,6 +658,132 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail:
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished">Dolnoprzepustowy</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished">Górnoprzepustowy</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished">Pasmowoprzepustowy csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">Pasmowoprzepustowy czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">Pasmowozaporowy</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">Wszechprzepustowy</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished">2xDolnoprzepustowy</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -898,6 +1159,10 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation>Przeciągnij próbkę skądkolwiek i upuść w tym oknie.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1026,15 +1291,6 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
<translation>8x</translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translatorcomment>Nie mam pojęcia co oznacza i jak działa opcja 'sample-exact'</translatorcomment>
- <translation>Kontrolery 'Sample-exact'</translation>
- </message>
- <message>
- <source>Alias-free oscillators</source>
- <translation>Oscylatory bez aliasów</translation>
- </message>
- <message>
<source>Start</source>
<translation>Rozpocznij</translation>
</message>
@@ -1048,41 +1304,122 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
</message>
</context>
<context>
- <name>FxMixer</name>
- <message>
- <source>Master</source>
- <translation>Master</translation>
- </message>
+ <name>FileBrowser</name>
<message>
- <source>FX %1</source>
- <translation>FX %1</translation>
+ <source>Browser</source>
+ <translation type="unfinished">Przeglądarka</translation>
</message>
</context>
<context>
- <name>FxMixerView</name>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Rename FX channel</source>
- <translation>Zmień nazwę kanału efektowego</translation>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished">Wyślij na aktywną ścieżkę instrumentu</translation>
</message>
<message>
- <source>Enter the new name for this FX channel</source>
- <translation>Wprowadź nową nazwę tego kanału efektowego</translation>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished">Otwórz na nowej ścieżce Edytora Piosenki</translation>
</message>
<message>
- <source>FX-Mixer</source>
- <translation>FX-Mixer</translation>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished">Otwórz na nowej ścieżce Edytora Perkusji i Basu</translation>
</message>
<message>
- <source>FX Fader %1</source>
- <translation>FX Fader %1</translation>
+ <source>Loading sample</source>
+ <translation type="unfinished">Ładowanie próbki</translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished">Ładowanie podglądu próbki, proszę czekać...</translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished">--- Pliki preinstalowane ---</translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxMixer</name>
+ <message>
+ <source>Master</source>
+ <translation>Master</translation>
+ </message>
+ <message>
+ <source>FX %1</source>
+ <translation>FX %1</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView</name>
+ <message>
+ <source>Rename FX channel</source>
+ <translation>Zmień nazwę kanału efektowego</translation>
+ </message>
+ <message>
+ <source>Enter the new name for this FX channel</source>
+ <translation>Wprowadź nową nazwę tego kanału efektowego</translation>
+ </message>
+ <message>
+ <source>FX-Mixer</source>
+ <translation>FX-Mixer</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
+ <message>
+ <source>FX Fader %1</source>
+ <translation type="unfinished">FX Fader %1</translation>
</message>
<message>
<source>Mute</source>
- <translation>Wyciszenie</translation>
+ <translation type="unfinished">Wyciszenie</translation>
</message>
<message>
<source>Mute this FX channel</source>
- <translation>Wycisz ten kanał efektowy</translation>
+ <translation type="unfinished">Wycisz ten kanał efektowy</translation>
+ </message>
+</context>
+<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1141,6 +1478,10 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
</message>
<message>
<source>Sync</source>
+ <translation type="unfinished">Synchronizacja</translation>
+ </message>
+ <message>
+ <source>Down and up</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1188,7 +1529,7 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
</message>
<message>
<source>GATE</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">BRAM.</translation>
</message>
<message>
<source>Arpeggio gate:</source>
@@ -1585,6 +1926,18 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished">8x {5?}</translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1647,6 +2000,18 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1793,6 +2158,10 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1879,10 +2248,6 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
<translation>GŁÓWNE USTAWIENIA</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation>Kliknij tutaj jeśli chcesz zachować ustawienia obecnego kanału w formie pliku presetu. Później możesz go wczytać poprzez dwuklik w przeglądarce presetów.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation>Głośność instrumentu</translation>
</message>
@@ -1955,10 +2320,6 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
<translation>WTYCZKA</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation>Zachowaj ustawienia bieżącego kanału w formie pliku presetu</translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
@@ -1966,6 +2327,14 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
<source>RANGE</source>
<translation type="unfinished">ZAKRES</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -2012,6 +2381,13 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Wprowadź nową wartość pomiędzy %1 a %2:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2389,11 +2765,23 @@ Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS.</translatio
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
+ <source>Version %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Version %1</source>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2512,202 +2900,1063 @@ Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS.</translatio
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation>Osc %1 głośność</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation>Osc %1 panoramowanie</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation>Osc %1 zgrubne odstrojenie</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation>Osc %1 dokładne odstrojenie lewo</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation>Osc %1 dokładne odstrojenie prawo</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation>Osc %1 przesunięcie fazowe</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation>Osc %1 odstrojenie fazy stereo</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation>Osc %1 kształt fali</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
- <translation>Rodzaj modulacji %1</translation>
+ <source>Osc 1 Sync send on fall</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation>Osc %1 przebieg</translation>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation>Otwórz inny plik Patch</translation>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation>Kliknij tutaj, aby otworzyć inny plik Patch. Ustawienia pętli i dostrojenia nie zostaną zresetowane.</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation>Pętla</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
- <translation>Tryb zapętlenia</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation>W tym miejscu możesz uruchomić tryb zapętlenia. Jeśli to zrobisz PatMan będzie używał informacji o pętli dostępnych w pliku.</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
- <translation>Dostrojenie</translation>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
- <translation>Tryb dostrojenia</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation>W tym miejscu możesz uruchomić tryb dostrojenia. Patman dostroi próbkę do częstotliwości nut.</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
- <translation>Nie wybrano żadnego pliku</translation>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
- <translation>Otwórz plik Patch</translation>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation>Pliki Patch (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
- <translation>Peak Kontroler</translation>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
- <translation>PEAK</translation>
+ <source>Osc 3 Waveform 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation>Kontroler LFO</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
- <translation>BAZA</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
- <translation>Współczynnik bazy:</translation>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Współczynnik modulacji:</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
- <translation>Atak:</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
- <translation>Wybrzmiewanie:</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
- <translation>Wartość bazowa</translation>
+ <source>Env 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation>Współczynnik modulacji</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
- <translation>Wycisz wyjście</translation>
+ <source>Env 1 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
- <translation>Narastanie</translation>
+ <source>Env 1 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
- <translation>Wybrzmiewanie</translation>
+ <source>Env 1 Release</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation>Nuta podstawowa</translation>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished">Vibrato</translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation>Osc %1 głośność</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation>Osc %1 panoramowanie</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation>Osc %1 zgrubne odstrojenie</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation>Osc %1 dokładne odstrojenie lewo</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation>Osc %1 dokładne odstrojenie prawo</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation>Osc %1 przesunięcie fazowe</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation>Osc %1 odstrojenie fazy stereo</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation>Osc %1 kształt fali</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation>Rodzaj modulacji %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation>Osc %1 przebieg</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation>Otwórz inny plik Patch</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation>Kliknij tutaj, aby otworzyć inny plik Patch. Ustawienia pętli i dostrojenia nie zostaną zresetowane.</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation>Pętla</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation>Tryb zapętlenia</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation>W tym miejscu możesz uruchomić tryb zapętlenia. Jeśli to zrobisz PatMan będzie używał informacji o pętli dostępnych w pliku.</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation>Dostrojenie</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation>Tryb dostrojenia</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation>W tym miejscu możesz uruchomić tryb dostrojenia. Patman dostroi próbkę do częstotliwości nut.</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation>Nie wybrano żadnego pliku</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation>Otwórz plik Patch</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation>Pliki Patch (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>Podwójne kliknięcie otwiera pattern w Edytorze Pianolowym
+użyj kółka myszy aby ustawić głośność poszczególnych kroków</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>Otwórz w Edytorze Pianolowym</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>Wyczyść wszystkie nuty</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>Zresetuj nazwę</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Zmień nazwę</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>Dodaj kroki</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>Usuń kroki</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation>Peak Kontroler</translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation>PEAK</translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation>Kontroler LFO</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation>BAZA</translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation>Współczynnik bazy:</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation>Współczynnik modulacji:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation>Atak:</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation>Wybrzmiewanie:</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation>Wartość bazowa</translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation>Współczynnik modulacji</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation>Wycisz wyjście</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation>Narastanie</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation>Wybrzmiewanie</translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Odtwórz/zatrzymaj aktualny pattern (Spacja)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Zatrzymaj odtwarzanie bieżącego patternu (Spacja)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Wytnij zaznaczone nuty (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Skopiuj zaznaczone nuty (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Wklej nuty ze schowka (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Edytor Pianolowy - brak patternu</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>Edytor Pianolowy - %1</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Otwórz pattern podwójnym kliknięciem!</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Nagraj nuty za pomocą zewnętrznego kontrolera MIDI</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>Nagraj nuty za pomocą zewnętrznego kontrolera MIDI w trakcie odtwarzania podkładu dźwiękowego</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Tryb rysowania (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Tryb wymazywania (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>Tryb zaznaczania (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>Ostatnia nuta</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation>Kliknij tutaj jeśli chcesz odtworzyć bieżący pattern. Pattern zostanie automatycznie zapętlony.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation>Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania wszystkie nuty które zagrasz zostaną zapisane na pattern i będziesz mógł odtworzyć i edytować je później.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation>Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania będziesz słyszeć utwór lub linię perkusyjną/basową a wszystkie nuty które zagrasz zostaną zapisane na pattern.</translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation>Kliknij tutaj jeśli chcesz zatrzymać odtwarzanie bieżącego patternu.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Kliknij tutaj a zaznaczone nuty zostaną wycięte i umieszczone w schowku. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Kliknij tutaj a zaznaczone nuty zostaną skopiowane do schowka. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'.</translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation>Kliknij tutaj a nuty ze schowka zostaną przeklejone w miejsce zaznaczenia.</translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation>Blokada nuty</translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation>Głośność Nuty</translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation>Panoramowanie Nuty</translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation>Tryb odstrojenia (Shift+T)</translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation>Kliknij tutaj, aby przejść do trybu rysowania. W tym trybie możesz dodawać, przemieszczać i zmieniać rozmiar nut To domyślny tryb, który będziesz używać przez większość czasu. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+D'. Przytrzymaj klawisz 'Ctrl' aby czasowo przejść do trybu zaznaczenia.</translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation>Kliknij tutaj, aby przejść do trybu kasowania. W tym trybie możesz usuwać nuty. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+E'.</translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation>Kliknij tutaj, aby przejść do trybu zaznaczania. W tym trybie możesz zaznaczać pojedyncze nuty lub całe ich grupy. Alternatywnie możesz przytrzymać klawisz 'Ctrl' w trybie rysowania aby tymczasowo przejść do trybu zaznaczania.</translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation>Kliknij tutaj, aby przejść do trybu odstrojenia. W tym trybie możesz odstrajać nuty w oknie, które otworzy się po kliknięciu na nich. Ten tryb możesz aktywować z poziomu klawiatury przez wciśnięcie kombinacji 'Shift+T'.</translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Wprowadź nową wartość pomiędzy %1 a %2:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation>Nuta podstawowa</translation>
</message>
</context>
<context>
@@ -2730,6 +3979,10 @@ Powód: "%2"</translation>
<source>Failed to load plugin "%1"!</source>
<translation>Nie można załadować wtyczki "%1"!</translation>
</message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ProjectRenderer</name>
@@ -2876,6 +4129,10 @@ Powód: "%2"</translation>
<source>File: </source>
<translation>Plik: </translation>
</message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleBuffer</name>
@@ -2884,10 +4141,6 @@ Powód: "%2"</translation>
<translation type="unfinished">Otwórz plik audio</translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation type="unfinished">Wszystkie pliki Audio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
- </message>
- <message>
<source>Wave-Files (*.wav)</source>
<translation type="unfinished">Pliki WAV (*.wav)</translation>
</message>
@@ -2908,10 +4161,6 @@ Powód: "%2"</translation>
<translation type="unfinished">Pliki SPEEX (*.spx)</translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation type="unfinished">Pliki MP3 (*.mp3)</translation>
- </message>
- <message>
<source>VOC-Files (*.voc)</source>
<translation type="unfinished">Pliki VOC (*.voc)</translation>
</message>
@@ -2927,6 +4176,10 @@ Powód: "%2"</translation>
<source>RAW-Files (*.raw)</source>
<translation type="unfinished">Pliki RAW (*.raw)</translation>
</message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleTCOView</name>
@@ -2935,54 +4188,201 @@ Powód: "%2"</translation>
<translation type="unfinished">wybierz sampla podwójnym kliknięciem</translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
- <translation type="unfinished"></translation>
+ <source>Delete (middle mousebutton)</source>
+ <translation type="unfinished">Kasuj (naciśnij rolkę myszy)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">Wytnij</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">Kopiuj</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">Wklej</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished">Wycisz/anuluj wyciszenie (<Ctrl> + kliknięcie rolką myszy)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Ustaw/wyczyść nagranie</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished">Ścieżka audio</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Głośność</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished">Głośność ścieżki</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished">Głośność kanału:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Edytor Kompozycji</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Odtwórz piosenkę (Spacja)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Kliknij tutaj, jeśli chcesz odtworzyć całą piosenkę. Odtwarzanie rozpocznie się od zielonego znacznika pozycji. Możesz go przemieszczać w trakcie odtwarzania.</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Zatrzymaj odtwarzanie piosenki (Spacja)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Kliknij tutaj, jeśli chcesz zatrzymać odtwarzanie piosenki. Znacznik pozycji zostanie ustawiony na początek utworu.</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Dodaj linię basową/perkusyjną</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Dodaj ścieżkę z samplami</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>Nie można otworzyć pliku</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>Nie można zapisać pliku</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>Dodaj ścieżkę automatyki</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Tryb rysowania</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Tryb edycji (zaznaczanie i przemieszczanie)</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation>Nagraj sample z urządzenia audio</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>Nagrywa sample z urządzenia audio podczas odtwarzania piosenki lub ścieżki perkusji/basu</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation>Nie da się otworzyć pliku %1. Prawdopodobnie nie posiadasz uprawnień do odczytu tego pliku.
+Upewnij się, że masz przynajmniej uprawnienia odczytu tego pliku a następnie spróbuj ponownie.</translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation>Błąd w pliku</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation>Wygląda na to, że plik %1 zawiera błędy i nie może zostać załadowany.</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation>Tempo</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation>TEMPO/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation>tempo piosenki</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation>Tempo piosenki jest wyrażane w uderzeniach na minutę (BPM, Beats Per Minute). Jeśli chcesz zmienić szybkość swojej piosenki zmodyfikuj tę wartość. Każdy takt zawiera cztery uderzenia, stąd tempo w BPM wyraża jak wiele taktów / 4 powinno być odtworzone w ciągu minuty (albo - jeśli wolisz - jak wiele taktów ma być odtworzonych w ciągu 4 minut).</translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation>Tryb wysokiej jakości</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>Głośność główna</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation>głośność główna</translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">Wytnij</translation>
+ <source>Master pitch</source>
+ <translation>Odstrojenie główne</translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">Kopiuj</translation>
+ <source>master pitch</source>
+ <translation>odstrojenie główne</translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">Wklej</translation>
+ <source>Value: %1%</source>
+ <translation>Wartość: %1%</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation type="unfinished"></translation>
+ <source>Value: %1 semitones</source>
+ <translation>Wartość: %1 półtonów</translation>
</message>
<message>
- <source>Set/clear record</source>
- <translation type="unfinished">Ustaw/wyczyść nagranie</translation>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation type="unfinished">Ścieżka audio</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Spektrum skalowane liniowo</translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">Głośność</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Oś Y skalowana liniowo</translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation type="unfinished">Głośność ścieżki</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Spektrum skalowane liniowo</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation type="unfinished">Głośność kanału:</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Oś Y skalowana liniowo</translation>
</message>
<message>
- <source>VOL</source>
- <translation type="unfinished">VOL</translation>
+ <source>Channel mode</source>
+ <translation type="unfinished">Tryb kanału</translation>
</message>
</context>
<context>
@@ -3373,116 +4773,364 @@ Upewnij się, że masz uprawnienia do odczytu tego pliku i katalogu zawierające
<context>
<name>VstEffectControlDialog</name>
<message>
- <source>Control VST-plugin from LMMS host</source>
- <translation>Kontroluj wtyczkę VST z hosta LMMS</translation>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation>Kontroluj wtyczkę VST z hosta LMMS</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation>Kliknij tutaj, jeśli chcesz kontrolować wtyczkę VST z hosta LMMS.</translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation>Otwórz preset wtyczki VST</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation>Kliknij tutaj, jeśli chcesz otworzyć inny preset wtyczki VST w formacie *.fxp lub *.fxb.</translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation>Poprzedni (-)</translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation>Następny (+)</translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation>Kliknij tutaj, jeśli chcesz zaznaczyć presety aktualnie załadowane do wtyczki VST.</translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation>Zapisz preset</translation>
+ </message>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation>Ładowanie wtyczki</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation>Otwórz Preset</translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation>Preset wtyczki VST (*.fxp *.fxb)</translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation>: domyślne</translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation>Zapisz Preset</translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation>.fxp</translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation>.FXP</translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation>.FXB</translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation>.fxb</translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A1-B2 Crosstalk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A2-A1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B2-B1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected graph</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynView</name>
+ <message>
+ <source>Select oscillator A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of A2 to A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
- <translation>Kliknij tutaj, jeśli chcesz kontrolować wtyczkę VST z hosta LMMS.</translation>
+ <source>Ring-modulate A1 and A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
- <translation>Otwórz preset wtyczki VST</translation>
+ <source>Modulate phase of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
- <translation>Kliknij tutaj, jeśli chcesz otworzyć inny preset wtyczki VST w formacie *.fxp lub *.fxb.</translation>
+ <source>Mix output of B2 to B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
- <translation>Poprzedni (-)</translation>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
- <translation>Następny (+)</translation>
+ <source>Ring-modulate B1 and B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
- <translation>Kliknij tutaj, jeśli chcesz zaznaczyć presety aktualnie załadowane do wtyczki VST.</translation>
+ <source>Modulate phase of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
- <translation>Zapisz preset</translation>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished">Narysuj swój własny przebieg przeciągając kursorem po tym wykresie.</translation>
</message>
<message>
- <source>Show/hide</source>
+ <source>Load waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Click to load a waveform from a sample file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Phase left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Click to shift phase by -15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation>Ładowanie wtyczki</translation>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation>Ładowanie wtyczki VST. Proszę czekać...</translation>
+ <source>Normalize</source>
+ <translation type="unfinished">Normalizacja</translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation>Ładowanie wtyczki VST nie powiodło się</translation>
+ <source>Click to normalize</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation>Wtyczka VST %1 nie może zostać załadowana z jakiegoś powodu.
-Jeśli pracuje normalnie z innym oprogramowaniem VST pod Linuksem proszę koniecznie skontaktować się z developerami LMMS!</translation>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
- <translation>Otwórz Preset</translation>
+ <source>Click to invert</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
- <translation>Preset wtyczki VST (*.fxp *.fxb)</translation>
+ <source>Smooth</source>
+ <translation type="unfinished">Wygładzanie</translation>
</message>
<message>
- <source>: default</source>
- <translation>: domyślne</translation>
+ <source>Click to smooth</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
- <translation>Zapisz Preset</translation>
+ <source>Sine wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
- <translation>.fxp</translation>
+ <source>Click for sine wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
- <translation>.FXP</translation>
+ <source>Triangle wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
- <translation>.FXB</translation>
+ <source>Click for triangle wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
- <translation>.fxb</translation>
+ <source>Click for saw wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
+ <source>Square wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>'</source>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3611,54 +5259,32 @@ Jeśli pracuje normalnie z innym oprogramowaniem VST pod Linuksem proszę koniec
<translation>Odwróć próbkę</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Pętla</translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation>FREQ</translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation>Częstotliwość:</translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation>GAIN</translation>
- </message>
<message>
- <source>Gain:</source>
- <translation>Wzmocnienie:</translation>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
- <translation>RATIO</translation>
+ <source>Loop mode</source>
+ <translation type="unfinished">Tryb zapętlenia</translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>Współczynnik:</translation>
+ <source>Interpolation mode</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
- <translation>Częstotliwość</translation>
+ <source>None</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Wzmocnienie</translation>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
- <translation>Współczynnik</translation>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3718,6 +5344,10 @@ Jeśli pracuje normalnie z innym oprogramowaniem VST pod Linuksem proszę koniec
<source>Change color</source>
<translation>Zmień kolor</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3813,6 +5443,120 @@ Jeśli pracuje normalnie z innym oprogramowaniem VST pod Linuksem proszę koniec
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3849,90 +5593,104 @@ Upewnij się, że masz uprawnienia zapisu do tego pliku i katalogu w którym si
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation>Przeglądarka</translation>
+ <source>Graph</source>
+ <translation>Wykres</translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
- <translation>Wyślij na aktywną ścieżkę instrumentu</translation>
+ <source>Start frequency</source>
+ <translation>Częstotliwość początkowa</translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
- <translation>Otwórz na nowej ścieżce Edytora Piosenki</translation>
+ <source>End frequency</source>
+ <translation>Częstotliwość końcowa</translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
- <translation>Otwórz na nowej ścieżce Edytora Perkusji i Basu</translation>
+ <source>Gain</source>
+ <translation>Wzmocnienie</translation>
</message>
<message>
- <source>Loading sample</source>
- <translation>Ładowanie próbki</translation>
+ <source>Length</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
- <translation>Ładowanie podglądu próbki, proszę czekać...</translation>
+ <source>Distortion Start</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
- <translation>--- Pliki preinstalowane ---</translation>
+ <source>Distortion End</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation>Wykres</translation>
+ <source>Envelope Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise</source>
+ <translation type="unfinished">Szum</translation>
+ </message>
+ <message>
+ <source>Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End to note</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
- <translation>Częstotliwość początkowa</translation>
+ <source>Start frequency:</source>
+ <translation>Częstotliwość początkowa:</translation>
</message>
<message>
- <source>End frequency</source>
- <translation>Częstotliwość końcowa</translation>
+ <source>End frequency:</source>
+ <translation>Częstotliwość końcowa:</translation>
</message>
<message>
- <source>Decay</source>
- <translation>Zanikanie</translation>
+ <source>Gain:</source>
+ <translation>Wzmocnienie:</translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Zniekształcenie</translation>
+ <source>Frequency Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Wzmocnienie</translation>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Start frequency:</source>
- <translation>Częstotliwość początkowa:</translation>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
- <translation>Częstotliwość końcowa:</translation>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Zanikanie:</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Zniekształcenie:</translation>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
- <translation>Wzmocnienie:</translation>
+ <source>Distortion End:</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4220,6 +5978,38 @@ Podwójne kliknięcie na którejkolwiek wtyczce otworzy okienko z informacjami o
<source>Click here for white-noise.</source>
<translation>Kliknij tutaj, aby przełączyć na przebieg stochastyczny.</translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4815,13 +6605,29 @@ Podwójne kliknięcie na którejkolwiek wtyczce otworzy okienko z informacjami o
<translation>Osc %1 panoramowanie:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Osc %1 dokładne strojenie lewo:</translation>
- </message>
- <message>
<source>cents</source>
<translation>cent(y)</translation>
</message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>papuInstrument</name>
@@ -5085,218 +6891,8 @@ Podwójne kliknięcie na którejkolwiek wtyczce otworzy okienko z informacjami o
<translation type="unfinished"></translation>
</message>
<message>
- <source>Draw the wave here</source>
- <translation>Narysuj przebieg</translation>
- </message>
-</context>
-<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>Nie można zamrozić patternu</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>W tej chwili pattern nie może zostać zamrożony ponieważ znajdujesz się w trybie odtwarzania. Zatrzymaj i spróbuj ponownie!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Zamrażanie patternu...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Anuluj</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>Podwójne kliknięcie otwiera pattern w Edytorze Pianolowym
-użyj kółka myszy aby ustawić głośność poszczególnych kroków</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>Otwórz w Edytorze Pianolowym</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>Wyczyść wszystkie nuty</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>Zresetuj nazwę</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>Zmień nazwę</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation>Zamróź ponownie</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation>Zamróź</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation>Rozmróź</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>Dodaj kroki</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>Usuń kroki</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Odtwórz/zatrzymaj aktualny pattern (Spacja)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Zatrzymaj odtwarzanie bieżącego patternu (Spacja)</translation>
- </message>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Wytnij zaznaczone nuty (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Skopiuj zaznaczone nuty (Ctrl+C)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Wklej nuty ze schowka (Ctrl+V)</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Edytor Pianolowy - brak patternu</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>Edytor Pianolowy - %1</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Otwórz pattern podwójnym kliknięciem!</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Nagraj nuty za pomocą zewnętrznego kontrolera MIDI</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>Nagraj nuty za pomocą zewnętrznego kontrolera MIDI w trakcie odtwarzania podkładu dźwiękowego</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>Tryb rysowania (Shift+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>Tryb wymazywania (Shift+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>Tryb zaznaczania (Shift+S)</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>Ostatnia nuta</translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation>Kliknij tutaj jeśli chcesz odtworzyć bieżący pattern. Pattern zostanie automatycznie zapętlony.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation>Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania wszystkie nuty które zagrasz zostaną zapisane na pattern i będziesz mógł odtworzyć i edytować je później.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation>Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania będziesz słyszeć utwór lub linię perkusyjną/basową a wszystkie nuty które zagrasz zostaną zapisane na pattern.</translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation>Kliknij tutaj jeśli chcesz zatrzymać odtwarzanie bieżącego patternu.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Kliknij tutaj a zaznaczone nuty zostaną wycięte i umieszczone w schowku. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Kliknij tutaj a zaznaczone nuty zostaną skopiowane do schowka. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'.</translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation>Kliknij tutaj a nuty ze schowka zostaną przeklejone w miejsce zaznaczenia.</translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation>Blokada nuty</translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation>Głośność Nuty</translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation>Panoramowanie Nuty</translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation>Tryb odstrojenia (Shift+T)</translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation>Kliknij tutaj, aby przejść do trybu rysowania. W tym trybie możesz dodawać, przemieszczać i zmieniać rozmiar nut To domyślny tryb, który będziesz używać przez większość czasu. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+D'. Przytrzymaj klawisz 'Ctrl' aby czasowo przejść do trybu zaznaczenia.</translation>
- </message>
- <message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation>Kliknij tutaj, aby przejść do trybu kasowania. W tym trybie możesz usuwać nuty. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+E'.</translation>
- </message>
- <message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation>Kliknij tutaj, aby przejść do trybu zaznaczania. W tym trybie możesz zaznaczać pojedyncze nuty lub całe ich grupy. Alternatywnie możesz przytrzymać klawisz 'Ctrl' w trybie rysowania aby tymczasowo przejść do trybu zaznaczania.</translation>
- </message>
- <message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation>Kliknij tutaj, aby przejść do trybu odstrojenia. W tym trybie możesz odstrajać nuty w oknie, które otworzy się po kliknięciu na nich. Ten tryb możesz aktywować z poziomu klawiatury przez wciśnięcie kombinacji 'Shift+T'.</translation>
- </message>
- <message>
- <source>Mark/unmark current semitone</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Mark current chord</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unmark all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No scale</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>No chord</source>
- <translation type="unfinished"></translation>
+ <source>Draw the wave here</source>
+ <translation>Narysuj przebieg</translation>
</message>
</context>
<context>
@@ -5330,42 +6926,22 @@ użyj kółka myszy aby ustawić głośność poszczególnych kroków</translati
<translation>Pokaż zainstalowane wtyczki LADSPA</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>Trzy potężne oscylatory, które możesz modulować na kilka różnych sposobów.</translation>
- </message>
- <message>
<source>Filter for importing FL Studio projects into LMMS</source>
<translation>Filtr do importowania projektów FL Studio w LMMS.</translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation>Wszechstronny syntezator do kick'u i stopy perkusyjnej.</translation>
- </message>
- <message>
<source>GUS-compatible patch instrument</source>
<translation>Instrument kompatybilny z standardem sampli GUS.</translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation>Wtyczka umożliwiająca załadowanie dowolnego efektu VST wewnątrz LMMS.</translation>
- </message>
- <message>
<source>Additive Synthesizer for organ-like sounds</source>
<translation>Syntezator Addytywny umożliwiający stworzenie dźwięków zbliżonych brzmieniem do organów.</translation>
</message>
<message>
- <source>plugin for boosting bass</source>
- <translation>Wtyczka polepszająca brzmienie basu.</translation>
- </message>
- <message>
<source>Tuneful things to bang on</source>
<translation>Melodyjny instrument pałeczkowy.</translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>Prosty sampler z różnymi ustawieniami pozwalający na wstawienie sampli bezpośrednio na ścieżki.</translation>
- </message>
- <message>
<source>VST-host for using VST(i)-plugins within LMMS</source>
<translation>Host VST pozwalający na użycie wtyczek VST(i) w LMMS.</translation>
</message>
@@ -5423,6 +6999,62 @@ Te układy scalone były stosowane w komputerach Commodore 64.</translation>
<source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>projectNotes</name>
@@ -6122,153 +7754,6 @@ Latencja: %2 ms</translation>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation>Edytor Kompozycji</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Odtwórz piosenkę (Spacja)</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Kliknij tutaj, jeśli chcesz odtworzyć całą piosenkę. Odtwarzanie rozpocznie się od zielonego znacznika pozycji. Możesz go przemieszczać w trakcie odtwarzania.</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Zatrzymaj odtwarzanie piosenki (Spacja)</translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Kliknij tutaj, jeśli chcesz zatrzymać odtwarzanie piosenki. Znacznik pozycji zostanie ustawiony na początek utworu.</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Dodaj linię basową/perkusyjną</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Dodaj ścieżkę z samplami</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>Nie można otworzyć pliku</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>Nie można zapisać pliku</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation>Dodaj ścieżkę automatyki</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>Tryb rysowania</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>Tryb edycji (zaznaczanie i przemieszczanie)</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation>Nagraj sample z urządzenia audio</translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation>Nagrywa sample z urządzenia audio podczas odtwarzania piosenki lub ścieżki perkusji/basu</translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation>Nie da się otworzyć pliku %1. Prawdopodobnie nie posiadasz uprawnień do odczytu tego pliku.
-Upewnij się, że masz przynajmniej uprawnienia odczytu tego pliku a następnie spróbuj ponownie.</translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation>Błąd w pliku</translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation>Wygląda na to, że plik %1 zawiera błędy i nie może zostać załadowany.</translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation>Tempo</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation>TEMPO/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation>tempo piosenki</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation>Tempo piosenki jest wyrażane w uderzeniach na minutę (BPM, Beats Per Minute). Jeśli chcesz zmienić szybkość swojej piosenki zmodyfikuj tę wartość. Każdy takt zawiera cztery uderzenia, stąd tempo w BPM wyraża jak wiele taktów / 4 powinno być odtworzone w ciągu minuty (albo - jeśli wolisz - jak wiele taktów ma być odtworzonych w ciągu 4 minut).</translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation>Tryb wysokiej jakości</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation>Głośność główna</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation>głośność główna</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation>Odstrojenie główne</translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation>odstrojenie główne</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation>Wartość: %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation>Wartość: %1 półtonów</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Spektrum skalowane liniowo</translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation>Oś Y skalowana liniowo</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Spektrum skalowane liniowo</translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation>Oś Y skalowana liniowo</translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation>Tryb kanału</translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6454,6 +7939,18 @@ Upewnij się, że masz przynajmniej uprawnienia odczytu tego pliku a następnie
<source>Remove this track</source>
<translation>Usuń tę ścieżkę</translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6788,4 +8285,74 @@ Kontrolka LED w prawym dolnym rogu edytora kształtu fali pokazuje, czy wybrana
<translation>Test głosu %1</translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/pt.qm b/data/locale/pt.qm
index 6f1c4cb..44388c4 100644
Binary files a/data/locale/pt.qm and b/data/locale/pt.qm differ
diff --git a/data/locale/pt.ts b/data/locale/pt.ts
index 2675b99..4faddbb 100644
--- a/data/locale/pt.ts
+++ b/data/locale/pt.ts
@@ -2,1363 +2,1422 @@
<!DOCTYPE TS>
<TS version="2.0" language="pt_BR">
<context>
- <name>VstPlugin</name>
+ <name>AboutDialog</name>
<message>
- <source>"</source>
- <translation></translation>
+ <source>About</source>
+ <translation>Sobre</translation>
</message>
<message>
- <source>'</source>
- <translation></translation>
+ <source>License</source>
+ <translation>Licença</translation>
</message>
<message>
- <source>.FXB</source>
- <translation></translation>
+ <source>Authors</source>
+ <translation>Autores</translation>
</message>
<message>
- <source>.FXP</source>
- <translation></translation>
+ <source>Translation</source>
+ <translation>Tradução</translation>
</message>
<message>
- <source>.fxb</source>
- <translation></translation>
+ <source>About LMMS</source>
+ <translation>Sobre LMMS</translation>
</message>
<message>
- <source>.fxp</source>
- <translation></translation>
+ <source>LMMS - easy music production for everyone</source>
+ <translation>LMMS - produção musical fácil para todos</translation>
</message>
<message>
- <source>Loading plugin</source>
- <translation>Carregando plugin</translation>
+ <source>Copyright (c) 2004-2014, LMMS developers</source>
+ <translation>Copyright (c) 2004-2014, LMMS developers</translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation>Por favor, espere enquanto carrego o plugin VST...</translation>
+ <source>Version %1 (%2/%3, Qt %4, %5)</source>
+ <translation>Versão %1 (%2/%3, Qt %4, %5)</translation>
</message>
<message>
- <source>Save Preset</source>
- <translation>Salvar pré definição</translation>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></translation>
</message>
<message>
- <source>Open Preset</source>
- <translation>Abrir pré definição</translation>
+ <source>Current language not translated (or native English).
+
+If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer!</source>
+ <translation>Este programa foi traduzido para o idioma português de forma voluntária.
+
+Qualquer sugestão para tradução, entre em contato pela lista de desenvolvedores do LMMS ou pelo meu email: <emviveros/arroba/users/ponto/sourceforge/ponto/net>. Sua contribuição é muito bem vinda!
+
+Esteban Viveros</translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
- <translation>Pré definição de Plugin VST (*.fxp *.fxb)</translation>
+ <source>LMMS</source>
+ <translation type="unfinished">LMMS</translation>
</message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation>O plugin VST %1 não pode ser carregado por alguma razão.
-Se ele rodar com outro programa VST no Linux, por favor entre em contato com um desenvolvedor do LMMS!</translation>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
</message>
<message>
- <source>: default</source>
- <translation>: padrão</translation>
+ <source>Volume:</source>
+ <translation type="unfinished">Volume:</translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation>Falha ao carregar plugin VST</translation>
+ <source>PAN</source>
+ <translation type="unfinished">PAN</translation>
</message>
-</context>
-<context>
- <name>InstrumentFunctionArpeggioView</name>
<message>
- <source>%</source>
- <translation>%</translation>
+ <source>Panning:</source>
+ <translation type="unfinished">Panorâmico:</translation>
</message>
<message>
- <source>ms</source>
- <translation>ms</translation>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>GATE</source>
- <translation>PORTAL</translation>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>TIME</source>
- <translation>TEMPO</translation>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mode:</source>
- <translation>Modo:</translation>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>AmplifierControls</name>
<message>
- <source>RANGE</source>
- <translation>EXTENSÃO</translation>
+ <source>Volume</source>
+ <translation type="unfinished">Volume</translation>
</message>
<message>
- <source>Arpeggio range:</source>
- <translation>Extensão do arpejo:</translation>
+ <source>Panning</source>
+ <translation type="unfinished">Panorâmico</translation>
</message>
<message>
- <source>Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.</source>
- <translation>Use este botão para ajustar o portal de arpejo. O Portal de arpejo especifica o quanto deve ser tocado o arpejo. Isto permite que você faça arpejos stacatos bem legais.</translation>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.</source>
- <translation>Use este botão para escolher a extensão do arpejo em oitavas. O arpejo selecionado será tocado dentro do número de oitavas especificado.</translation>
+ <source>Right gain</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>AudioAlsa::setupWidget</name>
<message>
- <source>Chord:</source>
- <translation>Acorde:</translation>
+ <source>DEVICE</source>
+ <translation>DISPOSITIVO</translation>
</message>
<message>
- <source>ARPEGGIO</source>
- <translation>ARPEGIO</translation>
+ <source>CHANNELS</source>
+ <translation>CANAIS</translation>
</message>
+</context>
+<context>
+ <name>AudioFileProcessorView</name>
<message>
- <source>Arpeggio gate:</source>
- <translation>Portal de arpejo:</translation>
+ <source>Open other sample</source>
+ <translation>Abrir outra amostra</translation>
</message>
<message>
- <source>Arpeggio time:</source>
- <translation>Tempo de arpejo:</translation>
+ <source>If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.</source>
+ <translation>Se você ativar este botão, toda a amostra será invertida. Isto é útil para fazer uns efeitos legais, ex. um ruído elétrico ao contrário.</translation>
</message>
<message>
- <source>Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.</source>
- <translation>Use este botão para ajustar o tempo de arpejo em milissegundos. O tempo do arpejar especifica qual longo cada nota do arpejo será tocada.</translation>
+ <source>Continue sample playback across notes</source>
+ <translation>Continua a tocar a amostra entre as notas</translation>
</message>
<message>
- <source>An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.</source>
- <translation>Arpegio é uma técnica instrumental (especialmente para instrumentos musicais de cordas pinçadas - Violão, Viola Caipira, Contra-baixo, etc) que consiste em tocar repetidamente uma série de notas. Quando pinçamos mais de uma corda ao mesmo tempo em um violão por exemplo, podemos criar um acorde, no arpegio, podemos tocar as notas de um acorde em tempos diferentes, nunca ao mesmo tempo. Arpegios típicos são os das triades mair e menor, mas é possivel arpejar qualquer a [...]
+ <source>Amplify:</source>
+ <translation>Amplificar:</translation>
</message>
<message>
- <source>octave(s)</source>
- <translation>oitava(s)</translation>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <translation>Ativando esta opção a amostra continuará tocando entre diferentes notas - se você mudar a altura, ou o comprimento da nota antes do fim da amostra, a próxima nota irá continuar onde a anterior parou. Para retornar a reprodução a partir do começo, utilize uma nota na parte inferior do teclado (< 20 Hz)</translation>
</message>
<message>
- <source>Direction:</source>
- <translation>Direção:</translation>
+ <source>Startpoint:</source>
+ <translation>Ponto de início:</translation>
</message>
-</context>
-<context>
- <name>InstrumentFunctionNoteStacking</name>
<message>
- <source>6</source>
- <translation></translation>
+ <source>Reverse sample</source>
+ <translation>Inverter amostra</translation>
</message>
<message>
- <source>7</source>
- <translation>7</translation>
+ <source>Endpoint:</source>
+ <translation>Ponto final:</translation>
</message>
<message>
- <source>9</source>
- <translation>9</translation>
+ <source>Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.</source>
+ <translation>Clique aqui se você precisa abrir outro arquivo de áudio. O diálogo irá aparecer você puder selecionar seu arquivo. Configurações como modo de loop, ponto de início e de final, valor de amplificação, e todo o resto não serão resetados. Mas não vai mais soar como a amostra original.</translation>
</message>
<message>
- <source>11</source>
- <translation>11</translation>
+ <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <translation>Bom este botão você pode aumentar a proporção.Quando você coloca um valor de 100% sua amostra não mudará. De outro maneira ela será amplificada para mais ou para menos (o arquivo original da amostra não será modificado!)</translation>
</message>
<message>
- <source>13</source>
- <translation>13</translation>
+ <source>Disable loop</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>m6</source>
- <translation>m6</translation>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>m7</source>
- <translation>m7</translation>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>m9</source>
- <translation>m9</translation>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>7#5</source>
- <translation>7(#5)</translation>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>7#9</source>
- <translation>7(#9)</translation>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>9#5</source>
- <translation>(9, #5)</translation>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>7b5</source>
- <translation>7(b5)</translation>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>7b9</source>
- <translation>7(b9)</translation>
+ <source>With this knob you can set the point where the loop starts. </source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>AudioFileProcessorWaveView</name>
<message>
- <source>9b5</source>
- <translation>(9, b5)</translation>
+ <source>Sample length:</source>
+ <translation>Tamanho da amostra:</translation>
</message>
+</context>
+<context>
+ <name>AudioJack</name>
<message>
- <source>aug</source>
- <translation>aum</translation>
+ <source>JACK server down</source>
+ <translation>O servidor JACK caiu</translation>
</message>
<message>
- <source>m11</source>
- <translation>m(11)</translation>
+ <source>JACK client restarted</source>
+ <translation>Cliente JACK reiniciado</translation>
</message>
<message>
- <source>m13</source>
- <translation>m(13)</translation>
+ <source>LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again.</source>
+ <translation>LMMS foi chutado pelo JACK por alguma razão. Logo que o JACK restaure a comunicação com o LMMS você poderá precisar fazer as conexões manualmente.</translation>
</message>
<message>
- <source>tri</source>
- <translation>tríade</translation>
+ <source>The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS.</source>
+ <translation>O servidor de áudio JACK parece ter caído e ao reiniciar uma nova instância falhou. De qualquer maneira LMMS é capaz de prosseguir. Certifique-se de salvar seu projeto e reiniciar primeiro o JACK depois o LMMS.</translation>
</message>
+</context>
+<context>
+ <name>AudioJack::setupWidget</name>
<message>
- <source>13#9</source>
- <translation>13(#9)</translation>
+ <source>CLIENT-NAME</source>
+ <translation>NOME-DO-CLIENTE</translation>
</message>
<message>
- <source>11b9</source>
- <translation>11(b9)</translation>
+ <source>CHANNELS</source>
+ <translation>CANAIS</translation>
</message>
+</context>
+<context>
+ <name>AudioOss::setupWidget</name>
<message>
- <source>13b9</source>
- <translation>13(b9)</translation>
+ <source>DEVICE</source>
+ <translation>DISPOSITIVO</translation>
</message>
<message>
- <source>7#11</source>
- <translation>7(#11)</translation>
+ <source>CHANNELS</source>
+ <translation>CANAIS</translation>
</message>
+</context>
+<context>
+ <name>AudioPortAudio::setupWidget</name>
<message>
- <source>9#11</source>
- <translation>(9, #11)</translation>
+ <source>DEVICE</source>
+ <translation>DISPOSITIVO</translation>
</message>
<message>
- <source>9b13</source>
- <translation>(b9, 13)</translation>
+ <source>BACKEND</source>
+ <translation>BACKEND</translation>
</message>
+</context>
+<context>
+ <name>AudioPulseAudio::setupWidget</name>
<message>
- <source>Maj7</source>
- <translation>7M</translation>
+ <source>DEVICE</source>
+ <translation>DISPOSITIVO</translation>
</message>
<message>
- <source>Maj9</source>
- <translation>9M</translation>
+ <source>CHANNELS</source>
+ <translation>CANAIS</translation>
</message>
+</context>
+<context>
+ <name>AudioSdl::setupWidget</name>
<message>
- <source>add9</source>
- <translation>(9)</translation>
+ <source>DEVICE</source>
+ <translation>DISPOSITIVO</translation>
</message>
+</context>
+<context>
+ <name>AutomatableModel</name>
<message>
- <source>m7b5</source>
- <translation>m7(b5)</translation>
+ <source>Connected to %1</source>
+ <translation>Conectado a %1</translation>
</message>
<message>
- <source>m7b9</source>
- <translation>m7(b9)</translation>
+ <source>Remove song-global automation</source>
+ <translation>Apagar automação global da música</translation>
</message>
<message>
- <source>m9b5</source>
- <translation>m(9, b5)</translation>
+ <source>Edit connection...</source>
+ <translation>Editar conexão...</translation>
</message>
<message>
- <source>sus2</source>
- <translation>sus2</translation>
+ <source>&Copy value (%1%2)</source>
+ <translation>&Copiar valor (%1%2)</translation>
</message>
<message>
- <source>sus4</source>
- <translation>sus4</translation>
+ <source>Remove connection</source>
+ <translation>Apagar conexão</translation>
</message>
<message>
- <source>m-Maj11</source>
- <translation>m (11M)</translation>
+ <source>&Reset (%1%2)</source>
+ <translation>&Resetar (%1%2)</translation>
</message>
<message>
- <source>m-Maj13</source>
- <translation>m (13M)</translation>
+ <source>Connected to controller</source>
+ <translation>Conectado ao controlador</translation>
</message>
<message>
- <source>Dominant bebop</source>
- <translation>Bebop dominante</translation>
+ <source>Edit song-global automation</source>
+ <translation>Editar automação global da música</translation>
</message>
<message>
- <source>7#5#9</source>
- <translation>7(#5, #9)</translation>
+ <source>Connect to controller...</source>
+ <translation>Conectado ao controlador...</translation>
</message>
<message>
- <source>7#5b9</source>
- <translation>7(#5, b9)</translation>
+ <source>Remove all linked controls</source>
+ <translation>Apagar todos os controles linkados</translation>
</message>
<message>
- <source>6add9</source>
- <translation>6(9)</translation>
+ <source>&Paste value (%1%2)</source>
+ <translation>C&olar valor (%1%2)</translation>
</message>
+</context>
+<context>
+ <name>AutomationEditor</name>
<message>
- <source>7b5b9</source>
- <translation>7(b5, b9)</translation>
+ <source>Automation Editor - %1</source>
+ <translation>Editor de Automação - %1</translation>
</message>
<message>
- <source>6sus4</source>
- <translation></translation>
+ <source>All selected values were copied to the clipboard.</source>
+ <translation>Todos os valores selecionados foram copiados para a área de transferência.</translation>
</message>
<message>
- <source>7sus4</source>
- <translation>7 sus4</translation>
+ <source>Please open an automation pattern with the context menu of a control!</source>
+ <translation>Por favor, abra o sequenciador de automação com o menu de contexto do controle!</translation>
</message>
<message>
- <source>9sus4</source>
- <translation>9 sus4</translation>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Lápis (Shift+D)</translation>
</message>
<message>
- <source>Blues</source>
- <translation>Blues</translation>
+ <source>Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.</source>
+ <translation>Clique aqui para selecionar progressão cúbica hermite-progressions para este sequenciador de automação. O valor do objeto conectado irá mudar em curva e suavemente entre picos e vales.</translation>
</message>
<message>
- <source>Maj11</source>
- <translation>Acorde de 11</translation>
+ <source>Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.</source>
+ <translation>Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis.</translation>
</message>
<message>
- <source>Maj13</source>
- <translation>13M</translation>
+ <source>Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation>Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.</translation>
</message>
<message>
- <source>Majb5</source>
- <translation>Maior b5</translation>
+ <source>Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Clique aqui para cortar valores para a área de transferência. Você pode colar os valores em qualquer sequência utilizando o botão de colar.</translation>
</message>
<message>
- <source>Major</source>
- <translation>Maior</translation>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Borracha (Shift+E)</translation>
</message>
<message>
- <source>Minor</source>
- <translation>Menor</translation>
+ <source>Automation Editor - no pattern</source>
+ <translation>Editor de Automação - sem sequência</translation>
</message>
<message>
- <source>Diminished</source>
- <translation>Diminuta</translation>
+ <source>Cut selected values (Ctrl+X)</source>
+ <translation>Cortar (Ctrl+X)</translation>
</message>
<message>
- <source>madd9</source>
- <translation>m(9)</translation>
+ <source>Copy selected values (Ctrl+C)</source>
+ <translation>Copiar (Ctrl+C)</translation>
</message>
<message>
- <source>minb5</source>
- <translation>menor b5</translation>
+ <source>Tension: </source>
+ <translation>Tensão: </translation>
</message>
<message>
- <source>minor</source>
- <translation>menor</translation>
+ <source>Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.</source>
+ <translation>Clique aqui se você quiser tocar a sequência atual. Isto é útil enquanto se está editando. A sequência entra em loop automaticamente quando chega ao fim.</translation>
</message>
<message>
- <source>m9-Maj7</source>
- <translation>m(9,7M)</translation>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Tocar/pausar a sequência atual (Espaço)</translation>
</message>
<message>
- <source>m7add11</source>
- <translation>m7(11)</translation>
+ <source>Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.</source>
+ <translation>Clique aqui para selecionar progressões discretas para este sequenciador de automação. O valor do objeto conectado permanecerá constante entre os pontos de controle e será substituido por um novo valor assim que um novo ponto de controle for assinalado.</translation>
</message>
<message>
- <source>m7add13</source>
- <translation>m7(13)</translation>
+ <source>Click here and the values from the clipboard will be pasted at the first visible measure.</source>
+ <translation>Clique aqui e os valores na área de transferência serão colados no primeiro limite visível.</translation>
</message>
<message>
- <source>Phrygolydian</source>
- <translation>Frígio</translation>
+ <source>Linear progression</source>
+ <translation>Progressão linear</translation>
</message>
<message>
- <source>Whole tone</source>
- <translation>Tons inteiros</translation>
+ <source>Click here if you want to stop playing of the current pattern.</source>
+ <translation>Clique aqui se você que parar a reprodução da sequência atual.</translation>
</message>
<message>
- <source>13b5b9</source>
- <translation>13(b5, b9)</translation>
+ <source>Values copied</source>
+ <translation>Valores copiados</translation>
</message>
<message>
- <source>Locrian</source>
- <translation>Lócrio</translation>
+ <source>Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Clique aqui para copiar valores para a área de transferência. Você pode copiar os valores de qualquer sequência utilizando o botão de colar.</translation>
</message>
<message>
- <source>Maj7#11</source>
- <translation>7M(#11)</translation>
+ <source>Cubic Hermite progression</source>
+ <translation>Cúbica - Hermite progression</translation>
</message>
<message>
- <source>Maj9#11</source>
- <translation>9M(#11)</translation>
+ <source>Tension value for spline</source>
+ <translation>Valor de tensão para os estriados</translation>
</message>
<message>
- <source>7add11</source>
- <translation>7(11)</translation>
+ <source>Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.</source>
+ <translation>Clique aqui para selecionar progressões lineares para este sequenciador de automação. O valor do objeto conectado variará de forma constante entre os pontos de controle assinalados.</translation>
</message>
<message>
- <source>7add13</source>
- <translation>7(13)</translation>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Parar de tocar a sequência atual (Espaço)</translation>
</message>
<message>
- <source>Major bebop</source>
- <translation>Bebop maior</translation>
+ <source>A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.</source>
+ <translation>Um valor de tensão alto irá fazer suave a curva mas também extrapolará alguns valores. Um valor de tensão baixa irá causar um declive na curva de volume para cada ponto de controle.</translation>
</message>
<message>
- <source>Arabic</source>
- <translation>Árabe</translation>
+ <source>Paste values from clipboard (Ctrl+V)</source>
+ <translation>Colar (Ctrl+V)</translation>
</message>
<message>
- <source>Chords</source>
- <translation>Acordes</translation>
+ <source>Discrete progression</source>
+ <translation>Progressão discreta</translation>
</message>
+</context>
+<context>
+ <name>AutomationPattern</name>
<message>
- <source>Dorian</source>
- <translation>Dório</translation>
+ <source>Drag a control while pressing <Ctrl></source>
+ <translation>Arraste o controle enquanto pressiona a tecla <Ctrl></translation>
</message>
<message>
- <source>Hungarian minor</source>
- <translation>Húngara menor</translation>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>AutomationPatternView</name>
<message>
- <source>Maj7#5</source>
- <translation>7M(#5)</translation>
+ <source>Clear</source>
+ <translation>Limpar</translation>
</message>
<message>
- <source>Maj9#5</source>
- <translation>9M(#5)</translation>
+ <source>Open in Automation editor</source>
+ <translation>Abra dentro do Editor de Automação</translation>
</message>
<message>
- <source>Maj7b5</source>
- <translation>7M(b5)</translation>
+ <source>Disconnect "%1"</source>
+ <translation>Desconectar "%1"</translation>
</message>
<message>
- <source>Lydian</source>
- <translation>Lídio</translation>
+ <source>double-click to open this pattern in automation editor</source>
+ <translation>dois cliques para abrir esta sequência no editor de automação</translation>
</message>
<message>
- <source>Chord range</source>
- <translation>Extensão do acorde</translation>
+ <source>%1 Connections</source>
+ <translation>%1 Conexões</translation>
</message>
<message>
- <source>Mixolydian</source>
- <translation>Mixolídio</translation>
+ <source>Reset name</source>
+ <translation>Restaurar nome</translation>
</message>
<message>
- <source>Melodic minor</source>
- <translation>Menor Melódica</translation>
+ <source>Change name</source>
+ <translation>Mudar nome</translation>
</message>
<message>
- <source>m-Maj7</source>
- <translation>m-7M</translation>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Armar/desarmar gravação</translation>
</message>
+</context>
+<context>
+ <name>AutomationTrack</name>
<message>
- <source>Jap in sen</source>
- <translation>Insen Japonesa</translation>
+ <source>Automation track</source>
+ <translation>Pista de Automação</translation>
</message>
+</context>
+<context>
+ <name>BassBoosterControlDialog</name>
<message>
- <source>m6add9</source>
- <translation>m6(9)</translation>
+ <source>FREQ</source>
+ <translation type="unfinished">FREQ</translation>
</message>
<message>
- <source>Neopolitan minor</source>
- <translation>Neopolitana menor</translation>
+ <source>Frequency:</source>
+ <translation type="unfinished">Frequência:</translation>
</message>
<message>
- <source>octave</source>
- <translation>oitava</translation>
+ <source>GAIN</source>
+ <translation type="unfinished">GANHO</translation>
</message>
<message>
- <source>Neopolitan</source>
- <translation>Napolitana</translation>
+ <source>Gain:</source>
+ <translation type="unfinished">Ganho:</translation>
</message>
<message>
- <source>Aeolian</source>
- <translation>Eólio</translation>
+ <source>RATIO</source>
+ <translation type="unfinished">RAZÃO</translation>
</message>
<message>
- <source>Maj9sus4</source>
- <translation>9M sus4</translation>
+ <source>Ratio:</source>
+ <translation type="unfinished">Razão:</translation>
</message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
<message>
- <source>Chord type</source>
- <translation>Tipo de acorde</translation>
+ <source>Frequency</source>
+ <translation type="unfinished">Frequência</translation>
</message>
<message>
- <source>augsus4</source>
- <translation>aum sus4</translation>
+ <source>Gain</source>
+ <translation type="unfinished">Ganho</translation>
</message>
<message>
- <source>Major pentatonic</source>
- <translation>Pentatônica maior</translation>
+ <source>Ratio</source>
+ <translation type="unfinished">Razão</translation>
</message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
<message>
- <source>Minor pentatonic</source>
- <translation>Pentatônica menor</translation>
+ <source>Show GUI</source>
+ <translation type="unfinished">Mostrar GUI</translation>
</message>
<message>
- <source>m-Maj7add11</source>
- <translation>m-7M(11)</translation>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>Controller</name>
<message>
- <source>m-Maj7add13</source>
- <translation>m-7M(13)</translation>
+ <source>Controller %1</source>
+ <translation>Controlador %1</translation>
</message>
+</context>
+<context>
+ <name>ControllerConnectionDialog</name>
<message>
- <source>Maj7add13</source>
- <translation>7M(13)</translation>
+ <source>OK</source>
+ <translation>OK</translation>
</message>
<message>
- <source>Harmonic minor</source>
- <translation>Menor Harmônica</translation>
+ <source>LMMS</source>
+ <translation>LMMS</translation>
</message>
<message>
- <source>Enigmatic</source>
- <translation>Enigmática</translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <source>A</source>
- <translation></translation>
- </message>
- <message>
- <source>B</source>
- <translation></translation>
+ <source>Cycle Detected.</source>
+ <translation>Ciclo Detectado.</translation>
</message>
<message>
- <source>C</source>
- <translation></translation>
+ <source>MIDI CONTROLLER</source>
+ <translation>CONTROLADOR MIDI</translation>
</message>
<message>
- <source>D</source>
- <translation></translation>
+ <source>USER CONTROLLER</source>
+ <translation>CONTROLADOR DO USUÁRIO</translation>
</message>
<message>
- <source>E</source>
- <translation></translation>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
</message>
<message>
- <source>G</source>
- <translation></translation>
+ <source>Auto Detect</source>
+ <translation>Auto detectar</translation>
</message>
<message>
- <source>A#</source>
- <translation></translation>
+ <source>CHANNEL</source>
+ <translation>CANAL</translation>
</message>
<message>
- <source>C#</source>
- <translation></translation>
+ <source>Input controller</source>
+ <translation>Entrada do controlador</translation>
</message>
<message>
- <source>D#</source>
- <translation></translation>
+ <source>CONTROLLER</source>
+ <translation>CONTROLADOR</translation>
</message>
<message>
- <source>Ab</source>
- <translation></translation>
+ <source>Input channel</source>
+ <translation>Canal de entrada</translation>
</message>
<message>
- <source>Bb</source>
- <translation></translation>
+ <source>Connection Settings</source>
+ <translation>Configuração das Conexões</translation>
</message>
<message>
- <source>F#</source>
- <translation></translation>
+ <source>MIDI-devices to receive MIDI-events from</source>
+ <translation>Dispositivos MIDI para receber eventos MIDI de</translation>
</message>
<message>
- <source>G#</source>
- <translation></translation>
+ <source>MAPPING FUNCTION</source>
+ <translation>MAPEAR FUNÇÃO</translation>
</message>
+</context>
+<context>
+ <name>ControllerRackView</name>
<message>
- <source>Db</source>
- <translation></translation>
+ <source>Add</source>
+ <translation>Adicionar</translation>
</message>
<message>
- <source>Eb</source>
- <translation></translation>
+ <source>Confirm Delete</source>
+ <translation>Confirmação para Apagar</translation>
</message>
<message>
- <source>Fb</source>
- <translation></translation>
+ <source>Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo.</source>
+ <translation>Posso mesmo apagar? Há uma ou mais conexões associadas a este controlador. Não há como voltar depois.</translation>
</message>
<message>
- <source>Gb</source>
- <translation></translation>
+ <source>Controller Rack</source>
+ <translation>Estante de Controladores</translation>
</message>
</context>
<context>
- <name>ExportProjectDialog</name>
+ <name>ControllerView</name>
<message>
- <source>2x</source>
- <translation>2x</translation>
+ <source>&Help</source>
+ <translation>Aj&uda</translation>
</message>
<message>
- <source>4x</source>
- <translation>4x</translation>
+ <source>Controls</source>
+ <translation>Controles</translation>
</message>
<message>
- <source>8x</source>
- <translation>8x</translation>
+ <source>Enter the new name for this controller</source>
+ <translation>Adicione um novo nome para este controlador</translation>
</message>
<message>
- <source>Sinc Best (very slow!)</source>
- <translation>Sincronização Melhor (muito lenta)</translation>
+ <source>Rename controller</source>
+ <translation>Renomear controlador</translation>
</message>
<message>
- <source>Start</source>
- <translation>Começar</translation>
+ <source>Controllers are able to automate the value of a knob, slider, and other controls.</source>
+ <translation>Os controladores estão prontos para alterar o valor de botões, barras deslizantes e outros controles automaticamente.</translation>
</message>
<message>
- <source>Bitrate:</source>
- <translation>Velocidade em bits:</translation>
+ <source>&Remove this plugin</source>
+ <translation>&Remova este plugin</translation>
</message>
+</context>
+<context>
+ <name>DualFilterControlDialog</name>
<message>
- <source>Samplerate:</source>
- <translation>Taxa de Amostragem:</translation>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>1x (None)</source>
- <translation>1x (Nada)</translation>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Oversampling (use with care!):</source>
- <translation>Sobreamostragem (use com cuidado):</translation>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel</source>
- <translation>Cancelar</translation>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>DualFilterControls</name>
<message>
- <source>Depth:</source>
- <translation>Precisão:</translation>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>64 KBit/s</source>
- <translation>64 KBit/s</translation>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>128 KBit/s</source>
- <translation>128 KBit/s</translation>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>192 KBit/s</source>
- <translation>192 KBit/s</translation>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>160 KBit/s</source>
- <translation>160 KBit/s</translation>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>256 KBit/s</source>
- <translation>256 KBit/s</translation>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>320 KBit/s</source>
- <translation>320 KBit/s</translation>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>32 Bit Float</source>
- <translation>32 Bits Decimal</translation>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>192000 Hz</source>
- <translation>192000 Hz</translation>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Zero Order Hold</source>
- <translation>Retentor de Ordem Zero</translation>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Output</source>
- <translation>Saída</translation>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please note that not all of the parameters above apply for all file formats.</source>
- <translation>Por favor, note que os parâmetros acima se aplicam para todos os tipos de arquivos.</translation>
+ <source>LowPass</source>
+ <translation type="unfinished">Passa Baixa</translation>
</message>
<message>
- <source>Interpolation:</source>
- <translation>Interpolação:</translation>
+ <source>HiPass</source>
+ <translation type="unfinished">Passa Alta</translation>
</message>
<message>
- <source>44100 Hz</source>
- <translation>44100 Hz</translation>
+ <source>BandPass csg</source>
+ <translation type="unfinished">Passa Banda csg</translation>
</message>
<message>
- <source>16 Bit Integer</source>
- <translation>16 Bits Inteiro</translation>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">Passa Banda czpg</translation>
</message>
<message>
- <source>Export project</source>
- <translation>Renderizar projeto</translation>
+ <source>Notch</source>
+ <translation type="unfinished">Vale</translation>
</message>
<message>
- <source>Sinc Fastest</source>
- <translation>Sincronização Rápida</translation>
+ <source>Allpass</source>
+ <translation type="unfinished">Passa todas</translation>
</message>
<message>
- <source>96000 Hz</source>
- <translation>96000 Hz</translation>
+ <source>Moog</source>
+ <translation type="unfinished">Moog</translation>
</message>
<message>
- <source>File format:</source>
- <translation>Formato do arquivo:</translation>
+ <source>2x LowPass</source>
+ <translation type="unfinished">2x Passa Baixa</translation>
</message>
<message>
- <source>48000 Hz</source>
- <translation>48000 Hz</translation>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished">RC PassaBaixa 12dB</translation>
</message>
<message>
- <source>88200 Hz</source>
- <translation>88200 Hz</translation>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished">RC PassaBanda 12dB</translation>
</message>
<message>
- <source>Sinc Medium (recommended)</source>
- <translation>Sincronização Média (recomendada)</translation>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished">RC PassaAlta 12dB</translation>
</message>
<message>
- <source>Alias-free oscillators</source>
- <translation>Oscilador livre de serrilhamento</translation>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished">RC PassaBaixa 24dB</translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translation>Controle de precisão da amostra</translation>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished">RC PassaBanda 24dB</translation>
</message>
<message>
- <source>Export as loop (remove end silence)</source>
- <translation>Renderizar como loop (remove silêncio no final)</translation>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished">RC PassaAlta 24dB</translation>
</message>
<message>
- <source>Quality settings</source>
- <translation>Configurações de qualidade</translation>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished">Filtro de Formante Vocal</translation>
</message>
</context>
<context>
- <name>ZynAddSubFxView</name>
- <message>
- <source>BW</source>
- <translation>LBnd</translation>
- </message>
+ <name>Effect</name>
<message>
- <source>RES</source>
- <translation></translation>
+ <source>Gate</source>
+ <translation>Portal</translation>
</message>
<message>
- <source>FREQ</source>
- <translation></translation>
+ <source>Decay</source>
+ <translation>Decaimento</translation>
</message>
<message>
- <source>PORT</source>
- <translation></translation>
+ <source>Effect enabled</source>
+ <translation>Efeito ativado</translation>
</message>
<message>
- <source>Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX.</source>
- <translation>Clique aqui para mostrar ou esconder a interface do usuário (GUI) do ZynAddSubFX.</translation>
+ <source>Wet/Dry mix</source>
+ <translation>Mix Processada/Limpa</translation>
</message>
+</context>
+<context>
+ <name>EffectChain</name>
<message>
- <source>Filter Frequency:</source>
- <translation>Frequência do Filtro:</translation>
+ <source>Effects enabled</source>
+ <translation>Efeitos ativados</translation>
</message>
+</context>
+<context>
+ <name>EffectRackView</name>
<message>
- <source>RES CF</source>
- <translation>RES FC</translation>
+ <source>Add effect</source>
+ <translation>Adicionar Efeito</translation>
</message>
<message>
- <source>RES BW</source>
- <translation>RES Bnd</translation>
+ <source>EFFECTS CHAIN</source>
+ <translation>CADEIA DE EFEITOS</translation>
</message>
+</context>
+<context>
+ <name>EffectSelectDialog</name>
<message>
- <source>Portamento:</source>
- <translation></translation>
+ <source>Add effect</source>
+ <translation>Adicionar Efeito</translation>
</message>
<message>
- <source>Resonance center frequency:</source>
- <translation>Frequência Central de Ressonância:</translation>
+ <source>Plugin description</source>
+ <translation>Descrição do plugin</translation>
</message>
+</context>
+<context>
+ <name>EffectView</name>
<message>
- <source>Filter Resonance:</source>
- <translation>Ressonância do Filtro:</translation>
+ <source>W/D</source>
+ <translation>P/L</translation>
</message>
<message>
- <source>FM GAIN</source>
- <translation>GANHO FM</translation>
+ <source>GATE</source>
+ <translation>PORTAL</translation>
</message>
<message>
- <source>Bandwidth:</source>
- <translation>Largura da Banda:</translation>
+ <source>&Help</source>
+ <translation>Aj&uda</translation>
</message>
<message>
- <source>Forward MIDI Control Changes</source>
- <translation>Próximo evento de mudança de controle MIDI</translation>
+ <source>DECAY</source>
+ <translation>DEC</translation>
</message>
<message>
- <source>Resonance bandwidth:</source>
- <translation>Banda de Ressonância:</translation>
+ <source>Gate:</source>
+ <translation>Portal:</translation>
</message>
<message>
- <source>FM Gain:</source>
- <translation>Ganho da FM:</translation>
+ <source>Time:</source>
+ <translation>Tempo:</translation>
</message>
<message>
- <source>Show GUI</source>
- <translation>Mostrar GUI</translation>
- </message>
-</context>
-<context>
- <name>opl2instrument</name>
- <message>
- <source>FM</source>
- <translation></translation>
+ <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
+
+The On/Off switch allows you to bypass a given plugin at any point in time.
+
+The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
+
+The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
+
+The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
+
+The Controls button opens a dialog for editing the effect's parameters.
+
+Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
+ <translation>Os plugins de efeitos terão o sinal processado de cima para baixo quando estiverem na cadeia de efeitos.
+
+O botão de Liga/Desliga permite que você pule o plugin selecionado a qualquer momento.
+
+O botão de Processado/Limpo controla a quantidade de processamento do efeito que vai para o sinal (som). A entrada de um plugin é a saída do plugin anterior. Então o sinal "Limpo" de um efeito posicionado na parte de baixo na cadeia conterá o processamento de todos os efeitos situados acima na cadeia.
+
+O botão de Decaimento controla quanto tempo o sinal continuará sendo processado após a nota não estar mais sendo apertada. O efeito irá parar o processamento quando o volume estiver abaixo de um limite dado um tempo específico. Tempos grandes precisarão de mais potência da CPU (processador), este número deverá ser pequeno para a maioria dos efeitos. Será necessário aumentar para efeitos que precisam ocupar períodos de silêncio como os efeitos de Atraso por exemplo...
+
+O botão de Portal (Gate) especificará o nível, o limite que o efeito parará de atuar. Por exemplo, um relógio começa a funcionar sempre que o nível de sinal estiver abaixo do especificado por este botão.
+
+O botão Controles abre uma caixa de diálogo para edição de parâmetros do efeito.
+
+Clicar com o botão direito no mouse irá exibir um menu de contexto onde você pode alterar a ordem em que os efeitos são processados ou também apagar um efeito, tudo ao mesmo tempo.</translation>
</message>
<message>
- <source>Patch</source>
- <translation>Programação</translation>
+ <source>Wet Level:</source>
+ <translation>Nível de Processamento:</translation>
</message>
<message>
- <source>Op 1 Key Scaling Rate</source>
- <translation>Op 1 Mudança de Tom da Escala</translation>
+ <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
+ <translation>O botão de Decaimento controla quanto tempo demora até que o processamento seja interrompido. Valores pequenos irão reduzir o consumo de CPU mas em contrapartida você correrá o risco de saturar o final do sinal ao utilizar efeitos de reverberação e atraso (delay).</translation>
</message>
<message>
- <source>Op 2 Key Scaling Rate</source>
- <translation>Op 2 Mudança de Tom da Escala</translation>
+ <source>On/Off</source>
+ <translation>Liga/Desliga</translation>
</message>
<message>
- <source>Op 1 Decay</source>
- <translation>Op 1 Decaimento</translation>
+ <source>Controls</source>
+ <translation>Controles</translation>
</message>
<message>
- <source>Op 1 Level</source>
- <translation>Op 1 Nível</translation>
+ <source>Move &up</source>
+ <translation>Para &Cima</translation>
</message>
<message>
- <source>Op 2 Decay</source>
- <translation>Op 2 Decaimento</translation>
+ <source>Move &down</source>
+ <translation>Para &Baixo</translation>
</message>
<message>
- <source>Op 2 Level</source>
- <translation>Op 2 Nível</translation>
+ <source>Toggles the effect on or off.</source>
+ <translation>Mantém o efeito ligado ou desligado.</translation>
</message>
<message>
- <source>Op 1 Attack</source>
- <translation>Op 1 Ataque</translation>
+ <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
+ <translation>O botão de Processado/Limpo especifica a quantidade de sinal de entrada que será afetado pelo efeito.</translation>
</message>
<message>
- <source>Op 2 Attack</source>
- <translation>Op 2 Ataque</translation>
+ <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
+ <translation>O botão Portal (Gate) controla a passagem de sínal de acordo no o seu nível de intensidade (volume). o que estiver acima no nível definido passa, se o nível for menor que o definido haverá silêncio.</translation>
</message>
<message>
- <source>Op 1 Vibrato</source>
- <translation></translation>
+ <source>&Remove this plugin</source>
+ <translation>&Remover este plugin</translation>
</message>
+</context>
+<context>
+ <name>EnvelopeAndLfoParameters</name>
<message>
- <source>Op 2 Vibrato</source>
- <translation></translation>
+ <source>Hold</source>
+ <translation>Espera</translation>
</message>
<message>
- <source>Tremolo Depth</source>
- <translation>Profundidade do Tremolo</translation>
+ <source>Decay</source>
+ <translation>Decaimento</translation>
</message>
<message>
- <source>Op 2 Frequency Multiple</source>
- <translation>Op 2 Múltiplo da frequência</translation>
+ <source>LFO Modulation</source>
+ <translation>LFO - Modulação</translation>
</message>
<message>
- <source>Op 1 Frequency Multiple</source>
- <translation>Op 1 Múltiplo da frequência</translation>
+ <source>LFO speed</source>
+ <translation>LFO - Velocidade</translation>
</message>
<message>
- <source>Op 1 Feedback</source>
- <translation>Op 1 Resposta</translation>
+ <source>Freq x 100</source>
+ <translation>Freq x 100</translation>
</message>
<message>
- <source>Vibrato Depth</source>
- <translation>Profundidade do Vibrato</translation>
+ <source>Attack</source>
+ <translation>Ataque</translation>
</message>
<message>
- <source>Op 1 Release</source>
- <translation>Op 1 Relaxamento</translation>
+ <source>LFO Attack</source>
+ <translation>LFO - Ataque</translation>
</message>
<message>
- <source>Op 2 Release</source>
- <translation>Op 2 Relaxamento</translation>
+ <source>Predelay</source>
+ <translation>Pré-atraso</translation>
</message>
<message>
- <source>Op 1 Level Scaling</source>
- <translation>Op 1 Nível Escalar</translation>
+ <source>Release</source>
+ <translation>Relaxamento</translation>
</message>
<message>
- <source>Op 2 Level Scaling</source>
- <translation>Op 2 Nível Escalar</translation>
+ <source>Sustain</source>
+ <translation>Sustentação</translation>
</message>
<message>
- <source>Op 2 Percussive Envelope</source>
- <translation>Op 2 Envelope Percussivo</translation>
+ <source>Modulation</source>
+ <translation>Modulação</translation>
</message>
<message>
- <source>Op 1 Percussive Envelope</source>
- <translation>Op 1 Envelope Percussivo</translation>
+ <source>LFO Wave Shape</source>
+ <translation>LFO - Forma de Onda</translation>
</message>
<message>
- <source>Op 2 Waveform</source>
- <translation>Op 2 Forma de Onda</translation>
+ <source>LFO Predelay</source>
+ <translation>LFO - Pré-atraso</translation>
</message>
<message>
- <source>Op 1 Waveform</source>
- <translation>Op 1 Forma de Onda</translation>
+ <source>Modulate Env-Amount</source>
+ <translation>Modular Tanto-de-Envelope</translation>
</message>
+</context>
+<context>
+ <name>EnvelopeAndLfoView</name>
<message>
- <source>Op 2 Tremolo</source>
- <translation>Op 2 Relaxamento</translation>
+ <source>AMT</source>
+ <translation>QNT</translation>
</message>
<message>
- <source>Op 1 Tremolo</source>
- <translation></translation>
+ <source>ATT</source>
+ <translation>ATQ</translation>
</message>
<message>
- <source>Op 2 Sustain</source>
- <translation>Op 2 Sustentação</translation>
+ <source>DEC</source>
+ <translation>DEC</translation>
</message>
<message>
- <source>Op 1 Sustain</source>
- <translation>Op 1 Sustentação</translation>
+ <source>DEL</source>
+ <translation>ATRASO</translation>
</message>
-</context>
-<context>
- <name>InstrumentTrackWindow</name>
<message>
- <source>FX</source>
- <translation>EFEITOS</translation>
+ <source>REL</source>
+ <translation>REL</translation>
</message>
<message>
- <source>PAN</source>
- <translation>PAN</translation>
+ <source>SPD</source>
+ <translation>VEL</translation>
</message>
<message>
- <source>VOL</source>
- <translation>VOL</translation>
+ <source>HOLD</source>
+ <translation>DURAR</translation>
</message>
<message>
- <source>FUNC</source>
- <translation>RECURSOS</translation>
+ <source>Hint</source>
+ <translation>Sugestão</translation>
</message>
<message>
- <source>MIDI</source>
- <translation>MIDI</translation>
+ <source>SUST</source>
+ <translation>SUST</translation>
</message>
<message>
- <source>PITCH</source>
- <translation>ALTURA</translation>
+ <source>Hold:</source>
+ <translation>Duração:</translation>
</message>
<message>
- <source>RANGE</source>
- <translation>EXTENSÃO</translation>
+ <source>Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.</source>
+ <translation>Use este botão para ajustar a quantidade de modulação do LFO atual. Quanto maior este valor, mais o tamanho (ex. volume ou frequência de corte) será influênciado pelo LFO.</translation>
</message>
<message>
- <source>Pitch</source>
- <translation>Altura</translation>
+ <source>Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.</source>
+ <translation>Clique aqui para usar uma forma de onda definida manualmente. Depois, arraste o aquivo com a amostra de áudio correspondente dentro do gráfico de LFO.</translation>
</message>
<message>
- <source>cents</source>
- <translation>centésimos</translation>
+ <source>multiply LFO-frequency by 100</source>
+ <translation>Multiplica a frequência do LFO por 100</translation>
</message>
<message>
- <source>GENERAL SETTINGS</source>
- <translation>AJUSTES GERAIS</translation>
+ <source>Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.</source>
+ <translation>Use este botão para ajustar a velocidade do LFO atual. Quanto maior este valor, mais rapidamente o LFO oscila e mais rápido será seu efeito.</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation>Salvar as configurações do canal atual em um arquivo de pré definições</translation>
+ <source>FREQ x 100</source>
+ <translation>FREQ x 100</translation>
</message>
<message>
- <source>PLUGIN</source>
- <translation>PLUGIN</translation>
+ <source>Click here if the frequency of this LFO should be multiplied by 100.</source>
+ <translation>Clique aqui se quiser que a frequência deste LFO seja multiplicada por 100.</translation>
</message>
<message>
- <source>Pitch:</source>
- <translation>Altura:</translation>
+ <source>ms/LFO:</source>
+ <translation>ms/LFO:</translation>
</message>
<message>
- <source>Panning</source>
- <translation>Panorâmico</translation>
+ <source>Decay:</source>
+ <translation>Decaimento:</translation>
</message>
<message>
- <source>Save preset</source>
- <translation>Salvar pré definição</translation>
+ <source>Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.</source>
+ <translation>Use este botão para ajustar o tempo de decaimento do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisa para diminuir do nível de ataque para o nível sustentável. Escolha um valor pequeno para instrumentos como piano.</translation>
</message>
<message>
- <source>Panning:</source>
- <translation>Panorâmico:</translation>
+ <source>Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.</source>
+ <translation>Use este botão para ajustar o nível de sustentação do envelope atual. Quanto maior este valor, maior será o nível que o envelope espera antes de ir para zero.</translation>
</message>
<message>
- <source>FX channel</source>
- <translation>Canal de Efeitos</translation>
+ <source>Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.</source>
+ <translation>Use este botão para ajustar o tempo de pré-atraso do LFO atual. Quanto maior este valor, maior o tempo ontes do LFO começar a oscilar.</translation>
</message>
<message>
- <source>ENV/LFO</source>
- <translation>ENV/LFO</translation>
+ <source>Click here to make the envelope-amount controlled by this LFO.</source>
+ <translation>Clique aqui para que a quantidade do envelope seja controlada por este LFO.</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation>Clique aqui se você quer salvar os ajustes do canal atual em um arquivo de pré-definição. Depois você pode carregar estes ajustes dando um duplo clique nele no navegador de arquivos de pré-definições.</translation>
+ <source>Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.</source>
+ <translation>Use este botão para ajustar o tempo de relaxamento do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisa para diminuir do nível de sustentação para zero. Escolha um valor grande para instrumentos com cordas.</translation>
</message>
<message>
- <source>XML preset file (*.xpf)</source>
- <translation>Arquivo de pré definições XML (*.xpf)</translation>
+ <source>Click here for a sine-wave.</source>
+ <translation>Clique aqui para usar uma onda senoidal.</translation>
</message>
<message>
- <source>Volume:</source>
- <translation>Volume:</translation>
+ <source>LFO speed:</source>
+ <translation>Velocidade do LFO:</translation>
</message>
<message>
- <source>Pitch range (semitones)</source>
- <translation>Extensão (semitons)</translation>
+ <source>Attack:</source>
+ <translation>Ataque:</translation>
</message>
<message>
- <source>Instrument volume</source>
- <translation>Volume do instrumento</translation>
+ <source>LFO predelay:</source>
+ <translation>Pré-atraso do LFO:</translation>
</message>
-</context>
-<context>
- <name>InstrumentSoundShapingView</name>
<message>
- <source>Hz</source>
- <translation>Hz</translation>
+ <source>MODULATE ENV-AMOUNT</source>
+ <translation>MODULAR QNT-ENV</translation>
</message>
<message>
- <source>FREQ</source>
- <translation>FREQ</translation>
+ <source>Predelay:</source>
+ <translation>Pré-atraso:</translation>
</message>
<message>
- <source>RESO</source>
- <translation>RESS</translation>
+ <source>Modulation amount:</source>
+ <translation>Quantidade de modulação:</translation>
</message>
<message>
- <source>These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff freque [...]
- <translation>Estas abas contém envelopes. Eles são muito importantes para modificar o som sendo especialmente úteis toda vez que você precisar fazer uma síntese subtrativa. Por exemplo, se você tem um envelope de volume, você pode fazer com que o volume do som varie de forma específica. Se você quiser criar um instrumento virtual onde seu som tem fade de entrada e saída bem suaves (fade no nosso caso é o aumento ou diminuição de volume no começo ou fim de um evento sonoro), isto [...]
+ <source>Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.</source>
+ <translation>Use este botão para ajustar o pré-atraso do envelope atual. Quanto maior este valor, mais longo o tempo antes de iniciar o envelope atual.</translation>
</message>
<message>
- <source>cutoff frequency:</source>
- <translation>frequência de corte:</translation>
+ <source>Click here for a square-wave.</source>
+ <translation>Clique aqui para usar uma onda quadrada.</translation>
</message>
<message>
- <source>FILTER</source>
- <translation>FILTRO</translation>
+ <source>Release:</source>
+ <translation>Relaxamento:</translation>
</message>
<message>
- <source>TARGET</source>
- <translation>OBJETO</translation>
+ <source>Sustain:</source>
+ <translation>Sustentação:</translation>
</message>
<message>
- <source>Resonance:</source>
- <translation>Ressonância:</translation>
+ <source>Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.</source>
+ <translation>Use este botão para ajustar a quantidade de modulação do envelope atual. Quanto maior este valor, mais o tamanho do acorde (ex. volume ou frequência de corte) será influênciado pelo envelope.</translation>
</message>
<message>
- <source>Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.</source>
- <translation>Use este botão para modificar o Q/Ressonância para o filtro selecionado. o Q/Ressonância diz o quanto será filtrado das frequências próximas à frequência de corte.</translation>
+ <source>LFO- attack:</source>
+ <translation>Ataque do LFO:</translation>
</message>
<message>
- <source>Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...</source>
- <translation>Use este botão para modificar a frequência de corte do filtro selecionado. A frequência de corte especifica a frequência na qual o sinal vai ser filtrado. Por exemplo, um filtro Passa Baixa filtra todas as frequências que estiverem depois da frequência de corte. Um filtro PassaAlta filtra todas as frequências que estiverem antes da frequência de corte, e por aí vai...</translation>
+ <source>Click here for a triangle-wave.</source>
+ <translation>Clique aqui para usar uma onda triangular.</translation>
</message>
<message>
- <source>Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.</source>
- <translation>Aqui você pode selecionar o filtro embutido que você precisar para sua pista de instrumento. Filtros são muito importantes para mudar as características do som.</translation>
+ <source>Drag a sample from somewhere and drop it in this window.</source>
+ <translation>Arraste uma amostra de qualquer lugar para esta janela.</translation>
</message>
-</context>
-<context>
- <name>ControllerConnectionDialog</name>
<message>
- <source>OK</source>
- <translation>OK</translation>
+ <source>Click here for a saw-wave for current.</source>
+ <translation>Clique aqui para usar uma onda dente-de-serra.</translation>
</message>
<message>
- <source>LMMS</source>
- <translation>LMMS</translation>
+ <source>Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.</source>
+ <translation>Use este botão para ajustar o tempo de duração do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope segura o nível de ataque antes de diminuir para o nível sustentável.</translation>
</message>
<message>
- <source>Cycle Detected.</source>
- <translation>Ciclo Detectado.</translation>
+ <source>Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.</source>
+ <translation>Use este botão para ajustar o tempo de ataque do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisará para aumentar o nível de ataque.</translation>
</message>
<message>
- <source>MIDI CONTROLLER</source>
- <translation>CONTROLADOR MIDI</translation>
+ <source>control envelope-amount by this LFO</source>
+ <translation>Controla a quantidade do envelope por este LFO</translation>
</message>
<message>
- <source>USER CONTROLLER</source>
- <translation>CONTROLADOR DO USUÁRIO</translation>
+ <source>Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.</source>
+ <translation>Use este botão para ajustar o tempo de ataque do LFO atual. Quanto maior este valor, mais o tempo o LFO leva para atingir sua amplitude máxima.</translation>
</message>
<message>
- <source>Cancel</source>
- <translation>Cancelar</translation>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>ExportProjectDialog</name>
<message>
- <source>Auto Detect</source>
- <translation>Auto detectar</translation>
+ <source>2x</source>
+ <translation>2x</translation>
</message>
<message>
- <source>CHANNEL</source>
- <translation>CANAL</translation>
+ <source>4x</source>
+ <translation>4x</translation>
</message>
<message>
- <source>Input controller</source>
- <translation>Entrada do controlador</translation>
+ <source>8x</source>
+ <translation>8x</translation>
</message>
<message>
- <source>CONTROLLER</source>
- <translation>CONTROLADOR</translation>
+ <source>Sinc Best (very slow!)</source>
+ <translation>Sincronização Melhor (muito lenta)</translation>
</message>
<message>
- <source>Input channel</source>
- <translation>Canal de entrada</translation>
+ <source>Start</source>
+ <translation>Começar</translation>
</message>
<message>
- <source>Connection Settings</source>
- <translation>Configuração das Conexões</translation>
+ <source>Bitrate:</source>
+ <translation>Velocidade em bits:</translation>
</message>
<message>
- <source>MIDI-devices to receive MIDI-events from</source>
- <translation>Dispositivos MIDI para receber eventos MIDI de</translation>
+ <source>Samplerate:</source>
+ <translation>Taxa de Amostragem:</translation>
</message>
<message>
- <source>MAPPING FUNCTION</source>
- <translation>MAPEAR FUNÇÃO</translation>
+ <source>1x (None)</source>
+ <translation>1x (Nada)</translation>
</message>
-</context>
-<context>
- <name>setupDialog</name>
<message>
- <source>OK</source>
- <translation>OK</translation>
+ <source>Oversampling (use with care!):</source>
+ <translation>Sobreamostragem (use com cuidado):</translation>
</message>
<message>
- <source>MISC</source>
- <translation>VÁRIOS</translation>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
</message>
<message>
- <source>General settings</source>
- <translation>Opções gerais</translation>
+ <source>Depth:</source>
+ <translation>Precisão:</translation>
</message>
<message>
- <source>AUDIO INTERFACE</source>
- <translation>INTERFACE DE ÁUDIO</translation>
+ <source>64 KBit/s</source>
+ <translation>64 KBit/s</translation>
</message>
<message>
- <source>Paths</source>
- <translation>Locais</translation>
+ <source>128 KBit/s</source>
+ <translation>128 KBit/s</translation>
</message>
<message>
- <source>Performance settings</source>
- <translation>Opções de desempenho</translation>
+ <source>192 KBit/s</source>
+ <translation>192 KBit/s</translation>
</message>
<message>
- <source>Choose background artwork</source>
- <translation>Escolher Papel de Parede do LMMS</translation>
+ <source>160 KBit/s</source>
+ <translation>160 KBit/s</translation>
</message>
<message>
- <source>FL Studio installation directory</source>
- <translation>Pasta de instalação do FL Studio</translation>
+ <source>256 KBit/s</source>
+ <translation>256 KBit/s</translation>
</message>
<message>
- <source>Enable waveform display by default</source>
- <translation>Habilitar visualizador de forma de onda por padrão</translation>
+ <source>320 KBit/s</source>
+ <translation>320 KBit/s</translation>
</message>
<message>
- <source>Reset to default-value</source>
- <translation>Restaurar o valor padrão</translation>
+ <source>32 Bit Float</source>
+ <translation>32 Bits Decimal</translation>
</message>
<message>
- <source>One instrument track window mode</source>
- <translation>Modo janela com uma pista de instrumento</translation>
+ <source>192000 Hz</source>
+ <translation>192000 Hz</translation>
</message>
<message>
- <source>Choose LADSPA plugin directory</source>
- <translation>Escolher a pasta com os plugins LADSPA</translation>
+ <source>Zero Order Hold</source>
+ <translation>Retentor de Ordem Zero</translation>
</message>
<message>
- <source>LMMS working directory</source>
- <translation>Pasta de trabalho do LMMS</translation>
+ <source>Output</source>
+ <translation>Saída</translation>
</message>
<message>
- <source>Choose default SoundFont</source>
- <translation>Escolher SoundFont padrão</translation>
+ <source>Please note that not all of the parameters above apply for all file formats.</source>
+ <translation>Por favor, note que os parâmetros acima se aplicam para todos os tipos de arquivos.</translation>
</message>
<message>
- <source>Please note that most changes won't take effect until you restart LMMS!</source>
- <translation>Por favor note que a maioria das mudanças não terão efeito antes de reiniciar o LMMS!</translation>
+ <source>Interpolation:</source>
+ <translation>Interpolação:</translation>
</message>
<message>
- <source>Enable tooltips</source>
- <translation>Habilitar dicas</translation>
+ <source>44100 Hz</source>
+ <translation>44100 Hz</translation>
</message>
<message>
- <source>Show restart warning after changing settings</source>
- <translation>Mostrar aviso de reinicialização depois de mudança de configuração</translation>
+ <source>16 Bit Integer</source>
+ <translation>16 Bits Inteiro</translation>
</message>
<message>
- <source>Cancel</source>
- <translation>Cancelar</translation>
+ <source>Export project</source>
+ <translation>Renderizar projeto</translation>
</message>
<message>
- <source>Smooth scroll in Song Editor</source>
- <translation>Rolagem suave no Editor de Arranjo</translation>
+ <source>Sinc Fastest</source>
+ <translation>Sincronização Rápida</translation>
</message>
<message>
- <source>Frames: %1
-Latency: %2 ms</source>
- <translation>Amostras: %1
-Latência: %2 ms</translation>
+ <source>96000 Hz</source>
+ <translation>96000 Hz</translation>
</message>
<message>
- <source>MIDI INTERFACE</source>
- <translation>INTERFACE DO MIDI</translation>
+ <source>File format:</source>
+ <translation>Formato do arquivo:</translation>
</message>
<message>
- <source>Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel.</source>
- <translation>Aqui você pode ajustar o tamanho do buffer interno usado pelo LMMS. Valores menores resultam em menor latência (atraso ao usar as teclas ou um controlador midi) mas podem provocar sons não desejados como plocs e bips ou má performance, esses problemas acontecem especialmente em computadores antigos ou sistema com kernel não compilado para trabalhar com processamento em tempo real.</translation>
+ <source>48000 Hz</source>
+ <translation>48000 Hz</translation>
</message>
<message>
- <source>Background artwork</source>
- <translation>Papel de parede</translation>
+ <source>88200 Hz</source>
+ <translation>88200 Hz</translation>
</message>
<message>
- <source>Compact track buttons</source>
- <translation>Botões de pista compactos</translation>
+ <source>Sinc Medium (recommended)</source>
+ <translation>Sincronização Média (recomendada)</translation>
</message>
<message>
- <source>Choose FL Studio installation directory</source>
- <translation>Escolher a pasta de instalação do FL Studio</translation>
+ <source>Export as loop (remove end silence)</source>
+ <translation>Renderizar como loop (remove silêncio no final)</translation>
</message>
<message>
- <source>Audio settings</source>
- <translation>Configurações de Áudio</translation>
+ <source>Quality settings</source>
+ <translation>Configurações de qualidade</translation>
</message>
+</context>
+<context>
+ <name>FileBrowser</name>
<message>
- <source>UI effects vs. performance</source>
- <translation>Efeitos Visuais X Desempenho</translation>
+ <source>Browser</source>
+ <translation type="unfinished">Pastas</translation>
</message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>LADSPA plugin paths</source>
- <translation>Locais de plugins LADSPA</translation>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished">Envio para ativar pista de instrumento</translation>
</message>
<message>
- <source>Choose artwork-theme directory</source>
- <translation>Escolher a pasta com Temas para LMMS</translation>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished">Abrir nova pista de instrumento / Editor de Arranjo</translation>
</message>
<message>
- <source>Show playback cursor in AudioFileProcessor</source>
- <translation>Mostrar o cursor de reprodução dentro do AudioFileProcessor</translation>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished">Abrir nova pista de instrumento / Editor de Bases</translation>
</message>
<message>
- <source>Enable auto save feature</source>
- <translation>Habilitar a função de salvamento automático</translation>
+ <source>Loading sample</source>
+ <translation type="unfinished">Carregando amostra</translation>
</message>
<message>
- <source>Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface.</source>
- <translation>Aqui você pode selecionar sua interface de áudio preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, JACK, OSS e outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de áudio selecionada.</translation>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished">Por favor espere, carregando a pré visualização da amostra...</translation>
</message>
<message>
- <source>Compress project files per default</source>
- <translation>Sempre compactar arquivos de projeto</translation>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished">--- Arquivos de fábrica ---</translation>
</message>
+</context>
+<context>
+ <name>FxLine</name>
<message>
- <source>HQ-mode for output audio-device</source>
- <translation>Modo de Alta Qualidade para a Saída do dispositivo de áudio</translation>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>BUFFER SIZE</source>
- <translation>TAMANHO DO BUFFER</translation>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface.</source>
- <translation>Aqui você pode selecionar sua interface de MIDI preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, OSS entre outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de MIDI selecionada.</translation>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Display volume as dBV </source>
- <translation>Mostrar volume em dBV</translation>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Choose STK rawwave directory</source>
- <translation>Escolher a pasta de STK rawwave</translation>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Default Soundfont File</source>
- <translation>Arquivo padrão de Soundfont</translation>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sync VST plugins to host playback</source>
- <translation>Sincronizar plugins VST no hospedeiro (host) de reprodução</translation>
+ <source>&Help</source>
+ <translation type="unfinished">Aj&uda</translation>
</message>
+</context>
+<context>
+ <name>FxMixer</name>
<message>
- <source>Setup LMMS</source>
- <translation>Configurar LMMS</translation>
+ <source>FX %1</source>
+ <translation>FX %1</translation>
</message>
<message>
- <source>Choose your VST-plugin directory</source>
- <translation>Escolher a pasta com plugins VST</translation>
- </message>
- <message>
- <source>Choose LMMS working directory</source>
- <translation>Escolher a pasta de trabalho do LMMS</translation>
- </message>
- <message>
- <source>Restart LMMS</source>
- <translation>Reiniciar LMMS</translation>
- </message>
- <message>
- <source>STK rawwave directory</source>
- <translation>Pasta de STK rawwave</translation>
- </message>
- <message>
- <source>VST-plugin directory</source>
- <translation>Pasta com plugins VST</translation>
- </message>
- <message>
- <source>MIDI settings</source>
- <translation>Configurações do MIDI</translation>
- </message>
- <message>
- <source>Artwork directory</source>
- <translation>Pasta com Temas para LMMS</translation>
- </message>
- <message>
- <source>Enable note labels in piano roll</source>
- <translation>Habilitar camadas de notas no editor de notas MIDI</translation>
+ <source>Master</source>
+ <translation>Mestre</translation>
</message>
</context>
<context>
- <name>QWidget</name>
- <message>
- <source>No</source>
- <translation>Não</translation>
- </message>
- <message>
- <source>Yes</source>
- <translation>Sim</translation>
- </message>
- <message>
- <source>Maker: </source>
- <translation>Marcador:</translation>
- </message>
- <message>
- <source>File: </source>
- <translation>Arquivo: </translation>
- </message>
+ <name>FxMixerView</name>
<message>
- <source>Name: </source>
- <translation>Nome:</translation>
+ <source>Enter the new name for this FX channel</source>
+ <translation>Insira o novo nome para este Canal de Efeitos</translation>
</message>
<message>
- <source>Copyright: </source>
- <translation></translation>
+ <source>Rename FX channel</source>
+ <translation>Renomear Canal de Efeitos</translation>
</message>
<message>
- <source>Channels In: </source>
- <translation>Canais de Entrada: </translation>
+ <source>FX-Mixer</source>
+ <translation>Mixer de Efeitos</translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
- <source>In Place Broken: </source>
- <translation>Com Local Quebrado: </translation>
+ <source>FX Fader %1</source>
+ <translation type="unfinished">Fader de Efeito %1</translation>
</message>
<message>
- <source>Channels Out: </source>
- <translation>Canais de Saída: </translation>
+ <source>Mute</source>
+ <translation type="unfinished">Mudo</translation>
</message>
<message>
- <source>Requires Real Time: </source>
- <translation>Requer Processamento em Tempo Real: </translation>
+ <source>Mute this FX channel</source>
+ <translation type="unfinished">Deixar mudo este Canal de Efeitos</translation>
</message>
+</context>
+<context>
+ <name>FxRoute</name>
<message>
- <source>Real Time Capable: </source>
- <translation>Capacitado para Processamento em Tempo Real: </translation>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1419,2125 +1478,2113 @@ Latência: %2 ms</translation>
<source>Arpeggio</source>
<translation>Arpegio</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>EnvelopeAndLfoView</name>
+ <name>InstrumentFunctionArpeggioView</name>
<message>
- <source>AMT</source>
- <translation>QNT</translation>
+ <source>%</source>
+ <translation>%</translation>
</message>
<message>
- <source>ATT</source>
- <translation>ATQ</translation>
+ <source>ms</source>
+ <translation>ms</translation>
</message>
<message>
- <source>DEC</source>
- <translation>DEC</translation>
+ <source>GATE</source>
+ <translation>PORTAL</translation>
</message>
<message>
- <source>DEL</source>
- <translation>ATRASO</translation>
+ <source>TIME</source>
+ <translation>TEMPO</translation>
</message>
<message>
- <source>REL</source>
- <translation>REL</translation>
+ <source>Mode:</source>
+ <translation>Modo:</translation>
</message>
<message>
- <source>SPD</source>
- <translation>VEL</translation>
+ <source>RANGE</source>
+ <translation>EXTENSÃO</translation>
</message>
<message>
- <source>HOLD</source>
- <translation>DURAR</translation>
+ <source>Arpeggio range:</source>
+ <translation>Extensão do arpejo:</translation>
</message>
<message>
- <source>Hint</source>
- <translation>Sugestão</translation>
+ <source>Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.</source>
+ <translation>Use este botão para ajustar o portal de arpejo. O Portal de arpejo especifica o quanto deve ser tocado o arpejo. Isto permite que você faça arpejos stacatos bem legais.</translation>
</message>
<message>
- <source>SUST</source>
- <translation>SUST</translation>
+ <source>Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.</source>
+ <translation>Use este botão para escolher a extensão do arpejo em oitavas. O arpejo selecionado será tocado dentro do número de oitavas especificado.</translation>
</message>
<message>
- <source>Hold:</source>
- <translation>Duração:</translation>
+ <source>Chord:</source>
+ <translation>Acorde:</translation>
</message>
<message>
- <source>Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.</source>
- <translation>Use este botão para ajustar a quantidade de modulação do LFO atual. Quanto maior este valor, mais o tamanho (ex. volume ou frequência de corte) será influênciado pelo LFO.</translation>
+ <source>ARPEGGIO</source>
+ <translation>ARPEGIO</translation>
</message>
<message>
- <source>Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.</source>
- <translation>Clique aqui para usar uma forma de onda definida manualmente. Depois, arraste o aquivo com a amostra de áudio correspondente dentro do gráfico de LFO.</translation>
+ <source>Arpeggio gate:</source>
+ <translation>Portal de arpejo:</translation>
</message>
<message>
- <source>multiply LFO-frequency by 100</source>
- <translation>Multiplica a frequência do LFO por 100</translation>
+ <source>Arpeggio time:</source>
+ <translation>Tempo de arpejo:</translation>
</message>
<message>
- <source>Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.</source>
- <translation>Use este botão para ajustar a velocidade do LFO atual. Quanto maior este valor, mais rapidamente o LFO oscila e mais rápido será seu efeito.</translation>
+ <source>Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.</source>
+ <translation>Use este botão para ajustar o tempo de arpejo em milissegundos. O tempo do arpejar especifica qual longo cada nota do arpejo será tocada.</translation>
</message>
<message>
- <source>FREQ x 100</source>
- <translation>FREQ x 100</translation>
+ <source>An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.</source>
+ <translation>Arpegio é uma técnica instrumental (especialmente para instrumentos musicais de cordas pinçadas - Violão, Viola Caipira, Contra-baixo, etc) que consiste em tocar repetidamente uma série de notas. Quando pinçamos mais de uma corda ao mesmo tempo em um violão por exemplo, podemos criar um acorde, no arpegio, podemos tocar as notas de um acorde em tempos diferentes, nunca ao mesmo tempo. Arpegios típicos são os das triades mair e menor, mas é possivel arpejar qualquer a [...]
</message>
<message>
- <source>Click here if the frequency of this LFO should be multiplied by 100.</source>
- <translation>Clique aqui se quiser que a frequência deste LFO seja multiplicada por 100.</translation>
+ <source>octave(s)</source>
+ <translation>oitava(s)</translation>
</message>
<message>
- <source>ms/LFO:</source>
- <translation>ms/LFO:</translation>
+ <source>Direction:</source>
+ <translation>Direção:</translation>
</message>
+</context>
+<context>
+ <name>InstrumentFunctionNoteStacking</name>
<message>
- <source>Decay:</source>
- <translation>Decaimento:</translation>
+ <source>6</source>
+ <translation></translation>
</message>
<message>
- <source>Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.</source>
- <translation>Use este botão para ajustar o tempo de decaimento do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisa para diminuir do nível de ataque para o nível sustentável. Escolha um valor pequeno para instrumentos como piano.</translation>
+ <source>7</source>
+ <translation>7</translation>
</message>
<message>
- <source>Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.</source>
- <translation>Use este botão para ajustar o nível de sustentação do envelope atual. Quanto maior este valor, maior será o nível que o envelope espera antes de ir para zero.</translation>
+ <source>9</source>
+ <translation>9</translation>
</message>
<message>
- <source>Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.</source>
- <translation>Use este botão para ajustar o tempo de pré-atraso do LFO atual. Quanto maior este valor, maior o tempo ontes do LFO começar a oscilar.</translation>
+ <source>11</source>
+ <translation>11</translation>
</message>
<message>
- <source>Click here to make the envelope-amount controlled by this LFO.</source>
- <translation>Clique aqui para que a quantidade do envelope seja controlada por este LFO.</translation>
+ <source>13</source>
+ <translation>13</translation>
</message>
<message>
- <source>Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.</source>
- <translation>Use este botão para ajustar o tempo de relaxamento do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisa para diminuir do nível de sustentação para zero. Escolha um valor grande para instrumentos com cordas.</translation>
+ <source>m6</source>
+ <translation>m6</translation>
</message>
<message>
- <source>Click here for a sine-wave.</source>
- <translation>Clique aqui para usar uma onda senoidal.</translation>
+ <source>m7</source>
+ <translation>m7</translation>
</message>
<message>
- <source>LFO speed:</source>
- <translation>Velocidade do LFO:</translation>
+ <source>m9</source>
+ <translation>m9</translation>
</message>
<message>
- <source>Attack:</source>
- <translation>Ataque:</translation>
+ <source>7#5</source>
+ <translation>7(#5)</translation>
</message>
<message>
- <source>LFO predelay:</source>
- <translation>Pré-atraso do LFO:</translation>
+ <source>7#9</source>
+ <translation>7(#9)</translation>
</message>
<message>
- <source>MODULATE ENV-AMOUNT</source>
- <translation>MODULAR QNT-ENV</translation>
+ <source>9#5</source>
+ <translation>(9, #5)</translation>
</message>
<message>
- <source>Predelay:</source>
- <translation>Pré-atraso:</translation>
+ <source>7b5</source>
+ <translation>7(b5)</translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Quantidade de modulação:</translation>
+ <source>7b9</source>
+ <translation>7(b9)</translation>
</message>
<message>
- <source>Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.</source>
- <translation>Use este botão para ajustar o pré-atraso do envelope atual. Quanto maior este valor, mais longo o tempo antes de iniciar o envelope atual.</translation>
+ <source>9b5</source>
+ <translation>(9, b5)</translation>
</message>
<message>
- <source>Click here for a square-wave.</source>
- <translation>Clique aqui para usar uma onda quadrada.</translation>
+ <source>aug</source>
+ <translation>aum</translation>
</message>
<message>
- <source>Release:</source>
- <translation>Relaxamento:</translation>
+ <source>m11</source>
+ <translation>m(11)</translation>
</message>
<message>
- <source>Sustain:</source>
- <translation>Sustentação:</translation>
+ <source>m13</source>
+ <translation>m(13)</translation>
</message>
<message>
- <source>Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.</source>
- <translation>Use este botão para ajustar a quantidade de modulação do envelope atual. Quanto maior este valor, mais o tamanho do acorde (ex. volume ou frequência de corte) será influênciado pelo envelope.</translation>
+ <source>tri</source>
+ <translation>tríade</translation>
</message>
<message>
- <source>LFO- attack:</source>
- <translation>Ataque do LFO:</translation>
+ <source>13#9</source>
+ <translation>13(#9)</translation>
</message>
<message>
- <source>Click here for a triangle-wave.</source>
- <translation>Clique aqui para usar uma onda triangular.</translation>
+ <source>11b9</source>
+ <translation>11(b9)</translation>
</message>
<message>
- <source>Drag a sample from somewhere and drop it in this window.</source>
- <translation>Arraste uma amostra de qualquer lugar para esta janela.</translation>
+ <source>13b9</source>
+ <translation>13(b9)</translation>
</message>
<message>
- <source>Click here for a saw-wave for current.</source>
- <translation>Clique aqui para usar uma onda dente-de-serra.</translation>
+ <source>7#11</source>
+ <translation>7(#11)</translation>
</message>
<message>
- <source>Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.</source>
- <translation>Use este botão para ajustar o tempo de duração do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope segura o nível de ataque antes de diminuir para o nível sustentável.</translation>
+ <source>9#11</source>
+ <translation>(9, #11)</translation>
</message>
<message>
- <source>Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.</source>
- <translation>Use este botão para ajustar o tempo de ataque do envelope atual. Quanto maior este valor, mais longo o tempo que o envelope precisará para aumentar o nível de ataque.</translation>
+ <source>9b13</source>
+ <translation>(b9, 13)</translation>
</message>
<message>
- <source>control envelope-amount by this LFO</source>
- <translation>Controla a quantidade do envelope por este LFO</translation>
+ <source>Maj7</source>
+ <translation>7M</translation>
</message>
<message>
- <source>Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.</source>
- <translation>Use este botão para ajustar o tempo de ataque do LFO atual. Quanto maior este valor, mais o tempo o LFO leva para atingir sua amplitude máxima.</translation>
+ <source>Maj9</source>
+ <translation>9M</translation>
</message>
-</context>
-<context>
- <name>LfoControllerDialog</name>
<message>
- <source>AMT</source>
- <translation>QNT</translation>
+ <source>add9</source>
+ <translation>(9)</translation>
</message>
<message>
- <source>LFO</source>
- <translation>LFO</translation>
+ <source>m7b5</source>
+ <translation>m7(b5)</translation>
</message>
<message>
- <source>PHS</source>
- <translation>DFS</translation>
+ <source>m7b9</source>
+ <translation>m7(b9)</translation>
</message>
<message>
- <source>SPD</source>
- <translation>VEL</translation>
+ <source>m9b5</source>
+ <translation>m(9, b5)</translation>
</message>
<message>
- <source>BASE</source>
- <translation>CENTRO</translation>
+ <source>sus2</source>
+ <translation>sus2</translation>
</message>
<message>
- <source>todo</source>
- <translation>O botão "CENTRO" regula o ponto de referência onde o seu oscilador irá variar. Podendo o "CENTRO" variar entre os valores zero e um, o ponto de referência será um valor entre zero e um no qual se iniciará o processo de oscilação do LFO (Oscilador de baixa frequência).</translation>
+ <source>sus4</source>
+ <translation>sus4</translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation>Controlador de LFO</translation>
+ <source>m-Maj11</source>
+ <translation>m (11M)</translation>
</message>
<message>
- <source>Click here for an exponential wave.</source>
- <translation>Clique aqui para usar uma onda exponencial.</translation>
+ <source>m-Maj13</source>
+ <translation>m (13M)</translation>
</message>
<message>
- <source>Phase offset:</source>
- <translation>Defasamento:</translation>
+ <source>Dominant bebop</source>
+ <translation>Bebop dominante</translation>
</message>
<message>
- <source>Click here for a saw-wave.</source>
- <translation>Clique aqui para usar uma onda dente-de-serra.</translation>
+ <source>7#5#9</source>
+ <translation>7(#5, #9)</translation>
</message>
<message>
- <source>Click here for white-noise.</source>
- <translation>Clique aqui para usar um ruído branco.</translation>
+ <source>7#5b9</source>
+ <translation>7(#5, b9)</translation>
</message>
<message>
- <source>LFO-speed:</source>
- <translation>LFO - Velocidade:</translation>
+ <source>6add9</source>
+ <translation>6(9)</translation>
</message>
<message>
- <source>Base amount:</source>
- <translation>Ponto de Referência:</translation>
+ <source>7b5b9</source>
+ <translation>7(b5, b9)</translation>
</message>
<message>
- <source>Click here for a sine-wave.</source>
- <translation>Clique aqui para usar uma onda senoidal.</translation>
+ <source>6sus4</source>
+ <translation></translation>
</message>
<message>
- <source>Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect.</source>
- <translation>Use este botão para mudar a velocidade do LFO. Quanto maior for este valor, mais rápido oscila o LFO e assim também o efeito a sofrer a modulação.</translation>
+ <source>7sus4</source>
+ <translation>7 sus4</translation>
</message>
<message>
- <source>degrees</source>
- <translation>graus</translation>
+ <source>9sus4</source>
+ <translation>9 sus4</translation>
</message>
<message>
- <source>Click here for a user-defined shape.
-Double click to pick a file.</source>
- <translation>Clique aqui para usar uma forma de onda definida manualmente. Dê dois cliques para buscar um arquivo.</translation>
+ <source>Blues</source>
+ <translation>Blues</translation>
</message>
<message>
- <source>Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO.</source>
- <translation>Use este botão para mudar a quantidade de modulação do LFO. Quanto maior for este valor, mais influenciado será o controle conectado (controle de volume ou frequência de corte por exemplo) pelo LFO.</translation>
+ <source>Maj11</source>
+ <translation>Acorde de 11</translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Quantidade de modulação:</translation>
+ <source>Maj13</source>
+ <translation>13M</translation>
</message>
<message>
- <source>Click here for a square-wave.</source>
- <translation>Clique aqui para usar uma onda quadrada.</translation>
+ <source>Majb5</source>
+ <translation>Maior b5</translation>
</message>
<message>
- <source>With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
- <translation>Com este botão você pode mudar a posição da fase da onda de LFO. Fase é em que ponto a onda inicia o processo de oscilação, desta maneira você pode definir onde você quer que comece o processo de oscilação. Por exemplo, se você tiver uma onda senoidal com defasamento de 180 graus, ela vai começar para baixo. O mesmo acontece com outras formas de onda, como a dente de serra por exemplo.</translation>
+ <source>Major</source>
+ <translation>Maior</translation>
</message>
<message>
- <source>Click here for a a moog saw-wave.</source>
- <translation>Clique aqui para usar uma onda dente-de-serra moog.</translation>
+ <source>Minor</source>
+ <translation>Menor</translation>
</message>
<message>
- <source>Click here for a triangle-wave.</source>
- <translation>Clique aqui para usar uma onda triangular.</translation>
+ <source>Diminished</source>
+ <translation>Diminuta</translation>
</message>
-</context>
-<context>
- <name>ControllerRackView</name>
<message>
- <source>Add</source>
- <translation>Adicionar</translation>
+ <source>madd9</source>
+ <translation>m(9)</translation>
</message>
<message>
- <source>Confirm Delete</source>
- <translation>Confirmação para Apagar</translation>
+ <source>minb5</source>
+ <translation>menor b5</translation>
</message>
<message>
- <source>Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo.</source>
- <translation>Posso mesmo apagar? Há uma ou mais conexões associadas a este controlador. Não há como voltar depois.</translation>
+ <source>minor</source>
+ <translation>menor</translation>
</message>
<message>
- <source>Controller Rack</source>
- <translation>Estante de Controladores</translation>
+ <source>m9-Maj7</source>
+ <translation>m(9,7M)</translation>
</message>
-</context>
-<context>
- <name>lb303SynthView</name>
<message>
- <source>DEC</source>
- <translation>DEC</translation>
+ <source>m7add11</source>
+ <translation>m7(11)</translation>
</message>
<message>
- <source>CUT</source>
- <translation>CORTE</translation>
+ <source>m7add13</source>
+ <translation>m7(13)</translation>
</message>
<message>
- <source>RES</source>
- <translation>RESS</translation>
+ <source>Phrygolydian</source>
+ <translation>Frígio</translation>
</message>
<message>
- <source>DIST</source>
- <translation>DIST</translation>
+ <source>Whole tone</source>
+ <translation>Tons inteiros</translation>
</message>
<message>
- <source>WAVE</source>
- <translation>ONDA</translation>
+ <source>13b5b9</source>
+ <translation>13(b5, b9)</translation>
</message>
<message>
- <source>DIST:</source>
- <translation>DISTORÇÃO:</translation>
+ <source>Locrian</source>
+ <translation>Lócrio</translation>
</message>
<message>
- <source>SLIDE</source>
- <translation>GRADUAL</translation>
+ <source>Maj7#11</source>
+ <translation>7M(#11)</translation>
</message>
<message>
- <source>WAVE:</source>
- <translation>ONDA:</translation>
+ <source>Maj9#11</source>
+ <translation>9M(#11)</translation>
</message>
<message>
- <source>Slide Decay:</source>
- <translation>Decaimento gradual:</translation>
+ <source>7add11</source>
+ <translation>7(11)</translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Decaimento:</translation>
+ <source>7add13</source>
+ <translation>7(13)</translation>
</message>
<message>
- <source>Env Mod:</source>
- <translation>Mod Env:</translation>
+ <source>Major bebop</source>
+ <translation>Bebop maior</translation>
</message>
<message>
- <source>Resonance:</source>
- <translation>Ressonância:</translation>
+ <source>Arabic</source>
+ <translation>Árabe</translation>
</message>
<message>
- <source>303-es-que, 24dB/octave, 3 pole filter</source>
- <translation>303-es-que, 24dB/octave, filtro 3 pole</translation>
+ <source>Chords</source>
+ <translation>Acordes</translation>
</message>
<message>
- <source>ENV MOD</source>
- <translation>MOD ENV</translation>
+ <source>Dorian</source>
+ <translation>Dório</translation>
</message>
<message>
- <source>Cutoff Freq:</source>
- <translation>Freq Corte:</translation>
+ <source>Hungarian minor</source>
+ <translation>Húngara menor</translation>
</message>
-</context>
-<context>
- <name>SampleTCOView</name>
<message>
- <source>Cut</source>
- <translation>Recortar</translation>
+ <source>Maj7#5</source>
+ <translation>7M(#5)</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copiar</translation>
+ <source>Maj9#5</source>
+ <translation>9M(#5)</translation>
</message>
<message>
- <source>Paste</source>
- <translation>Colar</translation>
+ <source>Maj7b5</source>
+ <translation>7M(b5)</translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
- <translation>Excluir (botão do meio do mouse)</translation>
+ <source>Lydian</source>
+ <translation>Lídio</translation>
</message>
<message>
- <source>Set/clear record</source>
- <translation>Armar/desarmar gravação</translation>
+ <source>Chord range</source>
+ <translation>Extensão do acorde</translation>
</message>
<message>
- <source>double-click to select sample</source>
- <translation>Duplo clique para selecionar amostra</translation>
+ <source>Mixolydian</source>
+ <translation>Mixolídio</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation>Mudo/Não Mudo (<Ctrl> + middle click)</translation>
+ <source>Melodic minor</source>
+ <translation>Menor Melódica</translation>
</message>
-</context>
-<context>
- <name>trackContentObjectView</name>
<message>
- <source>Cut</source>
- <translation>Recortar</translation>
+ <source>m-Maj7</source>
+ <translation>m-7M</translation>
</message>
<message>
- <source>Copy</source>
- <translation>Copiar</translation>
+ <source>Jap in sen</source>
+ <translation>Insen Japonesa</translation>
</message>
<message>
- <source>Hint</source>
- <translation>Sugestão</translation>
+ <source>m6add9</source>
+ <translation>m6(9)</translation>
</message>
<message>
- <source>Paste</source>
- <translation>Colar</translation>
+ <source>Neopolitan minor</source>
+ <translation>Neopolitana menor</translation>
</message>
<message>
- <source>Press <Ctrl> for free resizing.</source>
- <translation>Pressione <Ctrl> para redimensionar livremente.</translation>
+ <source>octave</source>
+ <translation>oitava</translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
- <translation>Apagar (botão do meio do mouse)</translation>
+ <source>Neopolitan</source>
+ <translation>Napolitana</translation>
</message>
<message>
- <source>Press <Ctrl> and drag to make a copy.</source>
- <translation>Pressione <Ctrl> e arraste para fazer uma cópia.</translation>
+ <source>Aeolian</source>
+ <translation>Eólio</translation>
</message>
<message>
- <source>%1:%2 (%3:%4 to %5:%6)</source>
- <translation>%1:%2 (%3:%4 até %5:%6)</translation>
+ <source>Maj9sus4</source>
+ <translation>9M sus4</translation>
</message>
<message>
- <source>Current length</source>
- <translation>Tamanho atual</translation>
+ <source>Chord type</source>
+ <translation>Tipo de acorde</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation>Mudo/não mudo (<Ctrl> + botão do meio)</translation>
+ <source>augsus4</source>
+ <translation>aum sus4</translation>
</message>
<message>
- <source>Current position</source>
- <translation>Posição atual</translation>
+ <source>Major pentatonic</source>
+ <translation>Pentatônica maior</translation>
</message>
-</context>
-<context>
- <name>InstrumentTrackView</name>
<message>
- <source>PAN</source>
- <translation>PAN</translation>
+ <source>Minor pentatonic</source>
+ <translation>Pentatônica menor</translation>
</message>
<message>
- <source>VOL</source>
- <translation>VOL</translation>
+ <source>m-Maj7add11</source>
+ <translation>m-7M(11)</translation>
</message>
<message>
- <source>MIDI</source>
- <translation>MIDI</translation>
+ <source>m-Maj7add13</source>
+ <translation>m-7M(13)</translation>
</message>
<message>
- <source>Input</source>
- <translation>Entradas</translation>
+ <source>Maj7add13</source>
+ <translation>7M(13)</translation>
</message>
<message>
- <source>Output</source>
- <translation>Saídas</translation>
+ <source>Harmonic minor</source>
+ <translation>Menor Harmônica</translation>
</message>
<message>
- <source>Volume</source>
- <translation>Volume</translation>
+ <source>Enigmatic</source>
+ <translation>Enigmática</translation>
</message>
<message>
- <source>Panning</source>
- <translation>Panorâmico</translation>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Panning:</source>
- <translation>Panorâmico:</translation>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume:</source>
- <translation>Volume:</translation>
+ <source>5</source>
+ <translation type="unfinished">8x {5?}</translation>
</message>
</context>
<context>
- <name>EffectView</name>
+ <name>InstrumentFunctionNoteStackingView</name>
<message>
- <source>W/D</source>
- <translation>P/L</translation>
+ <source>RANGE</source>
+ <translation>EXTENSÃO</translation>
</message>
<message>
- <source>GATE</source>
- <translation>PORTAL</translation>
+ <source>Chord range:</source>
+ <translation>Extensão do acorde:</translation>
</message>
<message>
- <source>&Help</source>
- <translation>Aj&uda</translation>
+ <source>Chord:</source>
+ <translation>Acorde:</translation>
</message>
<message>
- <source>DECAY</source>
- <translation>DEC</translation>
+ <source>Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves.</source>
+ <translation>Use este botão para definir a extensão do acorde em oitavas. O acorde selecionado será tocado no número de oitavas especificado.</translation>
</message>
<message>
- <source>Gate:</source>
- <translation>Portal:</translation>
+ <source>STACKING</source>
+ <translation>EMPILHAMENTO</translation>
</message>
<message>
- <source>Time:</source>
- <translation>Tempo:</translation>
+ <source>octave(s)</source>
+ <translation>oitava(s)</translation>
</message>
+</context>
+<context>
+ <name>InstrumentMidiIOView</name>
<message>
- <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
-
-The On/Off switch allows you to bypass a given plugin at any point in time.
-
-The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
-
-The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
-
-The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
-
-The Controls button opens a dialog for editing the effect's parameters.
-
-Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
- <translation>Os plugins de efeitos terão o sinal processado de cima para baixo quando estiverem na cadeia de efeitos.
-
-O botão de Liga/Desliga permite que você pule o plugin selecionado a qualquer momento.
-
-O botão de Processado/Limpo controla a quantidade de processamento do efeito que vai para o sinal (som). A entrada de um plugin é a saída do plugin anterior. Então o sinal "Limpo" de um efeito posicionado na parte de baixo na cadeia conterá o processamento de todos os efeitos situados acima na cadeia.
-
-O botão de Decaimento controla quanto tempo o sinal continuará sendo processado após a nota não estar mais sendo apertada. O efeito irá parar o processamento quando o volume estiver abaixo de um limite dado um tempo específico. Tempos grandes precisarão de mais potência da CPU (processador), este número deverá ser pequeno para a maioria dos efeitos. Será necessário aumentar para efeitos que precisam ocupar períodos de silêncio como os efeitos de Atraso por exemplo...
-
-O botão de Portal (Gate) especificará o nível, o limite que o efeito parará de atuar. Por exemplo, um relógio começa a funcionar sempre que o nível de sinal estiver abaixo do especificado por este botão.
-
-O botão Controles abre uma caixa de diálogo para edição de parâmetros do efeito.
-
-Clicar com o botão direito no mouse irá exibir um menu de contexto onde você pode alterar a ordem em que os efeitos são processados ou também apagar um efeito, tudo ao mesmo tempo.</translation>
+ <source>NOTE</source>
+ <translation>NOTA</translation>
</message>
<message>
- <source>Wet Level:</source>
- <translation>Nível de Processamento:</translation>
+ <source>PROGRAM</source>
+ <translation>PROGRAMA</translation>
</message>
<message>
- <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
- <translation>O botão de Decaimento controla quanto tempo demora até que o processamento seja interrompido. Valores pequenos irão reduzir o consumo de CPU mas em contrapartida você correrá o risco de saturar o final do sinal ao utilizar efeitos de reverberação e atraso (delay).</translation>
+ <source>MIDI devices to send MIDI events to</source>
+ <translation>Dispositivos MIDI para mandar eventos MIDI para</translation>
</message>
<message>
- <source>On/Off</source>
- <translation>Liga/Desliga</translation>
+ <source>CHANNEL</source>
+ <translation>CANAL</translation>
</message>
<message>
- <source>Controls</source>
- <translation>Controles</translation>
+ <source>ENABLE MIDI OUTPUT</source>
+ <translation>HABILITAR SAÍDA MIDI</translation>
</message>
<message>
- <source>Move &up</source>
- <translation>Para &Cima</translation>
+ <source>MIDI devices to receive MIDI events from</source>
+ <translation>Dispositivos MIDI para receber eventos MIDI de</translation>
</message>
<message>
- <source>Move &down</source>
- <translation>Para &Baixo</translation>
+ <source>VELOCITY</source>
+ <translation>INTENSIDADE</translation>
</message>
<message>
- <source>Toggles the effect on or off.</source>
- <translation>Mantém o efeito ligado ou desligado.</translation>
+ <source>ENABLE MIDI INPUT</source>
+ <translation>HABILITAR ENTRADA MIDI</translation>
</message>
<message>
- <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
- <translation>O botão de Processado/Limpo especifica a quantidade de sinal de entrada que será afetado pelo efeito.</translation>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
- <translation>O botão Portal (Gate) controla a passagem de sínal de acordo no o seu nível de intensidade (volume). o que estiver acima no nível definido passa, se o nível for menor que o definido haverá silêncio.</translation>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Remove this plugin</source>
- <translation>&Remover este plugin</translation>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>InstrumentSoundShaping</name>
<message>
- <source>VOL</source>
- <translation>VOL</translation>
+ <source>Moog</source>
+ <translation>Moog</translation>
</message>
<message>
- <source>Track volume</source>
- <translation>Volume da pista</translation>
+ <source>RESO</source>
+ <translation>RESS</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation>Volume do canal:</translation>
+ <source>Notch</source>
+ <translation>Vale</translation>
</message>
-</context>
-<context>
- <name>ladspaPortDialog</name>
<message>
- <source>Yes</source>
- <translation>Sim</translation>
+ <source>BandPass czpg</source>
+ <translation>Passa Banda czpg</translation>
</message>
<message>
- <source>Name</source>
- <translation>Nome</translation>
+ <source>RC BandPass 24dB</source>
+ <translation>RC PassaBanda 24dB</translation>
</message>
<message>
- <source>Rate</source>
- <translation>Taxa</translation>
+ <source>RC BandPass 12dB</source>
+ <translation>RC PassaBanda 12dB</translation>
</message>
<message>
- <source>Type</source>
- <translation>Tipo</translation>
+ <source>LowPass</source>
+ <translation>Passa Baixa</translation>
</message>
<message>
- <source>Audio</source>
- <translation>Áudio</translation>
+ <source>2x LowPass</source>
+ <translation>2x Passa Baixa</translation>
</message>
<message>
- <source>Float</source>
- <translation>Decimal</translation>
+ <source>CUTOFF</source>
+ <translation>CORTE</translation>
</message>
<message>
- <source>Input</source>
- <translation>Entradas</translation>
+ <source>RC HighPass 24dB</source>
+ <translation>RC PassaAlta 24dB</translation>
</message>
<message>
- <source>Ports</source>
- <translation>Portas</translation>
+ <source>RC HighPass 12dB</source>
+ <translation>RC PassaAlta 12dB</translation>
</message>
<message>
- <source>Integer</source>
- <translation>Inteiro</translation>
+ <source>HiPass</source>
+ <translation>Passa Alta</translation>
</message>
<message>
- <source>SR Dependent</source>
- <translation>Dependente de SR</translation>
+ <source>VOLUME</source>
+ <translation>VOLUME</translation>
</message>
<message>
- <source>Output</source>
- <translation>Saídas</translation>
+ <source>Volume</source>
+ <translation>Volume</translation>
</message>
<message>
- <source>Min < Default < Max</source>
- <translation>Min < Padrão < Máx</translation>
+ <source>Vocal Formant Filter</source>
+ <translation>Filtro de Formante Vocal</translation>
</message>
<message>
- <source>Direction</source>
- <translation>Direção</translation>
+ <source>Allpass</source>
+ <translation>Passa todas</translation>
</message>
<message>
- <source>Logarithmic</source>
- <translation>Logarítmico</translation>
+ <source>Cutoff frequency</source>
+ <translation>Frequência de corte</translation>
</message>
<message>
- <source>Control</source>
- <translation>Controle</translation>
+ <source>Envelopes/LFOs</source>
+ <translation>Envelopes/LFOs</translation>
</message>
<message>
- <source>Toggled</source>
- <translation>Alternado</translation>
+ <source>Q/Resonance</source>
+ <translation>Q/Ressonância</translation>
</message>
-</context>
-<context>
- <name>VestigeInstrumentView</name>
<message>
- <source>by </source>
- <translation>por</translation>
+ <source>Resonance</source>
+ <translation>Ressonância</translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
- <translation>Abrir pré definição de plugin VST</translation>
+ <source>Filter type</source>
+ <translation>Tipo de filtro</translation>
</message>
<message>
- <source> - VST plugin control</source>
- <translation> - Controle de plugins VST</translation>
+ <source>BandPass csg</source>
+ <translation>Passa Banda csg</translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
- <translation>Clique aqui se você precisa salvar o programa de pré definição do plugin VST.</translation>
+ <source>RC LowPass 24dB</source>
+ <translation>RC PassaBaixa 24dB</translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
- <translation>Clique aqui para selecionar a pré definição que está sendo carregada no VST.</translation>
+ <source>RC LowPass 12dB</source>
+ <translation>RC PassaBaixa 12dB</translation>
</message>
+</context>
+<context>
+ <name>InstrumentSoundShapingView</name>
<message>
- <source>Previous (-)</source>
- <translation>Anterior (-)</translation>
+ <source>Hz</source>
+ <translation>Hz</translation>
</message>
<message>
- <source>Open other VST-plugin</source>
- <translation>Abrir outro plugin VST</translation>
+ <source>FREQ</source>
+ <translation>FREQ</translation>
</message>
<message>
- <source>Preset</source>
- <translation>Pré definição</translation>
+ <source>RESO</source>
+ <translation>RESS</translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
- <translation>Clique aqui se você precisa controlar o plugin VST por outro host.</translation>
+ <source>These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff freque [...]
+ <translation>Estas abas contém envelopes. Eles são muito importantes para modificar o som sendo especialmente úteis toda vez que você precisar fazer uma síntese subtrativa. Por exemplo, se você tem um envelope de volume, você pode fazer com que o volume do som varie de forma específica. Se você quiser criar um instrumento virtual onde seu som tem fade de entrada e saída bem suaves (fade no nosso caso é o aumento ou diminuição de volume no começo ou fim de um evento sonoro), isto [...]
</message>
<message>
- <source>EXE-files (*.exe)</source>
- <translation>Arquivos EXE (*.exe)</translation>
+ <source>cutoff frequency:</source>
+ <translation>frequência de corte:</translation>
</message>
<message>
- <source>DLL-files (*.dll)</source>
- <translation>Arquivos DLL (*.dll)</translation>
+ <source>FILTER</source>
+ <translation>FILTRO</translation>
</message>
<message>
- <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
- <translation>Clique aqui para mostrar ou esconder a interface gráfica do usuário (GUI) do plugin VST.</translation>
+ <source>TARGET</source>
+ <translation>OBJETO</translation>
</message>
<message>
- <source>Show/hide GUI</source>
- <translation>Mostrar/esconder GUI</translation>
+ <source>Resonance:</source>
+ <translation>Ressonância:</translation>
</message>
<message>
- <source>Save preset</source>
- <translation>Salvar pré definição</translation>
+ <source>Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.</source>
+ <translation>Use este botão para modificar o Q/Ressonância para o filtro selecionado. o Q/Ressonância diz o quanto será filtrado das frequências próximas à frequência de corte.</translation>
</message>
<message>
- <source>Open VST-plugin</source>
- <translation>Abrir plugin VST</translation>
+ <source>Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...</source>
+ <translation>Use este botão para modificar a frequência de corte do filtro selecionado. A frequência de corte especifica a frequência na qual o sinal vai ser filtrado. Por exemplo, um filtro Passa Baixa filtra todas as frequências que estiverem depois da frequência de corte. Um filtro PassaAlta filtra todas as frequências que estiverem antes da frequência de corte, e por aí vai...</translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
- <translation>Controlar plugin VST a partir do host LMMS</translation>
+ <source>Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.</source>
+ <translation>Aqui você pode selecionar o filtro embutido que você precisar para sua pista de instrumento. Filtros são muito importantes para mudar as características do som.</translation>
</message>
<message>
- <source>Next (+)</source>
- <translation>Próximo (+)</translation>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>InstrumentTrack</name>
<message>
- <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
- <translation>Clique aqui se você quer abrir outro plugin VST. clicando neste botão, você verá uma caixa da seleção para escolher o arquivo.</translation>
+ <source>Pitch</source>
+ <translation>Altura</translation>
</message>
<message>
- <source>Turn off all notes</source>
- <translation>Desligar todas as notas</translation>
+ <source>Volume</source>
+ <translation>Volume</translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
- <translation>Clique aqui se você precisa abrir outro tipo de arquivo de pré definição de plugin VST como: *.fxp, *.fxb.</translation>
+ <source>unnamed_track</source>
+ <translation>pista_sem_nome</translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
- <translation>Clique aqui se você precisar trocar para outro programa de pré definições de plugin VST.</translation>
+ <source>With this knob you can set the volume of the opened channel.</source>
+ <translation>Com este botão você pode ajustar o volume do canal aberto.</translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
- <translation>Nenhum plugin VST carregado</translation>
+ <source>Panning</source>
+ <translation>Panorâmico</translation>
</message>
-</context>
-<context>
- <name>MainWindow</name>
<message>
- <source>&New</source>
- <translation>&Novo</translation>
+ <source>Base note</source>
+ <translation>Nota base</translation>
</message>
<message>
- <source>Help</source>
- <translation>Ajuda</translation>
+ <source>FX channel</source>
+ <translation>Canal de Efeitos</translation>
</message>
<message>
- <source>&Edit</source>
- <translation>&Editar</translation>
+ <source>Pitch range</source>
+ <translation>Extensão</translation>
</message>
<message>
- <source>&Help</source>
- <translation>Aj&uda</translation>
+ <source>Default preset</source>
+ <translation>Pré configuração padrão</translation>
</message>
+</context>
+<context>
+ <name>InstrumentTrackView</name>
<message>
- <source>&Quit</source>
- <translation>Sai&r</translation>
+ <source>PAN</source>
+ <translation>PAN</translation>
</message>
<message>
- <source>&Save</source>
- <translation>&Salvar</translation>
+ <source>VOL</source>
+ <translation>VOL</translation>
</message>
<message>
- <source>About</source>
- <translation>Sobre</translation>
+ <source>MIDI</source>
+ <translation>MIDI</translation>
</message>
<message>
- <source>Show/hide Song-Editor</source>
- <translation>Mostrar/esconder Editor de Arranjo</translation>
+ <source>Input</source>
+ <translation>Entradas</translation>
</message>
<message>
- <source>Configuration file</source>
- <translation>Arquivo de configuração</translation>
+ <source>Output</source>
+ <translation>Saídas</translation>
</message>
<message>
- <source>What's this?</source>
- <translation>O que é isso?</translation>
+ <source>Volume</source>
+ <translation>Volume</translation>
</message>
<message>
- <source>Error while parsing configuration file at line %1:%2: %3</source>
- <translation>Erro ao analisar arquivo de configuração na linha %1:%2: %3</translation>
+ <source>Panning</source>
+ <translation>Panorâmico</translation>
</message>
<message>
- <source>LMMS %1</source>
- <translation>LMMS %1</translation>
+ <source>Panning:</source>
+ <translation>Panorâmico:</translation>
</message>
<message>
- <source>Show/hide FX Mixer</source>
- <translation>Mostrar/esconder Mixer de Efeitos</translation>
+ <source>Volume:</source>
+ <translation>Volume:</translation>
</message>
+</context>
+<context>
+ <name>InstrumentTrackWindow</name>
<message>
- <source>Open existing project</source>
- <translation>Abrir projeto existente</translation>
+ <source>FX</source>
+ <translation>EFEITOS</translation>
</message>
<message>
- <source>E&xport tracks...</source>
- <translation>Re&nderizar pistas...</translation>
+ <source>PAN</source>
+ <translation>PAN</translation>
</message>
<message>
- <source>Show/hide Piano-Roll</source>
- <translation>Mostrar/esconder Editor de Notas MIDI</translation>
+ <source>VOL</source>
+ <translation>VOL</translation>
</message>
<message>
- <source>Save project</source>
- <translation>Salvar projeto</translation>
+ <source>FUNC</source>
+ <translation>RECURSOS</translation>
</message>
<message>
- <source>&Tools</source>
- <translation>&Ferramentas</translation>
+ <source>MIDI</source>
+ <translation>MIDI</translation>
</message>
<message>
- <source>Save &As...</source>
- <translation>Salvar &como...</translation>
+ <source>PITCH</source>
+ <translation>ALTURA</translation>
</message>
<message>
- <source>Open project</source>
- <translation>Abrir projeto</translation>
+ <source>RANGE</source>
+ <translation>EXTENSÃO</translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation>Projeto do LMMS (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</translation>
+ <source>Pitch</source>
+ <translation>Altura</translation>
</message>
<message>
- <source>LMMS (*.mmp *.mmpz)</source>
- <translation>LMMS (*.mmp *.mmpz)</translation>
+ <source>cents</source>
+ <translation>centésimos</translation>
</message>
<message>
- <source>Save as new &version</source>
- <translation>Salvar como nova &versão</translation>
+ <source>GENERAL SETTINGS</source>
+ <translation>AJUSTES GERAIS</translation>
</message>
<message>
- <source>Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way.</source>
- <translation>Clique aqui para mostrar ou esconder o Editor de Notas MIDI. Com ele você pode editar melodias facilmente.</translation>
+ <source>PLUGIN</source>
+ <translation>PLUGIN</translation>
</message>
<message>
- <source>Online help</source>
- <translation>Ajuda Online</translation>
+ <source>Pitch:</source>
+ <translation>Altura:</translation>
</message>
<message>
- <source>Show/hide project notes</source>
- <translation>Mostrar/esconder comentários do projeto</translation>
+ <source>Panning</source>
+ <translation>Panorâmico</translation>
</message>
<message>
- <source>Create new project from template</source>
- <translation>Criar novo projeto a partir de um modelo</translation>
+ <source>Save preset</source>
+ <translation>Salvar pré definição</translation>
</message>
<message>
- <source>The current project was modified since last saving. Do you want to save it now?</source>
- <translation>O projeto atual foi modificado. Quer salvá-lo agora?</translation>
+ <source>Panning:</source>
+ <translation>Panorâmico:</translation>
</message>
<message>
- <source>Create new project</source>
- <translation>Criar novo projeto</translation>
+ <source>FX channel</source>
+ <translation>Canal de Efeitos</translation>
</message>
<message>
- <source>Click here to show or hide the project notes window. In this window you can put down your project notes.</source>
- <translation>Clique aqui para mostrar ou esconder a janela com comentários do projeto. Nela você pode escrever comentários e observações sobre o seu projeto.</translation>
+ <source>ENV/LFO</source>
+ <translation>ENV/LFO</translation>
</message>
<message>
- <source>My home</source>
- <translation>Minha pasta</translation>
+ <source>XML preset file (*.xpf)</source>
+ <translation>Arquivo de pré definições XML (*.xpf)</translation>
</message>
<message>
- <source>Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels.</source>
- <translation>Clique aqui para mostrar ou esconder o Mixer de Efeitos. O Mixer de Efeitos é uma poderosa ferramenta para gerenciar os efeitos utilizados na sua música. Você pode inserir efeitos em diferentes canais de efeito.</translation>
+ <source>Volume:</source>
+ <translation>Volume:</translation>
</message>
<message>
- <source>By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist.</source>
- <translation>Pressionando este botão você pode mostrar ou esconder o Editor de Arranjo. Com a ajuda do Editor de Arranjo você pode editar os trechos da sua música especificando quando eles serão tocados. Você também pode mover amostras (ex. amostras ou loops de rap ou funk) diretamente para o Editor de Arranjo.</translation>
+ <source>Pitch range (semitones)</source>
+ <translation>Extensão (semitons)</translation>
</message>
<message>
- <source>Untitled</source>
- <translation>Sem_nome</translation>
+ <source>Instrument volume</source>
+ <translation>Volume do instrumento</translation>
</message>
<message>
- <source>Recently opened projects</source>
- <translation>Arquivos usados recentemente</translation>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>My computer</source>
- <translation>Meu computador</translation>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>LadspaControl</name>
<message>
- <source>&Open...</source>
- <translation>&Abrir...</translation>
+ <source>Link channels</source>
+ <translation>Conectar canais</translation>
</message>
+</context>
+<context>
+ <name>LadspaControlDialog</name>
<message>
- <source>Help not available</source>
- <translation>Ajuda não disponível</translation>
+ <source>Link Channels</source>
+ <translation>Conectar Canais</translation>
</message>
<message>
- <source>Save current project</source>
- <translation>Salvar projeto atual</translation>
+ <source>Channel </source>
+ <translation>Canal</translation>
</message>
+</context>
+<context>
+ <name>LadspaControlView</name>
<message>
- <source>Show/hide Automation Editor</source>
- <translation>Mostrar/esconder Editor de Automação</translation>
+ <source>Sorry, no help available.</source>
+ <translation>Desculpe, ajuda indisponível... :(.</translation>
</message>
<message>
- <source>Recently opened project</source>
- <translation>Projetos usados recentemente</translation>
+ <source>Value:</source>
+ <translation>Valor:</translation>
</message>
<message>
- <source>Currently there's no help available in LMMS.
-Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
- <translation>Atualmente não há ajuda disponível no LMMS.
-Por favor visite http://lmms.sf.net/wiki para ter acesso a mais infromações sobre LMMS.</translation>
+ <source>Link channels</source>
+ <translation>Conectar canais</translation>
</message>
+</context>
+<context>
+ <name>LadspaEffect</name>
<message>
- <source>Import...</source>
- <translation>Importar...</translation>
+ <source>Effect</source>
+ <translation>Efeito</translation>
</message>
<message>
- <source>E&xport...</source>
- <translation>&Renderizar...</translation>
+ <source>Unknown LADSPA plugin %1 requested.</source>
+ <translation>Plugin LADSPA %1 desconhecido requisitado.</translation>
</message>
+</context>
+<context>
+ <name>LcdSpinBox</name>
<message>
- <source>My presets</source>
- <translation>Minhas pré definições</translation>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Por favor entre com um novo valor entre %1 e %2:</translation>
</message>
+</context>
+<context>
+ <name>LfoController</name>
<message>
- <source>&Project</source>
- <translation>&Projeto</translation>
+ <source>LFO Controller</source>
+ <translation>Controlador de LFO</translation>
</message>
<message>
- <source>Could not save config-file</source>
- <translation>O arquivo de configuração não pode ser salvo</translation>
+ <source>Oscillator phase</source>
+ <translation>Fase do oscilador</translation>
</message>
<message>
- <source>Working directory</source>
- <translation>Pasta de trabalho</translation>
+ <source>Oscillator speed</source>
+ <translation>Velocidade do oscilador</translation>
</message>
<message>
- <source>Export current project</source>
- <translation>Exportar projeto atual</translation>
- </message>
- <message>
- <source>My projects</source>
- <translation>Meus projetos</translation>
+ <source>Oscillator amount</source>
+ <translation>Quantidade do oscilador</translation>
</message>
<message>
- <source>My samples</source>
- <translation>Minhas amostras</translation>
+ <source>Oscillator waveform</source>
+ <translation>Forma de onda do oscilador</translation>
</message>
<message>
- <source>Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way.</source>
- <translation>Clique aqui para mostrar ou esconder o Editor de Automação. Com ele você pode editar os valores dinâmicos de automação facilmente.</translation>
+ <source>Base value</source>
+ <translation>Valor base</translation>
</message>
<message>
- <source>Version %1</source>
- <translation>Versão %1</translation>
+ <source>Frequency Multiplier</source>
+ <translation>Multiplicador de frequência</translation>
</message>
+</context>
+<context>
+ <name>LfoControllerDialog</name>
<message>
- <source>Could not save configuration file %1. You're probably not permitted to write to this file.
-Please make sure you have write-access to the file and try again.</source>
- <translation>O arquivo de configuração %1 não pode ser salvo. Provavelmente voc6e não tem permissão de escrita para este arquivo.
-Por favor certifique-se que você tem permissão de escrita para este arquivo e tente novamente.</translation>
+ <source>AMT</source>
+ <translation>QNT</translation>
</message>
<message>
- <source>Project recovery</source>
- <translation>Recuperação de projeto</translation>
+ <source>LFO</source>
+ <translation>LFO</translation>
</message>
<message>
- <source>Settings</source>
- <translation>Opções</translation>
+ <source>PHS</source>
+ <translation>DFS</translation>
</message>
<message>
- <source>Project not saved</source>
- <translation>Projeto não salvo</translation>
+ <source>SPD</source>
+ <translation>VEL</translation>
</message>
<message>
- <source>The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings.</source>
- <translation>A pasta de trabalho do LMMS %1 não existe. Posso criá-la? Você pode mudá-la depois indo em Editar -> Opções.</translation>
+ <source>BASE</source>
+ <translation>CENTRO</translation>
</message>
<message>
- <source>Show/hide Beat+Bassline Editor</source>
- <translation>Mostrar/esconder Editor de Bases</translation>
+ <source>todo</source>
+ <translation>O botão "CENTRO" regula o ponto de referência onde o seu oscilador irá variar. Podendo o "CENTRO" variar entre os valores zero e um, o ponto de referência será um valor entre zero e um no qual se iniciará o processo de oscilação do LFO (Oscilador de baixa frequência).</translation>
</message>
<message>
- <source>Root directory</source>
- <translation>Diretório raiz</translation>
+ <source>LFO Controller</source>
+ <translation>Controlador de LFO</translation>
</message>
<message>
- <source>It looks like the last session did not end properly. Do you want to recover the project of this session?</source>
- <translation>Parece que a última sessão não foi encerrada corretamente. Você quer recuperar o projeto da última sessão?</translation>
+ <source>Click here for an exponential wave.</source>
+ <translation>Clique aqui para usar uma onda exponencial.</translation>
</message>
<message>
- <source>By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that.</source>
- <translation>Pressionando este botão você pode mostrar ou esconder o Editor de Bases. No Editor de Bases você pode criar as batidas e a linha de baixo para sua base adicionando ou removendo canais, copiando e colando sequências de batidas e/ou sequências de linha de baixo, ou o que mais você quiser.</translation>
+ <source>Phase offset:</source>
+ <translation>Defasamento:</translation>
</message>
<message>
- <source>Show/hide controller rack</source>
- <translation>Mostrar/esconder a Estante de Controladorer</translation>
+ <source>Click here for a saw-wave.</source>
+ <translation>Clique aqui para usar uma onda dente-de-serra.</translation>
</message>
-</context>
-<context>
- <name>malletsInstrument</name>
<message>
- <source>ADSR</source>
- <translation>ADSR</translation>
+ <source>Click here for white-noise.</source>
+ <translation>Clique aqui para usar um ruído branco.</translation>
</message>
<message>
- <source>Reso</source>
- <translation>Resso</translation>
+ <source>LFO-speed:</source>
+ <translation>LFO - Velocidade:</translation>
</message>
<message>
- <source>Agogo</source>
- <translation></translation>
+ <source>Base amount:</source>
+ <translation>Ponto de Referência:</translation>
</message>
<message>
- <source>Beats</source>
- <translation>Batidas</translation>
+ <source>Click here for a sine-wave.</source>
+ <translation>Clique aqui para usar uma onda senoidal.</translation>
</message>
<message>
- <source>Bowed</source>
- <translation>De Arco</translation>
+ <source>Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect.</source>
+ <translation>Use este botão para mudar a velocidade do LFO. Quanto maior for este valor, mais rápido oscila o LFO e assim também o efeito a sofrer a modulação.</translation>
</message>
<message>
- <source>Clump</source>
- <translation></translation>
+ <source>degrees</source>
+ <translation>graus</translation>
</message>
<message>
- <source>Glass</source>
- <translation>Taça</translation>
+ <source>Click here for a user-defined shape.
+Double click to pick a file.</source>
+ <translation>Clique aqui para usar uma forma de onda definida manualmente. Dê dois cliques para buscar um arquivo.</translation>
</message>
<message>
- <source>Speed</source>
- <translation>Velocidade</translation>
+ <source>Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO.</source>
+ <translation>Use este botão para mudar a quantidade de modulação do LFO. Quanto maior for este valor, mais influenciado será o controle conectado (controle de volume ou frequência de corte por exemplo) pelo LFO.</translation>
</message>
<message>
- <source>Wood1</source>
- <translation>Madeira-1</translation>
+ <source>Modulation amount:</source>
+ <translation>Quantidade de modulação:</translation>
</message>
<message>
- <source>Wood2</source>
- <translation>Madeira-2</translation>
+ <source>Click here for a square-wave.</source>
+ <translation>Clique aqui para usar uma onda quadrada.</translation>
</message>
<message>
- <source>Vibrato Freq</source>
- <translation>Frequência do Vibrato</translation>
+ <source>With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <translation>Com este botão você pode mudar a posição da fase da onda de LFO. Fase é em que ponto a onda inicia o processo de oscilação, desta maneira você pode definir onde você quer que comece o processo de oscilação. Por exemplo, se você tiver uma onda senoidal com defasamento de 180 graus, ela vai começar para baixo. O mesmo acontece com outras formas de onda, como a dente de serra por exemplo.</translation>
</message>
<message>
- <source>Vibrato Gain</source>
- <translation>Ganho do Vibrato</translation>
+ <source>Click here for a a moog saw-wave.</source>
+ <translation>Clique aqui para usar uma onda dente-de-serra moog.</translation>
</message>
<message>
- <source>LFO Depth</source>
- <translation>LFO - Profundidade</translation>
+ <source>Click here for a triangle-wave.</source>
+ <translation>Clique aqui para usar uma onda triangular.</translation>
</message>
+</context>
+<context>
+ <name>MainWindow</name>
<message>
- <source>Two Fixed</source>
- <translation>Duas Fixas</translation>
+ <source>&New</source>
+ <translation>&Novo</translation>
</message>
<message>
- <source>LFO Speed</source>
- <translation>LFO - Velocidade</translation>
+ <source>Help</source>
+ <translation>Ajuda</translation>
</message>
<message>
- <source>Marimba</source>
- <translation></translation>
+ <source>&Edit</source>
+ <translation>&Editar</translation>
</message>
<message>
- <source>Tibetan Bowl</source>
- <translation>Tigelas Tibetanas</translation>
+ <source>&Help</source>
+ <translation>Aj&uda</translation>
</message>
<message>
- <source>Tuned Bar</source>
- <translation>Barra Afinada</translation>
+ <source>&Quit</source>
+ <translation>Sai&r</translation>
</message>
<message>
- <source>Motion</source>
- <translation>Movimento</translation>
+ <source>&Save</source>
+ <translation>&Salvar</translation>
</message>
<message>
- <source>Spread</source>
- <translation>Propagação</translation>
+ <source>About</source>
+ <translation>Sobre</translation>
</message>
<message>
- <source>Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!</source>
- <translation>Sua instalação Stk parece estar incompleta. Por favor certifique-se que o pacote Stk (Stk-package) esteja completamente instalado!</translation>
+ <source>Show/hide Song-Editor</source>
+ <translation>Mostrar/esconder Editor de Arranjo</translation>
</message>
<message>
- <source>Position</source>
- <translation>Posição</translation>
+ <source>Configuration file</source>
+ <translation>Arquivo de configuração</translation>
</message>
<message>
- <source>Crossfade</source>
- <translation>Transição</translation>
+ <source>What's this?</source>
+ <translation>O que é isso?</translation>
</message>
<message>
- <source>Uniform Bar</source>
- <translation>Barra Uniforme</translation>
+ <source>Error while parsing configuration file at line %1:%2: %3</source>
+ <translation>Erro ao analisar arquivo de configuração na linha %1:%2: %3</translation>
</message>
<message>
- <source>Vibraphone</source>
- <translation>Vibrafone</translation>
+ <source>LMMS %1</source>
+ <translation>LMMS %1</translation>
</message>
<message>
- <source>Hardness</source>
- <translation>Dificuldade</translation>
+ <source>Show/hide FX Mixer</source>
+ <translation>Mostrar/esconder Mixer de Efeitos</translation>
</message>
<message>
- <source>Pressure</source>
- <translation>Pressão</translation>
+ <source>Open existing project</source>
+ <translation>Abrir projeto existente</translation>
</message>
<message>
- <source>Modulator</source>
- <translation>Modulador</translation>
+ <source>E&xport tracks...</source>
+ <translation>Re&nderizar pistas...</translation>
</message>
<message>
- <source>Missing files</source>
- <translation>Arquivos perdidos</translation>
+ <source>Show/hide Piano-Roll</source>
+ <translation>Mostrar/esconder Editor de Notas MIDI</translation>
</message>
<message>
- <source>Stick Mix</source>
- <translation>Percussa Mix</translation>
+ <source>Save project</source>
+ <translation>Salvar projeto</translation>
</message>
<message>
- <source>Tubular Bells</source>
- <translation>Sinos Tubulares</translation>
+ <source>&Tools</source>
+ <translation>&Ferramentas</translation>
</message>
-</context>
-<context>
- <name>malletsInstrumentView</name>
<message>
- <source>ADSR</source>
- <translation></translation>
+ <source>Save &As...</source>
+ <translation>Salvar &como...</translation>
</message>
<message>
- <source>ADSR:</source>
- <translation></translation>
+ <source>Open project</source>
+ <translation>Abrir projeto</translation>
</message>
<message>
- <source>Bowed</source>
- <translation>De Arco</translation>
+ <source>LMMS (*.mmp *.mmpz)</source>
+ <translation>LMMS (*.mmp *.mmpz)</translation>
</message>
<message>
- <source>Speed</source>
- <translation>Velocidade</translation>
+ <source>Save as new &version</source>
+ <translation>Salvar como nova &versão</translation>
</message>
<message>
- <source>LFO Depth</source>
- <translation>Prondudade do LFO</translation>
+ <source>Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way.</source>
+ <translation>Clique aqui para mostrar ou esconder o Editor de Notas MIDI. Com ele você pode editar melodias facilmente.</translation>
</message>
<message>
- <source>LFO Speed</source>
- <translation>LFO - Velocidade</translation>
+ <source>Online help</source>
+ <translation>Ajuda Online</translation>
</message>
<message>
- <source>Vib Gain:</source>
- <translation>Ganho Vibracional:</translation>
+ <source>Show/hide project notes</source>
+ <translation>Mostrar/esconder comentários do projeto</translation>
</message>
<message>
- <source>Vib Freq:</source>
- <translation>Frequência de Vibração:</translation>
+ <source>Create new project from template</source>
+ <translation>Criar novo projeto a partir de um modelo</translation>
</message>
<message>
- <source>Motion:</source>
- <translation>Movimento:</translation>
+ <source>The current project was modified since last saving. Do you want to save it now?</source>
+ <translation>O projeto atual foi modificado. Quer salvá-lo agora?</translation>
</message>
<message>
- <source>LFO Depth:</source>
- <translation>Profundidade do LFO:</translation>
+ <source>Create new project</source>
+ <translation>Criar novo projeto</translation>
</message>
<message>
- <source>Motion</source>
- <translation>Movimento</translation>
+ <source>Click here to show or hide the project notes window. In this window you can put down your project notes.</source>
+ <translation>Clique aqui para mostrar ou esconder a janela com comentários do projeto. Nela você pode escrever comentários e observações sobre o seu projeto.</translation>
</message>
<message>
- <source>LFO Speed:</source>
- <translation>Velocidade do LFO:</translation>
+ <source>My home</source>
+ <translation>Minha pasta</translation>
</message>
<message>
- <source>Speed:</source>
- <translation>Velocidade:</translation>
+ <source>Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels.</source>
+ <translation>Clique aqui para mostrar ou esconder o Mixer de Efeitos. O Mixer de Efeitos é uma poderosa ferramenta para gerenciar os efeitos utilizados na sua música. Você pode inserir efeitos em diferentes canais de efeito.</translation>
</message>
<message>
- <source>Spread</source>
- <translation>Propagação</translation>
+ <source>By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist.</source>
+ <translation>Pressionando este botão você pode mostrar ou esconder o Editor de Arranjo. Com a ajuda do Editor de Arranjo você pode editar os trechos da sua música especificando quando eles serão tocados. Você também pode mover amostras (ex. amostras ou loops de rap ou funk) diretamente para o Editor de Arranjo.</translation>
</message>
<message>
- <source>Position</source>
- <translation>Posição</translation>
+ <source>Untitled</source>
+ <translation>Sem_nome</translation>
</message>
<message>
- <source>Crossfade</source>
- <translation>Transição</translation>
+ <source>Recently opened projects</source>
+ <translation>Arquivos usados recentemente</translation>
</message>
<message>
- <source>Hardness</source>
- <translation>Dificuldade</translation>
+ <source>My computer</source>
+ <translation>Meu computador</translation>
</message>
<message>
- <source>Hardness:</source>
- <translation>Dificuldade:</translation>
+ <source>&Open...</source>
+ <translation>&Abrir...</translation>
</message>
<message>
- <source>Pressure</source>
- <translation>Pressão</translation>
+ <source>Help not available</source>
+ <translation>Ajuda não disponível</translation>
</message>
<message>
- <source>Stick Mix:</source>
- <translation>Mistura da Percussão:</translation>
+ <source>Save current project</source>
+ <translation>Salvar projeto atual</translation>
</message>
<message>
- <source>Position:</source>
- <translation>Posição:</translation>
+ <source>Show/hide Automation Editor</source>
+ <translation>Mostrar/esconder Editor de Automação</translation>
</message>
<message>
- <source>Spread:</source>
- <translation>Propagação:</translation>
+ <source>Recently opened project</source>
+ <translation>Projetos usados recentemente</translation>
</message>
<message>
- <source>Crossfade:</source>
- <translation>Transição:</translation>
+ <source>Currently there's no help available in LMMS.
+Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
+ <translation>Atualmente não há ajuda disponível no LMMS.
+Por favor visite http://lmms.sf.net/wiki para ter acesso a mais infromações sobre LMMS.</translation>
</message>
<message>
- <source>Instrument</source>
- <translation>Instrumento</translation>
+ <source>Import...</source>
+ <translation>Importar...</translation>
</message>
<message>
- <source>Modulator</source>
- <translation>Modulador</translation>
+ <source>E&xport...</source>
+ <translation>&Renderizar...</translation>
</message>
<message>
- <source>Modulator:</source>
- <translation>Modulador:</translation>
+ <source>My presets</source>
+ <translation>Minhas pré definições</translation>
</message>
<message>
- <source>Pressure:</source>
- <translation>Pressão:</translation>
+ <source>&Project</source>
+ <translation>&Projeto</translation>
</message>
<message>
- <source>Vibrato</source>
- <translation></translation>
+ <source>Could not save config-file</source>
+ <translation>O arquivo de configuração não pode ser salvo</translation>
</message>
<message>
- <source>Vib Gain</source>
- <translation>Ganho Vibr</translation>
+ <source>Working directory</source>
+ <translation>Pasta de trabalho</translation>
</message>
<message>
- <source>Vib Freq</source>
- <translation>Freq Vibr</translation>
+ <source>Export current project</source>
+ <translation>Exportar projeto atual</translation>
</message>
<message>
- <source>Vibrato:</source>
- <translation></translation>
+ <source>My projects</source>
+ <translation>Meus projetos</translation>
</message>
<message>
- <source>Stick Mix</source>
- <translation>Percussa Mix</translation>
+ <source>My samples</source>
+ <translation>Minhas amostras</translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>AMNT</source>
- <translation>QNTD</translation>
+ <source>Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way.</source>
+ <translation>Clique aqui para mostrar ou esconder o Editor de Automação. Com ele você pode editar os valores dinâmicos de automação facilmente.</translation>
</message>
<message>
- <source>BASE</source>
- <translation>BASE</translation>
+ <source>Version %1</source>
+ <translation>Versão %1</translation>
</message>
<message>
- <source>ATCK</source>
- <translation>ATQU</translation>
+ <source>Could not save configuration file %1. You're probably not permitted to write to this file.
+Please make sure you have write-access to the file and try again.</source>
+ <translation>O arquivo de configuração %1 não pode ser salvo. Provavelmente voc6e não tem permissão de escrita para este arquivo.
+Por favor certifique-se que você tem permissão de escrita para este arquivo e tente novamente.</translation>
</message>
<message>
- <source>DCAY</source>
- <translation>DCAI</translation>
+ <source>Project recovery</source>
+ <translation>Recuperação de projeto</translation>
</message>
<message>
- <source>MULT</source>
- <translation>MULT</translation>
+ <source>Settings</source>
+ <translation>Opções</translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
- <translation>Multiplicador de quantidade:</translation>
+ <source>Project not saved</source>
+ <translation>Projeto não salvo</translation>
</message>
<message>
- <source>Base amount:</source>
- <translation>Quantidade de base:</translation>
+ <source>The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings.</source>
+ <translation>A pasta de trabalho do LMMS %1 não existe. Posso criá-la? Você pode mudá-la depois indo em Editar -> Opções.</translation>
</message>
<message>
- <source>Attack:</source>
- <translation>Ataque:</translation>
+ <source>Show/hide Beat+Bassline Editor</source>
+ <translation>Mostrar/esconder Editor de Bases</translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Quantidade de modulação:</translation>
+ <source>Root directory</source>
+ <translation>Diretório raiz</translation>
</message>
<message>
- <source>Release:</source>
- <translation>Relaxamento:</translation>
+ <source>It looks like the last session did not end properly. Do you want to recover the project of this session?</source>
+ <translation>Parece que a última sessão não foi encerrada corretamente. Você quer recuperar o projeto da última sessão?</translation>
</message>
-</context>
-<context>
- <name>sf2Instrument</name>
<message>
- <source>Bank</source>
- <translation>Banco</translation>
+ <source>By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that.</source>
+ <translation>Pressionando este botão você pode mostrar ou esconder o Editor de Bases. No Editor de Bases você pode criar as batidas e a linha de baixo para sua base adicionando ou removendo canais, copiando e colando sequências de batidas e/ou sequências de linha de baixo, ou o que mais você quiser.</translation>
</message>
<message>
- <source>Gain</source>
- <translation>Ganho</translation>
+ <source>Show/hide controller rack</source>
+ <translation>Mostrar/esconder a Estante de Controladorer</translation>
</message>
<message>
- <source>Patch</source>
- <translation>Programação</translation>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Chorus Speed</source>
- <translation>Velocidade do Chorus</translation>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Reverb Width</source>
- <translation>Tamanho da Reverberação</translation>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Chorus Depth</source>
- <translation>Profundidade do Chorus</translation>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>MeterDialog</name>
<message>
- <source>Reverb Level</source>
- <translation>Nível de Reverberação</translation>
+ <source>Meter Denominator</source>
+ <translation>Denominador Métrico</translation>
</message>
<message>
- <source>Chorus Level</source>
- <translation>Nível de Chorus</translation>
+ <source>Meter Numerator</source>
+ <translation>Numerador Métrico</translation>
</message>
<message>
- <source>Chorus Lines</source>
- <translation>Linhas de Chorus</translation>
+ <source>TIME SIG</source>
+ <translation>COMPASSO</translation>
</message>
+</context>
+<context>
+ <name>MeterModel</name>
<message>
- <source>Chorus</source>
- <translation>Chorus</translation>
+ <source>Numerator</source>
+ <translation>Numerador</translation>
</message>
<message>
- <source>Reverb</source>
- <translation>Reverberação</translation>
+ <source>Denominator</source>
+ <translation>Denominador</translation>
</message>
+</context>
+<context>
+ <name>MidiAlsaRaw::setupWidget</name>
<message>
- <source>Reverb Damping</source>
- <translation>Absorção da Reverberação</translation>
+ <source>DEVICE</source>
+ <translation>DISPOSITIVO</translation>
</message>
+</context>
+<context>
+ <name>MidiAlsaSeq::setupWidget</name>
<message>
- <source>Reverb Roomsize</source>
- <translation>Tamanho da sala em Reverberação</translation>
+ <source>DEVICE</source>
+ <translation>DISPOSITIVO</translation>
</message>
</context>
<context>
- <name>papuInstrument</name>
+ <name>MidiController</name>
<message>
- <source>Bass</source>
- <translation>Grave</translation>
+ <source>unnamed_midi_controller</source>
+ <translation>controlador-midi-sem-nome</translation>
</message>
<message>
- <source>Shift Register width</source>
- <translation>Desconsiderar Tamanho do registro</translation>
+ <source>MIDI Controller</source>
+ <translation>Controlador MIDI</translation>
</message>
+</context>
+<context>
+ <name>MidiImport</name>
<message>
- <source>Sweep RtShift amount</source>
- <translation>Quantidade da varredura RtShift</translation>
+ <source>You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again.</source>
+ <translation>Você não configurou um banco de sons (soundfont) padrão na caixa de diálogo (Editar->Opções). Desta maneira nenhum som será tocado depois de importar um arquivo MIDI. Você pode baixar o banco de sons General MIDI soundfont dentro da caixa de diálogo de opções e tentar novamente.</translation>
</message>
<message>
- <source>Channel 1 volume</source>
- <translation>Canal 1 volume</translation>
+ <source>You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file.</source>
+ <translation>Você não compilou o LMMS com suporte a SoundFont2 player, que é usado para adicionar sons por padrão a arquivos MIDI importados. Desta maneira nenhum som será executado depois de importar arquivos MIDI.</translation>
</message>
<message>
- <source>Channel 4 volume</source>
- <translation>Canal 4 volume</translation>
+ <source>Setup incomplete</source>
+ <translation>Configuração incompleta</translation>
</message>
+</context>
+<context>
+ <name>MidiOss::setupWidget</name>
<message>
- <source>Channel 3 volume</source>
- <translation>Canal 3 volume</translation>
+ <source>DEVICE</source>
+ <translation>DISPOSITIVO</translation>
</message>
+</context>
+<context>
+ <name>MidiPort</name>
<message>
- <source>Channel 2 volume</source>
- <translation>Canal 2 volume</translation>
+ <source>Receive MIDI-events</source>
+ <translation>Receber eventos MIDI</translation>
</message>
<message>
- <source>Length of each step in sweep</source>
- <translation>Tamanho de cada passo na varredura</translation>
+ <source>Output MIDI program</source>
+ <translation>Saída do programa MIDI</translation>
</message>
<message>
- <source>Left Output level</source>
- <translation>Nível de Saída Esquerdo</translation>
+ <source>Output channel</source>
+ <translation>Canal de saída</translation>
</message>
<message>
- <source>Sweep direction</source>
- <translation>Direção da varredura</translation>
+ <source>Send MIDI-events</source>
+ <translation>Enviar eventos MIDI</translation>
</message>
<message>
- <source>Channel 4 to SO1 (Right)</source>
- <translation>Canal 4 para SO1 (Direita)</translation>
+ <source>Output controller</source>
+ <translation>Saída do controlador</translation>
</message>
<message>
- <source>Channel 3 to SO1 (Right)</source>
- <translation>Canal 3 para SO1 (Direita)</translation>
+ <source>Input controller</source>
+ <translation>Entrada do controlador</translation>
</message>
<message>
- <source>Channel 2 to SO1 (Right)</source>
- <translation>Canal 2 para SO1 (Direita)</translation>
+ <source>Input channel</source>
+ <translation>Canal de entrada</translation>
</message>
<message>
- <source>Channel 1 to SO1 (Right)</source>
- <translation>Canal 1 para SO1 (Direita)</translation>
+ <source>Fixed output note</source>
+ <translation>Nota fixa na saída</translation>
</message>
<message>
- <source>Right Output level</source>
- <translation>Nível de Saída Direito</translation>
+ <source>Fixed input velocity</source>
+ <translation>Intensidade fixa de entrada</translation>
</message>
<message>
- <source>Treble</source>
- <translation>Agudo</translation>
+ <source>Fixed output velocity</source>
+ <translation>Intensidade fixa de saída</translation>
</message>
<message>
- <source>Sweep time</source>
- <translation>Varredura temporal</translation>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>MonstroInstrument</name>
<message>
- <source>Channel 4 to SO2 (Left)</source>
- <translation>Canal 4 para SO2 (Esquerda)</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel 3 to SO2 (Left)</source>
- <translation>Canal 3 para SO2 (Esquerda)</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel 2 to SO2 (Left)</source>
- <translation>Canal 2 para SO2 (Esquerda)</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel 1 to SO2 (Left)</source>
- <translation>Canal 1 para SO2 (Esquerda)</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wave Pattern Duty</source>
- <translation>Trabalho da Frente de Onda</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume sweep direction</source>
- <translation>Direção da varredura de volume</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>papuInstrumentView</name>
<message>
- <source>Bass</source>
- <translation>Grave</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wave pattern duty</source>
- <translation>Trabalho da frente de onda</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Bass:</source>
- <translation>Grave:</translation>
+ <source>Osc 1 Sync send on fall</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Shift Register Width</source>
- <translation>Desconsiderar Tamanho do registro</translation>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wave Channel Volume</source>
- <translation>Canal da Onda - Volume</translation>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sweep Time:</source>
- <translation>Varredura temporal:</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Draw the wave here</source>
- <translation>Desenhe a onda aqui</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sweep RtShift amount</source>
- <translation>Quantidade da varredura RtShift</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel1 to SO2 (Left)</source>
- <translation>Canal 1 para SO2 (Esquerda)</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel3 to SO2 (Left)</source>
- <translation>Canal 3 para SO2 (Esquerda)</translation>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel2 to SO2 (Left)</source>
- <translation>Canal 2 para SO2 (Esquerda)</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel4 to SO2 (Left)</source>
- <translation>Canal 4 para SO2 (Esquerda)</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Length of each step in sweep</source>
- <translation>Tamanho de cada passo na varredura</translation>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wave pattern duty:</source>
- <translation>Trabalho da Frente de Onda:</translation>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wave Pattern</source>
- <translation>Frente de onda</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SO1 Volume (Right):</source>
- <translation>SO1 Volume (Esquerdo):</translation>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sweep Direction</source>
- <translation>Direção da varredura</translation>
+ <source>Osc 3 Sub-oscillator mix</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The amount of increase or decrease in frequency</source>
- <translation>A quantidade de acréscimo e decréscimo em frequência</translation>
+ <source>Osc 3 Waveform 1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The delay between step change</source>
- <translation>O atraso entre cada passo de mudança</translation>
+ <source>Osc 3 Waveform 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Treble</source>
- <translation>Agudo</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Noise Channel Volume:</source>
- <translation>Canal de Ruído - Volume:</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.</source>
- <translation>O ciclo de trabalho é a razão da duração (tempo) do sinal LIGADO versus o total do período do sinal.</translation>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sweep RtShift amount:</source>
- <translation>Quantidade da varredura RtShift:</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel1 to SO1 (Right)</source>
- <translation>Canal 1 para SO1 (Direita)</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel3 to SO1 (Right)</source>
- <translation>Canal 3 para SO1 (Direita)</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel2 to SO1 (Right)</source>
- <translation>Canal 2 para SO1 (Direita)</translation>
+ <source>LFO 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel4 to SO1 (Right)</source>
- <translation>Canal 4 para SO1 (Direita)</translation>
+ <source>LFO 2 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Square Channel 1 Volume</source>
- <translation>Canal 1 Volume</translation>
+ <source>LFO 2 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Square Channel 2 Volume</source>
- <translation>Canal 2 Volume</translation>
+ <source>LFO 2 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Square Channel 1 Volume:</source>
- <translation>Canal 1 Volume:</translation>
+ <source>Env 1 Pre-delay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Square Channel 2 Volume:</source>
- <translation>Canal 2 Volume:</translation>
+ <source>Env 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Treble:</source>
- <translation>Agudo:</translation>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sweep Time</source>
- <translation>Varredura temporal</translation>
+ <source>Env 1 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SO1 Volume (Right)</source>
- <translation>SO1 Volume (Esquerdo)</translation>
+ <source>Env 1 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Length of each step in sweep:</source>
- <translation>Tamanho de cada passo na varredura:</translation>
+ <source>Env 1 Release</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Noise Channel Volume</source>
- <translation>Canal de Ruído - Volume</translation>
+ <source>Env 1 Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wave Channel Volume:</source>
- <translation>Canal da Onda - Volume:</translation>
+ <source>Env 2 Pre-delay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wave Pattern Duty</source>
- <translation>Trabalho da Frente de Onda</translation>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SO2 Volume (Left):</source>
- <translation>SO2 Volume (Direito):</translation>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume Sweep Direction</source>
- <translation>Direção da varredura de volume</translation>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The rate at which increase or decrease in frequency occurs</source>
- <translation>A taxa na qual cresce ou decresce a frequência</translation>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SO2 Volume (Left)</source>
- <translation>SO2 Volume (Direito)</translation>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>projectNotes</name>
<message>
- <source>Cu&t</source>
- <translation>Recor&tar</translation>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Bold</source>
- <translation>&Negrito</translation>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Copy</source>
- <translation>&Copiar</translation>
+ <source>Selected view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Left</source>
- <translation>&Esquerda</translation>
+ <source>Vol1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Redo</source>
- <translation>&Refazer</translation>
+ <source>Vol1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Undo</source>
- <translation>Des&fazer</translation>
+ <source>Vol1-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Format Actions</source>
- <translation>Ações de formatação</translation>
+ <source>Vol1-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Justify</source>
- <translation>&Justificar</translation>
+ <source>Vol2-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Project notes</source>
- <translation>Notas do projeto</translation>
+ <source>Vol2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Paste</source>
- <translation>C&olar</translation>
+ <source>Vol2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Right</source>
- <translation>Di&reita</translation>
+ <source>Vol2-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Edit Actions</source>
- <translation>Ações de edição</translation>
+ <source>Vol3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+B</source>
- <translation>Ctrl+B</translation>
+ <source>Vol3-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+C</source>
- <translation>Ctrl+C</translation>
+ <source>Vol3-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+E</source>
- <translation>Ctrl+E</translation>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+I</source>
- <translation>Ctrl+I</translation>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+J</source>
- <translation>Ctrl+J</translation>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+L</source>
- <translation>Ctrl+L</translation>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+R</source>
- <translation>Ctrl+R</translation>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+U</source>
- <translation>Ctrl+U</translation>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+V</source>
- <translation>Ctrl+V</translation>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+X</source>
- <translation>Ctrl+X</translation>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+Y</source>
- <translation>Ctrl+Y</translation>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ctrl+Z</source>
- <translation>Ctrl+Z</translation>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Put down your project notes here.</source>
- <translation>Faça suas anotações aqui.</translation>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>C&enter</source>
- <translation>C&entro</translation>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Color...</source>
- <translation>&Cor...</translation>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Underline</source>
- <translation>S&ublinhado</translation>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>&Italic</source>
- <translation>&Itálico</translation>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>lb302Synth</name>
<message>
- <source>Dead</source>
- <translation>Morto</translation>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Slide</source>
- <translation>Gradual</translation>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VCF Envelope Mod</source>
- <translation>VCF - Modulação do Envelope</translation>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VCF Resonance</source>
- <translation>VCF - Ressonância</translation>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Accent</source>
- <translation>Realce</translation>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Slide Decay</source>
- <translation>Decaimento gradual</translation>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VCF Envelope Decay</source>
- <translation>VCF - Decaimento do Envelope</translation>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Waveform</source>
- <translation>Forma de onda</translation>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Distorção</translation>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>24dB/oct Filter</source>
- <translation>Filtro 24dB/oct</translation>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VCF Cutoff Frequency</source>
- <translation>VCF - Frequência de corte</translation>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>lb303Synth</name>
<message>
- <source>Dead</source>
- <translation>Morto</translation>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Slide</source>
- <translation>Gradual</translation>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VCF Envelope Mod</source>
- <translation>VCF - Modulação do Envelope</translation>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VCF Resonance</source>
- <translation>VCF - Ressonância</translation>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Accent</source>
- <translation>Realce</translation>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Slide Decay</source>
- <translation>Decaimento gradual</translation>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VCF Envelope Decay</source>
- <translation>VCF - Decaimento do Envelope</translation>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>MonstroView</name>
<message>
- <source>Waveform</source>
- <translation>Forma de onda</translation>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Distorção</translation>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>24dB/oct Filter</source>
- <translation>Filtro 24dB/oct</translation>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VCF Cutoff Frequency</source>
- <translation>VCF - Frequência de corte</translation>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
<message>
- <source>GAIN</source>
- <translation>GANHO</translation>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>FREQ</source>
- <translation></translation>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
- <translation>Ganho:</translation>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
- <translation>RAZÃO</translation>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>Razão:</translation>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Frequency:</source>
- <translation>Frequência:</translation>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Gain</source>
- <translation>Ganho</translation>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
- <translation>Razão</translation>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Frequency</source>
- <translation>Frequência</translation>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrument</name>
<message>
- <source>Gain</source>
- <translation>Ganho</translation>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
- <translation>Decaimento</translation>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency</source>
- <translation>Frequência final</translation>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Start frequency</source>
- <translation>Frequência de partida</translation>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Distorção</translation>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>sf2InstrumentView</name>
<message>
- <source>Gain</source>
- <translation>Ganho</translation>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>This button enables the reverb effect. This is useful for cool effects, but only works on files that support it.</source>
- <translation>Este botão ativa o efeito de reverberação. Ele é útil para efeitos legais, mas só funciona se o arquivo tiver suporte a ele.</translation>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.</source>
- <translation>Este botão ativa o efeito de chorus. Ele é útil para efeitos de eco legais, mas só funciona se o arquivo tiver suporte a ele.</translation>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another SF2 file</source>
- <translation>Clique aqui para abrir outro arquivo SF2</translation>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Choose the patch</source>
- <translation>Escolher o patch</translation>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SoundFont2 Files (*.sf2)</source>
- <translation>Arquivos SoundFont2 (*sf2)</translation>
- </message>
- <message>
- <source>Apply reverb (if supported)</source>
- <translation>Aplicar reverberação (se suportado)</translation>
- </message>
- <message>
- <source>Open SoundFont file</source>
- <translation>Abrir o arquivo SoundFont</translation>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Apply chorus (if supported)</source>
- <translation>Aplicar chorus (se suportado)</translation>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Reverb Roomsize:</source>
- <translation>Tamanho da sala em Reverbaração:</translation>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Chorus Speed:</source>
- <translation>Velocidade do Chorus:</translation>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Reverb Damping:</source>
- <translation>Absorção da Reverberação:</translation>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Reverb Width:</source>
- <translation>Tamanho da Reverberação:</translation>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Chorus Depth:</source>
- <translation>Profundidade do Chorus:</translation>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Reverb Level:</source>
- <translation>Nível de Reverberação:</translation>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Chorus Level:</source>
- <translation>Nível de Chorus:</translation>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Chorus Lines:</source>
- <translation>Linhas de Chorus:</translation>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open other SoundFont file</source>
- <translation>Abrir outro arquivo SoundFont</translation>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Effect</name>
<message>
- <source>Gate</source>
- <translation>Portal</translation>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
- <translation>Decaimento</translation>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Effect enabled</source>
- <translation>Efeito ativado</translation>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Wet/Dry mix</source>
- <translation>Mix Processada/Limpa</translation>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>timeLine</name>
+ <name>NesInstrument</name>
<message>
- <source>Hint</source>
- <translation>Sugestão</translation>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>After stopping go back to begin</source>
- <translation>Quando parar volta para o começo</translation>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Press <Ctrl> to disable magnetic loop points.</source>
- <translation>Pressione <Ctrl> para desabilitar os pontos de loop magnéticos.</translation>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Enable/disable auto-scrolling</source>
- <translation>Ativa/desativa auto-rolagem</translation>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>After stopping go back to position at which playing was started</source>
- <translation>Quando parar volta para a posição que estava quando começou a tocar</translation>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points.</source>
- <translation>Pressione <Shift> para mover o começo do ponto de loop; Pressione <Ctrl> para desabilitar os pontos de loop magnéticos.</translation>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>After stopping keep position</source>
- <translation>Quando parar mantém a posição</translation>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Enable/disable loop-points</source>
- <translation>Ativa/desativa pontos de loop</translation>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>EnvelopeAndLfoParameters</name>
<message>
- <source>Hold</source>
- <translation>Espera</translation>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
- <translation>Decaimento</translation>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Modulation</source>
- <translation>LFO - Modulação</translation>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LFO speed</source>
- <translation>LFO - Velocidade</translation>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Freq x 100</source>
- <translation>Freq x 100</translation>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
- <translation>Ataque</translation>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Attack</source>
- <translation>LFO - Ataque</translation>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Predelay</source>
- <translation>Pré-atraso</translation>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
- <translation>Relaxamento</translation>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sustain</source>
- <translation>Sustentação</translation>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation</source>
- <translation>Modulação</translation>
+ <source>Master volume</source>
+ <translation type="unfinished">Volume Final</translation>
</message>
<message>
- <source>LFO Wave Shape</source>
- <translation>LFO - Forma de Onda</translation>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>OscillatorObject</name>
<message>
- <source>LFO Predelay</source>
- <translation>LFO - Pré-atraso</translation>
+ <source>Osc %1 fine detuning right</source>
+ <translation>Ajuste fino direito %1</translation>
</message>
<message>
- <source>Modulate Env-Amount</source>
- <translation>Modular Tanto-de-Envelope</translation>
+ <source>Osc %1 volume</source>
+ <translation>Volume Osc %1</translation>
</message>
-</context>
-<context>
- <name>InstrumentMidiIOView</name>
<message>
- <source>NOTE</source>
- <translation>NOTA</translation>
+ <source>Osc %1 phase-offset</source>
+ <translation>Defasamento Osc %1</translation>
</message>
<message>
- <source>PROGRAM</source>
- <translation>PROGRAMA</translation>
+ <source>Osc %1 coarse detuning</source>
+ <translation>Ajuste bruto Osc %1</translation>
</message>
<message>
- <source>MIDI devices to send MIDI events to</source>
- <translation>Dispositivos MIDI para mandar eventos MIDI para</translation>
+ <source>Modulation type %1</source>
+ <translation>Tipo de modulação %1</translation>
</message>
<message>
- <source>CHANNEL</source>
- <translation>CANAL</translation>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation>Ajuste de fase estéreo Osc %1</translation>
</message>
<message>
- <source>ENABLE MIDI OUTPUT</source>
- <translation>HABILITAR SAÍDA MIDI</translation>
+ <source>Osc %1 waveform</source>
+ <translation>Forma de Onda Osc %1</translation>
</message>
<message>
- <source>MIDI devices to receive MIDI events from</source>
- <translation>Dispositivos MIDI para receber eventos MIDI de</translation>
+ <source>Osc %1 fine detuning left</source>
+ <translation>Ajuste fino esquerdo Osc %1</translation>
</message>
<message>
- <source>VELOCITY</source>
- <translation>INTENSIDADE</translation>
+ <source>Osc %1 wave shape</source>
+ <translation>Formato de onda Osc %1</translation>
</message>
<message>
- <source>ENABLE MIDI INPUT</source>
- <translation>HABILITAR ENTRADA MIDI</translation>
+ <source>Osc %1 panning</source>
+ <translation>Panorâmico Osc %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3588,655 +3635,752 @@ Por favor certifique-se que você tem permissão de escrita para este arquivo e
</message>
</context>
<context>
- <name>audioFileProcessor</name>
+ <name>PatternView</name>
<message>
- <source>Loop</source>
- <translation></translation>
+ <source>Open in piano-roll</source>
+ <translation>Abrir no Editor de Notas MIDI</translation>
</message>
<message>
- <source>Amplify</source>
- <translation>Amplificar</translation>
+ <source>Remove steps</source>
+ <translation>Remover passo</translation>
</message>
<message>
- <source>Stutter</source>
- <translation>Gaguejar</translation>
+ <source>Clear all notes</source>
+ <translation>Limpar todas as notas</translation>
</message>
<message>
- <source>Reverse sample</source>
- <translation>Amostra reversa</translation>
+ <source>Add steps</source>
+ <translation>Adicionar passo</translation>
</message>
<message>
- <source>End of sample</source>
- <translation>Fim da amostra</translation>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>duplo clique para abrir esta sequência no Editor de notas MDll
+use a roda do mouse para midificar o volume de cada passo</translation>
</message>
<message>
- <source>Start of sample</source>
- <translation>Início da amostra</translation>
+ <source>Reset name</source>
+ <translation>Restaurar nome</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Mudar nome</translation>
</message>
</context>
<context>
- <name>InstrumentSoundShaping</name>
+ <name>PeakController</name>
<message>
- <source>Moog</source>
- <translation>Moog</translation>
+ <source>Peak Controller Bug</source>
+ <translation>Problema no Controlador de Picos</translation>
</message>
<message>
- <source>RESO</source>
- <translation>RESS</translation>
+ <source>Peak Controller</source>
+ <translation>Controlador de Picos</translation>
</message>
<message>
- <source>Notch</source>
- <translation>Vale</translation>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation>Devido a um problema na versão mais antiga do LMMS, os controladores de pico não pode se conectar corretamente. Certifique-se de que os controladores de pico estão conectados corretamente e volte a salvar este arquivo. Desculpe por qualquer inconveniente causado.</translation>
</message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
<message>
- <source>BandPass czpg</source>
- <translation>Passa Banda czpg</translation>
+ <source>PEAK</source>
+ <translation>Pico</translation>
</message>
<message>
- <source>RC BandPass 24dB</source>
- <translation>RC PassaBanda 24dB</translation>
+ <source>LFO Controller</source>
+ <translation>Controlador de LFO</translation>
</message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
<message>
- <source>RC BandPass 12dB</source>
- <translation>RC PassaBanda 12dB</translation>
+ <source>AMNT</source>
+ <translation>QNTD</translation>
</message>
<message>
- <source>LowPass</source>
- <translation>Passa Baixa</translation>
+ <source>BASE</source>
+ <translation>BASE</translation>
</message>
<message>
- <source>2x LowPass</source>
- <translation>2x Passa Baixa</translation>
+ <source>ATCK</source>
+ <translation>ATQU</translation>
</message>
<message>
- <source>CUTOFF</source>
- <translation>CORTE</translation>
+ <source>DCAY</source>
+ <translation>DCAI</translation>
</message>
<message>
- <source>RC HighPass 24dB</source>
- <translation>RC PassaAlta 24dB</translation>
+ <source>MULT</source>
+ <translation>MULT</translation>
</message>
<message>
- <source>RC HighPass 12dB</source>
- <translation>RC PassaAlta 12dB</translation>
+ <source>Amount Multiplicator:</source>
+ <translation>Multiplicador de quantidade:</translation>
</message>
<message>
- <source>HiPass</source>
- <translation>Passa Alta</translation>
+ <source>Base amount:</source>
+ <translation>Quantidade de base:</translation>
</message>
<message>
- <source>VOLUME</source>
- <translation>VOLUME</translation>
+ <source>Attack:</source>
+ <translation>Ataque:</translation>
</message>
<message>
- <source>Volume</source>
- <translation>Volume</translation>
+ <source>Modulation amount:</source>
+ <translation>Quantidade de modulação:</translation>
</message>
<message>
- <source>Vocal Formant Filter</source>
- <translation>Filtro de Formante Vocal</translation>
+ <source>Release:</source>
+ <translation>Relaxamento:</translation>
</message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
<message>
- <source>Allpass</source>
- <translation>Passa todas</translation>
+ <source>Amount Multiplicator</source>
+ <translation>Multiplicador de quantidade</translation>
</message>
<message>
- <source>Cutoff frequency</source>
- <translation>Frequência de corte</translation>
+ <source>Attack</source>
+ <translation>Ataque</translation>
</message>
<message>
- <source>Envelopes/LFOs</source>
- <translation>Envelopes/LFOs</translation>
+ <source>Modulation amount</source>
+ <translation>Quantidade de modulação</translation>
</message>
<message>
- <source>Q/Resonance</source>
- <translation>Q/Ressonância</translation>
+ <source>Abs Value</source>
+ <translation>Valor Abs</translation>
</message>
<message>
- <source>Resonance</source>
- <translation>Ressonância</translation>
+ <source>Mute output</source>
+ <translation>Deixar saída muda</translation>
</message>
<message>
- <source>Filter type</source>
- <translation>Tipo de filtro</translation>
+ <source>Base value</source>
+ <translation>Valor base</translation>
</message>
<message>
- <source>BandPass csg</source>
- <translation>Passa Banda csg</translation>
+ <source>Release</source>
+ <translation>Relaxamento</translation>
</message>
+</context>
+<context>
+ <name>PianoRoll</name>
<message>
- <source>RC LowPass 24dB</source>
- <translation>RC PassaBaixa 24dB</translation>
+ <source>Detune mode (Shift+T)</source>
+ <translation>Automação para Afinação (Shift+T)</translation>
</message>
<message>
- <source>RC LowPass 12dB</source>
- <translation>RC PassaBaixa 12dB</translation>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Recortar notas selecionadas (Ctrl+X)</translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
- <translation>Pico</translation>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Lápis (Shift+D)</translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation>Controlador de LFO</translation>
+ <source>No chord</source>
+ <translation>Sem acorde</translation>
</message>
-</context>
-<context>
- <name>FxMixerView</name>
<message>
- <source>Mute</source>
- <translation>Mudo</translation>
+ <source>No scale</source>
+ <translation>Sem escala</translation>
</message>
<message>
- <source>Mute this FX channel</source>
- <translation>Deixar mudo este Canal de Efeitos</translation>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation>Clique aqui e a automação para afinação será ativada. Nela você pode clicar na nota para abrir sua automação de afinação. Você pode utilizar esta ferramenta para fazer glissandos de uma altura para outra.</translation>
</message>
<message>
- <source>FX Fader %1</source>
- <translation>Fader de Efeito %1</translation>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation>Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode ouvir a música feita no editor de arranjo ou no editor de batida tocando atrás.</translation>
</message>
<message>
- <source>Enter the new name for this FX channel</source>
- <translation>Insira o novo nome para este Canal de Efeitos</translation>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation>Clique aqui para tocar a sequência atual. Isto é útil enquanto se edita. A sequência irá entrar em loop automaticamente quando chegar ao fim.</translation>
</message>
<message>
- <source>Rename FX channel</source>
- <translation>Renomear Canal de Efeitos</translation>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation>Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis.</translation>
</message>
<message>
- <source>FX-Mixer</source>
- <translation>Mixer de Efeitos</translation>
+ <source>Note Panning</source>
+ <translation>Panorâmico da nota</translation>
</message>
-</context>
-<context>
- <name>trackOperationsWidget</name>
<message>
- <source>Mute</source>
- <translation>Mudo</translation>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Borracha (Shift+E)</translation>
</message>
<message>
- <source>Solo</source>
- <translation></translation>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Clique aqui e as notas selecionadas serão cortadas para dentro da área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência usando o botão de colar.</translation>
</message>
<message>
- <source>Clone this track</source>
- <translation>Clonar esta pista</translation>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation>Clique aqui e as notas na área de transferência serão coladas no primeira grade visível.</translation>
</message>
<message>
- <source>Actions for this track</source>
- <translation>Ações para esta pista</translation>
+ <source>Note Volume</source>
+ <translation>Volume da nota</translation>
</message>
<message>
- <source>Remove this track</source>
- <translation>Remover esta pista</translation>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation>Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.</translation>
</message>
<message>
- <source>Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action.</source>
- <translation>Pressione <Ctrl> enquanto clica em mover-grip para o começo, uma ação de arrastar.</translation>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Editor de Notas MIDI - nenhuma sequência</translation>
</message>
<message>
- <source>Mute this track</source>
- <translation>Deixar esta pista muda</translation>
+ <source>Mark/unmark current semitone</source>
+ <translation>Marcar/desmarcar o semitom atual</translation>
</message>
-</context>
-<context>
- <name>vibedView</name>
<message>
- <source>Pan:</source>
- <translation></translation>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation>Clique aqui para parar a reprodução da sequência atual.</translation>
</message>
<message>
- <source>&Help</source>
- <translation>Aj&uda</translation>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation>Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode editá-las depois.</translation>
</message>
<message>
- <source>The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental.</source>
- <translation>O seletor "Octave" é usado para escolher que harmônico da nota na corda irá soar mais. Por exemplo, "-2" significa que a corda vibrará duas oitavas abaixo da Fundamental, "F" significa que a corda vibrará na frequência Fundamental e "6" significa que a corda vai vibrar 6 oitavas acima da fundamental.</translation>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Tocar/pausar sequência atual (Espaço)</translation>
</message>
<message>
- <source>Impulse Editor</source>
- <translation>Editor de Impulso</translation>
+ <source>Unmark all</source>
+ <translation>Desmarcar tudo</translation>
</message>
<message>
- <source>Fuzziness:</source>
- <translation>Encrespando: </translation>
+ <source>Mark current scale</source>
+ <translation>Marcar a escala atual</translation>
</message>
<message>
- <source>The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles.</source>
- <translation>O botão de tamanho modifica o tamanho da corda escolhida. Cordas longas resultam em vibrações longas aliadas a um brilho no som, o porém é que isto ocupa muito processamento da CPU.</translation>
+ <source>Mark current chord</source>
+ <translation>Marcar o acorde atual</translation>
</message>
<message>
- <source>The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring.</source>
- <translation>O botão "S" modifica a dureza da corda selecionada. A dureza da corda interfere no quão longa é a vibração da corda. Quanto menor o valor mais a corda vai soar.</translation>
+ <source>Select mode (Shift+S)</source>
+ <translation>Modo de Seleção (Shift+S)</translation>
</message>
<message>
- <source>Length:</source>
- <translation>Tamanho:</translation>
+ <source>Last note</source>
+ <translation>Última nota</translation>
</message>
<message>
- <source>The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active.</source>
- <translation>O seletor de Corda é usado para escolher que corda os controles estarão editando. O instrumento Vibed pode conter até nove cordas vibrando independentemente. O LED no canto direito inferior do editor de forma de onda indica que a corda selecionada está ativa.</translation>
+ <source>Note lock</source>
+ <translation>Travar nota</translation>
</message>
<message>
- <source>White noise wave</source>
- <translation>Ruído branco</translation>
+ <source>Piano-Roll - %1</source>
+ <translation>Editor de Notas MIDI - %1</translation>
</message>
<message>
- <source>Click here to smooth waveform.</source>
- <translation>Clique aqui para suavizar a forma de onda.</translation>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Colar notas da área de transferência (Ctrl+V)</translation>
</message>
<message>
- <source>Use a square-wave for current oscillator.</source>
- <translation>Use uma onda quadrada no oscilador atual.</translation>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Gravar notas do dispositivo MIDI ou Editor de Notas MIDI</translation>
</message>
<message>
- <source>The 'V' knob sets the volume of the selected string.</source>
- <translation>O botão "V" modifica o volume da corda selecionada.</translation>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Copiar notas selecionadas (Ctrl+C)</translation>
</message>
<message>
- <source>Sine wave</source>
- <translation>Onda senoidal</translation>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Parar de tocar a sequência atual (Espaço)</translation>
</message>
<message>
- <source>Click here to enable/disable waveform.</source>
- <translation>Clique aqui para habilitar/desabilitar forma de onda.</translation>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation>Clique aqui e modo de seleção será ativado. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. Este modo torna possível a seleção de notas. Alternativamente você pode pressionar Crtl enquanto estiver usando o lápis para utilizar o modo de seleção temporariamente.</translation>
</message>
<message>
- <source>Octave</source>
- <translation>Oitava</translation>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Por favor abra um a sequência com um duplo clique sobre ela!</translation>
</message>
<message>
- <source>The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge.</source>
- <translation>O botão "P" modifica a posição onde a corda será "pinçada". Valores baixos significam que a corda será pinçada perto da ponte.</translation>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>Clique aqui e as notas selecionadas serão copiadas para a área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência clicando no botão de colar.</translation>
</message>
<message>
- <source>Smooth</source>
- <translation>Suavizar</translation>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>Gravar notas a partir do dispositivo MIDI ou do Editor de Notas MIDI enquanto toca o Arranjo ou uma Base</translation>
</message>
<message>
- <source>String</source>
- <translation>Corda</translation>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'.</source>
- <translation>O botão "Slap" deixa mais "crespo" o som da corda escolhida que é mais aparente na duração do ataque (como a técnica de puxar a corda de um contrabaixo ou um violão chamada slap), embora possa ser usada também para deixar o som mais "metálico".</translation>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded.
-
-The waveform can also be drawn in the graph.
-
-The 'S' button will smooth the waveform.
-
-The 'N' button will normalize the waveform.</source>
- <translation>O editor de forma de onda proporciona controle sobre o estado inicial, ou impulso, usado no início da vibração da corda. Os botões ao lado direito do gráfico irão inicializar o tipo de forma de onda selecionada. O botão "?" ira carregar uma forma de onda de um arquivo (somente as primeiras 128 amostras serão carregadas).
-
-A forma de onda também pode ser desenhada no gráfico.
-
-O botão "S" irá suavizar a forma de onda.
-
-O botão "N" ira normalizar a forma de onda.</translation>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge.</source>
- <translation>O botão "PU" modifica a posição onde as vibrações serão captadas na corda selecionada. Valores baixos significam que o captador está mais próximo à ponte.</translation>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Pick position:</source>
- <translation>Escolher pinçada:</translation>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The Pan knob determines the location of the selected string in the stereo field.</source>
- <translation>O botão de Pan determina a localização da corda selecionada o campo estereofônico.</translation>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>String stiffness:</source>
- <translation>Dureza da corda:</translation>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Square wave</source>
- <translation>Onda quadrada</translation>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Saw wave</source>
- <translation>Onda dente de serra</translation>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Normalize</source>
- <translation>Normalizar</translation>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Por favor entre com um novo valor entre %1 e %2:</translation>
</message>
+</context>
+<context>
+ <name>PianoView</name>
<message>
- <source>Click here to normalize waveform.</source>
- <translation>Clique aqui para normalizar a forma de onda.</translation>
+ <source>Base note</source>
+ <translation>Nota base</translation>
</message>
+</context>
+<context>
+ <name>Plugin</name>
<message>
- <source>Use a saw-wave for current oscillator.</source>
- <translation>Use uma onda dente de serra no oscilador atual.</translation>
+ <source>Error while loading plugin</source>
+ <translation>Erro ao carregar plugin</translation>
</message>
<message>
- <source>Use white-noise for current oscillator.</source>
- <translation>Use ruído branco no oscilador atual.</translation>
+ <source>Failed to load plugin "%1"!</source>
+ <translation>Falha ao carregar o plugin "%1"!</translation>
</message>
<message>
- <source>Triangle wave</source>
- <translation>Onda triangular</translation>
+ <source>Plugin not found</source>
+ <translation>Plugin não encontrado</translation>
</message>
<message>
- <source>Impulse or initial state</source>
- <translation>Impulso ou estado inicial</translation>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation>O plugin "%1" não pode ser carregado!
+Motivo: "%2"</translation>
</message>
<message>
- <source>Detune:</source>
- <translation>Desafinar:</translation>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
<message>
- <source>Use a sine-wave for current oscillator.</source>
- <translation>Use uma onda senoidal no oscilador atual.</translation>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation>Arquivo OGG compactado (*.ogg)</translation>
</message>
<message>
- <source>Pickup position:</source>
- <translation>Posição do captador:</translation>
+ <source>WAV-File (*.wav)</source>
+ <translation>Arquivo WAV (*.wav)</translation>
</message>
+</context>
+<context>
+ <name>QObject</name>
<message>
- <source>Volume:</source>
- <translation></translation>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>User defined wave</source>
- <translation>Onda definida pelo usuário</translation>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a user-defined waveform for current oscillator.</source>
- <translation>Use uma forma de onda definida pelo usuário no oscilador atual.</translation>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a triangle-wave for current oscillator.</source>
- <translation>Use uma onda triangular no oscilador atual.</translation>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp.</source>
- <translation>O botão "Detune" modifica a altura da corda escolhida. Valores menores do que zero quase não afetarão o som da corda. Valores bem maiores do que zero farão o som ficar mais agudo.</translation>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at.
-
-The graph allows you to control the initial state or impulse used to set the string in motion.
-
-The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position.
-
-'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string.
-
-The 'Length' knob controls the length of the string.
-
-The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument.</source>
- <translation>Vibed modela independentemente a vibração de até 8 cordas. O seletor "String" (Corda) permite escolher qual corda será editada. O seletor "Imp" escolhe qual dos gráficos representará o impulso no estado inicial da corda. O seletor "Octave" (Oitava) permite escolher qual harmônico da corda deverá vibrar.
-
-O gráfico permite que você controle o estado inicial, ou impulso, usado para definir o movimento da corda.
-
-O botão "V" controla o volume. O botão "S" controla a dureza da corda. O botão "P" controla a posição de pinçagem da corda. Já o botão "PU" controla a posição do captador.
-
-O botão "Pan" posiciona o som no lado esquerdo ou direito, enquanto o botão "Detune" (Desafinar) permite modificar a afinação em termos de altura. Automatizar este botão permite criar glissandos bem interessantes! O botão "Slap" pode dar uma característica mais metálica ao som da corda.
-
-O botão "Tamanho" controla o tamanho da corda.
-
-O LED no canto direito inferior do editor de forma de onda determina que a corda está ativa no presente instrumento.</translation>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string.</source>
- <translation>O seletor "Imp" determina como a forma de onda no gráfico será manipulada como um impulso comunicado à corda pela pinçada ou pelo estado inicial da corda.</translation>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Enable waveform</source>
- <translation>Habilitar forma de onda</translation>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>track</name>
<message>
- <source>Solo</source>
- <translation></translation>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Muted</source>
- <translation>Mudo</translation>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>sidInstrumentView</name>
<message>
- <source>Test</source>
- <translation>Teste</translation>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sync</source>
- <translation>Sincronização</translation>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Filtered</source>
- <translation>Filtrado</translation>
+ <source>G#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ring-Mod</source>
- <translation>Modulação em Anel</translation>
+ <source>A</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Noise</source>
- <translation>Ruído</translation>
+ <source>Bb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Pulse Width:</source>
- <translation>Tamanho do Pulso:</translation>
+ <source>A#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.</source>
- <translation>O Decaimento determina o quão rápido a saída vai cair do pico de amplitude até o nível de sustentação.</translation>
+ <source>B</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>QWidget</name>
<message>
- <source>Cutoff frequency:</source>
- <translation>Frequência de corte:</translation>
+ <source>No</source>
+ <translation>Não</translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Decaimento:</translation>
+ <source>Yes</source>
+ <translation>Sim</translation>
</message>
<message>
- <source>Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.</source>
- <translation>A saída da Voz %1 irá permanecer no nível de Sustentação enquanto a nota estiver acionada.</translation>
+ <source>Maker: </source>
+ <translation>Marcador:</translation>
</message>
<message>
- <source>Resonance:</source>
- <translation>Ressonância:</translation>
+ <source>File: </source>
+ <translation>Arquivo: </translation>
</message>
<message>
- <source>Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.</source>
- <translation>Mod em Anel (Modulação em Anel) substitui a saída da Onda Triangular do Oscilador %1 com a "Modulada em Anel" da combinação entre os Osciladores %1 e %2.</translation>
+ <source>Name: </source>
+ <translation>Nome:</translation>
</message>
<message>
- <source>Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.</source>
- <translation>A taxa de ataque determina o quão rápido a saída da Voz %1 sai do zaro para o pico de amplitude.</translation>
+ <source>Copyright: </source>
+ <translation></translation>
</message>
<message>
- <source>Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.</source>
- <translation>A sincronização sincroniza a frequência fundamental do Oscilador %1 com a frequência fundamental do Oscilador %2 produzindo um efeito de "Super Sincronização".</translation>
+ <source>Channels In: </source>
+ <translation>Canais de Entrada: </translation>
</message>
<message>
- <source>Voice3 Off </source>
- <translation>Voz3 Desligada </translation>
+ <source>In Place Broken: </source>
+ <translation>Com Local Quebrado: </translation>
</message>
<message>
- <source>Test, when set, resets and locks Oscillator %1 at zero until Test is turned off.</source>
- <translation>Quando o Teste está ativado, ele restaura e trava o Oscilador %1 até o Teste ser desligado.</translation>
+ <source>Channels Out: </source>
+ <translation>Canais de Saída: </translation>
</message>
<message>
- <source>Attack:</source>
- <translation>Ataque:</translation>
+ <source>Requires Real Time: </source>
+ <translation>Requer Processamento em Tempo Real: </translation>
</message>
<message>
- <source>SawTooth</source>
- <translation>Dente de Serra</translation>
+ <source>Real Time Capable: </source>
+ <translation>Capacitado para Processamento em Tempo Real: </translation>
</message>
<message>
- <source>Pulse Wave</source>
- <translation>Onda de Pulso</translation>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>SampleBuffer</name>
<message>
- <source>When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.</source>
- <translation>Quando o Filtrado está ligado, a Voz %1 será processada através do Filtro. Quando o Filtrado está desligado, a Voz %1 aparecerá diretamente na saída e o Filtro não terá efeito.</translation>
+ <source>DrumSynth-Files (*.ds)</source>
+ <translation>Arquivos DrumSynth (*.ds)</translation>
</message>
<message>
- <source>Triangle Wave</source>
- <translation>Onda Triangular</translation>
+ <source>AU-Files (*.au)</source>
+ <translation>Arquivos AU (*.au)</translation>
</message>
<message>
- <source>Coarse:</source>
- <translation>Ajuste Bruto:</translation>
+ <source>Wave-Files (*.wav)</source>
+ <translation>Arquivos Wave (*.wav)</translation>
</message>
<message>
- <source>Release:</source>
- <translation>Relaxamento:</translation>
+ <source>Open audio file</source>
+ <translation>Abrir arquivo de áudio</translation>
</message>
<message>
- <source>Sustain:</source>
- <translation>Sustentação:</translation>
+ <source>AIFF-Files (*.aif *.aiff)</source>
+ <translation>Arquivos AIFF (*.aif *.aiff)</translation>
</message>
<message>
- <source>The Coarse detuning allows to detune Voice %1 one octave up or down.</source>
- <translation>O Ajuste bruto permite que você ajuste a Voz %1 em uma oitava ou mais.</translation>
+ <source>RAW-Files (*.raw)</source>
+ <translation>Arquivos RAW (*.raw)</translation>
</message>
<message>
- <source>The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.</source>
- <translation>A resolução de Tamanho do Pulso permite que os movimentos sejam suaves de modo que não sejam percebidas mudanças bruscas. O Pulso da forma de onda em um Oscilador %1 pode ser selecionado para existir um efeito audível.</translation>
+ <source>OGG-Files (*.ogg)</source>
+ <translation>Arquivos OGG (*.ogg)</translation>
</message>
<message>
- <source>Volume:</source>
- <translation></translation>
+ <source>VOC-Files (*.voc)</source>
+ <translation>Arquivos VOC (*.voc)</translation>
</message>
<message>
- <source>The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.</source>
- <translation>A saída da Voz %1 irá da amplitude do nível Sustentação até a amplitude zero na razão selecionada no Relaxamento.</translation>
+ <source>FLAC-Files (*.flac)</source>
+ <translation>Arquivos FLAC (*.flac)</translation>
</message>
<message>
- <source>MOS8580 SID </source>
- <translation></translation>
+ <source>SPEEX-Files (*.spx)</source>
+ <translation>Arquivos SPEEX (*.spx)</translation>
</message>
<message>
- <source>MOS6581 SID </source>
- <translation></translation>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>SampleTCOView</name>
<message>
- <source>Low-Pass filter </source>
- <translation>Filtro Passa Baixa </translation>
+ <source>Cut</source>
+ <translation>Recortar</translation>
</message>
<message>
- <source>Band-Pass filter </source>
- <translation>Filtro Passa Banda </translation>
+ <source>Copy</source>
+ <translation>Copiar</translation>
</message>
<message>
- <source>High-Pass filter </source>
- <translation>Filtro Passa Alta </translation>
+ <source>Paste</source>
+ <translation>Colar</translation>
</message>
-</context>
-<context>
- <name>stereoEnhancerControlDialog</name>
<message>
- <source>WIDE</source>
- <translation>ABRIR</translation>
+ <source>Delete (middle mousebutton)</source>
+ <translation>Excluir (botão do meio do mouse)</translation>
</message>
<message>
- <source>Width:</source>
- <translation>Largura:</translation>
+ <source>Set/clear record</source>
+ <translation>Armar/desarmar gravação</translation>
</message>
-</context>
-<context>
- <name>AutomationPattern</name>
<message>
- <source>Drag a control while pressing <Ctrl></source>
- <translation>Arraste o controle enquanto pressiona a tecla <Ctrl></translation>
+ <source>double-click to select sample</source>
+ <translation>Duplo clique para selecionar amostra</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation>Mudo/Não Mudo (<Ctrl> + middle click)</translation>
</message>
</context>
<context>
- <name>VstEffectControlDialog</name>
+ <name>SampleTrack</name>
<message>
- <source>Open VST-plugin preset</source>
- <translation>Abrir pré definição de plugin VST</translation>
+ <source>Sample track</source>
+ <translation>Áudio Amostras</translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
- <translation>Clique aqui se você precisa salvar o programa de pré definição do plugin VST.</translation>
+ <source>Volume</source>
+ <translation>Volume</translation>
</message>
+</context>
+<context>
+ <name>SampleTrackView</name>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
- <translation>Clique aqui para selecionar a pré definição que está sendo carregada no VST.</translation>
+ <source>VOL</source>
+ <translation>VOL</translation>
</message>
<message>
- <source>Previous (-)</source>
- <translation>Anterior (-)</translation>
+ <source>Track volume</source>
+ <translation>Volume da pista</translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
- <translation>Clique aqui se você deseja controlar o plugin VST por outro host.</translation>
+ <source>Channel volume:</source>
+ <translation>Volume do canal:</translation>
</message>
+</context>
+<context>
+ <name>SongEditor</name>
<message>
- <source>Show/hide</source>
- <translation>Mostrar/esconder</translation>
+ <source>Add beat/bassline</source>
+ <translation>Adicionar Base</translation>
</message>
<message>
- <source>Save preset</source>
- <translation>Salvar pré definição</translation>
+ <source>Tempo</source>
+ <translation>Andamento</translation>
</message>
<message>
- <source>Effect by: </source>
- <translation>Efeito por: </translation>
+ <source>Record samples from Audio-device</source>
+ <translation>Gravar amostras do Dispositivo de Áudio</translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
- <translation>Controlar plugin VST a partir do host LMMS</translation>
+ <source>Add automation-track</source>
+ <translation>Adicionar pista de automação</translation>
</message>
<message>
- <source>Next (+)</source>
- <translation>Próximo (+)</translation>
+ <source>Master pitch</source>
+ <translation>Altura Final</translation>
</message>
<message>
- <source> <br /></source>
- <translation></translation>
+ <source>Add sample-track</source>
+ <translation>Adicionar pista de amostra</translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
- <translation>Clique aqui se você precisa abrir outro tipo de arquivo de pré definição de plugin VST como: *.fxp, *.fxb.</translation>
+ <source>Song-Editor</source>
+ <translation>Editor de Arranjo</translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
- <translation>Clique aqui se você precisar trocar para outro programa de pré definições de plugin VST.</translation>
+ <source>TEMPO/BPM</source>
+ <translation>ANDAMENTO/BPM</translation>
</message>
-</context>
-<context>
- <name>ControllerView</name>
<message>
- <source>&Help</source>
- <translation>Aj&uda</translation>
+ <source>master pitch</source>
+ <translation>altura final</translation>
</message>
<message>
- <source>Controls</source>
- <translation>Controles</translation>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>Gravar amostras a partir do dispositivo de Áudio enquanto reproduz o arranjo ou base</translation>
</message>
<message>
- <source>Enter the new name for this controller</source>
- <translation>Adicione um novo nome para este controlador</translation>
+ <source>master volume</source>
+ <translation>volume final</translation>
</message>
<message>
- <source>Rename controller</source>
- <translation>Renomear controlador</translation>
+ <source>Master volume</source>
+ <translation>Volume Final</translation>
</message>
<message>
- <source>Controllers are able to automate the value of a knob, slider, and other controls.</source>
- <translation>Os controladores estão prontos para alterar o valor de botões, barras deslizantes e outros controles automaticamente.</translation>
+ <source>Error in file</source>
+ <translation>Erro no arquivo</translation>
</message>
<message>
- <source>&Remove this plugin</source>
- <translation>&Remova este plugin</translation>
+ <source>Could not open file</source>
+ <translation>Não é possível abrir o arquivo</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Clique aqui se você quer parar de tocar a música. O marcador de posição (verde), será ajustado para o início da música.</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation>o andamento de uma música é especificado em batidas por minuto (BPM). Se voc6e precisar mudar o andamento de sua música, mude esse valor. Todo compasso tem 4 batidas, logo o andamento em BPM especificara a quantidade de batidas dividida por 4.</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Lápis</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Parar música (Espaço)</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Tocar música (Espaço)</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Modo de Edição (seleciona e move)</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>Não é possivel salvar o arquivo</translation>
+ </message>
+ <message>
+ <source>Value: %1%</source>
+ <translation>Valor: %1%</translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation>Modo de alta qualidade</translation>
+ </message>
+ <message>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation>Não foi possível abrir %1 para escrita. Provavelmente você não tem permissão para escrita deste arquivo. Por favor, certifique-se de ter permissão para escrever nesse arquivo e tente novamente.</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation>Não foi possível abrir o arquivo %1. Provavelmente você não tem permissão para ler este arquivo.
+ Por favor certifique-se que você tenha permissão de leitura para o arquivo e tente novamente.</translation>
+ </message>
+ <message>
+ <source>Value: %1 semitones</source>
+ <translation>Valor: %1 semitons</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Clique aqui se você quer tocar toda a música. A música iniciará no posição do marcador (verde). Você pode move-lo enquanto estiver tocando.</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation>O arquivo %1 parece conter erros e por isso não pode ser carregado.</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation>andamento da música</translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControlDialog</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Espectro linear</translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Linear no eixo Y</translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControls</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Espectro linear</translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Linear no eixo Y</translation>
+ </message>
+ <message>
+ <source>Channel mode</source>
+ <translation type="unfinished">Modo de Canal</translation>
</message>
</context>
<context>
@@ -4319,803 +4463,826 @@ O LED no canto direito inferior do editor de forma de onda determina que a corda
</message>
</context>
<context>
- <name>knob</name>
- <message>
- <source>&Help</source>
- <translation>Aj&uda</translation>
- </message>
- <message>
- <source>Please enter a new value between -96.0 dBV and 6.0 dBV:</source>
- <translation>Por favor entre um novo valor entre -96.0 dBV e 6.0 dBV:</translation>
- </message>
+ <name>TimeDisplayWidget</name>
<message>
- <source>Please enter a new value between %1 and %2:</source>
- <translation>Por favor entre com um novo valor entre %1 e %2:</translation>
+ <source>click to change time units</source>
+ <translation>clique para mudar as unidades de tempo</translation>
</message>
</context>
<context>
- <name>nineButtonSelector</name>
+ <name>TrackContainer</name>
<message>
- <source>&Help</source>
- <translation>Aj&uda</translation>
+ <source>Couldn't open file</source>
+ <translation>Não é possível abrir o arquivo</translation>
</message>
-</context>
-<context>
- <name>AutomationEditor</name>
<message>
- <source>Automation Editor - %1</source>
- <translation>Editor de Automação - %1</translation>
+ <source>Loading project...</source>
+ <translation>Carregando projeto...</translation>
</message>
<message>
- <source>All selected values were copied to the clipboard.</source>
- <translation>Todos os valores selecionados foram copiados para a área de transferência.</translation>
+ <source>Importing FLP-file...</source>
+ <translation>Importando arquivo FLP...</translation>
</message>
<message>
- <source>Please open an automation pattern with the context menu of a control!</source>
- <translation>Por favor, abra o sequenciador de automação com o menu de contexto do controle!</translation>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
</message>
<message>
- <source>Draw mode (Shift+D)</source>
- <translation>Lápis (Shift+D)</translation>
+ <source>Couldn't find a filter for importing file %1.
+You should convert this file into a format supported by LMMS using another software.</source>
+ <translation>Não foi possível encontrar um filtro para inportar o arquivo %1.
+Você poderia converter este arquivo em um formato suportado pelo LMMS usando outro aplicativo.</translation>
</message>
<message>
- <source>Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.</source>
- <translation>Clique aqui para selecionar progressão cúbica hermite-progressions para este sequenciador de automação. O valor do objeto conectado irá mudar em curva e suavemente entre picos e vales.</translation>
+ <source>Couldn't open file %1 for reading.
+Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
+ <translation>Não foi possível abrir o arquivo %1 para leitura.
+Por favor certifique-se que você tem permissões de leitura para o arquivo e para a pasta e tente novamente!</translation>
</message>
<message>
- <source>Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.</source>
- <translation>Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis.</translation>
+ <source>Couldn't import file</source>
+ <translation>não foi possivel importar arquivo</translation>
</message>
<message>
- <source>Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation>Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.</translation>
+ <source>Importing MIDI-file...</source>
+ <translation>Importando arquivo MIDI...</translation>
</message>
<message>
- <source>Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Clique aqui para cortar valores para a área de transferência. Você pode colar os valores em qualquer sequência utilizando o botão de colar.</translation>
+ <source>Please wait...</source>
+ <translation>Por favor aguarde...</translation>
</message>
+</context>
+<context>
+ <name>TripleOscillatorView</name>
<message>
- <source>Erase mode (Shift+E)</source>
- <translation>Borracha (Shift+E)</translation>
+ <source>Mix output of oscillator 1 & 2</source>
+ <translation>Misture as saídas do oscilador 1 e 2</translation>
</message>
<message>
- <source>Automation Editor - no pattern</source>
- <translation>Editor de Automação - sem sequência</translation>
+ <source>Mix output of oscillator 2 & 3</source>
+ <translation>Misture as saídas do oscilador 2 e 3</translation>
</message>
<message>
- <source>Cut selected values (Ctrl+X)</source>
- <translation>Cortar (Ctrl+X)</translation>
+ <source>cents</source>
+ <translation>centésimos</translation>
</message>
<message>
- <source>Copy selected values (Ctrl+C)</source>
- <translation>Copiar (Ctrl+C)</translation>
+ <source>Osc %1 fine detuning left:</source>
+ <translation>Ajuste fino esquerdo Osc %1:</translation>
</message>
<message>
- <source>Tension: </source>
- <translation>Tensão: </translation>
+ <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
+ <translation>Com este botão você pode modificar Ajuste bruto do oscilador %1. Você pode descer o tom do oscilador 12 semitons (1 oitava) para cima e para baixo. Isto é útil para criar sons com um acorde.</translation>
</message>
<message>
- <source>Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.</source>
- <translation>Clique aqui se você quiser tocar a sequência atual. Isto é útil enquanto se está editando. A sequência entra em loop automaticamente quando chega ao fim.</translation>
+ <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation>Use o modulador de fase para modular o oscilador 3 com o oscilador 2</translation>
</message>
<message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Tocar/pausar a sequência atual (Espaço)</translation>
+ <source>Use an exponential wave for current oscillator.</source>
+ <translation>Use uma onda exponencial no oscilador atual.</translation>
</message>
<message>
- <source>Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.</source>
- <translation>Clique aqui para selecionar progressões discretas para este sequenciador de automação. O valor do objeto conectado permanecerá constante entre os pontos de controle e será substituido por um novo valor assim que um novo ponto de controle for assinalado.</translation>
+ <source>Osc %1 panning:</source>
+ <translation>Panorâmico Osc %1:</translation>
</message>
<message>
- <source>Click here and the values from the clipboard will be pasted at the first visible measure.</source>
- <translation>Clique aqui e os valores na área de transferência serão colados no primeiro limite visível.</translation>
+ <source>Use a square-wave for current oscillator.</source>
+ <translation>Use uma onda quadrada no oscilador atual.</translation>
</message>
<message>
- <source>Linear progression</source>
- <translation>Progressão linear</translation>
+ <source>Osc %1 stereo phase-detuning:</source>
+ <translation>Defasamento estéreo Osc %1:</translation>
</message>
<message>
- <source>Click here if you want to stop playing of the current pattern.</source>
- <translation>Clique aqui se você que parar a reprodução da sequência atual.</translation>
+ <source>semitones</source>
+ <translation>semitons</translation>
</message>
<message>
- <source>Values copied</source>
- <translation>Valores copiados</translation>
+ <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <translation>Com este botão você pode ajustar o defasamento estéreo do oscilador %1. O defasador estéreo especifica o tamanho da diferença entre a defasagem entre os canais esquerdo e direito. Isto é muito bom para abrir o som.</translation>
</message>
<message>
- <source>Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Clique aqui para copiar valores para a área de transferência. Você pode copiar os valores de qualquer sequência utilizando o botão de colar.</translation>
+ <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation>Use o modulador de frequência para modular o oscilador 2 com o oscilador 1</translation>
</message>
<message>
- <source>Cubic Hermite progression</source>
- <translation>Cúbica - Hermite progression</translation>
+ <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation>Use o modulador de fase para modular o oscilador 2 com o oscilador 1</translation>
</message>
<message>
- <source>Tension value for spline</source>
- <translation>Valor de tensão para os estriados</translation>
+ <source>Osc %1 volume:</source>
+ <translation>Volume Osc %1:</translation>
</message>
<message>
- <source>Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.</source>
- <translation>Clique aqui para selecionar progressões lineares para este sequenciador de automação. O valor do objeto conectado variará de forma constante entre os pontos de controle assinalados.</translation>
+ <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
+ <translation>Com este botão você pode ajustar o panning do oscilador %1. O valor -100 significa 100% à esquerda e 100 move a saida do oscilador para a direita.</translation>
</message>
<message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Parar de tocar a sequência atual (Espaço)</translation>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation>Com este botão você pode manipular o Ajuste fino do oscilador %1 para o canal esquerdo. O Ajuste fino varia entre -100 centésimos e +100 centésimos. Isto é útil para criar sons 'gordos'.</translation>
</message>
<message>
- <source>A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.</source>
- <translation>Um valor de tensão alto irá fazer suave a curva mas também extrapolará alguns valores. Um valor de tensão baixa irá causar um declive na curva de volume para cada ponto de controle.</translation>
+ <source>Osc %1 fine detuning right:</source>
+ <translation>Ajuste fino direito %1:</translation>
</message>
<message>
- <source>Paste values from clipboard (Ctrl+V)</source>
- <translation>Colar (Ctrl+V)</translation>
+ <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation>Use o modulador de amplitude para modular o oscilador 2 com o oscilador 1</translation>
</message>
<message>
- <source>Discrete progression</source>
- <translation>Progressão discreta</translation>
+ <source>Synchronize oscillator 2 with oscillator 3</source>
+ <translation>Sincronize o oscilador 2 com o oscilador 3</translation>
</message>
-</context>
-<context>
- <name>bbTCOView</name>
<message>
- <source>Open in Beat+Bassline-Editor</source>
- <translation>Abrir no editor de Bases</translation>
+ <source>Use a saw-wave for current oscillator.</source>
+ <translation>Use uma onda dente de serra no oscilador atual.</translation>
</message>
<message>
- <source>Change color</source>
- <translation>Mudar cor</translation>
+ <source>Use white-noise for current oscillator.</source>
+ <translation>Use ruído branco no oscilador atual.</translation>
</message>
<message>
- <source>Reset name</source>
- <translation>Restaurar nome</translation>
+ <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation>Use o modulador de frequência para modular o oscilador 3 com o oscilador 2</translation>
</message>
<message>
- <source>Change name</source>
- <translation>Mudar nome</translation>
+ <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
+ <translation>Com este botão você pode ajustar o volume do oscilador %1. Quando você seleciona o valor 0, o oscilador é desligado. Com outros valores você vai escutar o oscilador tão alto quanto você o ajustar.</translation>
</message>
-</context>
-<context>
- <name>stereoMatrixControls</name>
<message>
- <source>Left to Left</source>
- <translation>Esq para Esq</translation>
+ <source>Use a moog-like saw-wave for current oscillator.</source>
+ <translation>Use uma onda dente de serra moog no oscilador atual.</translation>
</message>
<message>
- <source>Left to Right</source>
- <translation>Esq para Dir</translation>
+ <source>Osc %1 coarse detuning:</source>
+ <translation>Ajuste bruto Osc %1:</translation>
</message>
<message>
- <source>Right to Left</source>
- <translation>Dir para Esq</translation>
+ <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <translation>Com este botão você pode ajustar o defasamento do oscilador %1. Isso significa que você pode move o ponto de uma oscilação onde o oscilador começa à oscilar. Por exemplo, se você tem uma onda-seno e tem uma compensação de fase de 180 graus, a onda vai primeiro descer. É o mesmo com onda-quadrada.</translation>
</message>
<message>
- <source>Right to Right</source>
- <translation>Dir para Dir</translation>
+ <source>Osc %1 phase-offset:</source>
+ <translation>Defasamento Osc %1:</translation>
</message>
-</context>
-<context>
- <name>TrackContainer</name>
<message>
- <source>Couldn't open file</source>
- <translation>Não é possível abrir o arquivo</translation>
+ <source>degrees</source>
+ <translation>graus</translation>
</message>
<message>
- <source>Loading project...</source>
- <translation>Carregando projeto...</translation>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation>Com este botão você pode modificar o ajuste fino do oscilador %1 para o canal direito. O ajuste fino varia entre -100 centésimos e +100 centésimos. Isto é útil para criar sons 'gordos'.</translation>
</message>
<message>
- <source>Importing FLP-file...</source>
- <translation>Importando arquivo FLP...</translation>
+ <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation>Use o modulador de amplitude para modular o oscilador 3 com o oscilador 2</translation>
</message>
<message>
- <source>Cancel</source>
- <translation>Cancelar</translation>
+ <source>Use a sine-wave for current oscillator.</source>
+ <translation>Use uma onda senoidal no oscilador atual.</translation>
</message>
<message>
- <source>Couldn't find a filter for importing file %1.
-You should convert this file into a format supported by LMMS using another software.</source>
- <translation>Não foi possível encontrar um filtro para inportar o arquivo %1.
-Você poderia converter este arquivo em um formato suportado pelo LMMS usando outro aplicativo.</translation>
+ <source>Synchronize oscillator 1 with oscillator 2</source>
+ <translation>Sincronize o oscilador 1 com o oscilador 2</translation>
</message>
<message>
- <source>Couldn't open file %1 for reading.
-Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
- <translation>Não foi possível abrir o arquivo %1 para leitura.
-Por favor certifique-se que você tem permissões de leitura para o arquivo e para a pasta e tente novamente!</translation>
+ <source>Use a user-defined waveform for current oscillator.</source>
+ <translation>Use uma forma de onda definida pelo usuário no oscilador atual.</translation>
</message>
<message>
- <source>Couldn't import file</source>
- <translation>não foi possivel importar arquivo</translation>
+ <source>Use a triangle-wave for current oscillator.</source>
+ <translation>Use uma onda triangular no oscilador atual.</translation>
</message>
+</context>
+<context>
+ <name>Ui</name>
<message>
- <source>Importing MIDI-file...</source>
- <translation>Importando arquivo MIDI...</translation>
+ <source>Contributors ordered by number of commits:</source>
+ <translation>Colaboradores ordenados por ordem de contribuição:</translation>
</message>
<message>
- <source>Please wait...</source>
- <translation>Por favor aguarde...</translation>
+ <source>Involved</source>
+ <translation>Envolvidos</translation>
</message>
</context>
<context>
- <name>AboutDialog</name>
+ <name>VersionedSaveDialog</name>
<message>
- <source>About</source>
- <translation>Sobre</translation>
+ <source>Increment version number</source>
+ <translation>Incrementar número da versão</translation>
</message>
<message>
- <source>License</source>
- <translation>Licença</translation>
+ <source>Decrement version number</source>
+ <translation>Decrementar número da versão</translation>
</message>
+</context>
+<context>
+ <name>VestigeInstrumentView</name>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation>LMMS (Linux MultiMedia Studio)</translation>
+ <source>by </source>
+ <translation>por</translation>
</message>
<message>
- <source>Authors</source>
- <translation>Autores</translation>
+ <source>Open VST-plugin preset</source>
+ <translation>Abrir pré definição de plugin VST</translation>
</message>
<message>
- <source>Translation</source>
- <translation>Tradução</translation>
+ <source> - VST plugin control</source>
+ <translation> - Controle de plugins VST</translation>
</message>
<message>
- <source>About LMMS</source>
- <translation>Sobre LMMS</translation>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation>Clique aqui se você precisa salvar o programa de pré definição do plugin VST.</translation>
</message>
<message>
- <source>LMMS - easy music production for everyone</source>
- <translation>LMMS - produção musical fácil para todos</translation>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation>Clique aqui para selecionar a pré definição que está sendo carregada no VST.</translation>
</message>
<message>
- <source>Copyright (c) 2004-2014, LMMS developers</source>
- <translation>Copyright (c) 2004-2014, LMMS developers</translation>
+ <source>Previous (-)</source>
+ <translation>Anterior (-)</translation>
</message>
<message>
- <source>Version %1 (%2/%3, Qt %4, %5)</source>
- <translation>Versão %1 (%2/%3, Qt %4, %5)</translation>
+ <source>Open other VST-plugin</source>
+ <translation>Abrir outro plugin VST</translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
- <translation><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></translation>
+ <source>Preset</source>
+ <translation>Pré definição</translation>
</message>
<message>
- <source>Current language not translated (or native English).
-
-If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer!</source>
- <translation>Este programa foi traduzido para o idioma português de forma voluntária.
-
-Qualquer sugestão para tradução, entre em contato pela lista de desenvolvedores do LMMS ou pelo meu email: <emviveros/arroba/users/ponto/sourceforge/ponto/net>. Sua contribuição é muito bem vinda!
-
-Esteban Viveros</translation>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation>Clique aqui se você precisa controlar o plugin VST por outro host.</translation>
</message>
-</context>
-<context>
- <name>lb302SynthView</name>
<message>
- <source>DIST:</source>
- <translation></translation>
+ <source>EXE-files (*.exe)</source>
+ <translation>Arquivos EXE (*.exe)</translation>
</message>
<message>
- <source>Click here for a square-wave with a rounded end.</source>
- <translation>Clique aqui para usar uma onda quadrada arredondada.</translation>
+ <source>DLL-files (*.dll)</source>
+ <translation>Arquivos DLL (*.dll)</translation>
</message>
<message>
- <source>Slide Decay:</source>
- <translation>Decaimento gradual:</translation>
+ <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <translation>Clique aqui para mostrar ou esconder a interface gráfica do usuário (GUI) do plugin VST.</translation>
</message>
<message>
- <source>Click here for an exponential wave.</source>
- <translation>Clique aqui para usar uma onda exponencial.</translation>
+ <source>Show/hide GUI</source>
+ <translation>Mostrar/esconder GUI</translation>
</message>
<message>
- <source>White noise wave</source>
- <translation>Ruído branco</translation>
+ <source>Save preset</source>
+ <translation>Salvar pré definição</translation>
</message>
<message>
- <source>Click here for a saw-wave.</source>
- <translation>Clique aqui para usar uma onda dente de serra.</translation>
+ <source>Open VST-plugin</source>
+ <translation>Abrir plugin VST</translation>
</message>
<message>
- <source>Sine wave</source>
- <translation>Onda senoidal</translation>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation>Controlar plugin VST a partir do host LMMS</translation>
</message>
<message>
- <source>Click here for white-noise.</source>
- <translation>Clique aqui para usar um ruído branco.</translation>
+ <source>Next (+)</source>
+ <translation>Próximo (+)</translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Decaimento:</translation>
+ <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <translation>Clique aqui se você quer abrir outro plugin VST. clicando neste botão, você verá uma caixa da seleção para escolher o arquivo.</translation>
</message>
<message>
- <source>Env Mod:</source>
- <translation>Mod Env:</translation>
+ <source>Turn off all notes</source>
+ <translation>Desligar todas as notas</translation>
</message>
<message>
- <source>Moog wave</source>
- <translation>Onda Moog</translation>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation>Clique aqui se você precisa abrir outro tipo de arquivo de pré definição de plugin VST como: *.fxp, *.fxb.</translation>
</message>
<message>
- <source>Resonance:</source>
- <translation>Ressonância:</translation>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation>Clique aqui se você precisar trocar para outro programa de pré definições de plugin VST.</translation>
</message>
<message>
- <source>Rounded square wave</source>
- <translation>Onda quadrada arredondada</translation>
+ <source>No VST-plugin loaded</source>
+ <translation>Nenhum plugin VST carregado</translation>
</message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
<message>
- <source>Square wave</source>
- <translation>Onda quadrada</translation>
+ <source>Open VST-plugin preset</source>
+ <translation>Abrir pré definição de plugin VST</translation>
</message>
<message>
- <source>303-es-que, 24dB/octave, 3 pole filter</source>
- <translation>303-es-que, 24dB/octave, filtro 3 pole</translation>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation>Clique aqui se você precisa salvar o programa de pré definição do plugin VST.</translation>
</message>
<message>
- <source>Saw wave</source>
- <translation>Onda dente de serra</translation>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation>Clique aqui para selecionar a pré definição que está sendo carregada no VST.</translation>
</message>
<message>
- <source>Click here for a moog-like wave.</source>
- <translation>Clique aqui para usar uma onda tipo moog.</translation>
+ <source>Previous (-)</source>
+ <translation>Anterior (-)</translation>
</message>
<message>
- <source>Click for a sine-wave.</source>
- <translation>Clique aqui para usar uma onda senoidal.</translation>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation>Clique aqui se você deseja controlar o plugin VST por outro host.</translation>
</message>
<message>
- <source>Triangle wave</source>
- <translation>Onda triangular</translation>
+ <source>Show/hide</source>
+ <translation>Mostrar/esconder</translation>
</message>
<message>
- <source>Click here for a square-wave.</source>
- <translation>Clique aqui para usar uma onda quadrada.</translation>
+ <source>Save preset</source>
+ <translation>Salvar pré definição</translation>
</message>
<message>
- <source>Cutoff Freq:</source>
- <translation>Freq Corte:</translation>
+ <source>Effect by: </source>
+ <translation>Efeito por: </translation>
</message>
<message>
- <source>Click here for a triangle-wave.</source>
- <translation>Clique aqui para usar uma onda triangular.</translation>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation>Controlar plugin VST a partir do host LMMS</translation>
</message>
-</context>
-<context>
- <name>AutomationPatternView</name>
<message>
- <source>Clear</source>
- <translation>Limpar</translation>
+ <source>Next (+)</source>
+ <translation>Próximo (+)</translation>
</message>
<message>
- <source>Open in Automation editor</source>
- <translation>Abra dentro do Editor de Automação</translation>
+ <source> <br /></source>
+ <translation></translation>
</message>
<message>
- <source>Disconnect "%1"</source>
- <translation>Desconectar "%1"</translation>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation>Clique aqui se você precisa abrir outro tipo de arquivo de pré definição de plugin VST como: *.fxp, *.fxb.</translation>
</message>
<message>
- <source>double-click to open this pattern in automation editor</source>
- <translation>dois cliques para abrir esta sequência no editor de automação</translation>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation>Clique aqui se você precisar trocar para outro programa de pré definições de plugin VST.</translation>
</message>
+</context>
+<context>
+ <name>VstPlugin</name>
<message>
- <source>%1 Connections</source>
- <translation>%1 Conexões</translation>
+ <source>"</source>
+ <translation></translation>
</message>
<message>
- <source>Reset name</source>
- <translation>Restaurar nome</translation>
+ <source>'</source>
+ <translation></translation>
</message>
<message>
- <source>Change name</source>
- <translation>Mudar nome</translation>
+ <source>.FXB</source>
+ <translation></translation>
</message>
-</context>
-<context>
- <name>FxMixer</name>
- <message>
- <source>FX %1</source>
- <translation>FX %1</translation>
- </message>
- <message>
- <source>Master</source>
- <translation>Mestre</translation>
- </message>
-</context>
-<context>
- <name>exportProjectDialog</name>
<message>
- <source>Error</source>
- <translation>Erro</translation>
+ <source>.FXP</source>
+ <translation></translation>
</message>
<message>
- <source>Could not open file</source>
- <translation>Não é possível abrir o arquivo</translation>
+ <source>.fxb</source>
+ <translation></translation>
</message>
<message>
- <source>Could not open file %1 for writing.
-Please make sure you have write-permission to the file and the directory containing the file and try again!</source>
- <translation>Não é possível abrir o arquivo %1 para gravação.
-Por favor certifique-se que você tem permissão para gravação no arquivo e se o arquivo se encontra no diretório e tente novamente!</translation>
+ <source>.fxp</source>
+ <translation></translation>
</message>
<message>
- <source>Error while determining file-encoder device. Please try to choose a different output format.</source>
- <translation>Erro ao determinar o dispositivo codificador de arquivo. Por favor tente um formato de saída diferente.</translation>
+ <source>Loading plugin</source>
+ <translation>Carregando plugin</translation>
</message>
<message>
- <source>Rendering: %1%</source>
- <translation>Renderizando: %1%</translation>
+ <source>Save Preset</source>
+ <translation>Salvar pré definição</translation>
</message>
<message>
- <source>Export project to %1</source>
- <translation>Exportar projeto para %1</translation>
+ <source>Open Preset</source>
+ <translation>Abrir pré definição</translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Gain:</source>
- <translation>Ganho:</translation>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation>Pré definição de Plugin VST (*.fxp *.fxb)</translation>
</message>
<message>
- <source>Start frequency:</source>
- <translation>Frequência de partida:</translation>
+ <source>: default</source>
+ <translation>: padrão</translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Decaimento:</translation>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Distorção:</translation>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
- <translation>Frequência final:</translation>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>graphModel</name>
+ <name>WatsynInstrument</name>
<message>
- <source>Graph</source>
- <translation>Gráfico</translation>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TripleOscillatorView</name>
<message>
- <source>Mix output of oscillator 1 & 2</source>
- <translation>Misture as saídas do oscilador 1 e 2</translation>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 2 & 3</source>
- <translation>Misture as saídas do oscilador 2 e 3</translation>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
- <translation>centésimos</translation>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Ajuste fino esquerdo Osc %1:</translation>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
- <translation>Com este botão você pode modificar Ajuste bruto do oscilador %1. Você pode descer o tom do oscilador 12 semitons (1 oitava) para cima e para baixo. Isto é útil para criar sons com um acorde.</translation>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
- <translation>Use o modulador de fase para modular o oscilador 3 com o oscilador 2</translation>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use an exponential wave for current oscillator.</source>
- <translation>Use uma onda exponencial no oscilador atual.</translation>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning:</source>
- <translation>Panorâmico Osc %1:</translation>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a square-wave for current oscillator.</source>
- <translation>Use uma onda quadrada no oscilador atual.</translation>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning:</source>
- <translation>Defasamento estéreo Osc %1:</translation>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>semitones</source>
- <translation>semitons</translation>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
- <translation>Com este botão você pode ajustar o defasamento estéreo do oscilador %1. O defasador estéreo especifica o tamanho da diferença entre a defasagem entre os canais esquerdo e direito. Isto é muito bom para abrir o som.</translation>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
- <translation>Use o modulador de frequência para modular o oscilador 2 com o oscilador 1</translation>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
- <translation>Use o modulador de fase para modular o oscilador 2 com o oscilador 1</translation>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 volume:</source>
- <translation>Volume Osc %1:</translation>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
- <translation>Com este botão você pode ajustar o panning do oscilador %1. O valor -100 significa 100% à esquerda e 100 move a saida do oscilador para a direita.</translation>
+ <source>Right detune A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
- <translation>Com este botão você pode manipular o Ajuste fino do oscilador %1 para o canal esquerdo. O Ajuste fino varia entre -100 centésimos e +100 centésimos. Isto é útil para criar sons 'gordos'.</translation>
+ <source>Right detune A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right:</source>
- <translation>Ajuste fino direito %1:</translation>
+ <source>Right detune B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
- <translation>Use o modulador de amplitude para modular o oscilador 2 com o oscilador 1</translation>
+ <source>Right detune B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 2 with oscillator 3</source>
- <translation>Sincronize o oscilador 2 com o oscilador 3</translation>
+ <source>A-B Mix</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a saw-wave for current oscillator.</source>
- <translation>Use uma onda dente de serra no oscilador atual.</translation>
+ <source>A-B Mix envelope amount</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use white-noise for current oscillator.</source>
- <translation>Use ruído branco no oscilador atual.</translation>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
- <translation>Use o modulador de frequência para modular o oscilador 3 com o oscilador 2</translation>
+ <source>A-B Mix envelope hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
- <translation>Com este botão você pode ajustar o volume do oscilador %1. Quando você seleciona o valor 0, o oscilador é desligado. Com outros valores você vai escutar o oscilador tão alto quanto você o ajustar.</translation>
+ <source>A-B Mix envelope decay</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a moog-like saw-wave for current oscillator.</source>
- <translation>Use uma onda dente de serra moog no oscilador atual.</translation>
+ <source>A1-B2 Crosstalk</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning:</source>
- <translation>Ajuste bruto Osc %1:</translation>
+ <source>A2-A1 modulation</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
- <translation>Com este botão você pode ajustar o defasamento do oscilador %1. Isso significa que você pode move o ponto de uma oscilação onde o oscilador começa à oscilar. Por exemplo, se você tem uma onda-seno e tem uma compensação de fase de 180 graus, a onda vai primeiro descer. É o mesmo com onda-quadrada.</translation>
+ <source>B2-B1 modulation</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset:</source>
- <translation>Defasamento Osc %1:</translation>
+ <source>Selected graph</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynView</name>
<message>
- <source>degrees</source>
- <translation>graus</translation>
+ <source>Select oscillator A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
- <translation>Com este botão você pode modificar o ajuste fino do oscilador %1 para o canal direito. O ajuste fino varia entre -100 centésimos e +100 centésimos. Isto é útil para criar sons 'gordos'.</translation>
+ <source>Select oscillator A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
- <translation>Use o modulador de amplitude para modular o oscilador 3 com o oscilador 2</translation>
+ <source>Select oscillator B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a sine-wave for current oscillator.</source>
- <translation>Use uma onda senoidal no oscilador atual.</translation>
+ <source>Select oscillator B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 1 with oscillator 2</source>
- <translation>Sincronize o oscilador 1 com o oscilador 2</translation>
+ <source>Mix output of A2 to A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a user-defined waveform for current oscillator.</source>
- <translation>Use uma forma de onda definida pelo usuário no oscilador atual.</translation>
+ <source>Modulate amplitude of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use a triangle-wave for current oscillator.</source>
- <translation>Use uma onda triangular no oscilador atual.</translation>
+ <source>Ring-modulate A1 and A2</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>trackContentObject</name>
<message>
- <source>Muted</source>
- <translation>Mudo</translation>
+ <source>Modulate phase of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>InstrumentFunctionNoteStackingView</name>
<message>
- <source>RANGE</source>
- <translation>EXTENSÃO</translation>
+ <source>Mix output of B2 to B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Chord range:</source>
- <translation>Extensão do acorde:</translation>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Chord:</source>
- <translation>Acorde:</translation>
+ <source>Ring-modulate B1 and B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves.</source>
- <translation>Use este botão para definir a extensão do acorde em oitavas. O acorde selecionado será tocado no número de oitavas especificado.</translation>
+ <source>Modulate phase of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>STACKING</source>
- <translation>EMPILHAMENTO</translation>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished">Desenhe sua própria forma de onda aqui utilizando seu mouse no gráfico.</translation>
</message>
<message>
- <source>octave(s)</source>
- <translation>oitava(s)</translation>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>InstrumentTrack</name>
<message>
- <source>Pitch</source>
- <translation>Altura</translation>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume</source>
- <translation>Volume</translation>
+ <source>Phase left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>unnamed_track</source>
- <translation>pista_sem_nome</translation>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the volume of the opened channel.</source>
- <translation>Com este botão você pode ajustar o volume do canal aberto.</translation>
+ <source>Phase right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Panning</source>
- <translation>Panorâmico</translation>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Base note</source>
- <translation>Nota base</translation>
+ <source>Normalize</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>FX channel</source>
- <translation>Canal de Efeitos</translation>
+ <source>Click to normalize</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Pitch range</source>
- <translation>Extensão</translation>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Default preset</source>
- <translation>Pré configuração padrão</translation>
+ <source>Click to invert</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SongEditor</name>
<message>
- <source>Add beat/bassline</source>
- <translation>Adicionar Base</translation>
+ <source>Smooth</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tempo</source>
- <translation>Andamento</translation>
+ <source>Click to smooth</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Record samples from Audio-device</source>
- <translation>Gravar amostras do Dispositivo de Áudio</translation>
+ <source>Sine wave</source>
+ <translation type="unfinished">Onda senoidal</translation>
</message>
<message>
- <source>Add automation-track</source>
- <translation>Adicionar pista de automação</translation>
+ <source>Click for sine wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Master pitch</source>
- <translation>Altura Final</translation>
+ <source>Triangle wave</source>
+ <translation type="unfinished">Onda triangular</translation>
</message>
<message>
- <source>Add sample-track</source>
- <translation>Adicionar pista de amostra</translation>
+ <source>Click for triangle wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Song-Editor</source>
- <translation>Editor de Arranjo</translation>
+ <source>Click for saw wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>TEMPO/BPM</source>
- <translation>ANDAMENTO/BPM</translation>
+ <source>Square wave</source>
+ <translation type="unfinished">Onda quadrada</translation>
</message>
<message>
- <source>master pitch</source>
- <translation>altura final</translation>
+ <source>Click for square wave</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>ZynAddSubFxInstrument</name>
<message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation>Gravar amostras a partir do dispositivo de Áudio enquanto reproduz o arranjo ou base</translation>
+ <source>Resonance Center Frequency</source>
+ <translation>Frequência Central de Ressonância</translation>
</message>
<message>
- <source>master volume</source>
- <translation>volume final</translation>
+ <source>Filter Resonance</source>
+ <translation>Ressonância do Filtro</translation>
</message>
<message>
- <source>Master volume</source>
- <translation>Volume Final</translation>
+ <source>Bandwidth</source>
+ <translation>Largura da Banda</translation>
</message>
<message>
- <source>Error in file</source>
- <translation>Erro no arquivo</translation>
+ <source>Filter Frequency</source>
+ <translation>Frequência do Filtro</translation>
</message>
<message>
- <source>Could not open file</source>
- <translation>Não é possível abrir o arquivo</translation>
+ <source>Resonance Bandwidth</source>
+ <translation>Banda de Ressonância</translation>
</message>
<message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Clique aqui se você quer parar de tocar a música. O marcador de posição (verde), será ajustado para o início da música.</translation>
+ <source>Forward MIDI Control Change Events</source>
+ <translation>Próximo evento de mudança de controle MIDI</translation>
</message>
<message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation>o andamento de uma música é especificado em batidas por minuto (BPM). Se voc6e precisar mudar o andamento de sua música, mude esse valor. Todo compasso tem 4 batidas, logo o andamento em BPM especificara a quantidade de batidas dividida por 4.</translation>
+ <source>Portamento</source>
+ <translation></translation>
</message>
<message>
- <source>Draw mode</source>
- <translation>Lápis</translation>
+ <source>FM Gain</source>
+ <translation>Ganho da FM</translation>
</message>
+</context>
+<context>
+ <name>ZynAddSubFxView</name>
<message>
- <source>Stop song (Space)</source>
- <translation>Parar música (Espaço)</translation>
+ <source>BW</source>
+ <translation>LBnd</translation>
</message>
<message>
- <source>Play song (Space)</source>
- <translation>Tocar música (Espaço)</translation>
+ <source>RES</source>
+ <translation></translation>
</message>
<message>
- <source>Edit mode (select and move)</source>
- <translation>Modo de Edição (seleciona e move)</translation>
+ <source>FREQ</source>
+ <translation></translation>
</message>
<message>
- <source>Could not write file</source>
- <translation>Não é possivel salvar o arquivo</translation>
+ <source>PORT</source>
+ <translation></translation>
</message>
<message>
- <source>Value: %1%</source>
- <translation>Valor: %1%</translation>
+ <source>Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX.</source>
+ <translation>Clique aqui para mostrar ou esconder a interface do usuário (GUI) do ZynAddSubFX.</translation>
</message>
<message>
- <source>High quality mode</source>
- <translation>Modo de alta qualidade</translation>
+ <source>Filter Frequency:</source>
+ <translation>Frequência do Filtro:</translation>
</message>
<message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation>Não foi possível abrir %1 para escrita. Provavelmente você não tem permissão para escrita deste arquivo. Por favor, certifique-se de ter permissão para escrever nesse arquivo e tente novamente.</translation>
+ <source>RES CF</source>
+ <translation>RES FC</translation>
</message>
<message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation>Não foi possível abrir o arquivo %1. Provavelmente você não tem permissão para ler este arquivo.
- Por favor certifique-se que você tenha permissão de leitura para o arquivo e tente novamente.</translation>
+ <source>RES BW</source>
+ <translation>RES Bnd</translation>
</message>
<message>
- <source>Value: %1 semitones</source>
- <translation>Valor: %1 semitons</translation>
+ <source>Portamento:</source>
+ <translation></translation>
</message>
<message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Clique aqui se você quer tocar toda a música. A música iniciará no posição do marcador (verde). Você pode move-lo enquanto estiver tocando.</translation>
+ <source>Resonance center frequency:</source>
+ <translation>Frequência Central de Ressonância:</translation>
</message>
<message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation>O arquivo %1 parece conter erros e por isso não pode ser carregado.</translation>
+ <source>Filter Resonance:</source>
+ <translation>Ressonância do Filtro:</translation>
</message>
<message>
- <source>tempo of song</source>
- <translation>andamento da música</translation>
+ <source>FM GAIN</source>
+ <translation>GANHO FM</translation>
+ </message>
+ <message>
+ <source>Bandwidth:</source>
+ <translation>Largura da Banda:</translation>
+ </message>
+ <message>
+ <source>Forward MIDI Control Changes</source>
+ <translation>Próximo evento de mudança de controle MIDI</translation>
+ </message>
+ <message>
+ <source>Resonance bandwidth:</source>
+ <translation>Banda de Ressonância:</translation>
+ </message>
+ <message>
+ <source>FM Gain:</source>
+ <translation>Ganho da FM:</translation>
+ </message>
+ <message>
+ <source>Show GUI</source>
+ <translation>Mostrar GUI</translation>
+ </message>
+</context>
+<context>
+ <name>audioFileProcessor</name>
+ <message>
+ <source>Amplify</source>
+ <translation>Amplificar</translation>
+ </message>
+ <message>
+ <source>Stutter</source>
+ <translation>Gaguejar</translation>
+ </message>
+ <message>
+ <source>Reverse sample</source>
+ <translation>Amostra reversa</translation>
+ </message>
+ <message>
+ <source>End of sample</source>
+ <translation>Fim da amostra</translation>
+ </message>
+ <message>
+ <source>Start of sample</source>
+ <translation>Início da amostra</translation>
+ </message>
+ <message>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished">Modo de loop</translation>
+ </message>
+ <message>
+ <source>Interpolation mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -5158,1614 +5325,3032 @@ Por favor certifique-se que você tem permissão para gravação no arquivo e se
</message>
</context>
<context>
- <name>song</name>
+ <name>bbTCOView</name>
<message>
- <source>Tempo</source>
- <translation>Andamento</translation>
+ <source>Open in Beat+Bassline-Editor</source>
+ <translation>Abrir no editor de Bases</translation>
</message>
<message>
- <source>Master pitch</source>
- <translation>Altura Final</translation>
+ <source>Change color</source>
+ <translation>Mudar cor</translation>
</message>
<message>
- <source>Project saved</source>
- <translation>Projeto salvo</translation>
+ <source>Reset name</source>
+ <translation>Restaurar nome</translation>
</message>
<message>
- <source>Master volume</source>
- <translation>Volume Final</translation>
+ <source>Change name</source>
+ <translation>Mudar nome</translation>
</message>
<message>
- <source>This project is empty so exporting makes no sense. Please put some items into Song Editor first!</source>
- <translation>Este projeto está vazio, então exportá-lo não faz sentido. Por favor, coloque alguns itens dentro do Editor de Arranjo primeiro!</translation>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>bbTrack</name>
<message>
- <source>MIDI sequences</source>
- <translation>Sequências MIDI</translation>
+ <source>Beat/Bassline %1</source>
+ <translation>Base %1</translation>
</message>
<message>
- <source>All file types</source>
- <translation>Todos os tipos de arquivo</translation>
+ <source>Clone of %1</source>
+ <translation>Clone de %1</translation>
</message>
+</context>
+<context>
+ <name>bitInvader</name>
<message>
- <source>untitled</source>
- <translation>sem nome</translation>
+ <source>Samplelength</source>
+ <translation>Tamanho de amostra</translation>
+ </message>
+</context>
+<context>
+ <name>bitInvaderView</name>
+ <message>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation>Desenhe sua própria forma de onda aqui utilizando seu mouse no gráfico.</translation>
</message>
<message>
- <source>Select file for project-export...</source>
- <translation>Selecione o arquivo para exportar o projeto...</translation>
+ <source>White noise wave</source>
+ <translation>Ruído branco</translation>
</message>
<message>
- <source>FL Studio projects</source>
- <translation>Projetos do FL Studio</translation>
+ <source>Click here to smooth waveform.</source>
+ <translation>Clique aqui para suavizar a forma de onda.</translation>
</message>
<message>
- <source>Project NOT saved.</source>
- <translation>Projeto NÃO salvo.</translation>
+ <source>Click here for a saw-wave.</source>
+ <translation>Clique aqui para usar uma onda dente de serra.</translation>
</message>
<message>
- <source>Import file</source>
- <translation>Importar arquivo</translation>
+ <source>Sine wave</source>
+ <translation>Onda senoidal</translation>
</message>
<message>
- <source>The project %1 is now saved.</source>
- <translation>O projeto %1 está salvo agora.</translation>
+ <source>Click here for white-noise.</source>
+ <translation>Clique aqui para usar um ruído branco.</translation>
</message>
<message>
- <source>Select directory for writing exported tracks...</source>
- <translation>Selecionar pasta para escrita de pistas renderizadas...</translation>
+ <source>Smooth</source>
+ <translation>Suave</translation>
</message>
<message>
- <source>Empty project</source>
- <translation>Projeto vazio</translation>
+ <source>Interpolation</source>
+ <translation>Interpolação</translation>
</message>
<message>
- <source>The project %1 was not saved!</source>
- <translation>O projeto %1 não foi salvo!</translation>
+ <source>Square wave</source>
+ <translation>Onda quadrada</translation>
</message>
<message>
- <source>Hydrogen projects</source>
- <translation>Projetos do Hydrogen</translation>
+ <source>Saw wave</source>
+ <translation>Onda dente de serra</translation>
</message>
-</context>
-<context>
- <name>ladspaBrowserView</name>
<message>
- <source>Type:</source>
- <translation>Tipo:</translation>
+ <source>Normalize</source>
+ <translation>Normalização</translation>
</message>
<message>
- <source>This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names.
-
-Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable.
-
-Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable.
-
-Instruments are plugins for which only output channels were identified.
-
-Analysis Tools are plugins for which only input channels were identified.
-
-Don't Knows are plugins for which no input or output channels were identified.
-
-Double clicking any of the plugins will bring up information on the ports.</source>
- <translation>Esta caixa de diálogo contém informações de todos os plugins LADSPA do LMMS que estão disponíveis localmente. Os plugins estão divididos em cinco categorias baseadas em uma interpretação do tipo de portas e nomes.
-
-Efeitos Disponíveis são todos os que podem ser usados pelo LMMS. Para o LMMS usar um efeito, é necessário antes de tudo que ele seja um efeito, ou seja, que ele tenha tanto canais de entrada como tamém canais de saída. O LMMS identifica um canal de entrada como uma porta de informações de áudio com o nome de "entrada". Canais de saída são identificados como "saída". Além disso o efeito deve ter o mesmo número de entradas e saídas, assim como ter capacidade de processa [...]
-
-Efeitos Indisponíveis são aqueles que são identificados como efeitos mas, ou não tem o mesmo número de entradas e saídas, ou não são capazes de executar processamento em tempo real.
-
-Instrumentos são plugins com somente canais de saída identificados.
-
-Ferramentas de análise são plugins com somente canais de entrada identificados.
-
-Sei lá.. são plugins que nenhuma entrada ou saída foi identificada.
-
-Clicando duas vezes com o mouse em qualquer plugin, voc6e terá informações sobre as portas.</translation>
+ <source>Click for a sine-wave.</source>
+ <translation>Clique aqui para usar uma onda senoidal.</translation>
</message>
<message>
- <source>Analysis Tools</source>
- <translation>Ferramentas de Análise</translation>
+ <source>Triangle wave</source>
+ <translation>Onda triangular</translation>
</message>
<message>
- <source>Unavailable Effects</source>
- <translation>Efeitos Indisponíveis</translation>
+ <source>Click here for a square-wave.</source>
+ <translation>Clique aqui para usar uma onda quadrada.</translation>
</message>
<message>
- <source>Instruments</source>
- <translation>Instrumentos</translation>
+ <source>User defined wave</source>
+ <translation>Onda definida pelo usuário</translation>
</message>
<message>
- <source>Available Effects</source>
- <translation>Efeitos Disponíveis</translation>
+ <source>Click here for a triangle-wave.</source>
+ <translation>Clique aqui para usar uma onda triangular.</translation>
</message>
<message>
- <source>Don't know</source>
- <translation>Sei lá..</translation>
+ <source>Sample Length</source>
+ <translation>Tamanho da Amostra</translation>
</message>
-</context>
-<context>
- <name>stereoEnhancerControls</name>
<message>
- <source>Width</source>
- <translation>Largura</translation>
+ <source>Click here for a user-defined shape.</source>
+ <translation>Clique aqui para usar uma onda definida pelo usuário.</translation>
</message>
</context>
<context>
- <name>manageVestigeInstrumentView</name>
+ <name>dynProcControlDialog</name>
<message>
- <source> - VST plugin control</source>
- <translation> - Controle de plugins VST</translation>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source> Close </source>
- <translation> Fechar </translation>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Close VST plugin knob-controller window.</source>
- <translation>Fechar janela de botões de controle do efeito VST.</translation>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>VST Sync</source>
- <translation>Sincronização VST</translation>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here if you want to synchronize all parameters with VST plugin.</source>
- <translation>Clique aqui para sincronizar todos os parâmetros com o plugin VST.</translation>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Automated</source>
- <translation>Automatizado</translation>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here if you want to display automated parameters only.</source>
- <translation>Clique aqui para exibir somente os parâmetros automatizados.</translation>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>organicInstrumentView</name>
<message>
- <source>cents</source>
- <translation>centésimos</translation>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Ajuste fino esquerdo Osc %1:</translation>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning:</source>
- <translation>Panorâmico Osc %1:</translation>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Randomise</source>
- <translation>Aleatorizar</translation>
- </message>
- <message>
- <source>Osc %1 volume:</source>
- <translation>Volume Osc %1:</translation>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Distorção:</translation>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Volume:</source>
- <translation></translation>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform:</source>
- <translation>Forma de Onda Osc %1:</translation>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>OscillatorObject</name>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation>Ajuste fino direito %1</translation>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 volume</source>
- <translation>Volume Osc %1</translation>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation>Defasamento Osc %1</translation>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation>Ajuste bruto Osc %1</translation>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
- <translation>Tipo de modulação %1</translation>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation>Ajuste de fase estéreo Osc %1</translation>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation>Forma de Onda Osc %1</translation>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation>Ajuste fino esquerdo Osc %1</translation>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>dynProcControls</name>
<message>
- <source>Osc %1 wave shape</source>
- <translation>Formato de onda Osc %1</translation>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation>Panorâmico Osc %1</translation>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>patternView</name>
<message>
- <source>Open in piano-roll</source>
- <translation>Abrir no Editor de Notas MIDI</translation>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Remove steps</source>
- <translation>Remover passo</translation>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Unfreeze</source>
- <translation>Descongelar</translation>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>exportProjectDialog</name>
<message>
- <source>Freeze</source>
- <translation>Congelar</translation>
+ <source>Error</source>
+ <translation>Erro</translation>
</message>
<message>
- <source>Clear all notes</source>
- <translation>Limpar todas as notas</translation>
+ <source>Could not open file</source>
+ <translation>Não é possível abrir o arquivo</translation>
</message>
<message>
- <source>Add steps</source>
- <translation>Adicionar passo</translation>
+ <source>Could not open file %1 for writing.
+Please make sure you have write-permission to the file and the directory containing the file and try again!</source>
+ <translation>Não é possível abrir o arquivo %1 para gravação.
+Por favor certifique-se que você tem permissão para gravação no arquivo e se o arquivo se encontra no diretório e tente novamente!</translation>
</message>
<message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>duplo clique para abrir esta sequência no Editor de notas MDll
-use a roda do mouse para midificar o volume de cada passo</translation>
+ <source>Error while determining file-encoder device. Please try to choose a different output format.</source>
+ <translation>Erro ao determinar o dispositivo codificador de arquivo. Por favor tente um formato de saída diferente.</translation>
</message>
<message>
- <source>Refreeze</source>
- <translation>Re-congelar</translation>
+ <source>Rendering: %1%</source>
+ <translation>Renderizando: %1%</translation>
</message>
<message>
- <source>Reset name</source>
- <translation>Restaurar nome</translation>
+ <source>Export project to %1</source>
+ <translation>Exportar projeto para %1</translation>
</message>
+</context>
+<context>
+ <name>fader</name>
<message>
- <source>Change name</source>
- <translation>Mudar nome</translation>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation>Por favor entre com um novo valor entre %1 e %2:</translation>
</message>
</context>
<context>
- <name>PianoRoll</name>
+ <name>graphModel</name>
<message>
- <source>Detune mode (Shift+T)</source>
- <translation>Automação para Afinação (Shift+T)</translation>
+ <source>Graph</source>
+ <translation>Gráfico</translation>
</message>
+</context>
+<context>
+ <name>kickerInstrument</name>
<message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Recortar notas selecionadas (Ctrl+X)</translation>
+ <source>Gain</source>
+ <translation>Ganho</translation>
</message>
<message>
- <source>Draw mode (Shift+D)</source>
- <translation>Lápis (Shift+D)</translation>
+ <source>End frequency</source>
+ <translation>Frequência final</translation>
</message>
<message>
- <source>No chord</source>
- <translation>Sem acorde</translation>
+ <source>Start frequency</source>
+ <translation>Frequência de partida</translation>
</message>
<message>
- <source>No scale</source>
- <translation>Sem escala</translation>
+ <source>Length</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation>Clique aqui e a automação para afinação será ativada. Nela você pode clicar na nota para abrir sua automação de afinação. Você pode utilizar esta ferramenta para fazer glissandos de uma altura para outra.</translation>
+ <source>Distortion Start</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation>Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode ouvir a música feita no editor de arranjo ou no editor de batida tocando atrás.</translation>
+ <source>Distortion End</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation>Clique aqui para tocar a sequência atual. Isto é útil enquanto se edita. A sequência irá entrar em loop automaticamente quando chegar ao fim.</translation>
+ <source>Envelope Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation>Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis.</translation>
+ <source>Noise</source>
+ <translation type="unfinished">Ruído</translation>
</message>
<message>
- <source>Note Panning</source>
- <translation>Panorâmico da nota</translation>
+ <source>Click</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Erase mode (Shift+E)</source>
- <translation>Borracha (Shift+E)</translation>
+ <source>Frequency Slope</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Clique aqui e as notas selecionadas serão cortadas para dentro da área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência usando o botão de colar.</translation>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation>Clique aqui e as notas na área de transferência serão coladas no primeira grade visível.</translation>
+ <source>End to note</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>kickerInstrumentView</name>
<message>
- <source>Note Volume</source>
- <translation>Volume da nota</translation>
+ <source>Gain:</source>
+ <translation>Ganho:</translation>
</message>
<message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation>Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.</translation>
+ <source>Start frequency:</source>
+ <translation>Frequência de partida:</translation>
</message>
<message>
- <source>Piano-Roll - no pattern</source>
- <translation>Editor de Notas MIDI - nenhuma sequência</translation>
+ <source>End frequency:</source>
+ <translation>Frequência final:</translation>
</message>
<message>
- <source>Mark/unmark current semitone</source>
- <translation>Marcar/desmarcar o semitom atual</translation>
+ <source>Frequency Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to stop playback of current pattern.</source>
- <translation>Clique aqui para parar a reprodução da sequência atual.</translation>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation>Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode editá-las depois.</translation>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Tocar/pausar sequência atual (Espaço)</translation>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Unmark all</source>
- <translation>Desmarcar tudo</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current scale</source>
- <translation>Marcar a escala atual</translation>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current chord</source>
- <translation>Marcar o acorde atual</translation>
+ <source>Distortion End:</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>knob</name>
<message>
- <source>Select mode (Shift+S)</source>
- <translation>Modo de Seleção (Shift+S)</translation>
+ <source>&Help</source>
+ <translation>Aj&uda</translation>
</message>
<message>
- <source>Last note</source>
- <translation>Última nota</translation>
+ <source>Please enter a new value between -96.0 dBV and 6.0 dBV:</source>
+ <translation>Por favor entre um novo valor entre -96.0 dBV e 6.0 dBV:</translation>
</message>
<message>
- <source>Note lock</source>
- <translation>Travar nota</translation>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation>Por favor entre com um novo valor entre %1 e %2:</translation>
</message>
+</context>
+<context>
+ <name>ladspaBrowserView</name>
<message>
- <source>Piano-Roll - %1</source>
- <translation>Editor de Notas MIDI - %1</translation>
+ <source>Type:</source>
+ <translation>Tipo:</translation>
</message>
<message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Colar notas da área de transferência (Ctrl+V)</translation>
+ <source>This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names.
+
+Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable.
+
+Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable.
+
+Instruments are plugins for which only output channels were identified.
+
+Analysis Tools are plugins for which only input channels were identified.
+
+Don't Knows are plugins for which no input or output channels were identified.
+
+Double clicking any of the plugins will bring up information on the ports.</source>
+ <translation>Esta caixa de diálogo contém informações de todos os plugins LADSPA do LMMS que estão disponíveis localmente. Os plugins estão divididos em cinco categorias baseadas em uma interpretação do tipo de portas e nomes.
+
+Efeitos Disponíveis são todos os que podem ser usados pelo LMMS. Para o LMMS usar um efeito, é necessário antes de tudo que ele seja um efeito, ou seja, que ele tenha tanto canais de entrada como tamém canais de saída. O LMMS identifica um canal de entrada como uma porta de informações de áudio com o nome de "entrada". Canais de saída são identificados como "saída". Além disso o efeito deve ter o mesmo número de entradas e saídas, assim como ter capacidade de processa [...]
+
+Efeitos Indisponíveis são aqueles que são identificados como efeitos mas, ou não tem o mesmo número de entradas e saídas, ou não são capazes de executar processamento em tempo real.
+
+Instrumentos são plugins com somente canais de saída identificados.
+
+Ferramentas de análise são plugins com somente canais de entrada identificados.
+
+Sei lá.. são plugins que nenhuma entrada ou saída foi identificada.
+
+Clicando duas vezes com o mouse em qualquer plugin, voc6e terá informações sobre as portas.</translation>
</message>
<message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Gravar notas do dispositivo MIDI ou Editor de Notas MIDI</translation>
+ <source>Analysis Tools</source>
+ <translation>Ferramentas de Análise</translation>
</message>
<message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Copiar notas selecionadas (Ctrl+C)</translation>
+ <source>Unavailable Effects</source>
+ <translation>Efeitos Indisponíveis</translation>
</message>
<message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Parar de tocar a sequência atual (Espaço)</translation>
+ <source>Instruments</source>
+ <translation>Instrumentos</translation>
</message>
<message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation>Clique aqui e modo de seleção será ativado. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. Este modo torna possível a seleção de notas. Alternativamente você pode pressionar Crtl enquanto estiver usando o lápis para utilizar o modo de seleção temporariamente.</translation>
+ <source>Available Effects</source>
+ <translation>Efeitos Disponíveis</translation>
</message>
<message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Por favor abra um a sequência com um duplo clique sobre ela!</translation>
+ <source>Don't know</source>
+ <translation>Sei lá..</translation>
</message>
+</context>
+<context>
+ <name>ladspaDescription</name>
<message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>Clique aqui e as notas selecionadas serão copiadas para a área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência clicando no botão de colar.</translation>
+ <source>Plugins</source>
+ <translation>Plugins</translation>
</message>
<message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>Gravar notas a partir do dispositivo MIDI ou do Editor de Notas MIDI enquanto toca o Arranjo ou uma Base</translation>
+ <source>Description</source>
+ <translation>Descrição</translation>
</message>
</context>
<context>
- <name>LfoController</name>
+ <name>ladspaPortDialog</name>
<message>
- <source>LFO Controller</source>
- <translation>Controlador de LFO</translation>
+ <source>Yes</source>
+ <translation>Sim</translation>
</message>
<message>
- <source>Oscillator phase</source>
- <translation>Fase do oscilador</translation>
+ <source>Name</source>
+ <translation>Nome</translation>
</message>
<message>
- <source>Oscillator speed</source>
- <translation>Velocidade do oscilador</translation>
+ <source>Rate</source>
+ <translation>Taxa</translation>
</message>
<message>
- <source>Oscillator amount</source>
- <translation>Quantidade do oscilador</translation>
+ <source>Type</source>
+ <translation>Tipo</translation>
</message>
<message>
- <source>Oscillator waveform</source>
- <translation>Forma de onda do oscilador</translation>
+ <source>Audio</source>
+ <translation>Áudio</translation>
</message>
<message>
- <source>Base value</source>
- <translation>Valor base</translation>
+ <source>Float</source>
+ <translation>Decimal</translation>
</message>
<message>
- <source>Frequency Multiplier</source>
- <translation>Multiplicador de frequência</translation>
- </message>
-</context>
-<context>
- <name>pluginBrowser</name>
- <message>
- <source>Additive Synthesizer for organ-like sounds</source>
- <translation>Síntetizador de Síntese Aditiva para sons tipo de órgão</translation>
+ <source>Input</source>
+ <translation>Entradas</translation>
</message>
<message>
- <source>Customizable wavetable synthesizer</source>
- <translation>Sintetizador de formas de onda customizáveis</translation>
+ <source>Ports</source>
+ <translation>Portas</translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation>Plugin para utilizar um efeito VST arbitrário dentro do LMMS.</translation>
+ <source>Integer</source>
+ <translation>Inteiro</translation>
</message>
<message>
- <source>2-operator FM Synth</source>
- <translation>Dois Operadores de Síntese FM</translation>
+ <source>SR Dependent</source>
+ <translation>Dependente de SR</translation>
</message>
<message>
- <source>LMMS port of sfxr</source>
- <translation>sfxr para LMMS</translation>
+ <source>Output</source>
+ <translation>Saídas</translation>
</message>
<message>
- <source>Filter for importing Hydrogen files into LMMS</source>
- <translation>Filtro para importação de arquivos do Hydrogen para o LMMS</translation>
+ <source>Min < Default < Max</source>
+ <translation>Min < Padrão < Máx</translation>
</message>
<message>
- <source>Tuneful things to bang on</source>
- <translation>Instrumentos percussivos com afinação para você usar</translation>
+ <source>Direction</source>
+ <translation>Direção</translation>
</message>
<message>
- <source>Player for SoundFont files</source>
- <translation>Tocador de arquivos de SounFont</translation>
+ <source>Logarithmic</source>
+ <translation>Logarítmico</translation>
</message>
<message>
- <source>plugin for boosting bass</source>
- <translation>plugin para estimular graves</translation>
+ <source>Control</source>
+ <translation>Controle</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>três poderosos osciladores que você pode modular de várias maneiras</translation>
+ <source>Toggled</source>
+ <translation>Alternado</translation>
</message>
+</context>
+<context>
+ <name>lb302Synth</name>
<message>
- <source>Instrument browser</source>
- <translation>Navegador de instrumentos</translation>
+ <source>Dead</source>
+ <translation>Morto</translation>
</message>
<message>
- <source>Filter for importing FL Studio projects into LMMS</source>
- <translation>Filtro para importação de projetos do FL Studio para o LMMS</translation>
+ <source>Slide</source>
+ <translation>Gradual</translation>
</message>
<message>
- <source>List installed LADSPA plugins</source>
- <translation>Lista dos plugins LADSPA instalados</translation>
+ <source>VCF Envelope Mod</source>
+ <translation>VCF - Modulação do Envelope</translation>
</message>
<message>
- <source>Plugin for controlling knobs with sound peaks</source>
- <translation>Plugin para controlar botões com os picos sonoros</translation>
+ <source>VCF Resonance</source>
+ <translation>VCF - Ressonância</translation>
</message>
<message>
- <source>Filter for importing MIDI-files into LMMS</source>
- <translation>Filtro para importação de arquivos MIDI para o LMMS</translation>
+ <source>Accent</source>
+ <translation>Realce</translation>
</message>
<message>
- <source>GUS-compatible patch instrument</source>
- <translation>Pré definição de instrumento compatível com GUS (Gravis Ultrasound)</translation>
+ <source>Slide Decay</source>
+ <translation>Decaimento gradual</translation>
</message>
<message>
- <source>Vibrating string modeler</source>
- <translation>Modelador de Cordas vibrantes</translation>
+ <source>VCF Envelope Decay</source>
+ <translation>VCF - Decaimento do Envelope</translation>
</message>
<message>
- <source>Instrument plugins</source>
- <translation>Plugins de Instrumentos</translation>
+ <source>Waveform</source>
+ <translation>Forma de onda</translation>
</message>
<message>
- <source>VST-host for using VST(i)-plugins within LMMS</source>
- <translation>Servidor (host) VST para usar plugins VST(i) com o LMMS</translation>
+ <source>Distortion</source>
+ <translation>Distorção</translation>
</message>
<message>
- <source>Plugin for freely manipulating stereo output</source>
- <translation>Plugin para livre manipulação das saídas estéreo</translation>
+ <source>24dB/oct Filter</source>
+ <translation>Filtro 24dB/oct</translation>
</message>
<message>
- <source>no description</source>
- <translation>sem descrição</translation>
+ <source>VCF Cutoff Frequency</source>
+ <translation>VCF - Frequência de corte</translation>
</message>
+</context>
+<context>
+ <name>lb302SynthView</name>
<message>
- <source>Emulation of the MOS6581 and MOS8580 SID.
-This chip was used in the Commodore 64 computer.</source>
- <translation>Emulação do MOS6581 e do MOS8580 SID.
-Este chip foi utilizado no computador Commodore 64.</translation>
+ <source>DIST:</source>
+ <translation></translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>Tocador de amostras sonoras(sampler) simples com várias opções para uso de amostras (percussão, bateria...) em uma pista de instrumento</translation>
+ <source>Click here for a square-wave with a rounded end.</source>
+ <translation>Clique aqui para usar uma onda quadrada arredondada.</translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation>Sintetizador versátil de bumbos e percussões graves</translation>
+ <source>Slide Decay:</source>
+ <translation>Decaimento gradual:</translation>
</message>
<message>
- <source>Emulation of GameBoy (TM) APU</source>
- <translation>Emulação do GameBoy (TM) APU</translation>
+ <source>Click here for an exponential wave.</source>
+ <translation>Clique aqui para usar uma onda exponencial.</translation>
</message>
<message>
- <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
- <translation>Arraste um instrumento para uma pista existente no Editor de Arranjo ou no Editor de Bases.</translation>
+ <source>White noise wave</source>
+ <translation>Ruído branco</translation>
</message>
<message>
- <source>Incomplete monophonic imitation tb303</source>
- <translation>Imitação monofônica incompleta de tb303</translation>
+ <source>Click here for a saw-wave.</source>
+ <translation>Clique aqui para usar uma onda dente de serra.</translation>
</message>
<message>
- <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
- <translation>plugin para uso de efeitos LADSPA arbitrários dentro do LMMS.</translation>
+ <source>Sine wave</source>
+ <translation>Onda senoidal</translation>
</message>
<message>
- <source>Plugin for enhancing stereo separation of a stereo input file</source>
- <translation>Plugin para melhorar a separação estéreo de um arquivo de entrada estéreo</translation>
+ <source>Click here for white-noise.</source>
+ <translation>Clique aqui para usar um ruído branco.</translation>
</message>
<message>
- <source>Embedded ZynAddSubFX</source>
- <translation>Poderoso sintetizador ZynAddSubFx embutido no LMMS</translation>
+ <source>Decay:</source>
+ <translation>Decaimento:</translation>
</message>
-</context>
-<context>
- <name>AudioFileProcessorView</name>
<message>
- <source>Open other sample</source>
- <translation>Abrir outra amostra</translation>
+ <source>Env Mod:</source>
+ <translation>Mod Env:</translation>
</message>
<message>
- <source>If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.</source>
- <translation>Se você ativar este botão, toda a amostra será invertida. Isto é útil para fazer uns efeitos legais, ex. um ruído elétrico ao contrário.</translation>
+ <source>Moog wave</source>
+ <translation>Onda Moog</translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
- <translation>Continua a tocar a amostra entre as notas</translation>
+ <source>Resonance:</source>
+ <translation>Ressonância:</translation>
</message>
<message>
- <source>Amplify:</source>
- <translation>Amplificar:</translation>
+ <source>Rounded square wave</source>
+ <translation>Onda quadrada arredondada</translation>
</message>
<message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translation>Aqui você pode ativar o modo de loop. Se ativado, loops do AudioFileProcessor entre os pontos final e inicial de uma amostra serão tocados até a nota inteira ser tocada. Isto é útil para amostras de áudio de coisas como um conjunto de cordas ou um coral.</translation>
+ <source>Square wave</source>
+ <translation>Onda quadrada</translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
- <translation>Ativando esta opção a amostra continuará tocando entre diferentes notas - se você mudar a altura, ou o comprimento da nota antes do fim da amostra, a próxima nota irá continuar onde a anterior parou. Para retornar a reprodução a partir do começo, utilize uma nota na parte inferior do teclado (< 20 Hz)</translation>
+ <source>303-es-que, 24dB/octave, 3 pole filter</source>
+ <translation>303-es-que, 24dB/octave, filtro 3 pole</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Com este botão você pode movimentar o ponto onde o AudioFileProcessor deverá começar a tocar sua amostra. Se o modo loop estiver ativado, este é o ponto que o AudioFileProcessor retornará quando o tempo da nota tocada for maior do que o tempo da amostra.</translation>
+ <source>Saw wave</source>
+ <translation>Onda dente de serra</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translation>Amostra em loop do ponto de início ao de fim</translation>
+ <source>Click here for a moog-like wave.</source>
+ <translation>Clique aqui para usar uma onda tipo moog.</translation>
</message>
<message>
- <source>Startpoint:</source>
- <translation>Ponto de início:</translation>
+ <source>Click for a sine-wave.</source>
+ <translation>Clique aqui para usar uma onda senoidal.</translation>
</message>
<message>
- <source>Reverse sample</source>
- <translation>Inverter amostra</translation>
+ <source>Triangle wave</source>
+ <translation>Onda triangular</translation>
</message>
<message>
- <source>Endpoint:</source>
- <translation>Ponto final:</translation>
+ <source>Click here for a square-wave.</source>
+ <translation>Clique aqui para usar uma onda quadrada.</translation>
</message>
<message>
- <source>Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.</source>
- <translation>Clique aqui se você precisa abrir outro arquivo de áudio. O diálogo irá aparecer você puder selecionar seu arquivo. Configurações como modo de loop, ponto de início e de final, valor de amplificação, e todo o resto não serão resetados. Mas não vai mais soar como a amostra original.</translation>
+ <source>Cutoff Freq:</source>
+ <translation>Freq Corte:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Com este botão você pode movimentar o ponto onde o AudioFileProcessor deverá terminar de tocar sua amostra. Se o modo loop estiver ativado, este é o ponto até onde o AudioFileProcessor irá quando o tempo da nota tocada for maior do que o tempo da amostra.</translation>
+ <source>Click here for a triangle-wave.</source>
+ <translation>Clique aqui para usar uma onda triangular.</translation>
</message>
<message>
- <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
- <translation>Bom este botão você pode aumentar a proporção.Quando você coloca um valor de 100% sua amostra não mudará. De outro maneira ela será amplificada para mais ou para menos (o arquivo original da amostra não será modificado!)</translation>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bitInvaderView</name>
<message>
- <source>Draw your own waveform here by dragging your mouse on this graph.</source>
- <translation>Desenhe sua própria forma de onda aqui utilizando seu mouse no gráfico.</translation>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>White noise wave</source>
- <translation>Ruído branco</translation>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to smooth waveform.</source>
- <translation>Clique aqui para suavizar a forma de onda.</translation>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for a saw-wave.</source>
- <translation>Clique aqui para usar uma onda dente de serra.</translation>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sine wave</source>
- <translation>Onda senoidal</translation>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here for white-noise.</source>
- <translation>Clique aqui para usar um ruído branco.</translation>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Smooth</source>
- <translation>Suave</translation>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>lb303Synth</name>
<message>
- <source>Interpolation</source>
- <translation>Interpolação</translation>
+ <source>Dead</source>
+ <translation>Morto</translation>
</message>
<message>
- <source>Square wave</source>
- <translation>Onda quadrada</translation>
+ <source>Slide</source>
+ <translation>Gradual</translation>
</message>
<message>
- <source>Saw wave</source>
- <translation>Onda dente de serra</translation>
+ <source>VCF Envelope Mod</source>
+ <translation>VCF - Modulação do Envelope</translation>
</message>
<message>
- <source>Normalize</source>
- <translation>Normalização</translation>
+ <source>VCF Resonance</source>
+ <translation>VCF - Ressonância</translation>
</message>
<message>
- <source>Click for a sine-wave.</source>
- <translation>Clique aqui para usar uma onda senoidal.</translation>
+ <source>Accent</source>
+ <translation>Realce</translation>
</message>
<message>
- <source>Triangle wave</source>
- <translation>Onda triangular</translation>
+ <source>Slide Decay</source>
+ <translation>Decaimento gradual</translation>
</message>
<message>
- <source>Click here for a square-wave.</source>
- <translation>Clique aqui para usar uma onda quadrada.</translation>
+ <source>VCF Envelope Decay</source>
+ <translation>VCF - Decaimento do Envelope</translation>
</message>
<message>
- <source>User defined wave</source>
- <translation>Onda definida pelo usuário</translation>
+ <source>Waveform</source>
+ <translation>Forma de onda</translation>
</message>
<message>
- <source>Click here for a triangle-wave.</source>
- <translation>Clique aqui para usar uma onda triangular.</translation>
+ <source>Distortion</source>
+ <translation>Distorção</translation>
</message>
<message>
- <source>Sample Length</source>
- <translation>Tamanho da Amostra</translation>
+ <source>24dB/oct Filter</source>
+ <translation>Filtro 24dB/oct</translation>
</message>
<message>
- <source>Click here for a user-defined shape.</source>
- <translation>Clique aqui para usar uma onda definida pelo usuário.</translation>
+ <source>VCF Cutoff Frequency</source>
+ <translation>VCF - Frequência de corte</translation>
</message>
</context>
<context>
- <name>AudioJack</name>
+ <name>lb303SynthView</name>
<message>
- <source>JACK server down</source>
- <translation>O servidor JACK caiu</translation>
+ <source>DEC</source>
+ <translation>DEC</translation>
</message>
<message>
- <source>JACK client restarted</source>
- <translation>Cliente JACK reiniciado</translation>
+ <source>CUT</source>
+ <translation>CORTE</translation>
</message>
<message>
- <source>LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again.</source>
- <translation>LMMS foi chutado pelo JACK por alguma razão. Logo que o JACK restaure a comunicação com o LMMS você poderá precisar fazer as conexões manualmente.</translation>
+ <source>RES</source>
+ <translation>RESS</translation>
</message>
<message>
- <source>The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS.</source>
- <translation>O servidor de áudio JACK parece ter caído e ao reiniciar uma nova instância falhou. De qualquer maneira LMMS é capaz de prosseguir. Certifique-se de salvar seu projeto e reiniciar primeiro o JACK depois o LMMS.</translation>
+ <source>DIST</source>
+ <translation>DIST</translation>
</message>
-</context>
-<context>
- <name>vibed</name>
<message>
- <source>Fuzziness %1 </source>
- <translation>Encrespar %1 </translation>
+ <source>WAVE</source>
+ <translation>ONDA</translation>
</message>
<message>
- <source>Pickup %1 position</source>
- <translation>Super Pegada %1 posição</translation>
+ <source>DIST:</source>
+ <translation>DISTORÇÃO:</translation>
</message>
<message>
- <source>Length %1</source>
- <translation>Tamanho %1</translation>
+ <source>SLIDE</source>
+ <translation>GRADUAL</translation>
</message>
<message>
- <source>Pan %1</source>
- <translation></translation>
+ <source>WAVE:</source>
+ <translation>ONDA:</translation>
</message>
<message>
- <source>String %1 volume</source>
- <translation>Cordas %1 volume</translation>
+ <source>Slide Decay:</source>
+ <translation>Decaimento gradual:</translation>
</message>
<message>
- <source>String %1 stiffness</source>
- <translation>Cordas %1 dureza</translation>
+ <source>Decay:</source>
+ <translation>Decaimento:</translation>
</message>
<message>
- <source>Octave %1</source>
- <translation>Oitava %1</translation>
+ <source>Env Mod:</source>
+ <translation>Mod Env:</translation>
</message>
<message>
- <source>Detune %1</source>
- <translation>Desafinar %1</translation>
+ <source>Resonance:</source>
+ <translation>Ressonância:</translation>
</message>
<message>
- <source>Pick %1 position</source>
- <translation>Pegada %1 posição</translation>
+ <source>303-es-que, 24dB/octave, 3 pole filter</source>
+ <translation>303-es-que, 24dB/octave, filtro 3 pole</translation>
</message>
<message>
- <source>Impulse %1</source>
- <translation>Impulso %1</translation>
+ <source>ENV MOD</source>
+ <translation>MOD ENV</translation>
+ </message>
+ <message>
+ <source>Cutoff Freq:</source>
+ <translation>Freq Corte:</translation>
</message>
</context>
<context>
- <name>SampleBuffer</name>
+ <name>malletsInstrument</name>
<message>
- <source>DrumSynth-Files (*.ds)</source>
- <translation>Arquivos DrumSynth (*.ds)</translation>
+ <source>ADSR</source>
+ <translation>ADSR</translation>
</message>
<message>
- <source>AU-Files (*.au)</source>
- <translation>Arquivos AU (*.au)</translation>
+ <source>Reso</source>
+ <translation>Resso</translation>
</message>
<message>
- <source>Wave-Files (*.wav)</source>
- <translation>Arquivos Wave (*.wav)</translation>
+ <source>Agogo</source>
+ <translation></translation>
</message>
<message>
- <source>Open audio file</source>
- <translation>Abrir arquivo de áudio</translation>
+ <source>Beats</source>
+ <translation>Batidas</translation>
</message>
<message>
- <source>AIFF-Files (*.aif *.aiff)</source>
- <translation>Arquivos AIFF (*.aif *.aiff)</translation>
+ <source>Bowed</source>
+ <translation>De Arco</translation>
</message>
<message>
- <source>RAW-Files (*.raw)</source>
- <translation>Arquivos RAW (*.raw)</translation>
+ <source>Clump</source>
+ <translation></translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation>Arquivos MP3 (*.mp3)</translation>
+ <source>Glass</source>
+ <translation>Taça</translation>
</message>
<message>
- <source>OGG-Files (*.ogg)</source>
- <translation>Arquivos OGG (*.ogg)</translation>
+ <source>Speed</source>
+ <translation>Velocidade</translation>
</message>
<message>
- <source>VOC-Files (*.voc)</source>
- <translation>Arquivos VOC (*.voc)</translation>
+ <source>Wood1</source>
+ <translation>Madeira-1</translation>
</message>
<message>
- <source>FLAC-Files (*.flac)</source>
- <translation>Arquivos FLAC (*.flac)</translation>
+ <source>Wood2</source>
+ <translation>Madeira-2</translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation>Todos os Arquivos de Áudio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
+ <source>Vibrato Freq</source>
+ <translation>Frequência do Vibrato</translation>
</message>
<message>
- <source>SPEEX-Files (*.spx)</source>
- <translation>Arquivos SPEEX (*.spx)</translation>
+ <source>Vibrato Gain</source>
+ <translation>Ganho do Vibrato</translation>
</message>
-</context>
-<context>
- <name>voiceObject</name>
<message>
- <source>Voice %1 release</source>
- <translation>Voz %1 relaxamento</translation>
+ <source>LFO Depth</source>
+ <translation>LFO - Profundidade</translation>
</message>
<message>
- <source>Voice %1 pulse width</source>
- <translation>Voz %1 tamanho do pulso</translation>
+ <source>Two Fixed</source>
+ <translation>Duas Fixas</translation>
</message>
<message>
- <source>Voice %1 wave shape</source>
- <translation>Voz %1 forma da onda</translation>
+ <source>LFO Speed</source>
+ <translation>LFO - Velocidade</translation>
</message>
<message>
- <source>Voice %1 coarse detuning</source>
- <translation>Voz %1 ajuste bruto</translation>
+ <source>Marimba</source>
+ <translation></translation>
</message>
<message>
- <source>Voice %1 sustain</source>
- <translation>Voz %1 sustentação</translation>
+ <source>Tibetan Bowl</source>
+ <translation>Tigelas Tibetanas</translation>
</message>
<message>
- <source>Voice %1 ring modulate</source>
- <translation>Voz %1 modulada em anel</translation>
+ <source>Tuned Bar</source>
+ <translation>Barra Afinada</translation>
</message>
<message>
- <source>Voice %1 sync</source>
- <translation>Voz %1 sincronizada</translation>
+ <source>Motion</source>
+ <translation>Movimento</translation>
</message>
<message>
- <source>Voice %1 test</source>
- <translation>Voz %1 teste</translation>
+ <source>Spread</source>
+ <translation>Propagação</translation>
</message>
<message>
- <source>Voice %1 decay</source>
- <translation>Voz %1 decaimento</translation>
+ <source>Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!</source>
+ <translation>Sua instalação Stk parece estar incompleta. Por favor certifique-se que o pacote Stk (Stk-package) esteja completamente instalado!</translation>
</message>
<message>
- <source>Voice %1 attack</source>
- <translation>Voz %1 ataque</translation>
+ <source>Position</source>
+ <translation>Posição</translation>
</message>
<message>
- <source>Voice %1 filtered</source>
- <translation>Voz %1 filtrada</translation>
+ <source>Crossfade</source>
+ <translation>Transição</translation>
</message>
-</context>
-<context>
- <name>Ui</name>
<message>
- <source>Contributors ordered by number of commits:</source>
- <translation>Colaboradores ordenados por ordem de contribuição:</translation>
+ <source>Uniform Bar</source>
+ <translation>Barra Uniforme</translation>
</message>
<message>
- <source>Involved</source>
- <translation>Envolvidos</translation>
+ <source>Vibraphone</source>
+ <translation>Vibrafone</translation>
</message>
-</context>
-<context>
- <name>fileBrowserTreeWidget</name>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
- <translation>Abrir nova pista de instrumento / Editor de Arranjo</translation>
+ <source>Hardness</source>
+ <translation>Dificuldade</translation>
</message>
<message>
- <source>Loading sample</source>
- <translation>Carregando amostra</translation>
+ <source>Pressure</source>
+ <translation>Pressão</translation>
</message>
<message>
- <source>Send to active instrument-track</source>
- <translation>Envio para ativar pista de instrumento</translation>
+ <source>Modulator</source>
+ <translation>Modulador</translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
- <translation>Por favor espere, carregando a pré visualização da amostra...</translation>
+ <source>Missing files</source>
+ <translation>Arquivos perdidos</translation>
</message>
<message>
- <source>--- Factory files ---</source>
- <translation>--- Arquivos de fábrica ---</translation>
+ <source>Stick Mix</source>
+ <translation>Percussa Mix</translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
- <translation>Abrir nova pista de instrumento / Editor de Bases</translation>
+ <source>Tubular Bells</source>
+ <translation>Sinos Tubulares</translation>
</message>
</context>
<context>
- <name>spectrumAnalyzerControlDialog</name>
+ <name>malletsInstrumentView</name>
<message>
- <source>Linear spectrum</source>
- <translation>Espectro linear</translation>
+ <source>ADSR</source>
+ <translation></translation>
</message>
<message>
- <source>Linear Y axis</source>
- <translation>Linear no eixo Y</translation>
+ <source>ADSR:</source>
+ <translation></translation>
</message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
<message>
- <source>Linear spectrum</source>
- <translation>Espectro linear</translation>
+ <source>Bowed</source>
+ <translation>De Arco</translation>
</message>
<message>
- <source>Linear Y-axis</source>
- <translation>Linear no eixo Y</translation>
+ <source>Speed</source>
+ <translation>Velocidade</translation>
</message>
<message>
- <source>Channel mode</source>
- <translation>Modo de Canal</translation>
+ <source>LFO Depth</source>
+ <translation>Prondudade do LFO</translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Amount Multiplicator</source>
- <translation>Multiplicador de quantidade</translation>
+ <source>LFO Speed</source>
+ <translation>LFO - Velocidade</translation>
</message>
<message>
- <source>Attack</source>
- <translation>Ataque</translation>
+ <source>Vib Gain:</source>
+ <translation>Ganho Vibracional:</translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation>Quantidade de modulação</translation>
+ <source>Vib Freq:</source>
+ <translation>Frequência de Vibração:</translation>
</message>
<message>
- <source>Abs Value</source>
- <translation>Valor Abs</translation>
+ <source>Motion:</source>
+ <translation>Movimento:</translation>
</message>
<message>
- <source>Mute output</source>
- <translation>Deixar saída muda</translation>
+ <source>LFO Depth:</source>
+ <translation>Profundidade do LFO:</translation>
</message>
<message>
- <source>Base value</source>
- <translation>Valor base</translation>
+ <source>Motion</source>
+ <translation>Movimento</translation>
</message>
<message>
- <source>Release</source>
- <translation>Relaxamento</translation>
+ <source>LFO Speed:</source>
+ <translation>Velocidade do LFO:</translation>
</message>
-</context>
-<context>
- <name>vestigeInstrument</name>
<message>
- <source>Loading plugin</source>
- <translation>Carregando plugin</translation>
+ <source>Speed:</source>
+ <translation>Velocidade:</translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation>Por favor, espere enquanto carrego o plugin VST...</translation>
+ <source>Spread</source>
+ <translation>Propagação</translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation>O plugin VST %1 não pode ser carregado por alguma razão.
-Se ele rodar com outro programa VST no Linux, por favor entre em contato com um desenvolvedor do LMMS!</translation>
+ <source>Position</source>
+ <translation>Posição</translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation>Falha ao carregar plugin VST</translation>
+ <source>Crossfade</source>
+ <translation>Transição</translation>
</message>
-</context>
-<context>
- <name>LadspaControlView</name>
<message>
- <source>Sorry, no help available.</source>
- <translation>Desculpe, ajuda indisponível... :(.</translation>
+ <source>Hardness</source>
+ <translation>Dificuldade</translation>
</message>
<message>
- <source>Value:</source>
- <translation>Valor:</translation>
+ <source>Hardness:</source>
+ <translation>Dificuldade:</translation>
</message>
<message>
- <source>Link channels</source>
- <translation>Conectar canais</translation>
+ <source>Pressure</source>
+ <translation>Pressão</translation>
</message>
-</context>
-<context>
- <name>sidInstrument</name>
<message>
- <source>Chip model</source>
- <translation>Modelo do chip</translation>
+ <source>Stick Mix:</source>
+ <translation>Mistura da Percussão:</translation>
</message>
<message>
- <source>Cutoff</source>
- <translation>Corte</translation>
+ <source>Position:</source>
+ <translation>Posição:</translation>
</message>
<message>
- <source>Volume</source>
+ <source>Spread:</source>
+ <translation>Propagação:</translation>
+ </message>
+ <message>
+ <source>Crossfade:</source>
+ <translation>Transição:</translation>
+ </message>
+ <message>
+ <source>Instrument</source>
+ <translation>Instrumento</translation>
+ </message>
+ <message>
+ <source>Modulator</source>
+ <translation>Modulador</translation>
+ </message>
+ <message>
+ <source>Modulator:</source>
+ <translation>Modulador:</translation>
+ </message>
+ <message>
+ <source>Pressure:</source>
+ <translation>Pressão:</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
<translation></translation>
</message>
<message>
- <source>Voice 3 off</source>
- <translation>Voz 3 desligada</translation>
+ <source>Vib Gain</source>
+ <translation>Ganho Vibr</translation>
</message>
<message>
- <source>Resonance</source>
- <translation>Ressonância</translation>
+ <source>Vib Freq</source>
+ <translation>Freq Vibr</translation>
</message>
<message>
- <source>Filter type</source>
- <translation>Tipo de filtro</translation>
+ <source>Vibrato:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Stick Mix</source>
+ <translation>Percussa Mix</translation>
</message>
</context>
<context>
- <name>MidiController</name>
+ <name>manageVSTEffectView</name>
<message>
- <source>unnamed_midi_controller</source>
- <translation>controlador-midi-sem-nome</translation>
+ <source> Close </source>
+ <translation> Fechar </translation>
</message>
<message>
- <source>MIDI Controller</source>
- <translation>Controlador MIDI</translation>
+ <source>VST Sync</source>
+ <translation>Sincronização VST</translation>
</message>
-</context>
-<context>
- <name>SampleTrack</name>
<message>
- <source>Sample track</source>
- <translation>Áudio Amostras</translation>
+ <source>Click here if you want to synchronize all parameters with VST plugin.</source>
+ <translation>Clique aqui para sincronizar todos os parâmetros com o plugin VST.</translation>
</message>
<message>
- <source>Volume</source>
- <translation>Volume</translation>
+ <source>Automated</source>
+ <translation>Automatizado</translation>
</message>
-</context>
-<context>
- <name>AutomatableModel</name>
<message>
- <source>Connected to %1</source>
- <translation>Conectado a %1</translation>
+ <source>Click here if you want to display automated parameters only.</source>
+ <translation>Clique aqui para exibir somente os parâmetros automatizados.</translation>
</message>
<message>
- <source>Remove song-global automation</source>
- <translation>Apagar automação global da música</translation>
+ <source>Close VST effect knob-controller window.</source>
+ <translation>Fechar janela de botões de controle do efeito VST.</translation>
</message>
<message>
- <source>Edit connection...</source>
- <translation>Editar conexão...</translation>
+ <source> - VST parameter control</source>
+ <translation> - Controle de parâmetros de VST's</translation>
</message>
+</context>
+<context>
+ <name>manageVestigeInstrumentView</name>
<message>
- <source>&Copy value (%1%2)</source>
- <translation>&Copiar valor (%1%2)</translation>
+ <source> - VST plugin control</source>
+ <translation> - Controle de plugins VST</translation>
</message>
<message>
- <source>Remove connection</source>
- <translation>Apagar conexão</translation>
+ <source> Close </source>
+ <translation> Fechar </translation>
</message>
<message>
- <source>&Reset (%1%2)</source>
- <translation>&Resetar (%1%2)</translation>
+ <source>Close VST plugin knob-controller window.</source>
+ <translation>Fechar janela de botões de controle do efeito VST.</translation>
</message>
<message>
- <source>Connected to controller</source>
- <translation>Conectado ao controlador</translation>
+ <source>VST Sync</source>
+ <translation>Sincronização VST</translation>
</message>
<message>
- <source>Edit song-global automation</source>
- <translation>Editar automação global da música</translation>
+ <source>Click here if you want to synchronize all parameters with VST plugin.</source>
+ <translation>Clique aqui para sincronizar todos os parâmetros com o plugin VST.</translation>
</message>
<message>
- <source>Connect to controller...</source>
- <translation>Conectado ao controlador...</translation>
+ <source>Automated</source>
+ <translation>Automatizado</translation>
</message>
<message>
- <source>Remove all linked controls</source>
- <translation>Apagar todos os controles linkados</translation>
+ <source>Click here if you want to display automated parameters only.</source>
+ <translation>Clique aqui para exibir somente os parâmetros automatizados.</translation>
</message>
+</context>
+<context>
+ <name>nineButtonSelector</name>
<message>
- <source>&Paste value (%1%2)</source>
- <translation>C&olar valor (%1%2)</translation>
+ <source>&Help</source>
+ <translation>Aj&uda</translation>
</message>
</context>
<context>
- <name>AudioJack::setupWidget</name>
+ <name>opl2instrument</name>
<message>
- <source>CLIENT-NAME</source>
- <translation>NOME-DO-CLIENTE</translation>
+ <source>FM</source>
+ <translation></translation>
</message>
<message>
- <source>CHANNELS</source>
- <translation>CANAIS</translation>
+ <source>Patch</source>
+ <translation>Programação</translation>
</message>
-</context>
-<context>
- <name>MidiImport</name>
<message>
- <source>You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again.</source>
- <translation>Você não configurou um banco de sons (soundfont) padrão na caixa de diálogo (Editar->Opções). Desta maneira nenhum som será tocado depois de importar um arquivo MIDI. Você pode baixar o banco de sons General MIDI soundfont dentro da caixa de diálogo de opções e tentar novamente.</translation>
+ <source>Op 1 Key Scaling Rate</source>
+ <translation>Op 1 Mudança de Tom da Escala</translation>
</message>
<message>
- <source>You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file.</source>
- <translation>Você não compilou o LMMS com suporte a SoundFont2 player, que é usado para adicionar sons por padrão a arquivos MIDI importados. Desta maneira nenhum som será executado depois de importar arquivos MIDI.</translation>
+ <source>Op 2 Key Scaling Rate</source>
+ <translation>Op 2 Mudança de Tom da Escala</translation>
</message>
<message>
- <source>Setup incomplete</source>
- <translation>Configuração incompleta</translation>
+ <source>Op 1 Decay</source>
+ <translation>Op 1 Decaimento</translation>
</message>
-</context>
-<context>
- <name>ZynAddSubFxInstrument</name>
<message>
- <source>Resonance Center Frequency</source>
- <translation>Frequência Central de Ressonância</translation>
+ <source>Op 1 Level</source>
+ <translation>Op 1 Nível</translation>
</message>
<message>
- <source>Filter Resonance</source>
- <translation>Ressonância do Filtro</translation>
+ <source>Op 2 Decay</source>
+ <translation>Op 2 Decaimento</translation>
</message>
<message>
- <source>Bandwidth</source>
- <translation>Largura da Banda</translation>
+ <source>Op 2 Level</source>
+ <translation>Op 2 Nível</translation>
</message>
<message>
- <source>Filter Frequency</source>
- <translation>Frequência do Filtro</translation>
+ <source>Op 1 Attack</source>
+ <translation>Op 1 Ataque</translation>
</message>
<message>
- <source>Resonance Bandwidth</source>
- <translation>Banda de Ressonância</translation>
+ <source>Op 2 Attack</source>
+ <translation>Op 2 Ataque</translation>
</message>
<message>
- <source>Forward MIDI Control Change Events</source>
- <translation>Próximo evento de mudança de controle MIDI</translation>
+ <source>Op 1 Vibrato</source>
+ <translation></translation>
</message>
<message>
- <source>Portamento</source>
+ <source>Op 2 Vibrato</source>
<translation></translation>
</message>
<message>
- <source>FM Gain</source>
- <translation>Ganho da FM</translation>
+ <source>Tremolo Depth</source>
+ <translation>Profundidade do Tremolo</translation>
</message>
-</context>
-<context>
- <name>MidiPort</name>
<message>
- <source>Receive MIDI-events</source>
- <translation>Receber eventos MIDI</translation>
+ <source>Op 2 Frequency Multiple</source>
+ <translation>Op 2 Múltiplo da frequência</translation>
</message>
<message>
- <source>Output MIDI program</source>
- <translation>Saída do programa MIDI</translation>
+ <source>Op 1 Frequency Multiple</source>
+ <translation>Op 1 Múltiplo da frequência</translation>
</message>
<message>
- <source>Output channel</source>
- <translation>Canal de saída</translation>
+ <source>Op 1 Feedback</source>
+ <translation>Op 1 Resposta</translation>
</message>
<message>
- <source>Send MIDI-events</source>
- <translation>Enviar eventos MIDI</translation>
+ <source>Vibrato Depth</source>
+ <translation>Profundidade do Vibrato</translation>
</message>
<message>
- <source>Output controller</source>
- <translation>Saída do controlador</translation>
+ <source>Op 1 Release</source>
+ <translation>Op 1 Relaxamento</translation>
</message>
<message>
- <source>Input controller</source>
- <translation>Entrada do controlador</translation>
+ <source>Op 2 Release</source>
+ <translation>Op 2 Relaxamento</translation>
</message>
<message>
- <source>Input channel</source>
- <translation>Canal de entrada</translation>
+ <source>Op 1 Level Scaling</source>
+ <translation>Op 1 Nível Escalar</translation>
</message>
<message>
- <source>Fixed output note</source>
- <translation>Nota fixa na saída</translation>
+ <source>Op 2 Level Scaling</source>
+ <translation>Op 2 Nível Escalar</translation>
</message>
<message>
- <source>Fixed input velocity</source>
- <translation>Intensidade fixa de entrada</translation>
+ <source>Op 2 Percussive Envelope</source>
+ <translation>Op 2 Envelope Percussivo</translation>
</message>
<message>
- <source>Fixed output velocity</source>
- <translation>Intensidade fixa de saída</translation>
+ <source>Op 1 Percussive Envelope</source>
+ <translation>Op 1 Envelope Percussivo</translation>
</message>
-</context>
-<context>
- <name>MeterModel</name>
<message>
- <source>Numerator</source>
- <translation>Numerador</translation>
+ <source>Op 2 Waveform</source>
+ <translation>Op 2 Forma de Onda</translation>
</message>
<message>
- <source>Denominator</source>
- <translation>Denominador</translation>
+ <source>Op 1 Waveform</source>
+ <translation>Op 1 Forma de Onda</translation>
</message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
<message>
- <source>Freezing pattern...</source>
- <translation>Congelando padrão...</translation>
+ <source>Op 2 Tremolo</source>
+ <translation>Op 2 Relaxamento</translation>
</message>
<message>
- <source>Cancel</source>
- <translation>Cancelar</translation>
+ <source>Op 1 Tremolo</source>
+ <translation></translation>
</message>
-</context>
-<context>
- <name>pattern</name>
<message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>O padrão atualmente não pode ser congelado porque você está no modo tocar (play-mode). Por favor pare e tente novamente!</translation>
+ <source>Op 2 Sustain</source>
+ <translation>Op 2 Sustentação</translation>
</message>
<message>
- <source>Cannot freeze pattern</source>
- <translation>Não é possível congelar padrão</translation>
+ <source>Op 1 Sustain</source>
+ <translation>Op 1 Sustentação</translation>
</message>
</context>
<context>
- <name>ProjectRenderer</name>
+ <name>organicInstrument</name>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation>Arquivo OGG compactado (*.ogg)</translation>
+ <source>Volume</source>
+ <translation></translation>
</message>
<message>
- <source>WAV-File (*.wav)</source>
- <translation>Arquivo WAV (*.wav)</translation>
+ <source>Distortion</source>
+ <translation>Distorção</translation>
</message>
</context>
<context>
- <name>renameDialog</name>
+ <name>organicInstrumentView</name>
<message>
- <source>Rename...</source>
- <translation>Renomear...</translation>
+ <source>cents</source>
+ <translation>centésimos</translation>
</message>
-</context>
-<context>
- <name>AudioAlsa::setupWidget</name>
<message>
- <source>DEVICE</source>
- <translation>DISPOSITIVO</translation>
+ <source>Osc %1 panning:</source>
+ <translation>Panorâmico Osc %1:</translation>
</message>
<message>
- <source>CHANNELS</source>
- <translation>CANAIS</translation>
+ <source>Randomise</source>
+ <translation>Aleatorizar</translation>
</message>
-</context>
-<context>
- <name>AudioOss::setupWidget</name>
<message>
- <source>DEVICE</source>
- <translation>DISPOSITIVO</translation>
+ <source>Osc %1 volume:</source>
+ <translation>Volume Osc %1:</translation>
</message>
<message>
- <source>CHANNELS</source>
- <translation>CANAIS</translation>
+ <source>Distortion:</source>
+ <translation>Distorção:</translation>
</message>
-</context>
-<context>
- <name>AudioPortAudio::setupWidget</name>
<message>
- <source>DEVICE</source>
- <translation>DISPOSITIVO</translation>
+ <source>Volume:</source>
+ <translation></translation>
</message>
<message>
- <source>BACKEND</source>
- <translation>BACKEND</translation>
+ <source>Osc %1 waveform:</source>
+ <translation>Forma de Onda Osc %1:</translation>
</message>
-</context>
-<context>
- <name>AudioPulseAudio::setupWidget</name>
<message>
- <source>DEVICE</source>
- <translation>DISPOSITIVO</translation>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>CHANNELS</source>
- <translation>CANAIS</translation>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>AudioSdl::setupWidget</name>
<message>
- <source>DEVICE</source>
- <translation>DISPOSITIVO</translation>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>MidiAlsaRaw::setupWidget</name>
<message>
- <source>DEVICE</source>
- <translation>DISPOSITIVO</translation>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>MidiAlsaSeq::setupWidget</name>
<message>
- <source>DEVICE</source>
- <translation>DISPOSITIVO</translation>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>MidiOss::setupWidget</name>
+ <name>papuInstrument</name>
<message>
- <source>DEVICE</source>
- <translation>DISPOSITIVO</translation>
+ <source>Bass</source>
+ <translation>Grave</translation>
</message>
-</context>
-<context>
- <name>manageVSTEffectView</name>
<message>
- <source> Close </source>
- <translation> Fechar </translation>
+ <source>Shift Register width</source>
+ <translation>Desconsiderar Tamanho do registro</translation>
</message>
<message>
- <source>VST Sync</source>
- <translation>Sincronização VST</translation>
+ <source>Sweep RtShift amount</source>
+ <translation>Quantidade da varredura RtShift</translation>
</message>
<message>
- <source>Click here if you want to synchronize all parameters with VST plugin.</source>
- <translation>Clique aqui para sincronizar todos os parâmetros com o plugin VST.</translation>
+ <source>Channel 1 volume</source>
+ <translation>Canal 1 volume</translation>
</message>
<message>
- <source>Automated</source>
- <translation>Automatizado</translation>
+ <source>Channel 4 volume</source>
+ <translation>Canal 4 volume</translation>
</message>
<message>
- <source>Click here if you want to display automated parameters only.</source>
- <translation>Clique aqui para exibir somente os parâmetros automatizados.</translation>
+ <source>Channel 3 volume</source>
+ <translation>Canal 3 volume</translation>
</message>
<message>
- <source>Close VST effect knob-controller window.</source>
- <translation>Fechar janela de botões de controle do efeito VST.</translation>
+ <source>Channel 2 volume</source>
+ <translation>Canal 2 volume</translation>
</message>
<message>
- <source> - VST parameter control</source>
- <translation> - Controle de parâmetros de VST's</translation>
+ <source>Length of each step in sweep</source>
+ <translation>Tamanho de cada passo na varredura</translation>
</message>
-</context>
-<context>
- <name>LadspaEffect</name>
<message>
- <source>Effect</source>
- <translation>Efeito</translation>
+ <source>Left Output level</source>
+ <translation>Nível de Saída Esquerdo</translation>
</message>
<message>
- <source>Unknown LADSPA plugin %1 requested.</source>
- <translation>Plugin LADSPA %1 desconhecido requisitado.</translation>
+ <source>Sweep direction</source>
+ <translation>Direção da varredura</translation>
</message>
-</context>
-<context>
- <name>stereoMatrixControlDialog</name>
<message>
- <source>Left to Left Vol:</source>
- <translation>Esq para Esq Vol:</translation>
+ <source>Channel 4 to SO1 (Right)</source>
+ <translation>Canal 4 para SO1 (Direita)</translation>
</message>
<message>
- <source>Right to Right Vol:</source>
- <translation>Dir para Dir Vol:</translation>
+ <source>Channel 3 to SO1 (Right)</source>
+ <translation>Canal 3 para SO1 (Direita)</translation>
</message>
<message>
- <source>Right to Left Vol:</source>
- <translation>Dir para Esq Vol:</translation>
+ <source>Channel 2 to SO1 (Right)</source>
+ <translation>Canal 2 para SO1 (Direita)</translation>
</message>
<message>
- <source>Left to Right Vol:</source>
- <translation>Esq para Dir Vol:</translation>
+ <source>Channel 1 to SO1 (Right)</source>
+ <translation>Canal 1 para SO1 (Direita)</translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Error while loading plugin</source>
- <translation>Erro ao carregar plugin</translation>
+ <source>Right Output level</source>
+ <translation>Nível de Saída Direito</translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
- <translation>Falha ao carregar o plugin "%1"!</translation>
+ <source>Treble</source>
+ <translation>Agudo</translation>
</message>
<message>
- <source>Plugin not found</source>
- <translation>Plugin não encontrado</translation>
+ <source>Sweep time</source>
+ <translation>Varredura temporal</translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
- <translation>O plugin "%1" não pode ser carregado!
-Motivo: "%2"</translation>
+ <source>Channel 4 to SO2 (Left)</source>
+ <translation>Canal 4 para SO2 (Esquerda)</translation>
</message>
-</context>
-<context>
- <name>organicInstrument</name>
<message>
- <source>Volume</source>
- <translation></translation>
+ <source>Channel 3 to SO2 (Left)</source>
+ <translation>Canal 3 para SO2 (Esquerda)</translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Distorção</translation>
+ <source>Channel 2 to SO2 (Left)</source>
+ <translation>Canal 2 para SO2 (Esquerda)</translation>
</message>
-</context>
-<context>
- <name>bbTrack</name>
<message>
- <source>Beat/Bassline %1</source>
- <translation>Base %1</translation>
+ <source>Channel 1 to SO2 (Left)</source>
+ <translation>Canal 1 para SO2 (Esquerda)</translation>
</message>
<message>
- <source>Clone of %1</source>
- <translation>Clone de %1</translation>
+ <source>Wave Pattern Duty</source>
+ <translation>Trabalho da Frente de Onda</translation>
+ </message>
+ <message>
+ <source>Volume sweep direction</source>
+ <translation>Direção da varredura de volume</translation>
</message>
</context>
<context>
- <name>PeakController</name>
+ <name>papuInstrumentView</name>
<message>
- <source>Peak Controller Bug</source>
- <translation>Problema no Controlador de Picos</translation>
+ <source>Bass</source>
+ <translation>Grave</translation>
</message>
<message>
- <source>Peak Controller</source>
- <translation>Controlador de Picos</translation>
+ <source>Wave pattern duty</source>
+ <translation>Trabalho da frente de onda</translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
- <translation>Devido a um problema na versão mais antiga do LMMS, os controladores de pico não pode se conectar corretamente. Certifique-se de que os controladores de pico estão conectados corretamente e volte a salvar este arquivo. Desculpe por qualquer inconveniente causado.</translation>
+ <source>Bass:</source>
+ <translation>Grave:</translation>
</message>
-</context>
-<context>
- <name>AutomationTrack</name>
<message>
- <source>Automation track</source>
- <translation>Pista de Automação</translation>
+ <source>Shift Register Width</source>
+ <translation>Desconsiderar Tamanho do registro</translation>
</message>
-</context>
-<context>
- <name>EffectRackView</name>
<message>
- <source>Add effect</source>
- <translation>Adicionar Efeito</translation>
+ <source>Wave Channel Volume</source>
+ <translation>Canal da Onda - Volume</translation>
</message>
<message>
- <source>EFFECTS CHAIN</source>
- <translation>CADEIA DE EFEITOS</translation>
+ <source>Sweep Time:</source>
+ <translation>Varredura temporal:</translation>
</message>
-</context>
-<context>
- <name>EffectSelectDialog</name>
<message>
- <source>Add effect</source>
- <translation>Adicionar Efeito</translation>
+ <source>Draw the wave here</source>
+ <translation>Desenhe a onda aqui</translation>
</message>
<message>
- <source>Plugin description</source>
- <translation>Descrição do plugin</translation>
+ <source>Sweep RtShift amount</source>
+ <translation>Quantidade da varredura RtShift</translation>
</message>
-</context>
-<context>
- <name>visualizationWidget</name>
<message>
- <source>click to enable/disable visualization of master-output</source>
- <translation>Clique para habilitar/desabilitar a visualização da saída final</translation>
+ <source>Channel1 to SO2 (Left)</source>
+ <translation>Canal 1 para SO2 (Esquerda)</translation>
</message>
<message>
- <source>Click to enable</source>
- <translation>Clique para habilitar</translation>
+ <source>Channel3 to SO2 (Left)</source>
+ <translation>Canal 3 para SO2 (Esquerda)</translation>
</message>
-</context>
-<context>
- <name>ladspaDescription</name>
<message>
- <source>Plugins</source>
- <translation>Plugins</translation>
+ <source>Channel2 to SO2 (Left)</source>
+ <translation>Canal 2 para SO2 (Esquerda)</translation>
</message>
<message>
- <source>Description</source>
- <translation>Descrição</translation>
+ <source>Channel4 to SO2 (Left)</source>
+ <translation>Canal 4 para SO2 (Esquerda)</translation>
</message>
-</context>
-<context>
- <name>MeterDialog</name>
<message>
- <source>Meter Denominator</source>
- <translation>Denominador Métrico</translation>
+ <source>Length of each step in sweep</source>
+ <translation>Tamanho de cada passo na varredura</translation>
</message>
<message>
- <source>Meter Numerator</source>
- <translation>Numerador Métrico</translation>
+ <source>Wave pattern duty:</source>
+ <translation>Trabalho da Frente de Onda:</translation>
</message>
<message>
- <source>TIME SIG</source>
- <translation>COMPASSO</translation>
+ <source>Wave Pattern</source>
+ <translation>Frente de onda</translation>
+ </message>
+ <message>
+ <source>SO1 Volume (Right):</source>
+ <translation>SO1 Volume (Esquerdo):</translation>
+ </message>
+ <message>
+ <source>Sweep Direction</source>
+ <translation>Direção da varredura</translation>
+ </message>
+ <message>
+ <source>The amount of increase or decrease in frequency</source>
+ <translation>A quantidade de acréscimo e decréscimo em frequência</translation>
+ </message>
+ <message>
+ <source>The delay between step change</source>
+ <translation>O atraso entre cada passo de mudança</translation>
+ </message>
+ <message>
+ <source>Treble</source>
+ <translation>Agudo</translation>
+ </message>
+ <message>
+ <source>Noise Channel Volume:</source>
+ <translation>Canal de Ruído - Volume:</translation>
+ </message>
+ <message>
+ <source>The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.</source>
+ <translation>O ciclo de trabalho é a razão da duração (tempo) do sinal LIGADO versus o total do período do sinal.</translation>
+ </message>
+ <message>
+ <source>Sweep RtShift amount:</source>
+ <translation>Quantidade da varredura RtShift:</translation>
+ </message>
+ <message>
+ <source>Channel1 to SO1 (Right)</source>
+ <translation>Canal 1 para SO1 (Direita)</translation>
+ </message>
+ <message>
+ <source>Channel3 to SO1 (Right)</source>
+ <translation>Canal 3 para SO1 (Direita)</translation>
+ </message>
+ <message>
+ <source>Channel2 to SO1 (Right)</source>
+ <translation>Canal 2 para SO1 (Direita)</translation>
+ </message>
+ <message>
+ <source>Channel4 to SO1 (Right)</source>
+ <translation>Canal 4 para SO1 (Direita)</translation>
+ </message>
+ <message>
+ <source>Square Channel 1 Volume</source>
+ <translation>Canal 1 Volume</translation>
+ </message>
+ <message>
+ <source>Square Channel 2 Volume</source>
+ <translation>Canal 2 Volume</translation>
+ </message>
+ <message>
+ <source>Square Channel 1 Volume:</source>
+ <translation>Canal 1 Volume:</translation>
+ </message>
+ <message>
+ <source>Square Channel 2 Volume:</source>
+ <translation>Canal 2 Volume:</translation>
+ </message>
+ <message>
+ <source>Treble:</source>
+ <translation>Agudo:</translation>
+ </message>
+ <message>
+ <source>Sweep Time</source>
+ <translation>Varredura temporal</translation>
+ </message>
+ <message>
+ <source>SO1 Volume (Right)</source>
+ <translation>SO1 Volume (Esquerdo)</translation>
+ </message>
+ <message>
+ <source>Length of each step in sweep:</source>
+ <translation>Tamanho de cada passo na varredura:</translation>
+ </message>
+ <message>
+ <source>Noise Channel Volume</source>
+ <translation>Canal de Ruído - Volume</translation>
+ </message>
+ <message>
+ <source>Wave Channel Volume:</source>
+ <translation>Canal da Onda - Volume:</translation>
+ </message>
+ <message>
+ <source>Wave Pattern Duty</source>
+ <translation>Trabalho da Frente de Onda</translation>
+ </message>
+ <message>
+ <source>SO2 Volume (Left):</source>
+ <translation>SO2 Volume (Direito):</translation>
+ </message>
+ <message>
+ <source>Volume Sweep Direction</source>
+ <translation>Direção da varredura de volume</translation>
+ </message>
+ <message>
+ <source>The rate at which increase or decrease in frequency occurs</source>
+ <translation>A taxa na qual cresce ou decresce a frequência</translation>
+ </message>
+ <message>
+ <source>SO2 Volume (Left)</source>
+ <translation>SO2 Volume (Direito)</translation>
+ </message>
+</context>
+<context>
+ <name>pluginBrowser</name>
+ <message>
+ <source>Additive Synthesizer for organ-like sounds</source>
+ <translation>Síntetizador de Síntese Aditiva para sons tipo de órgão</translation>
+ </message>
+ <message>
+ <source>Customizable wavetable synthesizer</source>
+ <translation>Sintetizador de formas de onda customizáveis</translation>
+ </message>
+ <message>
+ <source>2-operator FM Synth</source>
+ <translation>Dois Operadores de Síntese FM</translation>
+ </message>
+ <message>
+ <source>LMMS port of sfxr</source>
+ <translation>sfxr para LMMS</translation>
+ </message>
+ <message>
+ <source>Filter for importing Hydrogen files into LMMS</source>
+ <translation>Filtro para importação de arquivos do Hydrogen para o LMMS</translation>
+ </message>
+ <message>
+ <source>Tuneful things to bang on</source>
+ <translation>Instrumentos percussivos com afinação para você usar</translation>
+ </message>
+ <message>
+ <source>Player for SoundFont files</source>
+ <translation>Tocador de arquivos de SounFont</translation>
+ </message>
+ <message>
+ <source>Instrument browser</source>
+ <translation>Navegador de instrumentos</translation>
+ </message>
+ <message>
+ <source>Filter for importing FL Studio projects into LMMS</source>
+ <translation>Filtro para importação de projetos do FL Studio para o LMMS</translation>
+ </message>
+ <message>
+ <source>List installed LADSPA plugins</source>
+ <translation>Lista dos plugins LADSPA instalados</translation>
+ </message>
+ <message>
+ <source>Plugin for controlling knobs with sound peaks</source>
+ <translation>Plugin para controlar botões com os picos sonoros</translation>
+ </message>
+ <message>
+ <source>Filter for importing MIDI-files into LMMS</source>
+ <translation>Filtro para importação de arquivos MIDI para o LMMS</translation>
+ </message>
+ <message>
+ <source>GUS-compatible patch instrument</source>
+ <translation>Pré definição de instrumento compatível com GUS (Gravis Ultrasound)</translation>
+ </message>
+ <message>
+ <source>Vibrating string modeler</source>
+ <translation>Modelador de Cordas vibrantes</translation>
+ </message>
+ <message>
+ <source>Instrument plugins</source>
+ <translation>Plugins de Instrumentos</translation>
+ </message>
+ <message>
+ <source>VST-host for using VST(i)-plugins within LMMS</source>
+ <translation>Servidor (host) VST para usar plugins VST(i) com o LMMS</translation>
+ </message>
+ <message>
+ <source>Plugin for freely manipulating stereo output</source>
+ <translation>Plugin para livre manipulação das saídas estéreo</translation>
+ </message>
+ <message>
+ <source>no description</source>
+ <translation>sem descrição</translation>
+ </message>
+ <message>
+ <source>Emulation of the MOS6581 and MOS8580 SID.
+This chip was used in the Commodore 64 computer.</source>
+ <translation>Emulação do MOS6581 e do MOS8580 SID.
+Este chip foi utilizado no computador Commodore 64.</translation>
+ </message>
+ <message>
+ <source>Emulation of GameBoy (TM) APU</source>
+ <translation>Emulação do GameBoy (TM) APU</translation>
+ </message>
+ <message>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <translation>Arraste um instrumento para uma pista existente no Editor de Arranjo ou no Editor de Bases.</translation>
+ </message>
+ <message>
+ <source>Incomplete monophonic imitation tb303</source>
+ <translation>Imitação monofônica incompleta de tb303</translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
+ <translation>plugin para uso de efeitos LADSPA arbitrários dentro do LMMS.</translation>
+ </message>
+ <message>
+ <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <translation>Plugin para melhorar a separação estéreo de um arquivo de entrada estéreo</translation>
+ </message>
+ <message>
+ <source>Embedded ZynAddSubFX</source>
+ <translation>Poderoso sintetizador ZynAddSubFx embutido no LMMS</translation>
+ </message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>projectNotes</name>
+ <message>
+ <source>Cu&t</source>
+ <translation>Recor&tar</translation>
+ </message>
+ <message>
+ <source>&Bold</source>
+ <translation>&Negrito</translation>
+ </message>
+ <message>
+ <source>&Copy</source>
+ <translation>&Copiar</translation>
+ </message>
+ <message>
+ <source>&Left</source>
+ <translation>&Esquerda</translation>
+ </message>
+ <message>
+ <source>&Redo</source>
+ <translation>&Refazer</translation>
+ </message>
+ <message>
+ <source>&Undo</source>
+ <translation>Des&fazer</translation>
+ </message>
+ <message>
+ <source>Format Actions</source>
+ <translation>Ações de formatação</translation>
+ </message>
+ <message>
+ <source>&Justify</source>
+ <translation>&Justificar</translation>
+ </message>
+ <message>
+ <source>Project notes</source>
+ <translation>Notas do projeto</translation>
+ </message>
+ <message>
+ <source>&Paste</source>
+ <translation>C&olar</translation>
+ </message>
+ <message>
+ <source>&Right</source>
+ <translation>Di&reita</translation>
+ </message>
+ <message>
+ <source>Edit Actions</source>
+ <translation>Ações de edição</translation>
+ </message>
+ <message>
+ <source>Ctrl+B</source>
+ <translation>Ctrl+B</translation>
+ </message>
+ <message>
+ <source>Ctrl+C</source>
+ <translation>Ctrl+C</translation>
+ </message>
+ <message>
+ <source>Ctrl+E</source>
+ <translation>Ctrl+E</translation>
+ </message>
+ <message>
+ <source>Ctrl+I</source>
+ <translation>Ctrl+I</translation>
+ </message>
+ <message>
+ <source>Ctrl+J</source>
+ <translation>Ctrl+J</translation>
+ </message>
+ <message>
+ <source>Ctrl+L</source>
+ <translation>Ctrl+L</translation>
+ </message>
+ <message>
+ <source>Ctrl+R</source>
+ <translation>Ctrl+R</translation>
+ </message>
+ <message>
+ <source>Ctrl+U</source>
+ <translation>Ctrl+U</translation>
+ </message>
+ <message>
+ <source>Ctrl+V</source>
+ <translation>Ctrl+V</translation>
+ </message>
+ <message>
+ <source>Ctrl+X</source>
+ <translation>Ctrl+X</translation>
+ </message>
+ <message>
+ <source>Ctrl+Y</source>
+ <translation>Ctrl+Y</translation>
+ </message>
+ <message>
+ <source>Ctrl+Z</source>
+ <translation>Ctrl+Z</translation>
+ </message>
+ <message>
+ <source>Put down your project notes here.</source>
+ <translation>Faça suas anotações aqui.</translation>
+ </message>
+ <message>
+ <source>C&enter</source>
+ <translation>C&entro</translation>
+ </message>
+ <message>
+ <source>&Color...</source>
+ <translation>&Cor...</translation>
+ </message>
+ <message>
+ <source>&Underline</source>
+ <translation>S&ublinhado</translation>
+ </message>
+ <message>
+ <source>&Italic</source>
+ <translation>&Itálico</translation>
+ </message>
+</context>
+<context>
+ <name>renameDialog</name>
+ <message>
+ <source>Rename...</source>
+ <translation>Renomear...</translation>
+ </message>
+</context>
+<context>
+ <name>setupDialog</name>
+ <message>
+ <source>OK</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <source>MISC</source>
+ <translation>VÁRIOS</translation>
+ </message>
+ <message>
+ <source>General settings</source>
+ <translation>Opções gerais</translation>
+ </message>
+ <message>
+ <source>AUDIO INTERFACE</source>
+ <translation>INTERFACE DE ÁUDIO</translation>
+ </message>
+ <message>
+ <source>Paths</source>
+ <translation>Locais</translation>
+ </message>
+ <message>
+ <source>Performance settings</source>
+ <translation>Opções de desempenho</translation>
+ </message>
+ <message>
+ <source>Choose background artwork</source>
+ <translation>Escolher Papel de Parede do LMMS</translation>
+ </message>
+ <message>
+ <source>FL Studio installation directory</source>
+ <translation>Pasta de instalação do FL Studio</translation>
+ </message>
+ <message>
+ <source>Enable waveform display by default</source>
+ <translation>Habilitar visualizador de forma de onda por padrão</translation>
+ </message>
+ <message>
+ <source>Reset to default-value</source>
+ <translation>Restaurar o valor padrão</translation>
+ </message>
+ <message>
+ <source>One instrument track window mode</source>
+ <translation>Modo janela com uma pista de instrumento</translation>
+ </message>
+ <message>
+ <source>Choose LADSPA plugin directory</source>
+ <translation>Escolher a pasta com os plugins LADSPA</translation>
+ </message>
+ <message>
+ <source>LMMS working directory</source>
+ <translation>Pasta de trabalho do LMMS</translation>
+ </message>
+ <message>
+ <source>Choose default SoundFont</source>
+ <translation>Escolher SoundFont padrão</translation>
+ </message>
+ <message>
+ <source>Please note that most changes won't take effect until you restart LMMS!</source>
+ <translation>Por favor note que a maioria das mudanças não terão efeito antes de reiniciar o LMMS!</translation>
+ </message>
+ <message>
+ <source>Enable tooltips</source>
+ <translation>Habilitar dicas</translation>
+ </message>
+ <message>
+ <source>Show restart warning after changing settings</source>
+ <translation>Mostrar aviso de reinicialização depois de mudança de configuração</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>Smooth scroll in Song Editor</source>
+ <translation>Rolagem suave no Editor de Arranjo</translation>
+ </message>
+ <message>
+ <source>Frames: %1
+Latency: %2 ms</source>
+ <translation>Amostras: %1
+Latência: %2 ms</translation>
+ </message>
+ <message>
+ <source>MIDI INTERFACE</source>
+ <translation>INTERFACE DO MIDI</translation>
+ </message>
+ <message>
+ <source>Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel.</source>
+ <translation>Aqui você pode ajustar o tamanho do buffer interno usado pelo LMMS. Valores menores resultam em menor latência (atraso ao usar as teclas ou um controlador midi) mas podem provocar sons não desejados como plocs e bips ou má performance, esses problemas acontecem especialmente em computadores antigos ou sistema com kernel não compilado para trabalhar com processamento em tempo real.</translation>
+ </message>
+ <message>
+ <source>Background artwork</source>
+ <translation>Papel de parede</translation>
+ </message>
+ <message>
+ <source>Compact track buttons</source>
+ <translation>Botões de pista compactos</translation>
+ </message>
+ <message>
+ <source>Choose FL Studio installation directory</source>
+ <translation>Escolher a pasta de instalação do FL Studio</translation>
+ </message>
+ <message>
+ <source>Audio settings</source>
+ <translation>Configurações de Áudio</translation>
+ </message>
+ <message>
+ <source>UI effects vs. performance</source>
+ <translation>Efeitos Visuais X Desempenho</translation>
+ </message>
+ <message>
+ <source>LADSPA plugin paths</source>
+ <translation>Locais de plugins LADSPA</translation>
+ </message>
+ <message>
+ <source>Choose artwork-theme directory</source>
+ <translation>Escolher a pasta com Temas para LMMS</translation>
+ </message>
+ <message>
+ <source>Show playback cursor in AudioFileProcessor</source>
+ <translation>Mostrar o cursor de reprodução dentro do AudioFileProcessor</translation>
+ </message>
+ <message>
+ <source>Enable auto save feature</source>
+ <translation>Habilitar a função de salvamento automático</translation>
+ </message>
+ <message>
+ <source>Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface.</source>
+ <translation>Aqui você pode selecionar sua interface de áudio preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, JACK, OSS e outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de áudio selecionada.</translation>
+ </message>
+ <message>
+ <source>Compress project files per default</source>
+ <translation>Sempre compactar arquivos de projeto</translation>
+ </message>
+ <message>
+ <source>HQ-mode for output audio-device</source>
+ <translation>Modo de Alta Qualidade para a Saída do dispositivo de áudio</translation>
+ </message>
+ <message>
+ <source>BUFFER SIZE</source>
+ <translation>TAMANHO DO BUFFER</translation>
+ </message>
+ <message>
+ <source>Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface.</source>
+ <translation>Aqui você pode selecionar sua interface de MIDI preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, OSS entre outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de MIDI selecionada.</translation>
+ </message>
+ <message>
+ <source>Display volume as dBV </source>
+ <translation>Mostrar volume em dBV</translation>
+ </message>
+ <message>
+ <source>Choose STK rawwave directory</source>
+ <translation>Escolher a pasta de STK rawwave</translation>
+ </message>
+ <message>
+ <source>Default Soundfont File</source>
+ <translation>Arquivo padrão de Soundfont</translation>
+ </message>
+ <message>
+ <source>Sync VST plugins to host playback</source>
+ <translation>Sincronizar plugins VST no hospedeiro (host) de reprodução</translation>
+ </message>
+ <message>
+ <source>Setup LMMS</source>
+ <translation>Configurar LMMS</translation>
+ </message>
+ <message>
+ <source>Choose your VST-plugin directory</source>
+ <translation>Escolher a pasta com plugins VST</translation>
+ </message>
+ <message>
+ <source>Choose LMMS working directory</source>
+ <translation>Escolher a pasta de trabalho do LMMS</translation>
+ </message>
+ <message>
+ <source>Restart LMMS</source>
+ <translation>Reiniciar LMMS</translation>
+ </message>
+ <message>
+ <source>STK rawwave directory</source>
+ <translation>Pasta de STK rawwave</translation>
+ </message>
+ <message>
+ <source>VST-plugin directory</source>
+ <translation>Pasta com plugins VST</translation>
+ </message>
+ <message>
+ <source>MIDI settings</source>
+ <translation>Configurações do MIDI</translation>
+ </message>
+ <message>
+ <source>Artwork directory</source>
+ <translation>Pasta com Temas para LMMS</translation>
+ </message>
+ <message>
+ <source>Enable note labels in piano roll</source>
+ <translation>Habilitar camadas de notas no editor de notas MIDI</translation>
+ </message>
+</context>
+<context>
+ <name>sf2Instrument</name>
+ <message>
+ <source>Bank</source>
+ <translation>Banco</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>Ganho</translation>
+ </message>
+ <message>
+ <source>Patch</source>
+ <translation>Programação</translation>
+ </message>
+ <message>
+ <source>Chorus Speed</source>
+ <translation>Velocidade do Chorus</translation>
+ </message>
+ <message>
+ <source>Reverb Width</source>
+ <translation>Tamanho da Reverberação</translation>
+ </message>
+ <message>
+ <source>Chorus Depth</source>
+ <translation>Profundidade do Chorus</translation>
+ </message>
+ <message>
+ <source>Reverb Level</source>
+ <translation>Nível de Reverberação</translation>
+ </message>
+ <message>
+ <source>Chorus Level</source>
+ <translation>Nível de Chorus</translation>
+ </message>
+ <message>
+ <source>Chorus Lines</source>
+ <translation>Linhas de Chorus</translation>
+ </message>
+ <message>
+ <source>Chorus</source>
+ <translation>Chorus</translation>
+ </message>
+ <message>
+ <source>Reverb</source>
+ <translation>Reverberação</translation>
+ </message>
+ <message>
+ <source>Reverb Damping</source>
+ <translation>Absorção da Reverberação</translation>
+ </message>
+ <message>
+ <source>Reverb Roomsize</source>
+ <translation>Tamanho da sala em Reverberação</translation>
+ </message>
+</context>
+<context>
+ <name>sf2InstrumentView</name>
+ <message>
+ <source>Gain</source>
+ <translation>Ganho</translation>
+ </message>
+ <message>
+ <source>This button enables the reverb effect. This is useful for cool effects, but only works on files that support it.</source>
+ <translation>Este botão ativa o efeito de reverberação. Ele é útil para efeitos legais, mas só funciona se o arquivo tiver suporte a ele.</translation>
+ </message>
+ <message>
+ <source>This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.</source>
+ <translation>Este botão ativa o efeito de chorus. Ele é útil para efeitos de eco legais, mas só funciona se o arquivo tiver suporte a ele.</translation>
+ </message>
+ <message>
+ <source>Click here to open another SF2 file</source>
+ <translation>Clique aqui para abrir outro arquivo SF2</translation>
+ </message>
+ <message>
+ <source>Choose the patch</source>
+ <translation>Escolher o patch</translation>
+ </message>
+ <message>
+ <source>SoundFont2 Files (*.sf2)</source>
+ <translation>Arquivos SoundFont2 (*sf2)</translation>
+ </message>
+ <message>
+ <source>Apply reverb (if supported)</source>
+ <translation>Aplicar reverberação (se suportado)</translation>
+ </message>
+ <message>
+ <source>Open SoundFont file</source>
+ <translation>Abrir o arquivo SoundFont</translation>
+ </message>
+ <message>
+ <source>Apply chorus (if supported)</source>
+ <translation>Aplicar chorus (se suportado)</translation>
+ </message>
+ <message>
+ <source>Reverb Roomsize:</source>
+ <translation>Tamanho da sala em Reverbaração:</translation>
+ </message>
+ <message>
+ <source>Chorus Speed:</source>
+ <translation>Velocidade do Chorus:</translation>
+ </message>
+ <message>
+ <source>Reverb Damping:</source>
+ <translation>Absorção da Reverberação:</translation>
+ </message>
+ <message>
+ <source>Reverb Width:</source>
+ <translation>Tamanho da Reverberação:</translation>
+ </message>
+ <message>
+ <source>Chorus Depth:</source>
+ <translation>Profundidade do Chorus:</translation>
+ </message>
+ <message>
+ <source>Reverb Level:</source>
+ <translation>Nível de Reverberação:</translation>
+ </message>
+ <message>
+ <source>Chorus Level:</source>
+ <translation>Nível de Chorus:</translation>
+ </message>
+ <message>
+ <source>Chorus Lines:</source>
+ <translation>Linhas de Chorus:</translation>
+ </message>
+ <message>
+ <source>Open other SoundFont file</source>
+ <translation>Abrir outro arquivo SoundFont</translation>
+ </message>
+</context>
+<context>
+ <name>sfxrInstrument</name>
+ <message>
+ <source>Wave Form</source>
+ <translation>Forma de Onda</translation>
+ </message>
+</context>
+<context>
+ <name>sidInstrument</name>
+ <message>
+ <source>Chip model</source>
+ <translation>Modelo do chip</translation>
+ </message>
+ <message>
+ <source>Cutoff</source>
+ <translation>Corte</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Voice 3 off</source>
+ <translation>Voz 3 desligada</translation>
+ </message>
+ <message>
+ <source>Resonance</source>
+ <translation>Ressonância</translation>
+ </message>
+ <message>
+ <source>Filter type</source>
+ <translation>Tipo de filtro</translation>
+ </message>
+</context>
+<context>
+ <name>sidInstrumentView</name>
+ <message>
+ <source>Test</source>
+ <translation>Teste</translation>
+ </message>
+ <message>
+ <source>Sync</source>
+ <translation>Sincronização</translation>
+ </message>
+ <message>
+ <source>Filtered</source>
+ <translation>Filtrado</translation>
+ </message>
+ <message>
+ <source>Ring-Mod</source>
+ <translation>Modulação em Anel</translation>
+ </message>
+ <message>
+ <source>Noise</source>
+ <translation>Ruído</translation>
+ </message>
+ <message>
+ <source>Pulse Width:</source>
+ <translation>Tamanho do Pulso:</translation>
+ </message>
+ <message>
+ <source>Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.</source>
+ <translation>O Decaimento determina o quão rápido a saída vai cair do pico de amplitude até o nível de sustentação.</translation>
+ </message>
+ <message>
+ <source>Cutoff frequency:</source>
+ <translation>Frequência de corte:</translation>
+ </message>
+ <message>
+ <source>Decay:</source>
+ <translation>Decaimento:</translation>
+ </message>
+ <message>
+ <source>Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.</source>
+ <translation>A saída da Voz %1 irá permanecer no nível de Sustentação enquanto a nota estiver acionada.</translation>
+ </message>
+ <message>
+ <source>Resonance:</source>
+ <translation>Ressonância:</translation>
+ </message>
+ <message>
+ <source>Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.</source>
+ <translation>Mod em Anel (Modulação em Anel) substitui a saída da Onda Triangular do Oscilador %1 com a "Modulada em Anel" da combinação entre os Osciladores %1 e %2.</translation>
+ </message>
+ <message>
+ <source>Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.</source>
+ <translation>A taxa de ataque determina o quão rápido a saída da Voz %1 sai do zaro para o pico de amplitude.</translation>
+ </message>
+ <message>
+ <source>Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.</source>
+ <translation>A sincronização sincroniza a frequência fundamental do Oscilador %1 com a frequência fundamental do Oscilador %2 produzindo um efeito de "Super Sincronização".</translation>
+ </message>
+ <message>
+ <source>Voice3 Off </source>
+ <translation>Voz3 Desligada </translation>
+ </message>
+ <message>
+ <source>Test, when set, resets and locks Oscillator %1 at zero until Test is turned off.</source>
+ <translation>Quando o Teste está ativado, ele restaura e trava o Oscilador %1 até o Teste ser desligado.</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation>Ataque:</translation>
+ </message>
+ <message>
+ <source>SawTooth</source>
+ <translation>Dente de Serra</translation>
+ </message>
+ <message>
+ <source>Pulse Wave</source>
+ <translation>Onda de Pulso</translation>
+ </message>
+ <message>
+ <source>When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.</source>
+ <translation>Quando o Filtrado está ligado, a Voz %1 será processada através do Filtro. Quando o Filtrado está desligado, a Voz %1 aparecerá diretamente na saída e o Filtro não terá efeito.</translation>
+ </message>
+ <message>
+ <source>Triangle Wave</source>
+ <translation>Onda Triangular</translation>
+ </message>
+ <message>
+ <source>Coarse:</source>
+ <translation>Ajuste Bruto:</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation>Relaxamento:</translation>
+ </message>
+ <message>
+ <source>Sustain:</source>
+ <translation>Sustentação:</translation>
+ </message>
+ <message>
+ <source>The Coarse detuning allows to detune Voice %1 one octave up or down.</source>
+ <translation>O Ajuste bruto permite que você ajuste a Voz %1 em uma oitava ou mais.</translation>
+ </message>
+ <message>
+ <source>The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.</source>
+ <translation>A resolução de Tamanho do Pulso permite que os movimentos sejam suaves de modo que não sejam percebidas mudanças bruscas. O Pulso da forma de onda em um Oscilador %1 pode ser selecionado para existir um efeito audível.</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.</source>
+ <translation>A saída da Voz %1 irá da amplitude do nível Sustentação até a amplitude zero na razão selecionada no Relaxamento.</translation>
+ </message>
+ <message>
+ <source>MOS8580 SID </source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>MOS6581 SID </source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Low-Pass filter </source>
+ <translation>Filtro Passa Baixa </translation>
+ </message>
+ <message>
+ <source>Band-Pass filter </source>
+ <translation>Filtro Passa Banda </translation>
+ </message>
+ <message>
+ <source>High-Pass filter </source>
+ <translation>Filtro Passa Alta </translation>
+ </message>
+</context>
+<context>
+ <name>song</name>
+ <message>
+ <source>Tempo</source>
+ <translation>Andamento</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation>Altura Final</translation>
+ </message>
+ <message>
+ <source>Project saved</source>
+ <translation>Projeto salvo</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>Volume Final</translation>
+ </message>
+ <message>
+ <source>This project is empty so exporting makes no sense. Please put some items into Song Editor first!</source>
+ <translation>Este projeto está vazio, então exportá-lo não faz sentido. Por favor, coloque alguns itens dentro do Editor de Arranjo primeiro!</translation>
+ </message>
+ <message>
+ <source>MIDI sequences</source>
+ <translation>Sequências MIDI</translation>
+ </message>
+ <message>
+ <source>All file types</source>
+ <translation>Todos os tipos de arquivo</translation>
+ </message>
+ <message>
+ <source>untitled</source>
+ <translation>sem nome</translation>
+ </message>
+ <message>
+ <source>Select file for project-export...</source>
+ <translation>Selecione o arquivo para exportar o projeto...</translation>
+ </message>
+ <message>
+ <source>FL Studio projects</source>
+ <translation>Projetos do FL Studio</translation>
+ </message>
+ <message>
+ <source>Project NOT saved.</source>
+ <translation>Projeto NÃO salvo.</translation>
+ </message>
+ <message>
+ <source>Import file</source>
+ <translation>Importar arquivo</translation>
+ </message>
+ <message>
+ <source>The project %1 is now saved.</source>
+ <translation>O projeto %1 está salvo agora.</translation>
+ </message>
+ <message>
+ <source>Select directory for writing exported tracks...</source>
+ <translation>Selecionar pasta para escrita de pistas renderizadas...</translation>
+ </message>
+ <message>
+ <source>Empty project</source>
+ <translation>Projeto vazio</translation>
+ </message>
+ <message>
+ <source>The project %1 was not saved!</source>
+ <translation>O projeto %1 não foi salvo!</translation>
+ </message>
+ <message>
+ <source>Hydrogen projects</source>
+ <translation>Projetos do Hydrogen</translation>
+ </message>
+</context>
+<context>
+ <name>stereoEnhancerControlDialog</name>
+ <message>
+ <source>WIDE</source>
+ <translation>ABRIR</translation>
+ </message>
+ <message>
+ <source>Width:</source>
+ <translation>Largura:</translation>
+ </message>
+</context>
+<context>
+ <name>stereoEnhancerControls</name>
+ <message>
+ <source>Width</source>
+ <translation>Largura</translation>
+ </message>
+</context>
+<context>
+ <name>stereoMatrixControlDialog</name>
+ <message>
+ <source>Left to Left Vol:</source>
+ <translation>Esq para Esq Vol:</translation>
+ </message>
+ <message>
+ <source>Right to Right Vol:</source>
+ <translation>Dir para Dir Vol:</translation>
+ </message>
+ <message>
+ <source>Right to Left Vol:</source>
+ <translation>Dir para Esq Vol:</translation>
+ </message>
+ <message>
+ <source>Left to Right Vol:</source>
+ <translation>Esq para Dir Vol:</translation>
+ </message>
+</context>
+<context>
+ <name>stereoMatrixControls</name>
+ <message>
+ <source>Left to Left</source>
+ <translation>Esq para Esq</translation>
+ </message>
+ <message>
+ <source>Left to Right</source>
+ <translation>Esq para Dir</translation>
+ </message>
+ <message>
+ <source>Right to Left</source>
+ <translation>Dir para Esq</translation>
+ </message>
+ <message>
+ <source>Right to Right</source>
+ <translation>Dir para Dir</translation>
+ </message>
+</context>
+<context>
+ <name>timeLine</name>
+ <message>
+ <source>Hint</source>
+ <translation>Sugestão</translation>
+ </message>
+ <message>
+ <source>After stopping go back to begin</source>
+ <translation>Quando parar volta para o começo</translation>
+ </message>
+ <message>
+ <source>Press <Ctrl> to disable magnetic loop points.</source>
+ <translation>Pressione <Ctrl> para desabilitar os pontos de loop magnéticos.</translation>
+ </message>
+ <message>
+ <source>Enable/disable auto-scrolling</source>
+ <translation>Ativa/desativa auto-rolagem</translation>
+ </message>
+ <message>
+ <source>After stopping go back to position at which playing was started</source>
+ <translation>Quando parar volta para a posição que estava quando começou a tocar</translation>
+ </message>
+ <message>
+ <source>Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points.</source>
+ <translation>Pressione <Shift> para mover o começo do ponto de loop; Pressione <Ctrl> para desabilitar os pontos de loop magnéticos.</translation>
+ </message>
+ <message>
+ <source>After stopping keep position</source>
+ <translation>Quando parar mantém a posição</translation>
+ </message>
+ <message>
+ <source>Enable/disable loop-points</source>
+ <translation>Ativa/desativa pontos de loop</translation>
+ </message>
+</context>
+<context>
+ <name>track</name>
+ <message>
+ <source>Solo</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Muted</source>
+ <translation>Mudo</translation>
+ </message>
+</context>
+<context>
+ <name>trackContentObject</name>
+ <message>
+ <source>Muted</source>
+ <translation>Mudo</translation>
+ </message>
+</context>
+<context>
+ <name>trackContentObjectView</name>
+ <message>
+ <source>Cut</source>
+ <translation>Recortar</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>Copiar</translation>
+ </message>
+ <message>
+ <source>Hint</source>
+ <translation>Sugestão</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>Colar</translation>
+ </message>
+ <message>
+ <source>Press <Ctrl> for free resizing.</source>
+ <translation>Pressione <Ctrl> para redimensionar livremente.</translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation>Apagar (botão do meio do mouse)</translation>
+ </message>
+ <message>
+ <source>Press <Ctrl> and drag to make a copy.</source>
+ <translation>Pressione <Ctrl> e arraste para fazer uma cópia.</translation>
+ </message>
+ <message>
+ <source>%1:%2 (%3:%4 to %5:%6)</source>
+ <translation>%1:%2 (%3:%4 até %5:%6)</translation>
+ </message>
+ <message>
+ <source>Current length</source>
+ <translation>Tamanho atual</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation>Mudo/não mudo (<Ctrl> + botão do meio)</translation>
+ </message>
+ <message>
+ <source>Current position</source>
+ <translation>Posição atual</translation>
+ </message>
+</context>
+<context>
+ <name>trackOperationsWidget</name>
+ <message>
+ <source>Mute</source>
+ <translation>Mudo</translation>
+ </message>
+ <message>
+ <source>Solo</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Clone this track</source>
+ <translation>Clonar esta pista</translation>
+ </message>
+ <message>
+ <source>Actions for this track</source>
+ <translation>Ações para esta pista</translation>
+ </message>
+ <message>
+ <source>Remove this track</source>
+ <translation>Remover esta pista</translation>
+ </message>
+ <message>
+ <source>Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action.</source>
+ <translation>Pressione <Ctrl> enquanto clica em mover-grip para o começo, uma ação de arrastar.</translation>
+ </message>
+ <message>
+ <source>Mute this track</source>
+ <translation>Deixar esta pista muda</translation>
+ </message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>vestigeInstrument</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation>Carregando plugin</translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST-plugin...</source>
+ <translation>Por favor, espere enquanto carrego o plugin VST...</translation>
+ </message>
+ <message>
+ <source>The VST-plugin %1 could not be loaded for some reason.
+If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
+ <translation>O plugin VST %1 não pode ser carregado por alguma razão.
+Se ele rodar com outro programa VST no Linux, por favor entre em contato com um desenvolvedor do LMMS!</translation>
+ </message>
+ <message>
+ <source>Failed loading VST-plugin</source>
+ <translation>Falha ao carregar plugin VST</translation>
+ </message>
+</context>
+<context>
+ <name>vibed</name>
+ <message>
+ <source>Fuzziness %1 </source>
+ <translation>Encrespar %1 </translation>
+ </message>
+ <message>
+ <source>Pickup %1 position</source>
+ <translation>Super Pegada %1 posição</translation>
+ </message>
+ <message>
+ <source>Length %1</source>
+ <translation>Tamanho %1</translation>
+ </message>
+ <message>
+ <source>Pan %1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>String %1 volume</source>
+ <translation>Cordas %1 volume</translation>
+ </message>
+ <message>
+ <source>String %1 stiffness</source>
+ <translation>Cordas %1 dureza</translation>
+ </message>
+ <message>
+ <source>Octave %1</source>
+ <translation>Oitava %1</translation>
+ </message>
+ <message>
+ <source>Detune %1</source>
+ <translation>Desafinar %1</translation>
+ </message>
+ <message>
+ <source>Pick %1 position</source>
+ <translation>Pegada %1 posição</translation>
+ </message>
+ <message>
+ <source>Impulse %1</source>
+ <translation>Impulso %1</translation>
+ </message>
+</context>
+<context>
+ <name>vibedView</name>
+ <message>
+ <source>Pan:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>Aj&uda</translation>
+ </message>
+ <message>
+ <source>The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental.</source>
+ <translation>O seletor "Octave" é usado para escolher que harmônico da nota na corda irá soar mais. Por exemplo, "-2" significa que a corda vibrará duas oitavas abaixo da Fundamental, "F" significa que a corda vibrará na frequência Fundamental e "6" significa que a corda vai vibrar 6 oitavas acima da fundamental.</translation>
+ </message>
+ <message>
+ <source>Impulse Editor</source>
+ <translation>Editor de Impulso</translation>
+ </message>
+ <message>
+ <source>Fuzziness:</source>
+ <translation>Encrespando: </translation>
+ </message>
+ <message>
+ <source>The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles.</source>
+ <translation>O botão de tamanho modifica o tamanho da corda escolhida. Cordas longas resultam em vibrações longas aliadas a um brilho no som, o porém é que isto ocupa muito processamento da CPU.</translation>
+ </message>
+ <message>
+ <source>The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring.</source>
+ <translation>O botão "S" modifica a dureza da corda selecionada. A dureza da corda interfere no quão longa é a vibração da corda. Quanto menor o valor mais a corda vai soar.</translation>
+ </message>
+ <message>
+ <source>Length:</source>
+ <translation>Tamanho:</translation>
+ </message>
+ <message>
+ <source>The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active.</source>
+ <translation>O seletor de Corda é usado para escolher que corda os controles estarão editando. O instrumento Vibed pode conter até nove cordas vibrando independentemente. O LED no canto direito inferior do editor de forma de onda indica que a corda selecionada está ativa.</translation>
+ </message>
+ <message>
+ <source>White noise wave</source>
+ <translation>Ruído branco</translation>
+ </message>
+ <message>
+ <source>Click here to smooth waveform.</source>
+ <translation>Clique aqui para suavizar a forma de onda.</translation>
+ </message>
+ <message>
+ <source>Use a square-wave for current oscillator.</source>
+ <translation>Use uma onda quadrada no oscilador atual.</translation>
+ </message>
+ <message>
+ <source>The 'V' knob sets the volume of the selected string.</source>
+ <translation>O botão "V" modifica o volume da corda selecionada.</translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation>Onda senoidal</translation>
+ </message>
+ <message>
+ <source>Click here to enable/disable waveform.</source>
+ <translation>Clique aqui para habilitar/desabilitar forma de onda.</translation>
+ </message>
+ <message>
+ <source>Octave</source>
+ <translation>Oitava</translation>
</message>
-</context>
-<context>
- <name>EffectChain</name>
<message>
- <source>Effects enabled</source>
- <translation>Efeitos ativados</translation>
+ <source>The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge.</source>
+ <translation>O botão "P" modifica a posição onde a corda será "pinçada". Valores baixos significam que a corda será pinçada perto da ponte.</translation>
</message>
-</context>
-<context>
- <name>Controller</name>
<message>
- <source>Controller %1</source>
- <translation>Controlador %1</translation>
+ <source>Smooth</source>
+ <translation>Suavizar</translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
- <translation>Nota base</translation>
+ <source>String</source>
+ <translation>Corda</translation>
</message>
-</context>
-<context>
- <name>fileBrowser</name>
<message>
- <source>Browser</source>
- <translation>Pastas</translation>
+ <source>The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'.</source>
+ <translation>O botão "Slap" deixa mais "crespo" o som da corda escolhida que é mais aparente na duração do ataque (como a técnica de puxar a corda de um contrabaixo ou um violão chamada slap), embora possa ser usada também para deixar o som mais "metálico".</translation>
</message>
-</context>
-<context>
- <name>TimeDisplayWidget</name>
<message>
- <source>click to change time units</source>
- <translation>clique para mudar as unidades de tempo</translation>
+ <source>The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded.
+
+The waveform can also be drawn in the graph.
+
+The 'S' button will smooth the waveform.
+
+The 'N' button will normalize the waveform.</source>
+ <translation>O editor de forma de onda proporciona controle sobre o estado inicial, ou impulso, usado no início da vibração da corda. Os botões ao lado direito do gráfico irão inicializar o tipo de forma de onda selecionada. O botão "?" ira carregar uma forma de onda de um arquivo (somente as primeiras 128 amostras serão carregadas).
+
+A forma de onda também pode ser desenhada no gráfico.
+
+O botão "S" irá suavizar a forma de onda.
+
+O botão "N" ira normalizar a forma de onda.</translation>
</message>
-</context>
-<context>
- <name>fader</name>
<message>
- <source>Please enter a new value between %1 and %2:</source>
- <translation>Por favor entre com um novo valor entre %1 e %2:</translation>
+ <source>The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge.</source>
+ <translation>O botão "PU" modifica a posição onde as vibrações serão captadas na corda selecionada. Valores baixos significam que o captador está mais próximo à ponte.</translation>
</message>
-</context>
-<context>
- <name>AudioFileProcessorWaveView</name>
<message>
- <source>Sample length:</source>
- <translation>Tamanho da amostra:</translation>
+ <source>Pick position:</source>
+ <translation>Escolher pinçada:</translation>
</message>
-</context>
-<context>
- <name>sfxrInstrument</name>
<message>
- <source>Wave Form</source>
- <translation>Forma de Onda</translation>
+ <source>The Pan knob determines the location of the selected string in the stereo field.</source>
+ <translation>O botão de Pan determina a localização da corda selecionada o campo estereofônico.</translation>
+ </message>
+ <message>
+ <source>String stiffness:</source>
+ <translation>Dureza da corda:</translation>
+ </message>
+ <message>
+ <source>Square wave</source>
+ <translation>Onda quadrada</translation>
+ </message>
+ <message>
+ <source>Saw wave</source>
+ <translation>Onda dente de serra</translation>
+ </message>
+ <message>
+ <source>Normalize</source>
+ <translation>Normalizar</translation>
+ </message>
+ <message>
+ <source>Click here to normalize waveform.</source>
+ <translation>Clique aqui para normalizar a forma de onda.</translation>
+ </message>
+ <message>
+ <source>Use a saw-wave for current oscillator.</source>
+ <translation>Use uma onda dente de serra no oscilador atual.</translation>
+ </message>
+ <message>
+ <source>Use white-noise for current oscillator.</source>
+ <translation>Use ruído branco no oscilador atual.</translation>
+ </message>
+ <message>
+ <source>Triangle wave</source>
+ <translation>Onda triangular</translation>
+ </message>
+ <message>
+ <source>Impulse or initial state</source>
+ <translation>Impulso ou estado inicial</translation>
+ </message>
+ <message>
+ <source>Detune:</source>
+ <translation>Desafinar:</translation>
+ </message>
+ <message>
+ <source>Use a sine-wave for current oscillator.</source>
+ <translation>Use uma onda senoidal no oscilador atual.</translation>
+ </message>
+ <message>
+ <source>Pickup position:</source>
+ <translation>Posição do captador:</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>User defined wave</source>
+ <translation>Onda definida pelo usuário</translation>
+ </message>
+ <message>
+ <source>Use a user-defined waveform for current oscillator.</source>
+ <translation>Use uma forma de onda definida pelo usuário no oscilador atual.</translation>
+ </message>
+ <message>
+ <source>Use a triangle-wave for current oscillator.</source>
+ <translation>Use uma onda triangular no oscilador atual.</translation>
+ </message>
+ <message>
+ <source>The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp.</source>
+ <translation>O botão "Detune" modifica a altura da corda escolhida. Valores menores do que zero quase não afetarão o som da corda. Valores bem maiores do que zero farão o som ficar mais agudo.</translation>
+ </message>
+ <message>
+ <source>Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at.
+
+The graph allows you to control the initial state or impulse used to set the string in motion.
+
+The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position.
+
+'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string.
+
+The 'Length' knob controls the length of the string.
+
+The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument.</source>
+ <translation>Vibed modela independentemente a vibração de até 8 cordas. O seletor "String" (Corda) permite escolher qual corda será editada. O seletor "Imp" escolhe qual dos gráficos representará o impulso no estado inicial da corda. O seletor "Octave" (Oitava) permite escolher qual harmônico da corda deverá vibrar.
+
+O gráfico permite que você controle o estado inicial, ou impulso, usado para definir o movimento da corda.
+
+O botão "V" controla o volume. O botão "S" controla a dureza da corda. O botão "P" controla a posição de pinçagem da corda. Já o botão "PU" controla a posição do captador.
+
+O botão "Pan" posiciona o som no lado esquerdo ou direito, enquanto o botão "Detune" (Desafinar) permite modificar a afinação em termos de altura. Automatizar este botão permite criar glissandos bem interessantes! O botão "Slap" pode dar uma característica mais metálica ao som da corda.
+
+O botão "Tamanho" controla o tamanho da corda.
+
+O LED no canto direito inferior do editor de forma de onda determina que a corda está ativa no presente instrumento.</translation>
+ </message>
+ <message>
+ <source>The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string.</source>
+ <translation>O seletor "Imp" determina como a forma de onda no gráfico será manipulada como um impulso comunicado à corda pela pinçada ou pelo estado inicial da corda.</translation>
+ </message>
+ <message>
+ <source>Enable waveform</source>
+ <translation>Habilitar forma de onda</translation>
</message>
</context>
<context>
- <name>VersionedSaveDialog</name>
+ <name>visualizationWidget</name>
<message>
- <source>Increment version number</source>
- <translation>Incrementar número da versão</translation>
+ <source>click to enable/disable visualization of master-output</source>
+ <translation>Clique para habilitar/desabilitar a visualização da saída final</translation>
</message>
<message>
- <source>Decrement version number</source>
- <translation>Decrementar número da versão</translation>
+ <source>Click to enable</source>
+ <translation>Clique para habilitar</translation>
</message>
</context>
<context>
- <name>LadspaControl</name>
+ <name>voiceObject</name>
<message>
- <source>Link channels</source>
- <translation>Conectar canais</translation>
+ <source>Voice %1 release</source>
+ <translation>Voz %1 relaxamento</translation>
+ </message>
+ <message>
+ <source>Voice %1 pulse width</source>
+ <translation>Voz %1 tamanho do pulso</translation>
+ </message>
+ <message>
+ <source>Voice %1 wave shape</source>
+ <translation>Voz %1 forma da onda</translation>
+ </message>
+ <message>
+ <source>Voice %1 coarse detuning</source>
+ <translation>Voz %1 ajuste bruto</translation>
+ </message>
+ <message>
+ <source>Voice %1 sustain</source>
+ <translation>Voz %1 sustentação</translation>
+ </message>
+ <message>
+ <source>Voice %1 ring modulate</source>
+ <translation>Voz %1 modulada em anel</translation>
+ </message>
+ <message>
+ <source>Voice %1 sync</source>
+ <translation>Voz %1 sincronizada</translation>
+ </message>
+ <message>
+ <source>Voice %1 test</source>
+ <translation>Voz %1 teste</translation>
+ </message>
+ <message>
+ <source>Voice %1 decay</source>
+ <translation>Voz %1 decaimento</translation>
+ </message>
+ <message>
+ <source>Voice %1 attack</source>
+ <translation>Voz %1 ataque</translation>
+ </message>
+ <message>
+ <source>Voice %1 filtered</source>
+ <translation>Voz %1 filtrada</translation>
</message>
</context>
<context>
- <name>LadspaControlDialog</name>
+ <name>waveShaperControlDialog</name>
<message>
- <source>Link Channels</source>
- <translation>Conectar Canais</translation>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Channel </source>
- <translation>Canal</translation>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>bitInvader</name>
+ <name>waveShaperControls</name>
<message>
- <source>Samplelength</source>
- <translation>Tamanho de amostra</translation>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
</message>
</context>
</TS>
diff --git a/data/locale/ru.qm b/data/locale/ru.qm
index bf450fb..31e56c3 100644
Binary files a/data/locale/ru.qm and b/data/locale/ru.qm differ
diff --git a/data/locale/ru.ts b/data/locale/ru.ts
index d56f753..3fcec00 100644
--- a/data/locale/ru.ts
+++ b/data/locale/ru.ts
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.1" language="ru_RU">
+<TS version="2.0" language="ru_RU">
<context>
<name>AboutDialog</name>
<message>
@@ -9,11 +9,6 @@
<translation>О программе LMMS</translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translatorcomment>Линукс-МультиМедия-Студия</translatorcomment>
- <translation>LMMS (Линукс-МультиМедийная-Студия)</translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation>Версия %1 (%2/%3, Qt %4, %5)</translation>
</message>
@@ -50,9 +45,67 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Правообладатели (c) 2004-2014, LMMS-разработчики</translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
<translation><html><head/><body><p><a href="http://lmms.sf.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sf.net</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished">ЛММС</translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">ГРОМ</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">Громкость:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished">БАЛ</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Громкость</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioAlsa::setupWidget</name>
@@ -85,16 +138,6 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Если включить эту кнопку, вся запись пойдёт в обратную сторону, это удобно для крутых эффектов, типа обратного грохота.</translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
- <translatorcomment>Постоянно воспроизводить </translatorcomment>
- <translation>Закольцевать запись между начальной и конечной точками</translation>
- </message>
- <message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
- <translatorcomment>Здесь вы можете указать, следует ли повторять звук при достижении конца файла. Если включено, то AudioFileProcessor будет повторять часть звука между начальной и конечной точками. Это может быть полезным для чего-нибудь вроде струнных или образцов аккордов.</translatorcomment>
- <translation>Здесь можно установить режим кольца, когда он включен, процессор закольцует звук между начальной и конечной точками сэмпла (записи), пока длится нота. Это может быть полезно для каких-нибудь струнных или хоровых звуков.</translation>
- </message>
- <message>
<source>Amplify:</source>
<translation>Усиление:</translation>
</message>
@@ -107,18 +150,10 @@ If you're interested in translating LMMS in another language or want to imp
<translation>Начало:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Эта ручка устанавливает точку, с которой будет начинаться воспроизведение записи. При включённом повторе модуль воспроизведения будет возвращаться к этой точке, если нота длительней части записи между начальной и конечной точками.</translation>
- </message>
- <message>
<source>Endpoint:</source>
<translation>Конец:</translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
- <translation>Эта ручка устанавливает точку, где будет заканчиваться воспроизведение записи. При включённом повторе модуль воспроизведения по достижении этого места возвратится к начальной точке, если нота длительней этой части записи.</translation>
- </message>
- <message>
<source>Continue sample playback across notes</source>
<translation>Продолжить воспроизведение записи по нотам</translation>
</message>
@@ -126,6 +161,42 @@ If you're interested in translating LMMS in another language or want to imp
<source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
<translation>Включение этой опции продолжит воспроизведение записи по разным нотам - если изменить ускорение или длительность ноты остановится до конца записи, то со следующей ноты запись продолжится там, где остановилась, чтобы сбросить воспроизвдение на начало записи, вставьте ноту внизу у клавиш (<20 Гц)</translation>
</message>
+ <message>
+ <source>Disable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable loop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioFileProcessorWaveView</name>
@@ -375,6 +446,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation>Тяните контроль удерживая <Ctrl></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -406,6 +481,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation>Отсоединить «%1»</translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished">Установить/очистить запись</translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -415,6 +494,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished">Частота:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished">УСИЛ</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished">Усиление:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished">ОТН</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished">Отношение:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished">Частота</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished">Усиление</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished">Отношение</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished">Показать интерфейс</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -527,6 +659,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished">Низ.ЧФ</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished">Выс.ЧФ</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished">Сред.ЧФ csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished">Сред.ЧФ czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">Полосно-заграждающий</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">Все проходят</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">Муг</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished">2х Низ.ЧФ</translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished">RC Низ.ЧФ 12дБ</translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished">RC Сред.ЧФ 12 дБ</translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished">RC Выс.ЧФ 12дБ</translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished">RC Низ.ЧФ 24дБ</translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished">RC Сред.ЧФ 24дБ</translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished">RC Выс.ЧФ 24дБ</translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished">Фильтр Вокальной форманты</translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -907,6 +1165,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation>Перетащите в это окно какую-нибудь запись.</translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1035,14 +1297,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation>8х</translation>
</message>
<message>
- <source>Sample-exact controllers</source>
- <translation>Контроллеры точных записей</translation>
- </message>
- <message>
- <source>Alias-free oscillators</source>
- <translation>Не привязанные осцилляторы</translation>
- </message>
- <message>
<source>Start</source>
<translation>Начать</translation>
</message>
@@ -1056,48 +1310,129 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
- <name>FxMixer</name>
- <message>
- <source>Master</source>
- <translation>Главный</translation>
- </message>
+ <name>FileBrowser</name>
<message>
- <source>FX %1</source>
- <translation>Эффект %1</translation>
+ <source>Browser</source>
+ <translation type="unfinished">Обозреватель файлов</translation>
</message>
</context>
<context>
- <name>FxMixerView</name>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Rename FX channel</source>
- <translation>Переименовать канал Эффекта</translation>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished">Соединить с активным инструментом-дорожкой</translation>
</message>
<message>
- <source>Enter the new name for this FX channel</source>
- <translation>Введите новое название для этого канала Эффекта</translation>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished">Отркрыть в новой дорожке инструмента/редакторе песни</translation>
</message>
<message>
- <source>FX-Mixer</source>
- <translation>Микшер Эффектов</translation>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished">Открыть в новой инструментальной дорожке/Бит+Басс редакторе</translation>
</message>
<message>
- <source>FX Fader %1</source>
- <translation>Ползунок Эффекта %1</translation>
+ <source>Loading sample</source>
+ <translation type="unfinished">Загрузка записи</translation>
</message>
<message>
- <source>Mute</source>
- <translation>Тишина</translation>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished">Пж. ждите, запись загружается для просмотра...</translation>
</message>
<message>
- <source>Mute this FX channel</source>
- <translation>Тишина на этом канале Эффекта</translation>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished">--- Заводские файлы ---</translation>
</message>
</context>
<context>
- <name>InstrumentFunctionArpeggio</name>
+ <name>FxLine</name>
<message>
- <source>Arpeggio</source>
- <translation>Арпеджио</translation>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&H Справка</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixer</name>
+ <message>
+ <source>Master</source>
+ <translation>Главный</translation>
+ </message>
+ <message>
+ <source>FX %1</source>
+ <translation>Эффект %1</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView</name>
+ <message>
+ <source>Rename FX channel</source>
+ <translation>Переименовать канал Эффекта</translation>
+ </message>
+ <message>
+ <source>Enter the new name for this FX channel</source>
+ <translation>Введите новое название для этого канала Эффекта</translation>
+ </message>
+ <message>
+ <source>FX-Mixer</source>
+ <translation>Микшер Эффектов</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
+ <message>
+ <source>FX Fader %1</source>
+ <translation type="unfinished">Ползунок Эффекта %1</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished">Заглушить</translation>
+ </message>
+ <message>
+ <source>Mute this FX channel</source>
+ <translation type="unfinished">Тишина на этом канале Эффекта</translation>
+ </message>
+</context>
+<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentFunctionArpeggio</name>
+ <message>
+ <source>Arpeggio</source>
+ <translation>Арпеджио</translation>
</message>
<message>
<source>Arpeggio type</source>
@@ -1151,6 +1486,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Sync</source>
<translation>Синхронизировать</translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1267,7 +1606,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>6</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {6?}</translation>
</message>
<message>
<source>6sus4</source>
@@ -1287,7 +1626,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>7</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {7?}</translation>
</message>
<message>
<source>7sus4</source>
@@ -1295,7 +1634,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>7#5</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {7#5?}</translation>
</message>
<message>
<source>7b5</source>
@@ -1303,7 +1642,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>7#9</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {7#9?}</translation>
</message>
<message>
<source>7b9</source>
@@ -1311,7 +1650,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>7#5#9</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {7#5#9?}</translation>
</message>
<message>
<source>7#5b9</source>
@@ -1331,7 +1670,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>7#11</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {7#11?}</translation>
</message>
<message>
<source>Maj7</source>
@@ -1387,7 +1726,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>9</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {9?}</translation>
</message>
<message>
<source>9sus4</source>
@@ -1399,7 +1738,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>9#5</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {9#5?}</translation>
</message>
<message>
<source>9b5</source>
@@ -1407,7 +1746,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>9#11</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {9#11?}</translation>
</message>
<message>
<source>9b13</source>
@@ -1447,7 +1786,7 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>11</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {11?}</translation>
</message>
<message>
<source>11b9</source>
@@ -1467,11 +1806,11 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
<message>
<source>13</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {13?}</translation>
</message>
<message>
<source>13#9</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">8х {13#9?}</translation>
</message>
<message>
<source>13b9</source>
@@ -1593,6 +1932,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished">8х {5?}</translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1656,6 +2007,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation>NOTE</translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1804,6 +2167,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation>Срез частот:</translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1890,10 +2257,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation>ОСНОВНЫЕ НАСТРОЙКИ</translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation>Нажмите сюда, чтобы сохранить настройки текущего канала в файл предустановок. Позже вы сможете загрузить эти настройки через просмотрщик двойным щелчком мыши.</translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation>Громкость инструмента</translation>
</message>
@@ -1966,10 +2329,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation>ПЛАГИН</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation>Сохранить текущие настройки каналов в файл предустановок</translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation>Диапазон тональности (полутона)</translation>
</message>
@@ -1977,6 +2336,14 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>RANGE</source>
<translation>ДИАПАЗОН</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -2023,6 +2390,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Введите новое значение от %1 до %2:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2392,10 +2766,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<translation>LMMS (*.mmp *.mmpz)</translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation>LMMS Проекты (*.mmp *.mmpz);;LMMS Шаблоны проектов (*.mpt)</translation>
- </message>
- <message>
<source>Version %1</source>
<translation>Версия %1</translation>
</message>
@@ -2415,6 +2785,22 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation>Ошибка во время обработки файла настроек в строке %1:%2: %3</translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2534,195 +2920,1057 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Fixed output note</source>
<translation>Постоянный вывод нот</translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
- <translation>Громкость осциллятора %1</translation>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
- <translation>Стереобаланс для осциллятора %1</translation>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
- <translation>Подстройка осциллятора %1 грубая</translation>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
- <translation>Подстройка левого канала осциллятора %1 тонкая</translation>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
- <translation>Подстройка правого канала осциллятора %1 тонкая</translation>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
- <translation>Сдвиг фазы для осциллятора %1</translation>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
- <translation>Подстройка стерео-фазы осциллятора %1</translation>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
- <translation>Гладкость сигнала осциллятора %1</translation>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
- <translation>Тип модуляции %1</translation>
+ <source>Osc 1 Sync send on fall</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
- <translation>Форма сигнала осциллятора %1</translation>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
- <translation>Открыть другой патч</translation>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
- <translation>Нажмите чтобы открыть другой патч-файл. Цикличность и настройки при этом сохранятся.</translation>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation>Повтор</translation>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
- <translation>Режим повтора</translation>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
- <translation>Здесь включается/выключается режим повтора, при включёнии PatMan будет использовать информацию о повторе из файла.</translation>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
- <translation>Подстроить</translation>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
- <translation>Тип подстройки</translation>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
- <translation>Здесь включается/выключается режим подстройки. Если он включён, то PatMan изменит запись так, чтобы она совпадала по частоте с нотой.</translation>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
- <translation>Не выбран файл</translation>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
- <translation>Открыть патч-файл</translation>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
- <translation>Патч-файлы (*.pat)</translation>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
- <translation>Контроллер вершин</translation>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
- <translation>Контроллер вершин с багом</translation>
+ <source>Osc 3 Sub-oscillator mix</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
- <translation>Из-за ошибки в старой версии LMMS контроллеры вершин не могут правильно подключаться. Пж. убедитесь, что контроллеры вершин правильно подсоединены и пересохраните этот файл, извините, за причинённые неудобства.</translation>
+ <source>Osc 3 Waveform 1</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
- <translation>ПИК</translation>
+ <source>Osc 3 Waveform 2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
- <translation>Контроллер LFO</translation>
+ <source>Osc 3 Sync Hard</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
- <translation>БАЗА</translation>
+ <source>Osc 3 Sync Reverse</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
- <translation>Базовое значение:</translation>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
- <translation>Глубина модуляции:</translation>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
- <translation>Вступление:</translation>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
- <translation>Убывание:</translation>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
- <translation>ГЛУБ</translation>
+ <source>LFO 2 Waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
- <translation>МНОЖ</translation>
+ <source>LFO 2 Attack</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
- <translation>Величина множителя:</translation>
+ <source>LFO 2 Rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
- <translation>ВСТУП</translation>
+ <source>LFO 2 Phase</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Pre-delay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished">Вибрато</translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation>Громкость осциллятора %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation>Стереобаланс для осциллятора %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation>Подстройка осциллятора %1 грубая</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation>Подстройка левого канала осциллятора %1 тонкая</translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation>Подстройка правого канала осциллятора %1 тонкая</translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation>Сдвиг фазы для осциллятора %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation>Подстройка стерео-фазы осциллятора %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation>Гладкость сигнала осциллятора %1</translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation>Тип модуляции %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation>Форма сигнала осциллятора %1</translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation>Открыть другой патч</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation>Нажмите чтобы открыть другой патч-файл. Цикличность и настройки при этом сохранятся.</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation>Повтор</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation>Режим повтора</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation>Здесь включается/выключается режим повтора, при включёнии PatMan будет использовать информацию о повторе из файла.</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation>Подстроить</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation>Тип подстройки</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation>Здесь включается/выключается режим подстройки. Если он включён, то PatMan изменит запись так, чтобы она совпадала по частоте с нотой.</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation>Не выбран файл</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation>Открыть патч-файл</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation>Патч-файлы (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>Чтобы открыть этот шаблон в нотном редакторе, дважды на нём щёлкните
+Используйте колёсико мыши для установки громкости отдельного шага</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>Открыть в редакторе нот</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>Очистить все ноты</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>Сбросить название</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>Переименовать</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>Добавить шаги</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>Удалить шаги</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation>Контроллер вершин</translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation>Контроллер вершин с багом</translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation>Из-за ошибки в старой версии LMMS контроллеры вершин не могут правильно подключаться. Пж. убедитесь, что контроллеры вершин правильно подсоединены и пересохраните этот файл, извините, за причинённые неудобства.</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation>ПИК</translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation>Контроллер LFO</translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation>БАЗА</translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation>Базовое значение:</translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation>Глубина модуляции:</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation>Вступление:</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation>Убывание:</translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation>ГЛУБ</translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation>МНОЖ</translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation>Величина множителя:</translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation>ВСТУП</translation>
+ </message>
+ <message>
+ <source>DCAY</source>
<translation>СПАД</translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation>Опорное значение</translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation>Глубина модуляции</translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation>Заглушить вывод</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation>Вступление</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation>Убывание</translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation>Абс значение</translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation>Величина множителя</translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>Переместить выделенные ноты в буфер (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>Копировать выделенные ноты в буфер (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>Вставить ноты из буфера (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Воспроизведение текущего шаблона/пауза (Пробел)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Остановить воспроизвдение шаблона (Пробел)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>Нотный редактор - без шаблона</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>Нотный редактор - %1</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>Откройте шаблон с помощью двойного щелчка мышью!</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>Записать ноты с цифрового музыкального инструмента (MIDI)</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>По посл. ноте</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>Режим рисования (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>Режим стирания нот (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>Режим выбора нот (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation>Записать ноты с цифрового музыкального инструмента (MIDI) во время воспроизведения композиции или дорожки Ритм-Басса</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation>Нажмите здесь чтобы проиграть текущий шаблон. Это может пригодиться при его редактировании. По окончании шаблона воспроизведение начнётся сначала.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation>Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Позже вы сможете отредактировать записанный шаблон.</translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation>Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Во время записи все ноты записываются в этот шаблон, и вы будете слышать композицию или РБ дорожку на заднем плане.</translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation>Нажмите здесь, если вы хотите остановить воспроизведение текущего шаблона.</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>При нажатии на эту кнопку выделеные ноты будут вырезаны в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить".</translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>При нажатии на эту кнопку выделеные ноты будут скопированы в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить".</translation>
+ </message>
<message>
- <source>Base value</source>
- <translation>Опорное значение</translation>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation>При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт.</translation>
</message>
<message>
- <source>Modulation amount</source>
- <translation>Глубина модуляции</translation>
+ <source>Note lock</source>
+ <translation>Фиксация нот</translation>
</message>
<message>
- <source>Mute output</source>
- <translation>Заглушить вывод</translation>
+ <source>Note Volume</source>
+ <translation>Громкость нот</translation>
</message>
<message>
- <source>Attack</source>
- <translation>Вступление</translation>
+ <source>Note Panning</source>
+ <translation>Стереофония нот</translation>
</message>
<message>
- <source>Release</source>
- <translation>Убывание</translation>
+ <source>Detune mode (Shift+T)</source>
+ <translation>Режим подстраивания (Shift+T)</translation>
</message>
<message>
- <source>Abs Value</source>
- <translation>Абс значение</translation>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation>Режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это режим по умолчанию и используется большую часть времени.
+Для включения этого режима можно использовать комбинацию клавиш Shift+D, удерживайте Ctrl для временного переключения в режим выбора.</translation>
</message>
<message>
- <source>Amount Multiplicator</source>
- <translation>Величина множителя</translation>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation>Режим стирания. В этом режиме вы можете стирать ноты. Для включения этого режима можно использовать комбинацию клавиш Shift+E.</translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation>Режим выделения. В этом режиме можно выделять ноты, можно также удерживать Ctrl в режиме рисования, чтобы можно было на время войти в режим выделения.</translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation>Режим подстройки. В этом режиме можно выбирать ноты для автоматизации их подстраивания. Можно использовать это для переходов нот от одной к другой. Для активации с клавиатуры <Shift+T>.</translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation>Отметить/Снять отметку с текущего полутона</translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation>Отметить текущий подъём</translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation>Отметить текущий аккорд</translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation>Снять выделение</translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation>Без подъёма</translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation>Убрать аккорды</translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">Введите новое значение от %1 до %2:</translation>
</message>
</context>
<context>
@@ -2752,6 +4000,10 @@ Reason: "%2"</source>
<source>Failed to load plugin "%1"!</source>
<translation>Не получилось загрузить модуль «%1»!</translation>
</message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ProjectRenderer</name>
@@ -2898,6 +4150,10 @@ Reason: "%2"</source>
<source>Channels Out: </source>
<translation>Каналы из: </translation>
</message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleBuffer</name>
@@ -2906,10 +4162,6 @@ Reason: "%2"</source>
<translation>Открыть звуковой файл</translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
- <translation>Все звуковые файлы (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</translation>
- </message>
- <message>
<source>Wave-Files (*.wav)</source>
<translation>Файлы Wave (*.wav)</translation>
</message>
@@ -2930,10 +4182,6 @@ Reason: "%2"</source>
<translation>Файлы SPEEX (*.spx)</translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
- <translation>Файлы MPEG1 L3 (*.mp3)</translation>
- </message>
- <message>
<source>VOC-Files (*.voc)</source>
<translation>Файлы VOC (*.voc)</translation>
</message>
@@ -2949,63 +4197,214 @@ Reason: "%2"</source>
<source>RAW-Files (*.raw)</source>
<translation>Файлы RAW (*.raw)</translation>
</message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SampleTCOView</name>
<message>
- <source>double-click to select sample</source>
- <translatorcomment>Для выбора файла-образца сделайте двойной щелчок мышью</translatorcomment>
- <translation>Выберите запись двойным нажатием мыши</translation>
+ <source>double-click to select sample</source>
+ <translatorcomment>Для выбора файла-образца сделайте двойной щелчок мышью</translatorcomment>
+ <translation>Выберите запись двойным нажатием мыши</translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation>Удалить (средняя кнопка мыши)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>Вырезать</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>Копировать</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>Вставить</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation>Заглушить/включить (<Ctrl> + средняя кнопка мыши)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation>Установить/очистить запись</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation>Дорожка записи</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation>Громкость</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation>Громкость дорожки</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation>Громкость канала:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation>ГРОМ</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>Нажмите сюда, если вы хотите остановить воспроизведение мелодии. Курсор при этом будет установлен на начало композиции.</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>Не могу открыть файл</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>Не могу записать файл</translation>
+ </message>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Музыкальный редактор</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>Нажмите, чтобы прослушать созданную мелодию. Воспроизведение начнётся с позиции курсора (зелёный треугольник); вы можете двигать его во время проигрывания.</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Начать воспроизведение (Пробел)</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>Остановить воспроизведение (Пробел)</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>Добавить ритм/басс</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>Добавить дорожку записи</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>Режим рисования</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>Правка (выделение/перемещение)</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation>Записать сэмпл со звукового устройства</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>Записать сэмпл с аудио-устройства во время воспроизведения в музыкальном или ритм/басс редакторе</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>Добавить дорожку автоматизации</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation>Невозможно открыть файл %1, вероятно, нет разрешений на его чтение.
+Пж. убедитесь, что есть по крайней мере права на чтение этого файла и попробуйте ещё раз.</translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation>Ошибка в файле</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation>Файл %1 возможно содержит ошибки из-за которых не может загрузиться.</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation>Темп</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation>ТЕМП/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation>Темп музыки</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation>Это значение задаёт темп музыки в ударах в минуту (англ. аббр. BPM). На каждый такт приходится четыре удара, так что темп в ударах в минуту фактически указывает, сколько четвертей такта проигрывается за минуту (или, что то же, количество тактов, проигрываемых за четыре минуты).</translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation>Высокое качество</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>Основная громкость</translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
- <translation>Удалить (средняя кнопка мыши)</translation>
+ <source>master volume</source>
+ <translation>основная громкость</translation>
</message>
<message>
- <source>Cut</source>
- <translation>Вырезать</translation>
+ <source>Master pitch</source>
+ <translation>Основная тональность </translation>
</message>
<message>
- <source>Copy</source>
- <translation>Копировать</translation>
+ <source>master pitch</source>
+ <translation>основная тональность</translation>
</message>
<message>
- <source>Paste</source>
- <translation>Вставить</translation>
+ <source>Value: %1%</source>
+ <translation>Значение: %1%</translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
- <translation>Заглушить/включить (<Ctrl> + средняя кнопка мыши)</translation>
+ <source>Value: %1 semitones</source>
+ <translation>Значение: %1 полутон(а/ов)</translation>
</message>
<message>
- <source>Set/clear record</source>
- <translation>Установить/очистить запись</translation>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation>Невозможно открыть %1 для записи, возможно, нет разрешений на запись в этот файл, пж. удостоверьтесь, что есть доступ к этому файлу и попробуйте снова.</translation>
</message>
</context>
<context>
- <name>SampleTrack</name>
+ <name>SpectrumAnalyzerControlDialog</name>
<message>
- <source>Sample track</source>
- <translation>Дорожка записи</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Линейный спектр</translation>
</message>
<message>
- <source>Volume</source>
- <translation>Громкость</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Линейная ось ординат</translation>
</message>
</context>
<context>
- <name>SampleTrackView</name>
+ <name>SpectrumAnalyzerControls</name>
<message>
- <source>Track volume</source>
- <translation>Громкость дорожки</translation>
+ <source>Linear spectrum</source>
+ <translation type="unfinished">Линейный спектр</translation>
</message>
<message>
- <source>Channel volume:</source>
- <translation>Громкость канала:</translation>
+ <source>Linear Y axis</source>
+ <translation type="unfinished">Линейная ось ординат</translation>
</message>
<message>
- <source>VOL</source>
- <translation>ГРОМ</translation>
+ <source>Channel mode</source>
+ <translation type="unfinished">Режим канала</translation>
</message>
</context>
<context>
@@ -3408,105 +4807,353 @@ Please make sure you have read-permission to the file and the directory containi
<translation>Нажмите здесь, для контроля VST плагином через хост.</translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
- <translation>Открыть предустановку VST плагина</translation>
+ <source>Open VST-plugin preset</source>
+ <translation>Открыть предустановку VST плагина</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation>Открыть другую .fxp . fxb предустановку VST.</translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation>Предыдущий <-></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation>Переключение на другую предустановку программы VST плагина.</translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation>Следующий <+></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation>Выбор из уже загруженных в VST предустановок.</translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation>Сохранить настройку</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation>Сохранить текущую предустановку программы VST плагина.</translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation>Эффекты по:</translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation> <br /></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation>Загрузка модуля</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation>Открыть предустановку</translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation>Предустановка VST плагина (*.fxp, *.fxb)</translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation>: основные</translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation>"</translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation>'</translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation>Сохранить предустановку</translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation>.fxp</translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation>.FXP</translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation>.FXB</translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation>.fxb</translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A1-B2 Crosstalk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A2-A1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B2-B1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected graph</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynView</name>
+ <message>
+ <source>Select oscillator A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of A2 to A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-modulate A1 and A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of B2 to B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
- <translation>Открыть другую .fxp . fxb предустановку VST.</translation>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
- <translation>Предыдущий <-></translation>
+ <source>Ring-modulate B1 and B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
- <translation>Переключение на другую предустановку программы VST плагина.</translation>
+ <source>Modulate phase of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
- <translation>Следующий <+></translation>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished">Здесь вы можете рисовать собственный сигнал.</translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
- <translation>Выбор из уже загруженных в VST предустановок.</translation>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
- <translation>Сохранить настройку</translation>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
- <translation>Сохранить текущую предустановку программы VST плагина.</translation>
+ <source>Phase left</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
- <translation>Эффекты по:</translation>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
- <translation> <br /></translation>
+ <source>Phase right</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation>Загрузка модуля</translation>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation>Подождите, пока загружается модуль VST...</translation>
+ <source>Normalize</source>
+ <translation type="unfinished">Нормализовать</translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation>Не получилось загрузить модуль VST</translation>
+ <source>Click to normalize</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
- <translation>Отчего-то модуль VST %1 не загрузился.
-Если с другим ПО этот VST работает у Вас под Linux'ом, свяжитесь с разработчиком LMMS!</translation>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
- <translation>Открыть предустановку</translation>
+ <source>Click to invert</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
- <translation>Предустановка VST плагина (*.fxp, *.fxb)</translation>
+ <source>Smooth</source>
+ <translation type="unfinished">Сгладить</translation>
</message>
<message>
- <source>: default</source>
- <translation>: основные</translation>
+ <source>Click to smooth</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
- <translation>"</translation>
+ <source>Sine wave</source>
+ <translation type="unfinished">Синусоида</translation>
</message>
<message>
- <source>'</source>
- <translation>'</translation>
+ <source>Click for sine wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
- <translation>Сохранить предустановку</translation>
+ <source>Triangle wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>.fxp</source>
- <translation>.fxp</translation>
+ <source>Click for triangle wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
- <translation>.FXP</translation>
+ <source>Click for saw wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
- <translation>.FXB</translation>
+ <source>Square wave</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>.fxb</source>
- <translation>.fxb</translation>
+ <source>Click for square wave</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3634,54 +5281,32 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<translation>Перевернуть запись</translation>
</message>
<message>
- <source>Loop</source>
- <translation>Повторять</translation>
- </message>
- <message>
<source>Stutter</source>
<translation>Запинание</translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation>ЧАСТ</translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation>Частота:</translation>
- </message>
<message>
- <source>GAIN</source>
- <translation>УСИЛ</translation>
- </message>
- <message>
- <source>Gain:</source>
- <translation>Усиление:</translation>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
- <translation>ОТН</translation>
+ <source>Loop mode</source>
+ <translation type="unfinished">Режим повтора</translation>
</message>
<message>
- <source>Ratio:</source>
- <translation>Отношение:</translation>
+ <source>Interpolation mode</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
- <translation>Частота</translation>
+ <source>None</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Усиление</translation>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
- <translation>Отношение</translation>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -3742,6 +5367,10 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<source>Change color</source>
<translation>Изменить цвет</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3837,6 +5466,120 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3875,90 +5618,104 @@ Please make sure you have write-permission to the file and the directory contain
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
<message>
- <source>Browser</source>
- <translation>Обозреватель файлов</translation>
+ <source>Graph</source>
+ <translation>Граф</translation>
</message>
</context>
<context>
- <name>fileBrowserTreeWidget</name>
+ <name>kickerInstrument</name>
<message>
- <source>Send to active instrument-track</source>
- <translation>Соединить с активным инструментом-дорожкой</translation>
+ <source>Start frequency</source>
+ <translation>Начальная частота</translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
- <translation>Отркрыть в новой дорожке инструмента/редакторе песни</translation>
+ <source>End frequency</source>
+ <translation>Конечная частота</translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
- <translation>Открыть в новой инструментальной дорожке/Бит+Басс редакторе</translation>
+ <source>Gain</source>
+ <translation>Усиление</translation>
</message>
<message>
- <source>Loading sample</source>
- <translation>Загрузка записи</translation>
+ <source>Length</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
- <translation>Пж. ждите, запись загружается для просмотра...</translation>
+ <source>Distortion Start</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
- <translation>--- Заводские файлы ---</translation>
+ <source>Distortion End</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
- <translation>Граф</translation>
+ <source>Envelope Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise</source>
+ <translation type="unfinished">Шум</translation>
+ </message>
+ <message>
+ <source>Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start from note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End to note</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
- <translation>Начальная частота</translation>
+ <source>Start frequency:</source>
+ <translation>Начальная частота:</translation>
</message>
<message>
- <source>End frequency</source>
- <translation>Конечная частота</translation>
+ <source>End frequency:</source>
+ <translation>Конечная частота:</translation>
</message>
<message>
- <source>Decay</source>
- <translation>Затихание</translation>
+ <source>Gain:</source>
+ <translation>Усиление:</translation>
</message>
<message>
- <source>Distortion</source>
- <translation>Искажение</translation>
+ <source>Frequency Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
- <translation>Усиление</translation>
+ <source>Envelope Length:</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Start frequency:</source>
- <translation>Начальная частота:</translation>
+ <source>Envelope Slope:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
- <translation>Конечная частота:</translation>
+ <source>Click:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
- <translation>Спад:</translation>
+ <source>Noise:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
- <translation>Искажение:</translation>
+ <source>Distortion Start:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
- <translation>Усиление:</translation>
+ <source>Distortion End:</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -4252,6 +6009,38 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<source>Click here for white-noise.</source>
<translation>Сгенерировать белый шум.</translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4847,13 +6636,29 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation>Баланс для осциллятора %1:</translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
- <translation>Подстройка левого канала осциллятора %1:</translation>
- </message>
- <message>
<source>cents</source>
<translation>сотые</translation>
</message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>papuInstrument</name>
@@ -5117,219 +6922,8 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation>Задержка между изменениями шага</translation>
</message>
<message>
- <source>Draw the wave here</source>
- <translation>Рисовать волну здесь</translation>
- </message>
-</context>
-<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>Не могу заморозить шаблон</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation>Шаблон не может быть заморожен, так как он проигрывается в данный момент. Остановите воспроизведение и попробуйте снова!</translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Замораживаю шаблон...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Отменить</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation>Чтобы открыть этот шаблон в нотном редакторе, дважды на нём щёлкните
-Используйте колёсико мыши для установки громкости отдельного шага</translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation>Открыть в редакторе нот</translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation>Очистить все ноты</translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation>Сбросить название</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation>Переименовать</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation>Перезаморозить</translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation>Заморозить</translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation>Разморозить</translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation>Добавить шаги</translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation>Удалить шаги</translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation>Переместить выделенные ноты в буфер (Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation>Копировать выделенные ноты в буфер (Ctrl+X)</translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation>Вставить ноты из буфера (Ctrl+V)</translation>
- </message>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Воспроизведение текущего шаблона/пауза (Пробел)</translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Остановить воспроизвдение шаблона (Пробел)</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation>Нотный редактор - без шаблона</translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation>Нотный редактор - %1</translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation>Откройте шаблон с помощью двойного щелчка мышью!</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation>Записать ноты с цифрового музыкального инструмента (MIDI)</translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>По посл. ноте</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation>Режим рисования (Shift+D)</translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation>Режим стирания нот (Shift+E)</translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation>Режим выбора нот (Shift+S)</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation>Записать ноты с цифрового музыкального инструмента (MIDI) во время воспроизведения композиции или дорожки Ритм-Басса</translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation>Нажмите здесь чтобы проиграть текущий шаблон. Это может пригодиться при его редактировании. По окончании шаблона воспроизведение начнётся сначала.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation>Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Позже вы сможете отредактировать записанный шаблон.</translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation>Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Во время записи все ноты записываются в этот шаблон, и вы будете слышать композицию или РБ дорожку на заднем плане.</translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation>Нажмите здесь, если вы хотите остановить воспроизведение текущего шаблона.</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>При нажатии на эту кнопку выделеные ноты будут вырезаны в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить".</translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation>При нажатии на эту кнопку выделеные ноты будут скопированы в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить".</translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation>При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт.</translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation>Фиксация нот</translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation>Громкость нот</translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation>Стереофония нот</translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation>Режим подстраивания (Shift+T)</translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation>Режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это режим по умолчанию и используется большую часть времени.
-Для включения этого режима можно использовать комбинацию клавиш Shift+D, удерживайте Ctrl для временного переключения в режим выбора.</translation>
- </message>
- <message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation>Режим стирания. В этом режиме вы можете стирать ноты. Для включения этого режима можно использовать комбинацию клавиш Shift+E.</translation>
- </message>
- <message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation>Режим выделения. В этом режиме можно выделять ноты, можно также удерживать Ctrl в режиме рисования, чтобы можно было на время войти в режим выделения.</translation>
- </message>
- <message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation>Режим подстройки. В этом режиме можно выбирать ноты для автоматизации их подстраивания. Можно использовать это для переходов нот от одной к другой. Для активации с клавиатуры <Shift+T>.</translation>
- </message>
- <message>
- <source>Mark/unmark current semitone</source>
- <translation>Отметить/Снять отметку с текущего полутона</translation>
- </message>
- <message>
- <source>Mark current scale</source>
- <translation>Отметить текущий подъём</translation>
- </message>
- <message>
- <source>Mark current chord</source>
- <translation>Отметить текущий аккорд</translation>
- </message>
- <message>
- <source>Unmark all</source>
- <translation>Снять выделение</translation>
- </message>
- <message>
- <source>No scale</source>
- <translation>Без подъёма</translation>
- </message>
- <message>
- <source>No chord</source>
- <translation>Убрать аккорды</translation>
+ <source>Draw the wave here</source>
+ <translation>Рисовать волну здесь</translation>
</message>
</context>
<context>
@@ -5339,10 +6933,6 @@ use mouse wheel to set volume of a step</source>
<translation>Инструменты</translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
- <translation>Три осциллятора, которые Вы можете настраивать по вкусу</translation>
- </message>
- <message>
<source>no description</source>
<translation>описание отсутствует</translation>
</message>
@@ -5355,10 +6945,6 @@ use mouse wheel to set volume of a step</source>
<translation>Синтезатор звуков вроде органа</translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
- <translation>Элементарное подключение произвольной звуковой записи (напр. ударные) в дорожку инструментов</translation>
- </message>
- <message>
<source>Filter for importing MIDI-files into LMMS</source>
<translation>Фильтр для включения файла MIDI в проект ЛММС</translation>
</message>
@@ -5371,10 +6957,6 @@ use mouse wheel to set volume of a step</source>
<translation>Мелодичные ударные</translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
- <translation>Модуль, позволяющий использовать в LMMS любые эффекты VST.</translation>
- </message>
- <message>
<source>Vibrating string modeler</source>
<translation>Эмуляция вибрирующих струн</translation>
</message>
@@ -5387,10 +6969,6 @@ use mouse wheel to set volume of a step</source>
<translation>Незавершённая монофоническая имитация tb303</translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
- <translation>Многоцелевой синтезатор ударных и басса</translation>
- </message>
- <message>
<source>Instrument browser</source>
<translation>Обзор инструментов</translation>
</message>
@@ -5403,10 +6981,6 @@ use mouse wheel to set volume of a step</source>
<translation>Модуль, усиливающий разницу между каналами стереозаписи</translation>
</message>
<message>
- <source>plugin for boosting bass</source>
- <translation>Модуль, усиливающий басы</translation>
- </message>
- <message>
<source>Emulation of GameBoy (TM) APU</source>
<translation>Эмуляция GameBoy (TM)</translation>
</message>
@@ -5456,6 +7030,62 @@ This chip was used in the Commodore 64 computer.</source>
<source>LMMS port of sfxr</source>
<translation>LMMS порт SFXR</translation>
</message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>projectNotes</name>
@@ -6156,153 +7786,6 @@ Latency: %2 ms</source>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation>Нажмите сюда, если вы хотите остановить воспроизведение мелодии. Курсор при этом будет установлен на начало композиции.</translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>Не могу открыть файл</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation>Не могу записать файл</translation>
- </message>
- <message>
- <source>Song-Editor</source>
- <translation>Музыкальный редактор</translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation>Нажмите, чтобы прослушать созданную мелодию. Воспроизведение начнётся с позиции курсора (зелёный треугольник); вы можете двигать его во время проигрывания.</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Начать воспроизведение (Пробел)</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation>Остановить воспроизведение (Пробел)</translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation>Добавить ритм/басс</translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation>Добавить дорожку записи</translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation>Режим рисования</translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation>Правка (выделение/перемещение)</translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation>Записать сэмпл со звукового устройства</translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation>Записать сэмпл с аудио-устройства во время воспроизведения в музыкальном или ритм/басс редакторе</translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation>Добавить дорожку автоматизации</translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation>Невозможно открыть файл %1, вероятно, нет разрешений на его чтение.
-Пж. убедитесь, что есть по крайней мере права на чтение этого файла и попробуйте ещё раз.</translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation>Ошибка в файле</translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation>Файл %1 возможно содержит ошибки из-за которых не может загрузиться.</translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation>Темп</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation>ТЕМП/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation>Темп музыки</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation>Это значение задаёт темп музыки в ударах в минуту (англ. аббр. BPM). На каждый такт приходится четыре удара, так что темп в ударах в минуту фактически указывает, сколько четвертей такта проигрывается за минуту (или, что то же, количество тактов, проигрываемых за четыре минуты).</translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation>Высокое качество</translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation>Основная громкость</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation>основная громкость</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation>Основная тональность </translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation>основная тональность</translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation>Значение: %1%</translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation>Значение: %1 полутон(а/ов)</translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation>Невозможно открыть %1 для записи, возможно, нет разрешений на запись в этот файл, пж. удостоверьтесь, что есть доступ к этому файлу и попробуйте снова.</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Линейный спектр</translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation>Линейная ось ординат</translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation>Линейный спектр</translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation>Линейная ось ординат</translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation>Режим канала</translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6489,6 +7972,18 @@ Latency: %2 ms</source>
<source>Solo</source>
<translation>Соло</translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6830,4 +8325,74 @@ The LED in the lower right corner of the waveform editor determines whether the
<translation>Голос %1 тест</translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/sv.qm b/data/locale/sv.qm
index 7974e10..9fc6244 100644
Binary files a/data/locale/sv.qm and b/data/locale/sv.qm differ
diff --git a/data/locale/sv.ts b/data/locale/sv.ts
index f33000c..3f89cbe 100644
--- a/data/locale/sv.ts
+++ b/data/locale/sv.ts
@@ -8,10 +8,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS (Linux MultiMedia Studio)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1 (%2/%3, Qt %4, %5)</source>
<translation type="unfinished"></translation>
</message>
@@ -46,7 +42,65 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></source>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation type="unfinished">Volym:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volym</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right gain</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -80,43 +134,63 @@ If you're interested in translating LMMS in another language or want to imp
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop sample at start- and end-point</source>
+ <source>Amplify:</source>
+ <translation type="unfinished">Förstärkning:</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can set, whether looping-mode is enabled. If enabled, AudioFileProcessor loops between start and end-points of a sample until the whole note is played. This is useful for things like string and choir samples.</source>
+ <source>Startpoint:</source>
+ <translation type="unfinished">Startpunkt:</translation>
+ </message>
+ <message>
+ <source>Endpoint:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amplify:</source>
- <translation type="unfinished">Förstärkning:</translation>
+ <source>Continue sample playback across notes</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Startpoint:</source>
- <translation type="unfinished">Startpunkt:</translation>
+ <source>Disable loop</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. If you enable looping-mode, this is the point to which AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Endpoint:</source>
+ <source>Enable loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. If you enable looping-mode, this is the point where AudioFileProcessor returns if a note is longer than the sample between the start and end-points.</source>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Continue sample playback across notes</source>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -365,6 +439,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Drag a control while pressing <Ctrl></source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationPatternView</name>
@@ -396,6 +474,10 @@ If you're interested in translating LMMS in another language or want to imp
<source>Disconnect "%1"</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AutomationTrack</name>
@@ -405,6 +487,59 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Controller</name>
<message>
<source>Controller %1</source>
@@ -517,6 +652,132 @@ If you're interested in translating LMMS in another language or want to imp
</message>
</context>
<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Effect</name>
<message>
<source>Effect enabled</source>
@@ -880,6 +1141,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Drag a sample from somewhere and drop it in this window.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ExportProjectDialog</name>
@@ -1008,27 +1273,90 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sample-exact controllers</source>
+ <source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Alias-free oscillators</source>
- <translation type="unfinished"></translation>
+ <source>Cancel</source>
+ <translation type="unfinished">Avbryt</translation>
</message>
<message>
- <source>Start</source>
+ <source>Export as loop (remove end silence)</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowser</name>
<message>
- <source>Cancel</source>
- <translation type="unfinished">Avbryt</translation>
+ <source>Browser</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
<message>
- <source>Export as loop (remove end silence)</source>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&Hjälp</translation>
+ </message>
+</context>
+<context>
<name>FxMixer</name>
<message>
<source>Master</source>
@@ -1053,6 +1381,9 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>FX-Mixer</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
<message>
<source>FX Fader %1</source>
<translation type="unfinished"></translation>
@@ -1067,6 +1398,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstrumentFunctionArpeggio</name>
<message>
<source>Arpeggio</source>
@@ -1124,6 +1462,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Sync</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Down and up</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionArpeggioView</name>
@@ -1566,6 +1908,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>Minor</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Chromatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentFunctionNoteStackingView</name>
@@ -1628,6 +1982,18 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>NOTE</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentSoundShaping</name>
@@ -1774,6 +2140,10 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>cutoff frequency:</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InstrumentTrack</name>
@@ -1860,10 +2230,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current channel settings in a preset-file. Later you can load this preset by double-clicking it in the preset-browser.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Instrument volume</source>
<translation type="unfinished"></translation>
</message>
@@ -1936,10 +2302,6 @@ Right clicking will bring up a context menu where you can change the order in wh
<translation type="unfinished">PLUGIN</translation>
</message>
<message>
- <source>Save current channel settings in a preset-file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Pitch range (semitones)</source>
<translation type="unfinished"></translation>
</message>
@@ -1947,6 +2309,14 @@ Right clicking will bring up a context menu where you can change the order in wh
<source>RANGE</source>
<translation type="unfinished">OMRÅDE</translation>
</message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>LadspaControl</name>
@@ -1993,6 +2363,13 @@ Right clicking will bring up a context menu where you can change the order in wh
</message>
</context>
<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">SKriv ett nytt värde mellan %1 och %2:</translation>
+ </message>
+</context>
+<context>
<name>LfoController</name>
<message>
<source>LFO Controller</source>
@@ -2352,10 +2729,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS Project (*.mmp *.mmpz);;LMMS Project Template (*.mpt)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Version %1</source>
<translation type="unfinished"></translation>
</message>
@@ -2375,6 +2748,22 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Error while parsing configuration file at line %1:%2: %3</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MeterDialog</name>
@@ -2491,976 +2880,2235 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
<source>Fixed output note</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>OscillatorObject</name>
+ <name>MonstroInstrument</name>
<message>
- <source>Osc %1 volume</source>
+ <source>Osc 1 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning</source>
+ <source>Osc 1 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning</source>
+ <source>Osc 1 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left</source>
+ <source>Osc 1 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right</source>
+ <source>Osc 1 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset</source>
+ <source>Osc 1 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning</source>
+ <source>Osc 1 Pulse width</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 wave shape</source>
+ <source>Osc 1 Sync send on rise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation type %1</source>
+ <source>Osc 1 Sync send on fall</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 waveform</source>
+ <source>Osc 2 Volume</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PatmanView</name>
<message>
- <source>Open other patch</source>
+ <source>Osc 2 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <source>Osc 2 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
+ <source>Osc 2 Fine detune left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop mode</source>
+ <source>Osc 2 Fine detune right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <source>Osc 2 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune</source>
+ <source>Osc 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tune mode</source>
+ <source>Osc 2 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <source>Osc 2 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No file selected</source>
+ <source>Osc 3 Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open patch file</source>
+ <source>Osc 3 Panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Patch-Files (*.pat)</source>
+ <source>Osc 3 Coarse detune</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakController</name>
<message>
- <source>Peak Controller</source>
+ <source>Osc 3 Stereo phase offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Peak Controller Bug</source>
+ <source>Osc 3 Sub-oscillator mix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <source>Osc 3 Waveform 1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerDialog</name>
<message>
- <source>PEAK</source>
+ <source>Osc 3 Waveform 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LFO Controller</source>
+ <source>Osc 3 Sync Hard</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControlDialog</name>
<message>
- <source>BASE</source>
+ <source>Osc 3 Sync Reverse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Base amount:</source>
+ <source>LFO 1 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount:</source>
+ <source>LFO 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack:</source>
+ <source>LFO 1 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release:</source>
+ <source>LFO 1 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>AMNT</source>
+ <source>LFO 2 Waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MULT</source>
+ <source>LFO 2 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator:</source>
+ <source>LFO 2 Rate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ATCK</source>
+ <source>LFO 2 Phase</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>DCAY</source>
+ <source>Env 1 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PeakControllerEffectControls</name>
<message>
- <source>Base value</source>
+ <source>Env 1 Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Modulation amount</source>
+ <source>Env 1 Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mute output</source>
+ <source>Env 1 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Attack</source>
+ <source>Env 1 Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Release</source>
+ <source>Env 1 Release</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Abs Value</source>
+ <source>Env 1 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Amount Multiplicator</source>
+ <source>Env 2 Pre-delay</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>PianoView</name>
<message>
- <source>Base note</source>
+ <source>Env 2 Attack</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Plugin</name>
<message>
- <source>Plugin not found</source>
- <translation type="unfinished">Plugin hittades inte</translation>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The plugin "%1" wasn't found or could not be loaded!
-Reason: "%2"</source>
+ <source>Env 2 Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error while loading plugin</source>
- <translation type="unfinished">Fel vid inläsning av plugin</translation>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to load plugin "%1"!</source>
+ <source>Env 2 Release</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>ProjectRenderer</name>
<message>
- <source>WAV-File (*.wav)</source>
+ <source>Env 2 Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Compressed OGG-File (*.ogg)</source>
- <translation type="unfinished">Komprimerad OGG-Fil (*.ogg)</translation>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QObject</name>
<message>
- <source>C</source>
- <comment>Note name</comment>
+ <source>Selected view</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Db</source>
- <comment>Note name</comment>
+ <source>Vol1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>C#</source>
- <comment>Note name</comment>
+ <source>Vol1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eb</source>
- <comment>Note name</comment>
+ <source>Vol1-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>D#</source>
- <comment>Note name</comment>
+ <source>Vol2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>E</source>
- <comment>Note name</comment>
+ <source>Vol2-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Fb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gb</source>
- <comment>Note name</comment>
+ <source>Vol2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>F#</source>
- <comment>Note name</comment>
+ <source>Vol3-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G</source>
- <comment>Note name</comment>
+ <source>Vol3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ab</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>G#</source>
- <comment>Note name</comment>
+ <source>Vol3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A</source>
- <comment>Note name</comment>
+ <source>Phs1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Bb</source>
- <comment>Note name</comment>
+ <source>Phs1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>A#</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>B</source>
- <comment>Note name</comment>
+ <source>Phs1-LFO2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>QWidget</name>
<message>
- <source>Name: </source>
- <translation type="unfinished">Name: </translation>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Maker: </source>
- <translation type="unfinished">Skapare:</translation>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Copyright: </source>
+ <source>Phs2-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Requires Real Time: </source>
+ <source>Phs2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
- <translation type="unfinished">Ja</translation>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
+ <source>Phs3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Real Time Capable: </source>
+ <source>Phs3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>In Place Broken: </source>
+ <source>Phs3-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels In: </source>
+ <source>Pit1-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channels Out: </source>
+ <source>Pit1-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>File: </source>
+ <source>Pit1-LFO1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleBuffer</name>
<message>
- <source>Open audio file</source>
- <translation type="unfinished">Öppna ljudfil</translation>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw *.mp3)</source>
+ <source>Pit2-Env1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Wave-Files (*.wav)</source>
- <translation type="unfinished">Wave-Filer (*.wav)</translation>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>OGG-Files (*.ogg)</source>
- <translation type="unfinished">OGG-Filer (*.ogg)</translation>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DrumSynth-Files (*.ds)</source>
+ <source>Pit2-LFO2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>FLAC-Files (*.flac)</source>
- <translation type="unfinished">FLAC-Filer (*.flac)</translation>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>SPEEX-Files (*.spx)</source>
+ <source>Pit3-Env2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>MP3-Files (*.mp3)</source>
+ <source>Pit3-LFO1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VOC-Files (*.voc)</source>
- <translation type="unfinished">VOC-Filer
- (*.voc)</translation>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AIFF-Files (*.aif *.aiff)</source>
- <translation type="unfinished">AIFF-Filer (*.aif *.aiff)</translation>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>AU-Files (*.au)</source>
- <translation type="unfinished">AU-Filer (*.au)</translation>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>RAW-Files (*.raw)</source>
- <translation type="unfinished">RAW-Filer (*.raw)</translation>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SampleTCOView</name>
+ <name>MonstroView</name>
<message>
- <source>double-click to select sample</source>
- <translation type="unfinished">Dubbelklicka för att välja spår</translation>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Delete (middle mousebutton)</source>
- <translation type="unfinished">Ta bort (musens mittenknapp)</translation>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cut</source>
- <translation type="unfinished">Klipp ut</translation>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Copy</source>
- <translation type="unfinished">Kopiera</translation>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Paste</source>
- <translation type="unfinished">Klistra in</translation>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Set/clear record</source>
+ <source>Modulate frequency of Osc3 with Osc2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleTrack</name>
<message>
- <source>Sample track</source>
+ <source>Modulate phase of Osc3 with Osc2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Volume</source>
- <translation type="unfinished">Volym</translation>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>SampleTrackView</name>
<message>
- <source>Track volume</source>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Channel volume:</source>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VOL</source>
- <translation type="unfinished">VOL</translation>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TempoSyncKnob</name>
<message>
- <source>Tempo Sync</source>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No Sync</source>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Eight beats</source>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Whole note</source>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Half note</source>
- <translation type="unfinished">Halvnoter</translation>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Quarter note</source>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>8th note</source>
+ <source>Choose waveform for oscillator 2. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>16th note</source>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>32nd note</source>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Custom...</source>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>&Help</source>
- <translation type="unfinished">&Hjälp</translation>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Custom </source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Eight Beats</source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Whole Note</source>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Half Note</source>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to Quarter Note</source>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 8th Note</source>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 16th Note</source>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synced to 32nd Note</source>
+ <source>PHS controls the phase offset of the LFO. </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>TimeDisplayWidget</name>
<message>
- <source>click to change time units</source>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TrackContainer</name>
+ <name>NesInstrument</name>
<message>
- <source>Couldn't import file</source>
- <translation type="unfinished">Kunde inte importera fil</translation>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't find a filter for importing file %1.
-You should convert this file into a format supported by LMMS using another software.</source>
- <translation type="unfinished">Kunde inte hitta ett filter för att importera filen %1.
-Du bör konvertera filen till ett format som stöd av lLMMS genom att använda ett annat program.</translation>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't open file</source>
- <translation type="unfinished">Kunde inte öppna filen</translation>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Couldn't open file %1 for reading.
-Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
- <translation type="unfinished">Kunde inte öppna filen %1 för läsning.
-Se till att du har läsningsrättigheter för filen och katalogen som innehåller filen och försök igen!</translation>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Loading project...</source>
- <translation type="unfinished">Läser in projekt...</translation>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Cancel</source>
- <translation type="unfinished">Avbryt</translation>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait...</source>
- <translation type="unfinished">Vänta...</translation>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Importing MIDI-file...</source>
- <translation type="unfinished">Importerar MIDI-file...</translation>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Importing FLP-file...</source>
- <translation type="unfinished">Importerar FLP-file...</translation>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Huvudvolym</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TripleOscillatorView</name>
+ <name>OscillatorObject</name>
<message>
- <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Osc %1 volume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Osc %1 panning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 1 & 2</source>
+ <source>Osc %1 coarse detuning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 1 with oscillator 2</source>
+ <source>Osc %1 fine detuning left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <source>Osc %1 fine detuning right</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Osc %1 phase-offset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Osc %1 stereo phase-detuning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mix output of oscillator 2 & 3</source>
+ <source>Osc %1 wave shape</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Synchronize oscillator 2 with oscillator 3</source>
+ <source>Modulation type %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <source>Osc %1 waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 volume:</source>
+ <source>Osc %1 harmonic</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>PatmanView</name>
<message>
- <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
+ <source>Open other patch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 panning:</source>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
+ <source>Loop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 coarse detuning:</source>
+ <source>Loop mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>semitones</source>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
+ <source>Tune</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
+ <source>Tune mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <source>No file selected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation type="unfinished">Nollställ namn</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation type="unfinished">Byt namn</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>Spela/pausa aktuellt mönster (mellanslag)</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>Sluta spela aktuellt mönster (mellanslag)</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation type="unfinished">Markeringsläge (shift+s)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation type="unfinished">Klipp ut valda noter(Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>Senaste noten</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished">SKriv ett nytt värde mellan %1 och %2:</translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation type="unfinished">Plugin hittades inte</translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation type="unfinished">Fel vid inläsning av plugin</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation type="unfinished">Komprimerad OGG-Fil (*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>G#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bb</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A#</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B</source>
+ <comment>Note name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>Name: </source>
+ <translation type="unfinished">Name: </translation>
+ </message>
+ <message>
+ <source>Maker: </source>
+ <translation type="unfinished">Skapare:</translation>
+ </message>
+ <message>
+ <source>Copyright: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Requires Real Time: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished">Ja</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Real Time Capable: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In Place Broken: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels In: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels Out: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>File: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleBuffer</name>
+ <message>
+ <source>Open audio file</source>
+ <translation type="unfinished">Öppna ljudfil</translation>
+ </message>
+ <message>
+ <source>Wave-Files (*.wav)</source>
+ <translation type="unfinished">Wave-Filer (*.wav)</translation>
+ </message>
+ <message>
+ <source>OGG-Files (*.ogg)</source>
+ <translation type="unfinished">OGG-Filer (*.ogg)</translation>
+ </message>
+ <message>
+ <source>DrumSynth-Files (*.ds)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FLAC-Files (*.flac)</source>
+ <translation type="unfinished">FLAC-Filer (*.flac)</translation>
+ </message>
+ <message>
+ <source>SPEEX-Files (*.spx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VOC-Files (*.voc)</source>
+ <translation type="unfinished">VOC-Filer
+ (*.voc)</translation>
+ </message>
+ <message>
+ <source>AIFF-Files (*.aif *.aiff)</source>
+ <translation type="unfinished">AIFF-Filer (*.aif *.aiff)</translation>
+ </message>
+ <message>
+ <source>AU-Files (*.au)</source>
+ <translation type="unfinished">AU-Filer (*.au)</translation>
+ </message>
+ <message>
+ <source>RAW-Files (*.raw)</source>
+ <translation type="unfinished">RAW-Filer (*.raw)</translation>
+ </message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTCOView</name>
+ <message>
+ <source>double-click to select sample</source>
+ <translation type="unfinished">Dubbelklicka för att välja spår</translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation type="unfinished">Ta bort (musens mittenknapp)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">Klipp ut</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">Kopiera</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">Klistra in</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation type="unfinished">Volym</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation type="unfinished">VOL</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation>Sång-Editor</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>Spela sång (mellanslag)</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>kunde inte öppna fil</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation type="unfinished">Tempo</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation type="unfinished">TEMPO/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation type="unfinished">Sångtempo</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">Huvudvolym</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation type="unfinished">huvudvolym</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value: %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value: %1 semitones</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControlDialog</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControls</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TempoSyncKnob</name>
+ <message>
+ <source>Tempo Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eight beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Whole note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half note</source>
+ <translation type="unfinished">Halvnoter</translation>
+ </message>
+ <message>
+ <source>Quarter note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>8th note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>16th note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>32nd note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Custom...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished">&Hjälp</translation>
+ </message>
+ <message>
+ <source>Custom </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Eight Beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Whole Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Half Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Quarter Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 8th Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 16th Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 32nd Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimeDisplayWidget</name>
+ <message>
+ <source>click to change time units</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TrackContainer</name>
+ <message>
+ <source>Couldn't import file</source>
+ <translation type="unfinished">Kunde inte importera fil</translation>
+ </message>
+ <message>
+ <source>Couldn't find a filter for importing file %1.
+You should convert this file into a format supported by LMMS using another software.</source>
+ <translation type="unfinished">Kunde inte hitta ett filter för att importera filen %1.
+Du bör konvertera filen till ett format som stöd av lLMMS genom att använda ett annat program.</translation>
+ </message>
+ <message>
+ <source>Couldn't open file</source>
+ <translation type="unfinished">Kunde inte öppna filen</translation>
+ </message>
+ <message>
+ <source>Couldn't open file %1 for reading.
+Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
+ <translation type="unfinished">Kunde inte öppna filen %1 för läsning.
+Se till att du har läsningsrättigheter för filen och katalogen som innehåller filen och försök igen!</translation>
+ </message>
+ <message>
+ <source>Loading project...</source>
+ <translation type="unfinished">Läser in projekt...</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">Avbryt</translation>
+ </message>
+ <message>
+ <source>Please wait...</source>
+ <translation type="unfinished">Vänta...</translation>
+ </message>
+ <message>
+ <source>Importing MIDI-file...</source>
+ <translation type="unfinished">Importerar MIDI-file...</translation>
+ </message>
+ <message>
+ <source>Importing FLP-file...</source>
+ <translation type="unfinished">Importerar FLP-file...</translation>
+ </message>
+</context>
+<context>
+ <name>TripleOscillatorView</name>
+ <message>
+ <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of oscillator 1 & 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synchronize oscillator 1 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of oscillator 2 & 3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synchronize oscillator 2 with oscillator 3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>semitones</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>cents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>degrees</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a sine-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a triangle-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a square-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a moog-like saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use an exponential wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use white-noise for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a user-defined waveform for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Ui</name>
+ <message>
+ <source>Contributors ordered by number of commits:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Involved</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VersionedSaveDialog</name>
+ <message>
+ <source>Increment version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrement version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VestigeInstrumentView</name>
+ <message>
+ <source>Open other VST-plugin</source>
+ <translation type="unfinished">Öppna andra VST-plugin</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn off all notes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin</source>
+ <translation type="unfinished">Öppna VST-plugin</translation>
+ </message>
+ <message>
+ <source>DLL-files (*.dll)</source>
+ <translation type="unfinished">DLL-filer (*.dll)</translation>
+ </message>
+ <message>
+ <source>EXE-files (*.exe)</source>
+ <translation type="unfinished">EXE-filer (*.exe)</translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation type="unfinished">Inget VST-plugin inläst</translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished">Laddar plugin</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning right:</source>
+ <source>.fxp</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <source>.FXP</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 phase-offset:</source>
+ <source>.FXB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>degrees</source>
+ <source>.fxb</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <source>Please wait while loading VST plugin...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 stereo phase-detuning:</source>
+ <source>Failed loading VST plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
<message>
- <source>Use a sine-wave for current oscillator.</source>
+ <source>Volume A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a triangle-wave for current oscillator.</source>
+ <source>Volume A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a saw-wave for current oscillator.</source>
+ <source>Volume B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a square-wave for current oscillator.</source>
+ <source>Volume B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a moog-like saw-wave for current oscillator.</source>
+ <source>Panning A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use an exponential wave for current oscillator.</source>
+ <source>Panning A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use white-noise for current oscillator.</source>
+ <source>Panning B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use a user-defined waveform for current oscillator.</source>
+ <source>Panning B2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>Ui</name>
<message>
- <source>Contributors ordered by number of commits:</source>
+ <source>Freq. multiplier A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Involved</source>
+ <source>Freq. multiplier A2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VersionedSaveDialog</name>
<message>
- <source>Increment version number</source>
+ <source>Freq. multiplier B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decrement version number</source>
+ <source>Freq. multiplier B2</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VestigeInstrumentView</name>
<message>
- <source>Open other VST-plugin</source>
- <translation type="unfinished">Öppna andra VST-plugin</translation>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <source>Left detune A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show/hide GUI</source>
+ <source>Left detune B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <source>Left detune B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Turn off all notes</source>
+ <source>Right detune A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin</source>
- <translation type="unfinished">Öppna VST-plugin</translation>
+ <source>Right detune A2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>DLL-files (*.dll)</source>
- <translation type="unfinished">DLL-filer (*.dll)</translation>
+ <source>Right detune B1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>EXE-files (*.exe)</source>
- <translation type="unfinished">EXE-filer (*.exe)</translation>
+ <source>Right detune B2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No VST-plugin loaded</source>
- <translation type="unfinished">Inget VST-plugin inläst</translation>
+ <source>A-B Mix</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>A-B Mix envelope amount</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>A-B Mix envelope attack</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>A-B Mix envelope hold</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>A-B Mix envelope decay</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>A1-B2 Crosstalk</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>A2-A1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>B2-B1 modulation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Selected graph</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>WatsynView</name>
<message>
- <source>Next (+)</source>
+ <source>Select oscillator A1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Select oscillator A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Preset</source>
+ <source>Select oscillator B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>by </source>
+ <source>Select oscillator B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> - VST plugin control</source>
+ <source>Mix output of A2 to A1</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstEffectControlDialog</name>
<message>
- <source>Show/hide</source>
+ <source>Modulate amplitude of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Control VST-plugin from LMMS host</source>
+ <source>Ring-modulate A1 and A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to control VST-plugin from host.</source>
+ <source>Modulate phase of A1 with output of A2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open VST-plugin preset</source>
+ <source>Mix output of B2 to B1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <source>Modulate amplitude of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Previous (-)</source>
+ <source>Ring-modulate B1 and B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <source>Modulate phase of B1 with output of B2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Next (+)</source>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here to select presets that are currently loaded in VST.</source>
+ <source>Load waveform</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save preset</source>
+ <source>Click to load a waveform from a sample file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <source>Phase left</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Effect by: </source>
+ <source>Click to shift phase by -15 degrees</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source> <br /></source>
+ <source>Phase right</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>VstPlugin</name>
<message>
- <source>Loading plugin</source>
- <translation type="unfinished">Laddar plugin</translation>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait while loading VST-plugin...</source>
- <translation type="unfinished">Vänta medans VST-plugin läses in...</translation>
+ <source>Normalize</source>
+ <translation type="unfinished">Normalisera</translation>
</message>
<message>
- <source>Failed loading VST-plugin</source>
- <translation type="unfinished">Misslyckades med att läsa in VST_plugin</translation>
+ <source>Click to normalize</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>The VST-plugin %1 could not be loaded for some reason.
-If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
+ <source>Invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open Preset</source>
+ <source>Click to invert</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <source>Smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>: default</source>
+ <source>Click to smooth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>"</source>
- <translation type="unfinished"></translation>
+ <source>Sine wave</source>
+ <translation type="unfinished">Sinusvåg</translation>
</message>
<message>
- <source>'</source>
+ <source>Click for sine wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Save Preset</source>
- <translation type="unfinished"></translation>
+ <source>Triangle wave</source>
+ <translation type="unfinished">triganelvåg</translation>
</message>
<message>
- <source>.fxp</source>
+ <source>Click for triangle wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXP</source>
+ <source>Click for saw wave</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>.FXB</source>
- <translation type="unfinished"></translation>
+ <source>Square wave</source>
+ <translation type="unfinished">Fyrkantsvåg</translation>
</message>
<message>
- <source>.fxb</source>
+ <source>Click for square wave</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3589,53 +5237,31 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loop</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Stutter</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControlDialog</name>
- <message>
- <source>FREQ</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Frequency:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>GAIN</source>
- <translation type="unfinished"></translation>
- </message>
<message>
- <source>Gain:</source>
+ <source>Loopback point</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>RATIO</source>
+ <source>Loop mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio:</source>
+ <source>Interpolation mode</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>bassBoosterControls</name>
<message>
- <source>Frequency</source>
+ <source>None</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Linear</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ratio</source>
+ <source>Sinc</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -3696,6 +5322,10 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
<source>Change color</source>
<translation type="unfinished">Byt färg</translation>
</message>
+ <message>
+ <source>Reset color to default</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>bbTrack</name>
@@ -3791,6 +5421,120 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer
</message>
</context>
<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>exportProjectDialog</name>
<message>
<source>Could not open file</source>
@@ -3826,89 +5570,103 @@ Please make sure you have write-permission to the file and the directory contain
</message>
</context>
<context>
- <name>fileBrowser</name>
+ <name>graphModel</name>
+ <message>
+ <source>Graph</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>kickerInstrument</name>
+ <message>
+ <source>Start frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Length</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <source>Browser</source>
+ <source>Distortion Start</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>fileBrowserTreeWidget</name>
<message>
- <source>Send to active instrument-track</source>
+ <source>Distortion End</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/Song-Editor</source>
+ <source>Envelope Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open in new instrument-track/B+B Editor</source>
+ <source>Noise</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Loading sample</source>
+ <source>Click</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please wait, loading sample for preview...</source>
+ <source>Frequency Slope</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>--- Factory files ---</source>
+ <source>Start from note</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>graphModel</name>
<message>
- <source>Graph</source>
+ <source>End to note</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>kickerInstrument</name>
+ <name>kickerInstrumentView</name>
<message>
- <source>Start frequency</source>
+ <source>Start frequency:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency</source>
+ <source>End frequency:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay</source>
+ <source>Gain:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion</source>
+ <source>Frequency Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain</source>
+ <source>Envelope Length:</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>kickerInstrumentView</name>
<message>
- <source>Start frequency:</source>
+ <source>Envelope Slope:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>End frequency:</source>
+ <source>Click:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Decay:</source>
+ <source>Noise:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Distortion:</source>
+ <source>Distortion Start:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Gain:</source>
+ <source>Distortion End:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4185,6 +5943,38 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<source>Click here for white-noise.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>lb303Synth</name>
@@ -4780,11 +6570,27 @@ Double clicking any of the plugins will bring up information on the ports.</sour
<translation type="unfinished"></translation>
</message>
<message>
- <source>Osc %1 fine detuning left:</source>
+ <source>cents</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>cents</source>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -5055,335 +6861,162 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
- <name>pattern</name>
- <message>
- <source>Cannot freeze pattern</source>
- <translation>Kunde inte frysa mönstret</translation>
- </message>
- <message>
- <source>The pattern currently cannot be freezed because you're in play-mode. Please stop and try again!</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>patternFreezeStatusDialog</name>
- <message>
- <source>Freezing pattern...</source>
- <translation>Lås mönster...</translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation>Avbryt</translation>
- </message>
-</context>
-<context>
- <name>patternView</name>
- <message>
- <source>double-click to open this pattern in piano-roll
-use mouse wheel to set volume of a step</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Open in piano-roll</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Clear all notes</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Reset name</source>
- <translation type="unfinished">Nollställ namn</translation>
- </message>
- <message>
- <source>Change name</source>
- <translation type="unfinished">Byt namn</translation>
- </message>
- <message>
- <source>Refreeze</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Freeze</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Unfreeze</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add steps</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Remove steps</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PianoRoll</name>
- <message>
- <source>Play/pause current pattern (Space)</source>
- <translation>Spela/pausa aktuellt mönster (mellanslag)</translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Stop playing of current pattern (Space)</source>
- <translation>Sluta spela aktuellt mönster (mellanslag)</translation>
- </message>
- <message>
- <source>Draw mode (Shift+D)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Erase mode (Shift+E)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Select mode (Shift+S)</source>
- <translation type="unfinished">Markeringsläge (shift+s)</translation>
- </message>
- <message>
- <source>Cut selected notes (Ctrl+X)</source>
- <translation type="unfinished">Klipp ut valda noter(Ctrl+X)</translation>
- </message>
- <message>
- <source>Copy selected notes (Ctrl+C)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Paste notes from clipboard (Ctrl+V)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Last note</source>
- <translation>Senaste noten</translation>
- </message>
- <message>
- <source>Piano-Roll - no pattern</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Piano-Roll - %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Please open a pattern by double-clicking on it!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here to stop playback of current pattern.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note lock</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Volume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Note Panning</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Detune mode (Shift+T)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>pluginBrowser</name>
<message>
- <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
+ <source>no description</source>
+ <translation>ingen beskrivning</translation>
</message>
<message>
- <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
- <translation type="unfinished"></translation>
+ <source>Instrument plugins</source>
+ <translation>Instrument plugin</translation>
</message>
<message>
- <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
- <translation type="unfinished"></translation>
+ <source>Filter for importing FL Studio projects into LMMS</source>
+ <translation>Filter för att importera FL Studio projekt till LMMS</translation>
</message>
<message>
- <source>Mark/unmark current semitone</source>
+ <source>Filter for importing MIDI-files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current scale</source>
+ <source>Additive Synthesizer for organ-like sounds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Mark current chord</source>
+ <source>VST-host for using VST(i)-plugins within LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Unmark all</source>
+ <source>Vibrating string modeler</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No scale</source>
+ <source>Incomplete monophonic imitation tb303</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No chord</source>
+ <source>Plugin for freely manipulating stereo output</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>pluginBrowser</name>
<message>
- <source>no description</source>
- <translation>ingen beskrivning</translation>
+ <source>Plugin for controlling knobs with sound peaks</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument plugins</source>
- <translation>Instrument plugin</translation>
+ <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <source>List installed LADSPA plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing FL Studio projects into LMMS</source>
- <translation>Filter för att importera FL Studio projekt till LMMS</translation>
+ <source>GUS-compatible patch instrument</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing MIDI-files into LMMS</source>
+ <source>Tuneful things to bang on</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Additive Synthesizer for organ-like sounds</source>
+ <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>three powerful oscillators you can modulate in several ways</source>
+ <source>Instrument browser</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>VST-host for using VST(i)-plugins within LMMS</source>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Vibrating string modeler</source>
+ <source>Emulation of the MOS6581 and MOS8580 SID.
+This chip was used in the Commodore 64 computer.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Incomplete monophonic imitation tb303</source>
+ <source>Player for SoundFont files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for freely manipulating stereo output</source>
+ <source>Emulation of GameBoy (TM) APU</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for controlling knobs with sound peaks</source>
+ <source>Customizable wavetable synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <source>Embedded ZynAddSubFX</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>List installed LADSPA plugins</source>
+ <source>2-operator FM Synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>versatile kick- & bassdrum-synthesizer</source>
+ <source>Filter for importing Hydrogen files into LMMS</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>GUS-compatible patch instrument</source>
+ <source>LMMS port of sfxr</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary VST-effects inside LMMS.</source>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for boosting bass</source>
+ <source>Three powerful oscillators you can modulate in several ways</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tuneful things to bang on</source>
+ <source>A native amplifier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
+ <source>Carla Rack Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Instrument browser</source>
+ <source>4-oscillator modulatable wavetable synth</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <source>plugin for waveshaping</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of the MOS6581 and MOS8580 SID.
-This chip was used in the Commodore 64 computer.</source>
+ <source>Boost your bass the fast and simple way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Player for SoundFont files</source>
+ <source>Versatile drum synthesizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emulation of GameBoy (TM) APU</source>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Customizable wavetable synthesizer</source>
+ <source>plugin for processing dynamics in a flexible way</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Embedded ZynAddSubFX</source>
+ <source>Carla Patchbay Instrument</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>2-operator FM Synth</source>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter for importing Hydrogen files into LMMS</source>
+ <source>Graphical spectrum analyzer plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>LMMS port of sfxr</source>
+ <source>A NES-like synthesizer</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -6084,152 +7717,6 @@ Latency: %2 ms</source>
</message>
</context>
<context>
- <name>SongEditor</name>
- <message>
- <source>Song-Editor</source>
- <translation>Sång-Editor</translation>
- </message>
- <message>
- <source>Play song (Space)</source>
- <translation>Spela sång (mellanslag)</translation>
- </message>
- <message>
- <source>Stop song (Space)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add beat/bassline</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add sample-track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Draw mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Edit mode (select and move)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open file</source>
- <translation>kunde inte öppna fil</translation>
- </message>
- <message>
- <source>Could not write file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Add automation-track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Record samples from Audio-device while playing song or BB track</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open file %1. You probably have no permissions to read this file.
- Please make sure to have at least read permissions to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error in file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Tempo</source>
- <translation type="unfinished">Tempo</translation>
- </message>
- <message>
- <source>TEMPO/BPM</source>
- <translation type="unfinished">TEMPO/BPM</translation>
- </message>
- <message>
- <source>tempo of song</source>
- <translation type="unfinished">Sångtempo</translation>
- </message>
- <message>
- <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>High quality mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Master volume</source>
- <translation type="unfinished">Huvudvolym</translation>
- </message>
- <message>
- <source>master volume</source>
- <translation type="unfinished">huvudvolym</translation>
- </message>
- <message>
- <source>Master pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>master pitch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Value: %1%</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Value: %1 semitones</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControlDialog</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y axis</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>spectrumAnalyzerControls</name>
- <message>
- <source>Linear spectrum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Linear Y-axis</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Channel mode</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>stereoEnhancerControlDialog</name>
<message>
<source>WIDE</source>
@@ -6415,6 +7902,18 @@ Latency: %2 ms</source>
<source>Solo</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Clear this track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>vestigeInstrument</name>
@@ -6732,4 +8231,74 @@ The LED in the lower right corner of the waveform editor determines whether the
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>
diff --git a/data/locale/zh.qm b/data/locale/zh.qm
new file mode 100644
index 0000000..af938fe
Binary files /dev/null and b/data/locale/zh.qm differ
diff --git a/data/locale/zh.ts b/data/locale/zh.ts
new file mode 100644
index 0000000..f27c9db
--- /dev/null
+++ b/data/locale/zh.ts
@@ -0,0 +1,8319 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh">
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <source>About LMMS</source>
+ <translation>关于LMMS</translation>
+ </message>
+ <message>
+ <source>Version %1 (%2/%3, Qt %4, %5)</source>
+ <translation>版本 %1 (%2/%3, Qt %4, %5)</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>关于</translation>
+ </message>
+ <message>
+ <source>LMMS - easy music production for everyone</source>
+ <translation>LMMS - 人人都是作曲家</translation>
+ </message>
+ <message>
+ <source>Authors</source>
+ <translation>作者</translation>
+ </message>
+ <message>
+ <source>Translation</source>
+ <translation>翻译</translation>
+ </message>
+ <message>
+ <source>Current language not translated (or native English).
+
+If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer!</source>
+ <translation>当前语言是中文(中国)
+
+您可以帮助我们改进翻译:https://github.com/LMMS/lmms/wiki/Creating-a-localization
+
+主要译者:
+TonyChyi,邮箱:tonychee1989 at gmail.com
+Min Zhang ,邮箱:zm1990s at gmail.com
+校对:
+Jeff Bai,邮箱:jeffbaichina at gmail.com</translation>
+ </message>
+ <message>
+ <source>License</source>
+ <translation>许可证</translation>
+ </message>
+ <message>
+ <source>Copyright (c) 2004-2014, LMMS developers</source>
+ <translation>Copyright (c) 2004-2014, LMMS 开发者</translation>
+ </message>
+ <message>
+ <source><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></source>
+ <translation><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation type="unfinished">LMMS</translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControlDialog</name>
+ <message>
+ <source>VOL</source>
+ <translation>VOL</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation>音量:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation>PAN</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation>声相:</translation>
+ </message>
+ <message>
+ <source>LEFT</source>
+ <translation>左</translation>
+ </message>
+ <message>
+ <source>Left gain:</source>
+ <translation>左增益:</translation>
+ </message>
+ <message>
+ <source>RIGHT</source>
+ <translation>右</translation>
+ </message>
+ <message>
+ <source>Right gain:</source>
+ <translation>右增益:</translation>
+ </message>
+</context>
+<context>
+ <name>AmplifierControls</name>
+ <message>
+ <source>Volume</source>
+ <translation>音量</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation>声相</translation>
+ </message>
+ <message>
+ <source>Left gain</source>
+ <translation>左增益</translation>
+ </message>
+ <message>
+ <source>Right gain</source>
+ <translation>右增益</translation>
+ </message>
+</context>
+<context>
+ <name>AudioAlsa::setupWidget</name>
+ <message>
+ <source>DEVICE</source>
+ <translation>设备</translation>
+ </message>
+ <message>
+ <source>CHANNELS</source>
+ <translation>声道数</translation>
+ </message>
+</context>
+<context>
+ <name>AudioFileProcessorView</name>
+ <message>
+ <source>Open other sample</source>
+ <translation>打开其他采样</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another audio-file. A dialog will appear where you can select your file. Settings like looping-mode, start and end-points, amplify-value, and so on are not reset. So, it may not sound like the original sample.</source>
+ <translation>如果想打开另一个音频文件,请点击这里。接着会出现文件选择对话框。 诸如环回模式(looping-mode)、起始/结束点、放大值(amplify-value)之类的值不会被重置,因此音频听起来会和原采样有差异。</translation>
+ </message>
+ <message>
+ <source>Reverse sample</source>
+ <translation>反转采样</translation>
+ </message>
+ <message>
+ <source>If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash.</source>
+ <translation type="unfinished">如果点击此按钮,整个采样将会被反转。反转处理能用于制作很酷的效果,例如reversed crash。</translation>
+ </message>
+ <message>
+ <source>Amplify:</source>
+ <translation>放大: </translation>
+ </message>
+ <message>
+ <source>With this knob you can set the amplify ratio. When you set a value of 100% your sample isn't changed. Otherwise it will be amplified up or down (your actual sample-file isn't touched!)</source>
+ <translation>此旋钮用于调整振幅放大比率。当设为100%时采样不会变化。除此之外,振幅不是放大就是减弱。 (原始的采样文件不会被更改)</translation>
+ </message>
+ <message>
+ <source>Startpoint:</source>
+ <translation>起始点: </translation>
+ </message>
+ <message>
+ <source>Endpoint:</source>
+ <translation>终止点: </translation>
+ </message>
+ <message>
+ <source>Continue sample playback across notes</source>
+ <translation>跨音符继续播放采样</translation>
+ </message>
+ <message>
+ <source>Enabling this option makes the sample continue playing across different notes - if you change pitch, or the note length stops before the end of the sample, then the next note played will continue where it left off. To reset the playback to the start of the sample, insert a note at the bottom of the keyboard (< 20 Hz)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Disable loop</source>
+ <translation>禁用循环</translation>
+ </message>
+ <message>
+ <source>This button disables looping. The sample plays only once from start to end. </source>
+ <translation>点击此按钮可以禁止循环播放。</translation>
+ </message>
+ <message>
+ <source>Enable loop</source>
+ <translation>开启循环</translation>
+ </message>
+ <message>
+ <source>This button enables forwards-looping. The sample loops between the end point and the loop point.</source>
+ <translation type="unfinished">点击此按钮后,Forwards-looping 会被打开,采样将在终止点(End Point)和循环点(Loop Point)之间播放。</translation>
+ </message>
+ <message>
+ <source>This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point.</source>
+ <translation type="unfinished">点击此按钮后,Ping-pong-looping 会被打开,采样将在终止点(End Point)和循环点(Loop Point)之间来回播放。</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should begin playing your sample. </source>
+ <translation>调节此旋钮,以告诉 AudioFileProcessor 在哪里开始播放。</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where AudioFileProcessor should stop playing your sample. </source>
+ <translation>调节此旋钮,以告诉 AudioFileProcessor 在哪里停止播放。</translation>
+ </message>
+ <message>
+ <source>Loopback point:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the point where the loop starts. </source>
+ <translation>调节此旋钮,以设置循环开始的地方。</translation>
+ </message>
+</context>
+<context>
+ <name>AudioFileProcessorWaveView</name>
+ <message>
+ <source>Sample length:</source>
+ <translation>采样长度:</translation>
+ </message>
+</context>
+<context>
+ <name>AudioJack</name>
+ <message>
+ <source>JACK client restarted</source>
+ <translation>JACK客户端已重启</translation>
+ </message>
+ <message>
+ <source>LMMS was kicked by JACK for some reason. Therefore the JACK backend of LMMS has been restarted. You will have to make manual connections again.</source>
+ <translation>LMMS由于某些原因与JACK断开连接。 这可能是因为LMMS的JACK后端重启导致的,你需要手动重新连接。</translation>
+ </message>
+ <message>
+ <source>JACK server down</source>
+ <translation>JACK服务崩溃</translation>
+ </message>
+ <message>
+ <source>The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS.</source>
+ <translation>JACK服务好像崩溃了,而且未能正常启动。 LMMS不能正常工作,你需要保存你的工作然后重启JACK和LMMS。</translation>
+ </message>
+</context>
+<context>
+ <name>AudioJack::setupWidget</name>
+ <message>
+ <source>CLIENT-NAME</source>
+ <translation>客户端名称</translation>
+ </message>
+ <message>
+ <source>CHANNELS</source>
+ <translation>声道数</translation>
+ </message>
+</context>
+<context>
+ <name>AudioOss::setupWidget</name>
+ <message>
+ <source>DEVICE</source>
+ <translation>设备</translation>
+ </message>
+ <message>
+ <source>CHANNELS</source>
+ <translation>声道数</translation>
+ </message>
+</context>
+<context>
+ <name>AudioPortAudio::setupWidget</name>
+ <message>
+ <source>BACKEND</source>
+ <translation>后端</translation>
+ </message>
+ <message>
+ <source>DEVICE</source>
+ <translation>设备</translation>
+ </message>
+</context>
+<context>
+ <name>AudioPulseAudio::setupWidget</name>
+ <message>
+ <source>DEVICE</source>
+ <translation>设备</translation>
+ </message>
+ <message>
+ <source>CHANNELS</source>
+ <translation>声道数</translation>
+ </message>
+</context>
+<context>
+ <name>AudioSdl::setupWidget</name>
+ <message>
+ <source>DEVICE</source>
+ <translation>设备</translation>
+ </message>
+</context>
+<context>
+ <name>AutomatableModel</name>
+ <message>
+ <source>&Reset (%1%2)</source>
+ <translation>重置(%1%2)(&R)</translation>
+ </message>
+ <message>
+ <source>&Copy value (%1%2)</source>
+ <translation>复制值(%1%2)(&C)</translation>
+ </message>
+ <message>
+ <source>&Paste value (%1%2)</source>
+ <translation>粘贴值(%1%2)(&P)</translation>
+ </message>
+ <message>
+ <source>Edit song-global automation</source>
+ <translation>编辑歌曲全局自动控制选项</translation>
+ </message>
+ <message>
+ <source>Connected to %1</source>
+ <translation>连接到%1</translation>
+ </message>
+ <message>
+ <source>Connected to controller</source>
+ <translation>连接到控制器</translation>
+ </message>
+ <message>
+ <source>Edit connection...</source>
+ <translation>编辑连接...</translation>
+ </message>
+ <message>
+ <source>Remove connection</source>
+ <translation>删除连接</translation>
+ </message>
+ <message>
+ <source>Connect to controller...</source>
+ <translation>连接到控制器...</translation>
+ </message>
+ <message>
+ <source>Remove song-global automation</source>
+ <translation>删除歌曲全局自动控制</translation>
+ </message>
+ <message>
+ <source>Remove all linked controls</source>
+ <translation>移除所有已连接的控制器</translation>
+ </message>
+</context>
+<context>
+ <name>AutomationEditor</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>播放/暂停当前片段(空格)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>停止当前片段(空格)</translation>
+ </message>
+ <message>
+ <source>Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached.</source>
+ <translation>点击这里播放片段。编辑时很有用,片段会自动循环播放。</translation>
+ </message>
+ <message>
+ <source>Click here if you want to stop playing of the current pattern.</source>
+ <translation>点击这里停止播放片段。</translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>绘制模式 (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>擦除模式 (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode.</source>
+ <translation>点击这里启用绘制模式。在此模式下你可以增加或移动单个值。 大部分时间下默认使用此模式。你也可以按键盘上的 ‘Shift+D’激活此模式。</translation>
+ </message>
+ <message>
+ <source>Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation>点击启用擦除模式。此模式下你可以擦除单个值。你可以按键盘上的 'Shift+E' 启用此模式。</translation>
+ </message>
+ <message>
+ <source>Cut selected values (Ctrl+X)</source>
+ <translation>剪切选定值 (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected values (Ctrl+C)</source>
+ <translation>复制选定值 (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste values from clipboard (Ctrl+V)</source>
+ <translation>从剪贴板粘贴值 (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>点击这里,选择的值将会被剪切到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。</translation>
+ </message>
+ <message>
+ <source>Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation>点击这里,选择的值将会被复制到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。</translation>
+ </message>
+ <message>
+ <source>Click here and the values from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Automation Editor - no pattern</source>
+ <translation>自动控制编辑器 - 没有片段</translation>
+ </message>
+ <message>
+ <source>Automation Editor - %1</source>
+ <translation>自动控制编辑器 - %1</translation>
+ </message>
+ <message>
+ <source>Please open an automation pattern with the context menu of a control!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Values copied</source>
+ <translation>值已复制</translation>
+ </message>
+ <message>
+ <source>All selected values were copied to the clipboard.</source>
+ <translation>所有选中的值已复制。</translation>
+ </message>
+ <message>
+ <source>Discrete progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cubic Hermite progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tension: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tension value for spline</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>AutomationPattern</name>
+ <message>
+ <source>Drag a control while pressing <Ctrl></source>
+ <translation>按住<Ctrl>拖动控制器</translation>
+ </message>
+ <message>
+ <source>Model is already connected to this pattern.</source>
+ <translation>模型已连接到此片段。</translation>
+ </message>
+</context>
+<context>
+ <name>AutomationPatternView</name>
+ <message>
+ <source>double-click to open this pattern in automation editor</source>
+ <translation>双击以在自动编辑器中打开此片段</translation>
+ </message>
+ <message>
+ <source>Open in Automation editor</source>
+ <translation>在自动编辑器(Automation editor)中打开</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>清除</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>重置名称</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>修改名称</translation>
+ </message>
+ <message>
+ <source>%1 Connections</source>
+ <translation>%1个连接</translation>
+ </message>
+ <message>
+ <source>Disconnect "%1"</source>
+ <translation>断开“%1”的连接</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation>设置/清除录制</translation>
+ </message>
+</context>
+<context>
+ <name>AutomationTrack</name>
+ <message>
+ <source>Automation track</source>
+ <translation>自动控制轨道</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControlDialog</name>
+ <message>
+ <source>FREQ</source>
+ <translation>频率</translation>
+ </message>
+ <message>
+ <source>Frequency:</source>
+ <translation>频率:</translation>
+ </message>
+ <message>
+ <source>GAIN</source>
+ <translation>增益</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation>增益:</translation>
+ </message>
+ <message>
+ <source>RATIO</source>
+ <translation>比率</translation>
+ </message>
+ <message>
+ <source>Ratio:</source>
+ <translation>比率:</translation>
+ </message>
+</context>
+<context>
+ <name>BassBoosterControls</name>
+ <message>
+ <source>Frequency</source>
+ <translation>频率</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>增益</translation>
+ </message>
+ <message>
+ <source>Ratio</source>
+ <translation>比率</translation>
+ </message>
+</context>
+<context>
+ <name>CarlaInstrumentView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation>显示图形界面</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of Carla.</source>
+ <translation>点击此处可以显示或隐藏 Carla 的图形界面。</translation>
+ </message>
+</context>
+<context>
+ <name>Controller</name>
+ <message>
+ <source>Controller %1</source>
+ <translation>控制器%1</translation>
+ </message>
+</context>
+<context>
+ <name>ControllerConnectionDialog</name>
+ <message>
+ <source>Connection Settings</source>
+ <translation>连接设置</translation>
+ </message>
+ <message>
+ <source>MIDI CONTROLLER</source>
+ <translation>MIDI控制器</translation>
+ </message>
+ <message>
+ <source>Input channel</source>
+ <translation>输入通道</translation>
+ </message>
+ <message>
+ <source>CHANNEL</source>
+ <translation>通道</translation>
+ </message>
+ <message>
+ <source>Input controller</source>
+ <translation>输入控制器</translation>
+ </message>
+ <message>
+ <source>CONTROLLER</source>
+ <translation>控制器</translation>
+ </message>
+ <message>
+ <source>Auto Detect</source>
+ <translation>自动检测</translation>
+ </message>
+ <message>
+ <source>MIDI-devices to receive MIDI-events from</source>
+ <translation>用来接收 MIDI 事件的 MIDI 设备</translation>
+ </message>
+ <message>
+ <source>USER CONTROLLER</source>
+ <translation>用户控制器</translation>
+ </message>
+ <message>
+ <source>MAPPING FUNCTION</source>
+ <translation>映射函数</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>确定</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>取消</translation>
+ </message>
+ <message>
+ <source>LMMS</source>
+ <translation>LMMS</translation>
+ </message>
+ <message>
+ <source>Cycle Detected.</source>
+ <translation>检测到环路。</translation>
+ </message>
+</context>
+<context>
+ <name>ControllerRackView</name>
+ <message>
+ <source>Controller Rack</source>
+ <translation>控制器机架</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>增加</translation>
+ </message>
+ <message>
+ <source>Confirm Delete</source>
+ <translation>删除前确认</translation>
+ </message>
+ <message>
+ <source>Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo.</source>
+ <translation>确定要删除吗?此控制器仍处于被连接状态。此操作不可撤销。</translation>
+ </message>
+</context>
+<context>
+ <name>ControllerView</name>
+ <message>
+ <source>Controls</source>
+ <translation>控制器</translation>
+ </message>
+ <message>
+ <source>Controllers are able to automate the value of a knob, slider, and other controls.</source>
+ <translation>控制器可以自动控制旋钮,滑块和其他控件的值。</translation>
+ </message>
+ <message>
+ <source>Rename controller</source>
+ <translation>重命名控制器</translation>
+ </message>
+ <message>
+ <source>Enter the new name for this controller</source>
+ <translation>输入这个控制器的新名称</translation>
+ </message>
+ <message>
+ <source>&Remove this plugin</source>
+ <translation>删除这个插件(&R)</translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>帮助(&H)</translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControlDialog</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation>已启用过滤器 1</translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation>已启用过滤器 2</translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 1</source>
+ <translation>点击启用/禁用过滤器 1</translation>
+ </message>
+ <message>
+ <source>Click to enable/disable Filter 2</source>
+ <translation>点击启用/禁用过滤器 2</translation>
+ </message>
+</context>
+<context>
+ <name>DualFilterControls</name>
+ <message>
+ <source>Filter 1 enabled</source>
+ <translation>过滤器 1 已启用</translation>
+ </message>
+ <message>
+ <source>Filter 1 type</source>
+ <translation>过滤器 1 的类型</translation>
+ </message>
+ <message>
+ <source>Cutoff 1 frequency</source>
+ <translation>频谱刀 1 的频率</translation>
+ </message>
+ <message>
+ <source>Q/Resonance 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 1</source>
+ <translation>增益 1</translation>
+ </message>
+ <message>
+ <source>Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter 2 enabled</source>
+ <translation>已启用过滤器 2</translation>
+ </message>
+ <message>
+ <source>Filter 2 type</source>
+ <translation>过滤器 2 的类型</translation>
+ </message>
+ <message>
+ <source>Cutoff 2 frequency</source>
+ <translation>频谱刀 2 的频率</translation>
+ </message>
+ <message>
+ <source>Q/Resonance 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain 2</source>
+ <translation>增益 2</translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation>低通</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation>高通</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation>带通 csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation>带通 czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation>凹口滤波器</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation>全通</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation>Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation>人声移除过滤器</translation>
+ </message>
+</context>
+<context>
+ <name>Effect</name>
+ <message>
+ <source>Effect enabled</source>
+ <translation>效果器已启用</translation>
+ </message>
+ <message>
+ <source>Wet/Dry mix</source>
+ <translation>干/湿混合</translation>
+ </message>
+ <message>
+ <source>Gate</source>
+ <translation>门限</translation>
+ </message>
+ <message>
+ <source>Decay</source>
+ <translation>衰减</translation>
+ </message>
+</context>
+<context>
+ <name>EffectChain</name>
+ <message>
+ <source>Effects enabled</source>
+ <translation>效果器已启用</translation>
+ </message>
+</context>
+<context>
+ <name>EffectRackView</name>
+ <message>
+ <source>EFFECTS CHAIN</source>
+ <translation>效果器链</translation>
+ </message>
+ <message>
+ <source>Add effect</source>
+ <translation>增加效果器</translation>
+ </message>
+</context>
+<context>
+ <name>EffectSelectDialog</name>
+ <message>
+ <source>Add effect</source>
+ <translation>增加效果器</translation>
+ </message>
+ <message>
+ <source>Plugin description</source>
+ <translation>插件说明</translation>
+ </message>
+</context>
+<context>
+ <name>EffectView</name>
+ <message>
+ <source>Toggles the effect on or off.</source>
+ <translation type="unfinished">打开/关闭效果。</translation>
+ </message>
+ <message>
+ <source>On/Off</source>
+ <translation>开/关</translation>
+ </message>
+ <message>
+ <source>W/D</source>
+ <translation>干/湿</translation>
+ </message>
+ <message>
+ <source>Wet Level:</source>
+ <translation type="unfinished">湿度:</translation>
+ </message>
+ <message>
+ <source>The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output.</source>
+ <translation>旋转干湿度旋钮以调整原信号与有效果的信号的比例。</translation>
+ </message>
+ <message>
+ <source>DECAY</source>
+ <translation>衰减</translation>
+ </message>
+ <message>
+ <source>Time:</source>
+ <translation>时间:</translation>
+ </message>
+ <message>
+ <source>The Decay knob controls how many buffers of silence must pass before the plugin stops processing. Smaller values will reduce the CPU overhead but run the risk of clipping the tail on delay and reverb effects.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GATE</source>
+ <translation>门限</translation>
+ </message>
+ <message>
+ <source>Gate:</source>
+ <translation>门限:</translation>
+ </message>
+ <message>
+ <source>The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Controls</source>
+ <translation>控制</translation>
+ </message>
+ <message>
+ <source>Effect plugins function as a chained series of effects where the signal will be processed from top to bottom.
+
+The On/Off switch allows you to bypass a given plugin at any point in time.
+
+The Wet/Dry knob controls the balance between the input signal and the effected signal that is the resulting output from the effect. The input for the stage is the output from the previous stage. So, the 'dry' signal for effects lower in the chain contains all of the previous effects.
+
+The Decay knob controls how long the signal will continue to be processed after the notes have been released. The effect will stop processing signals when the volume has dropped below a given threshold for a given length of time. This knob sets the 'given length of time'. Longer times will require more CPU, so this number should be set low for most effects. It needs to be bumped up for effects that produce lengthy periods of silence, e.g. delays.
+
+The Gate knob controls the 'given threshold' for the effect's auto shutdown. The clock for the 'given length of time' will begin as soon as the processed signal level drops below the level specified with this knob.
+
+The Controls button opens a dialog for editing the effect's parameters.
+
+Right clicking will bring up a context menu where you can change the order in which the effects are processed or delete an effect altogether.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &up</source>
+ <translation>向上移 (&u)</translation>
+ </message>
+ <message>
+ <source>Move &down</source>
+ <translation>向下移 (&d)</translation>
+ </message>
+ <message>
+ <source>&Remove this plugin</source>
+ <translation>移除此插件 (&R)</translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>帮助(&H)</translation>
+ </message>
+</context>
+<context>
+ <name>EnvelopeAndLfoParameters</name>
+ <message>
+ <source>Predelay</source>
+ <translation>预延迟</translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation>打进声</translation>
+ </message>
+ <message>
+ <source>Hold</source>
+ <translation>保持</translation>
+ </message>
+ <message>
+ <source>Decay</source>
+ <translation>衰减</translation>
+ </message>
+ <message>
+ <source>Sustain</source>
+ <translation>持续</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation>释放</translation>
+ </message>
+ <message>
+ <source>Modulation</source>
+ <translation>调制</translation>
+ </message>
+ <message>
+ <source>LFO Predelay</source>
+ <translation>LFO 预延迟</translation>
+ </message>
+ <message>
+ <source>LFO Attack</source>
+ <translation>LFO 打进声(attack)</translation>
+ </message>
+ <message>
+ <source>LFO speed</source>
+ <translation>LFO 速度</translation>
+ </message>
+ <message>
+ <source>LFO Modulation</source>
+ <translation>LFO 调制</translation>
+ </message>
+ <message>
+ <source>LFO Wave Shape</source>
+ <translation>LFO 波形形状</translation>
+ </message>
+ <message>
+ <source>Freq x 100</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate Env-Amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EnvelopeAndLfoView</name>
+ <message>
+ <source>DEL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Predelay:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT</source>
+ <translation>ATT</translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished">打进:</translation>
+ </message>
+ <message>
+ <source>Use this knob for setting attack-time of the current envelope. The bigger this value the longer the envelope needs to increase to attack-level. Choose a small value for instruments like pianos and a big value for strings.</source>
+ <translation type="unfinished">(ADSR Attack)</translation>
+ </message>
+ <message>
+ <source>HOLD</source>
+ <translation>HOLD</translation>
+ </message>
+ <message>
+ <source>Hold:</source>
+ <translation type="unfinished">持续:</translation>
+ </message>
+ <message>
+ <source>Use this knob for setting hold-time of the current envelope. The bigger this value the longer the envelope holds attack-level before it begins to decrease to sustain-level.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC</source>
+ <translation>DEC</translation>
+ </message>
+ <message>
+ <source>Decay:</source>
+ <translation type="unfinished">衰减:</translation>
+ </message>
+ <message>
+ <source>Use this knob for setting decay-time of the current envelope. The bigger this value the longer the envelope needs to decrease from attack-level to sustain-level. Choose a small value for instruments like pianos.</source>
+ <translation type="unfinished">(ADSR Decay)</translation>
+ </message>
+ <message>
+ <source>SUST</source>
+ <translation>SUST</translation>
+ </message>
+ <message>
+ <source>Sustain:</source>
+ <translation type="unfinished">持幅:</translation>
+ </message>
+ <message>
+ <source>Use this knob for setting sustain-level of the current envelope. The bigger this value the higher the level on which the envelope stays before going down to zero.</source>
+ <translation type="unfinished">(ADSR Sustain)</translation>
+ </message>
+ <message>
+ <source>REL</source>
+ <translation type="unfinished">REL</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished">消退:</translation>
+ </message>
+ <message>
+ <source>Use this knob for setting release-time of the current envelope. The bigger this value the longer the envelope needs to decrease from sustain-level to zero. Choose a big value for soft instruments like strings.</source>
+ <translation type="unfinished">(ADSR Release)</translation>
+ </message>
+ <message>
+ <source>AMT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting modulation amount of the current envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO predelay:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting predelay-time of the current LFO. The bigger this value the the time until the LFO starts to oscillate.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO- attack:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting attack-time of the current LFO. The bigger this value the longer the LFO needs to increase its amplitude to maximum.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SPD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting speed of the current LFO. The bigger this value the faster the LFO oscillates and the faster will be your effect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting modulation amount of the current LFO. The bigger this value the more the selected size (e.g. volume or cutoff-frequency) will be influenced by this LFO.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a sine-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a triangle-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a saw-wave for current.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a square-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FREQ x 100</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here if the frequency of this LFO should be multiplied by 100.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>multiply LFO-frequency by 100</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MODULATE ENV-AMOUNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to make the envelope-amount controlled by this LFO.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>control envelope-amount by this LFO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ms/LFO:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hint</source>
+ <translation type="unfinished">提示</translation>
+ </message>
+ <message>
+ <source>Drag a sample from somewhere and drop it in this window.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for random wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportProjectDialog</name>
+ <message>
+ <source>Export project</source>
+ <translation>导出工程</translation>
+ </message>
+ <message>
+ <source>Output</source>
+ <translation>输出</translation>
+ </message>
+ <message>
+ <source>File format:</source>
+ <translation>文件格式:</translation>
+ </message>
+ <message>
+ <source>Samplerate:</source>
+ <translation>采样率:</translation>
+ </message>
+ <message>
+ <source>44100 Hz</source>
+ <translation>44100 Hz</translation>
+ </message>
+ <message>
+ <source>48000 Hz</source>
+ <translation>48000 Hz</translation>
+ </message>
+ <message>
+ <source>88200 Hz</source>
+ <translation>88200 Hz</translation>
+ </message>
+ <message>
+ <source>96000 Hz</source>
+ <translation>96000 Hz</translation>
+ </message>
+ <message>
+ <source>192000 Hz</source>
+ <translation>192000 Hz</translation>
+ </message>
+ <message>
+ <source>Bitrate:</source>
+ <translation>码率:</translation>
+ </message>
+ <message>
+ <source>64 KBit/s</source>
+ <translation>64 KBit/s</translation>
+ </message>
+ <message>
+ <source>128 KBit/s</source>
+ <translation>128 KBit/s</translation>
+ </message>
+ <message>
+ <source>160 KBit/s</source>
+ <translation>160 KBit/s</translation>
+ </message>
+ <message>
+ <source>192 KBit/s</source>
+ <translation>192 KBit/s</translation>
+ </message>
+ <message>
+ <source>256 KBit/s</source>
+ <translation>256 KBit/s</translation>
+ </message>
+ <message>
+ <source>320 KBit/s</source>
+ <translation>320 KBit/s</translation>
+ </message>
+ <message>
+ <source>Depth:</source>
+ <translation>位深:</translation>
+ </message>
+ <message>
+ <source>16 Bit Integer</source>
+ <translation>16 位整形</translation>
+ </message>
+ <message>
+ <source>32 Bit Float</source>
+ <translation>32 位浮点型</translation>
+ </message>
+ <message>
+ <source>Please note that not all of the parameters above apply for all file formats.</source>
+ <translation>请注意:上面的参数不一定适用于所有文件格式。</translation>
+ </message>
+ <message>
+ <source>Quality settings</source>
+ <translation>质量设置</translation>
+ </message>
+ <message>
+ <source>Interpolation:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zero Order Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sinc Fastest</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sinc Medium (recommended)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sinc Best (very slow!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Oversampling (use with care!):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>1x (None)</source>
+ <translation>1x (无)</translation>
+ </message>
+ <message>
+ <source>2x</source>
+ <translation>2x</translation>
+ </message>
+ <message>
+ <source>4x</source>
+ <translation>4x</translation>
+ </message>
+ <message>
+ <source>8x</source>
+ <translation>8x</translation>
+ </message>
+ <message>
+ <source>Start</source>
+ <translation>开始</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>取消</translation>
+ </message>
+ <message>
+ <source>Export as loop (remove end silence)</source>
+ <translation>导出为回环loop(移除结尾的静音)</translation>
+ </message>
+</context>
+<context>
+ <name>FileBrowser</name>
+ <message>
+ <source>Browser</source>
+ <translation type="unfinished">浏览器</translation>
+ </message>
+</context>
+<context>
+ <name>FileBrowserTreeWidget</name>
+ <message>
+ <source>Send to active instrument-track</source>
+ <translation type="unfinished">发送到活跃的乐器轨道</translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/Song-Editor</source>
+ <translation type="unfinished">在新乐器轨道/歌曲编辑器中打开</translation>
+ </message>
+ <message>
+ <source>Open in new instrument-track/B+B Editor</source>
+ <translation type="unfinished">在新乐器轨道/B+B 编辑器中打开</translation>
+ </message>
+ <message>
+ <source>Loading sample</source>
+ <translation type="unfinished">加载采样中</translation>
+ </message>
+ <message>
+ <source>Please wait, loading sample for preview...</source>
+ <translation type="unfinished">请稍候,加载采样中...</translation>
+ </message>
+ <message>
+ <source>--- Factory files ---</source>
+ <translation type="unfinished">---软件自带文件---</translation>
+ </message>
+</context>
+<context>
+ <name>FxLine</name>
+ <message>
+ <source>Channel send amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The FX channel receives input from one or more instrument tracks.
+ It in turn can be routed to multiple other FX channels. LMMS automatically takes care of preventing infinite loops for you and doesn't allow making a connection that would result in an infinite loop.
+
+In order to route the channel to another channel, select the FX channel and click on the "send" button on the channel you want to send to. The knob under the send button controls the level of signal that is sent to the channel.
+
+You can remove and move FX channels in the context menu, which is accessed by right-clicking the FX channel.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Move &right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rename &channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>R&emove channel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FxMixer</name>
+ <message>
+ <source>Master</source>
+ <translation>主控</translation>
+ </message>
+ <message>
+ <source>FX %1</source>
+ <translation>FX %1</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView</name>
+ <message>
+ <source>Rename FX channel</source>
+ <translation>重命名效果通道</translation>
+ </message>
+ <message>
+ <source>Enter the new name for this FX channel</source>
+ <translation>为此效果通道输入一个新的名称</translation>
+ </message>
+ <message>
+ <source>FX-Mixer</source>
+ <translation>效果混合器</translation>
+ </message>
+</context>
+<context>
+ <name>FxMixerView::FxChannelView</name>
+ <message>
+ <source>FX Fader %1</source>
+ <translation>FX 衰减器 %1</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>静音</translation>
+ </message>
+ <message>
+ <source>Mute this FX channel</source>
+ <translation>静音此效果通道</translation>
+ </message>
+</context>
+<context>
+ <name>FxRoute</name>
+ <message>
+ <source>Amount to send from channel %1 to channel %2</source>
+ <translation>从通道 %1 发送到通道 %2 的量</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentFunctionArpeggio</name>
+ <message>
+ <source>Arpeggio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio gate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio direction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arpeggio mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation>向上</translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation>向下</translation>
+ </message>
+ <message>
+ <source>Up and down</source>
+ <translation>上和下</translation>
+ </message>
+ <message>
+ <source>Random</source>
+ <translation>随机</translation>
+ </message>
+ <message>
+ <source>Free</source>
+ <translation>自由</translation>
+ </message>
+ <message>
+ <source>Sort</source>
+ <translation>排序</translation>
+ </message>
+ <message>
+ <source>Sync</source>
+ <translation>同步</translation>
+ </message>
+ <message>
+ <source>Down and up</source>
+ <translation>下和上</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentFunctionArpeggioView</name>
+ <message>
+ <source>ARPEGGIO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>An arpeggio is a method playing (especially plucked) instruments, which makes the music much livelier. The strings of such instruments (e.g. harps) are plucked like chords. The only difference is that this is done in a sequential order, so the notes are not played at the same time. Typical arpeggios are major or minor triads, but there are a lot of other possible chords, you can select.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RANGE</source>
+ <translation>范围</translation>
+ </message>
+ <message>
+ <source>Arpeggio range:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>octave(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TIME</source>
+ <translation>时长</translation>
+ </message>
+ <message>
+ <source>Arpeggio time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ms</source>
+ <translation>毫秒</translation>
+ </message>
+ <message>
+ <source>Use this knob for setting the arpeggio time in milliseconds. The arpeggio time specifies how long each arpeggio-tone should be played.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GATE</source>
+ <translation>门限</translation>
+ </message>
+ <message>
+ <source>Arpeggio gate:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting the arpeggio gate. The arpeggio gate specifies the percent of a whole arpeggio-tone that should be played. With this you can make cool staccato arpeggios.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chord:</source>
+ <translation>和弦:</translation>
+ </message>
+ <message>
+ <source>Direction:</source>
+ <translation>方向:</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>模式:</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentFunctionNoteStacking</name>
+ <message>
+ <source>octave</source>
+ <translation>octave</translation>
+ </message>
+ <message>
+ <source>Major</source>
+ <translation>Major</translation>
+ </message>
+ <message>
+ <source>Majb5</source>
+ <translation>Majb5</translation>
+ </message>
+ <message>
+ <source>minor</source>
+ <translation>minor</translation>
+ </message>
+ <message>
+ <source>minb5</source>
+ <translation>minb5</translation>
+ </message>
+ <message>
+ <source>sus2</source>
+ <translation>sus2</translation>
+ </message>
+ <message>
+ <source>sus4</source>
+ <translation>sus4</translation>
+ </message>
+ <message>
+ <source>aug</source>
+ <translation>aug</translation>
+ </message>
+ <message>
+ <source>augsus4</source>
+ <translation>augsus4</translation>
+ </message>
+ <message>
+ <source>tri</source>
+ <translation>tri</translation>
+ </message>
+ <message>
+ <source>6</source>
+ <translation>6</translation>
+ </message>
+ <message>
+ <source>6sus4</source>
+ <translation>6sus4</translation>
+ </message>
+ <message>
+ <source>6add9</source>
+ <translation>6add9</translation>
+ </message>
+ <message>
+ <source>m6</source>
+ <translation>m6</translation>
+ </message>
+ <message>
+ <source>m6add9</source>
+ <translation>m6add9</translation>
+ </message>
+ <message>
+ <source>7</source>
+ <translation>7</translation>
+ </message>
+ <message>
+ <source>7sus4</source>
+ <translation>7sus4</translation>
+ </message>
+ <message>
+ <source>7#5</source>
+ <translation>7#5</translation>
+ </message>
+ <message>
+ <source>7b5</source>
+ <translation>7b5</translation>
+ </message>
+ <message>
+ <source>7#9</source>
+ <translation>7#9</translation>
+ </message>
+ <message>
+ <source>7b9</source>
+ <translation>7b9</translation>
+ </message>
+ <message>
+ <source>7#5#9</source>
+ <translation>7#5#9</translation>
+ </message>
+ <message>
+ <source>7#5b9</source>
+ <translation>7#5b9</translation>
+ </message>
+ <message>
+ <source>7b5b9</source>
+ <translation>7b5b9</translation>
+ </message>
+ <message>
+ <source>7add11</source>
+ <translation>7add11</translation>
+ </message>
+ <message>
+ <source>7add13</source>
+ <translation>7add13</translation>
+ </message>
+ <message>
+ <source>7#11</source>
+ <translation>7#11</translation>
+ </message>
+ <message>
+ <source>Maj7</source>
+ <translation>Maj7</translation>
+ </message>
+ <message>
+ <source>Maj7b5</source>
+ <translation>Maj7b5</translation>
+ </message>
+ <message>
+ <source>Maj7#5</source>
+ <translation>Maj7#5</translation>
+ </message>
+ <message>
+ <source>Maj7#11</source>
+ <translation>Maj7#11</translation>
+ </message>
+ <message>
+ <source>Maj7add13</source>
+ <translation>Maj7add13</translation>
+ </message>
+ <message>
+ <source>m7</source>
+ <translation>m7</translation>
+ </message>
+ <message>
+ <source>m7b5</source>
+ <translation>m7b5</translation>
+ </message>
+ <message>
+ <source>m7b9</source>
+ <translation>m7b9</translation>
+ </message>
+ <message>
+ <source>m7add11</source>
+ <translation>m7add11</translation>
+ </message>
+ <message>
+ <source>m7add13</source>
+ <translation>m7add13</translation>
+ </message>
+ <message>
+ <source>m-Maj7</source>
+ <translation>m-Maj7</translation>
+ </message>
+ <message>
+ <source>m-Maj7add11</source>
+ <translation>m-Maj7add11</translation>
+ </message>
+ <message>
+ <source>m-Maj7add13</source>
+ <translation>m-Maj7add13</translation>
+ </message>
+ <message>
+ <source>9</source>
+ <translation>9</translation>
+ </message>
+ <message>
+ <source>9sus4</source>
+ <translation>9sus4</translation>
+ </message>
+ <message>
+ <source>add9</source>
+ <translation>add9</translation>
+ </message>
+ <message>
+ <source>9#5</source>
+ <translation>9#5</translation>
+ </message>
+ <message>
+ <source>9b5</source>
+ <translation>9b5</translation>
+ </message>
+ <message>
+ <source>9#11</source>
+ <translation>9#11</translation>
+ </message>
+ <message>
+ <source>9b13</source>
+ <translation>9b13</translation>
+ </message>
+ <message>
+ <source>Maj9</source>
+ <translation>Maj9</translation>
+ </message>
+ <message>
+ <source>Maj9sus4</source>
+ <translation>Maj9sus4</translation>
+ </message>
+ <message>
+ <source>Maj9#5</source>
+ <translation>Maj9#5</translation>
+ </message>
+ <message>
+ <source>Maj9#11</source>
+ <translation>Maj9#11</translation>
+ </message>
+ <message>
+ <source>m9</source>
+ <translation>m9</translation>
+ </message>
+ <message>
+ <source>madd9</source>
+ <translation>madd9</translation>
+ </message>
+ <message>
+ <source>m9b5</source>
+ <translation>m9b5</translation>
+ </message>
+ <message>
+ <source>m9-Maj7</source>
+ <translation>m9-Maj7</translation>
+ </message>
+ <message>
+ <source>11</source>
+ <translation>11</translation>
+ </message>
+ <message>
+ <source>11b9</source>
+ <translation>11b9</translation>
+ </message>
+ <message>
+ <source>Maj11</source>
+ <translation>Maj11</translation>
+ </message>
+ <message>
+ <source>m11</source>
+ <translation>m11</translation>
+ </message>
+ <message>
+ <source>m-Maj11</source>
+ <translation>m-Maj11</translation>
+ </message>
+ <message>
+ <source>13</source>
+ <translation>13</translation>
+ </message>
+ <message>
+ <source>13#9</source>
+ <translation>13#9</translation>
+ </message>
+ <message>
+ <source>13b9</source>
+ <translation>13b9</translation>
+ </message>
+ <message>
+ <source>13b5b9</source>
+ <translation>13b5b9</translation>
+ </message>
+ <message>
+ <source>Maj13</source>
+ <translation>Maj13</translation>
+ </message>
+ <message>
+ <source>m13</source>
+ <translation>m13</translation>
+ </message>
+ <message>
+ <source>m-Maj13</source>
+ <translation>m-Maj13</translation>
+ </message>
+ <message>
+ <source>Harmonic minor</source>
+ <translation>Harmonic minor</translation>
+ </message>
+ <message>
+ <source>Melodic minor</source>
+ <translation>Melodic minor</translation>
+ </message>
+ <message>
+ <source>Whole tone</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Diminished</source>
+ <translation>Diminished</translation>
+ </message>
+ <message>
+ <source>Major pentatonic</source>
+ <translation>Major pentatonic</translation>
+ </message>
+ <message>
+ <source>Minor pentatonic</source>
+ <translation>Minor pentatonic</translation>
+ </message>
+ <message>
+ <source>Jap in sen</source>
+ <translation>Jap in sen</translation>
+ </message>
+ <message>
+ <source>Major bebop</source>
+ <translation>Major bebop</translation>
+ </message>
+ <message>
+ <source>Dominant bebop</source>
+ <translation>Dominant bebop</translation>
+ </message>
+ <message>
+ <source>Blues</source>
+ <translation>Blues</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabic</translation>
+ </message>
+ <message>
+ <source>Enigmatic</source>
+ <translation>Enigmatic</translation>
+ </message>
+ <message>
+ <source>Neopolitan</source>
+ <translation>Neopolitan</translation>
+ </message>
+ <message>
+ <source>Neopolitan minor</source>
+ <translation>Neopolitan minor</translation>
+ </message>
+ <message>
+ <source>Hungarian minor</source>
+ <translation>Hungarian minor</translation>
+ </message>
+ <message>
+ <source>Dorian</source>
+ <translation>Dorian</translation>
+ </message>
+ <message>
+ <source>Phrygolydian</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Lydian</source>
+ <translation>Lydian</translation>
+ </message>
+ <message>
+ <source>Mixolydian</source>
+ <translation>Mixolydian</translation>
+ </message>
+ <message>
+ <source>Aeolian</source>
+ <translation>Aeolian</translation>
+ </message>
+ <message>
+ <source>Locrian</source>
+ <translation>Locrian</translation>
+ </message>
+ <message>
+ <source>Chords</source>
+ <translation>Chords</translation>
+ </message>
+ <message>
+ <source>Chord type</source>
+ <translation>Chord type</translation>
+ </message>
+ <message>
+ <source>Chord range</source>
+ <translation>Chord range</translation>
+ </message>
+ <message>
+ <source>Minor</source>
+ <translation>Minor</translation>
+ </message>
+ <message>
+ <source>Chromatic</source>
+ <translation>Chromatic</translation>
+ </message>
+ <message>
+ <source>Half-Whole Diminished</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation>5</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentFunctionNoteStackingView</name>
+ <message>
+ <source>RANGE</source>
+ <translation>范围</translation>
+ </message>
+ <message>
+ <source>Chord range:</source>
+ <translation>和弦范围:</translation>
+ </message>
+ <message>
+ <source>octave(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>STACKING</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chord:</source>
+ <translation>和弦:</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentMidiIOView</name>
+ <message>
+ <source>ENABLE MIDI INPUT</source>
+ <translation>启用MIDI输入</translation>
+ </message>
+ <message>
+ <source>CHANNEL</source>
+ <translation>通道</translation>
+ </message>
+ <message>
+ <source>VELOCITY</source>
+ <translation>力度</translation>
+ </message>
+ <message>
+ <source>ENABLE MIDI OUTPUT</source>
+ <translation>启用MIDI输出</translation>
+ </message>
+ <message>
+ <source>PROGRAM</source>
+ <translation>乐器</translation>
+ </message>
+ <message>
+ <source>MIDI devices to receive MIDI events from</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MIDI devices to send MIDI events to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>NOTE</source>
+ <translation>音符</translation>
+ </message>
+ <message>
+ <source>CUSTOM BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specify the velocity normalization base for MIDI-based instruments at note volume 100%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE VELOCITY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentSoundShaping</name>
+ <message>
+ <source>VOLUME</source>
+ <translation>音量</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation>音量</translation>
+ </message>
+ <message>
+ <source>CUTOFF</source>
+ <translation>切除</translation>
+ </message>
+ <message>
+ <source>Cutoff frequency</source>
+ <translation>切除频率</translation>
+ </message>
+ <message>
+ <source>RESO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Resonance</source>
+ <translation type="unfinished">共鸣</translation>
+ </message>
+ <message>
+ <source>Envelopes/LFOs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter type</source>
+ <translation>过滤器类型</translation>
+ </message>
+ <message>
+ <source>Q/Resonance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LowPass</source>
+ <translation>低通</translation>
+ </message>
+ <message>
+ <source>HiPass</source>
+ <translation>高通</translation>
+ </message>
+ <message>
+ <source>BandPass csg</source>
+ <translation>带通 csg</translation>
+ </message>
+ <message>
+ <source>BandPass czpg</source>
+ <translation>带通 czpg</translation>
+ </message>
+ <message>
+ <source>Notch</source>
+ <translation type="unfinished">凹口滤波器</translation>
+ </message>
+ <message>
+ <source>Allpass</source>
+ <translation type="unfinished">全通</translation>
+ </message>
+ <message>
+ <source>Moog</source>
+ <translation type="unfinished">Moog</translation>
+ </message>
+ <message>
+ <source>2x LowPass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 12dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC LowPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC BandPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RC HighPass 24dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vocal Formant Filter</source>
+ <translation>人声移除过滤器</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentSoundShapingView</name>
+ <message>
+ <source>TARGET</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>These tabs contain envelopes. They're very important for modifying a sound, in that they are almost always necessary for substractive synthesis. For example if you have a volume envelope, you can set when the sound should have a specific volume. If you want to create some soft strings then your sound has to fade in and out very softly. This can be done by setting large attack and release times. It's the same for other envelope targets like panning, cutoff freque [...]
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FILTER</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can select the built-in filter you want to use for this instrument-track. Filters are very important for changing the characteristics of a sound.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hz</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting the cutoff frequency for the selected filter. The cutoff frequency specifies the frequency for cutting the signal by a filter. For example a lowpass-filter cuts all frequencies above the cutoff frequency. A highpass-filter cuts all frequencies below cutoff frequency, and so on...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RESO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Resonance:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>cutoff frequency:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Envelopes, LFOs and filters are not supported by the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentTrack</name>
+ <message>
+ <source>unnamed_track</source>
+ <translation>未命名轨道</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation>音量</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation>声相</translation>
+ </message>
+ <message>
+ <source>Pitch</source>
+ <translation>音高</translation>
+ </message>
+ <message>
+ <source>FX channel</source>
+ <translation>效果通道</translation>
+ </message>
+ <message>
+ <source>Default preset</source>
+ <translation>预置</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the volume of the opened channel.</source>
+ <translation>使用此旋钮可以设置开放通道的音量</translation>
+ </message>
+ <message>
+ <source>Base note</source>
+ <translation>基本音</translation>
+ </message>
+ <message>
+ <source>Pitch range</source>
+ <translation>音域范围</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentTrackView</name>
+ <message>
+ <source>Volume</source>
+ <translation>音量</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation>音量:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation>VOL</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation>声相</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation>声相:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation>PAN</translation>
+ </message>
+ <message>
+ <source>MIDI</source>
+ <translation>MIDI</translation>
+ </message>
+ <message>
+ <source>Input</source>
+ <translation>输入</translation>
+ </message>
+ <message>
+ <source>Output</source>
+ <translation>输出</translation>
+ </message>
+</context>
+<context>
+ <name>InstrumentTrackWindow</name>
+ <message>
+ <source>GENERAL SETTINGS</source>
+ <translation>一般设置</translation>
+ </message>
+ <message>
+ <source>Instrument volume</source>
+ <translation>乐器音量</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation>音量:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation>VOL</translation>
+ </message>
+ <message>
+ <source>Panning</source>
+ <translation>声相</translation>
+ </message>
+ <message>
+ <source>Panning:</source>
+ <translation>声相:</translation>
+ </message>
+ <message>
+ <source>PAN</source>
+ <translation>PAN</translation>
+ </message>
+ <message>
+ <source>Pitch</source>
+ <translation>音高</translation>
+ </message>
+ <message>
+ <source>Pitch:</source>
+ <translation>音高:</translation>
+ </message>
+ <message>
+ <source>cents</source>
+ <translation>音分 cents</translation>
+ </message>
+ <message>
+ <source>PITCH</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>FX channel</source>
+ <translation>效果通道</translation>
+ </message>
+ <message>
+ <source>ENV/LFO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FUNC</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FX</source>
+ <translation>效果</translation>
+ </message>
+ <message>
+ <source>MIDI</source>
+ <translation>MIDI</translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation>保存预置</translation>
+ </message>
+ <message>
+ <source>XML preset file (*.xpf)</source>
+ <translation>XML 预设文件 (*.xpf)</translation>
+ </message>
+ <message>
+ <source>PLUGIN</source>
+ <translation>插件</translation>
+ </message>
+ <message>
+ <source>Pitch range (semitones)</source>
+ <translation>音域范围(半音)</translation>
+ </message>
+ <message>
+ <source>RANGE</source>
+ <translation>范围</translation>
+ </message>
+ <message>
+ <source>Save current instrument track settings in a preset file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LadspaControl</name>
+ <message>
+ <source>Link channels</source>
+ <translation>关联通道</translation>
+ </message>
+</context>
+<context>
+ <name>LadspaControlDialog</name>
+ <message>
+ <source>Link Channels</source>
+ <translation>连接通道</translation>
+ </message>
+ <message>
+ <source>Channel </source>
+ <translation>通道</translation>
+ </message>
+</context>
+<context>
+ <name>LadspaControlView</name>
+ <message>
+ <source>Link channels</source>
+ <translation>连接通道</translation>
+ </message>
+ <message>
+ <source>Value:</source>
+ <translation>值:</translation>
+ </message>
+ <message>
+ <source>Sorry, no help available.</source>
+ <translation>啊哦,这个没有帮助文档。</translation>
+ </message>
+</context>
+<context>
+ <name>LadspaEffect</name>
+ <message>
+ <source>Effect</source>
+ <translation>效果器</translation>
+ </message>
+ <message>
+ <source>Unknown LADSPA plugin %1 requested.</source>
+ <translation>已请求未知 LADSPA 插件 %1.</translation>
+ </message>
+</context>
+<context>
+ <name>LcdSpinBox</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LfoController</name>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Oscillator speed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Oscillator amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Oscillator phase</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Oscillator waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Frequency Multiplier</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LfoControllerDialog</name>
+ <message>
+ <source>LFO</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>todo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SPD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO-speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AMT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phase offset:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>degrees</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a sine-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a triangle-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a saw-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a square-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a a moog saw-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for an exponential wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for white-noise.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a user-defined shape.
+Double click to pick a file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>Working directory</source>
+ <translation>工作目录</translation>
+ </message>
+ <message>
+ <source>The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings.</source>
+ <translation>LMMS工作目录%1不存在,现在新建一个吗?你可以稍后在 编辑 -> 设置 中更改此设置。</translation>
+ </message>
+ <message>
+ <source>Could not save config-file</source>
+ <translation>不能保存配置文件</translation>
+ </message>
+ <message>
+ <source>Could not save configuration file %1. You're probably not permitted to write to this file.
+Please make sure you have write-access to the file and try again.</source>
+ <translation>不能保存配置文件%1,你可能没有写权限。
+请确保你可以写入这个文件并重试。</translation>
+ </message>
+ <message>
+ <source>&Project</source>
+ <translation>工程(&P)</translation>
+ </message>
+ <message>
+ <source>&New</source>
+ <translation>新建(&N)</translation>
+ </message>
+ <message>
+ <source>&Open...</source>
+ <translation>打开(&O)...</translation>
+ </message>
+ <message>
+ <source>Recently opened projects</source>
+ <translation>最近打开的工程</translation>
+ </message>
+ <message>
+ <source>&Save</source>
+ <translation>保存(&S)...</translation>
+ </message>
+ <message>
+ <source>Save &As...</source>
+ <translation>另存为(&A)...</translation>
+ </message>
+ <message>
+ <source>Import...</source>
+ <translation>导入...</translation>
+ </message>
+ <message>
+ <source>E&xport...</source>
+ <translation>导出(&E)...</translation>
+ </message>
+ <message>
+ <source>&Quit</source>
+ <translation>退出(&Q)</translation>
+ </message>
+ <message>
+ <source>&Edit</source>
+ <translation>编辑(&E)</translation>
+ </message>
+ <message>
+ <source>Settings</source>
+ <translation>设置</translation>
+ </message>
+ <message>
+ <source>&Tools</source>
+ <translation>工具(&T)</translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>帮助(&H)</translation>
+ </message>
+ <message>
+ <source>Online help</source>
+ <translation>在线帮助</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>帮助</translation>
+ </message>
+ <message>
+ <source>What's this?</source>
+ <translation>这是什么?</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>关于</translation>
+ </message>
+ <message>
+ <source>Create new project</source>
+ <translation>新建工程</translation>
+ </message>
+ <message>
+ <source>Create new project from template</source>
+ <translation>从模版新建工程</translation>
+ </message>
+ <message>
+ <source>Open existing project</source>
+ <translation>打开已有工程</translation>
+ </message>
+ <message>
+ <source>Recently opened project</source>
+ <translation>最近打开的工程</translation>
+ </message>
+ <message>
+ <source>Save current project</source>
+ <translation>保存当前工程</translation>
+ </message>
+ <message>
+ <source>Export current project</source>
+ <translation>导出当前工程</translation>
+ </message>
+ <message>
+ <source>Show/hide Song-Editor</source>
+ <translation>显示/隐藏歌曲编辑器</translation>
+ </message>
+ <message>
+ <source>By pressing this button, you can show or hide the Song-Editor. With the help of the Song-Editor you can edit song-playlist and specify when which track should be played. You can also insert and move samples (e.g. rap samples) directly into the playlist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide Beat+Bassline Editor</source>
+ <translation>显示/隐藏节拍+旋律编辑器</translation>
+ </message>
+ <message>
+ <source>By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide Piano-Roll</source>
+ <translation>显示/隐藏钢琴窗</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide Automation Editor</source>
+ <translation>显示/隐藏自动控制编辑器</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide FX Mixer</source>
+ <translation>显示/隐藏混音器</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide project notes</source>
+ <translation>显示/隐藏工程注释</translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the project notes window. In this window you can put down your project notes.</source>
+ <translation>点击这里显示或隐藏工程注释窗。在此窗口中你可以写下工程的注释。</translation>
+ </message>
+ <message>
+ <source>Show/hide controller rack</source>
+ <translation>显示/隐藏控制器机架</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>未标题</translation>
+ </message>
+ <message>
+ <source>LMMS %1</source>
+ <translation>LMMS %1</translation>
+ </message>
+ <message>
+ <source>Project not saved</source>
+ <translation>工程未保存</translation>
+ </message>
+ <message>
+ <source>The current project was modified since last saving. Do you want to save it now?</source>
+ <translation>此工程自上次保存后有了修改,你想保存吗?</translation>
+ </message>
+ <message>
+ <source>Open project</source>
+ <translation>打开工程</translation>
+ </message>
+ <message>
+ <source>Save project</source>
+ <translation>保存工程</translation>
+ </message>
+ <message>
+ <source>Help not available</source>
+ <translation>帮助不可用</translation>
+ </message>
+ <message>
+ <source>Currently there's no help available in LMMS.
+Please visit http://lmms.sf.net/wiki for documentation on LMMS.</source>
+ <translation>LMMS现在没有可用的帮助
+请访问 http://lmms.sf.net/wiki 了解LMMS的相关文档。</translation>
+ </message>
+ <message>
+ <source>My projects</source>
+ <translation>我的工程</translation>
+ </message>
+ <message>
+ <source>My samples</source>
+ <translation>我的采样</translation>
+ </message>
+ <message>
+ <source>My presets</source>
+ <translation>我的预置</translation>
+ </message>
+ <message>
+ <source>My home</source>
+ <translation>我的主目录</translation>
+ </message>
+ <message>
+ <source>My computer</source>
+ <translation>我的电脑</translation>
+ </message>
+ <message>
+ <source>Root directory</source>
+ <translation>根目录</translation>
+ </message>
+ <message>
+ <source>Save as new &version</source>
+ <translation>保存为新版本(&V)</translation>
+ </message>
+ <message>
+ <source>E&xport tracks...</source>
+ <translation>导出音轨(&E)...</translation>
+ </message>
+ <message>
+ <source>LMMS (*.mmp *.mmpz)</source>
+ <translation>LMMS (*.mmp *.mmpz)</translation>
+ </message>
+ <message>
+ <source>Version %1</source>
+ <translation>版本 %1</translation>
+ </message>
+ <message>
+ <source>Project recovery</source>
+ <translation>工程恢复</translation>
+ </message>
+ <message>
+ <source>It looks like the last session did not end properly. Do you want to recover the project of this session?</source>
+ <translation>好像上次会话未能正常退出,你想要恢复上次会话未保存的工程吗?</translation>
+ </message>
+ <message>
+ <source>Configuration file</source>
+ <translation>配置文件</translation>
+ </message>
+ <message>
+ <source>Error while parsing configuration file at line %1:%2: %3</source>
+ <translation>解析配置文件发生错误(行%1:%2:%3)</translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation>撤销</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>重做</translation>
+ </message>
+ <message>
+ <source>LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt)</source>
+ <translation>LMMS 工程 (*.mmpz *.mmp);;LMMS 工程模板 (*.mpt)</translation>
+ </message>
+ <message>
+ <source>Volumes</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MeterDialog</name>
+ <message>
+ <source>Meter Numerator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Meter Denominator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TIME SIG</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MeterModel</name>
+ <message>
+ <source>Numerator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Denominator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MidiAlsaRaw::setupWidget</name>
+ <message>
+ <source>DEVICE</source>
+ <translation type="unfinished">设备</translation>
+ </message>
+</context>
+<context>
+ <name>MidiAlsaSeq::setupWidget</name>
+ <message>
+ <source>DEVICE</source>
+ <translation>设备</translation>
+ </message>
+</context>
+<context>
+ <name>MidiController</name>
+ <message>
+ <source>MIDI Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>unnamed_midi_controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MidiImport</name>
+ <message>
+ <source>Setup incomplete</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MidiOss::setupWidget</name>
+ <message>
+ <source>DEVICE</source>
+ <translation>设备</translation>
+ </message>
+</context>
+<context>
+ <name>MidiPort</name>
+ <message>
+ <source>Input channel</source>
+ <translation>输入通道</translation>
+ </message>
+ <message>
+ <source>Output channel</source>
+ <translation>输出通道</translation>
+ </message>
+ <message>
+ <source>Input controller</source>
+ <translation>输入控制器</translation>
+ </message>
+ <message>
+ <source>Output controller</source>
+ <translation>输出控制器</translation>
+ </message>
+ <message>
+ <source>Fixed input velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fixed output velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output MIDI program</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Receive MIDI-events</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send MIDI-events</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fixed output note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base velocity</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroInstrument</name>
+ <message>
+ <source>Osc 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 1 Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 1 Fine detune left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 1 Fine detune right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 1 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 1 Pulse width</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 1 Sync send on rise</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 1 Sync send on fall</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Fine detune left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Fine detune right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Sync Hard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 2 Sync Reverse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Stereo phase offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Sub-oscillator mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Waveform 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Waveform 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Sync Hard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc 3 Sync Reverse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO 1 Waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO 1 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO 1 Rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO 1 Phase</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO 2 Waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO 2 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO 2 Rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO 2 Phase</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Pre-delay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 1 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Pre-delay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env 2 Slope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc2-3 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vol3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phs3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit2-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pit3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PW1-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-Env2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sub3-LFO2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MonstroView</name>
+ <message>
+ <source>Operators view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Operators view contains all the operators. These include both audible operators (oscillators) and inaudible operators, or modulators: Low-frequency oscillators and Envelopes.
+
+Knobs and other widgets in the Operators view have their own what's this -texts, so you can get more specific help for them that way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Matrix view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Matrix view contains the modulation matrix. Here you can define the modulation relationships between the various operators: Each audible operator (oscillators 1-3) has 3-4 properties that can be modulated by any of the modulators. Using more modulations consumes more CPU power.
+
+The view is divided to modulation targets, grouped by the target oscillator. Available targets are volume, pitch, phase, pulse width and sub-osc ratio. Note: some targets are specific to one oscillator only.
+
+Each modulation target has 4 knobs, one for each modulator. By default the knobs are at 0, which means no modulation. Turning a knob to 1 causes that modulator to affect the modulation target as much as possible. Turning it to -1 does the same, but the modulation is inversed. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix Osc2 with Osc3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate frequency of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of Osc3 with Osc2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 1 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 2 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The CRS knob changes the tuning of oscillator 3 in semitone steps. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FTL and FTR change the finetuning of the oscillator for left and right channels respectively. These can add stereo-detuning to the oscillator which widens the stereo image and causes an illusion of space. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The PW knob controls the pulse width, also known as duty cycle, of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, it doesn't produce bandlimited output, which means that you can use it as an audible oscillator but it will cause aliasing. You can also use it as an inaudible source of a sync signal, which can be used to synchronize oscillators 2 and 3. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Rise: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from low to high, ie. when the amplitude changes from -1 to 1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Send Sync on Fall: When enabled, the Sync signal is sent every time the state of oscillator 1 changes from high to low, ie. when the amplitude changes from 1 to -1. Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, but its volume has no effect on them. Sync signals are sent independently for both left and right channels. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. Each sub-osc can be set to produce a different waveform, and oscillator 3 can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied to both sub-oscs/waveforms in the exact same way. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+Mix mode means no modulation: the outputs of the oscillators are simply mixed together. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch than "pure" frequency modulation. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by the output of oscillator 2.
+
+PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. It differs from frequency modulation in that the phase changes are not cumulative. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 1.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select the waveform for LFO 2.
+"Random" and "Random smooth" are special waveforms: they produce random output, where the rate of the LFO controls how often the state of the LFO changes. The smooth version interpolates between these states with cosine interpolation. These random modes can be used to give "life" to your presets - add some of that analog unpredictability... </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack causes the LFO to come on gradually from the start of the note. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PHS controls the phase offset of the LFO. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>HOLD controls how long the envelope stays at peak after the attack phase. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds it would take to go from peak to zero. The actual decay may be shorter if sustain is used. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level as long as the note is held. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>REL, or release, controls how long the release is for the note, measured in how long it would take to fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. Negative values create curves that start slowly, peak quickly and fall of slowly again. Positive values create curves that start and end quickly, and stay longer near the peaks. </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NesInstrument</name>
+ <message>
+ <source>Channel 1 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Duty cycle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 Sweep rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Coarse detune</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Envelope length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 Noise frequency sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation type="unfinished">主音量</translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OscillatorObject</name>
+ <message>
+ <source>Osc %1 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 panning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 wave shape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation type %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PatmanView</name>
+ <message>
+ <source>Open other patch</source>
+ <translation>打开其他音色</translation>
+ </message>
+ <message>
+ <source>Click here to open another patch-file. Loop and Tune settings are not reset.</source>
+ <translation>点击这里打开另一个音色文件。循环和调音设置不会被重设。</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation>循环</translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation>循环模式</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file.</source>
+ <translation>在这里你可以开关循环模式。如果启用,PatMan 会使用文件中的循环信息。</translation>
+ </message>
+ <message>
+ <source>Tune</source>
+ <translation>调音</translation>
+ </message>
+ <message>
+ <source>Tune mode</source>
+ <translation>调音模式</translation>
+ </message>
+ <message>
+ <source>Here you can toggle the Tune mode. If enabled, PatMan will tune the sample to match the note's frequency.</source>
+ <translation>这里可以开关调音模式。如果启用,PatMan 会将采样调成和音符一样的频率。</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <translation>未选择文件</translation>
+ </message>
+ <message>
+ <source>Open patch file</source>
+ <translation>打开音色文件</translation>
+ </message>
+ <message>
+ <source>Patch-Files (*.pat)</source>
+ <translation>音色文件 (*.pat)</translation>
+ </message>
+</context>
+<context>
+ <name>PatternView</name>
+ <message>
+ <source>double-click to open this pattern in piano-roll
+use mouse wheel to set volume of a step</source>
+ <translation>双击在钢琴窗中打开此片段
+使用鼠标滑轮设置此音阶的音量</translation>
+ </message>
+ <message>
+ <source>Open in piano-roll</source>
+ <translation>在钢琴窗中打开</translation>
+ </message>
+ <message>
+ <source>Clear all notes</source>
+ <translation>清除所有音符</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>重置名称</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>修改名称</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>添加音阶</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>移除音阶</translation>
+ </message>
+</context>
+<context>
+ <name>PeakController</name>
+ <message>
+ <source>Peak Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak Controller Bug</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Due to a bug in older version of LMMS, the peak controllers may not be connect properly. Please ensure that peak controllers are connected properly and re-save this file. Sorry for any inconvenience caused.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerDialog</name>
+ <message>
+ <source>PEAK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Controller</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControlDialog</name>
+ <message>
+ <source>BASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished">打进声</translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>AMNT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MULT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATCK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DCAY</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PeakControllerEffectControls</name>
+ <message>
+ <source>Base value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulation amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack</source>
+ <translation type="unfinished">打进声</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation type="unfinished">释放</translation>
+ </message>
+ <message>
+ <source>Abs Value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Amount Multiplicator</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoRoll</name>
+ <message>
+ <source>Play/pause current pattern (Space)</source>
+ <translation>播放/暂停当前片段(空格)</translation>
+ </message>
+ <message>
+ <source>Stop playing of current pattern (Space)</source>
+ <translation>停止当前片段(空格)</translation>
+ </message>
+ <message>
+ <source>Cut selected notes (Ctrl+X)</source>
+ <translation>剪切选定音符 (Ctrl+X)</translation>
+ </message>
+ <message>
+ <source>Copy selected notes (Ctrl+C)</source>
+ <translation>复制选定音符 (Ctrl+C)</translation>
+ </message>
+ <message>
+ <source>Paste notes from clipboard (Ctrl+V)</source>
+ <translation>从剪贴板粘贴音符 (Ctrl+V)</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - no pattern</source>
+ <translation>钢琴窗 - 没有片段</translation>
+ </message>
+ <message>
+ <source>Piano-Roll - %1</source>
+ <translation>钢琴窗 - %1</translation>
+ </message>
+ <message>
+ <source>Please open a pattern by double-clicking on it!</source>
+ <translation>双击打开片段!</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano</source>
+ <translation>从 MIDI 设备/通道钢琴(channel-piano) 录制音符</translation>
+ </message>
+ <message>
+ <source>Record notes from MIDI-device/channel-piano while playing song or BB track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw mode (Shift+D)</source>
+ <translation>绘制模式 (Shift+D)</translation>
+ </message>
+ <message>
+ <source>Erase mode (Shift+E)</source>
+ <translation>擦除模式 (Shift+E)</translation>
+ </message>
+ <message>
+ <source>Select mode (Shift+S)</source>
+ <translation>选择模式 (Shift+S)</translation>
+ </message>
+ <message>
+ <source>Last note</source>
+ <translation>上一个音符</translation>
+ </message>
+ <message>
+ <source>Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to stop playback of current pattern.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and the notes from the clipboard will be pasted at the first visible measure.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note lock</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Note Volume</source>
+ <translation>音符音量</translation>
+ </message>
+ <message>
+ <source>Note Panning</source>
+ <translation>音符声相偏移</translation>
+ </message>
+ <message>
+ <source>Detune mode (Shift+T)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark/unmark current semitone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mark current chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unmark all</source>
+ <translation>取消标记所有</translation>
+ </message>
+ <message>
+ <source>No scale</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No chord</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume: %1%</source>
+ <translation>音量:%1%</translation>
+ </message>
+ <message>
+ <source>Panning: %1% left</source>
+ <translation>声相:%1% 偏左</translation>
+ </message>
+ <message>
+ <source>Panning: %1% right</source>
+ <translation>声相:%1% 偏右</translation>
+ </message>
+ <message>
+ <source>Panning: center</source>
+ <translation>声相:居中</translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation>请输入一个介于 %1 和 %2 的值:</translation>
+ </message>
+ <message>
+ <source>This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PianoView</name>
+ <message>
+ <source>Base note</source>
+ <translation>基本音</translation>
+ </message>
+</context>
+<context>
+ <name>Plugin</name>
+ <message>
+ <source>Plugin not found</source>
+ <translation>未找到插件</translation>
+ </message>
+ <message>
+ <source>The plugin "%1" wasn't found or could not be loaded!
+Reason: "%2"</source>
+ <translation>插件“%1”无法找到或无法载入!
+原因:%2</translation>
+ </message>
+ <message>
+ <source>Error while loading plugin</source>
+ <translation>载入插件时发生错误</translation>
+ </message>
+ <message>
+ <source>Failed to load plugin "%1"!</source>
+ <translation>载入插件“%1”失败!</translation>
+ </message>
+ <message>
+ <source>LMMS plugin %1 does not have a plugin descriptor named %2!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProjectRenderer</name>
+ <message>
+ <source>WAV-File (*.wav)</source>
+ <translation>WAV-文件 (*.wav)</translation>
+ </message>
+ <message>
+ <source>Compressed OGG-File (*.ogg)</source>
+ <translation>压缩的 OGG 文件(*.ogg)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>C</source>
+ <comment>Note name</comment>
+ <translation>C</translation>
+ </message>
+ <message>
+ <source>Db</source>
+ <comment>Note name</comment>
+ <translation>Db</translation>
+ </message>
+ <message>
+ <source>C#</source>
+ <comment>Note name</comment>
+ <translation>C#</translation>
+ </message>
+ <message>
+ <source>D</source>
+ <comment>Note name</comment>
+ <translation>D</translation>
+ </message>
+ <message>
+ <source>Eb</source>
+ <comment>Note name</comment>
+ <translation>Eb</translation>
+ </message>
+ <message>
+ <source>D#</source>
+ <comment>Note name</comment>
+ <translation>D#</translation>
+ </message>
+ <message>
+ <source>E</source>
+ <comment>Note name</comment>
+ <translation>E</translation>
+ </message>
+ <message>
+ <source>Fb</source>
+ <comment>Note name</comment>
+ <translation>Fb</translation>
+ </message>
+ <message>
+ <source>Gb</source>
+ <comment>Note name</comment>
+ <translation>Gb</translation>
+ </message>
+ <message>
+ <source>F#</source>
+ <comment>Note name</comment>
+ <translation>F#</translation>
+ </message>
+ <message>
+ <source>G</source>
+ <comment>Note name</comment>
+ <translation>G</translation>
+ </message>
+ <message>
+ <source>Ab</source>
+ <comment>Note name</comment>
+ <translation>Ab</translation>
+ </message>
+ <message>
+ <source>G#</source>
+ <comment>Note name</comment>
+ <translation>G#</translation>
+ </message>
+ <message>
+ <source>A</source>
+ <comment>Note name</comment>
+ <translation>A</translation>
+ </message>
+ <message>
+ <source>Bb</source>
+ <comment>Note name</comment>
+ <translation>Bb</translation>
+ </message>
+ <message>
+ <source>A#</source>
+ <comment>Note name</comment>
+ <translation>A#</translation>
+ </message>
+ <message>
+ <source>B</source>
+ <comment>Note name</comment>
+ <translation>B</translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>Name: </source>
+ <translation>名称:</translation>
+ </message>
+ <message>
+ <source>Maker: </source>
+ <translation>制作者:</translation>
+ </message>
+ <message>
+ <source>Copyright: </source>
+ <translation>版权:</translation>
+ </message>
+ <message>
+ <source>Requires Real Time: </source>
+ <translation>需要实时:</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>是</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>否</translation>
+ </message>
+ <message>
+ <source>Real Time Capable: </source>
+ <translation>是否支持实时:</translation>
+ </message>
+ <message>
+ <source>In Place Broken: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channels In: </source>
+ <translation>输入通道:</translation>
+ </message>
+ <message>
+ <source>Channels Out: </source>
+ <translation>输出通道:</translation>
+ </message>
+ <message>
+ <source>File: </source>
+ <translation>文件:</translation>
+ </message>
+ <message>
+ <source>File: %1</source>
+ <translation>文件:%1</translation>
+ </message>
+</context>
+<context>
+ <name>SampleBuffer</name>
+ <message>
+ <source>Open audio file</source>
+ <translation>打开音频文件</translation>
+ </message>
+ <message>
+ <source>Wave-Files (*.wav)</source>
+ <translation>Wave波形文件 (*.wav)</translation>
+ </message>
+ <message>
+ <source>OGG-Files (*.ogg)</source>
+ <translation>OGG-文件 (*.ogg)</translation>
+ </message>
+ <message>
+ <source>DrumSynth-Files (*.ds)</source>
+ <translation>DrumSynth-文件 (*.ds)</translation>
+ </message>
+ <message>
+ <source>FLAC-Files (*.flac)</source>
+ <translation>FLAC-文件 (*.flac)</translation>
+ </message>
+ <message>
+ <source>SPEEX-Files (*.spx)</source>
+ <translation>SPEEX-文件 (*.spx)</translation>
+ </message>
+ <message>
+ <source>VOC-Files (*.voc)</source>
+ <translation>VOC-文件 (*.voc)</translation>
+ </message>
+ <message>
+ <source>AIFF-Files (*.aif *.aiff)</source>
+ <translation>AIFF-文件 (*.aif *.aiff)</translation>
+ </message>
+ <message>
+ <source>AU-Files (*.au)</source>
+ <translation>AU-文件 (*.au)</translation>
+ </message>
+ <message>
+ <source>RAW-Files (*.raw)</source>
+ <translation>RAW-文件 (*.raw)</translation>
+ </message>
+ <message>
+ <source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
+ <translation>所有音频文件 (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTCOView</name>
+ <message>
+ <source>double-click to select sample</source>
+ <translation>双击选择采样</translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation>删除 (鼠标中键)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>剪切</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>复制</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>粘贴</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation>静音/取消静音 (<Ctrl> + 鼠标中键)</translation>
+ </message>
+ <message>
+ <source>Set/clear record</source>
+ <translation>设置/清除录制</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrack</name>
+ <message>
+ <source>Sample track</source>
+ <translation>采样轨道</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation>音量</translation>
+ </message>
+</context>
+<context>
+ <name>SampleTrackView</name>
+ <message>
+ <source>Track volume</source>
+ <translation>轨道音量</translation>
+ </message>
+ <message>
+ <source>Channel volume:</source>
+ <translation>通道音量:</translation>
+ </message>
+ <message>
+ <source>VOL</source>
+ <translation>VOL</translation>
+ </message>
+</context>
+<context>
+ <name>SongEditor</name>
+ <message>
+ <source>Song-Editor</source>
+ <translation>歌曲编辑器</translation>
+ </message>
+ <message>
+ <source>Play song (Space)</source>
+ <translation>播放歌曲(空格)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing.</source>
+ <translation>点击这里完整播放歌曲。将从绿色歌曲标记开始播放。在播放的同时可以对它进行移动。</translation>
+ </message>
+ <message>
+ <source>Stop song (Space)</source>
+ <translation>停止歌曲(空格)</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song.</source>
+ <translation>点击这里停止播放,歌曲位置标记会跳到歌曲的开头。</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>添加节拍/低音线</translation>
+ </message>
+ <message>
+ <source>Add sample-track</source>
+ <translation>添加采样轨道</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>无法打开文件</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>无法写入文件</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>添加自动化轨道</translation>
+ </message>
+ <message>
+ <source>Draw mode</source>
+ <translation>绘制模式</translation>
+ </message>
+ <message>
+ <source>Edit mode (select and move)</source>
+ <translation>编辑模式(选定和移动)</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device</source>
+ <translation>从音频设备录制样本</translation>
+ </message>
+ <message>
+ <source>Record samples from Audio-device while playing song or BB track</source>
+ <translation>在播放歌曲或BB轨道时从音频设备录入样本</translation>
+ </message>
+ <message>
+ <source>Could not open file %1. You probably have no permissions to read this file.
+ Please make sure to have at least read permissions to the file and try again.</source>
+ <translation>无法打开 %1 。或许没有权限读此文件。
+请确保您拥有对此文件的读权限,然后重试。</translation>
+ </message>
+ <message>
+ <source>Error in file</source>
+ <translation>文件错误</translation>
+ </message>
+ <message>
+ <source>The file %1 seems to contain errors and therefore can't be loaded.</source>
+ <translation>文件 %1 似乎包含错误,无法被加载。</translation>
+ </message>
+ <message>
+ <source>Tempo</source>
+ <translation>节奏</translation>
+ </message>
+ <message>
+ <source>TEMPO/BPM</source>
+ <translation>节奏/BPM</translation>
+ </message>
+ <message>
+ <source>tempo of song</source>
+ <translation>歌曲的节奏</translation>
+ </message>
+ <message>
+ <source>The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>High quality mode</source>
+ <translation>高质量模式</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>主音量</translation>
+ </message>
+ <message>
+ <source>master volume</source>
+ <translation>主音量</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation>主音高</translation>
+ </message>
+ <message>
+ <source>master pitch</source>
+ <translation>主音高</translation>
+ </message>
+ <message>
+ <source>Value: %1%</source>
+ <translation>值: %1%</translation>
+ </message>
+ <message>
+ <source>Value: %1 semitones</source>
+ <translation>值: %1 半音程</translation>
+ </message>
+ <message>
+ <source>Could not open %1 for writing. You probably are not permitted to write to this file. Please make sure you have write-access to the file and try again.</source>
+ <translation>无法打开 %1 写入数据。或许没有权限修改此文件。请确保您拥有对此文件的写权限,然后重试。</translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControlDialog</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation>线性频谱图</translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SpectrumAnalyzerControls</name>
+ <message>
+ <source>Linear spectrum</source>
+ <translation>线性频谱图</translation>
+ </message>
+ <message>
+ <source>Linear Y axis</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TempoSyncKnob</name>
+ <message>
+ <source>Tempo Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eight beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Whole note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Half note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Quarter note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>8th note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>16th note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>32nd note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Custom...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Custom </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Eight Beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Whole Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Half Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to Quarter Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 8th Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 16th Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synced to 32nd Note</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimeDisplayWidget</name>
+ <message>
+ <source>click to change time units</source>
+ <translation>点击改变时间单位</translation>
+ </message>
+</context>
+<context>
+ <name>TrackContainer</name>
+ <message>
+ <source>Couldn't import file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't find a filter for importing file %1.
+You should convert this file into a format supported by LMMS using another software.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't open file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Couldn't open file %1 for reading.
+Please make sure you have read-permission to the file and the directory containing the file and try again!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading project...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>取消</translation>
+ </message>
+ <message>
+ <source>Please wait...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Importing MIDI-file...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Importing FLP-file...</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TripleOscillatorView</name>
+ <message>
+ <source>Use phase modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use amplitude modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of oscillator 1 & 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synchronize oscillator 1 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use frequency modulation for modulating oscillator 2 with oscillator 1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use phase modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use amplitude modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of oscillator 2 & 3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Synchronize oscillator 2 with oscillator 3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use frequency modulation for modulating oscillator 3 with oscillator 2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the volume of oscillator %1. When setting a value of 0 the oscillator is turned off. Otherwise you can hear the oscillator as loud as you set it here.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the panning of the oscillator %1. A value of -100 means 100% left and a value of 100 moves oscillator-output right.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 coarse detuning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>semitones</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 12 semitones (1 octave) up and down. This is useful for creating sounds with a chord.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning left:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>cents</source>
+ <translation>音分 cents</translation>
+ </message>
+ <message>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the left channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 fine detuning right:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the fine detuning of oscillator %1 for the right channel. The fine-detuning is ranged between -100 cents and +100 cents. This is useful for creating "fat" sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 phase-offset:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>degrees</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the phase-offset of oscillator %1. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo phase-detuning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>With this knob you can set the stereo phase-detuning of oscillator %1. The stereo phase-detuning specifies the size of the difference between the phase-offset of left and right channel. This is very good for creating wide stereo sounds.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a sine-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a triangle-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a square-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a moog-like saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use an exponential wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use white-noise for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a user-defined waveform for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Ui</name>
+ <message>
+ <source>Contributors ordered by number of commits:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Involved</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VersionedSaveDialog</name>
+ <message>
+ <source>Increment version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrement version number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VestigeInstrumentView</name>
+ <message>
+ <source>Open other VST-plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another VST-plugin. After clicking on this button, a file-open-dialog appears and you can select your file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show/hide GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of your VST-plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turn off all notes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DLL-files (*.dll)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>EXE-files (*.exe)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No VST-plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished">保存预置</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>by </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstEffectControlDialog</name>
+ <message>
+ <source>Show/hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control VST-plugin from LMMS host</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to control VST-plugin from host.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open VST-plugin preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to open another *.fxp, *.fxb VST-plugin preset.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous (-)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here, if you want to switch to another VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next (+)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to select presets that are currently loaded in VST.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save preset</source>
+ <translation type="unfinished">保存预置</translation>
+ </message>
+ <message>
+ <source>Click here, if you want to save current VST-plugin preset program.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Effect by: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> <br /></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>VstPlugin</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation type="unfinished">载入插件</translation>
+ </message>
+ <message>
+ <source>Open Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vst Plugin Preset (*.fxp *.fxb)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>: default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>"</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>'</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Preset</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxp</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.FXB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>.fxb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST plugin...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed loading VST plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The VST plugin %1 could not be loaded for some reason.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynInstrument</name>
+ <message>
+ <source>Volume A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Panning B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freq. multiplier B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Left detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right detune B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope hold</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A-B Mix envelope decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A1-B2 Crosstalk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A2-A1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>B2-B1 modulation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Selected graph</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WatsynView</name>
+ <message>
+ <source>Select oscillator A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select oscillator B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of A2 to A1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-modulate A1 and A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of A1 with output of A2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mix output of B2 to B1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate amplitude of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-modulate B1 and B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulate phase of B1 with output of B2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Load waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to load a waveform from a sample file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phase left</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to shift phase by -15 degrees</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Phase right</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to shift phase by +15 degrees</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Normalize</source>
+ <translation type="unfinished">标准化</translation>
+ </message>
+ <message>
+ <source>Click to normalize</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invert</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click to invert</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth</source>
+ <translation type="unfinished">平滑</translation>
+ </message>
+ <message>
+ <source>Click to smooth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click for sine wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click for triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click for saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Square wave</source>
+ <translation type="unfinished">方波</translation>
+ </message>
+ <message>
+ <source>Click for square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ZynAddSubFxInstrument</name>
+ <message>
+ <source>Portamento</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter Resonance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandwidth</source>
+ <translation>带宽</translation>
+ </message>
+ <message>
+ <source>FM Gain</source>
+ <translation>FM 增益</translation>
+ </message>
+ <message>
+ <source>Resonance Center Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Resonance Bandwidth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forward MIDI Control Change Events</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ZynAddSubFxView</name>
+ <message>
+ <source>Show GUI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portamento:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PORT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter Frequency:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FREQ</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter Resonance:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RES</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandwidth:</source>
+ <translation>带宽:</translation>
+ </message>
+ <message>
+ <source>BW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FM Gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FM GAIN</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Resonance center frequency:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RES CF</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Resonance bandwidth:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RES BW</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Forward MIDI Control Changes</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>audioFileProcessor</name>
+ <message>
+ <source>Amplify</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start of sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>End of sample</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reverse sample</source>
+ <translation type="unfinished">反转采样</translation>
+ </message>
+ <message>
+ <source>Stutter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loopback point</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loop mode</source>
+ <translation type="unfinished">循环模式</translation>
+ </message>
+ <message>
+ <source>Interpolation mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Linear</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sinc</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>bbEditor</name>
+ <message>
+ <source>Beat+Bassline Editor</source>
+ <translation>节拍+低音线编辑器</translation>
+ </message>
+ <message>
+ <source>Play/pause current beat/bassline (Space)</source>
+ <translation>播放/暂停当前节拍/低音线(空格)</translation>
+ </message>
+ <message>
+ <source>Add beat/bassline</source>
+ <translation>添加节拍/低音线</translation>
+ </message>
+ <message>
+ <source>Add automation-track</source>
+ <translation>添加自动轨道</translation>
+ </message>
+ <message>
+ <source>Stop playback of current beat/bassline (Space)</source>
+ <translation>停止播放当前节拍/低音线(空格)</translation>
+ </message>
+ <message>
+ <source>Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached.</source>
+ <translation>点击这里停止播放当前节拍/低音线。当结束时节拍/低音线会自动循环播放。</translation>
+ </message>
+ <message>
+ <source>Click here to stop playing of current beat/bassline.</source>
+ <translation>点击这里停止播发当前节拍/低音线。</translation>
+ </message>
+ <message>
+ <source>Remove steps</source>
+ <translation>移除音阶</translation>
+ </message>
+ <message>
+ <source>Add steps</source>
+ <translation>添加音阶</translation>
+ </message>
+</context>
+<context>
+ <name>bbTCOView</name>
+ <message>
+ <source>Open in Beat+Bassline-Editor</source>
+ <translation>在节拍+低音线编辑器中打开</translation>
+ </message>
+ <message>
+ <source>Reset name</source>
+ <translation>重置名称</translation>
+ </message>
+ <message>
+ <source>Change name</source>
+ <translation>修改名称</translation>
+ </message>
+ <message>
+ <source>Change color</source>
+ <translation>改变颜色</translation>
+ </message>
+ <message>
+ <source>Reset color to default</source>
+ <translation>重置颜色</translation>
+ </message>
+</context>
+<context>
+ <name>bbTrack</name>
+ <message>
+ <source>Beat/Bassline %1</source>
+ <translation>节拍/低音线 %1</translation>
+ </message>
+ <message>
+ <source>Clone of %1</source>
+ <translation>%1 的副本</translation>
+ </message>
+</context>
+<context>
+ <name>bitInvader</name>
+ <message>
+ <source>Samplelength</source>
+ <translation>采样长度</translation>
+ </message>
+</context>
+<context>
+ <name>bitInvaderView</name>
+ <message>
+ <source>Sample Length</source>
+ <translation>采样长度</translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Saw wave</source>
+ <translation type="unfinished">锯齿波</translation>
+ </message>
+ <message>
+ <source>Square wave</source>
+ <translation type="unfinished">方波</translation>
+ </message>
+ <message>
+ <source>White noise wave</source>
+ <translation type="unfinished">白噪音</translation>
+ </message>
+ <message>
+ <source>User defined wave</source>
+ <translation type="unfinished">用户自定义波形</translation>
+ </message>
+ <message>
+ <source>Smooth</source>
+ <translation type="unfinished">平滑</translation>
+ </message>
+ <message>
+ <source>Click here to smooth waveform.</source>
+ <translation type="unfinished">点击这里平滑波形。</translation>
+ </message>
+ <message>
+ <source>Interpolation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Normalize</source>
+ <translation type="unfinished">标准化</translation>
+ </message>
+ <message>
+ <source>Draw your own waveform here by dragging your mouse on this graph.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click for a sine-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a triangle-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a saw-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a square-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for white-noise.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a user-defined shape.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ATTACK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak attack time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RELEASE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Peak release time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Maximum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the maximum of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Average</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process based on the average of both stereo channels</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereomode Unlinked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Process each stereo channel independently</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>dynProcControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation type="unfinished">输入增益</translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation type="unfinished">输出增益</translation>
+ </message>
+ <message>
+ <source>Attack time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stereo mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>exportProjectDialog</name>
+ <message>
+ <source>Could not open file</source>
+ <translation>无法打开文件</translation>
+ </message>
+ <message>
+ <source>Could not open file %1 for writing.
+Please make sure you have write-permission to the file and the directory containing the file and try again!</source>
+ <translation>无法打开文件 %1 写入数据。
+请确保你拥有对文件以及存储文件的目录的写权限,然后重试!</translation>
+ </message>
+ <message>
+ <source>Error</source>
+ <translation>错误</translation>
+ </message>
+ <message>
+ <source>Error while determining file-encoder device. Please try to choose a different output format.</source>
+ <translation>寻找文件编码设备时出错。请使用另外一种输出格式。</translation>
+ </message>
+ <message>
+ <source>Rendering: %1%</source>
+ <translation>渲染中:%1%</translation>
+ </message>
+ <message>
+ <source>Export project to %1</source>
+ <translation>导出项目到 %1</translation>
+ </message>
+</context>
+<context>
+ <name>fader</name>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation>请输入一个介于 %1 和 %2 之间的值:</translation>
+ </message>
+</context>
+<context>
+ <name>graphModel</name>
+ <message>
+ <source>Graph</source>
+ <translation>图形</translation>
+ </message>
+</context>
+<context>
+ <name>kickerInstrument</name>
+ <message>
+ <source>Start frequency</source>
+ <translation>起始频率</translation>
+ </message>
+ <message>
+ <source>End frequency</source>
+ <translation>结束频率</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>增益</translation>
+ </message>
+ <message>
+ <source>Length</source>
+ <translation>长度</translation>
+ </message>
+ <message>
+ <source>Distortion Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion End</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Envelope Slope</source>
+ <translation>包络线倾斜度</translation>
+ </message>
+ <message>
+ <source>Noise</source>
+ <translation>噪音</translation>
+ </message>
+ <message>
+ <source>Click</source>
+ <translation>力度</translation>
+ </message>
+ <message>
+ <source>Frequency Slope</source>
+ <translation>频率倾斜度</translation>
+ </message>
+ <message>
+ <source>Start from note</source>
+ <translation>从哪个音符开始</translation>
+ </message>
+ <message>
+ <source>End to note</source>
+ <translation>到哪个音符结束</translation>
+ </message>
+</context>
+<context>
+ <name>kickerInstrumentView</name>
+ <message>
+ <source>Start frequency:</source>
+ <translation>起始频率:</translation>
+ </message>
+ <message>
+ <source>End frequency:</source>
+ <translation>结束频率:</translation>
+ </message>
+ <message>
+ <source>Gain:</source>
+ <translation>增益:</translation>
+ </message>
+ <message>
+ <source>Frequency Slope:</source>
+ <translation>频率倾斜度:</translation>
+ </message>
+ <message>
+ <source>Envelope Length:</source>
+ <translation>包络长度:</translation>
+ </message>
+ <message>
+ <source>Envelope Slope:</source>
+ <translation>包络线倾斜度:</translation>
+ </message>
+ <message>
+ <source>Click:</source>
+ <translation>力度:</translation>
+ </message>
+ <message>
+ <source>Noise:</source>
+ <translation>噪音:</translation>
+ </message>
+ <message>
+ <source>Distortion Start:</source>
+ <translation>起始失真度:</translation>
+ </message>
+ <message>
+ <source>Distortion End:</source>
+ <translation>结束失真度:</translation>
+ </message>
+</context>
+<context>
+ <name>knob</name>
+ <message>
+ <source>&Help</source>
+ <translation>帮助(&H)</translation>
+ </message>
+ <message>
+ <source>Please enter a new value between -96.0 dBV and 6.0 dBV:</source>
+ <translation>请输入介于96.0 dBV 和 6.0 dBV之间的值:</translation>
+ </message>
+ <message>
+ <source>Please enter a new value between %1 and %2:</source>
+ <translation>请输入介于%1和%2之间的值:</translation>
+ </message>
+</context>
+<context>
+ <name>ladspaBrowserView</name>
+ <message>
+ <source>Available Effects</source>
+ <translation>可用效果器</translation>
+ </message>
+ <message>
+ <source>Unavailable Effects</source>
+ <translation>不可用效果器</translation>
+ </message>
+ <message>
+ <source>Instruments</source>
+ <translation>乐器插件</translation>
+ </message>
+ <message>
+ <source>Analysis Tools</source>
+ <translation>分析工具</translation>
+ </message>
+ <message>
+ <source>Don't know</source>
+ <translation>未知</translation>
+ </message>
+ <message>
+ <source>This dialog displays information on all of the LADSPA plugins LMMS was able to locate. The plugins are divided into five categories based upon an interpretation of the port types and names.
+
+Available Effects are those that can be used by LMMS. In order for LMMS to be able to use an effect, it must, first and foremost, be an effect, which is to say, it has to have both input channels and output channels. LMMS identifies an input channel as an audio rate port containing 'in' in the name. Output channels are identified by the letters 'out'. Furthermore, the effect must have the same number of inputs and outputs and be real time capable.
+
+Unavailable Effects are those that were identified as effects, but either didn't have the same number of input and output channels or weren't real time capable.
+
+Instruments are plugins for which only output channels were identified.
+
+Analysis Tools are plugins for which only input channels were identified.
+
+Don't Knows are plugins for which no input or output channels were identified.
+
+Double clicking any of the plugins will bring up information on the ports.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type:</source>
+ <translation>类型</translation>
+ </message>
+</context>
+<context>
+ <name>ladspaDescription</name>
+ <message>
+ <source>Plugins</source>
+ <translation>插件</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>描述</translation>
+ </message>
+</context>
+<context>
+ <name>ladspaPortDialog</name>
+ <message>
+ <source>Ports</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Direction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Min < Default < Max</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Logarithmic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SR Dependent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input</source>
+ <translation type="unfinished">输入</translation>
+ </message>
+ <message>
+ <source>Output</source>
+ <translation type="unfinished">输出</translation>
+ </message>
+ <message>
+ <source>Toggled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Integer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Float</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished">是</translation>
+ </message>
+</context>
+<context>
+ <name>lb302Synth</name>
+ <message>
+ <source>VCF Cutoff Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VCF Resonance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VCF Envelope Mod</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VCF Envelope Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion</source>
+ <translation>失真</translation>
+ </message>
+ <message>
+ <source>Waveform</source>
+ <translation>波形</translation>
+ </message>
+ <message>
+ <source>Slide Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Accent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dead</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>24dB/oct Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>lb302SynthView</name>
+ <message>
+ <source>Cutoff Freq:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Resonance:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env Mod:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decay:</source>
+ <translation type="unfinished">衰减:</translation>
+ </message>
+ <message>
+ <source>303-es-que, 24dB/octave, 3 pole filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slide Decay:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DIST:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Saw wave</source>
+ <translation type="unfinished">锯齿波</translation>
+ </message>
+ <message>
+ <source>Click here for a saw-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a triangle-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Square wave</source>
+ <translation type="unfinished">方波</translation>
+ </message>
+ <message>
+ <source>Click here for a square-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Rounded square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a square-wave with a rounded end.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Moog wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for a moog-like wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click for a sine-wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>White noise wave</source>
+ <translation type="unfinished">白噪音</translation>
+ </message>
+ <message>
+ <source>Click here for an exponential wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for white-noise.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited square wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited square wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited triangle wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bandlimited moog saw wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here for bandlimited moog saw wave.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>lb303Synth</name>
+ <message>
+ <source>VCF Cutoff Frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VCF Resonance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VCF Envelope Mod</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VCF Envelope Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Distortion</source>
+ <translation>失真</translation>
+ </message>
+ <message>
+ <source>Waveform</source>
+ <translation>波形</translation>
+ </message>
+ <message>
+ <source>Slide Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Accent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dead</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>24dB/oct Filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>lb303SynthView</name>
+ <message>
+ <source>Cutoff Freq:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>CUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Resonance:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>RES</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Env Mod:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ENV MOD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decay:</source>
+ <translation type="unfinished">衰减:</translation>
+ </message>
+ <message>
+ <source>DEC</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>303-es-que, 24dB/octave, 3 pole filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Slide Decay:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SLIDE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DIST:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>DIST</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WAVE:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>WAVE</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>malletsInstrument</name>
+ <message>
+ <source>Hardness</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibrato Gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibrato Freq</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stick Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Crossfade</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Speed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Depth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ADSR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pressure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Motion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Speed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bowed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spread</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Marimba</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibraphone</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Agogo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wood1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reso</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wood2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Beats</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Two Fixed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clump</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tubular Bells</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Uniform Bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tuned Bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Glass</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tibetan Bowl</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Missing files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>malletsInstrumentView</name>
+ <message>
+ <source>Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spread</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spread:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hardness</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hardness:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Position:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vib Gain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vib Gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vib Freq</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vib Freq:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stick Mix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stick Mix:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Modulator:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Crossfade</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Crossfade:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Speed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Depth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LFO Depth:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ADSR</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>ADSR:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bowed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pressure</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pressure:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Motion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Motion:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Speed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibrato</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibrato:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>manageVSTEffectView</name>
+ <message>
+ <source> - VST parameter control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VST Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here if you want to synchronize all parameters with VST plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Automated</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here if you want to display automated parameters only.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> Close </source>
+ <translation> 关闭 </translation>
+ </message>
+ <message>
+ <source>Close VST effect knob-controller window.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>manageVestigeInstrumentView</name>
+ <message>
+ <source> - VST plugin control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VST Sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here if you want to synchronize all parameters with VST plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Automated</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here if you want to display automated parameters only.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source> Close </source>
+ <translation> 关闭 </translation>
+ </message>
+ <message>
+ <source>Close VST plugin knob-controller window.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>nineButtonSelector</name>
+ <message>
+ <source>&Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>opl2instrument</name>
+ <message>
+ <source>Patch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Level</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Level Scaling</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Frequency Multiple</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Feedback</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Key Scaling Rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Percussive Envelope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Tremolo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Vibrato</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 1 Waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Level</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Level Scaling</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Frequency Multiple</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Key Scaling Rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Percussive Envelope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Tremolo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Vibrato</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Op 2 Waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>FM</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibrato Depth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tremolo Depth</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>organicInstrument</name>
+ <message>
+ <source>Distortion</source>
+ <translation>失真</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation>音量</translation>
+ </message>
+</context>
+<context>
+ <name>organicInstrumentView</name>
+ <message>
+ <source>Distortion:</source>
+ <translation>失真:</translation>
+ </message>
+ <message>
+ <source>Volume:</source>
+ <translation>音量:</translation>
+ </message>
+ <message>
+ <source>Randomise</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 waveform:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 panning:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>cents</source>
+ <translation>音分 cents</translation>
+ </message>
+ <message>
+ <source>The distortion knob adds distortion to the output of the instrument. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 stereo detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Osc %1 harmonic:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>papuInstrument</name>
+ <message>
+ <source>Sweep time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sweep direction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sweep RtShift amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wave Pattern Duty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume sweep direction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Length of each step in sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Right Output level</source>
+ <translation>右声道输出电平</translation>
+ </message>
+ <message>
+ <source>Left Output level</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 to SO2 (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 to SO2 (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 to SO2 (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 to SO2 (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 1 to SO1 (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 2 to SO1 (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 3 to SO1 (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel 4 to SO1 (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Treble</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bass</source>
+ <translation>低音</translation>
+ </message>
+ <message>
+ <source>Shift Register width</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>papuInstrumentView</name>
+ <message>
+ <source>Sweep Time:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sweep Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sweep RtShift amount:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sweep RtShift amount</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wave pattern duty:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wave Pattern Duty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Square Channel 1 Volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Length of each step in sweep:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Length of each step in sweep</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wave pattern duty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Square Channel 2 Volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Square Channel 2 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wave Channel Volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wave Channel Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise Channel Volume:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise Channel Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SO1 Volume (Right):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SO1 Volume (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SO2 Volume (Left):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SO2 Volume (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Treble:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Treble</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bass:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bass</source>
+ <translation type="unfinished">低音</translation>
+ </message>
+ <message>
+ <source>Sweep Direction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Volume Sweep Direction</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Shift Register Width</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel1 to SO1 (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel2 to SO1 (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel3 to SO1 (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel4 to SO1 (Right)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel1 to SO2 (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel2 to SO2 (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel3 to SO2 (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Channel4 to SO2 (Left)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wave Pattern</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The amount of increase or decrease in frequency</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The rate at which increase or decrease in frequency occurs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Square Channel 1 Volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The delay between step change</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Draw the wave here</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>pluginBrowser</name>
+ <message>
+ <source>no description</source>
+ <translation>没有描述</translation>
+ </message>
+ <message>
+ <source>Instrument plugins</source>
+ <translation>乐器插件</translation>
+ </message>
+ <message>
+ <source>Incomplete monophonic imitation tb303</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Plugin for freely manipulating stereo output</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Plugin for controlling knobs with sound peaks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Plugin for enhancing stereo separation of a stereo input file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List installed LADSPA plugins</source>
+ <translation>列出已安装的 LADSPA 插件</translation>
+ </message>
+ <message>
+ <source>Filter for importing FL Studio projects into LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>GUS-compatible patch instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Additive Synthesizer for organ-like sounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tuneful things to bang on</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>VST-host for using VST(i)-plugins within LMMS</source>
+ <translation>LMMS的VST(i)插件宿主</translation>
+ </message>
+ <message>
+ <source>Vibrating string modeler</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary LADSPA-effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter for importing MIDI-files into LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Instrument browser</source>
+ <translation>乐器浏览器</translation>
+ </message>
+ <message>
+ <source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Emulation of the MOS6581 and MOS8580 SID.
+This chip was used in the Commodore 64 computer.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Player for SoundFont files</source>
+ <translation>在工程中使用SoundFont</translation>
+ </message>
+ <message>
+ <source>Emulation of GameBoy (TM) APU</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Customizable wavetable synthesizer</source>
+ <translation>可自定制的波表合成器</translation>
+ </message>
+ <message>
+ <source>Embedded ZynAddSubFX</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>2-operator FM Synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filter for importing Hydrogen files into LMMS</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS port of sfxr</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for processing dynamics in a flexible way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for waveshaping</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Versatile drum synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>4-oscillator modulatable wavetable synth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A native amplifier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>plugin for using arbitrary VST effects inside LMMS.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Monstrous 3-oscillator synth with modulation matrix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Three powerful oscillators you can modulate in several ways</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boost your bass the fast and simple way</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>A NES-like synthesizer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Graphical spectrum analyzer plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Simple sampler with various settings for using samples (e.g. drums) in an instrument-track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Rack Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Carla Patchbay Instrument</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>projectNotes</name>
+ <message>
+ <source>Project notes</source>
+ <translation>工程注释</translation>
+ </message>
+ <message>
+ <source>Put down your project notes here.</source>
+ <translation>在这里写下你的工程注释。</translation>
+ </message>
+ <message>
+ <source>Edit Actions</source>
+ <translation>编辑功能</translation>
+ </message>
+ <message>
+ <source>&Undo</source>
+ <translation>撤销(&U)</translation>
+ </message>
+ <message>
+ <source>Ctrl+Z</source>
+ <translation>Ctrl+Z</translation>
+ </message>
+ <message>
+ <source>&Redo</source>
+ <translation>重做(&R)</translation>
+ </message>
+ <message>
+ <source>Ctrl+Y</source>
+ <translation>Ctrl+Y</translation>
+ </message>
+ <message>
+ <source>&Copy</source>
+ <translation>复制(&C)</translation>
+ </message>
+ <message>
+ <source>Ctrl+C</source>
+ <translation>Ctrl+C</translation>
+ </message>
+ <message>
+ <source>Cu&t</source>
+ <translation>剪切(&T)</translation>
+ </message>
+ <message>
+ <source>Ctrl+X</source>
+ <translation>Ctrl+X</translation>
+ </message>
+ <message>
+ <source>&Paste</source>
+ <translation>粘贴(&P)</translation>
+ </message>
+ <message>
+ <source>Ctrl+V</source>
+ <translation>Ctrl+V</translation>
+ </message>
+ <message>
+ <source>Format Actions</source>
+ <translation>格式功能</translation>
+ </message>
+ <message>
+ <source>&Bold</source>
+ <translation>加粗(&B)</translation>
+ </message>
+ <message>
+ <source>Ctrl+B</source>
+ <translation>Ctrl+B</translation>
+ </message>
+ <message>
+ <source>&Italic</source>
+ <translation>斜体(&I)</translation>
+ </message>
+ <message>
+ <source>Ctrl+I</source>
+ <translation>Ctrl+I</translation>
+ </message>
+ <message>
+ <source>&Underline</source>
+ <translation>下划线(&U)</translation>
+ </message>
+ <message>
+ <source>Ctrl+U</source>
+ <translation>Ctrl+U</translation>
+ </message>
+ <message>
+ <source>&Left</source>
+ <translation>左对齐(&L)</translation>
+ </message>
+ <message>
+ <source>Ctrl+L</source>
+ <translation>Ctrl+L</translation>
+ </message>
+ <message>
+ <source>C&enter</source>
+ <translation>居中(&E)</translation>
+ </message>
+ <message>
+ <source>Ctrl+E</source>
+ <translation>Ctrl+E</translation>
+ </message>
+ <message>
+ <source>&Right</source>
+ <translation>右对齐(&R)</translation>
+ </message>
+ <message>
+ <source>Ctrl+R</source>
+ <translation>Ctrl+R</translation>
+ </message>
+ <message>
+ <source>&Justify</source>
+ <translation>匀齐(&J)</translation>
+ </message>
+ <message>
+ <source>Ctrl+J</source>
+ <translation>Ctrl+J</translation>
+ </message>
+ <message>
+ <source>&Color...</source>
+ <translation>颜色(&C)...</translation>
+ </message>
+</context>
+<context>
+ <name>renameDialog</name>
+ <message>
+ <source>Rename...</source>
+ <translation>重命名...</translation>
+ </message>
+</context>
+<context>
+ <name>setupDialog</name>
+ <message>
+ <source>Setup LMMS</source>
+ <translation>设置LMMS</translation>
+ </message>
+ <message>
+ <source>General settings</source>
+ <translation>常规设置</translation>
+ </message>
+ <message>
+ <source>BUFFER SIZE</source>
+ <translation type="unfinished">缓冲区大小</translation>
+ </message>
+ <message>
+ <source>Reset to default-value</source>
+ <translation>重置为默认值</translation>
+ </message>
+ <message>
+ <source>MISC</source>
+ <translation>杂项</translation>
+ </message>
+ <message>
+ <source>Enable tooltips</source>
+ <translation>启用工具提示</translation>
+ </message>
+ <message>
+ <source>Show restart warning after changing settings</source>
+ <translation>在改变设置后显示重启警告</translation>
+ </message>
+ <message>
+ <source>Display volume as dBV </source>
+ <translation>音量显示为dBV</translation>
+ </message>
+ <message>
+ <source>Compress project files per default</source>
+ <translation>默认压缩项目文件</translation>
+ </message>
+ <message>
+ <source>HQ-mode for output audio-device</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>LMMS working directory</source>
+ <translation>LMMS工作目录</translation>
+ </message>
+ <message>
+ <source>VST-plugin directory</source>
+ <translation>VST插件目录</translation>
+ </message>
+ <message>
+ <source>Artwork directory</source>
+ <translation>插图目录</translation>
+ </message>
+ <message>
+ <source>FL Studio installation directory</source>
+ <translation>FL Studio安装目录</translation>
+ </message>
+ <message>
+ <source>STK rawwave directory</source>
+ <translation>STK rawwave 目录</translation>
+ </message>
+ <message>
+ <source>Performance settings</source>
+ <translation>性能设置</translation>
+ </message>
+ <message>
+ <source>UI effects vs. performance</source>
+ <translation>界面特效 vs 性能</translation>
+ </message>
+ <message>
+ <source>Audio settings</source>
+ <translation>音频设置</translation>
+ </message>
+ <message>
+ <source>AUDIO INTERFACE</source>
+ <translation>音频接口</translation>
+ </message>
+ <message>
+ <source>MIDI settings</source>
+ <translation>MIDI设置</translation>
+ </message>
+ <message>
+ <source>MIDI INTERFACE</source>
+ <translation>MIDI接口</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>确定</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>取消</translation>
+ </message>
+ <message>
+ <source>Restart LMMS</source>
+ <translation>重启LMMS</translation>
+ </message>
+ <message>
+ <source>Please note that most changes won't take effect until you restart LMMS!</source>
+ <translation>请注意很多设置需要重启LMMS才可生效!</translation>
+ </message>
+ <message>
+ <source>Frames: %1
+Latency: %2 ms</source>
+ <translation>帧数: %1
+延迟: %2 毫秒</translation>
+ </message>
+ <message>
+ <source>Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel.</source>
+ <translation type="unfinished">在这里,你可以设置 LMMS 所用缓冲区的大小。缓冲区越小,延迟越小,但声音质量和性能可能会受影响。</translation>
+ </message>
+ <message>
+ <source>Choose LMMS working directory</source>
+ <translation>选择 LMMS 工作目录</translation>
+ </message>
+ <message>
+ <source>Choose your VST-plugin directory</source>
+ <translation>选择 VST 插件目录</translation>
+ </message>
+ <message>
+ <source>Choose artwork-theme directory</source>
+ <translation>选择插图目录</translation>
+ </message>
+ <message>
+ <source>Choose FL Studio installation directory</source>
+ <translation>选择 FL Studio 安装目录</translation>
+ </message>
+ <message>
+ <source>Choose LADSPA plugin directory</source>
+ <translation>选择 LADSPA 插件目录</translation>
+ </message>
+ <message>
+ <source>Choose STK rawwave directory</source>
+ <translation>选择 STK rawwave 目录</translation>
+ </message>
+ <message>
+ <source>Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Paths</source>
+ <translation>路径</translation>
+ </message>
+ <message>
+ <source>LADSPA plugin paths</source>
+ <translation>LADSPA 插件路径</translation>
+ </message>
+ <message>
+ <source>Default Soundfont File</source>
+ <translation>默认 SoundFont 文件</translation>
+ </message>
+ <message>
+ <source>Background artwork</source>
+ <translation>背景图片</translation>
+ </message>
+ <message>
+ <source>Choose default SoundFont</source>
+ <translation>选择默认的 SoundFont</translation>
+ </message>
+ <message>
+ <source>Choose background artwork</source>
+ <translation>选择背景图片</translation>
+ </message>
+ <message>
+ <source>One instrument track window mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Compact track buttons</source>
+ <translation>紧凑化轨道图标</translation>
+ </message>
+ <message>
+ <source>Sync VST plugins to host playback</source>
+ <translation>同步 VST 插件和主机回放</translation>
+ </message>
+ <message>
+ <source>Enable note labels in piano roll</source>
+ <translation>在钢琴窗中显示音号</translation>
+ </message>
+ <message>
+ <source>Enable waveform display by default</source>
+ <translation>默认启用波形图</translation>
+ </message>
+ <message>
+ <source>Smooth scroll in Song Editor</source>
+ <translation>歌曲编辑器中启用平滑滚动</translation>
+ </message>
+ <message>
+ <source>Enable auto save feature</source>
+ <translation>启用自动保存功能</translation>
+ </message>
+ <message>
+ <source>Show playback cursor in AudioFileProcessor</source>
+ <translation>在 AudioFileProcessor 中显示回放光标</translation>
+ </message>
+</context>
+<context>
+ <name>sf2Instrument</name>
+ <message>
+ <source>Bank</source>
+ <translation>库</translation>
+ </message>
+ <message>
+ <source>Patch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>增益</translation>
+ </message>
+ <message>
+ <source>Reverb</source>
+ <translation>混响</translation>
+ </message>
+ <message>
+ <source>Reverb Roomsize</source>
+ <translation>混响空间大小</translation>
+ </message>
+ <message>
+ <source>Reverb Damping</source>
+ <translation>混响阻尼</translation>
+ </message>
+ <message>
+ <source>Reverb Width</source>
+ <translation>混响宽度</translation>
+ </message>
+ <message>
+ <source>Reverb Level</source>
+ <translation>混响级别</translation>
+ </message>
+ <message>
+ <source>Chorus</source>
+ <translation>合唱</translation>
+ </message>
+ <message>
+ <source>Chorus Lines</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chorus Level</source>
+ <translation>合唱电平</translation>
+ </message>
+ <message>
+ <source>Chorus Speed</source>
+ <translation>合唱速度</translation>
+ </message>
+ <message>
+ <source>Chorus Depth</source>
+ <translation>合唱深度</translation>
+ </message>
+</context>
+<context>
+ <name>sf2InstrumentView</name>
+ <message>
+ <source>Open other SoundFont file</source>
+ <translation>打开其他SoundFont文件</translation>
+ </message>
+ <message>
+ <source>Click here to open another SF2 file</source>
+ <translation>点击此处打开另一个SF2文件</translation>
+ </message>
+ <message>
+ <source>Choose the patch</source>
+ <translation>选择路径</translation>
+ </message>
+ <message>
+ <source>Gain</source>
+ <translation>增益</translation>
+ </message>
+ <message>
+ <source>Apply reverb (if supported)</source>
+ <translation>应用混响(如果支持)</translation>
+ </message>
+ <message>
+ <source>This button enables the reverb effect. This is useful for cool effects, but only works on files that support it.</source>
+ <translation>此按钮会启用混响效果器。可以制作出很酷的效果,但仅对支持的文件有效。</translation>
+ </message>
+ <message>
+ <source>Reverb Roomsize:</source>
+ <translation>混响空间大小:</translation>
+ </message>
+ <message>
+ <source>Reverb Damping:</source>
+ <translation>混响阻尼:</translation>
+ </message>
+ <message>
+ <source>Reverb Width:</source>
+ <translation>混响宽度:</translation>
+ </message>
+ <message>
+ <source>Reverb Level:</source>
+ <translation>混响级别:</translation>
+ </message>
+ <message>
+ <source>Apply chorus (if supported)</source>
+ <translation>应用合唱 (如果支持)</translation>
+ </message>
+ <message>
+ <source>This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it.</source>
+ <translation type="unfinished">此按钮会启用合唱效果器。</translation>
+ </message>
+ <message>
+ <source>Chorus Lines:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chorus Level:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chorus Speed:</source>
+ <translation>合唱速度:</translation>
+ </message>
+ <message>
+ <source>Chorus Depth:</source>
+ <translation>合唱深度:</translation>
+ </message>
+ <message>
+ <source>Open SoundFont file</source>
+ <translation>打开SoundFont文件</translation>
+ </message>
+ <message>
+ <source>SoundFont2 Files (*.sf2)</source>
+ <translation>SoundFont2 Files (*.sf2)</translation>
+ </message>
+</context>
+<context>
+ <name>sfxrInstrument</name>
+ <message>
+ <source>Wave Form</source>
+ <translation>波形</translation>
+ </message>
+</context>
+<context>
+ <name>sidInstrument</name>
+ <message>
+ <source>Cutoff</source>
+ <translation type="unfinished">切频谱</translation>
+ </message>
+ <message>
+ <source>Resonance</source>
+ <translation>共鸣</translation>
+ </message>
+ <message>
+ <source>Filter type</source>
+ <translation>过滤器类型</translation>
+ </message>
+ <message>
+ <source>Voice 3 off</source>
+ <translation type="unfinished">声音 3 关</translation>
+ </message>
+ <message>
+ <source>Volume</source>
+ <translation>音量</translation>
+ </message>
+ <message>
+ <source>Chip model</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>sidInstrumentView</name>
+ <message>
+ <source>Volume:</source>
+ <translation>音量:</translation>
+ </message>
+ <message>
+ <source>Resonance:</source>
+ <translation>共鸣:</translation>
+ </message>
+ <message>
+ <source>Cutoff frequency:</source>
+ <translation>频谱刀频率:</translation>
+ </message>
+ <message>
+ <source>High-Pass filter </source>
+ <translation>高通滤波器</translation>
+ </message>
+ <message>
+ <source>Band-Pass filter </source>
+ <translation>带通滤波器</translation>
+ </message>
+ <message>
+ <source>Low-Pass filter </source>
+ <translation>低通滤波器</translation>
+ </message>
+ <message>
+ <source>Voice3 Off </source>
+ <translation>声音 3 关</translation>
+ </message>
+ <message>
+ <source>MOS6581 SID </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MOS8580 SID </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attack:</source>
+ <translation type="unfinished">打进声:</translation>
+ </message>
+ <message>
+ <source>Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decay:</source>
+ <translation type="unfinished">衰减:</translation>
+ </message>
+ <message>
+ <source>Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sustain:</source>
+ <translation type="unfinished">振幅持平:</translation>
+ </message>
+ <message>
+ <source>Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Release:</source>
+ <translation type="unfinished">声音消失:</translation>
+ </message>
+ <message>
+ <source>The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pulse Width:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Pulse Width resolution allows the width to be smoothly swept with no discernable stepping. The Pulse waveform on Oscillator %1 must be selected to have any audible effect.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Coarse:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Coarse detuning allows to detune Voice %1 one octave up or down.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pulse Wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Triangle Wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SawTooth</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Noise</source>
+ <translation type="unfinished">噪音</translation>
+ </message>
+ <message>
+ <source>Sync</source>
+ <translation type="unfinished">同步</translation>
+ </message>
+ <message>
+ <source>Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-Mod</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Filtered</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>When Filtered is on, Voice %1 will be processed through the Filter. When Filtered is off, Voice %1 appears directly at the output, and the Filter has no effect on it.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Test</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Test, when set, resets and locks Oscillator %1 at zero until Test is turned off.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>song</name>
+ <message>
+ <source>Tempo</source>
+ <translation>节奏</translation>
+ </message>
+ <message>
+ <source>Master volume</source>
+ <translation>主音量</translation>
+ </message>
+ <message>
+ <source>Master pitch</source>
+ <translation>主音高</translation>
+ </message>
+ <message>
+ <source>Project saved</source>
+ <translation>工程已保存</translation>
+ </message>
+ <message>
+ <source>The project %1 is now saved.</source>
+ <translation>工程 %1 已保存。</translation>
+ </message>
+ <message>
+ <source>Project NOT saved.</source>
+ <translation>工程 **没有** 保存。</translation>
+ </message>
+ <message>
+ <source>The project %1 was not saved!</source>
+ <translation>工程%1没有保存!</translation>
+ </message>
+ <message>
+ <source>Import file</source>
+ <translation>导入文件</translation>
+ </message>
+ <message>
+ <source>untitled</source>
+ <translation>有标题</translation>
+ </message>
+ <message>
+ <source>Select file for project-export...</source>
+ <translation>为工程导出选择文件...</translation>
+ </message>
+ <message>
+ <source>Empty project</source>
+ <translation>空工程</translation>
+ </message>
+ <message>
+ <source>This project is empty so exporting makes no sense. Please put some items into Song Editor first!</source>
+ <translation>这个工程是空的所以就算导出也没有意义,请在歌曲编辑器中加入一点声音吧!</translation>
+ </message>
+ <message>
+ <source>MIDI sequences</source>
+ <translation>MIDI 音序器</translation>
+ </message>
+ <message>
+ <source>FL Studio projects</source>
+ <translation>FL Studio 工程</translation>
+ </message>
+ <message>
+ <source>All file types</source>
+ <translation>所有类型</translation>
+ </message>
+ <message>
+ <source>Hydrogen projects</source>
+ <translation>Hydrogen工程</translation>
+ </message>
+ <message>
+ <source>Select directory for writing exported tracks...</source>
+ <translation>选择写入导出音轨的目录...</translation>
+ </message>
+</context>
+<context>
+ <name>stereoEnhancerControlDialog</name>
+ <message>
+ <source>WIDE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Width:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>stereoEnhancerControls</name>
+ <message>
+ <source>Width</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>stereoMatrixControlDialog</name>
+ <message>
+ <source>Left to Left Vol:</source>
+ <translation>从左到左音量:</translation>
+ </message>
+ <message>
+ <source>Left to Right Vol:</source>
+ <translation>从左到右音量:</translation>
+ </message>
+ <message>
+ <source>Right to Left Vol:</source>
+ <translation>从右到左音量:</translation>
+ </message>
+ <message>
+ <source>Right to Right Vol:</source>
+ <translation>从右到右音量:</translation>
+ </message>
+</context>
+<context>
+ <name>stereoMatrixControls</name>
+ <message>
+ <source>Left to Left</source>
+ <translation>从左到左</translation>
+ </message>
+ <message>
+ <source>Left to Right</source>
+ <translation>从左到右</translation>
+ </message>
+ <message>
+ <source>Right to Left</source>
+ <translation>从右到左</translation>
+ </message>
+ <message>
+ <source>Right to Right</source>
+ <translation>从右到右</translation>
+ </message>
+</context>
+<context>
+ <name>timeLine</name>
+ <message>
+ <source>Enable/disable auto-scrolling</source>
+ <translation>启用/禁用自动滚动</translation>
+ </message>
+ <message>
+ <source>Enable/disable loop-points</source>
+ <translation>启用/禁用循环点</translation>
+ </message>
+ <message>
+ <source>After stopping go back to begin</source>
+ <translation>停止后前往开头</translation>
+ </message>
+ <message>
+ <source>After stopping go back to position at which playing was started</source>
+ <translation>停止后前往播放开始的地方</translation>
+ </message>
+ <message>
+ <source>After stopping keep position</source>
+ <translation>停止后保持位置不变</translation>
+ </message>
+ <message>
+ <source>Hint</source>
+ <translation>提示</translation>
+ </message>
+ <message>
+ <source>Press <Ctrl> to disable magnetic loop points.</source>
+ <translatorcomment>磁性吸附是指在一个完整音符的边缘吸附。</translatorcomment>
+ <translation>按住 <Ctrl> 禁用磁性吸附。</translation>
+ </message>
+ <message>
+ <source>Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points.</source>
+ <translation>按住 <Shift> 移动起始循环点;按住 <Ctrl> 禁用磁性吸附。</translation>
+ </message>
+</context>
+<context>
+ <name>track</name>
+ <message>
+ <source>Muted</source>
+ <translation>静音</translation>
+ </message>
+ <message>
+ <source>Solo</source>
+ <translation>独奏</translation>
+ </message>
+</context>
+<context>
+ <name>trackContentObject</name>
+ <message>
+ <source>Muted</source>
+ <translation>静音</translation>
+ </message>
+</context>
+<context>
+ <name>trackContentObjectView</name>
+ <message>
+ <source>Current position</source>
+ <translation>当前位置</translation>
+ </message>
+ <message>
+ <source>Hint</source>
+ <translation>提示</translation>
+ </message>
+ <message>
+ <source>Press <Ctrl> and drag to make a copy.</source>
+ <translation>按住 <Ctrl> 并拖动以创建副本。</translation>
+ </message>
+ <message>
+ <source>Current length</source>
+ <translation>当前长度</translation>
+ </message>
+ <message>
+ <source>Press <Ctrl> for free resizing.</source>
+ <translation>按住 <Ctrl> 自由调整大小。</translation>
+ </message>
+ <message>
+ <source>%1:%2 (%3:%4 to %5:%6)</source>
+ <translation>%1:%2 (%3:%4 到 %5:%6)</translation>
+ </message>
+ <message>
+ <source>Delete (middle mousebutton)</source>
+ <translation>删除 (鼠标中键)</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>剪切</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>复制</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>粘贴</translation>
+ </message>
+ <message>
+ <source>Mute/unmute (<Ctrl> + middle click)</source>
+ <translation>静音/取消静音 (<Ctrl> + 鼠标中键)</translation>
+ </message>
+</context>
+<context>
+ <name>trackOperationsWidget</name>
+ <message>
+ <source>Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action.</source>
+ <translatorcomment>未按照原文翻译,因为实际操作就是按住ctrl复制并移动此通道</translatorcomment>
+ <translation>按住 <Ctrl> 的同时拖动移动柄复制并移动此轨道。</translation>
+ </message>
+ <message>
+ <source>Actions for this track</source>
+ <translation>对此轨道可进行的操作</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>静音</translation>
+ </message>
+ <message>
+ <source>Mute this track</source>
+ <translation>静音此轨道</translation>
+ </message>
+ <message>
+ <source>Solo</source>
+ <translation>独奏</translation>
+ </message>
+ <message>
+ <source>Clone this track</source>
+ <translation>克隆此轨道</translation>
+ </message>
+ <message>
+ <source>Remove this track</source>
+ <translation>移除此轨道</translation>
+ </message>
+ <message>
+ <source>Clear this track</source>
+ <translation>清除此轨道</translation>
+ </message>
+ <message>
+ <source>Turn all recording on</source>
+ <translation>打开所有录制</translation>
+ </message>
+ <message>
+ <source>Turn all recording off</source>
+ <translation>关闭所有录制</translation>
+ </message>
+</context>
+<context>
+ <name>vestigeInstrument</name>
+ <message>
+ <source>Loading plugin</source>
+ <translation>载入插件</translation>
+ </message>
+ <message>
+ <source>Please wait while loading VST-plugin...</source>
+ <translation>请等待VST插件加载完成...</translation>
+ </message>
+ <message>
+ <source>Failed loading VST-plugin</source>
+ <translation>加载VST插件失败</translation>
+ </message>
+ <message>
+ <source>The VST-plugin %1 could not be loaded for some reason.
+If it runs with other VST-software under Linux, please contact an LMMS-developer!</source>
+ <translation>VST插件%1由于某些原因不能加载
+如果它在Linux下的其他VST宿主中运行正常,请联系LMMS开发者!</translation>
+ </message>
+</context>
+<context>
+ <name>vibed</name>
+ <message>
+ <source>String %1 volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>String %1 stiffness</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pick %1 position</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pickup %1 position</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pan %1</source>
+ <translation>声相 %1</translation>
+ </message>
+ <message>
+ <source>Detune %1</source>
+ <translation>去谐 %1</translation>
+ </message>
+ <message>
+ <source>Fuzziness %1 </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Length %1</source>
+ <translation>长度 %1</translation>
+ </message>
+ <message>
+ <source>Impulse %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octave %1</source>
+ <translation>八度音 %1</translation>
+ </message>
+</context>
+<context>
+ <name>vibedView</name>
+ <message>
+ <source>Volume:</source>
+ <translation>音量:</translation>
+ </message>
+ <message>
+ <source>The 'V' knob sets the volume of the selected string.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>String stiffness:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'S' knob sets the stiffness of the selected string. The stiffness of the string affects how long the string will ring out. The lower the setting, the longer the string will ring.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pick position:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'P' knob sets the position where the selected string will be 'picked'. The lower the setting the closer the pick is to the bridge.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pickup position:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'PU' knob sets the position where the vibrations will be monitored for the selected string. The lower the setting, the closer the pickup is to the bridge.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pan:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Pan knob determines the location of the selected string in the stereo field.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Detune:</source>
+ <translation>去谐:</translation>
+ </message>
+ <message>
+ <source>The Detune knob modifies the pitch of the selected string. Settings less than zero will cause the string to sound flat. Settings greater than zero will cause the string to sound sharp.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fuzziness:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Slap knob adds a bit of fuzz to the selected string which is most apparent during the attack, though it can also be used to make the string sound more 'metallic'.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Length:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Length knob sets the length of the selected string. Longer strings will both ring longer and sound brighter, however, they will also eat up more CPU cycles.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Impulse or initial state</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The 'Imp' selector determines whether the waveform in the graph is to be treated as an impulse imparted to the string by the pick or the initial state of the string.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Octave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Impulse Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The waveform editor provides control over the initial state or impulse that is used to start the string vibrating. The buttons to the right of the graph will initialize the waveform to the selected type. The '?' button will load a waveform from a file--only the first 128 samples will be loaded.
+
+The waveform can also be drawn in the graph.
+
+The 'S' button will smooth the waveform.
+
+The 'N' button will normalize the waveform.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Vibed models up to nine independently vibrating strings. The 'String' selector allows you to choose which string is being edited. The 'Imp' selector chooses whether the graph represents an impulse or the initial state of the string. The 'Octave' selector chooses which harmonic the string should vibrate at.
+
+The graph allows you to control the initial state or impulse used to set the string in motion.
+
+The 'V' knob controls the volume. The 'S' knob controls the string's stiffness. The 'P' knob controls the pick position. The 'PU' knob controls the pickup position.
+
+'Pan' and 'Detune' hopefully don't need explanation. The 'Slap' knob adds a bit of fuzz to the sound of the string.
+
+The 'Length' knob controls the length of the string.
+
+The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enable waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to enable/disable waveform.</source>
+ <translation>点击这里启用/禁用波形。</translation>
+ </message>
+ <message>
+ <source>String</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The String selector is used to choose which string the controls are editing. A Vibed instrument can contain up to nine independently vibrating strings. The LED in the lower right corner of the waveform editor indicates whether the selected string is active.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sine wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Triangle wave</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Saw wave</source>
+ <translation>锯齿波</translation>
+ </message>
+ <message>
+ <source>Square wave</source>
+ <translation>方波</translation>
+ </message>
+ <message>
+ <source>White noise wave</source>
+ <translation>白噪音</translation>
+ </message>
+ <message>
+ <source>User defined wave</source>
+ <translation>用户自定义波形</translation>
+ </message>
+ <message>
+ <source>Smooth</source>
+ <translation>平滑</translation>
+ </message>
+ <message>
+ <source>Click here to smooth waveform.</source>
+ <translation>点击这里平滑波形。</translation>
+ </message>
+ <message>
+ <source>Normalize</source>
+ <translation>标准化</translation>
+ </message>
+ <message>
+ <source>Click here to normalize waveform.</source>
+ <translation>点击这里标准化波形。</translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>帮助(&H)</translation>
+ </message>
+ <message>
+ <source>Use a sine-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a triangle-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a saw-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a square-wave for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use white-noise for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use a user-defined waveform for current oscillator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>visualizationWidget</name>
+ <message>
+ <source>click to enable/disable visualization of master-output</source>
+ <translation>点击启用/禁用视觉化主输出</translation>
+ </message>
+ <message>
+ <source>Click to enable</source>
+ <translation>点击启用</translation>
+ </message>
+</context>
+<context>
+ <name>voiceObject</name>
+ <message>
+ <source>Voice %1 pulse width</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 attack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 decay</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 sustain</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 release</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 coarse detuning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 wave shape</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 sync</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 ring modulate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 filtered</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Voice %1 test</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControlDialog</name>
+ <message>
+ <source>INPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Input gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OUTPUT</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Output gain:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reset waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to reset the wavegraph back to default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Smooth waveform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to apply smoothing to wavegraph</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to increase wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease graph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Click here to decrease wavegraph amplitude by 1dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Clip input signal to 0dB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>waveShaperControls</name>
+ <message>
+ <source>Input gain</source>
+ <translation>输入增益</translation>
+ </message>
+ <message>
+ <source>Output gain</source>
+ <translation>输出增益</translation>
+ </message>
+</context>
+</TS>
diff --git a/data/nsis_branding.bmp b/data/nsis_branding.bmp
index 901497e..a7e75e3 100644
Binary files a/data/nsis_branding.bmp and b/data/nsis_branding.bmp differ
diff --git a/data/presets/AudioFileProcessor/Bass-Mania.xpf b/data/presets/AudioFileProcessor/Bass-Mania.xpf
index bb5304b..4a92c00 100644
--- a/data/presets/AudioFileProcessor/Bass-Mania.xpf
+++ b/data/presets/AudioFileProcessor/Bass-Mania.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20051223" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="Bass-Mania" basetone="9" tab="1" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999938" sframe="0" amp="100" src="misc/bass!.ogg" />
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.291" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="Bass-Mania" tab="1">
+ <audiofileprocessor reversed="0" looped="0" eframe="0.999938" sframe="0" amp="100" src="misc/bass!.ogg"/>
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.291" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords chordrange="1" arprange="5" arpdisabled="0" chord="0" chorddisabled="1" arpgate="200" arp="0" arpsyncmode="5" arptime="214" arpdir="4" />
- <midi inputchannel="0" outputchannel="0" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="214" arprange="5" arpsyncmode="5" chord="0" chordrange="1" arp="0" arp-enabled="1" chord-enabled="0" arpdisabled="0" arpdir="2" arpgate="200"/>
+ <midiport inputchannel="0" outputchannel="0" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="214" arprange="5" arpsyncmode="5" chord="0" chordrange="1" arp="0" arp-enabled="1" chord-enabled="0" arpdisabled="0" arpdir="2" arpgate="200"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/AudioFileProcessor/Erazor.xpf b/data/presets/AudioFileProcessor/Erazor.xpf
index 8afc909..f106c27 100644
--- a/data/presets/AudioFileProcessor/Erazor.xpf
+++ b/data/presets/AudioFileProcessor/Erazor.xpf
@@ -1,30 +1,52 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.3.0-svn20071030" type="instrumenttracksettings" version="1.0" >
- <head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="438" basenote="69" vol="100" name="Erazor" tab="0" visible="1" >
- <audiofileprocessor reversed="0" looped="0" eframe="1" sframe="0" amp="90" src="drumsynth/misc synth/wowmelodictone.ds" />
- <eldata fres="3.51" ftype="0" fcut="2940" fwet="0" >
- <elvol lspd_numerator="4" lpdel="0" amt="1" rel="0.23" ctlenvamt="0" latt="0" syncmode="0" sus="0.05" lspd_denominator="4" lspd="0.1" att="0" pdel="0" lamt="0" dec="0" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lspd_numerator="4" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="4" lspd="0.01" att="0" pdel="0" lamt="1" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- <elres lspd_numerator="4" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="4" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords arpmode="0" chordrange="3" arp-enabled="0" arptime_numerator="4" arprange="2" chord-enabled="1" arptime_denominator="4" chord="0" syncmode="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="0" >
- <rack numofeffects="3" >
- <effect key="AAAAAgAAAAIAAAADAAAAbABDAEEAUABTADoAIABQAGwAYQB0AGUAMgB4ADIAIAAtACAAVgBlAHIAcwBhAHQAaQBsAGUAIABwAGwAYQB0AGUAIAByAGUAdgBlAHIAYgAsACAAcwB0AGUAcgBlAG8AIABpAG4AcAB1AHQAcwAAAAQAAAACAAAAEABQAGwAYQB0AGUAMgB4ADIAAAAOAGMAYQBwAHMALgBzAG8=" autoquit="0" name="ladspaeffect" gate="0" wet="1" on="1" >
- <ladspacontrols port02="0.50197" port03="0.3745" port04="0.249875" port05="0.25" ports="4" />
- </effect>
- <effect key="AAAAAgAAAAIAAAADAAAATABGAGUAZQBkAGIAYQBjAGsAIABEAGUAbABhAHkAIABMAGkAbgBlACAAKABNAGEAeABpAG0AdQBtACAARABlAGwAYQB5ACAANQBzACkAAAAEAAAAAgAAABQAZgBiAGQAZQBsAGEAeQBfADUAcwAAAAwAYwBtAHQALgBzAG8=" autoquit="0" name="ladspaeffect" gate="0" wet="1" on="1" >
- <ladspacontrols port10="200" port11="0.24" port00="200" port01="0.24" port10_numerator="4" port14="0.5" port04link="1" port04="0.5" port01link="1" syncmode="0" port00link="1" link="1" ports="6" port10_denominator="4" port00_numerator="4" port00_denominator="4" />
- </effect>
- <effect key="AAAAAgAAAAIAAAADAAAAFgBiAGEAcwBzAGIAbwBvAHMAdABlAHIAAAAA/////wAA" autoquit="0" name="bassbooster" gate="0" wet="1" on="1" >
- <bassboostercontrols ratio="2" freq="100" gain="1" />
- </effect>
- </rack>
- </fx>
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Erazor" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="100">
+ <instrument name="audiofileprocessor">
+ <audiofileprocessor reversed="0" looped="0" eframe="1" stutter="0" sframe="0" src="drumsynth/misc_synth/wowmelodictone.ds" amp="90"/>
+ </instrument>
+ <eldata fres="3.51" ftype="0" fcut="2940" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.95" userwavefile="" pdel="0" dec="0" lamt="0" syncmode="0" latt="0" rel="0.23" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="1" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.01" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="3" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="2" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.50197"/>
+ <port03 data="0.3745"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 data_numerator="4" data_denominator="4" syncmode="0" link="1" data="200"/>
+ <port01 link="1" data="0.24"/>
+ <port04 link="1" data="0.5"/>
+ <port10 data_numerator="4" data_denominator="4" syncmode="0" data="200"/>
+ <port11 data="0.24"/>
+ <port14 data="0.5"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="cmt.so" name="file"/>
+ <attribute value="fbdelay_5s" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="bassbooster" wet="1" on="1">
+ <bassboostercontrols ratio="2" freq="100" gain="1"/>
+ <key/>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/AudioFileProcessor/Fat-Reversed-Kick.xpf b/data/presets/AudioFileProcessor/Fat-Reversed-Kick.xpf
index 4039672..f9f11ef 100644
--- a/data/presets/AudioFileProcessor/Fat-Reversed-Kick.xpf
+++ b/data/presets/AudioFileProcessor/Fat-Reversed-Kick.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060605" type="instrumenttracksettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings>
- <instrumenttrack width="250" x="1094" y="0" surpos="134219776" fxch="0" height="436" baseoct="4" vol="100" name="Fat Reversed Kick" basetone="9" tab="0" visible="1" >
- <audiofileprocessor reversed="1" looped="1" eframe="0.999949" sframe="0" amp="100" src="drums/bassdrum01.ogg" />
- <eldata fres="3" ftype="0" fcut="193" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttrack fxch="0" vol="59" name="Fat Reversed Kick" tab="0">
+ <audiofileprocessor reversed="1" looped="1" eframe="0.999949" sframe="0" amp="100" src="drums/bassdrum01.ogg"/>
+ <eldata fres="3" ftype="0" fcut="193" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
+ <arpeggiator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" defvelout="0" receive="0" defvelin="0"/>
+ <chordcreator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
</instrumenttrack>
</instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/AudioFileProcessor/Kick-4-your-Subwoofer.xpf b/data/presets/AudioFileProcessor/Kick-4-your-Subwoofer.xpf
index 08d756a..6a9da93 100644
--- a/data/presets/AudioFileProcessor/Kick-4-your-Subwoofer.xpf
+++ b/data/presets/AudioFileProcessor/Kick-4-your-Subwoofer.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060605" type="instrumenttracksettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings>
- <instrumenttrack width="250" x="1132" y="425" surpos="134219776" fxch="0" height="436" baseoct="4" vol="128" name="Kick 4 your Subwoofer" basetone="9" tab="0" visible="1" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999917" sframe="0" amp="100" src="drums/kick01.ogg" />
- <eldata fres="2" ftype="2" fcut="58" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.1" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.393" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttrack fxch="0" vol="75" name="Kick 4 your Subwoofer" tab="0">
+ <audiofileprocessor reversed="0" looped="0" eframe="0.999917" sframe="0" amp="100" src="drums/kick01.ogg"/>
+ <eldata fres="2" ftype="2" fcut="58" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.1" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.393" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
+ <arpeggiator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" defvelout="0" receive="0" defvelin="0"/>
+ <chordcreator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
</instrumenttrack>
</instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/AudioFileProcessor/SString.xpf b/data/presets/AudioFileProcessor/SString.xpf
index c206937..1def1d7 100644
--- a/data/presets/AudioFileProcessor/SString.xpf
+++ b/data/presets/AudioFileProcessor/SString.xpf
@@ -1,47 +1,82 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc3" type="instrumenttracksettings" >
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="orion_string01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="60" vol="85" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="1" eframe="1" sframe="0" src="stringsnpads/orion_string01.ogg" amp="100" />
+ <instrumenttracksettings muted="0" type="0" name="orion_string01.ogg" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="60" vol="85">
+ <instrument name="audiofileprocessor">
+ <audiofileprocessor reversed="0" looped="1" eframe="1" stutter="0" sframe="0" src="stringsnpads/orion_string01.ogg" amp="100"/>
</instrument>
- <eldata fres="1" ftype="7" fcut="14000" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.3" sus="0.5" amt="1" x100="0" att="0.1" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="1" ftype="7" fcut="14000" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.3" amt="1" x100="0" att="0.1" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" outputprogram="1" readable="0" />
- <fxchain numofeffects="4" enabled="1" >
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port02="0.00497" port03="0.749" port04="0.11994" port05="0.75" ports="4" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="4" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.005"/>
+ <port03 data="0.749"/>
+ <port04 data="0.11994"/>
+ <port05 data="0.75"/>
+ </ladspacontrols>
<key>
- <attribute value="caps" name="file" />
- <attribute value="Plate2x2" name="plugin" />
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="stereomatrix" wet="0.35" on="1" >
- <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="stereomatrix" wet="0.35" on="1">
+ <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5"/>
<key/>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="0.14" port01="0.08" port12="1" port02="1" port13="1.5708" port03="1.5708" port14="0" port04="0" port04link="1" port02link="1" port03link="1" link="0" ports="8" port01link="0" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="400" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="0" ports="8">
+ <port01 link="0" data="0.08"/>
+ <port02 link="1" data="1"/>
+ <port03 link="1" data="1.5708"/>
+ <port04 link="1" data="0"/>
+ <port11 data="0.14"/>
+ <port12 data="1"/>
+ <port13 data="1.5708"/>
+ <port14 data="0"/>
+ </ladspacontrols>
<key>
- <attribute value="caps" name="file" />
- <attribute value="PhaserII" name="plugin" />
+ <attribute value="caps" name="file"/>
+ <attribute value="PhaserII" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="-48.06" port12="-23.94" port13="-12.06" port02link="1" port14="-5.94" port06link="1" port15="-3.06" port16="-1.44" ports="20" port17="-0.72" port18="-0.36" port19="-0.18" port110="0" port03link="1" port010="0" port07link="1" port01="-48.06" port02="-23.94" port04link="1" port08link="1" port03="-12.06" port04="-5.94" port05="-3.06" port06="-1.44" port07="-0.72" link="1" port08="-0.36" port09="-0.18" port01link="1" port05link="1" port010link="1" port09link="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="20">
+ <port01 link="1" data="-48"/>
+ <port02 link="1" data="-23.94"/>
+ <port03 link="1" data="-12.06"/>
+ <port04 link="1" data="-5.94"/>
+ <port05 link="1" data="-3.06"/>
+ <port06 link="1" data="-1.44"/>
+ <port07 link="1" data="-0.72"/>
+ <port08 link="1" data="-0.36"/>
+ <port09 link="1" data="-0.18"/>
+ <port010 link="1" data="0"/>
+ <port11 data="-48"/>
+ <port12 data="-23.94"/>
+ <port13 data="-12.06"/>
+ <port14 data="-5.94"/>
+ <port15 data="-3.06"/>
+ <port16 data="-1.44"/>
+ <port17 data="-0.72"/>
+ <port18 data="-0.36"/>
+ <port19 data="-0.18"/>
+ <port110 data="0"/>
+ </ladspacontrols>
<key>
- <attribute value="caps" name="file" />
- <attribute value="Eq" name="plugin" />
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq" name="plugin"/>
</key>
</effect>
</fxchain>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/AudioFileProcessor/orion.xpf b/data/presets/AudioFileProcessor/orion.xpf
index 05c6e40..101286b 100644
--- a/data/presets/AudioFileProcessor/orion.xpf
+++ b/data/presets/AudioFileProcessor/orion.xpf
@@ -1,40 +1,54 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc1" type="instrumenttracksettings" >
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="orion_string01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="59" vol="42" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="1" looped="1" eframe="1" sframe="0" src="stringsnpads/orion_string01.ogg" amp="100" />
+ <instrumenttracksettings muted="0" type="0" name="orion_string01.ogg" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="59" vol="42">
+ <instrument name="audiofileprocessor">
+ <audiofileprocessor reversed="1" looped="1" eframe="1" stutter="0" sframe="0" src="stringsnpads/orion_string01.ogg" amp="100"/>
</instrument>
- <eldata fres="1.01" ftype="4" fcut="1" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="0.26" sus="0.68" amt="1" x100="0" att="0.2" lpdel="0" hold="0.26" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.6" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="1" x100="0" att="0.3" lpdel="0" hold="0.01" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="1.01" ftype="4" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.32" userwavefile="" pdel="0" dec="1" lamt="0" syncmode="0" latt="0" rel="0.26" amt="1" x100="0" att="0.2" lpdel="0" hold="0.26" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.6" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0.3" lpdel="0" hold="0.01" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="3" enabled="1" >
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port10="-24" port00="-24" port11="15995" port01="15995" port12="1" port02="1" port13="0" port03="0" port02link="1" port03link="1" link="1" port00link="1" ports="8" port01link="1" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="8">
+ <port00 link="1" data="-24"/>
+ <port01 link="1" data="15995"/>
+ <port02 link="1" data="1"/>
+ <port03 link="1" data="0"/>
+ <port10 data="-24"/>
+ <port11 data="15995"/>
+ <port12 data="1"/>
+ <port13 data="0"/>
+ </ladspacontrols>
<key>
- <attribute value="tap_deesser.so" name="file" />
- <attribute value="tap_deesser" name="plugin" />
+ <attribute value="tap_deesser.so" name="file"/>
+ <attribute value="tap_deesser" name="plugin"/>
</key>
</effect>
- <effect autoquit="1" gate="0" name="ladspaeffect" wet="-1" on="1" >
- <ladspacontrols port02="0.99897" port03="0.749" port04="0" port05="1" ports="4" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="-1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.749"/>
+ <port04 data="0.0005"/>
+ <port05 data="1"/>
+ </ladspacontrols>
<key>
- <attribute value="caps" name="file" />
- <attribute value="Plate2x2" name="plugin" />
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
</key>
</effect>
- <effect autoquit="1" gate="0" name="stereomatrix" wet="0.2" on="1" >
- <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="stereomatrix" wet="0.2" on="1">
+ <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5"/>
<key/>
</effect>
</fxchain>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/BitInvader/alien_strings.xpf b/data/presets/BitInvader/alien_strings.xpf
index 62c5163..d29fdca 100644
--- a/data/presets/BitInvader/alien_strings.xpf
+++ b/data/presets/BitInvader/alien_strings.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20060123" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="alien_strings" basetone="9" tab="1" >
- <bitinvader sampleLength="128" interpolation="1" version="0.1" normalize="0" sampleShape="PKaOPeKT5r6uR+G9CtejvczMTL2PwvW8CtejvAAAAAAK16M8CtejPI/C9TzMzEw9j8J1PY/CdT2PwnU9j8J1PY/CdT2PwnU9j8J1PczMTD2PwvU8CtejPArXIzwK1yO8CtejvI/C9bzMzEy9KVyPvQrXo73sUbi9rkfhvY/C9b2PwvW9uB4FvpqZGb4K1yO+CtcjvnsULr7sUTi+XI9Cvs3MTL7NzEy+zcxMvs3MTL7NzEy+PgpXvq5HYb6uR2G+rkdhvh6Fa76PwnW+j8J1vo/Cdb6PwnW+j8J1vo/Cdb6PwnW+j8J1vo/Cdb6PwnW+j8J1vo/Cdb6PwnW+HoVrvq5HYb4+Cle+zcxMvlyPQr57FC6+CtcjvpqZGb64HgW+rkfhvc3MzL3s [...]
- <eldata fres="0.21" ftype="0" fcut="3840" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.33" ctlenvamt="0" latt="0" sus="0.49" lspd="0.7311" att="0.4" pdel="0" lamt="0" dec="0.897" userwavefile="" x100="1" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.274" ctlenvamt="1" latt="0" sus="0" lspd="0.01" att="0.494" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="1" rel="0.1" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.804" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="alien_strings" tab="1">
+ <bitinvader sampleLength="128" version="0.1" normalize="0" sampleShape="PKaOPeKT5r6uR+G9CtejvczMTL2PwvW8CtejvAAAAAAK16M8CtejPI/C9TzMzEw9j8J1PY/CdT2PwnU9j8J1PY/CdT2PwnU9j8J1PczMTD2PwvU8CtejPArXIzwK1yO8CtejvI/C9bzMzEy9KVyPvQrXo73sUbi9rkfhvY/C9b2PwvW9uB4FvpqZGb4K1yO+CtcjvnsULr7sUTi+XI9Cvs3MTL7NzEy+zcxMvs3MTL7NzEy+PgpXvq5HYb6uR2G+rkdhvh6Fa76PwnW+j8J1vo/Cdb6PwnW+j8J1vo/Cdb6PwnW+j8J1vo/Cdb6PwnW+j8J1vo/Cdb6PwnW+HoVrvq5HYb4+Cle+zcxMvlyPQr57FC6+CtcjvpqZGb64HgW+rkfhvc3MzL3sUbi9KVyPvczMTL0K1y [...]
+ <eldata fres="0.21" ftype="0" fcut="3840" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.33" latt="0" sus="0.49" lspd="0.7311" att="0.4" pdel="0" lfosyncmode="0" lamt="0" dec="0.897" x100="1" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="1" amt="0" rel="0.274" latt="0" sus="0" lspd="0.01" att="0.494" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.1" latt="0" sus="0" lspd="0.1" att="0.804" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0"/>
</eldata>
- <arpandchords arpmode="1" chordrange="4" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="74" arpsyncmode="6" arptime="107" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="107" arprange="1" arpsyncmode="6" arpmode="1" chord="0" chordrange="4" arp="74" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="107" arprange="1" arpsyncmode="6" arpmode="1" chord="0" chordrange="4" arp="74" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/beehive.xpf b/data/presets/BitInvader/beehive.xpf
index a4c5840..b03ba92 100644
--- a/data/presets/BitInvader/beehive.xpf
+++ b/data/presets/BitInvader/beehive.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20060123" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="beehive" basetone="9" tab="1" >
- <bitinvader sampleLength="30" interpolation="1" version="0.1" normalize="1" sampleShape="AAAAAPMEtT56glo/eoJaP/IEtT72BLW+eoJav3iCWr/vBLW+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI/CdT3NzEw+rkfhPlK4Hj97FC4/pHA9P1yPQj89Clc/rkdhP65HYT/Xo3A/j8J1P0jhej8AAIA/" />
- <eldata fres="0.43" ftype="1" fcut="1120" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.65" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.496" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="1" rel="0.274" ctlenvamt="1" latt="0" sus="0" lspd="0.01" att="0.494" pdel="0" lamt="1" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="beehive" tab="1">
+ <bitinvader sampleLength="30" version="0.1" normalize="1" sampleShape="AAAAAPMEtT56glo/eoJaP/IEtT72BLW+eoJav3iCWr/vBLW+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI/CdT3NzEw+rkfhPlK4Hj97FC4/pHA9P1yPQj89Clc/rkdhP65HYT/Xo3A/j8J1P0jhej8AAIA/" interpolation="1"/>
+ <eldata fres="0.43" ftype="1" fcut="1120" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.65" latt="0" sus="0" lspd="0.1" att="0.496" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="1" amt="1" rel="0.274" latt="0" sus="0" lspd="0.01" att="0.494" pdel="0" lfosyncmode="0" lamt="1" dec="0.499" x100="0" lshp="0" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="4" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="4" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="4" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/bell.xpf b/data/presets/BitInvader/bell.xpf
index ce2abec..a5346e2 100644
--- a/data/presets/BitInvader/bell.xpf
+++ b/data/presets/BitInvader/bell.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20060123" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="bell" basetone="9" tab="0" >
- <bitinvader sampleLength="8" interpolation="1" version="0.1" normalize="0" sampleShape="AAAAAPMENT8AAIA/8wQ1Py69u7P1BDW/AACAv+8ENb8=" />
- <eldata fres="0.43" ftype="0" fcut="1280" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.351" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.676" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0.494" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="bell" tab="0">
+ <bitinvader sampleLength="8" version="0.1" normalize="0" sampleShape="AAAAAPMENT8AAIA/8wQ1Py69u7P1BDW/AACAv+8ENb8=" interpolation="1"/>
+ <eldata fres="0.43" ftype="0" fcut="1280" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.351" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.676" latt="0" sus="0.499" lspd="0.1" att="0.494" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="4" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="4" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="4" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/cello.xpf b/data/presets/BitInvader/cello.xpf
index 44990bb..50ef327 100644
--- a/data/presets/BitInvader/cello.xpf
+++ b/data/presets/BitInvader/cello.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="cello" basetone="9" tab="0" >
- <bitinvader sampleLength="128" interpolation="1" version="0.1" normalize="1" sampleShape="xUHivbW52r2yLVm+IY2QvlbDqr5qnbS+bhe3vm5Bt74UH4q+NgEbvlF9KL7+kX6+ILePviYNk74+YZ++W4utvighlL65edy9rZnWPeoZdT45f5w+VgurPjr5nD55STw+qsHUPIoBRbyeyc491VlqPszNZT7coW09IAEQvgYzg75QAai+fAO+vixDlr5++b692JHrPfYlez7W9Wo+vNFdPRRhCr7gOXC+JN+Rvui5c76P4Ue9IYUQPuepcz4vi5c+WCesPiNFkT6CycA9tiHbvao9Vb4GT4O+tZVavkuxJb2ygdg9Y1UxPuBZcD7EDWI+QumgPXQJur2WFUu+CWOEvkThob5y9bi+iEPEvo+Fx75vb7e+RrGivi2Zlr60KVq+8oF4vWjhsz1+ [...]
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.727" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.517" pdel="0" lamt="0" dec="0" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="cello" tab="0">
+ <bitinvader sampleLength="128" version="0.1" normalize="1" sampleShape="xUHivbW52r2yLVm+IY2QvlbDqr5qnbS+bhe3vm5Bt74UH4q+NgEbvlF9KL7+kX6+ILePviYNk74+YZ++W4utvighlL65edy9rZnWPeoZdT45f5w+VgurPjr5nD55STw+qsHUPIoBRbyeyc491VlqPszNZT7coW09IAEQvgYzg75QAai+fAO+vixDlr5++b692JHrPfYlez7W9Wo+vNFdPRRhCr7gOXC+JN+Rvui5c76P4Ue9IYUQPuepcz4vi5c+WCesPiNFkT6CycA9tiHbvao9Vb4GT4O+tZVavkuxJb2ygdg9Y1UxPuBZcD7EDWI+QumgPXQJur2WFUu+CWOEvkThob5y9bi+iEPEvo+Fx75vb7e+RrGivi2Zlr60KVq+8oF4vWjhsz1+0T4+dqk6PsoBZT2jUd [...]
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.727" latt="0" sus="0" lspd="0.1" att="0.517" pdel="0" lfosyncmode="0" lamt="0" dec="0" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/drama.xpf b/data/presets/BitInvader/drama.xpf
index 7ed801d..fc564fa 100644
--- a/data/presets/BitInvader/drama.xpf
+++ b/data/presets/BitInvader/drama.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20060123" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="drama" basetone="9" tab="0" >
- <bitinvader sampleLength="128" interpolation="1" version="0.1" normalize="0" sampleShape="kNtHv4tFRb+EOUK/ftM+v3Y1O79vaTe/Z3Mzv19tL79Xdyu/T4Mnv0e1I79ACSC/OaEcvzNnGb8tbRa/J70TvyNNEb8eNQ+/G10NvxjRC78Vlwq/E58JvxLxCL8Rgwi/EU8IvxFZCL8RkQi/Eu0IvxN3Cb8UHwq/FucKvxexC78ZlQy/G3cNvx1bDr8fRw+/ICsQvyLxEL8jsxG/JWcSvyYHE78ngRO/KOETvygpFL8pWRS/KXEUvylnFL8pSxS/KBUUvyjHE78naxO/JusSvyVhEr8jvRG/IgkRvyFDEL8fdw+/HaMOvxu9Db8azQy/GN8LvxbnCr8U6wm/Eu8IvxD5B78O/wa/DAUGvwoXBb8IKwS/B0MDvwVbAr8DdwG/AZsAv/+N/778 [...]
- <eldata fres="0.43" ftype="6" fcut="1120" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.351" ctlenvamt="0" latt="0" sus="0" lspd="0.7311" att="0.058" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="1" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.274" ctlenvamt="1" latt="0" sus="0" lspd="0.01" att="0.494" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="drama" tab="0">
+ <bitinvader sampleLength="128" version="0.1" normalize="0" sampleShape="kNtHv4tFRb+EOUK/ftM+v3Y1O79vaTe/Z3Mzv19tL79Xdyu/T4Mnv0e1I79ACSC/OaEcvzNnGb8tbRa/J70TvyNNEb8eNQ+/G10NvxjRC78Vlwq/E58JvxLxCL8Rgwi/EU8IvxFZCL8RkQi/Eu0IvxN3Cb8UHwq/FucKvxexC78ZlQy/G3cNvx1bDr8fRw+/ICsQvyLxEL8jsxG/JWcSvyYHE78ngRO/KOETvygpFL8pWRS/KXEUvylnFL8pSxS/KBUUvyjHE78naxO/JusSvyVhEr8jvRG/IgkRvyFDEL8fdw+/HaMOvxu9Db8azQy/GN8LvxbnCr8U6wm/Eu8IvxD5B78O/wa/DAUGvwoXBb8IKwS/B0MDvwVbAr8DdwG/AZsAv/+N/7787f2++Vn8vvbF+r7yQf [...]
+ <eldata fres="0.43" ftype="6" fcut="1120" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.351" latt="0" sus="0" lspd="0.7311" att="0.058" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="1" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="1" amt="0" rel="0.274" latt="0" sus="0" lspd="0.01" att="0.494" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="1" chordrange="4" arprange="1" arpdisabled="0" chord="0" chorddisabled="1" arpgate="100" arp="74" arpsyncmode="6" arptime="107" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="107" arprange="1" arpsyncmode="6" arpmode="1" chord="0" chordrange="4" arp="74" arp-enabled="1" chord-enabled="0" arpdisabled="0" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="107" arprange="1" arpsyncmode="6" arpmode="1" chord="0" chordrange="4" arp="74" arp-enabled="1" chord-enabled="0" arpdisabled="0" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/epiano.xpf b/data/presets/BitInvader/epiano.xpf
index c6e6e22..e2ed18d 100644
--- a/data/presets/BitInvader/epiano.xpf
+++ b/data/presets/BitInvader/epiano.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20060123" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="epiano" basetone="9" tab="1" >
- <bitinvader sampleLength="30" interpolation="1" version="0.1" normalize="1" sampleShape="AAAAAPMEtT56glo/eoJaP/IEtT72BLW+eoJav3iCWr/vBLW+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" />
- <eldata fres="0.43" ftype="0" fcut="1280" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.351" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.22" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.676" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0.494" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="epiano" tab="1">
+ <bitinvader sampleLength="30" version="0.1" normalize="1" sampleShape="AAAAAPMEtT56glo/eoJaP/IEtT72BLW+eoJav3iCWr/vBLW+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" interpolation="1"/>
+ <eldata fres="0.43" ftype="0" fcut="1280" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.351" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.22"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.676" latt="0" sus="0.499" lspd="0.1" att="0.494" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="4" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="4" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="4" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/invaders_must_die.xpf b/data/presets/BitInvader/invaders_must_die.xpf
new file mode 100644
index 0000000..78c50c3
--- /dev/null
+++ b/data/presets/BitInvader/invaders_must_die.xpf
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Invaders must die" solo="0">
+ <instrumenttrack pan="0" fxch="11" pitchrange="1" pitch="0" basenote="45" vol="30.2">
+ <instrument name="bitinvader">
+ <bitinvader version="0.1" sampleLength="56" normalize="1" sampleShape="AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" interpolation="0"/>
+ </instrument>
+ <eldata fres="0.5" ftype="1" fcut="185" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.264" lamt="0" syncmode="0" latt="0" rel="0.078" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="27" arprange="2" arptime_denominator="16" syncmode="8" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.749"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="stereoenhancer" wet="1" on="0">
+ <stereoenhancercontrols width="42"/>
+ <key/>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/BitInvader/pluck.xpf b/data/presets/BitInvader/pluck.xpf
index 3740904..b71974e 100644
--- a/data/presets/BitInvader/pluck.xpf
+++ b/data/presets/BitInvader/pluck.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060222" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="pluck" basetone="9" tab="1" >
- <bitinvader sampleLength="128" interpolation="1" version="0.1" normalize="1" sampleShape="QAGguf+B/zwBYYA9gsHAPQF5AD5BYSA+gClAPr+5Xz7+CX8+HgWPPj1pnj5bma0+eZm8Ppdlyz60+dk+0VXoPu1x9j4EJQI/EukIPx+NDz8sCRY/OVkcP0WFIj9RfSg/XU8uP2jrMz9zXTk/fZc+P4elQz+Re0g/mh9NP6OJUT+rvVU/s7dZP7t9XT/CCWE/yVVkP89xZz/VR2o/2ulsP99Nbz/jc3E/52FzP+oNdT/tg3Y/77l3P/G3eD/zdXk/9P15P/VHej/1VXo/9Ct6P/TJeT/yLXk/8V14P+9Tdz/sF3Y/6aV0P+b/cj/iKXE/3h9vP9rpbD/VhWo/0PNnP8o3ZT/FUWI/v0VfP7gRXD+xuVg/q0NVP6OnUT+c7U0/lBdKP4wnRj+E [...]
- <eldata fres="1.17" ftype="0" fcut="2400" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.39" ctlenvamt="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.391" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="1" rel="0" ctlenvamt="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.18" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="pluck" tab="1">
+ <bitinvader sampleLength="128" version="0.1" normalize="1" sampleShape="QAGguf+B/zwBYYA9gsHAPQF5AD5BYSA+gClAPr+5Xz7+CX8+HgWPPj1pnj5bma0+eZm8Ppdlyz60+dk+0VXoPu1x9j4EJQI/EukIPx+NDz8sCRY/OVkcP0WFIj9RfSg/XU8uP2jrMz9zXTk/fZc+P4elQz+Re0g/mh9NP6OJUT+rvVU/s7dZP7t9XT/CCWE/yVVkP89xZz/VR2o/2ulsP99Nbz/jc3E/52FzP+oNdT/tg3Y/77l3P/G3eD/zdXk/9P15P/VHej/1VXo/9Ct6P/TJeT/yLXk/8V14P+9Tdz/sF3Y/6aV0P+b/cj/iKXE/3h9vP9rpbD/VhWo/0PNnP8o3ZT/FUWI/v0VfP7gRXD+xuVg/q0NVP6OnUT+c7U0/lBdKP4wnRj+EIUI/fP89P3TLOT9rhz [...]
+ <eldata fres="1.17" ftype="0" fcut="2400" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.39" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.391" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.18" x100="0" lshp="0" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="2" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="1" send="0" inports="80:0 CS46XX:CS46XX" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inports="80:0 CS46XX:CS46XX" inputchannel="0" outputchannel="1" send="0" receive="1"/>
+ <chordcreator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/soft_pad.xpf b/data/presets/BitInvader/soft_pad.xpf
index c82e051..63803ac 100644
--- a/data/presets/BitInvader/soft_pad.xpf
+++ b/data/presets/BitInvader/soft_pad.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="soft_pad" basetone="9" tab="0" >
- <bitinvader sampleLength="128" interpolation="1" version="0.1" normalize="0" sampleShape="4lVxvqJBUb6xfVi+j0VHvkFRIL7UGeq9Z2GzvV4hr72iwdC98Kn3vQjdA77+2f697NH1vQuFBb5JhSS+nEVOvuDRb77vXXe+v0lfvmqlNL4eCQ++Ar0Avh6tDr5cKS6+lWVKvqjZU76RVUi+X2kvvighFL71Qfq9pMHRvURhor2CAUG9OAGcu2xxNj2O2cY9NbEaPqjNUz4O+4Y+Q1+hPmgLtD52B7s+bbG2PlzJrT5Vf6o+aDu0Ppdbyz7SO+k+BPsBPxTCCT8WCws/ECUIPwgcBD8AOQA/7Af2PsWJ4j6Ff8I+NVWaPtaBaj5+ST8+gMk/Pst5ZT4ax4w+QEGgPkpBpT47cZ0+Ia2QPg7Thj4EC4I+9k17PsphZT50BTo+75n3PbRxWj24 [...]
- <eldata fres="0.5" ftype="0" fcut="9120" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.727" ctlenvamt="1" latt="0" sus="0" lspd="0.1" att="0.657" pdel="0" lamt="0" dec="0" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="soft_pad" tab="0">
+ <bitinvader sampleLength="128" version="0.1" normalize="0" sampleShape="4lVxvqJBUb6xfVi+j0VHvkFRIL7UGeq9Z2GzvV4hr72iwdC98Kn3vQjdA77+2f697NH1vQuFBb5JhSS+nEVOvuDRb77vXXe+v0lfvmqlNL4eCQ++Ar0Avh6tDr5cKS6+lWVKvqjZU76RVUi+X2kvvighFL71Qfq9pMHRvURhor2CAUG9OAGcu2xxNj2O2cY9NbEaPqjNUz4O+4Y+Q1+hPmgLtD52B7s+bbG2PlzJrT5Vf6o+aDu0Ppdbyz7SO+k+BPsBPxTCCT8WCws/ECUIPwgcBD8AOQA/7Af2PsWJ4j6Ff8I+NVWaPtaBaj5+ST8+gMk/Pst5ZT4ax4w+QEGgPkpBpT47cZ0+Ia2QPg7Thj4EC4I+9k17PsphZT50BTo+75n3PbRxWj24Ady7jFFGvRrZjL0gSZ [...]
+ <eldata fres="0.5" ftype="0" fcut="9120" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="1" amt="1" rel="0.727" latt="0" sus="0" lspd="0.1" att="0.657" pdel="0" lfosyncmode="0" lamt="0" dec="0" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/spacefx.xpf b/data/presets/BitInvader/spacefx.xpf
index 8e7b93f..b10f473 100644
--- a/data/presets/BitInvader/spacefx.xpf
+++ b/data/presets/BitInvader/spacefx.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20060123" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="spacefx" basetone="9" tab="1" >
- <bitinvader sampleLength="68" interpolation="0" version="0.1" normalize="0" sampleShape="W/iCvqwtgL2mPdg+iodDP+wPEz9vmss5NYLSvr5Zp764oRs9I/l+PjGqND73GnY9WMfrPUu8ej6Rqlk+PSsXO54U/L10nDk97x62Pmty2z4tfu49K3SIvvHCjb7lk/090lz+Pl543T6v5qQ8QySRvjVzN75K9Es+qUf9Pr9J8D7l4AY+KxKgvlRRD78AQsa+9qL8PTwnFj+X3yc/b+W2PlNf0zsVwCq+fEhGvtRdQL4b0Bu+nLoCvc53Fz63MJY+ch6qPq4daj76RsO87J6ovjZj8L6GTpO+gpDEPXm/tT5TBo4+iBUcvXS8nr608KW+QNtwvf8ioz5qDgY/iTKrPksJMr70uhu/nh8Xv01bA74=" />
- <eldata fres="0.43" ftype="4" fcut="1120" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="0" rel="0.65" ctlenvamt="0" latt="0" sus="0" lspd="0.7311" att="0.496" pdel="0" lamt="1" dec="0.499" userwavefile="" x100="1" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.274" ctlenvamt="1" latt="0" sus="0" lspd="0.01" att="0.494" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="spacefx" tab="1">
+ <bitinvader sampleLength="68" version="0.1" normalize="0" sampleShape="W/iCvqwtgL2mPdg+iodDP+wPEz9vmss5NYLSvr5Zp764oRs9I/l+PjGqND73GnY9WMfrPUu8ej6Rqlk+PSsXO54U/L10nDk97x62Pmty2z4tfu49K3SIvvHCjb7lk/090lz+Pl543T6v5qQ8QySRvjVzN75K9Es+qUf9Pr9J8D7l4AY+KxKgvlRRD78AQsa+9qL8PTwnFj+X3yc/b+W2PlNf0zsVwCq+fEhGvtRdQL4b0Bu+nLoCvc53Fz63MJY+ch6qPq4daj76RsO87J6ovjZj8L6GTpO+gpDEPXm/tT5TBo4+iBUcvXS8nr608KW+QNtwvf8ioz5qDgY/iTKrPksJMr70uhu/nh8Xv01bA74=" interpolation="0"/>
+ <eldata fres="0.43" ftype="4" fcut="1120" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.65" latt="0" sus="0" lspd="0.7311" att="0.496" pdel="0" lfosyncmode="0" lamt="1" dec="0.499" x100="1" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="1" amt="0" rel="0.274" latt="0" sus="0" lspd="0.01" att="0.494" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="4" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="4" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="4" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/subbass.xpf b/data/presets/BitInvader/subbass.xpf
index d4d9373..50ebb46 100644
--- a/data/presets/BitInvader/subbass.xpf
+++ b/data/presets/BitInvader/subbass.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="7" vol="100" name="subbass" basetone="9" tab="0" >
- <bitinvader sampleLength="128" interpolation="1" version="0.1" normalize="1" sampleShape="2kpgviIPhz3VQAM+oJkyu8pZrr5y/Ta/5nhxv9QFf7+cp3a//hNovwSBTb+OOR+/s2TIvruEJL5Oy2I9DDSIPmge7D4MVx0/pyQ5P5aHTz8Qp2M/XIhxP/SJdT/mnnI/vbltP2jiZj+x51o/F5pJP9gINj84YiE/iLIJP/+T3D5WAaQ+bGVePt5p8j06A3o81CG5vQSrP77SmIm+xamuvjpD1L5u/vu+wEURv+w7Ib878Su/XHgxv3ClM7+oLzS/HPIyv4ZlLr/YxSW/wR0avzoZDb+KHv++RRrjvoILxr7yV6e+DyCFvhxUO74+g8a9lA3luyFIqz0CcTM+qPOIPq+Rtj68guA++kkDP1jHFD8MlyQ/vC4yP8h7PT/ZxEY/uqdNP9osUT9W [...]
- <eldata fres="1.13" ftype="0" fcut="4960" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lfosyncmode="0" lpdel="0" amt="1" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0.674" pdel="0" lamt="0" dec="0.499" userwavefile="instruments/bassslap01.ogg" x100="0" lshp="4" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="subbass" tab="0">
+ <bitinvader sampleLength="128" version="0.1" normalize="1" sampleShape="2kpgviIPhz3VQAM+oJkyu8pZrr5y/Ta/5nhxv9QFf7+cp3a//hNovwSBTb+OOR+/s2TIvruEJL5Oy2I9DDSIPmge7D4MVx0/pyQ5P5aHTz8Qp2M/XIhxP/SJdT/mnnI/vbltP2jiZj+x51o/F5pJP9gINj84YiE/iLIJP/+T3D5WAaQ+bGVePt5p8j06A3o81CG5vQSrP77SmIm+xamuvjpD1L5u/vu+wEURv+w7Ib878Su/XHgxv3ClM7+oLzS/HPIyv4ZlLr/YxSW/wR0avzoZDb+KHv++RRrjvoILxr7yV6e+DyCFvhxUO74+g8a9lA3luyFIqz0CcTM+qPOIPq+Rtj68guA++kkDP1jHFD8MlyQ/vC4yP8h7PT/ZxEY/uqdNP9osUT9WVlE/Ct5PP56cTj8xiU [...]
+ <eldata fres="1.13" ftype="0" fcut="4960" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elcut userwavefile="instruments/bassslap01.ogg" lpdel="0" ctlenvamt="0" amt="1" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0.674" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="4" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="3" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="3" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="3" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/sweep_pad.xpf b/data/presets/BitInvader/sweep_pad.xpf
index e4f4ee4..c2e6a5c 100644
--- a/data/presets/BitInvader/sweep_pad.xpf
+++ b/data/presets/BitInvader/sweep_pad.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20060123" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="sweep_pad" basetone="9" tab="1" >
- <bitinvader sampleLength="8" interpolation="0" version="0.1" normalize="0" sampleShape="+MrwPiRn7r4WUV6/xEkNv429tL6ofBA+P7uAPtTiwD4=" />
- <eldata fres="0.43" ftype="0" fcut="1280" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.351" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0.164" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lfosyncmode="0" lpdel="0" amt="0.885" rel="0.676" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0.494" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="sweep_pad" tab="1">
+ <bitinvader sampleLength="8" version="0.1" normalize="0" sampleShape="+MrwPiRn7r4WUV6/xEkNv429tL6ofBA+P7uAPtTiwD4=" interpolation="0"/>
+ <eldata fres="0.43" ftype="0" fcut="1280" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.351" latt="0" sus="0.499" lspd="0.1" att="0.164" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0.885" rel="0.676" latt="0" sus="0.499" lspd="0.1" att="0.494" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="2" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/toy_piano.xpf b/data/presets/BitInvader/toy_piano.xpf
index 3976aff..0fed791 100644
--- a/data/presets/BitInvader/toy_piano.xpf
+++ b/data/presets/BitInvader/toy_piano.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="toy_piano" basetone="9" tab="1" >
- <bitinvader sampleLength="128" interpolation="1" version="0.1" normalize="0" sampleShape="cAE4OuAB8DkIAYS6gAFAugABALmgAdC5AAEAuiABEDp4Abw6UAEoOggBhLogAZC6gAHAuAgBhLpAASC7oAFQugABgDqAAUA5gAHAOJABSLpaAa27gAFAvHLBuLxBgSC9xCFive4hd72LYUW9GCEMvUZBI70UMYq9+YH8vZIpSb7DkWG+S4Elvnwhvr044Zu9MbGYvQlRhL2JkcS9UjEpvrABWL7rgXW+EhWJvgYFg765sVy+ftk+vj9pH74dUQ6+W2ktvrmxXL4G1YK+J0mTvhuNjb7owXO+0DFovsYRY76teVa+31lvvg2Nhr7iQXG+ujldvgmphL4G7YK+IDkQvjpBHb3sAfa7dsE6PeQB8j0CMQE+SAGkPSWBkjxSAam7PNGdPWt5NT6d [...]
- <eldata fres="0.5" ftype="0" fcut="9120" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.727" ctlenvamt="1" latt="0" sus="0.717" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.673" userwavefile="" x100="0" lshp="0" hold="0.37" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="toy_piano" tab="1">
+ <bitinvader sampleLength="128" version="0.1" normalize="0" sampleShape="cAE4OuAB8DkIAYS6gAFAugABALmgAdC5AAEAuiABEDp4Abw6UAEoOggBhLogAZC6gAHAuAgBhLpAASC7oAFQugABgDqAAUA5gAHAOJABSLpaAa27gAFAvHLBuLxBgSC9xCFive4hd72LYUW9GCEMvUZBI70UMYq9+YH8vZIpSb7DkWG+S4Elvnwhvr044Zu9MbGYvQlRhL2JkcS9UjEpvrABWL7rgXW+EhWJvgYFg765sVy+ftk+vj9pH74dUQ6+W2ktvrmxXL4G1YK+J0mTvhuNjb7owXO+0DFovsYRY76teVa+31lvvg2Nhr7iQXG+ujldvgmphL4G7YK+IDkQvjpBHb3sAfa7dsE6PeQB8j0CMQE+SAGkPSWBkjxSAam7PNGdPWt5NT6dWU4+zhlnPgLJgD6uyV [...]
+ <eldata fres="0.5" ftype="0" fcut="9120" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="1" amt="1" rel="0.727" latt="0" sus="0.717" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.673" x100="0" lshp="0" hold="0.37"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/BitInvader/wah_synth.xpf b/data/presets/BitInvader/wah_synth.xpf
index ee8877b..e8e68c5 100644
--- a/data/presets/BitInvader/wah_synth.xpf
+++ b/data/presets/BitInvader/wah_synth.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20060123" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="6" vol="100" name="wah_synth" basetone="9" tab="0" >
- <bitinvader sampleLength="56" interpolation="1" version="0.1" normalize="1" sampleShape="AAAAAKJN5T2H3GM+VxqpPgMm3j5BMwg/CJ0fP/MENT89Ctc+XI/CPlyPwj57FK4+CtejPpqZmT4pXI8+rkdhPq5HYT7NzEw+zcxMPo/CdT4pXI8+CtejPgrXoz57FK4+7FG4PlyPwj6H3GM+nE3lPS69u7OzTeW9k9xjvlYaqb4DJt6+rkfhvq5H4b49Cte+zczMvs3MzL5cj8K+exSuvnsUrr57FK6+CtejvpqZmb4pXI++KVyPvilcj74pXI++KVyPvilcj74pXI++CtejvuxRuL5cj8K+gtxjvpBN5b0=" />
- <eldata fres="0.21" ftype="6" fcut="2720" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.528" ctlenvamt="0" latt="0" sus="0" lspd="0.7311" att="0" pdel="0" lamt="0" dec="0.897" userwavefile="" x100="1" lshp="0" hold="0.234" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.274" ctlenvamt="0" latt="0" sus="0" lspd="0.0199" att="0.494" pdel="0" lamt="1" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="wah_synth" tab="0">
+ <bitinvader sampleLength="56" version="0.1" normalize="1" sampleShape="AAAAAKJN5T2H3GM+VxqpPgMm3j5BMwg/CJ0fP/MENT89Ctc+XI/CPlyPwj57FK4+CtejPpqZmT4pXI8+rkdhPq5HYT7NzEw+zcxMPo/CdT4pXI8+CtejPgrXoz57FK4+7FG4PlyPwj6H3GM+nE3lPS69u7OzTeW9k9xjvlYaqb4DJt6+rkfhvq5H4b49Cte+zczMvs3MzL5cj8K+exSuvnsUrr57FK6+CtejvpqZmb4pXI++KVyPvilcj74pXI++KVyPvilcj74pXI++CtejvuxRuL5cj8K+gtxjvpBN5b0=" interpolation="1"/>
+ <eldata fres="0.21" ftype="6" fcut="2720" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.528" latt="0" sus="0" lspd="0.7311" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.897" x100="1" lshp="0" hold="0.234"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.274" latt="0" sus="0" lspd="0.0199" att="0.494" pdel="0" lfosyncmode="0" lamt="1" dec="0.499" x100="0" lshp="0" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0"/>
</eldata>
- <arpandchords arpmode="1" chordrange="4" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="74" arpsyncmode="6" arptime="107" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="107" arprange="1" arpsyncmode="6" arpmode="1" chord="0" chordrange="4" arp="74" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="107" arprange="1" arpsyncmode="6" arpmode="1" chord="0" chordrange="4" arp="74" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Kicker/Clap dry.xpf b/data/presets/Kicker/Clap dry.xpf
new file mode 100644
index 0000000..f6c9389
--- /dev/null
+++ b/data/presets/Kicker/Clap dry.xpf
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.98" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Dry Clap" solo="0">
+ <instrumenttrack pan="0" fxch="0" scale_type="linear" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="kicker">
+ <kicker decay_numerator="4" decay_denominator="4" distend="0" click="0.4" endnote="0" version="1" decay="223" syncmode="0" noise="1" slope="0.06" dist="0" env="0.568" scale_type="linear" startnote="0" startfreq="150" endfreq="40" gain="1"/>
+ </instrument>
+ <eldata scale_type="linear" fres="1.64" ftype="0" fcut="3114" fwet="0">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.357" lamt="-1" syncmode="0" latt="0" rel="0" amt="1" x100="1" att="0" lpdel="0" hold="0" lshp="2" lspd="0.0997" ctlenvamt="0" lspd_numerator="4" scale_type="linear"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="1" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.001" ctlenvamt="1" lspd_numerator="4" scale_type="linear"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" scale_type="linear"/>
+ </eldata>
+ <chordcreator chord="0" scale_type="linear" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" scale_type="linear" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" scale_type="linear" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" scale_type="linear" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 scale_type="linear" data="-47.97"/>
+ <port03 scale_type="linear" data="0"/>
+ <port04 scale_type="linear" data="0"/>
+ <port05 scale_type="linear" data="0"/>
+ <port06 scale_type="linear" data="0"/>
+ <port07 scale_type="linear" data="0"/>
+ <port08 scale_type="linear" data="0"/>
+ <port09 scale_type="linear" data="2.07"/>
+ <port010 scale_type="linear" data="5.67"/>
+ <port011 scale_type="linear" data="2.7"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" scale_type="linear" autoquit="1" gate="0" name="dualfilter" wet="1" on="1">
+ <DualFilterControls gain2="100" cut1="1721" cut2="6461" mix="-0.4" res1="1.64" res2="0.5" scale_type="linear" filter1="0" filter2="1" enabled1="1" enabled2="1" gain1="100"/>
+ <key/>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/Clap.xpf b/data/presets/Kicker/Clap.xpf
new file mode 100644
index 0000000..d354051
--- /dev/null
+++ b/data/presets/Kicker/Clap.xpf
@@ -0,0 +1,52 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Clap" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="200">
+ <instrument name="kicker">
+ <kicker click="0.4" endnote="0" version="1" decay="439" noise="1" slope="0.06" dist="0" env="0.708" startnote="0" startfreq="150" endfreq="40" gain="1"/>
+ </instrument>
+ <eldata fres="1.64" ftype="8" fcut="2765" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="-1" syncmode="0" latt="0" rel="0.1" amt="0" x100="1" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.0997" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="1" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.001" ctlenvamt="1" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="0"/>
+ <port03 data="0"/>
+ <port04 data="0"/>
+ <port05 data="0"/>
+ <port06 data="0"/>
+ <port07 data="0"/>
+ <port08 data="0"/>
+ <port09 data="4.14"/>
+ <port010 data="9.9"/>
+ <port011 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.121765"/>
+ <port03 data="0.10486"/>
+ <port04 data="0.687156"/>
+ <port05 data="0.31"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/HihatClosed.xpf b/data/presets/Kicker/HihatClosed.xpf
new file mode 100644
index 0000000..66dd8e7
--- /dev/null
+++ b/data/presets/Kicker/HihatClosed.xpf
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Closed Hihat" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="kicker">
+ <kicker click="0.4" endnote="0" version="1" decay="440" noise="1" slope="0.06" dist="0.8" env="0.202" startnote="0" startfreq="150" endfreq="40" gain="1"/>
+ </instrument>
+ <eldata fres="2.66" ftype="1" fcut="4184" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/HihatOpen.xpf b/data/presets/Kicker/HihatOpen.xpf
new file mode 100644
index 0000000..c0f0aa6
--- /dev/null
+++ b/data/presets/Kicker/HihatOpen.xpf
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Open Hihat" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="kicker">
+ <kicker click="0.4" endnote="0" version="1" decay="1605" noise="1" slope="0.06" dist="0.8" env="0.273" startnote="0" startfreq="150" endfreq="40" gain="1"/>
+ </instrument>
+ <eldata fres="2.2" ftype="1" fcut="5062" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.002" userwavefile="" pdel="0" dec="0.216" lamt="0" syncmode="0" latt="0" rel="0" amt="1" x100="0" att="0" lpdel="0" hold="0.008" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/KickPower.xpf b/data/presets/Kicker/KickPower.xpf
new file mode 100644
index 0000000..27259ce
--- /dev/null
+++ b/data/presets/Kicker/KickPower.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.99" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Kick power" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="kicker">
+ <kicker decay_numerator="4" decay_denominator="4" distend="0.8" click="0.25" endnote="0" version="1" decay="360" syncmode="0" noise="0.2" slope="0.372" dist="1.2" env="0.163" startnote="0" startfreq="145" endfreq="30" gain="1"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/Shaker.xpf b/data/presets/Kicker/Shaker.xpf
new file mode 100644
index 0000000..13eee95
--- /dev/null
+++ b/data/presets/Kicker/Shaker.xpf
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Shaker" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="105" vol="22.7">
+ <instrument name="kicker">
+ <kicker click="0.95" endnote="1" version="1" decay="2000" noise="0.65" slope="1" dist="7.4" env="0.737" startnote="1" startfreq="150" endfreq="132" gain="1"/>
+ </instrument>
+ <eldata fres="0.5" ftype="1" fcut="3085" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/SnareLong.xpf b/data/presets/Kicker/SnareLong.xpf
new file mode 100644
index 0000000..b8b2f9d
--- /dev/null
+++ b/data/presets/Kicker/SnareLong.xpf
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Snare" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="kicker">
+ <kicker click="0.4" endnote="0" version="1" decay="861" noise="1" slope="0.06" dist="0" env="1" startnote="0" startfreq="150" endfreq="40" gain="1"/>
+ </instrument>
+ <eldata fres="0.64" ftype="3" fcut="988" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.0997" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.001" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/SnareMarch.xpf b/data/presets/Kicker/SnareMarch.xpf
new file mode 100644
index 0000000..d4d1ad0
--- /dev/null
+++ b/data/presets/Kicker/SnareMarch.xpf
@@ -0,0 +1,161 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.99" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Snare March" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="kicker">
+ <kicker decay_numerator="4" decay_denominator="4" distend="0" click="1" endnote="0" version="1" decay="240" syncmode="0" noise="0.85" slope="1" dist="0" env="0.644" startnote="0" startfreq="229" endfreq="195" gain="1"/>
+ </instrument>
+ <eldata fres="0.56" ftype="3" fcut="929" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.294" pdel="0" userwavefile="" dec="0.453" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="2" lspd="0.0997" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.001" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="6" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="0"/>
+ <port03 data="0"/>
+ <port04 data="2.07"/>
+ <port05 data="3.51"/>
+ <port06 data="-47.97"/>
+ <port07 data="-12.69"/>
+ <port08 data="-47.97"/>
+ <port09 data="-47.34"/>
+ <port010 data="-47.97"/>
+ <port011 data="9.99"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="0.5" on="0">
+ <ladspacontrols ports="4">
+ <port02 data="0.370265"/>
+ <port03 data="0"/>
+ <port04 data="0.9995"/>
+ <port05 data="0.10875"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="9">
+ <port07>
+ <data scale_type="log" value="0.4" id="6315252"/>
+ </port07>
+ <port08>
+ <data scale_type="log" value="2000.25" id="2498139"/>
+ </port08>
+ <port09 data="0"/>
+ <port010 data="1"/>
+ <port011 data="0.5"/>
+ <port012 data="1"/>
+ <port013 data="0"/>
+ <port014>
+ <data scale_type="log" value="659.34" id="5231681"/>
+ </port014>
+ <port015>
+ <data scale_type="log" value="4862.63" id="1579810"/>
+ </port015>
+ </ladspacontrols>
+ <key>
+ <attribute value="calf" name="file"/>
+ <attribute value="Reverb" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="0.18" on="1">
+ <ladspacontrols ports="13">
+ <port04 data="0"/>
+ <port05 data="1.02375"/>
+ <port06 data="0.96"/>
+ <port07 data="0.50125"/>
+ <port012 data="5.049"/>
+ <port013 data="10"/>
+ <port015>
+ <data scale_type="log" value="20000" id="8103466"/>
+ </port015>
+ <port016>
+ <data scale_type="log" value="10" id="4889780"/>
+ </port016>
+ <port017>
+ <data scale_type="log" value="20000" id="6261168"/>
+ </port017>
+ <port018>
+ <data scale_type="log" value="10" id="4037431"/>
+ </port018>
+ <port019>
+ <data scale_type="log" value="215.82" id="6293968"/>
+ </port019>
+ <port020 data="15.9973"/>
+ <port021>
+ <data scale_type="log" value="0.9999" id="2846145"/>
+ </port021>
+ </ladspacontrols>
+ <key>
+ <attribute value="calf" name="file"/>
+ <attribute value="Saturator" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="13">
+ <port04 data="0"/>
+ <port05 data="1.02375"/>
+ <port06 data="0.96"/>
+ <port07 data="1"/>
+ <port012 data="5.049"/>
+ <port013 data="10"/>
+ <port015>
+ <data scale_type="log" value="20000" id="7709628"/>
+ </port015>
+ <port016>
+ <data scale_type="log" value="10" id="7480205"/>
+ </port016>
+ <port017>
+ <data scale_type="log" value="20000" id="4036038"/>
+ </port017>
+ <port018>
+ <data scale_type="log" value="10" id="1042561"/>
+ </port018>
+ <port019>
+ <data scale_type="log" value="721.71" id="92193"/>
+ </port019>
+ <port020 data="1.31484"/>
+ <port021>
+ <data scale_type="log" value="0.100237" id="7520542"/>
+ </port021>
+ </ladspacontrols>
+ <key>
+ <attribute value="calf" name="file"/>
+ <attribute value="Saturator" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="-47.97"/>
+ <port03 data="-10.8"/>
+ <port04 data="0"/>
+ <port05 data="0"/>
+ <port06 data="0"/>
+ <port07 data="0"/>
+ <port08 data="0"/>
+ <port09 data="0"/>
+ <port010 data="0.72"/>
+ <port011 data="2.52"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/TR909-RimShot.xpf b/data/presets/Kicker/TR909-RimShot.xpf
new file mode 100644
index 0000000..e8626db
--- /dev/null
+++ b/data/presets/Kicker/TR909-RimShot.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.98" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="TR909-RimShot" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="kicker">
+ <kicker decay_numerator="4" decay_denominator="4" distend="0.8" click="0.15" endnote="0" version="1" decay="40" syncmode="0" noise="0.13" slope="0.265" dist="100" env="0.044" startnote="0" startfreq="330" endfreq="5" gain="0.75"/>
+ </instrument>
+ <eldata fres="2.75" ftype="1" fcut="100" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.2" lamt="1" syncmode="7" latt="0.1" rel="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0027" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="6" latt="0" rel="0" amt="0.2" x100="0" att="0" lpdel="0" hold="0.2" lshp="1" lspd="0.0054" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0" amt="0.2" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Kicker/TrapKick.xpf b/data/presets/Kicker/TrapKick.xpf
new file mode 100644
index 0000000..a8ad897
--- /dev/null
+++ b/data/presets/Kicker/TrapKick.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Trap kick" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="93" vol="100">
+ <instrument name="kicker">
+ <kicker decay_numerator="4" decay_denominator="4" distend="3.3" click="0.25" endnote="1" version="1" decay="1714" syncmode="0" noise="0.11" slope="0.484" dist="2.5" env="0.3" startnote="1" startfreq="5" endfreq="5" gain="0.9"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/LB302/AcidLead.xpf b/data/presets/LB302/AcidLead.xpf
new file mode 100644
index 0000000..e264f95
--- /dev/null
+++ b/data/presets/LB302/AcidLead.xpf
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Acid Lead" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="45" vol="66">
+ <instrument name="lb302">
+ <lb302 db24="0" vcf_res="1.25" vcf_dec="0.26" dead="0" vcf_cut="0.2" vcf_mod="0.27" dist="1" slide_dec="0.19" slide="0" shape="5"/>
+ </instrument>
+ <eldata fres="9.6" ftype="7" fcut="3360" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port04 data="144.113"/>
+ <port05 data="16"/>
+ <port06 data="8"/>
+ <port07 data="8"/>
+ <port08 data="0.5"/>
+ <port09 data="0.39"/>
+ <port010 data="2"/>
+ <port011 data="1"/>
+ <port012 data="1"/>
+ <port013 data="1"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="calf" name="file"/>
+ <attribute value="VintageDelay" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/LB302/AngryLead.xpf b/data/presets/LB302/AngryLead.xpf
new file mode 100644
index 0000000..9d99558
--- /dev/null
+++ b/data/presets/LB302/AngryLead.xpf
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Angry Lead" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="lb302">
+ <lb302 db24="0" vcf_res="0.765" vcf_dec="0.28" dead="1" vcf_cut="0.615" vcf_mod="0.27" dist="0.08" slide_dec="0.575" slide="1" shape="4"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.14231"/>
+ <port04 data="0.9995"/>
+ <port05 data="0.14625"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/LB302/DroneArp.xpf b/data/presets/LB302/DroneArp.xpf
new file mode 100644
index 0000000..93b6559
--- /dev/null
+++ b/data/presets/LB302/DroneArp.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Drone Arp" solo="0">
+ <instrumenttrack pan="0" fxch="1" pitchrange="1" pitch="0" basenote="69" vol="100">
+ <instrument name="lb302">
+ <lb302 db24="1" vcf_res="0.37" vcf_dec="0.11" dead="0" vcf_cut="0.585" vcf_mod="0.33" dist="0.24" slide_dec="0.6" slide="0" shape="11"/>
+ </instrument>
+ <eldata fres="0.01" ftype="0" fcut="1681" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0.07" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="117" arprange="2" arptime_denominator="4" syncmode="6" arpmode="1" arp-enabled="1" arp="0" arptime_numerator="4" arpdir="2" arpgate="20"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="1"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/LB302/GoodOldTimes.xpf b/data/presets/LB302/GoodOldTimes.xpf
index 70ef45b..45fb671 100644
--- a/data/presets/LB302/GoodOldTimes.xpf
+++ b/data/presets/LB302/GoodOldTimes.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Good Old Times" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="100" >
- <instrument name="lb302" >
- <lb302 db24="0" vcf_res="0.985" vcf_dec="0.1" dead="0" vcf_cut="0.045" vcf_mod="0.66" dist="0.11" slide_dec="0.6" slide="0" shape="0" />
+ <instrumenttracksettings muted="0" type="0" name="Good Old Times">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="100">
+ <instrument name="lb302">
+ <lb302 db24="0" vcf_res="0.985" vcf_dec="0.1" dead="0" vcf_cut="0.045" vcf_mod="0.66" dist="0.11" slide_dec="0.6" slide="0" shape="0"/>
</instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/LB302/Oh Synth.xpf b/data/presets/LB302/Oh Synth.xpf
index 5b548c1..5241fe5 100644
--- a/data/presets/LB302/Oh Synth.xpf
+++ b/data/presets/LB302/Oh Synth.xpf
@@ -1,20 +1,19 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-svn20071123" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="583" y="240" fxch="0" height="470" surpos-x="0" surpos-y="0" visible="1" basenote="75" name="Oh Synth" vol="102" tab="0" >
- <lb302 db24="1" vcf_res="1.045" vcf_dec="0.42" vco_detune="-16" dead="0" vcf_cut="0.15" vcf_mod="0.61" dist="0" slide_dec="0.57" slide="0" shape="3" />
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <arpandchords arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" chord="0" chordrange="1" arp-enabled="0" arp="0" arptime_numerator="4" chord-enabled="0" arpdir="0" arpgate="100" />
- <midi inputchannel="0" outputchannel="1" send="0" defvelout="0" receive="0" defvelin="0" />
- <fx fxdisabled="0" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- </instrumenttracksettings>
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" surpos-x="0" surpos-y="0" basenote="75" name="Oh Synth" vol="102" tab="0">
+ <lb302 db24="1" vcf_res="1.045" vcf_dec="0.42" vco_detune="-16" dead="0" vcf_cut="0.15" vcf_mod="0.61" dist="0" slide_dec="0.57" slide="0" shape="2"/>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" chord="0" chordrange="1" arp-enabled="0" arp="0" arptime_numerator="4" chord-enabled="0" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" defvelout="0" receive="0" defvelin="0"/>
+ <fxchain numofeffects="0" fxdisabled="0" enabled="1"/>
+ <chordcreator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" chord="0" chordrange="1" arp-enabled="0" arp="0" arptime_numerator="4" chord-enabled="0" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/LB302/STrash.xpf b/data/presets/LB302/STrash.xpf
index f001b9b..bd928e6 100644
--- a/data/presets/LB302/STrash.xpf
+++ b/data/presets/LB302/STrash.xpf
@@ -1,49 +1,49 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc3" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="STrash" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="88" >
- <instrument name="lb302" >
- <lb302 db24="0" vcf_res="1.01" vcf_dec="0.1" dead="0" vcf_cut="0.18" vcf_mod="1" dist="1" slide_dec="0.5" slide="1" shape="0" />
+ <instrumenttracksettings muted="0" type="0" name="STrash">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="88">
+ <instrument name="lb302">
+ <lb302 db24="0" vcf_res="1.01" vcf_dec="0.1" dead="0" vcf_cut="0.18" vcf_mod="1" dist="1" slide_dec="0.5" slide="1" shape="0"/>
</instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="3" chord-enabled="0" />
- <arpeggiator arptime="166" arprange="1" arptime_denominator="4" syncmode="0" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="3" arpgate="100" />
- <midiport inputcontroller="0" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="0" outputprogram="1" readable="0" />
- <fxchain numofeffects="6" enabled="1" >
- <effect autoquit="1" gate="0" name="stereomatrix" wet="1" on="1" >
- <stereomatrixcontrols l-l="0" l-r="0.96" r-l="0.98" r-r="0" />
+ <chordcreator chord="0" chordrange="3" chord-enabled="0"/>
+ <arpeggiator arptime="166" arprange="1" arptime_denominator="4" syncmode="0" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="3" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="0" outputprogram="1" readable="0"/>
+ <fxchain numofeffects="6" enabled="1">
+ <effect autoquit="1" gate="0" name="stereomatrix" wet="1" on="1">
+ <stereomatrixcontrols l-l="0" l-r="0.96" r-l="0.98" r-r="0"/>
<key/>
</effect>
- <effect autoquit="1" gate="0" name="ladspaeffect" wet="0.5" on="1" >
- <ladspacontrols port11="0.1" port01="0.1" port12="1" port02="1" port13="3.14159" port03="3.14159" port14="0.74925" port04="0.74925" port04link="1" port02link="1" port03link="1" link="0" ports="8" port01link="0" />
+ <effect autoquit="1" gate="0" name="ladspaeffect" wet="0.5" on="1">
+ <ladspacontrols port11="0.1" port01="0.1" port12="1" port02="1" port13="3.14159" port03="3.14159" port14="0.74925" port04="0.74925" port04link="1" port02link="1" port03link="1" link="0" ports="8" port01link="0"/>
<key>
- <attribute value="caps" name="file" />
- <attribute value="PhaserI" name="plugin" />
+ <attribute value="caps" name="file"/>
+ <attribute value="PhaserI" name="plugin"/>
</key>
</effect>
- <effect autoquit="1" gate="0" name="stereoenhancer" wet="1" on="1" >
- <stereoenhancercontrols width="177" />
+ <effect autoquit="1" gate="0" name="stereoenhancer" wet="1" on="1">
+ <stereoenhancercontrols width="177"/>
<key/>
</effect>
- <effect autoquit="1" gate="0" name="stereomatrix" wet="1" on="1" >
- <stereomatrixcontrols l-l="1" l-r="0" r-l="0" r-r="-1" />
+ <effect autoquit="1" gate="0" name="stereomatrix" wet="1" on="1">
+ <stereomatrixcontrols l-l="1" l-r="0" r-l="0" r-r="-1"/>
<key/>
</effect>
- <effect autoquit="1" gate="0" name="stereomatrix" wet="0.38" on="1" >
- <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5" />
+ <effect autoquit="1" gate="0" name="stereomatrix" wet="0.38" on="1">
+ <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5"/>
<key/>
</effect>
- <effect autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols link="1" ports="0" />
+ <effect autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="0"/>
<key>
- <attribute value="dc_remove_1207" name="file" />
- <attribute value="dcRemove" name="plugin" />
+ <attribute value="dc_remove_1207" name="file"/>
+ <attribute value="dcRemove" name="plugin"/>
</key>
</effect>
</fxchain>
diff --git a/data/presets/Monstro/Growl.xpf b/data/presets/Monstro/Growl.xpf
new file mode 100644
index 0000000..97a0986
--- /dev/null
+++ b/data/presets/Monstro/Growl.xpf
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Growl" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="monstro">
+ <monstro o1pw="30.72" v1e2="0" e2sus="1" l1att_numerator="4" e2rel="0" l1wav="0" e2dec_denominator="4" s3e1="0" o3vol="33" s3e2="0" w1l1="0" o2spo="0" w1l2="0" o2crs="-24" o1ssf="0" o1pan="0" p3l1="0" o2wav="11" p3l2="0" l2rat_denominator="4" o2ftl="0" e1dec_numerator="4" e2hol_denominator="4" p2l1="0" p2l2="0" o3wav1="3" o2syn="0" l1phs="0" o3wav2="3" o2ftr="0" o1ssr="0" p1l1="0" p1l2="0" w1e1="0" e2hol_numerator="4" w1e2="0.615" l1rat="214.3" l1rat_numerator="4" o2synr="0" p3e1 [...]
+ </instrument>
+ <eldata fres="1.9" ftype="7" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.666" lamt="0" syncmode="0" latt="0" rel="0.054" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.316" lamt="0" syncmode="0" latt="0" rel="0.178" amt="1" x100="0" att="0.081" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="1"/>
+ <fxchain numofeffects="6" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="-47.97"/>
+ <port03 data="-47.97"/>
+ <port04 data="-47.97"/>
+ <port05 data="5.4"/>
+ <port06 data="6.12"/>
+ <port07 data="9.18"/>
+ <port08 data="10.26"/>
+ <port09 data="6.3"/>
+ <port010 data="12.78"/>
+ <port011 data="9.18"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="2">
+ <port01 link="1" data="50.76"/>
+ <port11 data="50.76"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Clip" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0.02" name="dualfilter" wet="1" on="1">
+ <DualFilterControls gain2="100" cut1="197" cut2="229" mix="-0.14" res1="0.5" res2="0.5" filter1="1" filter2="1" enabled1="1" enabled2="1" gain1="100"/>
+ <key/>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="1" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-4.875"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-4.875"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.87472"/>
+ <port03 data="0"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.05"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="stereoenhancer" wet="1" on="1">
+ <stereoenhancercontrols width="6"/>
+ <key/>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Monstro/HorrorLead.xpf b/data/presets/Monstro/HorrorLead.xpf
new file mode 100644
index 0000000..867693d
--- /dev/null
+++ b/data/presets/Monstro/HorrorLead.xpf
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Horror Lead" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="monstro">
+ <monstro o1pw="87.65" v1e2="0" e2sus="1" l1att_numerator="4" e2rel="0" l1wav="0" e2dec_denominator="4" s3e1="0" o3vol="33" s3e2="0" w1l1="0" o2spo="0" w1l2="0" o2crs="0" o1ssf="0" o1pan="0" p3l1="0.076" o2wav="11" p3l2="0" l2rat_denominator="4" o2ftl="0" e1dec_numerator="4" e2hol_denominator="4" p2l1="0.337" p2l2="0" o3wav1="2" o2syn="0" l1phs="0" o3wav2="2" o2ftr="0" o1ssr="0" p1l1="0.689" p1l2="0" w1e1="0" e2hol_numerator="4" w1e2="-0.022" l1rat="135.9" l1rat_numerator="4" o2sy [...]
+ </instrument>
+ <eldata fres="0.51" ftype="1" fcut="249" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="62" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="1"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0.15" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.749"/>
+ <port04 data="0.0005"/>
+ <port05 data="0.035"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-10.5"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-10.5"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="amplifier" wet="1" on="1">
+ <AmplifierControls right="100" pan="0" left="100" volume="200"/>
+ <key/>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Monstro/Phat.xpf b/data/presets/Monstro/Phat.xpf
new file mode 100644
index 0000000..5615f02
--- /dev/null
+++ b/data/presets/Monstro/Phat.xpf
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Phat" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="81" vol="100">
+ <instrument name="monstro">
+ <monstro o1pw="79.99" v1e2="0" e2sus="1" l1att_numerator="4" e2rel="0" l1wav="3" e2dec_denominator="4" s3e1="0" o3vol="33" s3e2="0" w1l1="0" o2spo="180" w1l2="0" o2crs="0" o1ssf="0" o1pan="0" p3l1="0" o2wav="11" p3l2="0" l2rat_denominator="4" o2ftl="0" e1dec_numerator="4" e2hol_denominator="4" p2l1="0" p2l2="0" o3wav1="4" o2syn="1" l1phs="180" o3wav2="6" o2ftr="0" o1ssr="1" p1l1="0" p1l2="0" w1e1="0.659" e2hol_numerator="4" w1e2="0" l1rat="4891.4" l1rat_numerator="4" o2synr="1" p [...]
+ </instrument>
+ <eldata fres="2.08" ftype="0" fcut="4321" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.167" lamt="0" syncmode="0" latt="0" rel="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="187" arprange="2" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="4" arpdir="4" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.50197"/>
+ <port03 data="0.302409"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.2"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Monstro/ScaryBell.xpf b/data/presets/Monstro/ScaryBell.xpf
new file mode 100644
index 0000000..0046669
--- /dev/null
+++ b/data/presets/Monstro/ScaryBell.xpf
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Scary Bell" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="monstro">
+ <monstro o1pw="50" v1e2="0" e2sus="1" l1att_numerator="4" e2rel="0" l1wav="0" e2dec_denominator="4" s3e1="0" o3vol="76.4" s3e2="0" w1l1="0" o2spo="0" w1l2="0" o2crs="12" o1ssf="0" o1pan="0" p3l1="0" o2wav="0" p3l2="0" l2rat_denominator="4" o2ftl="-1" e1dec_numerator="4" e2hol_denominator="4" p2l1="0" p2l2="0" o3wav1="10" o2syn="0" l1phs="0.4" o3wav2="6" o2ftr="0" o1ssr="0" p1l1="0" p1l2="0" w1e1="0" e2hol_numerator="4" w1e2="0" l1rat="107.1" l1rat_numerator="4" o2synr="0" p3e1="0 [...]
+ </instrument>
+ <eldata fres="0.5" ftype="1" fcut="471" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.547" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0.016" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.375436"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="0">
+ <ladspacontrols ports="10">
+ <port02 data="-47.97"/>
+ <port03 data="-47.97"/>
+ <port04 data="-47.97"/>
+ <port05 data="0"/>
+ <port06 data="0"/>
+ <port07 data="0"/>
+ <port08 data="0"/>
+ <port09 data="4.32"/>
+ <port010 data="5.4"/>
+ <port011 data="5.94"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Nescaline/Chomp.xpf b/data/presets/Nescaline/Chomp.xpf
new file mode 100644
index 0000000..9dea189
--- /dev/null
+++ b/data/presets/Nescaline/Chomp.xpf
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Chomp" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="23" vol="100">
+ <instrument name="nes">
+ <nes vol3="15" nfrqmode4="0" envlen4="3" vol4="15" dc1="0" dc2="2" sweep1="0" sweep2="0" nfreq4="10" swamt1="0" swamt2="0" vol="1" nq4="1" crs1="0" crs2="0" crs3="0" swrate1="0" swrate2="0" nmode4="0" envon1="0" envon2="0" envon4="1" nswp4="-7" envloop1="0" envloop2="0" envloop4="0" vibr="0" on1="0" on2="0" envlen1="0" vol1="15" on3="0" envlen2="0" vol2="15" on4="1"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Nescaline/Detune_lead.xpf b/data/presets/Nescaline/Detune_lead.xpf
new file mode 100644
index 0000000..cc06165
--- /dev/null
+++ b/data/presets/Nescaline/Detune_lead.xpf
@@ -0,0 +1,29 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Detune lead" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="nes">
+ <nes vol3="15" nfrqmode4="0" envlen4="0" vol4="15" dc1="0" dc2="3" sweep1="0" sweep2="1" nfreq4="0" swamt1="6" swamt2="-3" vol="1" crs1="0" crs2="0" crs3="0" swrate1="0" swrate2="0" nmode4="0" envon1="0" envon2="0" envon4="0" envloop1="1" envloop2="1" envloop4="0" vibr="2" on1="1" on2="1" envlen1="0" vol1="15" on3="0" envlen2="0" vol2="15" on4="0"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="0"/>
+ <key>
+ <attribute value="dc_remove_1207" name="file"/>
+ <attribute value="dcRemove" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Nescaline/Engine_overheats.xpf b/data/presets/Nescaline/Engine_overheats.xpf
new file mode 100644
index 0000000..49176ae
--- /dev/null
+++ b/data/presets/Nescaline/Engine_overheats.xpf
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Engine overheats" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="nes">
+ <nes vol3="15" nfrqmode4="0" envlen4="0" vol4="15" dc1="0" dc2="2" sweep1="1" sweep2="0" nfreq4="0" swamt1="6" swamt2="0" vol="1" crs1="0" crs2="0" crs3="0" swrate1="0" swrate2="0" nmode4="0" envon1="0" envon2="0" envon4="0" envloop1="0" envloop2="0" envloop4="0" vibr="1" on1="1" on2="0" envlen1="0" vol1="15" on3="0" envlen2="0" vol2="15" on4="0"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Nescaline/Fireball_flick.xpf b/data/presets/Nescaline/Fireball_flick.xpf
new file mode 100644
index 0000000..b61c173
--- /dev/null
+++ b/data/presets/Nescaline/Fireball_flick.xpf
@@ -0,0 +1,29 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Fireball flick" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="nes">
+ <nes vol3="15" nfrqmode4="0" envlen4="3" vol4="15" dc1="0" dc2="3" sweep1="0" sweep2="1" nfreq4="10" swamt1="0" swamt2="7" vol="1.62" crs1="0" crs2="0" crs3="-12" swrate1="0" swrate2="0" nmode4="0" envon1="0" envon2="1" envon4="1" envloop1="0" envloop2="0" envloop4="0" vibr="0" on1="0" on2="1" envlen1="0" vol1="15" on3="0" envlen2="0" vol2="15" on4="0"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="0"/>
+ <key>
+ <attribute value="dc_remove_1207" name="file"/>
+ <attribute value="dcRemove" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Nescaline/Mega_weapon.xpf b/data/presets/Nescaline/Mega_weapon.xpf
new file mode 100644
index 0000000..f5f0c26
--- /dev/null
+++ b/data/presets/Nescaline/Mega_weapon.xpf
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Mega weapon" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="23" vol="100">
+ <instrument name="nes">
+ <nes vol3="15" nfrqmode4="0" envlen4="3" vol4="15" dc1="0" dc2="2" sweep1="0" sweep2="0" nfreq4="10" swamt1="0" swamt2="0" vol="1" nq4="1" crs1="0" crs2="0" crs3="0" swrate1="0" swrate2="0" nmode4="1" envon1="0" envon2="0" envon4="1" nswp4="-5" envloop1="0" envloop2="0" envloop4="0" vibr="0" on1="0" on2="0" envlen1="0" vol1="15" on3="0" envlen2="0" vol2="15" on4="1"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/OpulenZ/Bagpipe.xpf b/data/presets/OpulenZ/Bagpipe.xpf
index 15aae06..e572498 100644
--- a/data/presets/OpulenZ/Bagpipe.xpf
+++ b/data/presets/OpulenZ/Bagpipe.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Bagpipe" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="1" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="54" op1_waveform="0" op1_scale="1" op2_perc="0" op2_a="9" op1_perc="0" op1_mul="1" op2_lvl="54" op2_d="0" op1_a="8" op1_d="3" op2_scale="0" op2_mul="2" op1_vib="0" feedback="3" op2_r="3" trem_depth="0" op2_s="15" op1_ksr="0" op1_r="15" op1_s="13" op2_vib="0" vib_depth="0"/>
+ <OPL2 op2_waveform="1" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="54" op1_waveform="0" op1_scale="1" op2_perc="0" op2_a="9" op1_perc="0" op1_mul="1" op2_lvl="54" op2_d="0" op1_a="8" op2_scale="0" op1_d="3" op2_mul="2" op1_vib="0" feedback="3" op2_r="3" trem_depth="0" op2_s="15" op1_ksr="0" op1_r="15" op1_s="13" op2_vib="0" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Bells.xpf b/data/presets/OpulenZ/Bells.xpf
index aade9bd..e7279a7 100644
--- a/data/presets/OpulenZ/Bells.xpf
+++ b/data/presets/OpulenZ/Bells.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Bells" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="1" op1_trem="0" op1_lvl="40" op1_waveform="0" op1_scale="2" op2_perc="1" op2_a="0" op1_perc="1" op1_mul="7" op2_lvl="54" op2_d="10" op1_a="0" op1_d="9" op2_scale="2" op2_mul="1" op1_vib="0" feedback="1" op2_r="14" trem_depth="0" op2_s="14" op1_ksr="0" op1_r="13" op1_s="12" op2_vib="0" vib_depth="0"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="1" op1_trem="0" op1_lvl="40" op1_waveform="0" op1_scale="2" op2_perc="1" op2_a="0" op1_perc="1" op1_mul="7" op2_lvl="54" op2_d="10" op1_a="0" op2_scale="2" op1_d="9" op2_mul="1" op1_vib="0" feedback="1" op2_r="14" trem_depth="0" op2_s="14" op1_ksr="0" op1_r="13" op1_s="12" op2_vib="0" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Brass.xpf b/data/presets/OpulenZ/Brass.xpf
index f995fb9..553bdb5 100644
--- a/data/presets/OpulenZ/Brass.xpf
+++ b/data/presets/OpulenZ/Brass.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Brass" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="45" op1_waveform="0" op1_scale="2" op2_perc="0" op2_a="7" op1_perc="0" op1_mul="1" op2_lvl="53" op2_d="0" op1_a="7" op1_d="10" op2_scale="0" op2_mul="1" op1_vib="0" feedback="6" op2_r="6" trem_depth="0" op2_s="15" op1_ksr="0" op1_r="8" op1_s="14" op2_vib="0" vib_depth="1"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="45" op1_waveform="0" op1_scale="2" op2_perc="0" op2_a="7" op1_perc="0" op1_mul="1" op2_lvl="53" op2_d="0" op1_a="7" op2_scale="0" op1_d="10" op2_mul="1" op1_vib="0" feedback="6" op2_r="6" trem_depth="0" op2_s="15" op1_ksr="0" op1_r="8" op1_s="14" op2_vib="0" vib_depth="1"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Bubbly_days.xpf b/data/presets/OpulenZ/Bubbly_days.xpf
index 97aa93e..92e0082 100644
--- a/data/presets/OpulenZ/Bubbly_days.xpf
+++ b/data/presets/OpulenZ/Bubbly_days.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Bubbly days" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="98">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="46" op1_waveform="2" op1_scale="0" op2_perc="0" op2_a="0" op1_perc="1" op1_mul="0" op2_lvl="63" op2_d="10" op1_a="0" op1_d="9" op2_scale="0" op2_mul="1" op1_vib="1" feedback="6" op2_r="3" trem_depth="0" op2_s="7" op1_ksr="0" op1_r="3" op1_s="5" op2_vib="1" vib_depth="0"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="46" op1_waveform="2" op1_scale="0" op2_perc="0" op2_a="0" op1_perc="1" op1_mul="0" op2_lvl="63" op2_d="10" op1_a="0" op2_scale="0" op1_d="9" op2_mul="1" op1_vib="1" feedback="6" op2_r="3" trem_depth="0" op2_s="7" op1_ksr="0" op1_r="3" op1_s="5" op2_vib="1" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="107" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Cheesy_synth.xpf b/data/presets/OpulenZ/Cheesy_synth.xpf
index d30fce9..2c6d473 100644
--- a/data/presets/OpulenZ/Cheesy_synth.xpf
+++ b/data/presets/OpulenZ/Cheesy_synth.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Cheesy Synth" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="1" op1_trem="0" op1_lvl="40" op1_waveform="0" op1_scale="1" op2_perc="0" op2_a="8" op1_perc="0" op1_mul="1" op2_lvl="54" op2_d="5" op1_a="10" op1_d="11" op2_scale="0" op2_mul="2" op1_vib="1" feedback="6" op2_r="10" trem_depth="0" op2_s="15" op1_ksr="1" op1_r="10" op1_s="15" op2_vib="1" vib_depth="1"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="1" op1_trem="0" op1_lvl="40" op1_waveform="0" op1_scale="1" op2_perc="0" op2_a="8" op1_perc="0" op1_mul="1" op2_lvl="54" op2_d="5" op1_a="10" op2_scale="0" op1_d="11" op2_mul="2" op1_vib="1" feedback="6" op2_r="10" trem_depth="0" op2_s="15" op1_ksr="1" op1_r="10" op1_s="15" op2_vib="1" vib_depth="1"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Clarinet.xpf b/data/presets/OpulenZ/Clarinet.xpf
index ec3357c..3301318 100644
--- a/data/presets/OpulenZ/Clarinet.xpf
+++ b/data/presets/OpulenZ/Clarinet.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Clarinet" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="47" op1_waveform="0" op1_scale="2" op2_perc="0" op2_a="8" op1_perc="0" op1_mul="2" op2_lvl="54" op2_d="13" op1_a="6" op1_d="4" op2_scale="0" op2_mul="1" op1_vib="0" feedback="2" op2_r="8" trem_depth="0" op2_s="14" op1_ksr="1" op1_r="14" op1_s="13" op2_vib="0" vib_depth="1"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="47" op1_waveform="0" op1_scale="2" op2_perc="0" op2_a="8" op1_perc="0" op1_mul="2" op2_lvl="54" op2_d="13" op1_a="6" op2_scale="0" op1_d="4" op2_mul="1" op1_vib="0" feedback="2" op2_r="8" trem_depth="0" op2_s="14" op1_ksr="1" op1_r="14" op1_s="13" op2_vib="0" vib_depth="1"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Combo_organ.xpf b/data/presets/OpulenZ/Combo_organ.xpf
index 92550e1..21e2d8a 100644
--- a/data/presets/OpulenZ/Combo_organ.xpf
+++ b/data/presets/OpulenZ/Combo_organ.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Combo organ" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="1" op2_trem="0" fm="0" op2_ksr="0" op1_trem="1" op1_lvl="62" op1_waveform="1" op1_scale="0" op2_perc="0" op2_a="1" op1_perc="0" op1_mul="0" op2_lvl="63" op2_d="15" op1_a="0" op1_d="14" op2_scale="0" op2_mul="1" op1_vib="0" feedback="3" op2_r="0" trem_depth="0" op2_s="14" op1_ksr="0" op1_r="0" op1_s="0" op2_vib="1" vib_depth="0"/>
+ <OPL2 op2_waveform="1" op2_trem="0" fm="0" op2_ksr="0" op1_trem="1" op1_lvl="62" op1_waveform="1" op1_scale="0" op2_perc="0" op2_a="1" op1_perc="0" op1_mul="0" op2_lvl="63" op2_d="15" op1_a="0" op2_scale="0" op1_d="14" op2_mul="1" op1_vib="0" feedback="3" op2_r="0" trem_depth="0" op2_s="14" op1_ksr="0" op1_r="0" op1_s="0" op2_vib="1" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Epiano.xpf b/data/presets/OpulenZ/Epiano.xpf
index cbfa3ea..dea9477 100644
--- a/data/presets/OpulenZ/Epiano.xpf
+++ b/data/presets/OpulenZ/Epiano.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Piano" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="40" op1_waveform="0" op1_scale="1" op2_perc="0" op2_a="0" op1_perc="1" op1_mul="1" op2_lvl="54" op2_d="14" op1_a="0" op1_d="14" op2_scale="0" op2_mul="1" op1_vib="0" feedback="0" op2_r="7" trem_depth="0" op2_s="13" op1_ksr="0" op1_r="7" op1_s="12" op2_vib="0" vib_depth="0"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="40" op1_waveform="0" op1_scale="1" op2_perc="0" op2_a="0" op1_perc="1" op1_mul="1" op2_lvl="54" op2_d="14" op1_a="0" op2_scale="0" op1_d="14" op2_mul="1" op1_vib="0" feedback="0" op2_r="7" trem_depth="0" op2_s="13" op1_ksr="0" op1_r="7" op1_s="12" op2_vib="0" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Funky.xpf b/data/presets/OpulenZ/Funky.xpf
index e1c2baa..166537f 100644
--- a/data/presets/OpulenZ/Funky.xpf
+++ b/data/presets/OpulenZ/Funky.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Funky" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="1" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="62" op1_waveform="1" op1_scale="0" op2_perc="0" op2_a="1" op1_perc="0" op1_mul="0" op2_lvl="63" op2_d="15" op1_a="0" op1_d="14" op2_scale="0" op2_mul="1" op1_vib="0" feedback="0" op2_r="0" trem_depth="0" op2_s="14" op1_ksr="0" op1_r="0" op1_s="3" op2_vib="0" vib_depth="0"/>
+ <OPL2 op2_waveform="1" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="62" op1_waveform="1" op1_scale="0" op2_perc="0" op2_a="1" op1_perc="0" op1_mul="0" op2_lvl="63" op2_d="15" op1_a="0" op2_scale="0" op1_d="14" op2_mul="1" op1_vib="0" feedback="0" op2_r="0" trem_depth="0" op2_s="14" op1_ksr="0" op1_r="0" op1_s="3" op2_vib="0" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="2" fcut="141" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Halo_pad.xpf b/data/presets/OpulenZ/Halo_pad.xpf
index d3769ab..a20fa05 100644
--- a/data/presets/OpulenZ/Halo_pad.xpf
+++ b/data/presets/OpulenZ/Halo_pad.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Halo Pad" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="54" op1_waveform="0" op1_scale="2" op2_perc="0" op2_a="11" op1_perc="0" op1_mul="1" op2_lvl="51" op2_d="13" op1_a="14" op1_d="14" op2_scale="0" op2_mul="1" op1_vib="0" feedback="5" op2_r="10" trem_depth="0" op2_s="13" op1_ksr="0" op1_r="12" op1_s="12" op2_vib="1" vib_depth="0"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="54" op1_waveform="0" op1_scale="2" op2_perc="0" op2_a="11" op1_perc="0" op1_mul="1" op2_lvl="51" op2_d="13" op1_a="14" op2_scale="0" op1_d="14" op2_mul="1" op1_vib="0" feedback="5" op2_r="10" trem_depth="0" op2_s="13" op1_ksr="0" op1_r="12" op1_s="12" op2_vib="1" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Harp.xpf b/data/presets/OpulenZ/Harp.xpf
index e5c686d..75b54d3 100644
--- a/data/presets/OpulenZ/Harp.xpf
+++ b/data/presets/OpulenZ/Harp.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Harp" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="34" op1_waveform="1" op1_scale="0" op2_perc="1" op2_a="0" op1_perc="1" op1_mul="2" op2_lvl="54" op2_d="12" op1_a="0" op1_d="10" op2_scale="2" op2_mul="1" op1_vib="0" feedback="0" op2_r="11" trem_depth="0" op2_s="0" op1_ksr="0" op1_r="10" op1_s="8" op2_vib="0" vib_depth="1"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="34" op1_waveform="1" op1_scale="0" op2_perc="1" op2_a="0" op1_perc="1" op1_mul="2" op2_lvl="54" op2_d="12" op1_a="0" op2_scale="2" op1_d="10" op2_mul="1" op1_vib="0" feedback="0" op2_r="11" trem_depth="0" op2_s="0" op1_ksr="0" op1_r="10" op1_s="8" op2_vib="0" vib_depth="1"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Organ_leslie.xpf b/data/presets/OpulenZ/Organ_leslie.xpf
index 9f46ffe..a1c5c02 100644
--- a/data/presets/OpulenZ/Organ_leslie.xpf
+++ b/data/presets/OpulenZ/Organ_leslie.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Ham with Leslie" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="1" op1_trem="0" op1_lvl="45" op1_waveform="0" op1_scale="2" op2_perc="0" op2_a="0" op1_perc="0" op1_mul="1" op2_lvl="54" op2_d="14" op1_a="0" op1_d="9" op2_scale="0" op2_mul="1" op1_vib="1" feedback="1" op2_r="8" trem_depth="0" op2_s="15" op1_ksr="1" op1_r="11" op1_s="14" op2_vib="0" vib_depth="0"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="1" op1_trem="0" op1_lvl="45" op1_waveform="0" op1_scale="2" op2_perc="0" op2_a="0" op1_perc="0" op1_mul="1" op2_lvl="54" op2_d="14" op1_a="0" op2_scale="0" op1_d="9" op2_mul="1" op1_vib="1" feedback="1" op2_r="8" trem_depth="0" op2_s="15" op1_ksr="1" op1_r="11" op1_s="14" op2_vib="0" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Pad.xpf b/data/presets/OpulenZ/Pad.xpf
index 636ce36..f35911c 100644
--- a/data/presets/OpulenZ/Pad.xpf
+++ b/data/presets/OpulenZ/Pad.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Pad" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="1" fm="1" op2_ksr="1" op1_trem="0" op1_lvl="32" op1_waveform="0" op1_scale="0" op2_perc="0" op2_a="13" op1_perc="0" op1_mul="1" op2_lvl="54" op2_d="10" op1_a="5" op1_d="7" op2_scale="2" op2_mul="1" op1_vib="1" feedback="5" op2_r="12" trem_depth="0" op2_s="15" op1_ksr="0" op1_r="14" op1_s="14" op2_vib="0" vib_depth="0"/>
+ <OPL2 op2_waveform="0" op2_trem="1" fm="1" op2_ksr="1" op1_trem="0" op1_lvl="32" op1_waveform="0" op1_scale="0" op2_perc="0" op2_a="13" op1_perc="0" op1_mul="1" op2_lvl="54" op2_d="10" op1_a="5" op2_scale="2" op1_d="7" op2_mul="1" op1_vib="1" feedback="5" op2_r="12" trem_depth="0" op2_s="15" op1_ksr="0" op1_r="14" op1_s="14" op2_vib="0" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Square.xpf b/data/presets/OpulenZ/Square.xpf
index 8c40992..ad0aaca 100644
--- a/data/presets/OpulenZ/Square.xpf
+++ b/data/presets/OpulenZ/Square.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Square" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="38" op1_waveform="2" op1_scale="1" op2_perc="0" op2_a="0" op1_perc="0" op1_mul="2" op2_lvl="54" op2_d="0" op1_a="0" op1_d="0" op2_scale="0" op2_mul="1" op1_vib="0" feedback="0" op2_r="0" trem_depth="0" op2_s="15" op1_ksr="0" op1_r="12" op1_s="15" op2_vib="0" vib_depth="1"/>
+ <OPL2 op2_waveform="0" op2_trem="0" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="38" op1_waveform="2" op1_scale="1" op2_perc="0" op2_a="0" op1_perc="0" op1_mul="2" op2_lvl="54" op2_d="0" op1_a="0" op2_scale="0" op1_d="0" op2_mul="1" op1_vib="0" feedback="0" op2_r="0" trem_depth="0" op2_s="15" op1_ksr="0" op1_r="12" op1_s="15" op2_vib="0" vib_depth="1"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/OpulenZ/Vibraphone.xpf b/data/presets/OpulenZ/Vibraphone.xpf
index b41cd40..c0e3ad5 100644
--- a/data/presets/OpulenZ/Vibraphone.xpf
+++ b/data/presets/OpulenZ/Vibraphone.xpf
@@ -1,16 +1,16 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.15" type="instrumenttracksettings">
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings muted="0" type="0" name="Vibraphone" solo="0">
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
<instrument name="OPL2">
- <OPL2 op2_waveform="0" op2_trem="1" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="29" op1_waveform="0" op1_scale="1" op2_perc="1" op2_a="0" op1_perc="1" op1_mul="8" op2_lvl="54" op2_d="13" op1_a="0" op1_d="12" op2_scale="0" op2_mul="1" op1_vib="0" feedback="0" op2_r="9" trem_depth="0" op2_s="0" op1_ksr="1" op1_r="9" op1_s="1" op2_vib="0" vib_depth="0"/>
+ <OPL2 op2_waveform="0" op2_trem="1" fm="1" op2_ksr="0" op1_trem="0" op1_lvl="29" op1_waveform="0" op1_scale="1" op2_perc="1" op2_a="0" op1_perc="1" op1_mul="8" op2_lvl="54" op2_d="13" op1_a="0" op2_scale="0" op1_d="12" op2_mul="1" op1_vib="0" feedback="0" op2_r="9" trem_depth="0" op2_s="0" op1_ksr="1" op1_r="9" op1_s="1" op2_vib="0" vib_depth="0"/>
</instrument>
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elvol lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
diff --git a/data/presets/Organic/Pwnage.xpf b/data/presets/Organic/Pwnage.xpf
new file mode 100644
index 0000000..51401f5
--- /dev/null
+++ b/data/presets/Organic/Pwnage.xpf
@@ -0,0 +1,146 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Pwnage" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="organic">
+ <organic newdetune0="0" newdetune1="0" newdetune2="0" newdetune3="0" newdetune4="0" newdetune5="0" newdetune6="0" newdetune7="0" vol0="97" vol1="84" vol2="93" vol3="20" vol4="25" vol5="52" wavetype0="3" vol6="3" wavetype1="0" wavetype2="4" vol7="69" num_osc="8" wavetype3="4" wavetype4="0" wavetype5="2" wavetype6="2" pan0="0" wavetype7="1" pan1="0" foldback="0" pan2="0" pan3="0" pan4="0" pan5="0" pan6="0" pan7="0" newharmonic0="0" newharmonic1="1" newharmonic2="2" newharmonic3="3" [...]
+ </instrument>
+ <eldata fres="0.66" ftype="6" fcut="11836" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.762" pdel="0" userwavefile="" dec="2" lamt="0" syncmode="0" latt="0" rel="0.181" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.215" pdel="0" userwavefile="" dec="0.58" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0.035" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="6" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="14">
+ <port01 link="1" data="2.8775"/>
+ <port02 link="1" data="0.999975"/>
+ <port03 link="1" data="-2.8"/>
+ <port04 link="1" data="7.7"/>
+ <port05 link="1" data="12.1"/>
+ <port06 link="1" data="8.4"/>
+ <port07 link="1" data="0.9999"/>
+ <port11 data="2.8775"/>
+ <port12 data="0.999975"/>
+ <port13 data="-2.8"/>
+ <port14 data="7.7"/>
+ <port15 data="12.1"/>
+ <port16 data="8.4"/>
+ <port17 data="0.9999"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="AmpIV" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="20">
+ <port00 link="1" data="1"/>
+ <port01 link="1" data="0.025"/>
+ <port02 link="1" data="0"/>
+ <port03 link="1" data="0"/>
+ <port04 link="1" data="0.4"/>
+ <port05 link="1" data="0"/>
+ <port06 link="1" data="0"/>
+ <port07 link="1" data="-0.025"/>
+ <port08 link="1" data="0"/>
+ <port09 link="1" data="-1"/>
+ <port10 data="1"/>
+ <port11 data="0.025"/>
+ <port12 data="0"/>
+ <port13 data="0"/>
+ <port14 data="0.4"/>
+ <port15 data="0"/>
+ <port16 data="0"/>
+ <port17 data="-0.025"/>
+ <port18 data="0"/>
+ <port19 data="-1"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="harmonic_gen_1220" name="file"/>
+ <attribute value="harmonicGen" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-9.375"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-9.375"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="-47.97"/>
+ <port03 data="-47.97"/>
+ <port04 data="9.9"/>
+ <port05 data="-4.32"/>
+ <port06 data="0"/>
+ <port07 data="-2.88"/>
+ <port08 data="-3.06"/>
+ <port09 data="-16.02"/>
+ <port010 data="-12.78"/>
+ <port011 data="-10.8"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-6.625"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-6.625"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="0" ports="20">
+ <port01 link="1" data="-47.97"/>
+ <port02 link="1" data="-35.28"/>
+ <port03 link="1" data="0"/>
+ <port04 link="1" data="-9"/>
+ <port05 link="1" data="-8.46"/>
+ <port06 link="1" data="3.06"/>
+ <port07 link="0" data="-5.04"/>
+ <port08 link="0" data="5.04"/>
+ <port09 link="0" data="-5.04"/>
+ <port010 link="0" data="5.04"/>
+ <port11 data="-47.97"/>
+ <port12 data="-35.28"/>
+ <port13 data="0"/>
+ <port14 data="-9"/>
+ <port15 data="-8.46"/>
+ <port16 data="3.06"/>
+ <port17 data="5.04"/>
+ <port18 data="-5.04"/>
+ <port19 data="5.04"/>
+ <port110 data="-5.04"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Organic/Rubberband.xpf b/data/presets/Organic/Rubberband.xpf
new file mode 100644
index 0000000..1dd0a19
--- /dev/null
+++ b/data/presets/Organic/Rubberband.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Rubberband" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="150">
+ <instrument name="organic">
+ <organic newdetune0="0" newdetune1="0" newdetune2="0" newdetune3="0" newdetune4="0" newdetune5="0" newdetune6="0" newdetune7="0" vol0="100" vol1="92" vol2="67" vol3="35" vol4="15" vol5="3" wavetype0="5" vol6="6" wavetype1="4" wavetype2="2" vol7="0" num_osc="8" wavetype3="1" wavetype4="3" wavetype5="0" wavetype6="0" pan0="0" wavetype7="0" pan1="0" foldback="0.34" pan2="0" pan3="0" pan4="0" pan5="0" pan6="0" pan7="0" newharmonic0="0" newharmonic1="1" newharmonic2="2" newharmonic3=" [...]
+ </instrument>
+ <eldata fres="3.6" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.57" lamt="0" syncmode="0" latt="0" rel="0.11" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="2" chord-enabled="1"/>
+ <arpeggiator arptime="250" arprange="2" arptime_denominator="4" syncmode="0" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="32"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Organic/organ_blues.xpf b/data/presets/Organic/organ_blues.xpf
index 4f102cc..a35bbfd 100644
--- a/data/presets/Organic/organ_blues.xpf
+++ b/data/presets/Organic/organ_blues.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060209" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="organ_blues" basetone="9" tab="0" >
- <organic harmonic4="3" wavetype1="0" harmonic5="4" wavetype2="0" vol0="100" harmonic6="5" wavetype3="0" vol1="100" num_osc="8" harmonic7="6" wavetype4="0" vol2="100" wavetype5="0" vol3="0" detune0="0" wavetype6="0" vol4="0" detune1="0" wavetype7="0" vol5="0" detune2="0" vol6="0" detune3="0" vol7="0" detune4="0" pan0="0" detune5="0" pan1="0" detune6="0" pan2="0" detune7="0" pan3="0" pan4="0" pan5="0" harmonic0="0.5" vol="100" pan6="0" harmonic1="0.75" foldback="0" pan7="0" harmonic2 [...]
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="organ_blues" tab="0">
+ <organic detune0="0" detune1="0" detune2="0" detune3="0" detune4="0" detune5="0" detune6="0" detune7="0" vol0="100" vol1="100" vol2="100" vol3="0" vol4="0" vol5="0" wavetype0="0" vol6="0" wavetype1="0" vol7="0" wavetype2="0" num_osc="8" wavetype3="0" harmonic0="0.5" wavetype4="0" wavetype5="0" harmonic1="0.75" wavetype6="0" harmonic2="1" wavetype7="0" pan0="0" harmonic3="2" harmonic4="3" pan1="0" harmonic5="4" pan2="0" foldback="0" harmonic6="5" pan3="0" harmonic7="6" pan4="0" pan5 [...]
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Organic/organ_risingsun.xpf b/data/presets/Organic/organ_risingsun.xpf
index 346b595..b5dc759 100644
--- a/data/presets/Organic/organ_risingsun.xpf
+++ b/data/presets/Organic/organ_risingsun.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060209" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="24" name="organ_risingsun" basetone="9" tab="0" >
- <organic harmonic4="3" wavetype1="0" harmonic5="4" wavetype2="0" vol0="100" harmonic6="5" wavetype3="0" vol1="77" num_osc="8" harmonic7="6" wavetype4="0" vol2="100" wavetype5="0" vol3="73" detune0="0" wavetype6="0" vol4="55" detune1="0" wavetype7="0" vol5="47" detune2="1" vol6="73" detune3="0" vol7="100" detune4="0" pan0="0" detune5="0" pan1="0" detune6="0" pan2="0" detune7="0" pan3="0" pan4="0" pan5="0" harmonic0="0.5" vol="166" pan6="0" harmonic1="0.75" foldback="0" pan7="0" harm [...]
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="14" name="organ_risingsun" tab="0">
+ <organic detune0="0" detune1="0" detune2="1" detune3="0" detune4="0" detune5="0" detune6="0" detune7="0" vol0="100" vol1="77" vol2="100" vol3="73" vol4="55" vol5="47" wavetype0="0" vol6="73" wavetype1="0" vol7="100" wavetype2="0" num_osc="8" wavetype3="0" harmonic0="0.5" wavetype4="0" wavetype5="0" harmonic1="0.75" wavetype6="0" harmonic2="1" wavetype7="0" pan0="0" harmonic3="2" harmonic4="3" pan1="0" harmonic5="4" pan2="0" foldback="0" harmonic6="5" pan3="0" harmonic7="6" pan4="0" [...]
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Organic/organ_swish.xpf b/data/presets/Organic/organ_swish.xpf
index 3917962..569230f 100644
--- a/data/presets/Organic/organ_swish.xpf
+++ b/data/presets/Organic/organ_swish.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060209" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="organ_swish" basetone="9" tab="0" >
- <organic harmonic4="3" wavetype1="0" harmonic5="4" wavetype2="0" vol0="5" harmonic6="5" wavetype3="0" vol1="64" num_osc="8" harmonic7="6" wavetype4="0" vol2="66" wavetype5="0" vol3="67" detune0="3" wavetype6="0" vol4="32" detune1="0" wavetype7="0" vol5="32" detune2="1" vol6="4" detune3="1" vol7="0" detune4="0" pan0="0" detune5="40" pan1="0" detune6="0" pan2="0" detune7="0" pan3="0" pan4="0" pan5="0" harmonic0="0.5" vol="100" pan6="0" harmonic1="0.75" foldback="0" pan7="0" harmonic2 [...]
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.471" ctlenvamt="0" latt="0" sus="0.313" lspd="0.1" att="0.241" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="organ_swish" tab="0">
+ <organic detune0="3" detune1="0" detune2="1" detune3="1" detune4="0" detune5="40" detune6="0" detune7="0" vol0="5" vol1="64" vol2="66" vol3="67" vol4="32" vol5="32" wavetype0="0" vol6="4" wavetype1="0" vol7="0" wavetype2="0" num_osc="8" wavetype3="0" harmonic0="0.5" wavetype4="0" wavetype5="0" harmonic1="0.75" wavetype6="0" harmonic2="1" wavetype7="0" pan0="0" harmonic3="2" harmonic4="3" pan1="0" harmonic5="4" pan2="0" foldback="0" harmonic6="5" pan3="0" harmonic7="6" pan4="0" pan5 [...]
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.471" latt="0" sus="0.313" lspd="0.1" att="0.241" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Organic/pad_ethereal.xpf b/data/presets/Organic/pad_ethereal.xpf
index e0aa285..a401688 100644
--- a/data/presets/Organic/pad_ethereal.xpf
+++ b/data/presets/Organic/pad_ethereal.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060209" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="pad_ethereal" basetone="0" tab="1" >
- <organic harmonic4="3" wavetype1="3" harmonic5="4" wavetype2="3" vol0="79" harmonic6="5" wavetype3="3" vol1="72" num_osc="8" harmonic7="6" wavetype4="0" vol2="31" wavetype5="0" vol3="77" detune0="0" wavetype6="4" vol4="0" detune1="0" wavetype7="0" vol5="13" detune2="0" vol6="20" detune3="0" vol7="69" detune4="0" pan0="0" detune5="0" pan1="0" detune6="0" pan2="0" detune7="0" pan3="0" pan4="0" pan5="0" harmonic0="0.5" vol="100" pan6="0" harmonic1="0.75" foldback="0" pan7="0" harmonic [...]
- <eldata fres="0.89" ftype="0" fcut="5600" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.404" ctlenvamt="0" latt="0" sus="0.329" lspd="0.1" att="0.247" pdel="0" lamt="0" dec="0.702" userwavefile="" x100="0" lshp="0" hold="0.329" />
- <elcut lfosyncmode="0" lpdel="0" amt="0.595" rel="0.1" ctlenvamt="1" latt="0" sus="0.499" lspd="0.0496" att="0.346" pdel="0" lamt="1" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="pad_ethereal" tab="1">
+ <organic detune0="0" detune1="0" detune2="0" detune3="0" detune4="0" detune5="0" detune6="0" detune7="0" vol0="79" vol1="72" vol2="31" vol3="77" vol4="0" vol5="13" wavetype0="3" vol6="20" wavetype1="3" vol7="69" wavetype2="3" num_osc="8" wavetype3="3" harmonic0="0.5" wavetype4="0" wavetype5="0" harmonic1="0.75" wavetype6="4" harmonic2="1" wavetype7="0" pan0="0" harmonic3="2" harmonic4="3" pan1="0" harmonic5="4" pan2="0" foldback="0" harmonic6="5" pan3="0" harmonic7="6" pan4="0" pan [...]
+ <eldata fres="0.89" ftype="0" fcut="5600" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.404" latt="0" sus="0.329" lspd="0.1" att="0.247" pdel="0" lfosyncmode="0" lamt="0" dec="0.702" x100="0" lshp="0" hold="0.329"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="1" amt="0.595" rel="0.1" latt="0" sus="0.499" lspd="0.0496" att="0.346" pdel="0" lfosyncmode="0" lamt="1" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Organic/pad_rich.xpf b/data/presets/Organic/pad_rich.xpf
index 62d8de9..b595016 100644
--- a/data/presets/Organic/pad_rich.xpf
+++ b/data/presets/Organic/pad_rich.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060209" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="pad_rich" basetone="9" tab="0" >
- <organic harmonic4="3" wavetype1="2" harmonic5="4" wavetype2="5" vol0="100" harmonic6="5" wavetype3="1" vol1="100" num_osc="8" harmonic7="6" wavetype4="2" vol2="100" wavetype5="5" vol3="100" detune0="1" wavetype6="0" vol4="100" detune1="0" wavetype7="0" vol5="100" detune2="0" vol6="100" detune3="0" vol7="0" detune4="0" pan0="0" detune5="0" pan1="0" detune6="0" pan2="0" detune7="0" pan3="0" pan4="0" pan5="0" harmonic0="0.5" vol="100" pan6="0" harmonic1="0.75" foldback="0.26" pan7="0 [...]
- <eldata fres="1.19" ftype="0" fcut="320" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.708" ctlenvamt="0" latt="0" sus="0.039" lspd="0.1" att="0.363" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lfosyncmode="0" lpdel="0" amt="1" rel="0.696" ctlenvamt="0" latt="0" sus="0.058" lspd="0.1" att="0.695" pdel="0" lamt="0" dec="0" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="pad_rich" tab="0">
+ <organic detune0="1" detune1="0" detune2="0" detune3="0" detune4="0" detune5="0" detune6="0" detune7="0" vol0="100" vol1="100" vol2="100" vol3="100" vol4="100" vol5="100" wavetype0="4" vol6="100" wavetype1="2" vol7="0" wavetype2="5" num_osc="8" wavetype3="1" harmonic0="0.5" wavetype4="2" wavetype5="5" harmonic1="0.75" wavetype6="0" harmonic2="1" wavetype7="0" pan0="0" harmonic3="2" harmonic4="3" pan1="0" harmonic5="4" pan2="0" foldback="0.26" harmonic6="5" pan3="0" harmonic7="6" pa [...]
+ <eldata fres="1.19" ftype="0" fcut="320" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.708" latt="0" sus="0.039" lspd="0.1" att="0.363" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.696" latt="0" sus="0.058" lspd="0.1" att="0.695" pdel="0" lfosyncmode="0" lamt="0" dec="0" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Organic/pad_sweep.xpf b/data/presets/Organic/pad_sweep.xpf
index ed2c7f8..9b000e4 100644
--- a/data/presets/Organic/pad_sweep.xpf
+++ b/data/presets/Organic/pad_sweep.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060209" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="pad_sweep" basetone="9" tab="1" >
- <organic harmonic4="3" wavetype1="1" harmonic5="4" wavetype2="1" vol0="37" harmonic6="5" wavetype3="0" vol1="81" num_osc="8" harmonic7="6" wavetype4="5" vol2="100" wavetype5="0" vol3="24" detune0="0" wavetype6="0" vol4="52" detune1="0" wavetype7="0" vol5="0" detune2="0" vol6="0" detune3="0" vol7="0" detune4="0" pan0="0" detune5="0" pan1="0" detune6="0" pan2="0" detune7="0" pan3="0" pan4="0" pan5="0" harmonic0="0.5" vol="200" pan6="6" harmonic1="0.75" foldback="0.06" pan7="0" harmon [...]
- <eldata fres="0.37" ftype="0" fcut="960" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.576" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.345" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.116" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="pad_sweep" tab="1">
+ <organic detune0="0" detune1="0" detune2="0" detune3="0" detune4="0" detune5="0" detune6="0" detune7="0" vol0="37" vol1="81" vol2="100" vol3="24" vol4="52" vol5="0" wavetype0="1" vol6="0" wavetype1="1" vol7="0" wavetype2="1" num_osc="8" wavetype3="0" harmonic0="0.5" wavetype4="5" wavetype5="0" harmonic1="0.75" wavetype6="0" harmonic2="1" wavetype7="0" pan0="0" harmonic3="2" harmonic4="3" pan1="0" harmonic5="4" pan2="0" foldback="0.06" harmonic6="5" pan3="0" harmonic7="6" pan4="0" p [...]
+ <eldata fres="0.37" ftype="0" fcut="960" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.576" latt="0" sus="0" lspd="0.1" att="0.345" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.116"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="2" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="0" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Organic/puresine.xpf b/data/presets/Organic/puresine.xpf
index 3e0d6c0..0c77ca9 100644
--- a/data/presets/Organic/puresine.xpf
+++ b/data/presets/Organic/puresine.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060209" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="puresine" basetone="9" tab="0" >
- <organic harmonic4="3" wavetype1="0" harmonic5="4" wavetype2="0" vol0="0" harmonic6="5" wavetype3="0" vol1="1" num_osc="8" harmonic7="6" wavetype4="0" vol2="100" wavetype5="0" vol3="5" detune0="0" wavetype6="0" vol4="1" detune1="0" wavetype7="0" vol5="0" detune2="0" vol6="0" detune3="0" vol7="0" detune4="0" pan0="0" detune5="0" pan1="0" detune6="0" pan2="0" detune7="0" pan3="0" pan4="0" pan5="0" harmonic0="0.5" vol="200" pan6="0" harmonic1="0.75" foldback="0" pan7="0" harmonic2="1" [...]
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="puresine" tab="0">
+ <organic detune0="0" detune1="0" detune2="0" detune3="0" detune4="0" detune5="0" detune6="0" detune7="0" vol0="0" vol1="1" vol2="100" vol3="5" vol4="1" vol5="0" wavetype0="0" vol6="0" wavetype1="0" vol7="0" wavetype2="0" num_osc="8" wavetype3="0" harmonic0="0.5" wavetype4="0" wavetype5="0" harmonic1="0.75" wavetype6="0" harmonic2="1" wavetype7="0" pan0="0" harmonic3="2" harmonic4="3" pan1="0" harmonic5="4" pan2="0" foldback="0" harmonic6="5" pan3="0" harmonic7="6" pan4="0" pan5="0" [...]
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Organic/sequencer_64.xpf b/data/presets/Organic/sequencer_64.xpf
index 3d3fab9..c1f8fc2 100644
--- a/data/presets/Organic/sequencer_64.xpf
+++ b/data/presets/Organic/sequencer_64.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060209" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="sequencer_64" basetone="9" tab="2" >
- <organic harmonic4="3" wavetype1="3" harmonic5="4" wavetype2="3" vol0="100" harmonic6="5" wavetype3="0" vol1="100" num_osc="8" harmonic7="6" wavetype4="0" vol2="100" wavetype5="0" vol3="1" detune0="0" wavetype6="0" vol4="5" detune1="0" wavetype7="0" vol5="10" detune2="0" vol6="33" detune3="0" vol7="23" detune4="0" pan0="-20" detune5="0" pan1="20" detune6="0" pan2="0" detune7="0" pan3="0" pan4="0" pan5="0" harmonic0="0.5" vol="70" pan6="0" harmonic1="0.75" foldback="0.75" pan7="0" h [...]
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.169" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0" userwavefile="" x100="0" lshp="0" hold="0.171" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0.365" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="sequencer_64" tab="2">
+ <organic detune0="0" detune1="0" detune2="0" detune3="0" detune4="0" detune5="0" detune6="0" detune7="0" vol0="100" vol1="100" vol2="100" vol3="1" vol4="5" vol5="10" wavetype0="3" vol6="33" wavetype1="3" vol7="23" wavetype2="3" num_osc="8" wavetype3="0" harmonic0="0.5" wavetype4="0" wavetype5="0" harmonic1="0.75" wavetype6="0" harmonic2="1" wavetype7="0" pan0="-20" harmonic3="2" harmonic4="3" pan1="20" harmonic5="4" pan2="0" foldback="0.75" harmonic6="5" pan3="0" harmonic7="6" pan4 [...]
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.169" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0" x100="0" lshp="0" hold="0.171"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0.365" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inputchannel="0" outputchannel="1" send="0" receive="0"/>
+ <chordcreator chorddisabled="1" arptime="100" arprange="1" arpsyncmode="0" arpmode="0" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="0" arpdisabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/SID/Bass.xpf b/data/presets/SID/Bass.xpf
new file mode 100644
index 0000000..c5f605c
--- /dev/null
+++ b/data/presets/SID/Bass.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Bass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="150">
+ <instrument name="sid">
+ <sid sync0="0" sync1="0" sync2="0" voice3Off="0" attack0="1" attack1="2" attack2="0" filterFC="1024" chipModel="1" decay0="8" decay1="8" decay2="0" volume="15" filtered0="0" filterResonance="8" filtered1="0" sustain0="6" filtered2="0" sustain1="0" sustain2="5" waveform0="2" ringmod0="0" waveform1="1" ringmod1="0" waveform2="2" ringmod2="0" filterMode="2" test0="0" test1="1" test2="1" coarse0="-12" coarse1="0" coarse2="0" release0="6" release1="7" release2="5" pulsewidth0="2048" p [...]
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.46" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/SID/CheesyGuitar.xpf b/data/presets/SID/CheesyGuitar.xpf
new file mode 100644
index 0000000..756e14a
--- /dev/null
+++ b/data/presets/SID/CheesyGuitar.xpf
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="CheesyGuitar" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="sid">
+ <sid sync0="0" sync1="0" sync2="0" voice3Off="1" attack0="0" attack1="0" attack2="8" filterFC="1024" chipModel="1" decay0="8" decay1="7" decay2="8" volume="15" filtered0="0" filterResonance="8" filtered1="0" sustain0="15" filtered2="0" sustain1="15" sustain2="15" waveform0="2" ringmod0="0" waveform1="0" ringmod1="0" waveform2="1" ringmod2="0" filterMode="2" test0="0" test1="0" test2="0" coarse0="0" coarse1="0" coarse2="0" release0="8" release1="8" release2="8" pulsewidth0="2048" [...]
+ </instrument>
+ <eldata fres="5.31" ftype="14" fcut="1611" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.664" pdel="0" userwavefile="" dec="0.38" lamt="0" syncmode="0" latt="0" rel="0.431" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="1" amt="1" x100="0" att="0.665" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="1">
+ <port00 data="5.4625"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="cmt" name="file"/>
+ <attribute value="amp_stereo" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-12.625"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-12.625"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/SID/Lead.xpf b/data/presets/SID/Lead.xpf
new file mode 100644
index 0000000..be81b29
--- /dev/null
+++ b/data/presets/SID/Lead.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Lead" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="sid">
+ <sid sync0="0" sync1="0" sync2="0" voice3Off="0" attack0="0" attack1="0" attack2="0" filterFC="1782" chipModel="1" decay0="8" decay1="8" decay2="8" volume="15" filtered0="0" filterResonance="0" filtered1="0" sustain0="15" filtered2="0" sustain1="15" sustain2="15" waveform0="1" ringmod0="1" waveform1="1" ringmod1="0" waveform2="2" ringmod2="0" filterMode="2" test0="0" test1="0" test2="0" coarse0="0" coarse1="12" coarse2="0" release0="8" release1="8" release2="8" pulsewidth0="2048" [...]
+ </instrument>
+ <eldata fres="3.01" ftype="4" fcut="217" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.636" pdel="0" userwavefile="" dec="0.416" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="1.361" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="1.359" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="2" arpgate="49"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/SID/MadMind.xpf b/data/presets/SID/MadMind.xpf
new file mode 100644
index 0000000..5375d5b
--- /dev/null
+++ b/data/presets/SID/MadMind.xpf
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Mad Mind" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="83">
+ <instrument name="sid">
+ <sid sync0="0" sync1="0" sync2="0" voice3Off="1" attack0="0" attack1="0" attack2="8" filterFC="1024" chipModel="1" decay0="8" decay1="7" decay2="8" volume="15" filtered0="0" filterResonance="8" filtered1="0" sustain0="15" filtered2="0" sustain1="15" sustain2="15" waveform0="2" ringmod0="0" waveform1="0" ringmod1="0" waveform2="1" ringmod2="0" filterMode="2" test0="0" test1="0" test2="0" coarse0="0" coarse1="0" coarse2="0" release0="8" release1="8" release2="8" pulsewidth0="2048" [...]
+ </instrument>
+ <eldata fres="4.63" ftype="14" fcut="1611" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.581" pdel="0" userwavefile="" dec="0.357" lamt="0" syncmode="0" latt="0" rel="0.276" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="1" amt="1" x100="0" att="0.665" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.426" pdel="0" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0.625" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="1" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="1" arp="5" arptime_numerator="4" arpdir="3" arpgate="36"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="1">
+ <port00 data="5.4625"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="cmt" name="file"/>
+ <attribute value="amp_stereo" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-12.625"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-12.625"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.50197"/>
+ <port03 data="0.3745"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/SID/Overdrive.xpf b/data/presets/SID/Overdrive.xpf
new file mode 100644
index 0000000..ef4b51a
--- /dev/null
+++ b/data/presets/SID/Overdrive.xpf
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Overdrive" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="24" pitch="0" basenote="57" vol="100">
+ <instrument name="sid">
+ <sid sync0="0" sync1="0" sync2="0" voice3Off="1" attack0="0" attack1="0" attack2="8" filterFC="1096" chipModel="1" decay0="8" decay1="8" decay2="8" volume="15" filtered0="0" filterResonance="8" filtered1="0" sustain0="15" filtered2="0" sustain1="15" sustain2="15" waveform0="2" ringmod0="0" waveform1="1" ringmod1="0" waveform2="1" ringmod2="0" filterMode="2" test0="0" test1="0" test2="0" coarse0="0" coarse1="0" coarse2="0" release0="8" release1="8" release2="8" pulsewidth0="2048" [...]
+ </instrument>
+ <eldata fres="5.92" ftype="14" fcut="6896" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.439" pdel="0" userwavefile="" dec="0.509" lamt="0" syncmode="0" latt="0" rel="0.44" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="1" amt="1" x100="0" att="0.891" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="1">
+ <port00 data="10"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="cmt" name="file"/>
+ <attribute value="amp_stereo" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-14"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-14"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.279003"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/SID/Pad.xpf b/data/presets/SID/Pad.xpf
new file mode 100644
index 0000000..2a03b3f
--- /dev/null
+++ b/data/presets/SID/Pad.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Pad" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="59.8">
+ <instrument name="sid">
+ <sid sync0="0" sync1="0" sync2="0" voice3Off="1" attack0="2" attack1="8" attack2="4" filterFC="1024" chipModel="1" decay0="8" decay1="8" decay2="0" volume="15" filtered0="0" filterResonance="8" filtered1="0" sustain0="14" filtered2="0" sustain1="12" sustain2="1" waveform0="1" ringmod0="0" waveform1="2" ringmod1="0" waveform2="3" ringmod2="0" filterMode="2" test0="0" test1="0" test2="0" coarse0="0" coarse1="0" coarse2="0" release0="5" release1="7" release2="0" pulsewidth0="2048" p [...]
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/AmazingBubbles.xpf b/data/presets/TripleOscillator/AmazingBubbles.xpf
index 3201f3d..d06bd61 100644
--- a/data/presets/TripleOscillator/AmazingBubbles.xpf
+++ b/data/presets/TripleOscillator/AmazingBubbles.xpf
@@ -1,18 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="6" vol="100" name="Amazing Bubbles 2" basetone="11" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="5" coarse1="-12" userwavefile2="samples/empty.wav" wavetype2="2" coarse2="0" vol0="200" vol1="200" finel0="0" vol2="200" finel1="0" finel2="0" modalgo1="2" stphdetun0="292" pan0="0" modalgo2="1" stphdetun1="56" pan1="0" stphdetun2="70" pan2="0" phoffset0="0" phoffset1="49" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="4" coarse0="-12" />
- <eldata fres="0.8" ftype="6" fcut="483" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.325" latt="0" sus="0" lspd="0.2475" att="0" pdel="0" lamt="0.18" dec="0.242" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0" latt="0" sus="0.999" lspd="0.01" att="0" pdel="0" lamt="0.64" dec="0.999" x100="0" lshp="2" hold="0" />
- <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.999" x100="0" lshp="0" hold="0" />
+ <instrumenttracksettings muted="0" type="0" name="Amazing Bubbles" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="50">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="-12" coarse1="-12" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="1" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="292" pan2="0" stphdetun1="56" wavetype0="4" stphdetun2="70" wavetype1="5" wavetype2="2" vol0="200" vol1="200" phoffset0="0" phoffset1="49" vol2="200"/>
+ </instrument>
+ <eldata fres="0.7" ftype="6" fcut="484" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.242" lamt="0.18" syncmode="0" latt="0" rel="0.325" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.2475" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.999" lamt="0.64" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="2" lspd="0.01" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.999" lamt="0" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/AnalogBell.xpf b/data/presets/TripleOscillator/AnalogBell.xpf
new file mode 100644
index 0000000..18f4d2b
--- /dev/null
+++ b/data/presets/TripleOscillator/AnalogBell.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="AnalogBell" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="59">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="13" coarse0="0" coarse1="0" coarse2="-12" finel0="0" finel1="0" modalgo1="2" modalgo2="3" finel2="-14" pan0="0" modalgo3="0" pan1="0" stphdetun0="247" pan2="0" stphdetun1="109" wavetype0="3" stphdetun2="50" wavetype1="2" wavetype2="0" vol0="49" vol1="54" phoffset0="0" phoffset1="271" vol2="14"/>
+ </instrument>
+ <eldata fres="0.66" ftype="0" fcut="5" fwet="1">
+ <elvol lspd_denominator="1" sustain="0.567" pdel="0" userwavefile="" dec="0.324" lamt="0" syncmode="0" latt="0" rel="0.473" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" sustain="0.36" pdel="0" userwavefile="" dec="0.385" lamt="0" syncmode="0" latt="0" rel="0.43" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.767" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="-0.01" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="102" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="142"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/AnalogDreamz.xpf b/data/presets/TripleOscillator/AnalogDreamz.xpf
index cdec62d..0af114c 100644
--- a/data/presets/TripleOscillator/AnalogDreamz.xpf
+++ b/data/presets/TripleOscillator/AnalogDreamz.xpf
@@ -1,18 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="43" name="Analog Dreamz" basetone="9" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="-12" userwavefile2="" wavetype2="2" coarse2="-24" vol0="100" vol1="100" finel0="-18" vol2="100" finel1="14" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="2" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="15" finer1="-5" finer2="0" userwavefile0="" wavetype0="2" coarse0="-12" />
- <eldata fres="4.73" ftype="1" fcut="95" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.211" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0.46" rel="0.184" latt="0" sus="0.718" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.629" x100="0" lshp="0" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings muted="0" type="0" name="Analog Dreamz" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="60">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="15" userwavefile1="" finer1="-5" userwavefile2="" finer2="0" coarse0="-12" coarse1="-12" coarse2="-24" finel0="-18" finel1="14" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="2" ftype="1" fcut="100" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.592" lamt="0" syncmode="0" latt="0" rel="0.278" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.178" pdel="0" userwavefile="" dec="0.629" lamt="0" syncmode="0" latt="0" rel="1.409" amt="0.835" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/AnalogTimes.xpf b/data/presets/TripleOscillator/AnalogTimes.xpf
index 48d2571..0717947 100644
--- a/data/presets/TripleOscillator/AnalogTimes.xpf
+++ b/data/presets/TripleOscillator/AnalogTimes.xpf
@@ -1,18 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="5" vol="100" name="Analog Times" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="2" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="100" finel1="-14" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="2" stphdetun1="50" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="13" finer2="-3" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="0" />
- <eldata fres="0.01" ftype="6" fcut="1118" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.214" latt="0" sus="0" lspd="0.0917" att="0" pdel="0" lamt="0" dec="0.297" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0.655" rel="0" latt="0" sus="0.999" lspd="0.67" att="0" pdel="0" lamt="0.145" dec="0.223" x100="0" lshp="1" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.01" att="0" pdel="0" lamt="-0.00599995" dec="0.5" x100="0" lshp="1" hold="0" />
+ <instrumenttracksettings muted="0" type="0" name="Analog Times" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="59">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="13" userwavefile2="samples/empty.wav" finer2="-2" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-14" modalgo1="2" modalgo2="2" finel2="2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.42" ftype="6" fcut="1118" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="1.144" lamt="0" syncmode="0" latt="0" rel="0.214" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.18" pdel="0" userwavefile="" dec="0.237" lamt="0.2" syncmode="5" latt="0" rel="0.419" amt="0.88" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.67" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="3" chord="0" arpgate="100" arp="8" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/AnalogTimes2.xpf b/data/presets/TripleOscillator/AnalogTimes2.xpf
deleted file mode 100644
index 0be1051..0000000
--- a/data/presets/TripleOscillator/AnalogTimes2.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="AnalogTimes 2" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="13" coarse0="0" coarse1="0" coarse2="-12" finel0="0" finel1="0" modalgo1="2" modalgo2="3" finel2="-14" pan0="0" modalgo3="0" pan1="0" stphdetun0="247" pan2="0" stphdetun1="109" wavetype0="3" stphdetun2="50" wavetype1="2" wavetype2="0" vol0="49" vol1="54" phoffset0="0" phoffset1="271" vol2="14" />
- </instrument>
- <eldata fres="0.66" ftype="0" fcut="1" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.324" lamt="0" syncmode="0" latt="0" rel="0.473" sus="0.433" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.241" lamt="0" syncmode="0" latt="0" rel="0.43" sus="0.64" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.767" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="-0.01" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="102" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="142" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/Analogous.xpf b/data/presets/TripleOscillator/Analogous.xpf
index 7091d82..ec5c61a 100644
--- a/data/presets/TripleOscillator/Analogous.xpf
+++ b/data/presets/TripleOscillator/Analogous.xpf
@@ -1,18 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="82" name="Analogous" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="2" coarse2="7" vol0="100" vol1="100" finel0="0" vol2="100" finel1="10" finel2="-2" modalgo1="2" stphdetun0="232" pan0="9" modalgo2="1" stphdetun1="95" pan1="-20" stphdetun2="109" pan2="10" phoffset0="74" phoffset1="280" phoffset2="82" finer0="0" finer1="16" finer2="-3" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="-12" />
- <eldata fres="3" ftype="0" fcut="1205" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.375" latt="0" sus="0" lspd="0.1" att="0.043" pdel="0" lamt="0" dec="0.999" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.6094" att="0" pdel="0" lamt="0" dec="0.218" x100="0" lshp="1" hold="0" />
- <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings muted="0" type="0" name="Analogous" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="55">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="82" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="16" userwavefile2="samples/empty.wav" finer2="-3" coarse0="-12" coarse1="0" coarse2="7" finel0="0" finel1="10" modalgo1="2" modalgo2="1" finel2="-2" pan0="9" modalgo3="2" pan1="-20" stphdetun0="232" pan2="0" stphdetun1="95" wavetype0="2" stphdetun2="109" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="74" phoffset1="280" vol2="33"/>
+ </instrument>
+ <eldata fres="3" ftype="0" fcut="1205" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.999" lamt="0" syncmode="0" latt="0" rel="0.375" amt="1" x100="0" att="0.043" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.218" lamt="0.255" syncmode="0" latt="0" rel="0.49" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.6094" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="3" chord="0" arpgate="71" arp="0" arptime="174" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="174" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="71"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/ArpKing.xpf b/data/presets/TripleOscillator/ArpKing.xpf
deleted file mode 100644
index c8bf6d1..0000000
--- a/data/presets/TripleOscillator/ArpKing.xpf
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.1-cvs20051215" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="Arp King" basetone="9" tab="2" >
- <tripleoscillator userwavefile1="" wavetype1="3" coarse1="-12" userwavefile2="" wavetype2="1" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="57" finel1="0" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="2" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="" wavetype0="2" coarse0="-24" />
- <eldata fres="0.29" ftype="1" fcut="877" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.209" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.3811" att="0" pdel="0" lamt="0.505" dec="0.499" x100="0" lshp="1" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords chordrange="1" arprange="2" arpdisabled="0" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="120" arpdir="1" />
- <midi inputchannel="0" outputchannel="0" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Arpeggio.xpf b/data/presets/TripleOscillator/Arpeggio.xpf
new file mode 100644
index 0000000..3230096
--- /dev/null
+++ b/data/presets/TripleOscillator/Arpeggio.xpf
@@ -0,0 +1,17 @@
+<?xml version='1.0'?>
+<!DOCTYPE multimedia-project>
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="19" name="Arpeggio 2" tab="2">
+ <tripleoscillator phoffset2="82" userwavefile0="empty.wav" userwavefile1="empty.wav" finer0="13" userwavefile2="empty.wav" finer1="16" finer2="4" coarse0="-12" coarse1="0" coarse2="12" finel0="-10" finel1="10" modalgo1="2" finel2="-2" modalgo2="2" pan0="9" pan1="-20" stphdetun0="232" pan2="10" stphdetun1="110" stphdetun2="109" wavetype0="2" wavetype1="3" wavetype2="2" vol0="100" vol1="100" phoffset0="87" vol2="115" phoffset1="280"/>
+ <eldata fres="0.46" ftype="4" fcut="1250" fwet="1">
+ <elvol lpdel="0" amt="1" rel="0.167" latt="0" sus="0" lspd="0.1" att="0.048" pdel="0" lamt="0" dec="0.999" x100="0" lshp="0" hold="0"/>
+ <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.6094" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="1" hold="0.5"/>
+ <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ </eldata>
+ <arpeggiator arptime="100" arprange="2" chord="0" chordrange="2" arp="0" arp-enabled="1" chord-enabled="1" arpdir="0" arpgate="51"/>
+ <chordcreator arptime="100" arprange="2" chord="0" chordrange="2" arp="0" arp-enabled="1" chord-enabled="1" arpdir="0" arpgate="51"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</multimediaproject>
diff --git a/data/presets/TripleOscillator/ArpeggioPing.xpf b/data/presets/TripleOscillator/ArpeggioPing.xpf
new file mode 100644
index 0000000..5da4c30
--- /dev/null
+++ b/data/presets/TripleOscillator/ArpeggioPing.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Arpeggio" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="33">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="13" coarse0="0" coarse1="0" coarse2="-12" finel0="0" finel1="0" modalgo1="2" modalgo2="0" finel2="-14" pan0="0" modalgo3="0" pan1="0" stphdetun0="247" pan2="0" stphdetun1="109" wavetype0="3" stphdetun2="50" wavetype1="2" wavetype2="0" vol0="49" vol1="54" phoffset0="0" phoffset1="271" vol2="14"/>
+ </instrument>
+ <eldata fres="0.66" ftype="0" fcut="1121" fwet="1">
+ <elvol lspd_denominator="1" sustain="0.02" pdel="0" userwavefile="" dec="0.15" lamt="0" syncmode="0" latt="0" rel="0.058" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" sustain="0.001" pdel="0" userwavefile="" dec="0.226" lamt="0" syncmode="0" latt="0" rel="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.767" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="-0.005" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="102" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="142"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="1"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Arpeggio_1.xpf b/data/presets/TripleOscillator/Arpeggio_1.xpf
deleted file mode 100644
index 51fc3e8..0000000
--- a/data/presets/TripleOscillator/Arpeggio_1.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc1" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="Arpeggio 1" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="33" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="13" coarse0="0" coarse1="0" coarse2="-12" finel0="0" finel1="0" modalgo1="2" modalgo2="0" finel2="-14" pan0="0" modalgo3="0" pan1="0" stphdetun0="247" pan2="0" stphdetun1="109" wavetype0="3" stphdetun2="50" wavetype1="2" wavetype2="0" vol0="49" vol1="54" phoffset0="0" phoffset1="271" vol2="14" />
- </instrument>
- <eldata fres="0.66" ftype="0" fcut="1121" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.297" lamt="0" syncmode="0" latt="0" rel="0.234" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.226" lamt="0" syncmode="0" latt="0" rel="0" sus="0.999" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.767" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="-0.005" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="102" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="142" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/Arpeggio_2.xpf b/data/presets/TripleOscillator/Arpeggio_2.xpf
deleted file mode 100644
index 5e12cee..0000000
--- a/data/presets/TripleOscillator/Arpeggio_2.xpf
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9beta2" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="33" name="Arpeggio 2" basetone="9" tab="2" >
- <tripleoscillator userwavefile1="empty.wav" wavetype1="3" coarse1="0" userwavefile2="empty.wav" wavetype2="2" coarse2="12" vol0="100" vol1="100" finel0="-10" vol2="115" finel1="10" finel2="-2" modalgo1="2" stphdetun0="232" pan0="9" modalgo2="2" stphdetun1="110" pan1="-20" stphdetun2="109" pan2="10" phoffset0="87" phoffset1="280" phoffset2="82" finer0="13" finer1="16" finer2="4" userwavefile0="empty.wav" wavetype0="2" coarse0="-12" />
- <eldata fres="0.46" ftype="4" fcut="1250" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.167" latt="0" sus="0" lspd="0.1" att="0.048" pdel="0" lamt="0" dec="0.999" x100="0" lshp="0" hold="0" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.6094" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="1" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="2" arprange="2" chord="0" arpgate="51" arp="0" arptime="100" arpdir="2" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Bell.xpf b/data/presets/TripleOscillator/Bell.xpf
index 41e6a99..1d70449 100644
--- a/data/presets/TripleOscillator/Bell.xpf
+++ b/data/presets/TripleOscillator/Bell.xpf
@@ -1,18 +1,34 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="Bell" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="4" coarse1="12" userwavefile2="samples/empty.wav" wavetype2="3" coarse2="-12" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="0" stphdetun0="0" pan0="0" modalgo2="0" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="1" coarse0="0" />
- <eldata fres="0.01" ftype="6" fcut="827" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.214" latt="0" sus="0.707" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.379" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0.41" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.221" x100="0" lshp="0" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings muted="0" type="0" name="Bell" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="45">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="12" coarse2="-12" finel0="0" finel1="0" modalgo1="0" modalgo2="0" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="1" stphdetun2="0" wavetype1="4" wavetype2="3" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100"/>
+ </instrument>
+ <eldata fres="0.01" ftype="6" fcut="827" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.293" pdel="0" userwavefile="" dec="0.379" lamt="0" syncmode="0" latt="0" rel="0.453" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.221" lamt="0" syncmode="0" latt="0" rel="0" amt="0.41" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.49434"/>
+ <port04 data="0.0005"/>
+ <port05 data="0.16"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/BellArp.xpf b/data/presets/TripleOscillator/BellArp.xpf
new file mode 100644
index 0000000..63f4edb
--- /dev/null
+++ b/data/presets/TripleOscillator/BellArp.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Bell Arp" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="43">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="146" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="1" modalgo2="1" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="0" stphdetun2="0" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="5973" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.416" pdel="0" userwavefile="" dec="0.207" lamt="0" syncmode="0" latt="0" rel="0.24" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="107" arprange="2" arptime_denominator="4" syncmode="6" arpmode="0" arp-enabled="1" arp="6" arptime_numerator="4" arpdir="2" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Bell_2.xpf b/data/presets/TripleOscillator/Bell_2.xpf
deleted file mode 100644
index 300249f..0000000
--- a/data/presets/TripleOscillator/Bell_2.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="Bell 2" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="3" coarse1="12" userwavefile2="samples/empty.wav" wavetype2="4" coarse2="-12" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="0" stphdetun0="0" pan0="0" modalgo2="0" stphdetun1="86" pan1="0" stphdetun2="57" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="1" coarse0="0" />
- <eldata fres="0.01" ftype="6" fcut="827" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.214" latt="0" sus="0.707" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.379" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0.41" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.221" x100="0" lshp="0" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/BlandModBass.xpf b/data/presets/TripleOscillator/BlandModBass.xpf
new file mode 100644
index 0000000..3160bd0
--- /dev/null
+++ b/data/presets/TripleOscillator/BlandModBass.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Bland Mod" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="45" vol="60">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="-12" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="0" modalgo2="4" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="4" stphdetun2="0" wavetype1="1" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="3"/>
+ </instrument>
+ <eldata fres="0.5" ftype="6" fcut="12226" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.671" pdel="0" userwavefile="" dec="0.983" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.039" pdel="0" userwavefile="" dec="0.521" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/BrokenToy.xpf b/data/presets/TripleOscillator/BrokenToy.xpf
new file mode 100644
index 0000000..ed0ac37
--- /dev/null
+++ b/data/presets/TripleOscillator/BrokenToy.xpf
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Broken Toy" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="75">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="12" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="4" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="5" stphdetun2="0" wavetype1="0" wavetype2="3" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="10"/>
+ </instrument>
+ <eldata fres="0.18" ftype="0" fcut="141" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.63" pdel="0" userwavefile="" dec="0.58" lamt="0" syncmode="0" latt="0" rel="0.27" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.26" pdel="0.049" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="0.72" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.94" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.55" amt="0" x100="0" att="0.52" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="2" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="0" ports="20">
+ <port01 link="1" data="-48"/>
+ <port02 link="1" data="-48"/>
+ <port03 link="1" data="-48"/>
+ <port04 link="1" data="0"/>
+ <port05 link="1" data="-25.92"/>
+ <port06 link="1" data="0"/>
+ <port07 link="1" data="0"/>
+ <port08 link="1" data="-3.6"/>
+ <port09 link="0" data="-5.04"/>
+ <port010 link="0" data="5.04"/>
+ <port11 data="-48"/>
+ <port12 data="-48"/>
+ <port13 data="-48"/>
+ <port14 data="0"/>
+ <port15 data="-25.92"/>
+ <port16 data="0"/>
+ <port17 data="0"/>
+ <port18 data="-3.6"/>
+ <port19 data="5.04"/>
+ <port110 data="-5.04"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/ChurchOrgan.xpf b/data/presets/TripleOscillator/ChurchOrgan.xpf
index 1c3c9ee..ac7a54f 100644
--- a/data/presets/TripleOscillator/ChurchOrgan.xpf
+++ b/data/presets/TripleOscillator/ChurchOrgan.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Church Organ 2" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="14" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="278" wavetype0="0" stphdetun2="274" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="70" vol2="100" />
+ <instrumenttracksettings muted="0" type="0" name="Church Organ 2">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="14">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" userwavefile1="" finer0="0" userwavefile2="" finer1="0" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" finel2="0" modalgo2="2" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="278" wavetype0="0" stphdetun2="274" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="70" vol2="100"/>
</instrument>
- <eldata fres="0.01" ftype="6" fcut="13120" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.234" sus="0" amt="1" x100="0" att="0.078" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.01" ftype="6" fcut="13120" fwet="1">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0" lamt="0" syncmode="0" latt="0" rel="0.234" sus="0" amt="1" x100="0" att="0.078" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="4" chord-enabled="1" />
- <arpeggiator arptime="164" arprange="1" arptime_denominator="1" syncmode="0" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="4" chord-enabled="1"/>
+ <arpeggiator arptime="164" arprange="1" arptime_denominator="1" syncmode="0" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/TripleOscillator/CryingPads.xpf b/data/presets/TripleOscillator/CryingPads.xpf
new file mode 100644
index 0000000..441dce3
--- /dev/null
+++ b/data/presets/TripleOscillator/CryingPads.xpf
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Crying Pads" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="55">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-12" finel0="0" finel1="-1" modalgo1="0" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="0" wavetype2="3" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="12990" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.915" pdel="0" userwavefile="" dec="0.541" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0.112" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.673" lamt="0" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0.031" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.670355"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.3275"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/DeathBass.xpf b/data/presets/TripleOscillator/DeathBass.xpf
deleted file mode 100644
index 2364e61..0000000
--- a/data/presets/TripleOscillator/DeathBass.xpf
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="Death Bass" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="70" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="10" userwavefile1="" finer1="4" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="-4" finel1="2" modalgo1="0" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="4" stphdetun2="0" wavetype1="1" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33" />
- </instrument>
- <eldata fres="1.21" ftype="7" fcut="5320" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.24" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="2" enabled="1" >
- <effect key="AAAACQAAAAACAAAACgAAAAAgAEQAeQBzAG8AbgAgAGMAbwBtAHAAcgBlAHMAcwBvAHIAAAALAAAAAAIAAAAaAGQAeQBzAG8AbgBDAG8AbQBwAHIAZQBzAHMAAAAsAGQAeQBzAG8AbgBfAGMAbwBtAHAAcgBlAHMAcwBfADEANAAwADMALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port10="0" port11="240" port12="1" port13="1" port02link="1" port11_denominator="1" ports="8" syncmode="0" port03link="1" port11_numerator="1" port00="0" port01="240" port00link="1" port02="1" port03="1" port01_numerator="1" link="1" port01_denominator="1" port01link="1" />
- </effect>
- <effect key="AAAACQAAAAACAAAACgAAAAAgAEQAeQBzAG8AbgAgAGMAbwBtAHAAcgBlAHMAcwBvAHIAAAALAAAAAAIAAAAaAGQAeQBzAG8AbgBDAG8AbQBwAHIAZQBzAHMAAAAsAGQAeQBzAG8AbgBfAGMAbwBtAHAAcgBlAHMAcwBfADEANAAwADMALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port10="0" port11="250" port12="1" port13="1" port02link="1" port11_denominator="1" ports="8" syncmode="0" port03link="1" port11_numerator="1" port00="0" port01="250" port00link="1" port02="1" port03="1" port01_numerator="1" link="1" port01_denominator="1" port01link="1" />
- </effect>
- </fxchain>
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/DetunedGhost.xpf b/data/presets/TripleOscillator/DetunedGhost.xpf
new file mode 100644
index 0000000..4f180b6
--- /dev/null
+++ b/data/presets/TripleOscillator/DetunedGhost.xpf
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Detuned Ghost" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="160">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="3" modalgo2="3" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="4" stphdetun2="0" wavetype1="1" wavetype2="0" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fwet="1">
+ <fcut value="12819" id="5593744"/>
+ <elvol userwavefile="" sustain="0" lpdel="0" lspd_denominator="4" ctlenvamt="0" rel="0.14" amt="1" lspd_numerator="4" syncmode="0" latt="0" pdel="0" att="0" lspd="0.1" lamt="0" x100="0" lshp="0" hold="0.08">
+ <dec value="0.445" id="2519228"/>
+ </elvol>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.14" lamt="0" syncmode="0" latt="0" rel="0.06" amt="0" x100="1" att="0.13" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.90454"/>
+ <port03 data="0.749"/>
+ <port04 data="0.0005"/>
+ <port05 data="0.3775"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/DirtyReece.xpf b/data/presets/TripleOscillator/DirtyReece.xpf
new file mode 100644
index 0000000..d574c72
--- /dev/null
+++ b/data/presets/TripleOscillator/DirtyReece.xpf
@@ -0,0 +1,83 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Dirty Reece" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="14" userwavefile1="" finer1="-15" userwavefile2="" finer2="20" coarse0="-24" coarse1="-24" coarse2="-12" finel0="15" finel1="-14" modalgo1="2" modalgo2="2" finel2="20" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="2" ftype="0" fcut="13720" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="4" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="12">
+ <port04 data="3.168"/>
+ <port05 data="9.999"/>
+ <port06 data="0.69965"/>
+ <port07 data="180"/>
+ <port08 data="4"/>
+ <port09 data="212.4"/>
+ <port010 data="2"/>
+ <port011 data="1"/>
+ <port012 data="99.95"/>
+ <port013 data="2998.5"/>
+ <port014 data="0.125"/>
+ <port015 data="0.38"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="calf" name="file"/>
+ <attribute value="MultiChorus" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="0">
+ <ladspacontrols ports="7">
+ <port00 data="2.8"/>
+ <port01 data="90"/>
+ <port02 data="100"/>
+ <port03 data="0"/>
+ <port04 data="20"/>
+ <port05 data="0"/>
+ <port06 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="tap_chorusflanger" name="file"/>
+ <attribute value="tap_chorusflanger" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="0">
+ <ladspacontrols ports="4">
+ <port02 data="0.50197"/>
+ <port03 data="0.3745"/>
+ <port04 data="0.9995"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-3"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-3"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Distorted-FM-Bass.xpf b/data/presets/TripleOscillator/Distorted-FM-Bass.xpf
deleted file mode 100644
index 0ce86c4..0000000
--- a/data/presets/TripleOscillator/Distorted-FM-Bass.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="Distorted FM-Bass" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="4" coarse1="12" userwavefile2="samples/empty.wav" wavetype2="4" coarse2="-12" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="0" stphdetun0="0" pan0="0" modalgo2="0" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="1" coarse0="0" />
- <eldata fres="0.01" ftype="6" fcut="827" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.347" latt="0" sus="0.707" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.379" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.221" x100="0" lshp="0" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/DistortedPMBass.xpf b/data/presets/TripleOscillator/DistortedPMBass.xpf
new file mode 100644
index 0000000..9702355
--- /dev/null
+++ b/data/presets/TripleOscillator/DistortedPMBass.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Distorted PM Bass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="59">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="12" coarse2="-12" finel0="0" finel1="0" modalgo1="0" modalgo2="0" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="1" stphdetun2="0" wavetype1="4" wavetype2="4" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100"/>
+ </instrument>
+ <eldata fres="0.01" ftype="6" fcut="827" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.293" pdel="0" userwavefile="" dec="0.379" lamt="0" syncmode="0" latt="0" rel="0.347" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.221" lamt="0" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Drums_HardKick.xpf b/data/presets/TripleOscillator/Drums_HardKick.xpf
new file mode 100644
index 0000000..64bd319
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_HardKick.xpf
@@ -0,0 +1,108 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Hard Kick" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="45" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="waveforms/analogsqr.flac" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="2" modalgo2="4" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="0" stphdetun2="0" wavetype1="0" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="10" ftype="11" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.209" lamt="0" syncmode="0" latt="0" rel="0.058" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.225" pdel="0" userwavefile="" dec="0.114" lamt="0" syncmode="0" latt="0" rel="0.203" amt="0.125" x100="0" att="0" lpdel="0" hold="0.062" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="5" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="14">
+ <port01 link="1" data="1.5925"/>
+ <port02 link="1" data="0.999975"/>
+ <port03 link="1" data="20"/>
+ <port04 link="1" data="0"/>
+ <port05 link="1" data="0"/>
+ <port06 link="1" data="0"/>
+ <port07 link="1" data="0.9999"/>
+ <port11 data="1.5925"/>
+ <port12 data="0.999975"/>
+ <port13 data="20"/>
+ <port14 data="0"/>
+ <port15 data="0"/>
+ <port16 data="0"/>
+ <port17 data="0.9999"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="AmpIV" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-15"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-15"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="0"/>
+ <port03 data="11.34"/>
+ <port04 data="8.64"/>
+ <port05 data="13.14"/>
+ <port06 data="8.1"/>
+ <port07 data="-48"/>
+ <port08 data="-4.14"/>
+ <port09 data="3.42"/>
+ <port010 data="5.22"/>
+ <port011 data="11.16"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="-48"/>
+ <port03 data="5.04"/>
+ <port04 data="7.02"/>
+ <port05 data="6.84"/>
+ <port06 data="5.22"/>
+ <port07 data="-3.06"/>
+ <port08 data="2.88"/>
+ <port09 data="3.06"/>
+ <port010 data="5.22"/>
+ <port011 data="5.94"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="0"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="0"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Drums_HihatC.xpf b/data/presets/TripleOscillator/Drums_HihatC.xpf
new file mode 100644
index 0000000..3b4dd57
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_HihatC.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Hihat Closed" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="6" stphdetun2="0" wavetype1="6" wavetype2="6" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.5" ftype="1" fcut="3180" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.109" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.072" lamt="0" syncmode="0" latt="0" rel="0.195" amt="1" x100="0" att="0.035" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Drums_HihatO.xpf b/data/presets/TripleOscillator/Drums_HihatO.xpf
new file mode 100644
index 0000000..19258c5
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_HihatO.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Hihat Open" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="6" stphdetun2="0" wavetype1="6" wavetype2="6" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.96" ftype="1" fcut="4480" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.321" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0.07" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.677" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0.519" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Drums_Kick.xpf b/data/presets/TripleOscillator/Drums_Kick.xpf
new file mode 100644
index 0000000..d18e0ed
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_Kick.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Kick" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="6" stphdetun2="0" wavetype1="6" wavetype2="6" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="10" ftype="11" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.248" lamt="0" syncmode="0" latt="0" rel="0.04" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0.02" userwavefile="" dec="0.187" lamt="0" syncmode="0" latt="0" rel="0" amt="0.2" x100="0" att="0" lpdel="0" hold="0.05" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Drums_Snare.xpf b/data/presets/TripleOscillator/Drums_Snare.xpf
new file mode 100644
index 0000000..50731bf
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_Snare.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Snare" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="6" stphdetun2="0" wavetype1="6" wavetype2="6" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="10" ftype="10" fcut="200" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.166" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.062" lamt="0" syncmode="0" latt="0" rel="0.198" amt="0.28" x100="0" att="0" lpdel="0" hold="0.034" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="1"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Dull-Bell-Arp.xpf b/data/presets/TripleOscillator/Dull-Bell-Arp.xpf
deleted file mode 100644
index 790484a..0000000
--- a/data/presets/TripleOscillator/Dull-Bell-Arp.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="73" name="Dull Bell Arp" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="0" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="0" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="1" stphdetun0="0" pan0="0" modalgo2="1" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="146" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="0" coarse0="0" />
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.24" latt="0" sus="0.584" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.207" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="2" chord="0" arpgate="100" arp="6" arptime="100" arpdir="4" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/DullBell.xpf b/data/presets/TripleOscillator/DullBell.xpf
new file mode 100644
index 0000000..549689e
--- /dev/null
+++ b/data/presets/TripleOscillator/DullBell.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Dull Bell" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="55">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="12" coarse2="-12" finel0="0" finel1="0" modalgo1="0" modalgo2="0" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="86" wavetype0="1" stphdetun2="57" wavetype1="3" wavetype2="4" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100"/>
+ </instrument>
+ <eldata fres="0.01" ftype="6" fcut="827" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.293" pdel="0" userwavefile="" dec="0.379" lamt="0" syncmode="0" latt="0" rel="0.295" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.221" lamt="0" syncmode="0" latt="0" rel="0" amt="0.41" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/E-Organ.xpf b/data/presets/TripleOscillator/E-Organ.xpf
index f42320e..b04ba01 100644
--- a/data/presets/TripleOscillator/E-Organ.xpf
+++ b/data/presets/TripleOscillator/E-Organ.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="E-Organ" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="62" vol="19" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="146" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="11" coarse0="-7" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="1" modalgo2="1" finel2="-18" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="125" wavetype0="0" stphdetun2="59" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="265" vol2="100" />
+ <instrumenttracksettings muted="0" type="0" name="E-Organ">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="62" vol="19">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="146" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="0" finer2="11" coarse0="-7" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="1" finel2="-18" modalgo2="1" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="125" wavetype0="0" stphdetun2="59" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="265" vol2="100"/>
</instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.394" lamt="0" syncmode="0" latt="0" rel="0.215" sus="0" amt="1" x100="0" att="0.079" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0.394" lamt="0" syncmode="0" latt="0" rel="0.215" sus="0" amt="1" x100="0" att="0.079" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="3" chord-enabled="1" />
- <arpeggiator arptime="150" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="3" chord-enabled="1"/>
+ <arpeggiator arptime="150" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/TripleOscillator/E-Organ2.xpf b/data/presets/TripleOscillator/E-Organ2.xpf
index 469646b..4ef8e1a 100644
--- a/data/presets/TripleOscillator/E-Organ2.xpf
+++ b/data/presets/TripleOscillator/E-Organ2.xpf
@@ -1,23 +1,27 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="E-Organ 2" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="36" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="74" userwavefile0="" finer0="28" userwavefile1="" finer1="6" userwavefile2="" finer2="0" coarse0="0" coarse1="24" coarse2="12" finel0="-28" finel1="-6" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="184" pan2="0" stphdetun1="183" wavetype0="4" stphdetun2="0" wavetype1="0" wavetype2="0" vol0="100" vol1="62" phoffset0="180" phoffset1="49" vol2="112" />
+ <instrumenttracksettings muted="0" type="0" name="E-Organ 2">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="36">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="74" userwavefile0="" userwavefile1="" finer0="28" userwavefile2="" finer1="6" finer2="0" coarse0="0" coarse1="24" coarse2="12" finel0="-28" finel1="-6" modalgo1="2" finel2="0" modalgo2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="184" pan2="0" stphdetun1="183" wavetype0="4" stphdetun2="0" wavetype1="0" wavetype2="0" vol0="100" vol1="62" phoffset0="180" phoffset1="49" vol2="112"/>
</instrument>
- <eldata fres="0.42" ftype="0" fcut="770" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.212" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0.012" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.202" lamt="0.4" syncmode="0" latt="0" rel="0.358" sus="0.906" amt="0" x100="1" att="0.123" lpdel="0.027" hold="0" lshp="0" lspd="0.3466" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.42" ftype="0" fcut="770" fwet="1">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0" lamt="0" syncmode="0" latt="0" rel="0.212" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0.012" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.202" lamt="0.4" syncmode="0" latt="0" rel="0.358" sus="0.906" amt="0" x100="1" att="0.123" lpdel="0.027" hold="0" lshp="0" lspd="0.3466" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="2" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="1" enabled="0" >
- <effect key="AAAACQAAAAACAAAACgAAAABmAEMAKgAgAFAAbABhAHQAZQAyAHgAMgAgAC0AIABWAGUAcgBzAGEAdABpAGwAZQAgAHAAbABhAHQAZQAgAHIAZQB2AGUAcgBiACwAIABzAHQAZQByAGUAbwAgAGkAbgBwAHUAdABzAAAACwAAAAACAAAAEABQAGwAYQB0AGUAMgB4ADIAAAAOAGMAYQBwAHMALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port02="0.99897" port03="0.749" port04="0.55972" port05="0.54" ports="4" />
+ <chordcreator chord="0" chordrange="2" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="1" enabled="0">
+ <effect key="AAAACQAAAAACAAAACgAAAABmAEMAKgAgAFAAbABhAHQAZQAyAHgAMgAgAC0AIABWAGUAcgBzAGEAdABpAGwAZQAgAHAAbABhAHQAZQAgAHIAZQB2AGUAcgBiACwAIABzAHQAZQByAGUAbwAgAGkAbgBwAHUAdABzAAAACwAAAAACAAAAEABQAGwAYQB0AGUAMgB4ADIAAAAOAGMAYQBwAHMALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols port02="0.99897" port03="0.749" port04="0.55972" port05="0.54" ports="4"/>
+ <key>
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
</effect>
</fxchain>
</instrumenttrack>
diff --git a/data/presets/TripleOscillator/ElectricOboe.xpf b/data/presets/TripleOscillator/ElectricOboe.xpf
new file mode 100644
index 0000000..a68b66b
--- /dev/null
+++ b/data/presets/TripleOscillator/ElectricOboe.xpf
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Electric Oboe" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="45" vol="125">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="0" modalgo2="3" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="4" stphdetun2="0" wavetype1="1" wavetype2="0" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.5" ftype="11" fcut="1148" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.842" lamt="0" syncmode="0" latt="0" rel="0.14" amt="1" x100="0" att="0.066" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="1.057" lamt="0" syncmode="0" latt="0" rel="0.06" amt="0.995" x100="0" att="0.774" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.749"/>
+ <port04 data="0.0005"/>
+ <port05 data="0.3775"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="0" ports="20">
+ <port01 link="1" data="-48"/>
+ <port02 link="1" data="-48"/>
+ <port03 link="1" data="-48"/>
+ <port04 link="1" data="-48"/>
+ <port05 link="1" data="-48"/>
+ <port06 link="1" data="0"/>
+ <port07 link="0" data="7.02"/>
+ <port08 link="0" data="-2.7"/>
+ <port09 link="0" data="8.82"/>
+ <port010 link="0" data="-3.96"/>
+ <port11 data="-48"/>
+ <port12 data="-48"/>
+ <port13 data="-48"/>
+ <port14 data="-48"/>
+ <port15 data="-48"/>
+ <port16 data="0"/>
+ <port17 data="-3.42"/>
+ <port18 data="7.92"/>
+ <port19 data="-2.34"/>
+ <port110 data="7.38"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Erazzor.xpf b/data/presets/TripleOscillator/Erazzor.xpf
index 4d3c5ce..5619b1e 100644
--- a/data/presets/TripleOscillator/Erazzor.xpf
+++ b/data/presets/TripleOscillator/Erazzor.xpf
@@ -1,68 +1,120 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc2" type="instrumenttracksettings" >
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Erazzor" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="-2" userwavefile1="" finer1="2" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-2" modalgo1="1" modalgo2="0" finel2="-2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33" />
+ <instrumenttracksettings muted="0" type="0" name="Erazzor" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" userwavefile1="" finer0="-2" userwavefile2="" finer1="2" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-2" modalgo1="1" finel2="-2" modalgo2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
</instrument>
- <eldata fres="1.81" ftype="7" fcut="1260" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.14" sus="0.5" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.23" lamt="0.66" syncmode="0" latt="0" rel="0.1" sus="0.85" amt="0" x100="0" att="0.33" lpdel="0" hold="0" lshp="0" lspd="0.111" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="1.81" ftype="7" fcut="1260" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.14" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.15" userwavefile="" pdel="0" dec="0.23" lamt="0.66" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0.33" lpdel="0" hold="0" lshp="0" lspd="0.111" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inports="" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" outputprogram="1" readable="1" />
- <fxchain numofeffects="7" enabled="1" >
- <effect autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="72" port01="72" link="1" ports="2" port01link="1" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="1"/>
+ <fxchain numofeffects="7" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="2">
+ <port01 link="1" data="72"/>
+ <port11 data="72"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="Clip" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Clip" name="plugin"/>
</key>
</effect>
- <effect autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="-10.08" port01="-10.08" link="1" ports="2" port01link="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="2">
+ <port01 link="1" data="-10.08"/>
+ <port11 data="-10.08"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="Clip" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Clip" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="0.5" on="1" >
- <ladspacontrols port11="-30.06" port12="0" port13="0" port02link="1" port14="0" port06link="1" port15="0" port16="0" ports="20" port17="0" port18="-16.02" port19="-32.04" port110="-48.06" port03link="1" port010="-48.06" port07link="1" port01="-30.06" port02="0" port04link="1" port08link="1" port03="0" port04="0" port05="0" port06="0" port07="0" link="1" port08="-16.02" port09="-32.04" port01link="1" port05link="1" port010link="1" port09link="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="0.5" on="1">
+ <ladspacontrols link="1" ports="20">
+ <port01 link="1" data="-30.06"/>
+ <port02 link="1" data="0"/>
+ <port03 link="1" data="0"/>
+ <port04 link="1" data="0"/>
+ <port05 link="1" data="0"/>
+ <port06 link="1" data="0"/>
+ <port07 link="1" data="0"/>
+ <port08 link="1" data="-16.02"/>
+ <port09 link="1" data="-32.04"/>
+ <port010 link="1" data="-48"/>
+ <port11 data="-30.06"/>
+ <port12 data="0"/>
+ <port13 data="0"/>
+ <port14 data="0"/>
+ <port15 data="0"/>
+ <port16 data="0"/>
+ <port17 data="0"/>
+ <port18 data="-16.02"/>
+ <port19 data="-32.04"/>
+ <port110 data="-48"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="Eq" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Eq" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="0.25" port01="0.25" port12="0.75" port02="0.75" port13="0.392699" port03="0.392699" port14="0.74925" port04="0.74925" port04link="1" port02link="1" port03link="1" link="1" ports="8" port01link="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="8">
+ <port01 link="1" data="0.25"/>
+ <port02 link="1" data="0.75"/>
+ <port03 link="1" data="0.392699"/>
+ <port04 link="1" data="0.74925"/>
+ <port11 data="0.25"/>
+ <port12 data="0.75"/>
+ <port13 data="0.392699"/>
+ <port14 data="0.74925"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="PhaserII" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="PhaserII" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port02="0.50197" port03="0.749" port04="0.249875" port05="0.25" ports="4" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.50197"/>
+ <port03 data="0.749"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="Plate2x2" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="-0.5" on="1" >
- <ladspacontrols port00="320" port01="50" port02="430" port03="50" port04="0" port05="0" port06="-70" port07="1" port08="0" port09="1" ports="10" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="-0.5" on="1">
+ <ladspacontrols ports="10">
+ <port00 data="320"/>
+ <port01 data="50"/>
+ <port02 data="430"/>
+ <port03 data="50"/>
+ <port04 data="0"/>
+ <port05 data="0"/>
+ <port06 data="-70"/>
+ <port07 data="1"/>
+ <port08 data="0"/>
+ <port09 data="1"/>
+ </ladspacontrols>
<key>
- <attribute value="tap_echo.so" name="file" />
- <attribute value="tap_stereo_echo" name="plugin" />
+ <attribute value="tap_echo.so" name="file"/>
+ <attribute value="tap_stereo_echo" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="stereomatrix" wet="1" on="1" >
- <stereomatrixcontrols l-l="0.66" l-r="0" r-l="0.33" r-r="0.5" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="stereomatrix" wet="1" on="1">
+ <stereomatrixcontrols l-l="0.66" l-r="0" r-l="0.33" r-r="0.5"/>
<key/>
</effect>
</fxchain>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Fat-FMish-Bells.xpf b/data/presets/TripleOscillator/Fat-FMish-Bells.xpf
deleted file mode 100644
index 0c9b4b4..0000000
--- a/data/presets/TripleOscillator/Fat-FMish-Bells.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="5" vol="50" name="Fat FMish Bells" basetone="9" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="0" userwavefile2="samples/shapes/smooth_inv_saw.ogg" wavetype2="2" coarse2="12" vol0="100" vol1="100" finel0="0" vol2="127" finel1="-16" finel2="0" modalgo1="2" stphdetun0="121" pan0="0" modalgo2="0" stphdetun1="259" pan1="0" stphdetun2="92" pan2="0" phoffset0="0" phoffset1="266" phoffset2="80" finer0="0" finer1="13" finer2="0" userwavefile0="" wavetype0="2" coarse0="0" />
- <eldata fres="1.26" ftype="7" fcut="1754" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.329" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.598" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0.82" rel="0.016" latt="0" sus="0.999" lspd="0.2918" att="0" pdel="0" lamt="0.63" dec="0.137" x100="0" lshp="1" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="2" chord="0" arpgate="100" arp="0" arptime="158" arpdir="2" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Fat-TB303-Arp.xpf b/data/presets/TripleOscillator/Fat-TB303-Arp.xpf
deleted file mode 100644
index 570fab5..0000000
--- a/data/presets/TripleOscillator/Fat-TB303-Arp.xpf
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060610" type="instrumenttracksettings" version="1.0" >
- <head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="375" y="236" surpos="134219776" fxch="0" height="436" baseoct="6" vol="100" name="Fat TB303-Arp" basetone="4" tab="1" visible="1" >
- <tripleoscillator userwavefile1="" wavetype1="0" coarse1="-24" userwavefile2="" wavetype2="2" coarse2="-24" vol0="72" vol1="64" finel0="0" vol2="52" finel1="0" finel2="0" modalgo1="0" stphdetun0="84" pan0="10" modalgo2="1" stphdetun1="263" pan1="0" stphdetun2="0" pan2="6" phoffset0="183" phoffset1="106" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="" wavetype0="5" coarse0="-12" />
- <eldata fres="7.93" ftype="0" fcut="480" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.291" ctlenvamt="0" latt="0" sus="0.542" lspd="0.1" att="0.078" pdel="0" lamt="0" dec="0.058" userwavefile="" x100="0" lshp="0" hold="0.217" />
- <elcut lfosyncmode="1" lpdel="0" amt="1" rel="0.357" ctlenvamt="1" latt="0" sus="0" lspd="0.1714" att="0.111" pdel="0" lamt="0.98" dec="0.294" userwavefile="" x100="0" lshp="0" hold="0.296" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="2" arpdisabled="0" chord="0" chorddisabled="1" arpgate="55" arp="0" arpsyncmode="5" arptime="214" arpdir="1" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- </instrumenttrack>
- </instrumenttracksettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Fat.xpf b/data/presets/TripleOscillator/Fat.xpf
deleted file mode 100644
index c15f67f..0000000
--- a/data/presets/TripleOscillator/Fat.xpf
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.0" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="Fat" basetone="9" tab="0" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="2" coarse2="0" vol0="49" vol1="56" finel0="0" vol2="100" finel1="0" finel2="-14" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="3" stphdetun1="109" pan1="0" stphdetun2="50" pan2="0" phoffset0="0" phoffset1="271" phoffset2="0" finer0="0" finer1="0" finer2="13" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="0" />
- <eldata fres="0.88" ftype="6" fcut="686" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.199" ctlenvamt="0" latt="0" sus="0" lspd="0.0917" att="0" pdel="0" lamt="0" dec="0.297" x100="0" lshp="0" hold="0" />
- <elcut lpdel="0" amt="0.33" rel="0" ctlenvamt="0" latt="0" sus="0.999" lspd="0.767" att="0" pdel="0" lamt="0.47" dec="0.223" x100="0" lshp="1" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.5" lspd="0.01" att="0" pdel="0" lamt="-0.00599995" dec="0.5" x100="0" lshp="1" hold="0" />
- </eldata>
- <arpandchords chordrange="1" arprange="2" chord="0" arpgate="142" arp="0" arptime="179" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/FatCheese.xpf b/data/presets/TripleOscillator/FatCheese.xpf
index 5234639..748b4df 100644
--- a/data/presets/TripleOscillator/FatCheese.xpf
+++ b/data/presets/TripleOscillator/FatCheese.xpf
@@ -1,16 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.0" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="100" name="FatCheese" basetone="9" tab="2" >
- <tripleoscillator userwavefile1="" wavetype1="5" coarse1="0" userwavefile2="" wavetype2="4" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="-25" modalgo1="2" stphdetun0="102" pan0="0" modalgo2="3" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="295" phoffset1="267" phoffset2="169" finer0="0" finer1="0" finer2="30" userwavefile0="" wavetype0="2" coarse0="-12" />
- <eldata fres="0.57" ftype="6" fcut="3354" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.18" ctlenvamt="0" latt="0" sus="0" lspd="0.1553" att="0.038" pdel="0" lamt="0" dec="0.375" x100="0" lshp="0" hold="0" />
- <elcut lpdel="0" amt="0.58" rel="0" ctlenvamt="1" latt="0" sus="0.999" lspd="0.53" att="0" pdel="0" lamt="0.515" dec="0.158" x100="0" lshp="0" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.5" lspd="0.4849" att="0" pdel="0" lamt="0.23" dec="0.5" x100="0" lshp="1" hold="0.5" />
+ <instrumenttracksettings muted="0" type="0" name="FatCheese" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="55">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="169" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="30" coarse0="-12" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="3" finel2="-25" pan0="0" modalgo3="2" pan1="0" stphdetun0="102" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="5" wavetype2="4" vol0="100" vol1="100" phoffset0="295" phoffset1="267" vol2="100"/>
+ </instrument>
+ <eldata fres="0.57" ftype="6" fcut="3354" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.375" lamt="0" syncmode="0" latt="0" rel="0.18" amt="1" x100="0" att="0.038" lpdel="0" hold="0" lshp="0" lspd="0.1553" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.158" lamt="0.515" syncmode="0" latt="0" rel="0" amt="0.58" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.53" ctlenvamt="1" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0.23" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="1" lspd="0.4849" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="3" arpdisabled="0" chord="0" chorddisabled="1" arpgate="73" arp="0" arptime="89" arpdir="3" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="90" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="4" arpdir="1" arpgate="60"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/FatPMArp.xpf b/data/presets/TripleOscillator/FatPMArp.xpf
new file mode 100644
index 0000000..ad11a89
--- /dev/null
+++ b/data/presets/TripleOscillator/FatPMArp.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Fat Analog Arp" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="29">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="80" userwavefile0="" finer0="0" userwavefile1="" finer1="13" userwavefile2="samples/shapes/smooth_inv_saw.ogg" finer2="0" coarse0="0" coarse1="0" coarse2="12" finel0="0" finel1="-16" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="121" pan2="0" stphdetun1="259" wavetype0="2" stphdetun2="92" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="266" vol2="33"/>
+ </instrument>
+ <eldata fres="1.26" ftype="7" fcut="1754" fwet="1">
+ <elvol lspd_denominator="1" sustain="1" pdel="0" userwavefile="" dec="0.598" lamt="0" syncmode="0" latt="0" rel="0.259" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" sustain="0.001" pdel="0" userwavefile="" dec="0.137" lamt="0.63" syncmode="0" latt="0" rel="0.016" amt="0.82" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.2918" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="143" arprange="2" arptime_denominator="3" syncmode="8" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/FatTB303Arp.xpf b/data/presets/TripleOscillator/FatTB303Arp.xpf
new file mode 100644
index 0000000..33bb2d8
--- /dev/null
+++ b/data/presets/TripleOscillator/FatTB303Arp.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Fat TB303 Arp" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="28.7">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="-12" coarse1="-24" coarse2="-24" finel0="0" finel1="0" modalgo1="0" modalgo2="1" finel2="0" pan0="10" modalgo3="2" pan1="0" stphdetun0="84" pan2="6" stphdetun1="263" wavetype0="5" stphdetun2="0" wavetype1="0" wavetype2="2" vol0="72" vol1="64" phoffset0="183" phoffset1="106" vol2="52"/>
+ </instrument>
+ <eldata fres="7.93" ftype="0" fcut="480" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.458" pdel="0" userwavefile="" dec="0.058" lamt="0" syncmode="0" latt="0" rel="0.291" amt="1" x100="0" att="0.078" lpdel="0" hold="0.217" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.294" lamt="1" syncmode="0" latt="0" rel="0.357" amt="1" x100="0" att="0.111" lpdel="0" hold="0.296" lshp="0" lspd="0.1714" ctlenvamt="1" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="214" arprange="2" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="4" arpdir="0" arpgate="55"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/FutureBass.xpf b/data/presets/TripleOscillator/FutureBass.xpf
index 9c4b432..84f4541 100644
--- a/data/presets/TripleOscillator/FutureBass.xpf
+++ b/data/presets/TripleOscillator/FutureBass.xpf
@@ -1,17 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.1-cvs20051215" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="7" vol="57" name="FutureBass" basetone="0" tab="1" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="5" coarse1="-12" userwavefile2="samples/empty.wav" wavetype2="4" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="100" finel1="-12" finel2="-27" modalgo1="2" stphdetun0="71" pan0="0" modalgo2="2" stphdetun1="99" pan1="0" stphdetun2="151" pan2="0" phoffset0="0" phoffset1="260" phoffset2="44" finer0="0" finer1="15" finer2="16" userwavefile0="samples/empty.wav" wavetype0="0" coarse0="0" />
- <eldata fres="3" ftype="0" fcut="1032" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="0.48" rel="0.414" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.132" pdel="0" lamt="0" dec="0.261" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0" ctlenvamt="0" latt="0" sus="0.998" lspd="1" att="0" pdel="0" lamt="0.66" dec="0.134" x100="1" lshp="2" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings muted="0" type="0" name="FutureBass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="33">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="44" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="15" userwavefile2="samples/empty.wav" finer2="16" coarse0="0" coarse1="-12" coarse2="0" finel0="0" finel1="-12" modalgo1="2" modalgo2="2" finel2="-27" pan0="0" modalgo3="2" pan1="0" stphdetun0="71" pan2="0" stphdetun1="99" wavetype0="0" stphdetun2="151" wavetype1="5" wavetype2="4" vol0="33" vol1="33" phoffset0="0" phoffset1="260" vol2="33"/>
+ </instrument>
+ <eldata fres="3" ftype="0" fcut="1032" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.261" lamt="0" syncmode="0" latt="0" rel="0.256" amt="1" x100="0" att="0.085" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.002" pdel="0" userwavefile="" dec="0.134" lamt="0.48" syncmode="0" latt="0" rel="0" amt="0" x100="1" att="0" lpdel="0" hold="0" lshp="2" lspd="1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="81" arp="0" arpsyncmode="0" arptime="210" arpdir="1" />
- <midi inputchannel="0" outputchannel="0" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="210" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="81"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/FuzzyAnalogBass.xpf b/data/presets/TripleOscillator/FuzzyAnalogBass.xpf
new file mode 100644
index 0000000..78b176d
--- /dev/null
+++ b/data/presets/TripleOscillator/FuzzyAnalogBass.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Fuzzy Analog Bass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="44">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="-12" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="247" pan2="0" stphdetun1="0" wavetype0="5" stphdetun2="120" wavetype1="2" wavetype2="4" vol0="100" vol1="100" phoffset0="101" phoffset1="0" vol2="100"/>
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="2839" fwet="1">
+ <elvol lspd_denominator="1" sustain="0.296" pdel="0" userwavefile="" dec="0.281" lamt="0" syncmode="0" latt="0" rel="0.239" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" sustain="0" pdel="0" userwavefile="" dec="0.165" lamt="0.83" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.7263" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="1" ctlenvamt="0" lspd_numerator="1"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Garfunkel.xpf b/data/presets/TripleOscillator/Garfunkel.xpf
new file mode 100644
index 0000000..d2f66d1
--- /dev/null
+++ b/data/presets/TripleOscillator/Garfunkel.xpf
@@ -0,0 +1,71 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Garfunkel" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="0" finel1="0" modalgo1="0" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="1" stphdetun2="0" wavetype1="1" wavetype2="0" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="6.1" ftype="14" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.35" lamt="0" syncmode="0" latt="0" rel="0.16" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.3" pdel="0" userwavefile="" dec="0.59" lamt="0" syncmode="0" latt="0" rel="0.73" amt="0.34" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="4" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="1">
+ <port00 data="2"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="cmt" name="file"/>
+ <attribute value="amp_stereo" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-16"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-16"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.3745"/>
+ <port04 data="0.169915"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port01 link="1" data="2.12"/>
+ <port02 link="1" data="0.313425"/>
+ <port03 link="1" data="0.9999"/>
+ <port11 data="2.12"/>
+ <port12 data="0.313425"/>
+ <port13 data="0.9999"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="AmpIII" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/GhostBoy.xpf b/data/presets/TripleOscillator/GhostBoy.xpf
new file mode 100644
index 0000000..32f3396
--- /dev/null
+++ b/data/presets/TripleOscillator/GhostBoy.xpf
@@ -0,0 +1,80 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="GhostBoy" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="115">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="76" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="5" stphdetun2="0" wavetype1="3" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.62" ftype="6" fcut="6191" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.33" pdel="0" userwavefile="" dec="0.37" lamt="0" syncmode="0" latt="0" rel="0.067" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="1" syncmode="6" latt="0.157" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0048" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="25" arprange="4" arptime_denominator="4" syncmode="0" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="1"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="-1" inputchannel="1" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="127" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="1"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0.3745"/>
+ <port04 data="0.0005"/>
+ <port05 data="0.2675"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port04 data="149.85"/>
+ <port05 data="16"/>
+ <port06 data="8"/>
+ <port07 data="8"/>
+ <port08 data="0.305"/>
+ <port09 data="0.61"/>
+ <port010 data="2"/>
+ <port011 data="1"/>
+ <port012 data="1"/>
+ <port013 data="1"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="calf" name="file"/>
+ <attribute value="VintageDelay" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="0">
+ <ladspacontrols link="0" ports="20">
+ <port01 link="1" data="-42.66"/>
+ <port02 link="1" data="-30.42"/>
+ <port03 link="1" data="-11.16"/>
+ <port04 link="1" data="-9.9"/>
+ <port05 link="1" data="0"/>
+ <port06 link="1" data="0"/>
+ <port07 link="1" data="0"/>
+ <port08 link="0" data="2.16"/>
+ <port09 link="0" data="3.96"/>
+ <port010 link="0" data="-5.58"/>
+ <port11 data="-42.66"/>
+ <port12 data="-30.42"/>
+ <port13 data="-11.16"/>
+ <port14 data="-9.9"/>
+ <port15 data="0"/>
+ <port16 data="0"/>
+ <port17 data="0"/>
+ <port18 data="-3.96"/>
+ <port19 data="-3.24"/>
+ <port110 data="5.4"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Gong.xpf b/data/presets/TripleOscillator/Gong.xpf
deleted file mode 100644
index df28ca6..0000000
--- a/data/presets/TripleOscillator/Gong.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="132646936" muted="0" fxch="0" tbidx="0" baseoct="4" vol="100" name="Gong" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="0" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="0" coarse2="12" vol0="100" vol1="68" finel0="0" vol2="81" finel1="-18" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="0" stphdetun1="0" pan1="0" stphdetun2="104" pan2="0" phoffset0="0" phoffset1="307" phoffset2="304" finer0="0" finer1="13" finer2="0" userwavefile0="samples/empty.wav" wavetype0="0" coarse0="0" />
- <eldata fres="3" ftype="0" fcut="16000" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.437" x100="0" lshp="0" hold="0.114" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Harmonium.xpf b/data/presets/TripleOscillator/Harmonium.xpf
index 8ef8ae1..a903250 100644
--- a/data/presets/TripleOscillator/Harmonium.xpf
+++ b/data/presets/TripleOscillator/Harmonium.xpf
@@ -1,21 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Harmonium" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="11" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="0" modalgo2="1" finel2="-24" pan0="0" modalgo3="0" pan1="-36" stphdetun0="195" pan2="27" stphdetun1="90" wavetype0="1" stphdetun2="306" wavetype1="1" wavetype2="0" vol0="35" vol1="51" phoffset0="260" phoffset1="89" vol2="32" />
+ <instrumenttracksettings muted="0" type="0" name="Harmonium" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="59">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="11" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="0" modalgo2="1" finel2="-24" pan0="0" modalgo3="0" pan1="-36" stphdetun0="195" pan2="27" stphdetun1="90" wavetype0="1" stphdetun2="306" wavetype1="1" wavetype2="0" vol0="35" vol1="51" phoffset0="260" phoffset1="89" vol2="32"/>
</instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.27" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.265" amt="1" x100="0" att="0.062" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="1" sustain="0.735" pdel="0" userwavefile="" dec="0.27" lamt="0" syncmode="0" latt="0" rel="0.234" amt="1" x100="0" att="0.062" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="3" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="3" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Harp-of-a-Fairy.xpf b/data/presets/TripleOscillator/Harp-of-a-Fairy.xpf
index a124ebc..c248b9c 100644
--- a/data/presets/TripleOscillator/Harp-of-a-Fairy.xpf
+++ b/data/presets/TripleOscillator/Harp-of-a-Fairy.xpf
@@ -1,18 +1,19 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="Harp of a Fairy" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="1" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="0" coarse2="12" vol0="35" vol1="35" finel0="0" vol2="35" finel1="0" finel2="0" modalgo1="2" stphdetun0="195" pan0="0" modalgo2="2" stphdetun1="0" pan1="0" stphdetun2="261" pan2="0" phoffset0="0" phoffset1="89" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="0" coarse0="-12" />
- <eldata fres="2" ftype="1" fcut="1457" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.297" latt="0" sus="0.6" lspd="0.1" att="0.04" pdel="0" lamt="0" dec="0.15" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings>
+ <instrumenttrack muted="0" fxch="0" vol="59" name="Harp of a Fairy">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="0" finer2="0" coarse0="-12" coarse1="0" coarse2="12" finel0="0" finel1="0" modalgo1="2" finel2="0" modalgo2="2" pan0="0" pan1="0" stphdetun0="195" pan2="0" stphdetun1="0" stphdetun2="261" wavetype0="0" wavetype1="1" wavetype2="0" vol0="35" vol1="35" phoffset0="0" vol2="35" phoffset1="89"/>
+ <eldata fres="2" ftype="1" fcut="1457" fwet="0">
+ <elvol lpdel="0" amt="1" rel="0.297" latt="0" sus="0.6" lspd="0.1" att="0.04" pdel="0" lamt="0" dec="0.15" x100="0" lshp="0" hold="0"/>
+ <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
</eldata>
- <arpandchords chordrange="1" arprange="3" chord="0" arpgate="100" arp="8" arptime="78" arpdir="2" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator arptime="78" arprange="3" chord="0" chordrange="1" arp="8" arp-enabled="1" chord-enabled="1" arpdir="0" arpgate="100"/>
+ <chordcreator arptime="78" arprange="3" chord="0" chordrange="1" arp="8" arp-enabled="1" chord-enabled="1" arpdir="0" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/TripleOscillator/Harpsichord.xpf b/data/presets/TripleOscillator/Harpsichord.xpf
deleted file mode 100644
index 55bc14b..0000000
--- a/data/presets/TripleOscillator/Harpsichord.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="0" baseoct="4" vol="100" name="Harpsichord" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="4" coarse1="12" userwavefile2="samples/empty.wav" wavetype2="4" coarse2="-12" vol0="75" vol1="100" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="0" stphdetun0="0" pan0="0" modalgo2="0" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="0" />
- <eldata fres="0.5" ftype="0" fcut="9574" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.249" latt="0" sus="0.707" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.379" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/HiPad.xpf b/data/presets/TripleOscillator/HiPad.xpf
index 5d618d5..d61892e 100644
--- a/data/presets/TripleOscillator/HiPad.xpf
+++ b/data/presets/TripleOscillator/HiPad.xpf
@@ -1,18 +1,19 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="HiPad" basetone="9" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="0" userwavefile2="" wavetype2="2" coarse2="0" vol0="33" vol1="33" finel0="0" vol2="33" finel1="36" finel2="-36" modalgo1="2" stphdetun0="130" pan0="0" modalgo2="2" stphdetun1="261" pan1="33" stphdetun2="94" pan2="-33" phoffset0="0" phoffset1="244" phoffset2="87" finer0="0" finer1="36" finer2="-36" userwavefile0="" wavetype0="2" coarse0="0" />
- <eldata fres="0.89" ftype="1" fcut="1174" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.1" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings>
+ <instrumenttrack muted="0" fxch="0" vol="59" name="HiPad">
+ <tripleoscillator phoffset2="87" userwavefile0="" userwavefile1="" finer0="0" userwavefile2="" finer1="36" finer2="-36" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="36" modalgo1="2" finel2="-36" modalgo2="2" pan0="0" pan1="33" stphdetun0="130" pan2="-33" stphdetun1="261" stphdetun2="94" wavetype0="2" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" vol2="33" phoffset1="244"/>
+ <eldata fres="0.89" ftype="1" fcut="1174" fwet="1">
+ <elvol lpdel="0" amt="1" rel="0.1" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0"/>
+ <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="1000" arpdir="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator arptime="1000" arprange="1" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="100"/>
+ <chordcreator arptime="1000" arprange="1" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/TripleOscillator/HugeGrittyBass.xpf b/data/presets/TripleOscillator/HugeGrittyBass.xpf
new file mode 100644
index 0000000..ab752fb
--- /dev/null
+++ b/data/presets/TripleOscillator/HugeGrittyBass.xpf
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="HugeGrittyBass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="8" userwavefile1="" finer1="-4" userwavefile2="" finer2="0" coarse0="0" coarse1="-12" coarse2="-24" finel0="-8" finel1="4" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="0" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.5" ftype="4" fcut="561" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Jupiter.xpf b/data/presets/TripleOscillator/Jupiter.xpf
index 360bbdc..86b59aa 100644
--- a/data/presets/TripleOscillator/Jupiter.xpf
+++ b/data/presets/TripleOscillator/Jupiter.xpf
@@ -1,21 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Jupiter" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="20" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="80" userwavefile0="" finer0="0" userwavefile1="" finer1="13" userwavefile2="samples/shapes/smooth_inv_saw.ogg" finer2="0" coarse0="0" coarse1="0" coarse2="12" finel0="0" finel1="-16" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="121" pan2="0" stphdetun1="259" wavetype0="2" stphdetun2="92" wavetype1="2" wavetype2="3" vol0="100" vol1="100" phoffset0="0" phoffset1="266" vol2="63" />
+ <instrumenttracksettings muted="0" type="0" name="Jupiter" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="81" vol="20">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="80" userwavefile0="" finer0="0" userwavefile1="" finer1="13" userwavefile2="samples/shapes/smooth_inv_saw.ogg" finer2="0" coarse0="0" coarse1="0" coarse2="12" finel0="0" finel1="-16" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="121" pan2="0" stphdetun1="259" wavetype0="2" stphdetun2="92" wavetype1="2" wavetype2="3" vol0="100" vol1="100" phoffset0="0" phoffset1="266" vol2="63"/>
</instrument>
- <eldata fres="1.26" ftype="7" fcut="1754" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.598" lamt="0" syncmode="0" latt="0" rel="0.329" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.137" lamt="0.63" syncmode="0" latt="0" rel="0.016" sus="0.999" amt="0.82" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.2918" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="1.26" ftype="7" fcut="1754" fwet="1">
+ <elvol lspd_denominator="1" sustain="1" pdel="0" userwavefile="" dec="0.598" lamt="0" syncmode="0" latt="0" rel="0.329" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" sustain="0.001" pdel="0" userwavefile="" dec="0.137" lamt="0.63" syncmode="0" latt="0" rel="0.016" amt="0.82" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.2918" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="158" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="143" arprange="3" arptime_denominator="3" syncmode="8" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Kick.xpf b/data/presets/TripleOscillator/Kick.xpf
deleted file mode 100644
index d59d959..0000000
--- a/data/presets/TripleOscillator/Kick.xpf
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060405" type="instrumenttracksettings" version="1.0" >
- <head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="213" y="95" surpos="134219776" fxch="0" height="436" baseoct="6" vol="90" name="kick" basetone="9" tab="0" visible="1" >
- <tripleoscillator userwavefile1="" wavetype1="0" coarse1="-21" userwavefile2="" wavetype2="3" coarse2="-22" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="0" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="" wavetype0="0" coarse0="-13" >
- <journal entries="0" metadata="1" id="328444" curentry="0" />
- </tripleoscillator>
- <eldata fres="8.67" ftype="0" fcut="2080" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.155" ctlenvamt="0" latt="0" sus="0.638" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.172" userwavefile="" x100="0" lshp="0" hold="0" >
- <journal entries="0" metadata="1" id="848397" curentry="0" />
- </elvol>
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" >
- <journal entries="0" metadata="1" id="648990" curentry="0" />
- </elcut>
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" >
- <journal entries="0" metadata="1" id="656370" curentry="0" />
- </elres>
- <journal entries="0" metadata="1" id="689040" curentry="0" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" >
- <journal entries="0" metadata="1" id="273096" curentry="0" />
- </arpandchords>
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" >
- <journal entries="0" metadata="1" id="420173" curentry="0" />
- </midi>
- </instrumenttrack>
- </instrumenttracksettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Kick2.xpf b/data/presets/TripleOscillator/Kick2.xpf
deleted file mode 100644
index 2893c32..0000000
--- a/data/presets/TripleOscillator/Kick2.xpf
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060406" type="instrumenttracksettings" version="1.0" >
- <head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="213" y="95" surpos="134219776" fxch="0" height="436" baseoct="6" vol="100" name="Kick 2" basetone="9" tab="0" visible="1" >
- <tripleoscillator userwavefile1="" wavetype1="1" coarse1="-24" userwavefile2="" wavetype2="3" coarse2="-22" vol0="100" vol1="104" finel0="-16" vol2="0" finel1="0" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="2" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="75" phoffset1="85" phoffset2="0" finer0="16" finer1="0" finer2="0" userwavefile0="" wavetype0="0" coarse0="-13" >
- <journal entries="0" metadata="1" id="328444" curentry="0" />
- </tripleoscillator>
- <eldata fres="0.01" ftype="6" fcut="1120" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.117" ctlenvamt="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.172" userwavefile="" x100="0" lshp="0" hold="0" >
- <journal entries="0" metadata="1" id="848397" curentry="0" />
- </elvol>
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" >
- <journal entries="0" metadata="1" id="648990" curentry="0" />
- </elcut>
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" >
- <journal entries="0" metadata="1" id="656370" curentry="0" />
- </elres>
- <journal entries="0" metadata="1" id="689040" curentry="0" />
- </eldata>
- <arpandchords arpmode="0" chordrange="2" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" >
- <journal entries="0" metadata="1" id="273096" curentry="0" />
- </arpandchords>
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" >
- <journal entries="0" metadata="1" id="420173" curentry="0" />
- </midi>
- </instrumenttrack>
- </instrumenttracksettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/LFO-party.xpf b/data/presets/TripleOscillator/LFO-party.xpf
index a817cc8..f5d9b1b 100644
--- a/data/presets/TripleOscillator/LFO-party.xpf
+++ b/data/presets/TripleOscillator/LFO-party.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="LFO-party" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="89" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="10" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="12" coarse2="-12" finel0="0" finel1="-10" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="12" stphdetun0="0" pan2="-37" stphdetun1="0" wavetype0="2" stphdetun2="296" wavetype1="2" wavetype2="2" vol0="85" vol1="51" phoffset0="0" phoffset1="0" vol2="48" />
+ <instrumenttracksettings muted="0" type="0" name="LFO-party">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="59">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="89" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="10" finer2="0" coarse0="0" coarse1="12" coarse2="-12" finel0="0" finel1="-10" modalgo1="2" finel2="0" modalgo2="2" pan0="0" modalgo3="0" pan1="12" stphdetun0="0" pan2="-37" stphdetun1="0" wavetype0="2" stphdetun2="296" wavetype1="2" wavetype2="2" vol0="85" vol1="51" phoffset0="0" phoffset1="0" vol2="48"/>
</instrument>
- <eldata fres="0.21" ftype="6" fcut="1834" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.444" lamt="-0.16" syncmode="0" latt="0" rel="0.242" sus="0.238" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.3624" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.999" lamt="0.64" syncmode="0" latt="0" rel="0" sus="0.999" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.6011" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0.395" syncmode="0" latt="0" rel="0" sus="0.999" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.4752" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.21" ftype="6" fcut="1834" fwet="1">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0.444" lamt="-0.16" syncmode="0" latt="0" rel="0.242" sus="0.238" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.3624" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.999" lamt="0.64" syncmode="0" latt="0" rel="0" sus="0.999" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.6011" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="0.395" syncmode="0" latt="0" rel="0" sus="0.999" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.4752" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="8" arptime_numerator="1" arpdir="2" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="8" arptime_numerator="1" arpdir="2" arpgate="100"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/TripleOscillator/LovelyDream.xpf b/data/presets/TripleOscillator/LovelyDream.xpf
index f17412a..5896409 100644
--- a/data/presets/TripleOscillator/LovelyDream.xpf
+++ b/data/presets/TripleOscillator/LovelyDream.xpf
@@ -1,18 +1,19 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="2" baseoct="4" vol="100" name="Lovely Dream" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="0" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="0" coarse2="0" vol0="75" vol1="75" finel0="0" vol2="75" finel1="0" finel2="-18" modalgo1="1" stphdetun0="0" pan0="0" modalgo2="1" stphdetun1="125" pan1="0" stphdetun2="59" pan2="0" phoffset0="0" phoffset1="265" phoffset2="146" finer0="0" finer1="0" finer2="11" userwavefile0="samples/empty.wav" wavetype0="0" coarse0="-7" />
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.388" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.394" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings>
+ <instrumenttrack muted="0" fxch="0" vol="59" name="Lovely Dream">
+ <tripleoscillator phoffset2="146" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="0" finer2="11" coarse0="-7" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="1" finel2="-18" modalgo2="1" pan0="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="125" stphdetun2="59" wavetype0="0" wavetype1="0" wavetype2="0" vol0="75" vol1="75" phoffset0="0" vol2="75" phoffset1="265"/>
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol lpdel="0" amt="1" rel="0.388" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.394" x100="0" lshp="0" hold="0"/>
+ <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
</eldata>
- <arpandchords chordrange="1" arprange="3" chord="0" arpgate="100" arp="0" arptime="100" arpdir="3" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator arptime="100" arprange="3" chord="0" chordrange="1" arp="0" arp-enabled="1" chord-enabled="1" arpdir="1" arpgate="100"/>
+ <chordcreator arptime="100" arprange="3" chord="0" chordrange="1" arp="0" arp-enabled="1" chord-enabled="1" arpdir="1" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/TripleOscillator/MoogArpeggio.xpf b/data/presets/TripleOscillator/MoogArpeggio.xpf
index c5a2232..d2f280c 100644
--- a/data/presets/TripleOscillator/MoogArpeggio.xpf
+++ b/data/presets/TripleOscillator/MoogArpeggio.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Moog Arpeggio" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="76" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="4" stphdetun2="275" wavetype1="4" wavetype2="1" vol0="150" vol1="150" phoffset0="0" phoffset1="184" vol2="150" />
+ <instrumenttracksettings muted="0" type="0" name="Moog Arpeggio">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="59">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="76" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="0" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" finel2="0" modalgo2="2" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="4" stphdetun2="275" wavetype1="4" wavetype2="1" vol0="150" vol1="150" phoffset0="0" phoffset1="184" vol2="150"/>
</instrument>
- <eldata fres="0.14" ftype="6" fcut="2314" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.154" lamt="0" syncmode="0" latt="0" rel="0.187" sus="0.582" amt="1" x100="0" att="0.038" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="1" syncmode="0" latt="0" rel="0" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="1" lspd="0.6339" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="-0.005" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.14" ftype="6" fcut="2314" fwet="1">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0.154" lamt="0" syncmode="0" latt="0" rel="0.187" sus="0.582" amt="1" x100="0" att="0.038" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="1" syncmode="0" latt="0" rel="0" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="1" lspd="0.6339" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="-0.005" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="1" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="1" arpgate="100"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/TripleOscillator/MoveYourBody.xpf b/data/presets/TripleOscillator/MoveYourBody.xpf
index 16e9dd9..fb67237 100644
--- a/data/presets/TripleOscillator/MoveYourBody.xpf
+++ b/data/presets/TripleOscillator/MoveYourBody.xpf
@@ -1,17 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.2-cvs20051228" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="160" name="Move your body" basetone="9" tab="1" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="0" userwavefile2="" wavetype2="2" coarse2="-12" vol0="33" vol1="33" finel0="0" vol2="33" finel1="-28" finel2="12" modalgo1="2" stphdetun0="130" pan0="0" modalgo2="2" stphdetun1="261" pan1="33" stphdetun2="94" pan2="-33" phoffset0="0" phoffset1="244" phoffset2="87" finer0="0" finer1="32" finer2="-16" userwavefile0="" wavetype0="2" coarse0="0" />
- <eldata fres="1.64" ftype="0" fcut="8003" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.117" ctlenvamt="0" latt="0" sus="0.77" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.23" userwavefile="" x100="0" lshp="0" hold="0.058" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0.499" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0.499" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings muted="0" type="0" name="Move your body" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="94">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="87" userwavefile0="" finer0="0" userwavefile1="" finer1="32" userwavefile2="" finer2="-16" coarse0="0" coarse1="0" coarse2="-12" finel0="0" finel1="-28" modalgo1="2" modalgo2="2" finel2="12" pan0="0" modalgo3="2" pan1="33" stphdetun0="130" pan2="-33" stphdetun1="261" wavetype0="2" stphdetun2="94" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="244" vol2="33"/>
+ </instrument>
+ <eldata fres="0.64" ftype="0" fcut="8003" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.23" pdel="0" userwavefile="" dec="0.159" lamt="0" syncmode="0" latt="0" rel="0.117" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0.499" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0.499" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="2" arprange="3" arpdisabled="0" chord="0" chorddisabled="0" arpgate="1" arp="0" arpsyncmode="6" arptime="107" arpdir="1" />
- <midi inputchannel="0" outputchannel="0" receive="1" send="0" inports="80:0 CS46XX:CS46XX" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="2" chord-enabled="0"/>
+ <arpeggiator arptime="107" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="4" arpdir="0" arpgate="8"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/OldComputerGames.xpf b/data/presets/TripleOscillator/OldComputerGames.xpf
index 18a21d4..674bef6 100644
--- a/data/presets/TripleOscillator/OldComputerGames.xpf
+++ b/data/presets/TripleOscillator/OldComputerGames.xpf
@@ -1,34 +1,97 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Old Computer Games" >
- <instrumenttrack pan="-7" fxch="0" pitch="0" basenote="57" vol="86" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="-4" userwavefile1="" finer1="2" userwavefile2="" finer2="-2" coarse0="0" coarse1="0" coarse2="0" finel0="4" finel1="-2" modalgo1="2" modalgo2="0" finel2="2" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="3" wavetype2="2" vol0="33" vol1="30" phoffset0="0" phoffset1="0" vol2="33" />
+ <instrumenttracksettings muted="0" type="0" name="Old Computer Games" solo="0">
+ <instrumenttrack pan="-7" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="30">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="-4" userwavefile1="" finer1="2" userwavefile2="" finer2="-2" coarse0="0" coarse1="0" coarse2="0" finel0="4" finel1="-2" modalgo1="2" modalgo2="0" finel2="2" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="3" wavetype2="2" vol0="33" vol1="30" phoffset0="0" phoffset1="0" vol2="33"/>
</instrument>
- <eldata fres="1.01" ftype="0" fcut="5320" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.4" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.48" lamt="0" syncmode="0" latt="0" rel="0" sus="1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="1.01" ftype="0" fcut="2233" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.788" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.48" lamt="0" syncmode="0" latt="0" rel="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="2" chord-enabled="1" />
- <arpeggiator arptime="105" arprange="1" arptime_denominator="4" syncmode="0" arpmode="2" arp-enabled="1" arp="3" arptime_numerator="4" arpdir="0" arpgate="34" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="4" enabled="1" >
- <effect key="AAAACQAAAAACAAAACgAAAABGAEMAKgAgAFQAbwBuAGUAUwB0AGEAYwBrACAALQAgAFQAbwBuAGUAIABzAHQAYQBjAGsAIABlAG0AdQBsAGEAdABpAG8AbgAAAAsAAAAAAgAAABIAVABvAG4AZQBTAHQAYQBjAGsAAAAOAGMAYQBwAHMALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="0" port01="0" port12="0.14" port02="0.14" port13="0.5" port03="0.5" port14="0.5" port04="0.5" port04link="1" port02link="1" port03link="1" link="1" ports="8" port01link="1" />
+ <chordcreator chord="0" chordrange="2" chord-enabled="0"/>
+ <arpeggiator arptime="105" arprange="1" arptime_denominator="4" syncmode="0" arpmode="2" arp-enabled="1" arp="3" arptime_numerator="4" arpdir="0" arpgate="26"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="5" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="8">
+ <port01 link="1" data="0"/>
+ <port02 link="1" data="0.14"/>
+ <port03 link="1" data="0.5"/>
+ <port04 link="1" data="0.5"/>
+ <port11 data="0"/>
+ <port12 data="0.14"/>
+ <port13 data="0.5"/>
+ <port14 data="0.5"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps.so" name="file"/>
+ <attribute value="ToneStack" name="plugin"/>
+ </key>
</effect>
- <effect key="AAAACQAAAAACAAAACgAAAAAeAFQAQQBQACAAUwB0AGUAcgBlAG8AIABFAGMAaABvAAAACwAAAAACAAAAHgB0AGEAcABfAHMAdABlAHIAZQBvAF8AZQBjAGgAbwAAABYAdABhAHAAXwBlAGMAaABvAC4AcwBv" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port00="640" port01="18" port02="640" port03="21" port04="-11.6" port05="-11.6" port06="2.4" port07="1" port08="0" port09="1" ports="10" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port00 data="640"/>
+ <port01 data="18"/>
+ <port02 data="640"/>
+ <port03 data="21"/>
+ <port04 data="-11.6"/>
+ <port05 data="-11.6"/>
+ <port06 data="2.4"/>
+ <port07 data="1"/>
+ <port08 data="0"/>
+ <port09 data="1"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="tap_echo.so" name="file"/>
+ <attribute value="tap_stereo_echo" name="plugin"/>
+ </key>
</effect>
- <effect key="AAAACQAAAAACAAAACgAAAAAcAFQAQQBQACAAQQB1AHQAbwBQAGEAbgBuAGUAcgAAAAsAAAAAAgAAABYAdABhAHAAXwBhAHUAdABvAHAAYQBuAAAAHAB0AGEAcABfAGEAdQB0AG8AcABhAG4ALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port00="0.2" port01="27" port02="10.125" ports="3" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="3">
+ <port00 data="0.2"/>
+ <port01 data="27"/>
+ <port02 data="10.125"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="tap_autopan.so" name="file"/>
+ <attribute value="tap_autopan" name="plugin"/>
+ </key>
</effect>
- <effect key="AAAACQAAAAACAAAACgAAAABmAEMAKgAgAFAAbABhAHQAZQAyAHgAMgAgAC0AIABWAGUAcgBzAGEAdABpAGwAZQAgAHAAbABhAHQAZQAgAHIAZQB2AGUAcgBiACwAIABzAHQAZQByAGUAbwAgAGkAbgBwAHUAdABzAAAACwAAAAACAAAAEABQAGwAYQB0AGUAMgB4ADIAAAAOAGMAYQBwAHMALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port02="0.27335" port03="0.749" port04="0" port05="0.4" ports="4" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.733075"/>
+ <port03 data="0.363265"/>
+ <port04 data="0.209895"/>
+ <port05 data="0.2825"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="-48"/>
+ <port03 data="-22.14"/>
+ <port04 data="-8.64"/>
+ <port05 data="0"/>
+ <port06 data="0"/>
+ <port07 data="0"/>
+ <port08 data="0"/>
+ <port09 data="0"/>
+ <port010 data="0"/>
+ <port011 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
</effect>
</fxchain>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/PM-FMstring.xpf b/data/presets/TripleOscillator/PM-FMstring.xpf
new file mode 100644
index 0000000..1433f3c
--- /dev/null
+++ b/data/presets/TripleOscillator/PM-FMstring.xpf
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="PM-FM String" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="70">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="6" userwavefile1="" finer1="0" userwavefile2="" finer2="12" coarse0="-24" coarse1="0" coarse2="-24" finel0="0" finel1="-4" modalgo1="0" modalgo2="4" finel2="-12" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="0" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="3"/>
+ </instrument>
+ <eldata fres="3.7" ftype="11" fcut="2801" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.65" pdel="0" userwavefile="" dec="2" lamt="0" syncmode="0" latt="0" rel="0.156" amt="1" x100="0" att="0.108" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.57" lamt="0" syncmode="0" latt="0" rel="0.72" amt="1" x100="0" att="0.176" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.75047"/>
+ <port03 data="0.35952"/>
+ <port04 data="0.81959"/>
+ <port05 data="0.8725"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/PMFMFTWbass.xpf b/data/presets/TripleOscillator/PMFMFTWbass.xpf
new file mode 100644
index 0000000..d81b556
--- /dev/null
+++ b/data/presets/TripleOscillator/PMFMFTWbass.xpf
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="PMFMFTW" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="50">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="1" coarse0="0" coarse1="-12" coarse2="0" finel0="0" finel1="0" modalgo1="0" modalgo2="4" finel2="-1" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="0" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="3"/>
+ </instrument>
+ <eldata fres="1.61" ftype="0" fcut="9223" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.813" pdel="0" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.99897"/>
+ <port03 data="0"/>
+ <port04 data="0.9995"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="20">
+ <port00 link="1" data="1"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="-1"/>
+ <port03 link="1" data="0"/>
+ <port04 link="1" data="0.12"/>
+ <port05 link="1" data="1"/>
+ <port06 link="1" data="-0.005"/>
+ <port07 link="1" data="-1"/>
+ <port08 link="1" data="0.1"/>
+ <port09 link="1" data="1"/>
+ <port10 data="1"/>
+ <port11 data="1"/>
+ <port12 data="-1"/>
+ <port13 data="0"/>
+ <port14 data="0.12"/>
+ <port15 data="1"/>
+ <port16 data="-0.005"/>
+ <port17 data="-1"/>
+ <port18 data="0.1"/>
+ <port19 data="1"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="harmonic_gen_1220" name="file"/>
+ <attribute value="harmonicGen" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/PMbass.xpf b/data/presets/TripleOscillator/PMbass.xpf
new file mode 100644
index 0000000..2e63d71
--- /dev/null
+++ b/data/presets/TripleOscillator/PMbass.xpf
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="SBass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="81" vol="200">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="-4" userwavefile2="" finer2="2" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="4" modalgo1="0" modalgo2="0" finel2="-2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="5" wavetype2="5" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.5" ftype="7" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.13" lamt="0" syncmode="0" latt="0" rel="0.05" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="8" latt="0.24" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.0161" ctlenvamt="0" lspd_numerator="3"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="3" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="3" lspd="0.0545" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="273" arprange="3" arptime_denominator="4" syncmode="5" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="1" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="5" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="stereomatrix" wet="0.38" on="1">
+ <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5"/>
+ <key/>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="0" ports="8">
+ <port01 link="0" data="0.1"/>
+ <port02 link="1" data="1"/>
+ <port03 link="1" data="1.5708"/>
+ <port04 link="1" data="0"/>
+ <port11 data="0.15"/>
+ <port12 data="1"/>
+ <port13 data="1.5708"/>
+ <port14 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="PhaserII" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="0.75" on="1">
+ <ladspacontrols link="1" ports="8">
+ <port01 link="1" data="0"/>
+ <port02 link="1" data="0.5"/>
+ <port03 link="1" data="0.5"/>
+ <port04 link="1" data="0.5"/>
+ <port11 data="0"/>
+ <port12 data="0.5"/>
+ <port13 data="0.5"/>
+ <port14 data="0.5"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="ToneStack" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="2">
+ <port01 link="1" data="14.04"/>
+ <port11 data="14.04"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Clip" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="0"/>
+ <key>
+ <attribute value="dc_remove_1207" name="file"/>
+ <attribute value="dcRemove" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/PercussiveBass.xpf b/data/presets/TripleOscillator/PercussiveBass.xpf
new file mode 100644
index 0000000..4afb1d0
--- /dev/null
+++ b/data/presets/TripleOscillator/PercussiveBass.xpf
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Percussive Bass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="76.5">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="-24" coarse1="24" coarse2="-12" finel0="0" finel1="0" modalgo1="2" modalgo2="4" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="2" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="4"/>
+ </instrument>
+ <eldata fres="0.54" ftype="0" fcut="219" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.132" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0.209" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.177" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="2" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="97" arprange="3" arptime_denominator="4" syncmode="6" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="86"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="14">
+ <port01 link="1" data="2.0275"/>
+ <port02 link="1" data="0.502475"/>
+ <port03 link="1" data="0"/>
+ <port04 link="1" data="0"/>
+ <port05 link="1" data="0"/>
+ <port06 link="1" data="10.9"/>
+ <port07 link="1" data="0.9999"/>
+ <port11 data="2.0275"/>
+ <port12 data="0.502475"/>
+ <port13 data="0"/>
+ <port14 data="0"/>
+ <port15 data="0"/>
+ <port16 data="10.9"/>
+ <port17 data="0.9999"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="AmpIV" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Play-some-rock.xpf b/data/presets/TripleOscillator/Play-some-rock.xpf
index 51f8ad2..2ee19a7 100644
--- a/data/presets/TripleOscillator/Play-some-rock.xpf
+++ b/data/presets/TripleOscillator/Play-some-rock.xpf
@@ -1,17 +1,36 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060222" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="135792616" fxch="0" baseoct="4" vol="100" name="Play some rock" basetone="9" tab="3" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="4" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="5" coarse2="-12" vol0="100" vol1="54" finel0="0" vol2="26" finel1="0" finel2="-14" modalgo1="0" stphdetun0="247" pan0="0" modalgo2="0" stphdetun1="109" pan1="0" stphdetun2="334" pan2="0" phoffset0="0" phoffset1="271" phoffset2="82" finer0="0" finer1="0" finer2="13" userwavefile0="samples/empty.wav" wavetype0="3" coarse0="0" />
- <eldata fres="0.33" ftype="0" fcut="0" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.277" ctlenvamt="0" latt="0" sus="0" lspd="0.0917" att="0" pdel="0" lamt="0" dec="0.296" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="1" rel="0.25" ctlenvamt="0" latt="0" sus="0.34" lspd="0.767" att="0" pdel="0" lamt="0" dec="0.665" userwavefile="" x100="0" lshp="1" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.01" att="0" pdel="0" lamt="-0.01" dec="0.499" userwavefile="" x100="0" lshp="1" hold="0" />
+ <instrumenttracksettings muted="0" type="0" name="Play some rock" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="25">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="82" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="13" coarse0="0" coarse1="0" coarse2="-12" finel0="0" finel1="0" modalgo1="0" modalgo2="0" finel2="-14" pan0="0" modalgo3="2" pan1="0" stphdetun0="247" pan2="0" stphdetun1="109" wavetype0="3" stphdetun2="334" wavetype1="4" wavetype2="5" vol0="100" vol1="54" phoffset0="0" phoffset1="271" vol2="26"/>
+ </instrument>
+ <eldata fres="0.33" ftype="0" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.296" lamt="0" syncmode="0" latt="0" rel="0.277" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.552" pdel="0" userwavefile="" dec="0.468" lamt="0" syncmode="0" latt="0" rel="0.25" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.767" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="-0.01" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="142" arp="78" arpsyncmode="0" arptime="205" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="205" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="78" arptime_numerator="4" arpdir="0" arpgate="142"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 link="1" data="-5"/>
+ <port01 link="1" data="1"/>
+ <port02 link="1" data="0"/>
+ <port10 data="-5"/>
+ <port11 data="1"/>
+ <port12 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="hard_limiter_1413" name="file"/>
+ <attribute value="hardLimiter" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/PluckArpeggio.xpf b/data/presets/TripleOscillator/PluckArpeggio.xpf
index 146b592..44ce26c 100644
--- a/data/presets/TripleOscillator/PluckArpeggio.xpf
+++ b/data/presets/TripleOscillator/PluckArpeggio.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Pluck Arpeggio" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="36" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="12" coarse1="0" coarse2="12" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="271" pan2="0" stphdetun1="299" wavetype0="5" stphdetun2="234" wavetype1="4" wavetype2="5" vol0="80" vol1="90" phoffset0="0" phoffset1="108" vol2="100" />
+ <instrumenttracksettings muted="0" type="0" name="Pluck Arpeggio">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="59">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="36" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="0" finer2="0" coarse0="12" coarse1="0" coarse2="12" finel0="0" finel1="0" modalgo1="2" finel2="0" modalgo2="2" pan0="0" modalgo3="0" pan1="0" stphdetun0="271" pan2="0" stphdetun1="299" wavetype0="5" stphdetun2="234" wavetype1="4" wavetype2="5" vol0="80" vol1="90" phoffset0="0" phoffset1="108" vol2="100"/>
</instrument>
- <eldata fres="0.95" ftype="1" fcut="1181" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.191" lamt="0" syncmode="0" latt="0" rel="0.177" sus="0.394" amt="1" x100="0" att="0.021" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="1" lspd="1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.95" ftype="1" fcut="1181" fwet="1">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0.191" lamt="0" syncmode="0" latt="0" rel="0.177" sus="0.394" amt="1" x100="0" att="0.021" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="1" lspd="1" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="1" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="1" arpgate="100"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/TripleOscillator/PluckBass.xpf b/data/presets/TripleOscillator/PluckBass.xpf
new file mode 100644
index 0000000..51c5de3
--- /dev/null
+++ b/data/presets/TripleOscillator/PluckBass.xpf
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="PluckBass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="81" vol="175">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="240" userwavefile0="" finer0="0" userwavefile1="" finer1="-2" userwavefile2="" finer2="2" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="2" modalgo1="0" modalgo2="0" finel2="-2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="1" wavetype2="0" vol0="33" vol1="33" phoffset0="0" phoffset1="120" vol2="33"/>
+ </instrument>
+ <eldata fres="1" ftype="7" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0.25" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.15" pdel="0" userwavefile="" dec="0.19" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="8">
+ <port01 link="1" data="0"/>
+ <port02 link="1" data="0.5"/>
+ <port03 link="1" data="0.5"/>
+ <port04 link="1" data="0.5"/>
+ <port11 data="0"/>
+ <port12 data="0.5"/>
+ <port13 data="0.5"/>
+ <port14 data="0.5"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="ToneStack" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="0"/>
+ <key>
+ <attribute value="dc_remove_1207" name="file"/>
+ <attribute value="dcRemove" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Plucked.xpf b/data/presets/TripleOscillator/Plucked.xpf
deleted file mode 100644
index 506fac3..0000000
--- a/data/presets/TripleOscillator/Plucked.xpf
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060222" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="3" vol="100" name="Plucked" basetone="9" tab="3" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="4" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="5" coarse2="12" vol0="80" vol1="90" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="2" stphdetun0="271" pan0="0" modalgo2="2" stphdetun1="299" pan1="0" stphdetun2="234" pan2="0" phoffset0="0" phoffset1="108" phoffset2="36" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="5" coarse0="12" />
- <eldata fres="0.01" ftype="6" fcut="4859" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.324" ctlenvamt="0" latt="0" sus="0.998" lspd="0.0917" att="0.02" pdel="0" lamt="0" dec="0.324" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="1" att="0.499" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="1" hold="0.499" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.01" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="1" hold="0" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" />
- <midi inputchannel="0" outputchannel="1" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/PowerStrings.xpf b/data/presets/TripleOscillator/PowerStrings.xpf
index c743549..0ef3750 100644
--- a/data/presets/TripleOscillator/PowerStrings.xpf
+++ b/data/presets/TripleOscillator/PowerStrings.xpf
@@ -1,27 +1,56 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.3.0-rc2" type="instrumenttracksettings" version="1.0" >
- <head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="301" surpos-x="0" y="24" surpos-y="0" fxch="0" height="436" basenote="66" vol="11" name="PowerStrings" tab="3" visible="1" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="0" userwavefile2="samples/shapes/smooth_inv_saw.ogg" wavetype2="3" coarse2="12" vol0="100" vol1="100" finel0="0" vol2="42" finel1="-16" finel2="0" modalgo1="2" stphdetun0="121" pan0="0" modalgo2="0" stphdetun1="259" pan1="0" stphdetun2="92" pan2="0" phoffset0="0" phoffset1="266" phoffset2="80" finer0="0" finer1="13" finer2="0" userwavefile0="" wavetype0="2" coarse0="0" />
- <eldata fres="1.04" ftype="7" fcut="3224" fwet="1" >
- <elvol lspd_numerator="1" lpdel="0" amt="1" rel="0.219" ctlenvamt="0" latt="0" syncmode="0" sus="0" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.797" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lspd_numerator="1" lpdel="0" amt="1" rel="0.016" ctlenvamt="0" latt="0" syncmode="0" sus="0.998" lspd_denominator="1" lspd="0.6268" att="0" pdel="0" lamt="0" dec="0.336" userwavefile="" x100="0" lshp="1" hold="0" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.6717" att="0" pdel="0" lamt="0.43" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arp-enabled="0" arptime_numerator="1" arprange="2" chord-enabled="1" arptime_denominator="1" chord="0" syncmode="0" arpgate="100" arp="0" arptime="158" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="0" >
- <rack numofeffects="2" >
- <effect key="AAAAAgAAAAIAAAADAAAAFgBiAGEAcwBzAGIAbwBvAHMAdABlAHIAAAAA/////wAA" autoquit="0" name="bassbooster" gate="0" wet="1" on="1" >
- <bassboostercontrols ratio="10" freq="100" gain="1" />
- </effect>
- <effect key="AAAAAgAAAAIAAAADAAAAbABDAEEAUABTADoAIABQAGwAYQB0AGUAMgB4ADIAIAAtACAAVgBlAHIAcwBhAHQAaQBsAGUAIABwAGwAYQB0AGUAIAByAGUAdgBlAHIAYgAsACAAcwB0AGUAcgBlAG8AIABpAG4AcAB1AHQAcwAAAAQAAAACAAAAEABQAGwAYQB0AGUAMgB4ADIAAAAOAGMAYQBwAHMALgBzAG8=" autoquit="0" name="ladspaeffect" gate="0" wet="1" on="1" >
- <ladspacontrols port02="0.50197" port03="0.54677" port04="0.249875" port05="0.36" ports="4" />
- </effect>
- </rack>
- </fx>
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="PowerStrings" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="66" vol="11">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="80" userwavefile0="" finer0="0" userwavefile1="" finer1="13" userwavefile2="samples/shapes/smooth_inv_saw.ogg" finer2="0" coarse0="0" coarse1="0" coarse2="12" finel0="0" finel1="-16" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="121" pan2="0" stphdetun1="259" wavetype0="2" stphdetun2="92" wavetype1="2" wavetype2="3" vol0="100" vol1="100" phoffset0="0" phoffset1="266" vol2="42"/>
+ </instrument>
+ <eldata fres="1.04" ftype="7" fcut="3224" fwet="1">
+ <elvol lspd_denominator="1" sustain="1" pdel="0" userwavefile="" dec="0.797" lamt="0" syncmode="0" latt="0" rel="0.219" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" sustain="0.002" pdel="0" userwavefile="" dec="0.336" lamt="0" syncmode="0" latt="0" rel="0.016" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.6268" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="0.43" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.6717" ctlenvamt="0" lspd_numerator="1"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="158" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="bassbooster" wet="1" on="1">
+ <bassboostercontrols ratio="10" freq="100" gain="1"/>
+ <key/>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.50197"/>
+ <port03 data="0.54677"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.36"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="-48"/>
+ <port03 data="-22.32"/>
+ <port04 data="-7.92"/>
+ <port05 data="0"/>
+ <port06 data="0"/>
+ <port07 data="0"/>
+ <port08 data="0"/>
+ <port09 data="1.44"/>
+ <port010 data="1.98"/>
+ <port011 data="4.68"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/RaveBass.xpf b/data/presets/TripleOscillator/RaveBass.xpf
index 219e728..21fc6e9 100644
--- a/data/presets/TripleOscillator/RaveBass.xpf
+++ b/data/presets/TripleOscillator/RaveBass.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="RaveBass" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="29" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="82" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="16" userwavefile2="samples/empty.wav" finer2="-3" coarse0="-12" coarse1="0" coarse2="12" finel0="0" finel1="10" modalgo1="2" modalgo2="2" finel2="-2" pan0="9" modalgo3="0" pan1="-20" stphdetun0="232" pan2="10" stphdetun1="95" wavetype0="2" stphdetun2="109" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="74" phoffset1="280" vol2="100" />
+ <instrumenttracksettings muted="0" type="0" name="RaveBass">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="29">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="82" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="16" finer2="-3" coarse0="-12" coarse1="0" coarse2="12" finel0="0" finel1="10" modalgo1="2" finel2="-2" modalgo2="2" pan0="9" modalgo3="0" pan1="-20" stphdetun0="232" pan2="10" stphdetun1="95" wavetype0="2" stphdetun2="109" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="74" phoffset1="280" vol2="100"/>
</instrument>
- <eldata fres="0.9" ftype="0" fcut="1143" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.999" lamt="0.06" syncmode="0" latt="0" rel="0.242" sus="0" amt="1" x100="0" att="0.048" lpdel="0" hold="0" lshp="0" lspd="0.2607" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="1" lspd="0.6094" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.9" ftype="0" fcut="1143" fwet="0">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0.999" lamt="0.06" syncmode="0" latt="0" rel="0.242" sus="0" amt="1" x100="0" att="0.048" lpdel="0" hold="0" lshp="0" lspd="0.2607" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="1" lspd="0.6094" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="12" arptime_numerator="1" arpdir="0" arpgate="76" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="12" arptime_numerator="1" arpdir="0" arpgate="76"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/TripleOscillator/Ravemania.xpf b/data/presets/TripleOscillator/Ravemania.xpf
index b9fed4d..cab609f 100644
--- a/data/presets/TripleOscillator/Ravemania.xpf
+++ b/data/presets/TripleOscillator/Ravemania.xpf
@@ -1,23 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060406" type="instrumenttracksettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="213" y="95" surpos="134219776" fxch="0" height="436" baseoct="5" vol="36" name="Ravemania" basetone="9" tab="1" visible="1" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="-24" userwavefile2="" wavetype2="2" coarse2="0" vol0="100" vol1="104" finel0="-16" vol2="0" finel1="0" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="2" stphdetun1="0" pan1="0" stphdetun2="243" pan2="0" phoffset0="75" phoffset1="23" phoffset2="265" finer0="16" finer1="0" finer2="0" userwavefile0="" wavetype0="2" coarse0="-12" >
- </tripleoscillator>
- <eldata fres="2" ftype="7" fcut="4480" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.155" ctlenvamt="0" latt="0" sus="0.759" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.231" userwavefile="" x100="0" lshp="0" hold="0" >
- </elvol>
- <elcut lfosyncmode="2" lpdel="0" amt="0.21" rel="0.1" ctlenvamt="0" latt="0" sus="0.999" lspd="0.0674" att="0" pdel="0" lamt="0" dec="0.151" userwavefile="" x100="0" lshp="0" hold="0" >
- </elcut>
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" >
- </elres>
+ <instrumenttracksettings muted="0" type="0" name="Ravemania" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="65">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="265" userwavefile0="" finer0="16" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="-12" coarse1="-24" coarse2="0" finel0="-16" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="243" wavetype1="2" wavetype2="2" vol0="100" vol1="104" phoffset0="75" phoffset1="23" vol2="0"/>
+ </instrument>
+ <eldata fres="6.52" ftype="8" fcut="4480" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.428" pdel="0" userwavefile="" dec="0.294" lamt="0" syncmode="0" latt="0" rel="0.155" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.151" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0674" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords arpmode="0" chordrange="2" arprange="2" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" >
- </arpandchords>
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" >
- </midi>
+ <chordcreator chord="0" chordrange="2" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="2" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
-</multimediaproject>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/ResoBass.xpf b/data/presets/TripleOscillator/ResoBass.xpf
index 7243e30..85a785c 100644
--- a/data/presets/TripleOscillator/ResoBass.xpf
+++ b/data/presets/TripleOscillator/ResoBass.xpf
@@ -1,18 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="0" baseoct="5" vol="100" name="ResoBass" basetone="9" >
- <tripleoscillator userwavefile1="" wavetype1="5" coarse1="0" userwavefile2="" wavetype2="0" coarse2="-12" vol0="51" vol1="97" finel0="-4" vol2="100" finel1="0" finel2="1" modalgo1="2" stphdetun0="227" pan0="0" modalgo2="2" stphdetun1="102" pan1="0" stphdetun2="255" pan2="0" phoffset0="0" phoffset1="152" phoffset2="26" finer0="6" finer1="0" finer2="1" userwavefile0="" wavetype0="4" coarse0="0" />
- <eldata fres="10" ftype="0" fcut="231" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.194" latt="0" sus="0.521" lspd="0.1" att="0.099" pdel="0" lamt="0" dec="0.404" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.1" att="0.012" pdel="0" lamt="0" dec="0.413" x100="0" lshp="0" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1522" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings muted="0" type="0" name="ResoBass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="30">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="26" userwavefile0="" finer0="6" userwavefile1="" finer1="0" userwavefile2="" finer2="1" coarse0="0" coarse1="0" coarse2="-12" finel0="-4" finel1="0" modalgo1="2" modalgo2="2" finel2="1" pan0="0" modalgo3="2" pan1="0" stphdetun0="227" pan2="0" stphdetun1="102" wavetype0="4" stphdetun2="255" wavetype1="5" wavetype2="0" vol0="51" vol1="97" phoffset0="0" phoffset1="152" vol2="100"/>
+ </instrument>
+ <eldata fres="3.41" ftype="0" fcut="255" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.479" pdel="0" userwavefile="" dec="0.404" lamt="0" syncmode="0" latt="0" rel="0.301" amt="1" x100="0" att="0.061" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.413" lamt="0" syncmode="0" latt="0" rel="0.289" amt="1" x100="0" att="0.012" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="0" lspd="0.1522" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="76" arp="8" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="4" arpdir="0" arpgate="76"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/ResonantPad.xpf b/data/presets/TripleOscillator/ResonantPad.xpf
index 2cfa8ce..0e375c8 100644
--- a/data/presets/TripleOscillator/ResonantPad.xpf
+++ b/data/presets/TripleOscillator/ResonantPad.xpf
@@ -1,18 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="5" vol="100" name="Resonant Pad" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="2" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="100" finel1="-14" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="2" stphdetun1="50" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="13" finer2="-3" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="0" />
- <eldata fres="0.84" ftype="6" fcut="622" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.242" latt="0" sus="0" lspd="0.0917" att="0" pdel="0" lamt="0" dec="0.297" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0" latt="0" sus="0.999" lspd="0.4784" att="0" pdel="0" lamt="0.52" dec="0.223" x100="0" lshp="1" hold="0" />
- <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.01" att="0" pdel="0" lamt="-0.00599995" dec="0.5" x100="0" lshp="1" hold="0" />
+ <instrumenttracksettings muted="0" type="0" name="Resonant Pad" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="30">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="13" userwavefile2="samples/empty.wav" finer2="-3" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-14" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="50" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100"/>
+ </instrument>
+ <eldata fres="0.66" ftype="6" fcut="622" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.297" lamt="0" syncmode="0" latt="0" rel="0.242" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.223" lamt="0.52" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.4784" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="3" chord="0" arpgate="100" arp="8" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/RockOrgan.xpf b/data/presets/TripleOscillator/RockOrgan.xpf
deleted file mode 100644
index 14a2afd..0000000
--- a/data/presets/TripleOscillator/RockOrgan.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="25" name="Rock Organ" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="1" coarse1="12" userwavefile2="samples/empty.wav" wavetype2="0" coarse2="-12" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="2" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="124" phoffset2="120" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="0" coarse0="0" />
- <eldata fres="0.7" ftype="6" fcut="836" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.242" latt="0" sus="0" lspd="0.1" att="0.056" pdel="0" lamt="0" dec="0.589" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.451" x100="0" lshp="0" hold="0" />
- <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Rough!.xpf b/data/presets/TripleOscillator/Rough!.xpf
index 7136878..38e5d36 100644
--- a/data/presets/TripleOscillator/Rough!.xpf
+++ b/data/presets/TripleOscillator/Rough!.xpf
@@ -1,18 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="0" baseoct="4" vol="100" name="Rough!" basetone="9" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="0" userwavefile2="" wavetype2="4" coarse2="-12" vol0="119" vol1="79" finel0="0" vol2="100" finel1="22" finel2="-30" modalgo1="1" stphdetun0="0" pan0="0" modalgo2="3" stphdetun1="142" pan1="0" stphdetun2="292" pan2="0" phoffset0="0" phoffset1="120" phoffset2="242" finer0="0" finer1="-32" finer2="16" userwavefile0="" wavetype0="3" coarse0="0" />
- <eldata fres="10" ftype="0" fcut="16000" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.293" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings muted="0" type="0" name="Rough!" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="30">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="242" userwavefile0="" finer0="0" userwavefile1="" finer1="-32" userwavefile2="" finer2="16" coarse0="0" coarse1="0" coarse2="-12" finel0="0" finel1="22" modalgo1="1" modalgo2="3" finel2="-30" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="142" wavetype0="3" stphdetun2="292" wavetype1="2" wavetype2="4" vol0="119" vol1="79" phoffset0="0" phoffset1="120" vol2="100"/>
+ </instrument>
+ <eldata fres="10" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.293" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/SBass.xpf b/data/presets/TripleOscillator/SBass.xpf
deleted file mode 100644
index ae45def..0000000
--- a/data/presets/TripleOscillator/SBass.xpf
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc3" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="SBass" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="200" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="-4" userwavefile2="" finer2="2" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="4" modalgo1="0" modalgo2="0" finel2="-2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="5" wavetype2="5" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33" />
- </instrument>
- <eldata fres="0.5" ftype="7" fcut="1" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.13" lamt="0" syncmode="0" latt="0" rel="0.05" sus="0.5" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="8" latt="0.24" rel="0.1" sus="0.5" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.0161" ctlenvamt="0" lspd_numerator="3" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="3" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="3" lspd="0.0545" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="273" arprange="3" arptime_denominator="4" syncmode="5" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="1" arpgate="100" />
- <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" outputprogram="1" readable="0" />
- <fxchain numofeffects="5" enabled="1" >
- <effect autoquit="0" gate="0" name="stereomatrix" wet="0.38" on="1" >
- <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5" />
- <key/>
- </effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="0.15" port01="0.1" port12="1" port02="1" port13="1.5708" port03="1.5708" port14="0" port04="0" port04link="1" port02link="1" port03link="1" link="0" ports="8" port01link="0" />
- <key>
- <attribute value="caps" name="file" />
- <attribute value="PhaserII" name="plugin" />
- </key>
- </effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="0.75" on="1" >
- <ladspacontrols port11="0" port01="0" port12="0.5" port02="0.5" port13="0.5" port03="0.5" port14="0.5" port04="0.5" port04link="1" port02link="1" port03link="1" link="1" ports="8" port01link="1" />
- <key>
- <attribute value="caps" name="file" />
- <attribute value="ToneStack" name="plugin" />
- </key>
- </effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="14.04" port01="14.04" link="1" ports="2" port01link="1" />
- <key>
- <attribute value="caps" name="file" />
- <attribute value="Clip" name="plugin" />
- </key>
- </effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols link="1" ports="0" />
- <key>
- <attribute value="dc_remove_1207" name="file" />
- <attribute value="dcRemove" name="plugin" />
- </key>
- </effect>
- </fxchain>
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/SBass2.xpf b/data/presets/TripleOscillator/SBass2.xpf
deleted file mode 100644
index b0df645..0000000
--- a/data/presets/TripleOscillator/SBass2.xpf
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc3" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="SBass2" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="175" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="240" userwavefile0="" finer0="0" userwavefile1="" finer1="-2" userwavefile2="" finer2="2" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="2" modalgo1="0" modalgo2="0" finel2="-2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="1" wavetype2="0" vol0="33" vol1="33" phoffset0="0" phoffset1="120" vol2="33" />
- </instrument>
- <eldata fres="1" ftype="7" fcut="1" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="1" x100="0" att="0" lpdel="0" hold="0.25" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.19" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.85" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" outputprogram="1" readable="0" />
- <fxchain numofeffects="2" enabled="1" >
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="0" port01="0" port12="0.5" port02="0.5" port13="0.5" port03="0.5" port14="0.5" port04="0.5" port04link="1" port02link="1" port03link="1" link="1" ports="8" port01link="1" />
- <key>
- <attribute value="caps" name="file" />
- <attribute value="ToneStack" name="plugin" />
- </key>
- </effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols link="1" ports="0" />
- <key>
- <attribute value="dc_remove_1207" name="file" />
- <attribute value="dcRemove" name="plugin" />
- </key>
- </effect>
- </fxchain>
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/SEGuitar.xpf b/data/presets/TripleOscillator/SEGuitar.xpf
index 9fe6f8d..543c4f4 100644
--- a/data/presets/TripleOscillator/SEGuitar.xpf
+++ b/data/presets/TripleOscillator/SEGuitar.xpf
@@ -1,61 +1,102 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc3" type="instrumenttracksettings" >
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="SEGuitar" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="200" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="-2" userwavefile1="" finer1="2" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-2" modalgo1="1" modalgo2="0" finel2="-2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="5" stphdetun2="0" wavetype1="5" wavetype2="5" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33" />
+ <instrumenttracksettings muted="0" type="0" name="SEGuitar" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="200">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" userwavefile1="" finer0="-2" userwavefile2="" finer1="2" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-2" modalgo1="1" finel2="-2" modalgo2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="5" stphdetun2="0" wavetype1="5" wavetype2="5" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
</instrument>
- <eldata fres="3.01" ftype="7" fcut="701" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.16" lamt="0" syncmode="0" latt="0" rel="0.05" sus="0.9" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.23" lamt="0.38" syncmode="0" latt="0" rel="0.1" sus="0.85" amt="0" x100="0" att="0.33" lpdel="0" hold="0" lshp="0" lspd="0.041" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="3.01" ftype="7" fcut="701" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.1" userwavefile="" pdel="0" dec="0.16" lamt="0" syncmode="0" latt="0" rel="0.05" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.15" userwavefile="" pdel="0" dec="0.23" lamt="0.38" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0.33" lpdel="0" hold="0" lshp="0" lspd="0.041" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inports="" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" outputprogram="1" readable="1" />
- <fxchain numofeffects="6" enabled="1" >
- <effect autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="72" port01="72" link="1" ports="2" port01link="1" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="1"/>
+ <fxchain numofeffects="6" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="2">
+ <port01 link="1" data="72"/>
+ <port11 data="72"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="Clip" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Clip" name="plugin"/>
</key>
</effect>
- <effect autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="-17.28" port01="-17.28" link="1" ports="2" port01link="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="2">
+ <port01 link="1" data="-17.28"/>
+ <port11 data="-17.28"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="Clip" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Clip" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="0.5" on="1" >
- <ladspacontrols port11="-30.06" port12="0" port13="0" port02link="1" port14="0" port06link="1" port15="0" port16="0" ports="20" port17="0" port18="-16.02" port19="-32.04" port110="-48.06" port03link="1" port010="-48.06" port07link="1" port01="-30.06" port02="0" port04link="1" port08link="1" port03="0" port04="0" port05="0" port06="0" port07="0" link="1" port08="-16.02" port09="-32.04" port01link="1" port05link="1" port010link="1" port09link="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="0.5" on="1">
+ <ladspacontrols link="1" ports="20">
+ <port01 link="1" data="-30.06"/>
+ <port02 link="1" data="0"/>
+ <port03 link="1" data="0"/>
+ <port04 link="1" data="0"/>
+ <port05 link="1" data="0"/>
+ <port06 link="1" data="0"/>
+ <port07 link="1" data="0"/>
+ <port08 link="1" data="-16.02"/>
+ <port09 link="1" data="-32.04"/>
+ <port010 link="1" data="-48"/>
+ <port11 data="-30.06"/>
+ <port12 data="0"/>
+ <port13 data="0"/>
+ <port14 data="0"/>
+ <port15 data="0"/>
+ <port16 data="0"/>
+ <port17 data="0"/>
+ <port18 data="-16.02"/>
+ <port19 data="-32.04"/>
+ <port110 data="-48"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="Eq" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="Eq" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="0.25" port01="0.25" port12="0.75" port02="0.75" port13="0.392699" port03="0.392699" port14="0.74925" port04="0.74925" port04link="1" port02link="1" port03link="1" link="1" ports="8" port01link="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="8">
+ <port01 link="1" data="0.25"/>
+ <port02 link="1" data="0.75"/>
+ <port03 link="1" data="0.392699"/>
+ <port04 link="1" data="0.74925"/>
+ <port11 data="0.25"/>
+ <port12 data="0.75"/>
+ <port13 data="0.392699"/>
+ <port14 data="0.74925"/>
+ </ladspacontrols>
<key>
- <attribute value="caps.so" name="file" />
- <attribute value="PhaserII" name="plugin" />
+ <attribute value="caps.so" name="file"/>
+ <attribute value="PhaserII" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="0.88" on="1" >
- <ladspacontrols port02="0.89957" port03="0.749" port04="0" port05="0.25" ports="4" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="0.88" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.89957"/>
+ <port03 data="0.749"/>
+ <port04 data="0.0005"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
<key>
- <attribute value="caps" name="file" />
- <attribute value="Plate2x2" name="plugin" />
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
</key>
</effect>
- <effect autoquit="0" gate="0" name="stereomatrix" wet="0.1" on="1" >
- <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="stereomatrix" wet="0.1" on="1">
+ <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5"/>
<key/>
</effect>
</fxchain>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/SawLead.xpf b/data/presets/TripleOscillator/SawLead.xpf
deleted file mode 100644
index 6a17240..0000000
--- a/data/presets/TripleOscillator/SawLead.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="SawLead" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="68" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="39" userwavefile0="" finer0="2" userwavefile1="" finer1="-2" userwavefile2="" finer2="2" coarse0="0" coarse1="0" coarse2="0" finel0="6" finel1="-2" modalgo1="2" modalgo2="2" finel2="2" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="196" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="47" vol2="33" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/SawReso.xpf b/data/presets/TripleOscillator/SawReso.xpf
index b3c9570..2c631d6 100644
--- a/data/presets/TripleOscillator/SawReso.xpf
+++ b/data/presets/TripleOscillator/SawReso.xpf
@@ -1,17 +1,21 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060414" type="instrumenttracksettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="611" y="0" surpos="135792566" fxch="0" height="436" baseoct="4" vol="100" name="Saw Reso" basetone="9" tab="1" visible="1" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="0" userwavefile2="" wavetype2="2" coarse2="-12" vol0="100" vol1="53" finel0="8" vol2="37" finel1="-9" finel2="0" modalgo1="2" stphdetun0="0" pan0="0" modalgo2="2" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="8" finer1="-9" finer2="0" userwavefile0="" wavetype0="2" coarse0="0" />
- <eldata fres="2.62" ftype="7" fcut="5490" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.469" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.118" pdel="0.001" lamt="0" dec="0.534" userwavefile="" x100="0" lshp="0" hold="0.287" />
- <elcut lfosyncmode="0" lpdel="0" amt="1" rel="0.375" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.444" pdel="0.001" lamt="0" dec="0.416" userwavefile="" x100="0" lshp="0" hold="0.244" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.244" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.244" pdel="0.001" lamt="0" dec="0.366" userwavefile="" x100="0" lshp="0" hold="0.244" />
+ <instrumenttracksettings muted="0" type="0" name="Saw Reso" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="50">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="8" userwavefile1="" finer1="-9" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="-12" finel0="8" finel1="-9" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="2.62" ftype="7" fcut="5490" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0.001" userwavefile="" dec="0.534" lamt="0" syncmode="0" latt="0" rel="0.469" amt="1" x100="0" att="0.118" lpdel="0" hold="0.287" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="1" pdel="0.001" userwavefile="" dec="0.416" lamt="0" syncmode="0" latt="0" rel="0.375" amt="0.555" x100="0" att="0.444" lpdel="0" hold="0.244" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="1" pdel="0.001" userwavefile="" dec="0.366" lamt="0" syncmode="0" latt="0" rel="0.244" amt="0" x100="0" att="0.244" lpdel="0" hold="0.244" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="3" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="128" arpdir="1" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="128" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
-</multimediaproject>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Short1.xpf b/data/presets/TripleOscillator/Short1.xpf
deleted file mode 100644
index c5ba117..0000000
--- a/data/presets/TripleOscillator/Short1.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="Short1" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="2" coarse2="0" vol0="100" vol1="100" finel0="-11" vol2="100" finel1="0" finel2="0" modalgo1="0" stphdetun0="252" pan0="0" modalgo2="1" stphdetun1="122" pan1="0" stphdetun2="120" pan2="0" phoffset0="101" phoffset1="0" phoffset2="0" finer0="8" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="-12" />
- <eldata fres="0.32" ftype="0" fcut="3100" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.0917" att="0" pdel="0" lamt="0" dec="0.204" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.6673" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="1" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.01" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="1" hold="0" />
- </eldata>
- <arpandchords chordrange="1" arprange="3" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Short2.xpf b/data/presets/TripleOscillator/Short2.xpf
deleted file mode 100644
index 66c42eb..0000000
--- a/data/presets/TripleOscillator/Short2.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="Short2" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="2" coarse2="0" vol0="100" vol1="100" finel0="-14" vol2="100" finel1="0" finel2="0" modalgo1="1" stphdetun0="91" pan0="0" modalgo2="0" stphdetun1="0" pan1="0" stphdetun2="120" pan2="0" phoffset0="91" phoffset1="0" phoffset2="0" finer0="12" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="-12" />
- <eldata fres="0.51" ftype="0" fcut="3100" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.0917" att="0" pdel="0" lamt="0" dec="0.204" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.6673" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="1" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.01" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="1" hold="0" />
- </eldata>
- <arpandchords chordrange="1" arprange="3" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Short3.xpf b/data/presets/TripleOscillator/Short3.xpf
deleted file mode 100644
index 74dc078..0000000
--- a/data/presets/TripleOscillator/Short3.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="0" baseoct="4" vol="100" name="Short3" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="4" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="4" coarse2="0" vol0="50" vol1="50" finel0="0" vol2="100" finel1="0" finel2="0" modalgo1="2" stphdetun0="162" pan0="0" modalgo2="3" stphdetun1="70" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="0" />
- <eldata fres="0.5" ftype="0" fcut="33" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.144" x100="0" lshp="0" hold="0.216" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.273" x100="0" lshp="0" hold="0" />
- <elres lpdel="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="8" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Short4.xpf b/data/presets/TripleOscillator/Short4.xpf
deleted file mode 100644
index 4a6a98f..0000000
--- a/data/presets/TripleOscillator/Short4.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
- <head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="Short4" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="3" coarse2="12" vol0="100" vol1="72" finel0="0" vol2="35" finel1="0" finel2="0" modalgo1="0" stphdetun0="195" pan0="0" modalgo2="0" stphdetun1="0" pan1="0" stphdetun2="261" pan2="0" phoffset0="0" phoffset1="89" phoffset2="0" finer0="0" finer1="0" finer2="0" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="-12" />
- <eldata fres="3" ftype="1" fcut="588" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0" latt="0" sus="0.999" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.193" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords chordrange="1" arprange="3" chord="0" arpgate="100" arp="8" arptime="78" arpdir="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/Snare.xpf b/data/presets/TripleOscillator/Snare.xpf
deleted file mode 100644
index ce06bd8..0000000
--- a/data/presets/TripleOscillator/Snare.xpf
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060405" type="instrumenttracksettings" version="1.0" >
- <head/>
- <instrumenttracksettings>
- <instrumenttrack width="250" x="517" y="256" surpos="134219776" fxch="0" height="436" baseoct="4" vol="102" name="snare" basetone="9" tab="1" visible="1" >
- <tripleoscillator userwavefile1="" wavetype1="6" coarse1="-24" userwavefile2="" wavetype2="6" coarse2="-12" vol0="100" vol1="100" finel0="-28" vol2="100" finel1="-6" finel2="0" modalgo1="1" stphdetun0="184" pan0="0" modalgo2="0" stphdetun1="183" pan1="0" stphdetun2="0" pan2="0" phoffset0="180" phoffset1="49" phoffset2="74" finer0="28" finer1="6" finer2="0" userwavefile0="" wavetype0="6" coarse0="-24" >
- <journal entries="0" metadata="1" id="914388" curentry="0" />
- </tripleoscillator>
- <eldata fres="1.68" ftype="0" fcut="1760" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.207" ctlenvamt="0" latt="0" sus="0.656" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.082" userwavefile="" x100="0" lshp="0" hold="0.012" >
- <journal entries="0" metadata="1" id="746487" curentry="0" />
- </elvol>
- <elcut lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" >
- <journal entries="0" metadata="1" id="684811" curentry="0" />
- </elcut>
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" >
- <journal entries="0" metadata="1" id="147155" curentry="0" />
- </elres>
- <journal entries="0" metadata="1" id="935669" curentry="0" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arprange="1" arpdisabled="1" chord="0" chorddisabled="1" arpgate="100" arp="0" arpsyncmode="0" arptime="100" arpdir="1" >
- <journal entries="0" metadata="1" id="230532" curentry="0" />
- </arpandchords>
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" >
- <journal entries="0" metadata="1" id="498245" curentry="0" />
- </midi>
- </instrumenttrack>
- </instrumenttracksettings>
-</multimediaproject>
diff --git a/data/presets/TripleOscillator/SoftBass.xpf b/data/presets/TripleOscillator/SoftBass.xpf
deleted file mode 100644
index 544aab5..0000000
--- a/data/presets/TripleOscillator/SoftBass.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="Soft Bass" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="44" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="-12" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="247" pan2="0" stphdetun1="0" wavetype0="5" stphdetun2="120" wavetype1="2" wavetype2="4" vol0="100" vol1="100" phoffset0="101" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="2839" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.281" lamt="0" syncmode="0" latt="0" rel="0.151" sus="0.704" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0.83" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0.5" lpdel="0" hold="0.5" lshp="0" lspd="0.7263" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/SoftStrings.xpf b/data/presets/TripleOscillator/SoftStrings.xpf
deleted file mode 100644
index b27f673..0000000
--- a/data/presets/TripleOscillator/SoftStrings.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="SoftStrings" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="29" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="80" userwavefile0="" finer0="0" userwavefile1="" finer1="13" userwavefile2="samples/shapes/smooth_inv_saw.ogg" finer2="0" coarse0="0" coarse1="0" coarse2="12" finel0="0" finel1="-16" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="121" pan2="0" stphdetun1="259" wavetype0="2" stphdetun2="92" wavetype1="2" wavetype2="3" vol0="100" vol1="100" phoffset0="0" phoffset1="266" vol2="42" />
- </instrument>
- <eldata fres="1.04" ftype="7" fcut="2524" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.598" lamt="0" syncmode="0" latt="0" rel="0.329" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.137" lamt="0.63" syncmode="0" latt="0" rel="0.016" sus="0.999" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.6268" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0.43" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.6717" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="158" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/SpaceBass.xpf b/data/presets/TripleOscillator/SpaceBass.xpf
index 4298b32..aeb4328 100644
--- a/data/presets/TripleOscillator/SpaceBass.xpf
+++ b/data/presets/TripleOscillator/SpaceBass.xpf
@@ -1,18 +1,19 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="2" baseoct="5" vol="100" name="Space Bass" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="2" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="100" finel1="-23" finel2="0" modalgo1="0" stphdetun0="250" pan0="0" modalgo2="1" stphdetun1="50" pan1="0" stphdetun2="161" pan2="0" phoffset0="0" phoffset1="62" phoffset2="264" finer0="0" finer1="13" finer2="-3" userwavefile0="samples/empty.wav" wavetype0="2" coarse0="0" />
- <eldata fres="0.88" ftype="6" fcut="686" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.346" latt="0" sus="0.738" lspd="0.0917" att="0" pdel="0" lamt="0" dec="0.297" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0" latt="0" sus="0.999" lspd="0.767" att="0" pdel="0" lamt="0" dec="0.223" x100="0" lshp="1" hold="0" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.01" att="0" pdel="0" lamt="-0.00599995" dec="0.5" x100="0" lshp="1" hold="0" />
+ <instrumenttracksettings>
+ <instrumenttrack muted="0" fxch="0" vol="59" name="Space Bass">
+ <tripleoscillator phoffset2="264" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="13" finer2="-3" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-23" modalgo1="0" finel2="0" modalgo2="1" pan0="0" pan1="0" stphdetun0="250" pan2="0" stphdetun1="50" stphdetun2="161" wavetype0="2" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" vol2="100" phoffset1="62"/>
+ <eldata fres="0.88" ftype="6" fcut="686" fwet="0">
+ <elvol lpdel="0" amt="1" rel="0.346" latt="0" sus="0.738" lspd="0.0917" att="0" pdel="0" lamt="0" dec="0.297" x100="0" lshp="0" hold="0"/>
+ <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elcut lpdel="0" amt="0" rel="0" latt="0" sus="0.999" lspd="0.767" att="0" pdel="0" lamt="0" dec="0.223" x100="0" lshp="1" hold="0"/>
+ <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.01" att="0" pdel="0" lamt="-0.00599995" dec="0.5" x100="0" lshp="1" hold="0"/>
</eldata>
- <arpandchords chordrange="2" arprange="2" chord="0" arpgate="150" arp="0" arptime="158" arpdir="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator arptime="158" arprange="2" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="150"/>
+ <chordcreator arptime="158" arprange="2" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="150"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/TripleOscillator/Square.xpf b/data/presets/TripleOscillator/Square.xpf
index e1ee827..cbd455e 100644
--- a/data/presets/TripleOscillator/Square.xpf
+++ b/data/presets/TripleOscillator/Square.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Square" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="23" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="8" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="12" coarse2="0" finel0="0" finel1="-8" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="3" wavetype2="6" vol0="100" vol1="100" phoffset0="0" phoffset1="54" vol2="1" />
+ <instrumenttracksettings muted="0" type="0" name="Square">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="23">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="8" finer2="0" coarse0="0" coarse1="12" coarse2="0" finel0="0" finel1="-8" modalgo1="2" finel2="0" modalgo2="2" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="3" wavetype2="6" vol0="100" vol1="100" phoffset0="0" phoffset1="54" vol2="1"/>
</instrument>
- <eldata fres="0.87" ftype="6" fcut="92" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.332" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.174" lamt="0" syncmode="0" latt="0" rel="0" sus="0.999" amt="0" x100="0" att="0.101" lpdel="0" hold="0" lshp="1" lspd="0.1178" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.87" ftype="6" fcut="92" fwet="0">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0" lamt="0" syncmode="0" latt="0" rel="0.332" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.174" lamt="0" syncmode="0" latt="0" rel="0" sus="0.999" amt="0" x100="0" att="0.101" lpdel="0" hold="0" lshp="1" lspd="0.1178" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="165" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="72" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="165" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="72"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/TripleOscillator/SquarePing.xpf b/data/presets/TripleOscillator/SquarePing.xpf
new file mode 100644
index 0000000..c4a1999
--- /dev/null
+++ b/data/presets/TripleOscillator/SquarePing.xpf
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Square Ping" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="45" vol="100">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="7" wavetype2="7" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.5" ftype="1" fcut="200" fwet="1">
+ <elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.3" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0.222" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.50197"/>
+ <port03 data="0.3745"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/SuperSawLead.xpf b/data/presets/TripleOscillator/SuperSawLead.xpf
new file mode 100644
index 0000000..916bde5
--- /dev/null
+++ b/data/presets/TripleOscillator/SuperSawLead.xpf
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="SuperSaw Lead" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="96">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="-25" userwavefile2="" finer2="15" coarse0="0" coarse1="0" coarse2="0" finel0="-1" finel1="-25" modalgo1="2" modalgo2="2" finel2="15" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="1.86" ftype="0" fcut="442" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="2" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0.033" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.06" pdel="0" userwavefile="" dec="0.725" lamt="0" syncmode="0" latt="0" rel="0.162" amt="1" x100="0" att="0.038" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port04 data="174.825"/>
+ <port05 data="8"/>
+ <port06 data="8"/>
+ <port07 data="8"/>
+ <port08 data="0.5"/>
+ <port09 data="0.48"/>
+ <port010 data="2"/>
+ <port011 data="1"/>
+ <port012 data="0.86"/>
+ <port013 data="1"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="calf" name="file"/>
+ <attribute value="VintageDelay" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="dualfilter" wet="1" on="1">
+ <DualFilterControls gain2="100" cut1="10" cut2="7000" mix="0" res1="0.01" res2="0.5" filter1="1" filter2="0" enabled1="1" enabled2="0" gain1="100"/>
+ <key/>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Supernova.xpf b/data/presets/TripleOscillator/Supernova.xpf
index 9349e90..0183798 100644
--- a/data/presets/TripleOscillator/Supernova.xpf
+++ b/data/presets/TripleOscillator/Supernova.xpf
@@ -1,61 +1,110 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.9.0-20081123" type="instrumenttracksettings" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Supernova" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="200" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="-4" userwavefile2="" finer2="2" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="4" modalgo1="0" modalgo2="0" finel2="-2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="5" wavetype2="5" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33" />
+ <instrumenttracksettings muted="0" type="0" name="Supernova" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="200">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="-4" userwavefile2="" finer2="2" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="4" modalgo1="0" modalgo2="0" finel2="-2" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="5" wavetype2="5" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
</instrument>
- <eldata fres="0.5" ftype="7" fcut="3221" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.13" lamt="0" syncmode="0" latt="0" rel="0.15" sus="0.5" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.25" lamt="0" syncmode="8" latt="0.24" rel="0.1" sus="0.5" amt="0.665" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.0161" ctlenvamt="0" lspd_numerator="3" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="3" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="3" lspd="0.0545" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="0.5" ftype="7" fcut="3221" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.13" lamt="0" syncmode="0" latt="0" rel="0.15" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.25" lamt="0" syncmode="8" latt="0.24" rel="0.1" amt="0.665" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.0161" ctlenvamt="0" lspd_numerator="3"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="3" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="3" lspd="0.0545" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="4" chord-enabled="1" />
- <arpeggiator arptime="273" arprange="3" arptime_denominator="4" syncmode="5" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="1" arpgate="100" />
- <midiport inputcontroller="0" inports="24:0 USB Oxygen 49:USB Oxygen 49 MIDI 1" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" outputprogram="1" readable="1" />
- <fxchain numofeffects="6" enabled="1" >
- <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="0" gate="0" name="stereomatrix" wet="0.38" on="1" >
- <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5" />
+ <chordcreator chord="0" chordrange="4" chord-enabled="1"/>
+ <arpeggiator arptime="273" arprange="3" arptime_denominator="4" syncmode="5" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="1" arpgate="100"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="1"/>
+ <fxchain numofeffects="7" enabled="1">
+ <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="1" gate="0" name="stereomatrix" wet="0.38" on="1">
+ <stereomatrixcontrols l-l="-0.5" l-r="-0.5" r-l="-0.5" r-r="-0.5"/>
<key/>
</effect>
- <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port11="0.15" port01="0.16" port12="1" port02="1" port13="1.5708" port03="1.5708" port14="0" port04="0" port04link="1" port02link="1" port03link="1" link="0" ports="8" port01link="0" />
+ <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="0" ports="8">
+ <port01 link="0" data="0.16"/>
+ <port02 link="1" data="1"/>
+ <port03 link="1" data="1.5708"/>
+ <port04 link="1" data="0"/>
+ <port11 data="0.15"/>
+ <port12 data="1"/>
+ <port13 data="1.5708"/>
+ <port14 data="0"/>
+ </ladspacontrols>
<key>
- <attribute value="caps" name="file" />
- <attribute value="PhaserII" name="plugin" />
+ <attribute value="caps" name="file"/>
+ <attribute value="PhaserII" name="plugin"/>
</key>
</effect>
- <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="0" gate="0" name="ladspaeffect" wet="0.75" on="1" >
- <ladspacontrols port11="0" port01="0" port12="0.5" port02="0.5" port13="0.5" port03="0.5" port14="0.5" port04="0.5" port04link="1" port02link="1" port03link="1" link="1" ports="8" port01link="1" />
+ <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="0.75" on="1">
+ <ladspacontrols link="1" ports="8">
+ <port01 link="1" data="0"/>
+ <port02 link="1" data="0.5"/>
+ <port03 link="1" data="0.5"/>
+ <port04 link="1" data="0.5"/>
+ <port11 data="0"/>
+ <port12 data="0.5"/>
+ <port13 data="0.5"/>
+ <port14 data="0.5"/>
+ </ladspacontrols>
<key>
- <attribute value="caps" name="file" />
- <attribute value="ToneStack" name="plugin" />
+ <attribute value="caps" name="file"/>
+ <attribute value="ToneStack" name="plugin"/>
</key>
</effect>
- <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="0" >
- <ladspacontrols link="1" ports="0" />
+ <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="0">
+ <ladspacontrols link="1" ports="0"/>
<key>
- <attribute value="dc_remove_1207" name="file" />
- <attribute value="dcRemove" name="plugin" />
+ <attribute value="dc_remove_1207" name="file"/>
+ <attribute value="dcRemove" name="plugin"/>
</key>
</effect>
- <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="0.25" on="1" >
- <ladspacontrols port00="365" port01="50" port02="245" port03="50" port04="0" port05="0" port06="-70" port07="1" port08="0" port09="1" ports="10" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="0.25" on="1">
+ <ladspacontrols ports="10">
+ <port00 data="365"/>
+ <port01 data="50"/>
+ <port02 data="245"/>
+ <port03 data="50"/>
+ <port04 data="0"/>
+ <port05 data="0"/>
+ <port06 data="-70"/>
+ <port07 data="1"/>
+ <port08 data="0"/>
+ <port09 data="1"/>
+ </ladspacontrols>
<key>
- <attribute value="tap_echo" name="file" />
- <attribute value="tap_stereo_echo" name="plugin" />
+ <attribute value="tap_echo" name="file"/>
+ <attribute value="tap_stereo_echo" name="plugin"/>
</key>
</effect>
- <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port00="1.5" ports="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="1">
+ <port00 data="1.5"/>
+ </ladspacontrols>
<key>
- <attribute value="cmt" name="file" />
- <attribute value="amp_stereo" name="plugin" />
+ <attribute value="cmt" name="file"/>
+ <attribute value="amp_stereo" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="-48"/>
+ <port03 data="-48"/>
+ <port04 data="-10.62"/>
+ <port05 data="0"/>
+ <port06 data="0"/>
+ <port07 data="0"/>
+ <port08 data="0"/>
+ <port09 data="0"/>
+ <port010 data="0"/>
+ <port011 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
</key>
</effect>
</fxchain>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/TB303-Arpeggio.xpf b/data/presets/TripleOscillator/TB303-Arpeggio.xpf
deleted file mode 100644
index 69fa74c..0000000
--- a/data/presets/TripleOscillator/TB303-Arpeggio.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
- <head/>
- <instrumenttracksettings muted="0" type="0" name="TB303 Arpeggio" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="13" userwavefile2="samples/empty.wav" finer2="-3" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-14" modalgo1="3" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="50" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="0.88" ftype="6" fcut="968" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.297" lamt="0" syncmode="0" latt="0" rel="0.022" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.223" lamt="0.47" syncmode="0" latt="0" rel="0" sus="0.999" amt="0.565" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.3808" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="-0.005" syncmode="0" latt="0" rel="0" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="179" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="142" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- </instrumenttracksettings>
-</multimedia-project>
diff --git a/data/presets/TripleOscillator/TB303.xpf b/data/presets/TripleOscillator/TB303.xpf
index 0237545..e5c1229 100644
--- a/data/presets/TripleOscillator/TB303.xpf
+++ b/data/presets/TripleOscillator/TB303.xpf
@@ -1,21 +1,21 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<multimedia-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="TB303" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="173" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="0" phoffset0="0" phoffset1="0" vol2="0" />
+ <instrumenttracksettings muted="0" type="0" name="TB303">
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="59">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="0" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" finel2="0" modalgo2="2" pan0="0" modalgo3="0" pan1="0" stphdetun0="173" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="0" phoffset0="0" phoffset1="0" vol2="0"/>
</instrument>
- <eldata fres="0.76" ftype="6" fcut="1" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.279" lamt="0" syncmode="0" latt="0" rel="0.112" sus="0" amt="1" x100="0" att="0.038" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.426" lamt="0" syncmode="0" latt="0" rel="0" sus="0.999" amt="1" x100="0" att="0.062" lpdel="0" hold="0" lshp="0" lspd="0.0658" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="-0.005" syncmode="0" latt="0" rel="0" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
+ <eldata fres="0.76" ftype="6" fcut="1" fwet="1">
+ <elvol lspd_denominator="1" userwavefile="" pdel="0" dec="0.279" lamt="0" syncmode="0" latt="0" rel="0.112" sus="0" amt="1" x100="0" att="0.038" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1"/>
+ <elcut lspd_denominator="1" userwavefile="" pdel="0" dec="0.426" lamt="0" syncmode="0" latt="0" rel="0" sus="0.999" amt="1" x100="0" att="0.062" lpdel="0" hold="0" lshp="0" lspd="0.0658" ctlenvamt="0" lspd_numerator="1"/>
+ <elres lspd_denominator="1" userwavefile="" pdel="0" dec="0.5" lamt="-0.005" syncmode="0" latt="0" rel="0" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1"/>
</eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
+ <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
+ <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
</instrumenttrack>
</instrumenttracksettings>
</multimedia-project>
diff --git a/data/presets/TripleOscillator/TINTNpad.xpf b/data/presets/TripleOscillator/TINTNpad.xpf
new file mode 100644
index 0000000..840ee35
--- /dev/null
+++ b/data/presets/TripleOscillator/TINTNpad.xpf
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="TINTN" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="65">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="12" userwavefile2="" finer2="-5" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-5" modalgo1="2" modalgo2="2" finel2="4" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="4" stphdetun2="0" wavetype1="2" wavetype2="1" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33"/>
+ </instrument>
+ <eldata fres="0.5" ftype="4" fcut="1" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.7" pdel="0" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.88" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0.88" x100="0" att="0.44" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="127" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="1"/>
+ <fxchain numofeffects="2" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.91945"/>
+ <port03 data="0.47936"/>
+ <port04 data="0.469765"/>
+ <port05 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port02 data="-45.18"/>
+ <port03 data="-48"/>
+ <port04 data="-45.18"/>
+ <port05 data="-48"/>
+ <port06 data="0"/>
+ <port07 data="0"/>
+ <port08 data="0"/>
+ <port09 data="0"/>
+ <port010 data="0"/>
+ <port011 data="0"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Eq2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/TheFirstOne.xpf b/data/presets/TripleOscillator/TheFirstOne.xpf
index b139962..741b07f 100644
--- a/data/presets/TripleOscillator/TheFirstOne.xpf
+++ b/data/presets/TripleOscillator/TheFirstOne.xpf
@@ -1,18 +1,19 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="5" vol="100" name="The First One" basetone="9" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="0" userwavefile2="" wavetype2="2" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="1" modalgo1="1" stphdetun0="87" pan0="9" modalgo2="1" stphdetun1="203" pan1="-14" stphdetun2="218" pan2="0" phoffset0="0" phoffset1="232" phoffset2="140" finer0="0" finer1="0" finer2="1" userwavefile0="" wavetype0="3" coarse0="12" />
- <eldata fres="0.88" ftype="0" fcut="823" fwet="1" >
- <elvol lpdel="0" amt="1" rel="0.1" latt="0" sus="0" lspd="0.1" att="0.061" pdel="0" lamt="0" dec="0" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings>
+ <instrumenttrack muted="0" fxch="0" vol="59" name="The First One">
+ <tripleoscillator phoffset2="140" userwavefile0="" userwavefile1="" finer0="0" userwavefile2="" finer1="0" finer2="1" coarse0="12" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="1" finel2="1" modalgo2="1" pan0="9" pan1="-14" stphdetun0="87" pan2="0" stphdetun1="203" stphdetun2="218" wavetype0="3" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" vol2="100" phoffset1="232"/>
+ <eldata fres="0.88" ftype="0" fcut="823" fwet="1">
+ <elvol lpdel="0" amt="1" rel="0.1" latt="0" sus="0" lspd="0.1" att="0.061" pdel="0" lamt="0" dec="0" x100="0" lshp="0" hold="0"/>
+ <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0.5" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="76" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator arptime="100" arprange="1" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="76"/>
+ <chordcreator arptime="100" arprange="1" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="76"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/TripleOscillator/TheMaster.xpf b/data/presets/TripleOscillator/TheMaster.xpf
index f51d888..c54787a 100644
--- a/data/presets/TripleOscillator/TheMaster.xpf
+++ b/data/presets/TripleOscillator/TheMaster.xpf
@@ -1,17 +1,31 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.1-cvs20051208" type="channelsettings" version="1.0" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="5" vol="48" name="The Master" basetone="9" tab="1" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="2" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="0" coarse2="0" vol0="160" vol1="132" finel0="-12" vol2="68" finel1="0" finel2="0" modalgo1="0" stphdetun0="235" pan0="0" modalgo2="1" stphdetun1="185" pan1="0" stphdetun2="209" pan2="0" phoffset0="98" phoffset1="58" phoffset2="235" finer0="12" finer1="0" finer2="0" userwavefile0="shapes/micro.wav" wavetype0="7" coarse0="0" />
- <eldata fres="1.35" ftype="0" fcut="3200" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.384" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0.039" pdel="0" lamt="0" dec="0" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="0" lpdel="0.019" amt="1" rel="0" ctlenvamt="0" latt="0" sus="0.999" lspd="0.2384" att="0.037" pdel="0" lamt="0.345" dec="0.221" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499" />
+ <instrumenttracksettings muted="0" type="0" name="The Master" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="50">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="235" userwavefile0="shapes/micro.wav" finer0="12" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="-12" finel1="0" modalgo1="0" modalgo2="1" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="235" pan2="0" stphdetun1="185" wavetype0="7" stphdetun2="209" wavetype1="2" wavetype2="0" vol0="160" vol1="132" phoffset0="98" phoffset1="58" vol2="68"/>
+ </instrument>
+ <eldata fres="1.35" ftype="0" fcut="3200" fwet="1">
+ <elvol lspd_denominator="4" sustain="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.384" amt="1" x100="0" att="0.039" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.001" pdel="0" userwavefile="" dec="0.221" lamt="0.345" syncmode="0" latt="0" rel="0" amt="1" x100="0" att="0.037" lpdel="0.019" hold="0" lshp="0" lspd="0.2384" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.501" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <arpandchords chordrange="3" arprange="3" arpdisabled="1" chord="0" chorddisabled="0" arpgate="68" arp="0" arpsyncmode="6" arptime="107" arpdir="3" />
- <midi inputchannel="0" outputchannel="0" receive="0" send="0" />
- </channeltrack>
- </channelsettings>
-</multimediaproject>
+ <chordcreator chord="0" chordrange="3" chord-enabled="1"/>
+ <arpeggiator arptime="107" arprange="3" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="1" arpgate="68"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="1">
+ <port00 data="0.25"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="cmt" name="file"/>
+ <attribute value="amp_stereo" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/WarmStack.xpf b/data/presets/TripleOscillator/WarmStack.xpf
index 7dc3a27..fb90329 100644
--- a/data/presets/TripleOscillator/WarmStack.xpf
+++ b/data/presets/TripleOscillator/WarmStack.xpf
@@ -1,31 +1,61 @@
<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="instrumenttracksettings" >
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.2" type="instrumenttracksettings">
<head/>
- <instrumenttracksettings muted="0" type="0" name="Warm Stack" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="100" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="20" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="4" pan2="0" stphdetun1="0" wavetype0="1" stphdetun2="0" wavetype1="0" wavetype2="2" vol0="33" vol1="33" phoffset0="40" phoffset1="0" vol2="41" />
+ <instrumenttracksettings muted="0" type="0" name="Warm Stack" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="45">
+ <instrument name="tripleoscillator">
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="20" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="4" pan2="0" stphdetun1="0" wavetype0="1" stphdetun2="0" wavetype1="0" wavetype2="2" vol0="33" vol1="33" phoffset0="40" phoffset1="0" vol2="41"/>
</instrument>
- <eldata fres="2.71" ftype="0" fcut="2520" fwet="1" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.26" lamt="0" syncmode="0" latt="0" rel="0.17" sus="0.87" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="1" syncmode="1" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1667" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <eldata fres="2.71" ftype="0" fcut="2520" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.13" pdel="0" userwavefile="" dec="0.26" lamt="0" syncmode="0" latt="0" rel="0.17" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="1" syncmode="1" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1667" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
</eldata>
- <chordcreator chord="0" chordrange="2" chord-enabled="1" />
- <arpeggiator arptime="108" arprange="2" arptime_denominator="4" syncmode="0" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="1" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="3" enabled="1" >
- <effect key="AAAACQAAAAACAAAACgAAAAAoAEYAcgBlAGUAdgBlAHIAYgAgACgAVgBlAHIAcwBpAG8AbgAgADMAKQAAAAsAAAAAAgAAABIAZgByAGUAZQB2AGUAcgBiADMAAAAMAGMAbQB0AC4AcwBv" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port04="0" port05="0.8" port06="0" port07="0.4" port08="1" port09="0.5" ports="6" />
+ <chordcreator chord="0" chordrange="2" chord-enabled="1"/>
+ <arpeggiator arptime="108" arprange="2" arptime_denominator="4" syncmode="0" arpmode="1" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="1"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="127" readable="0"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="6">
+ <port04 data="0"/>
+ <port05 data="0.8"/>
+ <port06 data="0"/>
+ <port07 data="0.4"/>
+ <port08 data="1"/>
+ <port09 data="0.5"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="cmt.so" name="file"/>
+ <attribute value="freeverb3" name="plugin"/>
+ </key>
</effect>
- <effect key="AAAACQAAAAACAAAACgAAAABMAEYAZQBlAGQAYgBhAGMAawAgAEQAZQBsAGEAeQAgAEwAaQBuAGUAIAAoAE0AYQB4AGkAbQB1AG0AIABEAGUAbABhAHkAIAA1AHMAKQAAAAsAAAAAAgAAABQAZgBiAGQAZQBsAGEAeQBfADUAcwAAAAwAYwBtAHQALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port10="412.5" port00_denominator="4" port00="412.5" port10_numerator="4" port11="0.31" port01="0.31" port10_denominator="4" port14="0.34" syncmode="4" port04="0.34" port04link="1" link="1" port00link="1" ports="6" port00_numerator="4" port01link="1" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols link="1" ports="6">
+ <port00 data_numerator="4" data_denominator="4" syncmode="4" link="1" data="412.5"/>
+ <port01 link="1" data="0.31"/>
+ <port04 link="1" data="0.34"/>
+ <port10 data_numerator="4" data_denominator="4" syncmode="4" data="412.5"/>
+ <port11 data="0.31"/>
+ <port14 data="0.34"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="cmt.so" name="file"/>
+ <attribute value="fbdelay_5s" name="plugin"/>
+ </key>
</effect>
- <effect key="AAAACQAAAAACAAAACgAAAAAsAEYAYQBzAHQAIABMAG8AbwBrAGEAaABlAGEAZAAgAGwAaQBtAGkAdABlAHIAAAALAAAAAAIAAAAoAGYAYQBzAHQATABvAG8AawBhAGgAZQBhAGQATABpAG0AaQB0AGUAcgAAADwAZgBhAHMAdABfAGwAbwBvAGsAYQBoAGUAYQBkAF8AbABpAG0AaQB0AGUAcgBfADEAOQAxADMALgBzAG8=" autoquit="0" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port00="0" port01="0" port02="507.45" syncmode="0" port02_numerator="4" ports="3" port02_denominator="4" />
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="3">
+ <port00 data="0"/>
+ <port01 data="0"/>
+ <port02 data_numerator="4" data_denominator="4" syncmode="0" data="507.45"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="fast_lookahead_limiter_1913.so" name="file"/>
+ <attribute value="fastLookaheadLimiter" name="plugin"/>
+ </key>
</effect>
</fxchain>
</instrumenttrack>
</instrumenttracksettings>
-</multimedia-project>
+</lmms-project>
diff --git a/data/presets/TripleOscillator/Whistle.xpf b/data/presets/TripleOscillator/Whistle.xpf
index 2faefc5..3d03f5e 100644
--- a/data/presets/TripleOscillator/Whistle.xpf
+++ b/data/presets/TripleOscillator/Whistle.xpf
@@ -1,18 +1,19 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.0.9" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" muted="0" fxch="0" tbidx="1" baseoct="4" vol="100" name="Whistle" basetone="9" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="1" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="1" coarse2="0" vol0="35" vol1="35" finel0="0" vol2="32" finel1="0" finel2="-24" modalgo1="2" stphdetun0="195" pan0="0" modalgo2="2" stphdetun1="90" pan1="-36" stphdetun2="0" pan2="27" phoffset0="260" phoffset1="89" phoffset2="0" finer0="0" finer1="0" finer2="11" userwavefile0="samples/empty.wav" wavetype0="1" coarse0="0" />
- <eldata fres="0.5" ftype="0" fcut="16000" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.1" latt="0" sus="0.234" lspd="0.1" att="0.062" pdel="0" lamt="0" dec="0.27" x100="0" lshp="0" hold="0" />
- <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings>
+ <instrumenttrack muted="0" fxch="0" vol="59" name="Whistle">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="0" finer2="11" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" finel2="-24" modalgo2="2" pan0="0" pan1="-36" stphdetun0="195" pan2="27" stphdetun1="90" stphdetun2="0" wavetype0="1" wavetype1="1" wavetype2="1" vol0="35" vol1="35" phoffset0="260" vol2="32" phoffset1="89"/>
+ <eldata fres="0.5" ftype="0" fcut="16000" fwet="0">
+ <elvol lpdel="0" amt="1" rel="0.1" latt="0" sus="0.234" lspd="0.1" att="0.062" pdel="0" lamt="0" dec="0.27" x100="0" lshp="0" hold="0"/>
+ <elpan lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elpitch lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elcut lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elres lpdel="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator arptime="100" arprange="1" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="100"/>
+ <chordcreator arptime="100" arprange="1" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/TripleOscillator/Xylophon.xpf b/data/presets/TripleOscillator/Xylophon.xpf
index ca5503c..73c92c5 100644
--- a/data/presets/TripleOscillator/Xylophon.xpf
+++ b/data/presets/TripleOscillator/Xylophon.xpf
@@ -1,16 +1,17 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.0" type="channelsettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
- <channelsettings>
- <channeltrack surpos="134219776" fxch="0" baseoct="4" vol="100" name="Xylophon" basetone="9" tab="2" >
- <tripleoscillator userwavefile1="samples/empty.wav" wavetype1="0" coarse1="0" userwavefile2="samples/empty.wav" wavetype2="0" coarse2="0" vol0="100" vol1="100" finel0="0" vol2="100" finel1="22" finel2="-25" modalgo1="1" stphdetun0="66" pan0="0" modalgo2="1" stphdetun1="275" pan1="0" stphdetun2="0" pan2="0" phoffset0="0" phoffset1="0" phoffset2="0" finer0="0" finer1="12" finer2="-13" userwavefile0="samples/empty.wav" wavetype0="0" coarse0="0" />
- <eldata fres="0.5" ftype="1" fcut="820" fwet="0" >
- <elvol lpdel="0" amt="1" rel="0.38" ctlenvamt="0" latt="0" sus="0.999" lspd="0.01" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0" />
- <elcut lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
- <elres lpdel="0" amt="0" rel="0" ctlenvamt="0" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5" />
+ <instrumenttracksettings>
+ <instrumenttrack fxch="0" vol="59" name="Xylophon" tab="2">
+ <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" userwavefile1="samples/empty.wav" finer0="0" userwavefile2="samples/empty.wav" finer1="12" finer2="-13" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="22" modalgo1="1" finel2="-25" modalgo2="1" pan0="0" pan1="0" stphdetun0="66" pan2="0" stphdetun1="275" stphdetun2="0" wavetype0="0" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" vol2="100" phoffset1="0"/>
+ <eldata fres="0.5" ftype="1" fcut="820" fwet="0">
+ <elvol lpdel="0" ctlenvamt="0" amt="1" rel="0.38" latt="0" sus="0.999" lspd="0.01" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0"/>
+ <elcut lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
+ <elres lpdel="0" ctlenvamt="0" amt="0" rel="0" latt="0" sus="0.5" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" x100="0" lshp="0" hold="0.5"/>
</eldata>
- <arpandchords chordrange="1" arprange="1" chord="0" arpgate="100" arp="0" arptime="100" arpdir="0" />
- </channeltrack>
- </channelsettings>
+ <arpeggiator arptime="100" arprange="1" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="100"/>
+ <chordcreator arptime="100" arprange="1" chord="0" chordrange="1" arp="0" arp-enabled="0" chord-enabled="1" arpdir="0" arpdisabled="1" arpgate="100"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Vibed/Harpsichord.xpf b/data/presets/Vibed/Harpsichord.xpf
index f9834ba..b7c617c 100644
--- a/data/presets/Vibed/Harpsichord.xpf
+++ b/data/presets/Vibed/Harpsichord.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060519" type="instrumenttracksettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings>
- <instrumenttrack width="250" x="0" y="0" surpos="134219776" fxch="0" height="436" baseoct="3" vol="100" name="Harpsichord" basetone="9" tab="1" visible="1" >
- <vibedstrings volume0="100" volume1="100" graph0="Hy7JPF+Xgb3iRCy+6mpAvhAfkrz8dYA+/RjkPlWeuj4+hog9ryWgvoHjCb//SBa/V3DyvuZGmr6hNdO9KAblPXfOmz78kPM+6KkQPxQoGz9epRM/Y83xPhegcT73NgW++6/9vm6QO79Zu0W/Fr8vvyCR976EYEe+5WfePX0IgT7cCUk+DyarPYtPnj2CBB4+rDQpPmv7gT17R6+9QuRovv5L1r7Q/CW/s1FKv9mqLL+UDJi+750VPiNq2z50LtY+2GMmPnQPdb4uyiS/KcttvwAAgL/oWWq/1ARLv4v8Pr/uizS/x2Efv3O6+r6aMMi+S4SevqVzJ74r+qA9rS6xPhVBBj87gB0/C2srP56+Nj9Jjyc/DF/UPhTR3Txq3qO+NgHnvkiYm75p6Fq7AOF4Prlkmj5Zm1Q+4l4dPgndSj6Nr5A+AyFY [...]
- <eldata fres="1.53" ftype="0" fcut="700" fwet="0" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.414" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="4" lpdel="0" amt="1" rel="0" ctlenvamt="1" latt="0.1" sus="0.999" lspd="0.0208" att="0.532" pdel="0" lamt="1" dec="0.999" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttrack fxch="0" vol="59" name="Harpsichord" tab="1">
+ <vibedstrings volume0="100" volume1="100" volume2="100" detune0="0" detune1="0" detune2="0" pick0="0" pick1="0" pick2="0" impulse0="0" impulse1="0" impulse2="0" graph0="Hy7JPF+Xgb3iRCy+6mpAvhAfkrz8dYA+/RjkPlWeuj4+hog9ryWgvoHjCb//SBa/V3DyvuZGmr6hNdO9KAblPXfOmz78kPM+6KkQPxQoGz9epRM/Y83xPhegcT73NgW++6/9vm6QO79Zu0W/Fr8vvyCR976EYEe+5WfePX0IgT7cCUk+DyarPYtPnj2CBB4+rDQpPmv7gT17R6+9QuRovv5L1r7Q/CW/s1FKv9mqLL+UDJi+750VPiNq2z50LtY+2GMmPnQPdb4uyiS/KcttvwAAgL/oWWq/1ARLv4v8Pr/uizS/x2Efv3O6+r6aM [...]
+ <eldata fres="1.53" ftype="0" fcut="700" fwet="0">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.414" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="1" amt="1" rel="0" latt="0.1" sus="0.999" lspd="0.0208" att="0.532" pdel="0" lfosyncmode="4" lamt="1" dec="0.999" x100="0" lshp="0" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="1" chordrange="2" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="366" arpdir="1" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="1" send="0" defvelin="0" inports="24:0 CS46XX:CS46XX" />
+ <arpeggiator chorddisabled="0" arptime="366" arprange="1" arpsyncmode="0" arpmode="1" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inports="24:0 CS46XX:CS46XX" inputchannel="0" outputchannel="1" send="0" defvelout="0" receive="1" defvelin="0"/>
+ <chordcreator chorddisabled="0" arptime="366" arprange="1" arpsyncmode="0" arpmode="1" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
</instrumenttrack>
</instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Vibed/SadPad.xpf b/data/presets/Vibed/SadPad.xpf
index 43d64ac..2ef1769 100644
--- a/data/presets/Vibed/SadPad.xpf
+++ b/data/presets/Vibed/SadPad.xpf
@@ -1,17 +1,18 @@
-<?xml version="1.0"?>
+<?xml version='1.0'?>
<!DOCTYPE multimedia-project>
-<multimediaproject creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.1.4-cvs20060519" type="instrumenttracksettings" version="1.0" >
+<multimediaproject version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
<head/>
<instrumenttracksettings>
- <instrumenttrack width="250" x="0" y="0" surpos="134219776" fxch="0" height="436" baseoct="3" vol="100" name="Sad Pad (play with Filter-Reso!!)" basetone="9" tab="1" visible="1" >
- <vibedstrings volume0="100" volume1="100" graph0="Hy7JPF+Xgb3iRCy+6mpAvhAfkrz8dYA+/RjkPlWeuj4+hog9ryWgvoHjCb//SBa/V3DyvuZGmr6hNdO9KAblPXfOmz78kPM+6KkQPxQoGz9epRM/Y83xPhegcT73NgW++6/9vm6QO79Zu0W/Fr8vvyCR976EYEe+5WfePX0IgT7cCUk+DyarPYtPnj2CBB4+rDQpPmv7gT17R6+9QuRovv5L1r7Q/CW/s1FKv9mqLL+UDJi+750VPiNq2z50LtY+2GMmPnQPdb4uyiS/KcttvwAAgL/oWWq/1ARLv4v8Pr/uizS/x2Efv3O6+r6aMMi+S4SevqVzJ74r+qA9rS6xPhVBBj87gB0/C2srP56+Nj9Jjyc/DF/UPhTR3Txq3qO+NgHnvkiYm75p6Fq7AOF4Prlkmj5Zm1Q+4l4dPgndSj6Nr5A+AyFY [...]
- <eldata fres="1.61" ftype="0" fcut="560" fwet="1" >
- <elvol lfosyncmode="0" lpdel="0" amt="1" rel="0.414" ctlenvamt="0" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lamt="0" dec="0" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lfosyncmode="4" lpdel="0" amt="1" rel="0" ctlenvamt="1" latt="0.1" sus="0.999" lspd="0.0208" att="0.532" pdel="0" lamt="1" dec="0.999" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lfosyncmode="0" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
+ <instrumenttrack fxch="0" vol="59" name="Sad Pad (play with Filter-Reso!!)" tab="1">
+ <vibedstrings volume0="100" volume1="100" volume2="100" detune0="0" detune1="0" detune2="0" pick0="0" pick1="0" pick2="0" impulse0="0" impulse1="0" impulse2="0" graph0="Hy7JPF+Xgb3iRCy+6mpAvhAfkrz8dYA+/RjkPlWeuj4+hog9ryWgvoHjCb//SBa/V3DyvuZGmr6hNdO9KAblPXfOmz78kPM+6KkQPxQoGz9epRM/Y83xPhegcT73NgW++6/9vm6QO79Zu0W/Fr8vvyCR976EYEe+5WfePX0IgT7cCUk+DyarPYtPnj2CBB4+rDQpPmv7gT17R6+9QuRovv5L1r7Q/CW/s1FKv9mqLL+UDJi+750VPiNq2z50LtY+2GMmPnQPdb4uyiS/KcttvwAAgL/oWWq/1ARLv4v8Pr/uizS/x2Efv3O6+r6aM [...]
+ <eldata fres="1.61" ftype="0" fcut="560" fwet="1">
+ <elvol userwavefile="" lpdel="0" ctlenvamt="0" amt="1" rel="0.414" latt="0" sus="0" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0" x100="0" lshp="0" hold="0"/>
+ <elcut userwavefile="" lpdel="0" ctlenvamt="1" amt="1" rel="0" latt="0.1" sus="0.999" lspd="0.0208" att="0.532" pdel="0" lfosyncmode="4" lamt="1" dec="0.999" x100="0" lshp="0" hold="0"/>
+ <elres userwavefile="" lpdel="0" ctlenvamt="0" amt="0" rel="0.1" latt="0" sus="0.499" lspd="0.1" att="0" pdel="0" lfosyncmode="0" lamt="0" dec="0.499" x100="0" lshp="0" hold="0.499"/>
</eldata>
- <arpandchords arpmode="1" chordrange="2" arprange="1" arpdisabled="1" chord="0" chorddisabled="0" arpgate="100" arp="0" arpsyncmode="0" arptime="366" arpdir="1" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="1" send="0" defvelin="0" inports="24:0 CS46XX:CS46XX" />
+ <arpeggiator chorddisabled="0" arptime="366" arprange="1" arpsyncmode="0" arpmode="1" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
+ <midiport inports="24:0 CS46XX:CS46XX" inputchannel="0" outputchannel="1" send="0" defvelout="0" receive="1" defvelin="0"/>
+ <chordcreator chorddisabled="0" arptime="366" arprange="1" arpsyncmode="0" arpmode="1" chord="0" chordrange="2" arp="0" arp-enabled="0" chord-enabled="1" arpdisabled="1" arpdir="0" arpgate="100"/>
</instrumenttrack>
</instrumenttracksettings>
</multimediaproject>
diff --git a/data/presets/Watsyn/Epic_lead.xpf b/data/presets/Watsyn/Epic_lead.xpf
new file mode 100644
index 0000000..a1747ea
--- /dev/null
+++ b/data/presets/Watsyn/Epic_lead.xpf
@@ -0,0 +1,48 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Epic lead" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="42.8">
+ <instrument name="watsyn">
+ <watsyn b2_pan="0" envAtt_denominator="4" b1_wave="AAAAAGLu6Tz21Wk980GvPVV06T38uhE+X50uPk1bSz7F7mc+6CiCPkE/kD56N54+qg6sPu/BuT5qTsc+R7HUPrzn4T4F7+4+a8T7PqAyBD9wZwo/Wn8QPxh5Fj9rUxw/Gw0iP/WkJz/NGS0/gGoyP/OVNz8Rmzw/znhBPyYuRj8buko/vRtPPyBSUz9kXFc/sTlbPzfpXj8yamI/6LtlP6XdaD/Dzms/pI5uP7cccT9xeHM/VaF1P/CWdz/YWHk/seZ6PyZAfD/wZH0/0lR+P5kPfz8elX8/RuV/PwAAgD9G5X8/HpV/P5kPfz/SVH4/8GR9PyZAfD+x5no/2Fh5P++Wdz9VoXU/cHhzP7YccT+kjm4/ws5rP6TdaD/nu2U/MmpiPzfpXj+xOVs/ZVxXPyFSUz+9G08/GbpKPyMuRj/MeEE/E [...]
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.918" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.276" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="3" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="dualfilter" wet="1" on="1">
+ <DualFilterControls gain2="100" cut1="4262" cut2="1713" mix="0.17" res1="1.33" res2="5.92" filter1="0" filter2="13" enabled1="1" enabled2="1" gain1="100"/>
+ <key/>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="waveshaper" wet="0.54" on="1">
+ <waveshapercontrols clipInput="1" outputGain="1" waveShape="ehQhPGZmQzzCdX889uikPDPzzDwexfU8KVwPPX9dJD0ULD09N3xhPVUBjD1Oc649CZrRPfLn8D0LWwY+7ZYTPjW5ID592y0+xf06Pg0gSD5WQlU+nmRiPuaGbz4uqXw+u+WEPt92iz4DCJI+J5mYPkwqnz5QvKU+xU6sPjbFsj7TtLg+/nG9PoSUwD7QX8I+PnrDPgNhxD42QcU+aiHGPp4Bxz7S4cc+BcLIPjmiyT5tgso+oWLLPtRCzD4II80+PAPOPm/jzj6jw88+16PQPguE0T4+ZNI+ckTTPqYk1D7aBNU+DeXVPkHF1j51pdc+qYXYPtxl2T4QRto+RCbbPngG3D6r5tw+38bdPiqg3j6vS98+yoHfPiw/3z5ULd8+HzLgPuqJ4j6qtOU+kiTpPv2d7D5oF/A+05DzPj [...]
+ <key/>
+ </effect>
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="10">
+ <port04 data="140.4"/>
+ <port05 data="16"/>
+ <port06 data="8"/>
+ <port07 data="9"/>
+ <port08 data="0.735"/>
+ <port09 data="0.24"/>
+ <port010 data="3"/>
+ <port011 data="2"/>
+ <port012 data="1"/>
+ <port013 data="1"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="calf" name="file"/>
+ <attribute value="VintageDelay" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Watsyn/Phase_bass.xpf b/data/presets/Watsyn/Phase_bass.xpf
new file mode 100644
index 0000000..641c59c
--- /dev/null
+++ b/data/presets/Watsyn/Phase_bass.xpf
@@ -0,0 +1,21 @@
+<?xml version='1.0'?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Phase bass" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="69" vol="69.8">
+ <instrument name="watsyn">
+ <watsyn b2_pan="0" envAtt_denominator="4" b1_wave="WLMevoAP3r4gpie/09hNv65bY78W7Gy/b3Rvv2aGbr/cU2y/EA1qvzIPaL/5PWa/r3Vkv2WtYr8c5WC/0hxfv4hUXb8/jFu/9cNZv6v7V79iM1a/GGtUv86iUr+F2lC/OxJPv/JJTb+ogUu/XrlJvxXxR7/LKEa/gWBEvziYQr/uz0C/pAc/v1s/Pb8Rdzu/yK45v37mN780Hja/61U0v6GNMr9XxTC/Dv0uv8Q0Lb96bCu/MaQpv+fbJ7+dEya/VEskvwqDIr/BuiC/d/Iev4/YG7/tGhK/v3H4vicgvr77LI++NDNtvlZVVb5cj0K+Y8kvvmoDHb4iIgq+N9DtvRSux716FKa9aQONve7udr0NdFq9iyU/vQrXI72IiAi9DHTavAjXo7wKdFq8BnTauwAAgDEWdNo7EnRaPAzXozwQdNo8i [...]
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
+ <elvol lspd_denominator="4" sustain="0.904" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.121" amt="1" x100="0" att="0" lpdel="0" hold="0.13" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.692" userwavefile="" pdel="0" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.263" amt="0" x100="0" att="0" lpdel="0" hold="0.116" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
+ <fxchain numofeffects="0" enabled="0"/>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/Watsyn/Pulse.xpf b/data/presets/Watsyn/Pulse.xpf
new file mode 100644
index 0000000..129a584
--- /dev/null
+++ b/data/presets/Watsyn/Pulse.xpf
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE lmms-project>
+<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.93" type="instrumenttracksettings">
+ <head/>
+ <instrumenttracksettings muted="0" type="0" name="Pulse" solo="0">
+ <instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="27.8">
+ <instrument name="watsyn">
+ <watsyn b2_pan="0" envAtt_denominator="4" b1_wave="AACAvzisfb9wWHu/qAR5v9+wdr8XXXS/Twlyv4e1b7+/YW2/9w1rvy66aL9mZma/nhJkv9a+Yb8Oa1+/Rhddv37DWr9cj8K+yXa+vjZeur6iRba+Dy2yvnwUrr4qXI++ksJ1vs7MTL6wR+G90MzMvfBRuL0Q16O9SsYJviwmLb4OhlC+8OVzvumii77aUp2+zAKvvryywL6uYtK+nxLkvicxCL8GgRW/5tAiv8UgML+DwEq/YhBYv0JgZb8hsHK/AACAvwAAgL8AAIC/kMJ1v3oUDr/0KNy+9Cicvu7ubr75xZK+UBtovlAb6L0A16O8ANcjvcTMzL0kXA++6FE4vqxHYb63HoW+mJmZvnoUrr5cj8K+PQrXvh6F674RERG/IyIivzQzM7/MzEy/SOF6v0jher9I4Xq/2kAnv6qqKr/gehS/j [...]
+ </instrument>
+ <eldata fres="2.98" ftype="4" fcut="2498" fwet="1">
+ <elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0.725" syncmode="4" latt="0.215" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.0214" ctlenvamt="0" lspd_numerator="4"/>
+ <elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="4" latt="0.243" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.0214" ctlenvamt="0" lspd_numerator="4"/>
+ <elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0"/>
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
+ <midiport inputcontroller="0" inports="" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="62" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="1"/>
+ <fxchain numofeffects="1" enabled="1">
+ <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="8000" gate="0" name="ladspaeffect" wet="1" on="1">
+ <ladspacontrols ports="4">
+ <port02 data="0.80017"/>
+ <port03 data="0.3745"/>
+ <port04 data="0.249875"/>
+ <port05 data="0.2825"/>
+ </ladspacontrols>
+ <key>
+ <attribute value="caps" name="file"/>
+ <attribute value="Plate2x2" name="plugin"/>
+ </key>
+ </effect>
+ </fxchain>
+ </instrumenttrack>
+ </instrumenttracksettings>
+</lmms-project>
diff --git a/data/presets/ZynAddSubFX/Arpeggios/0068-Glass Arpeggio1.xiz b/data/presets/ZynAddSubFX/Arpeggios/0068-Glass Arpeggio1.xiz
new file mode 100644
index 0000000..6e3bd47
Binary files /dev/null and b/data/presets/ZynAddSubFX/Arpeggios/0068-Glass Arpeggio1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Arpeggios/0069-Glass Arpeggio2.xiz b/data/presets/ZynAddSubFX/Arpeggios/0069-Glass Arpeggio2.xiz
new file mode 100644
index 0000000..b5690f5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Arpeggios/0069-Glass Arpeggio2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Brass/0067-Brass Pad1.xiz b/data/presets/ZynAddSubFX/Brass/0067-Brass Pad1.xiz
new file mode 100644
index 0000000..d6d51a0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Brass/0067-Brass Pad1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Brass/0068-Brass Pad2.xiz b/data/presets/ZynAddSubFX/Brass/0068-Brass Pad2.xiz
new file mode 100644
index 0000000..9072a16
Binary files /dev/null and b/data/presets/ZynAddSubFX/Brass/0068-Brass Pad2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0001-Xylophone.xiz b/data/presets/ZynAddSubFX/Collection/0001-Xylophone.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0001-Xylophone.xiz
rename to data/presets/ZynAddSubFX/Collection/0001-Xylophone.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0002-Vibraphone.xiz b/data/presets/ZynAddSubFX/Collection/0002-Vibraphone.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0002-Vibraphone.xiz
rename to data/presets/ZynAddSubFX/Collection/0002-Vibraphone.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0003-Soft Vibes.xiz b/data/presets/ZynAddSubFX/Collection/0003-Soft Vibes.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0003-Soft Vibes.xiz
rename to data/presets/ZynAddSubFX/Collection/0003-Soft Vibes.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0004-Simple Chimes.xiz b/data/presets/ZynAddSubFX/Collection/0004-Simple Chimes.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0004-Simple Chimes.xiz
rename to data/presets/ZynAddSubFX/Collection/0004-Simple Chimes.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0005-Silver Bell.xiz b/data/presets/ZynAddSubFX/Collection/0005-Silver Bell.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0005-Silver Bell.xiz
rename to data/presets/ZynAddSubFX/Collection/0005-Silver Bell.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0006-Soft Hammer.xiz b/data/presets/ZynAddSubFX/Collection/0006-Soft Hammer.xiz
new file mode 100644
index 0000000..2896e1b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0006-Soft Hammer.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0007-Ethereal.xiz b/data/presets/ZynAddSubFX/Collection/0007-Ethereal.xiz
new file mode 100644
index 0000000..1a13971
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0007-Ethereal.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0008-Metal Drips.xiz b/data/presets/ZynAddSubFX/Collection/0008-Metal Drips.xiz
new file mode 100644
index 0000000..6a9e75b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0008-Metal Drips.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0009-Trem Lead.xiz b/data/presets/ZynAddSubFX/Collection/0009-Trem Lead.xiz
new file mode 100644
index 0000000..72c308b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0009-Trem Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0012-Trem Synth Piano 3.xiz b/data/presets/ZynAddSubFX/Collection/0010-Trem Synth Piano 3.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0012-Trem Synth Piano 3.xiz
rename to data/presets/ZynAddSubFX/Collection/0010-Trem Synth Piano 3.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0033-Trem Synth.xiz b/data/presets/ZynAddSubFX/Collection/0011-Trem Synth.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0033-Trem Synth.xiz
rename to data/presets/ZynAddSubFX/Collection/0011-Trem Synth.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0012-Simple Square.xiz b/data/presets/ZynAddSubFX/Collection/0012-Simple Square.xiz
new file mode 100644
index 0000000..f126c62
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0012-Simple Square.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0013-Full Square.xiz b/data/presets/ZynAddSubFX/Collection/0013-Full Square.xiz
new file mode 100644
index 0000000..c8dc15d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0013-Full Square.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0014-Super Square.xiz b/data/presets/ZynAddSubFX/Collection/0014-Super Square.xiz
new file mode 100644
index 0000000..e1899b5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0014-Super Square.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0018-Steel Wire.xiz b/data/presets/ZynAddSubFX/Collection/0015-Steel Wire.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0018-Steel Wire.xiz
rename to data/presets/ZynAddSubFX/Collection/0015-Steel Wire.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0016-Echo Bubbles.xiz b/data/presets/ZynAddSubFX/Collection/0016-Echo Bubbles.xiz
new file mode 100644
index 0000000..01bf4fd
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0016-Echo Bubbles.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0017-Fantasia.xiz b/data/presets/ZynAddSubFX/Collection/0017-Fantasia.xiz
new file mode 100644
index 0000000..79a506b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0017-Fantasia.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0018-Sub Delay.xiz b/data/presets/ZynAddSubFX/Collection/0018-Sub Delay.xiz
new file mode 100644
index 0000000..a176a79
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0018-Sub Delay.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0019-Soft.xiz b/data/presets/ZynAddSubFX/Collection/0019-Soft.xiz
new file mode 100644
index 0000000..e2d3326
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0019-Soft.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0020-Ultra Soft.xiz b/data/presets/ZynAddSubFX/Collection/0020-Ultra Soft.xiz
new file mode 100644
index 0000000..c8d4dfa
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0020-Ultra Soft.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0021-Whistle.xiz b/data/presets/ZynAddSubFX/Collection/0021-Whistle.xiz
new file mode 100644
index 0000000..2b14359
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0021-Whistle.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0022-Wipe Whistle.xiz b/data/presets/ZynAddSubFX/Collection/0022-Wipe Whistle.xiz
new file mode 100644
index 0000000..d02ca2c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0022-Wipe Whistle.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0023-Ghost Whistle.xiz b/data/presets/ZynAddSubFX/Collection/0023-Ghost Whistle.xiz
new file mode 100644
index 0000000..4cfb6bb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0023-Ghost Whistle.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0029-Full Strings.xiz b/data/presets/ZynAddSubFX/Collection/0024-Full Strings.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0029-Full Strings.xiz
rename to data/presets/ZynAddSubFX/Collection/0024-Full Strings.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0030-Slow Strings.xiz b/data/presets/ZynAddSubFX/Collection/0025-Slow Strings.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0030-Slow Strings.xiz
rename to data/presets/ZynAddSubFX/Collection/0025-Slow Strings.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0032-Pizzicato Strings.xiz b/data/presets/ZynAddSubFX/Collection/0026-Pizzicato Strings.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0032-Pizzicato Strings.xiz
rename to data/presets/ZynAddSubFX/Collection/0026-Pizzicato Strings.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0027-Sweep Synth.xiz b/data/presets/ZynAddSubFX/Collection/0027-Sweep Synth.xiz
new file mode 100644
index 0000000..cf77fdb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0027-Sweep Synth.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0034-Warm Synth.xiz b/data/presets/ZynAddSubFX/Collection/0028-Warm Synth.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0034-Warm Synth.xiz
rename to data/presets/ZynAddSubFX/Collection/0028-Warm Synth.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0035-Hard Synth.xiz b/data/presets/ZynAddSubFX/Collection/0029-Hard Synth.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0035-Hard Synth.xiz
rename to data/presets/ZynAddSubFX/Collection/0029-Hard Synth.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0030-Bright Synth.xiz b/data/presets/ZynAddSubFX/Collection/0030-Bright Synth.xiz
new file mode 100644
index 0000000..d2ffd8c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0030-Bright Synth.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0037-Multi Synth.xiz b/data/presets/ZynAddSubFX/Collection/0031-Multi Synth.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0037-Multi Synth.xiz
rename to data/presets/ZynAddSubFX/Collection/0031-Multi Synth.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0038-Slow Saw.xiz b/data/presets/ZynAddSubFX/Collection/0032-Slow Saw.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0038-Slow Saw.xiz
rename to data/presets/ZynAddSubFX/Collection/0032-Slow Saw.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0039-Medium Saw.xiz b/data/presets/ZynAddSubFX/Collection/0033-Medium Saw.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0039-Medium Saw.xiz
rename to data/presets/ZynAddSubFX/Collection/0033-Medium Saw.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0040-Hard Saw.xiz b/data/presets/ZynAddSubFX/Collection/0034-Hard Saw.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0040-Hard Saw.xiz
rename to data/presets/ZynAddSubFX/Collection/0034-Hard Saw.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0041-Voiced Saw.xiz b/data/presets/ZynAddSubFX/Collection/0035-Voiced Saw.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0041-Voiced Saw.xiz
rename to data/presets/ZynAddSubFX/Collection/0035-Voiced Saw.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0036-Sweep Saw.xiz b/data/presets/ZynAddSubFX/Collection/0036-Sweep Saw.xiz
new file mode 100644
index 0000000..9e2b8a8
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0036-Sweep Saw.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0037-Stereo Sweep Saw.xiz b/data/presets/ZynAddSubFX/Collection/0037-Stereo Sweep Saw.xiz
new file mode 100644
index 0000000..d05cb06
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0037-Stereo Sweep Saw.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0044-Wipe Synth.xiz b/data/presets/ZynAddSubFX/Collection/0038-Wipe Synth.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0044-Wipe Synth.xiz
rename to data/presets/ZynAddSubFX/Collection/0038-Wipe Synth.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0045-Hard Stereo Sweep Synth.xiz b/data/presets/ZynAddSubFX/Collection/0039-Hard Stereo Sweep Synth.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0045-Hard Stereo Sweep Synth.xiz
rename to data/presets/ZynAddSubFX/Collection/0039-Hard Stereo Sweep Synth.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0040-Master Synth Low.xiz b/data/presets/ZynAddSubFX/Collection/0040-Master Synth Low.xiz
new file mode 100644
index 0000000..61a2ede
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0040-Master Synth Low.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0041-Master Synth High.xiz b/data/presets/ZynAddSubFX/Collection/0041-Master Synth High.xiz
new file mode 100644
index 0000000..23cc40b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0041-Master Synth High.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0048-Sharp Synth.xiz b/data/presets/ZynAddSubFX/Collection/0042-Sharp Synth.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0048-Sharp Synth.xiz
rename to data/presets/ZynAddSubFX/Collection/0042-Sharp Synth.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0050-Fretless Bass.xiz b/data/presets/ZynAddSubFX/Collection/0043-Fretless Bass.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0050-Fretless Bass.xiz
rename to data/presets/ZynAddSubFX/Collection/0043-Fretless Bass.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0051-Decay Bass.xiz b/data/presets/ZynAddSubFX/Collection/0044-Decay Bass.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0051-Decay Bass.xiz
rename to data/presets/ZynAddSubFX/Collection/0044-Decay Bass.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0052-Steel Bass.xiz b/data/presets/ZynAddSubFX/Collection/0045-Steel Bass.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0052-Steel Bass.xiz
rename to data/presets/ZynAddSubFX/Collection/0045-Steel Bass.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0053-Synth Bass.xiz b/data/presets/ZynAddSubFX/Collection/0046-Synth Bass.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0053-Synth Bass.xiz
rename to data/presets/ZynAddSubFX/Collection/0046-Synth Bass.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0047-Distorted Bass.xiz b/data/presets/ZynAddSubFX/Collection/0047-Distorted Bass.xiz
new file mode 100644
index 0000000..d5662cf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0047-Distorted Bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0048-Variable Reed.xiz b/data/presets/ZynAddSubFX/Collection/0048-Variable Reed.xiz
new file mode 100644
index 0000000..6d3651a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0048-Variable Reed.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0049-Reed Organ.xiz b/data/presets/ZynAddSubFX/Collection/0049-Reed Organ.xiz
new file mode 100644
index 0000000..d317731
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0049-Reed Organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0050-Soft Organ.xiz b/data/presets/ZynAddSubFX/Collection/0050-Soft Organ.xiz
new file mode 100644
index 0000000..f3379f3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0050-Soft Organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0051-Thin Pipe.xiz b/data/presets/ZynAddSubFX/Collection/0051-Thin Pipe.xiz
new file mode 100644
index 0000000..8703c4f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0051-Thin Pipe.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0052-Great Organ.xiz b/data/presets/ZynAddSubFX/Collection/0052-Great Organ.xiz
new file mode 100644
index 0000000..65d529b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0052-Great Organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0053-64ft Organ.xiz b/data/presets/ZynAddSubFX/Collection/0053-64ft Organ.xiz
new file mode 100644
index 0000000..fe2d4ee
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0053-64ft Organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0062-Hammond Organ.xiz b/data/presets/ZynAddSubFX/Collection/0054-Hammond Organ.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0062-Hammond Organ.xiz
rename to data/presets/ZynAddSubFX/Collection/0054-Hammond Organ.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0055-Percussion Organ.xiz b/data/presets/ZynAddSubFX/Collection/0055-Percussion Organ.xiz
new file mode 100644
index 0000000..0b40032
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0055-Percussion Organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0064-Sines.xiz b/data/presets/ZynAddSubFX/Collection/0056-Sines.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0064-Sines.xiz
rename to data/presets/ZynAddSubFX/Collection/0056-Sines.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0067-Soft Flute.xiz b/data/presets/ZynAddSubFX/Collection/0057-Soft Flute.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0067-Soft Flute.xiz
rename to data/presets/ZynAddSubFX/Collection/0057-Soft Flute.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0068-Warm Flute.xiz b/data/presets/ZynAddSubFX/Collection/0058-Warm Flute.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0068-Warm Flute.xiz
rename to data/presets/ZynAddSubFX/Collection/0058-Warm Flute.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0071-Ocarina.xiz b/data/presets/ZynAddSubFX/Collection/0059-Ocarina.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0071-Ocarina.xiz
rename to data/presets/ZynAddSubFX/Collection/0059-Ocarina.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0060-Beyond.xiz b/data/presets/ZynAddSubFX/Collection/0060-Beyond.xiz
new file mode 100644
index 0000000..a8e8987
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0060-Beyond.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0061-Sweep Pad.xiz b/data/presets/ZynAddSubFX/Collection/0061-Sweep Pad.xiz
new file mode 100644
index 0000000..ff889de
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0061-Sweep Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0062-Sweep Matrix.xiz b/data/presets/ZynAddSubFX/Collection/0062-Sweep Matrix.xiz
new file mode 100644
index 0000000..a6106ba
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0062-Sweep Matrix.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0063-Matrix.xiz b/data/presets/ZynAddSubFX/Collection/0063-Matrix.xiz
new file mode 100644
index 0000000..13f1c1d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0063-Matrix.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0064-Slow Deep Matrix.xiz b/data/presets/ZynAddSubFX/Collection/0064-Slow Deep Matrix.xiz
new file mode 100644
index 0000000..25bec2c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0064-Slow Deep Matrix.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0065-Ice Field.xiz b/data/presets/ZynAddSubFX/Collection/0065-Ice Field.xiz
new file mode 100644
index 0000000..d883d0a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0065-Ice Field.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0066-Hollow Ice Field.xiz b/data/presets/ZynAddSubFX/Collection/0066-Hollow Ice Field.xiz
new file mode 100644
index 0000000..be92531
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0066-Hollow Ice Field.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0067-Smooth.xiz b/data/presets/ZynAddSubFX/Collection/0067-Smooth.xiz
new file mode 100644
index 0000000..013bf40
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0067-Smooth.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0068-Rushes.xiz b/data/presets/ZynAddSubFX/Collection/0068-Rushes.xiz
new file mode 100644
index 0000000..bb3b302
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0068-Rushes.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0069-Medium Rushes.xiz b/data/presets/ZynAddSubFX/Collection/0069-Medium Rushes.xiz
new file mode 100644
index 0000000..60880c4
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0069-Medium Rushes.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0070-Bright Rushes.xiz b/data/presets/ZynAddSubFX/Collection/0070-Bright Rushes.xiz
new file mode 100644
index 0000000..f94599b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0070-Bright Rushes.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0071-Bright Rush Long Tail.xiz b/data/presets/ZynAddSubFX/Collection/0071-Bright Rush Long Tail.xiz
new file mode 100644
index 0000000..2e58ddb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0071-Bright Rush Long Tail.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0072-Extended Rushes.xiz b/data/presets/ZynAddSubFX/Collection/0072-Extended Rushes.xiz
new file mode 100644
index 0000000..71335d8
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0072-Extended Rushes.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0073-Bright Rush Pipe.xiz b/data/presets/ZynAddSubFX/Collection/0073-Bright Rush Pipe.xiz
new file mode 100644
index 0000000..23708d2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0073-Bright Rush Pipe.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0074-Sweep Rushes.xiz b/data/presets/ZynAddSubFX/Collection/0074-Sweep Rushes.xiz
new file mode 100644
index 0000000..070ae50
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0074-Sweep Rushes.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0075-Breathy Pad.xiz b/data/presets/ZynAddSubFX/Collection/0075-Breathy Pad.xiz
new file mode 100644
index 0000000..60539b5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0075-Breathy Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0076-ReedBank.xiz b/data/presets/ZynAddSubFX/Collection/0076-ReedBank.xiz
new file mode 100644
index 0000000..6fcbdde
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0076-ReedBank.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0077-Voyager.xiz b/data/presets/ZynAddSubFX/Collection/0077-Voyager.xiz
new file mode 100644
index 0000000..4147276
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0077-Voyager.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0078-Soft Voyager.xiz b/data/presets/ZynAddSubFX/Collection/0078-Soft Voyager.xiz
new file mode 100644
index 0000000..7bb4ee2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0078-Soft Voyager.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0079-Soft Voyager Reverse.xiz b/data/presets/ZynAddSubFX/Collection/0079-Soft Voyager Reverse.xiz
new file mode 100644
index 0000000..b56ff88
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0079-Soft Voyager Reverse.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0096-Echo Choir.xiz b/data/presets/ZynAddSubFX/Collection/0080-Echo Choir.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0096-Echo Choir.xiz
rename to data/presets/ZynAddSubFX/Collection/0080-Echo Choir.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0081-Sharp.xiz b/data/presets/ZynAddSubFX/Collection/0081-Sharp.xiz
new file mode 100644
index 0000000..2895629
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0081-Sharp.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0082-Sharp and Warm.xiz b/data/presets/ZynAddSubFX/Collection/0082-Sharp and Warm.xiz
new file mode 100644
index 0000000..290e47c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0082-Sharp and Warm.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0083-Sharp and Deep.xiz b/data/presets/ZynAddSubFX/Collection/0083-Sharp and Deep.xiz
new file mode 100644
index 0000000..052a6ae
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0083-Sharp and Deep.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0099-Sharp Reed.xiz b/data/presets/ZynAddSubFX/Collection/0084-Sharp Reed.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0099-Sharp Reed.xiz
rename to data/presets/ZynAddSubFX/Collection/0084-Sharp Reed.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0085-Far Reed.xiz b/data/presets/ZynAddSubFX/Collection/0085-Far Reed.xiz
new file mode 100644
index 0000000..0c77ca7
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0085-Far Reed.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0103-Clarinet.xiz b/data/presets/ZynAddSubFX/Collection/0086-Clarinet.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0103-Clarinet.xiz
rename to data/presets/ZynAddSubFX/Collection/0086-Clarinet.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0102-Bassoon.xiz b/data/presets/ZynAddSubFX/Collection/0087-Bassoon.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0102-Bassoon.xiz
rename to data/presets/ZynAddSubFX/Collection/0087-Bassoon.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0088-Aooww.xiz b/data/presets/ZynAddSubFX/Collection/0088-Aooww.xiz
new file mode 100644
index 0000000..06baa34
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0088-Aooww.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0107-Daooww.xiz b/data/presets/ZynAddSubFX/Collection/0089-Daooww.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0107-Daooww.xiz
rename to data/presets/ZynAddSubFX/Collection/0089-Daooww.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0108-Yaooww.xiz b/data/presets/ZynAddSubFX/Collection/0090-Yaooww.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0108-Yaooww.xiz
rename to data/presets/ZynAddSubFX/Collection/0090-Yaooww.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0109-Yiee.xiz b/data/presets/ZynAddSubFX/Collection/0091-Yiee.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0109-Yiee.xiz
rename to data/presets/ZynAddSubFX/Collection/0091-Yiee.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0110-Eeoow.xiz b/data/presets/ZynAddSubFX/Collection/0092-Eeoow.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0110-Eeoow.xiz
rename to data/presets/ZynAddSubFX/Collection/0092-Eeoow.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0112-Overdrive.xiz b/data/presets/ZynAddSubFX/Collection/0093-Overdrive.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0112-Overdrive.xiz
rename to data/presets/ZynAddSubFX/Collection/0093-Overdrive.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0113-Overdrive 2.xiz b/data/presets/ZynAddSubFX/Collection/0094-Overdrive 2.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0113-Overdrive 2.xiz
rename to data/presets/ZynAddSubFX/Collection/0094-Overdrive 2.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0095-Overdrive 3.xiz b/data/presets/ZynAddSubFX/Collection/0095-Overdrive 3.xiz
new file mode 100644
index 0000000..055dde0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0095-Overdrive 3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0116-Power Guitar 1.xiz b/data/presets/ZynAddSubFX/Collection/0096-Power Guitar 1.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0116-Power Guitar 1.xiz
rename to data/presets/ZynAddSubFX/Collection/0096-Power Guitar 1.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0117-Power Guitar 2.xiz b/data/presets/ZynAddSubFX/Collection/0097-Power Guitar 2.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0117-Power Guitar 2.xiz
rename to data/presets/ZynAddSubFX/Collection/0097-Power Guitar 2.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0098-Wet Brass.xiz b/data/presets/ZynAddSubFX/Collection/0098-Wet Brass.xiz
new file mode 100644
index 0000000..f46dd44
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0098-Wet Brass.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0099-Wet Brass 2.xiz b/data/presets/ZynAddSubFX/Collection/0099-Wet Brass 2.xiz
new file mode 100644
index 0000000..1b2b6cb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0099-Wet Brass 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0123-Prophesy.xiz b/data/presets/ZynAddSubFX/Collection/0100-Prophesy.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0123-Prophesy.xiz
rename to data/presets/ZynAddSubFX/Collection/0100-Prophesy.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0101-Bottle.xiz b/data/presets/ZynAddSubFX/Collection/0101-Bottle.xiz
new file mode 100644
index 0000000..d26510c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0101-Bottle.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0102-Pan Pipe 32.xiz b/data/presets/ZynAddSubFX/Collection/0102-Pan Pipe 32.xiz
new file mode 100644
index 0000000..f3075fb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0102-Pan Pipe 32.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0103-Pan Pipe.xiz b/data/presets/ZynAddSubFX/Collection/0103-Pan Pipe.xiz
new file mode 100644
index 0000000..a7ac9c6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0103-Pan Pipe.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0104-Pan Pipe 96.xiz b/data/presets/ZynAddSubFX/Collection/0104-Pan Pipe 96.xiz
new file mode 100644
index 0000000..461c9f1
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0104-Pan Pipe 96.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0131-Lite Guitar.xiz b/data/presets/ZynAddSubFX/Collection/0105-Lite Guitar.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0131-Lite Guitar.xiz
rename to data/presets/ZynAddSubFX/Collection/0105-Lite Guitar.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0132-Trem Guitar.xiz b/data/presets/ZynAddSubFX/Collection/0106-Trem Guitar.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0132-Trem Guitar.xiz
rename to data/presets/ZynAddSubFX/Collection/0106-Trem Guitar.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0133-Smooth Guitar.xiz b/data/presets/ZynAddSubFX/Collection/0107-Smooth Guitar.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0133-Smooth Guitar.xiz
rename to data/presets/ZynAddSubFX/Collection/0107-Smooth Guitar.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0134-Nylon Guitar.xiz b/data/presets/ZynAddSubFX/Collection/0108-Nylon Guitar.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0134-Nylon Guitar.xiz
rename to data/presets/ZynAddSubFX/Collection/0108-Nylon Guitar.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0109-Tunnel Piano.xiz b/data/presets/ZynAddSubFX/Collection/0109-Tunnel Piano.xiz
new file mode 100644
index 0000000..04d23a6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0109-Tunnel Piano.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0139-Home Piano.xiz b/data/presets/ZynAddSubFX/Collection/0110-Home Piano.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0139-Home Piano.xiz
rename to data/presets/ZynAddSubFX/Collection/0110-Home Piano.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0140-Moonlight Piano.xiz b/data/presets/ZynAddSubFX/Collection/0111-Moonlight Piano.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0140-Moonlight Piano.xiz
rename to data/presets/ZynAddSubFX/Collection/0111-Moonlight Piano.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0141-Soft Piano1.xiz b/data/presets/ZynAddSubFX/Collection/0112-Soft Piano1.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0141-Soft Piano1.xiz
rename to data/presets/ZynAddSubFX/Collection/0112-Soft Piano1.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0142-Soft Piano2.xiz b/data/presets/ZynAddSubFX/Collection/0113-Soft Piano2.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0142-Soft Piano2.xiz
rename to data/presets/ZynAddSubFX/Collection/0113-Soft Piano2.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0114-Space Piano.xiz b/data/presets/ZynAddSubFX/Collection/0114-Space Piano.xiz
new file mode 100644
index 0000000..d54cda1
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0114-Space Piano.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0115-Space Voice.xiz b/data/presets/ZynAddSubFX/Collection/0115-Space Voice.xiz
new file mode 100644
index 0000000..0b09216
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0115-Space Voice.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0116-Far Space Voice.xiz b/data/presets/ZynAddSubFX/Collection/0116-Far Space Voice.xiz
new file mode 100644
index 0000000..f2e0e84
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0116-Far Space Voice.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0117-Space Voice 2.xiz b/data/presets/ZynAddSubFX/Collection/0117-Space Voice 2.xiz
new file mode 100644
index 0000000..9fe1402
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0117-Space Voice 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0149-Soft Choir.xiz b/data/presets/ZynAddSubFX/Collection/0118-Soft Choir.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0149-Soft Choir.xiz
rename to data/presets/ZynAddSubFX/Collection/0118-Soft Choir.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0119-Full Choir.xiz b/data/presets/ZynAddSubFX/Collection/0119-Full Choir.xiz
new file mode 100644
index 0000000..c86dc61
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0119-Full Choir.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0151-Soft Ahh.xiz b/data/presets/ZynAddSubFX/Collection/0120-Soft Ahh.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0151-Soft Ahh.xiz
rename to data/presets/ZynAddSubFX/Collection/0120-Soft Ahh.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0152-Breathy Ahh.xiz b/data/presets/ZynAddSubFX/Collection/0121-Breathy Ahh.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0152-Breathy Ahh.xiz
rename to data/presets/ZynAddSubFX/Collection/0121-Breathy Ahh.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0122-Another Choir.xiz b/data/presets/ZynAddSubFX/Collection/0122-Another Choir.xiz
new file mode 100644
index 0000000..9a0330c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0122-Another Choir.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0123-Light Choir.xiz b/data/presets/ZynAddSubFX/Collection/0123-Light Choir.xiz
new file mode 100644
index 0000000..f18cad5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0123-Light Choir.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0155-Super Pad.xiz b/data/presets/ZynAddSubFX/Collection/0124-Super Pad.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0155-Super Pad.xiz
rename to data/presets/ZynAddSubFX/Collection/0124-Super Pad.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0156-Hyper Pad.xiz b/data/presets/ZynAddSubFX/Collection/0125-Hyper Pad.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0156-Hyper Pad.xiz
rename to data/presets/ZynAddSubFX/Collection/0125-Hyper Pad.xiz
diff --git a/data/presets/ZynAddSubFX/Collection/0126-Hyper Matrix.xiz b/data/presets/ZynAddSubFX/Collection/0126-Hyper Matrix.xiz
new file mode 100644
index 0000000..7d66904
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0126-Hyper Matrix.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collection/0127-Extreme.xiz b/data/presets/ZynAddSubFX/Collection/0127-Extreme.xiz
new file mode 100644
index 0000000..6fb4042
Binary files /dev/null and b/data/presets/ZynAddSubFX/Collection/0127-Extreme.xiz differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0160-Wind and Surf.xiz b/data/presets/ZynAddSubFX/Collection/0128-Wind and Surf.xiz
similarity index 100%
rename from data/presets/ZynAddSubFX/Collections/WillGodfrey/0160-Wind and Surf.xiz
rename to data/presets/ZynAddSubFX/Collection/0128-Wind and Surf.xiz
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0008-Ethereal.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0008-Ethereal.xiz
deleted file mode 100644
index e54c49a..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0008-Ethereal.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0010-Trem Lead.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0010-Trem Lead.xiz
deleted file mode 100644
index 34a936d..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0010-Trem Lead.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0015-Simple Square.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0015-Simple Square.xiz
deleted file mode 100644
index 85fb4ae..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0015-Simple Square.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0016-Full Square.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0016-Full Square.xiz
deleted file mode 100644
index 9614940..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0016-Full Square.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0020-Fantasia.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0020-Fantasia.xiz
deleted file mode 100644
index e940e7d..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0020-Fantasia.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0021-Soft.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0021-Soft.xiz
deleted file mode 100644
index fd94ef1..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0021-Soft.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0028-Echo Bubbles.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0028-Echo Bubbles.xiz
deleted file mode 100644
index 99aefae..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0028-Echo Bubbles.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0036-Bright Synth.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0036-Bright Synth.xiz
deleted file mode 100644
index 3acbde0..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0036-Bright Synth.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0042-Matrix.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0042-Matrix.xiz
deleted file mode 100644
index 84cb620..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0042-Matrix.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0043-Sweep Matrix.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0043-Sweep Matrix.xiz
deleted file mode 100644
index 2a4e7f4..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0043-Sweep Matrix.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0046-Master Synth Low.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0046-Master Synth Low.xiz
deleted file mode 100644
index e3247fc..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0046-Master Synth Low.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0047-Master Synth High.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0047-Master Synth High.xiz
deleted file mode 100644
index 2022926..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0047-Master Synth High.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0057-Sub Delay.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0057-Sub Delay.xiz
deleted file mode 100644
index 930dabe..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0057-Sub Delay.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0058-Reed Organ.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0058-Reed Organ.xiz
deleted file mode 100644
index 783d893..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0058-Reed Organ.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0059-Soft Organ.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0059-Soft Organ.xiz
deleted file mode 100644
index a82e7d4..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0059-Soft Organ.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0060-Thin Pipe.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0060-Thin Pipe.xiz
deleted file mode 100644
index aa86c2e..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0060-Thin Pipe.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0061-Great Organ.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0061-Great Organ.xiz
deleted file mode 100644
index dcebee3..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0061-Great Organ.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0073-Variable Reed.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0073-Variable Reed.xiz
deleted file mode 100644
index 480b239..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0073-Variable Reed.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0075-Smooth.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0075-Smooth.xiz
deleted file mode 100644
index beb54c7..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0075-Smooth.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0077-Whistle.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0077-Whistle.xiz
deleted file mode 100644
index 22d6630..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0077-Whistle.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0078-Ghost Whistle.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0078-Ghost Whistle.xiz
deleted file mode 100644
index 9b8c13f..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0078-Ghost Whistle.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0079-Ice Field.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0079-Ice Field.xiz
deleted file mode 100644
index 653f4e5..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0079-Ice Field.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0080-Hollow Ice Field.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0080-Hollow Ice Field.xiz
deleted file mode 100644
index 5d6f366..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0080-Hollow Ice Field.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0081-Beyond.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0081-Beyond.xiz
deleted file mode 100644
index b3b8c0c..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0081-Beyond.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0083-Sweep Pad.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0083-Sweep Pad.xiz
deleted file mode 100644
index dd7a2e6..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0083-Sweep Pad.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0084-Breathy Pad.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0084-Breathy Pad.xiz
deleted file mode 100644
index 8250e59..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0084-Breathy Pad.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0085-Bottle.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0085-Bottle.xiz
deleted file mode 100644
index f41b88c..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0085-Bottle.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0086-ReedBank.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0086-ReedBank.xiz
deleted file mode 100644
index a2d317f..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0086-ReedBank.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0087-Sweep Rushes.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0087-Sweep Rushes.xiz
deleted file mode 100644
index f673d5e..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0087-Sweep Rushes.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0088-Rushes.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0088-Rushes.xiz
deleted file mode 100644
index 6070f0d..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0088-Rushes.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0089-Medium Rushes.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0089-Medium Rushes.xiz
deleted file mode 100644
index 277dbe7..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0089-Medium Rushes.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0090-Bright Rushes.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0090-Bright Rushes.xiz
deleted file mode 100644
index 9215de1..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0090-Bright Rushes.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0091-Bright Rush Pipe.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0091-Bright Rush Pipe.xiz
deleted file mode 100644
index 2e149d8..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0091-Bright Rush Pipe.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0092-Bright Rush Long Tail.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0092-Bright Rush Long Tail.xiz
deleted file mode 100644
index 9e0361a..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0092-Bright Rush Long Tail.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0093-Voyager.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0093-Voyager.xiz
deleted file mode 100644
index 71863f2..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0093-Voyager.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0094-Soft Voyager.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0094-Soft Voyager.xiz
deleted file mode 100644
index 78b6d03..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0094-Soft Voyager.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0095-Soft Voyager Reverse.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0095-Soft Voyager Reverse.xiz
deleted file mode 100644
index 460cef2..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0095-Soft Voyager Reverse.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0097-Sharp.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0097-Sharp.xiz
deleted file mode 100644
index a1a7384..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0097-Sharp.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0098-Sharp and Deep.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0098-Sharp and Deep.xiz
deleted file mode 100644
index ce16f0a..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0098-Sharp and Deep.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0100-Far Reed.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0100-Far Reed.xiz
deleted file mode 100644
index 9f41c3a..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0100-Far Reed.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0106-Aooww.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0106-Aooww.xiz
deleted file mode 100644
index 200f8ba..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0106-Aooww.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0114-Overdrive 3.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0114-Overdrive 3.xiz
deleted file mode 100644
index 69b2aac..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0114-Overdrive 3.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0120-Wet Brass.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0120-Wet Brass.xiz
deleted file mode 100644
index b8d88f2..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0120-Wet Brass.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0125-Pan Pipe 32.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0125-Pan Pipe 32.xiz
deleted file mode 100644
index 23c1d5f..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0125-Pan Pipe 32.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0126-Pan Pipe.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0126-Pan Pipe.xiz
deleted file mode 100644
index 8d64bab..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0126-Pan Pipe.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0127-Pan Pipe 96.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0127-Pan Pipe 96.xiz
deleted file mode 100644
index cd3dd87..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0127-Pan Pipe 96.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0143-Space Piano.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0143-Space Piano.xiz
deleted file mode 100644
index 4508092..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0143-Space Piano.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0146-Space Voice.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0146-Space Voice.xiz
deleted file mode 100644
index 771050c..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0146-Space Voice.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0147-Space Voice 2.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0147-Space Voice 2.xiz
deleted file mode 100644
index 961dc90..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0147-Space Voice 2.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0150-Full Choir.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0150-Full Choir.xiz
deleted file mode 100644
index 86dfda6..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0150-Full Choir.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0157-Hyper Matrix.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0157-Hyper Matrix.xiz
deleted file mode 100644
index 2cf15ec..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0157-Hyper Matrix.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0158-Extreme.xiz b/data/presets/ZynAddSubFX/Collections/WillGodfrey/0158-Extreme.xiz
deleted file mode 100644
index 144215f..0000000
Binary files a/data/presets/ZynAddSubFX/Collections/WillGodfrey/0158-Extreme.xiz and /dev/null differ
diff --git a/data/presets/ZynAddSubFX/Collections/WillGodfrey/README b/data/presets/ZynAddSubFX/Collections/WillGodfrey/README
deleted file mode 100644
index cd5cba2..0000000
--- a/data/presets/ZynAddSubFX/Collections/WillGodfrey/README
+++ /dev/null
@@ -1,4 +0,0 @@
-Downloaded at http://www.musically.me.uk/Collection.zip on May 4th 2009.
-
-License: GPLv2 or later (as specified at http://www.musically.me.uk/stuff.html)
-
diff --git a/data/presets/ZynAddSubFX/Companion/.bankdir b/data/presets/ZynAddSubFX/Companion/.bankdir
new file mode 100644
index 0000000..e69de29
diff --git a/data/presets/ZynAddSubFX/Companion/0004-Muffled Bells.xiz b/data/presets/ZynAddSubFX/Companion/0004-Muffled Bells.xiz
new file mode 100644
index 0000000..0dc90b7
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0004-Muffled Bells.xiz
@@ -0,0 +1,1616 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="1" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Muffled Bells</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments">Originally derived from Paul's Bells 3</string>
+<par name="type" value="2" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="no" />
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="yes" />
+<PAD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="mode" value="0" />
+<par name="bandwidth" value="555" />
+<par name="bandwidth_scale" value="0" />
+<HARMONIC_PROFILE>
+<par name="base_type" value="0" />
+<par name="base_par1" value="100" />
+<par name="frequency_multiplier" value="0" />
+<par name="modulator_par1" value="0" />
+<par name="modulator_frequency" value="30" />
+<par name="width" value="127" />
+<par name="amplitude_multiplier_type" value="0" />
+<par name="amplitude_multiplier_mode" value="2" />
+<par name="amplitude_multiplier_par1" value="81" />
+<par name="amplitude_multiplier_par2" value="43" />
+<par_bool name="autoscale" value="yes" />
+<par name="one_half" value="0" />
+</HARMONIC_PROFILE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="4" />
+<par name="base_function_par" value="68" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="82" />
+<par name="wave_shaping_function" value="1" />
+<par name="filter_type" value="13" />
+<par name="filter_par1" value="36" />
+<par name="filter_par2" value="73" />
+<par name="filter_before_wave_shaping" value="1" />
+<par name="spectrum_adjust_type" value="1" />
+<par name="spectrum_adjust_par" value="44" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="3" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<HARMONIC_POSITION>
+<par name="type" value="4" />
+<par name="parameter1" value="240" />
+<par name="parameter2" value="107" />
+<par name="parameter3" value="0" />
+</HARMONIC_POSITION>
+<SAMPLE_QUALITY>
+<par name="samplesize" value="3" />
+<par name="basenote" value="5" />
+<par name="octaves" value="3" />
+<par name="samples_per_octave" value="2" />
+</SAMPLE_QUALITY>
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="80" />
+<par name="punch_strength" value="45" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="39" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="76" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="68" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="68" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="76" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="fixed_freq" value="0" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8220" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="3" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.621" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="43" />
+<par name="velocity_sensing" value="95" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="57" />
+<par name="q" value="64" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="88" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="88" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+</PAD_SYNTH_PARAMETERS>
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="7" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="72" />
+</par_no>
+<par_no id="10">
+<par name="par" value="3" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="64" />
+</par_no>
+<par_no id="13">
+<par name="par" value="62" />
+</par_no>
+<par_no id="14">
+<par name="par" value="1" />
+</par_no>
+<par_no id="16">
+<par name="par" value="64" />
+</par_no>
+<par_no id="17">
+<par name="par" value="64" />
+</par_no>
+<par_no id="18">
+<par name="par" value="64" />
+</par_no>
+<par_no id="21">
+<par name="par" value="64" />
+</par_no>
+<par_no id="22">
+<par name="par" value="64" />
+</par_no>
+<par_no id="23">
+<par name="par" value="64" />
+</par_no>
+<par_no id="26">
+<par name="par" value="64" />
+</par_no>
+<par_no id="27">
+<par name="par" value="64" />
+</par_no>
+<par_no id="28">
+<par name="par" value="64" />
+</par_no>
+<par_no id="31">
+<par name="par" value="64" />
+</par_no>
+<par_no id="32">
+<par name="par" value="64" />
+</par_no>
+<par_no id="33">
+<par name="par" value="64" />
+</par_no>
+<par_no id="36">
+<par name="par" value="64" />
+</par_no>
+<par_no id="37">
+<par name="par" value="64" />
+</par_no>
+<par_no id="38">
+<par name="par" value="64" />
+</par_no>
+<par_no id="41">
+<par name="par" value="64" />
+</par_no>
+<par_no id="42">
+<par name="par" value="64" />
+</par_no>
+<par_no id="43">
+<par name="par" value="64" />
+</par_no>
+<par_no id="46">
+<par name="par" value="64" />
+</par_no>
+<par_no id="47">
+<par name="par" value="64" />
+</par_no>
+<par_no id="48">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="1" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="69" />
+</par_no>
+<par_no id="3">
+<par name="par" value="35" />
+</par_no>
+<par_no id="7">
+<par name="par" value="127" />
+</par_no>
+<par_no id="9">
+<par name="par" value="71" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0006-Tinkle Bell.xiz b/data/presets/ZynAddSubFX/Companion/0006-Tinkle Bell.xiz
new file mode 100644
index 0000000..09027a5
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0006-Tinkle Bell.xiz
@@ -0,0 +1,7207 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Tinkle Bell</string>
+<string name="author">Will Godfrey
+GPL V2 or later</string>
+<string name="comments">Derived from Benji Flamings Mellow Bell
+Silver Bell with a little extra zing :)</string>
+<par name="type" value="11" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name">Benji Bell</string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="76" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="70" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="yes" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="71" />
+<par name="R_dt" value="61" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="0" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="71" />
+<par name="val" value="0" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="61" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="15" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="65" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="65" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="15" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.614" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="32" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="127" />
+<par name="q" value="33" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="43" />
+<par name="D_dt" value="97" />
+<par name="R_dt" value="101" />
+<par name="A_val" value="107" />
+<par name="D_val" value="87" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="107" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="43" />
+<par name="val" value="87" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="97" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="101" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="9" />
+<par name="base_function_par" value="85" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="0" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="111" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="1" />
+<par name="spectrum_adjust_par" value="0" />
+<par name="rand" value="0" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="23" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="33" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8084" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="yes" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.22" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="0" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="121" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="57" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="70" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="62" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="62" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="7710" />
+<par name="coarse_detune" value="1024" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="yes" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.228" />
+<par name="intensity" value="29" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="0" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="82" />
+<par name="volume" value="77" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="9252" />
+<par name="coarse_detune" value="2048" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="yes" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="1" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="69" />
+</par_no>
+<par_no id="3">
+<par name="par" value="35" />
+</par_no>
+<par_no id="7">
+<par name="par" value="127" />
+</par_no>
+<par_no id="9">
+<par name="par" value="71" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="2" />
+<par name="preset" value="5" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="52" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="44" />
+</par_no>
+<par_no id="3">
+<par name="par" value="17" />
+</par_no>
+<par_no id="5">
+<par name="par" value="82" />
+</par_no>
+<par_no id="6">
+<par name="par" value="24" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0010-Metal Sweep.xiz b/data/presets/ZynAddSubFX/Companion/0010-Metal Sweep.xiz
new file mode 100644
index 0000000..9fb12f9
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0010-Metal Sweep.xiz
@@ -0,0 +1,7204 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Metal Sweep</string>
+<string name="author">Will J Godfrey
+GPL V2 or later</string>
+<string name="comments">Derived from Paul's Plucked1
+
+Responds to pitch modulation</string>
+<par name="type" value="12" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="80" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="94" />
+<par name="punch_strength" value="42" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="65" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="71" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="71" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="26" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="65" />
+<par name="A_val" value="46" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="46" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="65" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.583" />
+<par name="intensity" value="47" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="47" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="57" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="65" />
+<par name="q" value="28" />
+<par name="stages" value="3" />
+<par name="freq_track" value="90" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="yes" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="33" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="23" />
+<par name="D_dt" value="82" />
+<par name="R_dt" value="102" />
+<par name="A_val" value="117" />
+<par name="D_val" value="110" />
+<par name="S_val" value="64" />
+<par name="R_val" value="53" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="102" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="94" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="102" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="4" />
+<par name="base_function_par" value="43" />
+<par name="base_function_modulation" value="2" />
+<par name="base_function_modulation_par1" value="20" />
+<par name="base_function_modulation_par2" value="45" />
+<par name="base_function_modulation_par3" value="79" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="89" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="11" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="1" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="40" />
+<par name="rand" value="0" />
+<par name="amp_rand_type" value="1" />
+<par name="amp_rand_power" value="41" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="1" />
+<par name="adaptive_harmonics_base_frequency" value="99" />
+<par name="adaptive_harmonics_power" value="65" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="61" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="10986" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="24" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="9348" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="91" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8288" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="91" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="7324" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="53" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="5493" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="2" />
+<par name="preset" value="6" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="60" />
+</par_no>
+<par_no id="2">
+<par name="par" value="46" />
+</par_no>
+<par_no id="3">
+<par name="par" value="118" />
+</par_no>
+<par_no id="4">
+<par name="par" value="100" />
+</par_no>
+<par_no id="5">
+<par name="par" value="68" />
+</par_no>
+<par_no id="6">
+<par name="par" value="18" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0011-Slow Steel.xiz b/data/presets/ZynAddSubFX/Companion/0011-Slow Steel.xiz
new file mode 100644
index 0000000..abd0f74
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0011-Slow Steel.xiz
@@ -0,0 +1,8065 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Slow Steel</string>
+<string name="author">Will J Godfrey
+GPL V2 or later</string>
+<string name="comments">Derived from Pauls Clean Guitar1</string>
+<par name="type" value="4" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="69" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="88" />
+<par name="punch_strength" value="50" />
+<par name="punch_time" value="66" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="94" />
+<par name="R_dt" value="84" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="50" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="94" />
+<par name="val" value="50" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="84" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.564" />
+<par name="intensity" value="26" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="91" />
+<par name="q" value="24" />
+<par name="stages" value="1" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="yes" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="74" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="95" />
+<par name="D_val" value="59" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="48" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="63" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="2" />
+<par name="base_function_par" value="108" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="105" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="0" />
+<par name="amp_rand_type" value="1" />
+<par name="amp_rand_power" value="48" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="34" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="5204" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="48" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="6264" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="7131" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="71" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8673" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="88" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="9926" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="yes" />
+<SUB_SYNTH_PARAMETERS>
+<par name="num_stages" value="2" />
+<par name="harmonic_mag_type" value="0" />
+<par name="start" value="1" />
+<HARMONICS>
+<HARMONIC id="0">
+<par name="mag" value="127" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="1">
+<par name="mag" value="16" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="7" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="7">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="9">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="10">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="11">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="12">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="13">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="14">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="15">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="16">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="17">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="18">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="19">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="20">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="21">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="22">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="23">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="24">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="25">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="26">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="27">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="28">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="29">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="30">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="31">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="32">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="33">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="34">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="35">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="36">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="37">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="38">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="39">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="40">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="41">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="42">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="43">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="44">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="45">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="46">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="47">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="48">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="49">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="50">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="51">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="52">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="53">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="54">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="55">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="56">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="57">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="58">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="59">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="60">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="61">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="62">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="63">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+</HARMONICS>
+<AMPLITUDE_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="volume" value="74" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="127" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="109" />
+<par name="R_dt" value="89" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="81" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="109" />
+<par name="val" value="81" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="89" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="40" />
+<par name="bandwidth_scale" value="64" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="band_width_envelope_enabled" value="no" />
+<BANDWIDTH_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="100" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="100" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</BANDWIDTH_ENVELOPE>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par_bool name="enabled" value="no" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="80" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par name="filter_velocity_sensing" value="64" />
+<par name="filter_velocity_sensing_amplitude" value="64" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+</FILTER_PARAMETERS>
+</SUB_SYNTH_PARAMETERS>
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="1" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="104" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="69" />
+</par_no>
+<par_no id="3">
+<par name="par" value="35" />
+</par_no>
+<par_no id="7">
+<par name="par" value="127" />
+</par_no>
+<par_no id="9">
+<par name="par" value="71" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="7" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="72" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="101" />
+</par_no>
+<par_no id="12">
+<par name="par" value="64" />
+</par_no>
+<par_no id="13">
+<par name="par" value="62" />
+</par_no>
+<par_no id="16">
+<par name="par" value="64" />
+</par_no>
+<par_no id="17">
+<par name="par" value="64" />
+</par_no>
+<par_no id="18">
+<par name="par" value="64" />
+</par_no>
+<par_no id="21">
+<par name="par" value="64" />
+</par_no>
+<par_no id="22">
+<par name="par" value="64" />
+</par_no>
+<par_no id="23">
+<par name="par" value="64" />
+</par_no>
+<par_no id="26">
+<par name="par" value="64" />
+</par_no>
+<par_no id="27">
+<par name="par" value="64" />
+</par_no>
+<par_no id="28">
+<par name="par" value="64" />
+</par_no>
+<par_no id="31">
+<par name="par" value="64" />
+</par_no>
+<par_no id="32">
+<par name="par" value="64" />
+</par_no>
+<par_no id="33">
+<par name="par" value="64" />
+</par_no>
+<par_no id="36">
+<par name="par" value="64" />
+</par_no>
+<par_no id="37">
+<par name="par" value="64" />
+</par_no>
+<par_no id="38">
+<par name="par" value="64" />
+</par_no>
+<par_no id="41">
+<par name="par" value="64" />
+</par_no>
+<par_no id="42">
+<par name="par" value="64" />
+</par_no>
+<par_no id="43">
+<par name="par" value="64" />
+</par_no>
+<par_no id="46">
+<par name="par" value="64" />
+</par_no>
+<par_no id="47">
+<par name="par" value="64" />
+</par_no>
+<par_no id="48">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0013-Bright Metal.xiz b/data/presets/ZynAddSubFX/Companion/0013-Bright Metal.xiz
new file mode 100644
index 0000000..ffcd0c5
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0013-Bright Metal.xiz
@@ -0,0 +1,7281 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Bright Metal</string>
+<string name="author">Will Godfrey
+GPL V 2 or later</string>
+<string name="comments">Works best mid range
+high velocity</string>
+<par name="type" value="11" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="70" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="yes" />
+<par name="A_dt" value="1" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="37" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="85" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="1" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="85" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="37" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="41" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="27" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="53" />
+<par name="velocity_sensing" value="93" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="99" />
+<par name="q" value="24" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="28" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="65" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="65" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="28" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="4" />
+<par name="base_function_par" value="78" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="42" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="82" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="5493" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="yes" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.599" />
+<par name="intensity" value="25" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="4" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="121" />
+<par name="wave_shaping_function" value="11" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="49" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="7035" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="yes" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.614" />
+<par name="intensity" value="21" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="35" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="13" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="87" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="15360" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="4" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="36" />
+</par_no>
+<par_no id="5">
+<par name="par" value="64" />
+</par_no>
+<par_no id="6">
+<par name="par" value="110" />
+</par_no>
+<par_no id="7">
+<par name="par" value="64" />
+</par_no>
+<par_no id="8">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="2" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="50" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="69" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="127" />
+</par_no>
+<par_no id="8">
+<par name="par" value="75" />
+</par_no>
+<par_no id="9">
+<par name="par" value="78" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="85" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="7" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="73" />
+</par_no>
+<par_no id="10">
+<par name="par" value="3" />
+</par_no>
+<par_no id="11">
+<par name="par" value="114" />
+</par_no>
+<par_no id="12">
+<par name="par" value="64" />
+</par_no>
+<par_no id="13">
+<par name="par" value="50" />
+</par_no>
+<par_no id="16">
+<par name="par" value="64" />
+</par_no>
+<par_no id="17">
+<par name="par" value="64" />
+</par_no>
+<par_no id="18">
+<par name="par" value="64" />
+</par_no>
+<par_no id="21">
+<par name="par" value="64" />
+</par_no>
+<par_no id="22">
+<par name="par" value="64" />
+</par_no>
+<par_no id="23">
+<par name="par" value="64" />
+</par_no>
+<par_no id="26">
+<par name="par" value="64" />
+</par_no>
+<par_no id="27">
+<par name="par" value="64" />
+</par_no>
+<par_no id="28">
+<par name="par" value="64" />
+</par_no>
+<par_no id="31">
+<par name="par" value="64" />
+</par_no>
+<par_no id="32">
+<par name="par" value="64" />
+</par_no>
+<par_no id="33">
+<par name="par" value="64" />
+</par_no>
+<par_no id="36">
+<par name="par" value="64" />
+</par_no>
+<par_no id="37">
+<par name="par" value="64" />
+</par_no>
+<par_no id="38">
+<par name="par" value="64" />
+</par_no>
+<par_no id="41">
+<par name="par" value="64" />
+</par_no>
+<par_no id="42">
+<par name="par" value="64" />
+</par_no>
+<par_no id="43">
+<par name="par" value="64" />
+</par_no>
+<par_no id="46">
+<par name="par" value="64" />
+</par_no>
+<par_no id="47">
+<par name="par" value="64" />
+</par_no>
+<par_no id="48">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0016-Soft Metal.xiz b/data/presets/ZynAddSubFX/Companion/0016-Soft Metal.xiz
new file mode 100644
index 0000000..6baaa46
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0016-Soft Metal.xiz
@@ -0,0 +1,7262 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Soft Metal</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments">Best for mid and low pitches</string>
+<par name="type" value="12" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="84" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="50" />
+<par name="punch_time" value="66" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="28" />
+<par name="D_dt" value="102" />
+<par name="R_dt" value="68" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="28" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="102" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="68" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.564" />
+<par name="intensity" value="26" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="91" />
+<par name="q" value="24" />
+<par name="stages" value="1" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="yes" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="74" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="95" />
+<par name="D_val" value="59" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="63" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="60" />
+<par name="val" value="92" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="77" />
+<par name="val" value="79" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="2" />
+<par name="base_function_par" value="108" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="105" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="0" />
+<par name="amp_rand_type" value="1" />
+<par name="amp_rand_power" value="57" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="65" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8170" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="52" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="6264" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="51" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="7131" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="54" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8673" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="61" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="9926" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="7" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="72" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="64" />
+</par_no>
+<par_no id="13">
+<par name="par" value="64" />
+</par_no>
+<par_no id="15">
+<par name="par" value="3" />
+</par_no>
+<par_no id="16">
+<par name="par" value="65" />
+</par_no>
+<par_no id="17">
+<par name="par" value="64" />
+</par_no>
+<par_no id="18">
+<par name="par" value="90" />
+</par_no>
+<par_no id="19">
+<par name="par" value="1" />
+</par_no>
+<par_no id="21">
+<par name="par" value="64" />
+</par_no>
+<par_no id="22">
+<par name="par" value="64" />
+</par_no>
+<par_no id="23">
+<par name="par" value="64" />
+</par_no>
+<par_no id="26">
+<par name="par" value="64" />
+</par_no>
+<par_no id="27">
+<par name="par" value="64" />
+</par_no>
+<par_no id="28">
+<par name="par" value="64" />
+</par_no>
+<par_no id="31">
+<par name="par" value="64" />
+</par_no>
+<par_no id="32">
+<par name="par" value="64" />
+</par_no>
+<par_no id="33">
+<par name="par" value="64" />
+</par_no>
+<par_no id="36">
+<par name="par" value="64" />
+</par_no>
+<par_no id="37">
+<par name="par" value="64" />
+</par_no>
+<par_no id="38">
+<par name="par" value="64" />
+</par_no>
+<par_no id="41">
+<par name="par" value="64" />
+</par_no>
+<par_no id="42">
+<par name="par" value="64" />
+</par_no>
+<par_no id="43">
+<par name="par" value="64" />
+</par_no>
+<par_no id="46">
+<par name="par" value="64" />
+</par_no>
+<par_no id="47">
+<par name="par" value="64" />
+</par_no>
+<par_no id="48">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0019-Warm Square Swell.xiz b/data/presets/ZynAddSubFX/Companion/0019-Warm Square Swell.xiz
new file mode 100644
index 0000000..de21b07
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0019-Warm Square Swell.xiz
@@ -0,0 +1,7219 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Warm Square Swell</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments"></string>
+<par name="type" value="12" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="1" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="13" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="98" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="79" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="86" />
+<par name="D_dt" value="59" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="88" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="86" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="59" />
+<par name="val" value="88" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="1" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="36" />
+<par name="D_dt" value="96" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="19" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="36" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="96" />
+<par name="val" value="19" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="2" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="45" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="127" />
+</par_no>
+<par_no id="8">
+<par name="par" value="75" />
+</par_no>
+<par_no id="9">
+<par name="par" value="78" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="85" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="62" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0021-Bubbles.xiz b/data/presets/ZynAddSubFX/Companion/0021-Bubbles.xiz
new file mode 100644
index 0000000..663758d
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0021-Bubbles.xiz
@@ -0,0 +1,7175 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Bubbles</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments"></string>
+<par name="type" value="12" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="70" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="15" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="15" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="15360" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="78" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="3" />
+<par name="unison_frequency_spread" value="61" />
+<par name="unison_stereo_spread" value="109" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="yes" />
+<par_bool name="filter_bypass" value="yes" />
+<par name="fm_enabled" value="4" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="1" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="121" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="1" />
+<par name="type" value="0" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="yes" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="93" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="93" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="9065" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="63" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0024-Solo.xiz b/data/presets/ZynAddSubFX/Companion/0024-Solo.xiz
new file mode 100644
index 0000000..6ad1bfe
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0024-Solo.xiz
@@ -0,0 +1,7206 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Solo</string>
+<string name="author">Will J Godfrey
+GPL V2 or later</string>
+<string name="comments"></string>
+<par name="type" value="11" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="95" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="38" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="38" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.596" />
+<par name="intensity" value="44" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="12" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="83" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="16" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="13" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="8" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="25" />
+<par name="filter_par2" value="52" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="62" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="102" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="88" />
+<par name="phase" value="94" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="84" />
+<par name="phase" value="0" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="98" />
+<par name="phase" value="62" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="79" />
+<par name="phase" value="20" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="97" />
+<par name="phase" value="96" />
+</HARMONIC>
+<HARMONIC id="7">
+<par name="mag" value="103" />
+<par name="phase" value="52" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="111" />
+<par name="phase" value="40" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0025-Wind Whistle.xiz b/data/presets/ZynAddSubFX/Companion/0025-Wind Whistle.xiz
new file mode 100644
index 0000000..f503e33
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0025-Wind Whistle.xiz
@@ -0,0 +1,8098 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Wind Whistle</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments">Works best with middle to upper pitches</string>
+<par name="type" value="13" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="96" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="66" />
+<par name="D_dt" value="0" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="66" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="1024" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.451" />
+<par name="intensity" value="36" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="yes" />
+<SUB_SYNTH_PARAMETERS>
+<par name="num_stages" value="1" />
+<par name="harmonic_mag_type" value="0" />
+<par name="start" value="1" />
+<HARMONICS>
+<HARMONIC id="0">
+<par name="mag" value="90" />
+<par name="relbw" value="86" />
+</HARMONIC>
+<HARMONIC id="1">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="7">
+<par name="mag" value="0" />
+<par name="relbw" value="69" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="0" />
+<par name="relbw" value="63" />
+</HARMONIC>
+<HARMONIC id="9">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="10">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="11">
+<par name="mag" value="0" />
+<par name="relbw" value="65" />
+</HARMONIC>
+<HARMONIC id="12">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="13">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="14">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="15">
+<par name="mag" value="19" />
+<par name="relbw" value="102" />
+</HARMONIC>
+<HARMONIC id="16">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="17">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="18">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="19">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="20">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="21">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="22">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="23">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="24">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="25">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="26">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="27">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="28">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="29">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="30">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="31">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="32">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="33">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="34">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="35">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="36">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="37">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="38">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="39">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="40">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="41">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="42">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="43">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="44">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="45">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="46">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="47">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="48">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="49">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="50">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="51">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="52">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="53">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="54">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="55">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="56">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="57">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="58">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="59">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="60">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="61">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="62">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="63">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+</HARMONICS>
+<AMPLITUDE_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="volume" value="95" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="71" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="64" />
+<par name="D_dt" value="84" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="74" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="64" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="84" />
+<par name="val" value="74" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="80" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="1024" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="40" />
+<par name="bandwidth_scale" value="64" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="band_width_envelope_enabled" value="no" />
+<BANDWIDTH_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="100" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="100" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</BANDWIDTH_ENVELOPE>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par_bool name="enabled" value="yes" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par name="filter_velocity_sensing" value="64" />
+<par name="filter_velocity_sensing_amplitude" value="64" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+</FILTER_PARAMETERS>
+</SUB_SYNTH_PARAMETERS>
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="3" />
+<par name="preset" value="3" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="64" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="26" />
+</par_no>
+<par_no id="5">
+<par name="par" value="42" />
+</par_no>
+<par_no id="6">
+<par name="par" value="115" />
+</par_no>
+<par_no id="7">
+<par name="par" value="18" />
+</par_no>
+<par_no id="8">
+<par name="par" value="90" />
+</par_no>
+<par_no id="9">
+<par name="par" value="127" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="7" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="71" />
+</par_no>
+<par_no id="10">
+<par name="par" value="3" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="64" />
+</par_no>
+<par_no id="13">
+<par name="par" value="64" />
+</par_no>
+<par_no id="16">
+<par name="par" value="64" />
+</par_no>
+<par_no id="17">
+<par name="par" value="64" />
+</par_no>
+<par_no id="18">
+<par name="par" value="64" />
+</par_no>
+<par_no id="21">
+<par name="par" value="64" />
+</par_no>
+<par_no id="22">
+<par name="par" value="64" />
+</par_no>
+<par_no id="23">
+<par name="par" value="64" />
+</par_no>
+<par_no id="26">
+<par name="par" value="64" />
+</par_no>
+<par_no id="27">
+<par name="par" value="64" />
+</par_no>
+<par_no id="28">
+<par name="par" value="64" />
+</par_no>
+<par_no id="31">
+<par name="par" value="64" />
+</par_no>
+<par_no id="32">
+<par name="par" value="64" />
+</par_no>
+<par_no id="33">
+<par name="par" value="64" />
+</par_no>
+<par_no id="36">
+<par name="par" value="64" />
+</par_no>
+<par_no id="37">
+<par name="par" value="64" />
+</par_no>
+<par_no id="38">
+<par name="par" value="64" />
+</par_no>
+<par_no id="41">
+<par name="par" value="64" />
+</par_no>
+<par_no id="42">
+<par name="par" value="64" />
+</par_no>
+<par_no id="43">
+<par name="par" value="64" />
+</par_no>
+<par_no id="46">
+<par name="par" value="64" />
+</par_no>
+<par_no id="47">
+<par name="par" value="64" />
+</par_no>
+<par_no id="48">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0038-Smooth Saw.xiz b/data/presets/ZynAddSubFX/Companion/0038-Smooth Saw.xiz
new file mode 100644
index 0000000..c01c90f
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0038-Smooth Saw.xiz
@@ -0,0 +1,1565 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="1" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Smooth Saw</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments"></string>
+<par name="type" value="13" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="no" />
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="yes" />
+<PAD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="mode" value="0" />
+<par name="bandwidth" value="499" />
+<par name="bandwidth_scale" value="0" />
+<HARMONIC_PROFILE>
+<par name="base_type" value="0" />
+<par name="base_par1" value="91" />
+<par name="frequency_multiplier" value="114" />
+<par name="modulator_par1" value="0" />
+<par name="modulator_frequency" value="30" />
+<par name="width" value="127" />
+<par name="amplitude_multiplier_type" value="0" />
+<par name="amplitude_multiplier_mode" value="0" />
+<par name="amplitude_multiplier_par1" value="81" />
+<par name="amplitude_multiplier_par2" value="65" />
+<par_bool name="autoscale" value="yes" />
+<par name="one_half" value="0" />
+</HARMONIC_PROFILE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="4" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="1" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="127" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<HARMONIC_POSITION>
+<par name="type" value="0" />
+<par name="parameter1" value="65" />
+<par name="parameter2" value="65" />
+<par name="parameter3" value="0" />
+</HARMONIC_POSITION>
+<SAMPLE_QUALITY>
+<par name="samplesize" value="3" />
+<par name="basenote" value="4" />
+<par name="octaves" value="3" />
+<par name="samples_per_octave" value="2" />
+</SAMPLE_QUALITY>
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="16" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="16" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="fixed_freq" value="0" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.571" />
+<par name="intensity" value="17" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="86" />
+<par name="q" value="50" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+</PAD_SYNTH_PARAMETERS>
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="3" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="64" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="50" />
+</par_no>
+<par_no id="5">
+<par name="par" value="90" />
+</par_no>
+<par_no id="6">
+<par name="par" value="40" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="64" />
+</par_no>
+<par_no id="9">
+<par name="par" value="119" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="92" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0041-Buzz.xiz b/data/presets/ZynAddSubFX/Companion/0041-Buzz.xiz
new file mode 100644
index 0000000..8e900a3
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0041-Buzz.xiz
@@ -0,0 +1,7178 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Buzz</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments"></string>
+<par name="type" value="13" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="93" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="104" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="104" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="127" />
+<par name="q" value="0" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="3" />
+<par name="unison_frequency_spread" value="30" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="4" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="7" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="107" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="3" />
+<par name="preset" value="7" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="64" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="53" />
+</par_no>
+<par_no id="3">
+<par name="par" value="34" />
+</par_no>
+<par_no id="4">
+<par name="par" value="1" />
+</par_no>
+<par_no id="5">
+<par name="par" value="94" />
+</par_no>
+<par_no id="6">
+<par name="par" value="35" />
+</par_no>
+<par_no id="7">
+<par name="par" value="3" />
+</par_no>
+<par_no id="8">
+<par name="par" value="54" />
+</par_no>
+<par_no id="11">
+<par name="par" value="1" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0045-Bite.xiz b/data/presets/ZynAddSubFX/Companion/0045-Bite.xiz
new file mode 100644
index 0000000..bb28ac1
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0045-Bite.xiz
@@ -0,0 +1,8602 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="1" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Bite</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments"></string>
+<par name="type" value="13" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="73" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="39" />
+<par name="D_dt" value="0" />
+<par name="R_dt" value="89" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="39" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="89" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="1024" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.451" />
+<par name="intensity" value="36" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="yes" />
+<PAD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="mode" value="0" />
+<par name="bandwidth" value="454" />
+<par name="bandwidth_scale" value="0" />
+<HARMONIC_PROFILE>
+<par name="base_type" value="0" />
+<par name="base_par1" value="57" />
+<par name="frequency_multiplier" value="21" />
+<par name="modulator_par1" value="52" />
+<par name="modulator_frequency" value="32" />
+<par name="width" value="83" />
+<par name="amplitude_multiplier_type" value="3" />
+<par name="amplitude_multiplier_mode" value="0" />
+<par name="amplitude_multiplier_par1" value="75" />
+<par name="amplitude_multiplier_par2" value="119" />
+<par_bool name="autoscale" value="yes" />
+<par name="one_half" value="0" />
+</HARMONIC_PROFILE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="10" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="127" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="119" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="115" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="109" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="94" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="49" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="32" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="24" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="23" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="23" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="35" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="69" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="73" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="49" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="51" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="79" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="79" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="48" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="36" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="34" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="39" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="53" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="90" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="103" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="105" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="90" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="84" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="81" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="78" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="75" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="66" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="45" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="40" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="47" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="72" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="52" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="41" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="50" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="35" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="29" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="27" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="27" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="31" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="42" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="84" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="97" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="92" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="91" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="90" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="89" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="87" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="81" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="66" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="30" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="15" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="9" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="7" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="6" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="6" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="7" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="10" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="16" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="19" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="20" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="20" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="20" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="19" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="21" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="25" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="37" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="42" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="46" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="51" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="53" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="55" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="55" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="55" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="57" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="59" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="63" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="75" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="80" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="83" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="86" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="92" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="109" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="115" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="118" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="118" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="115" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="109" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="92" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="84" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="78" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="68" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="65" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="63" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="62" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="59" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="52" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="36" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="30" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="29" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="32" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="42" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="67" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="77" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="81" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="82" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="80" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="75" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="63" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="33" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="30" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="54" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="35" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="28" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="25" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="26" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="29" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="38" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="62" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="93" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="102" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="96" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="69" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="58" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="54" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="54" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="57" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="57" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="53" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="40" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="34" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="32" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="32" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="33" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="36" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="43" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="27" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="21" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="19" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="22" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="28" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="44" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="51" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="57" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="66" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="73" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="30" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="18" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="17" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="28" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="58" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="70" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="73" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="68" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="53" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="47" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="45" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="48" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="57" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="81" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="90" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="94" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="95" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="94" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="91" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="86" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="75" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="69" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="67" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="66" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="66" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="65" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="63" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="57" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="57" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="60" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="67" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="68" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="65" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="56" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="32" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="23" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="19" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="17" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="17" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="18" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="21" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="28" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="46" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="66" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="40" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="39" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="39" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="42" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="49" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="37" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="42" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="68" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="92" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="98" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="89" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="84" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="81" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="79" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="78" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="74" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="73" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="74" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="78" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="89" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="70" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="44" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="44" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="68" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="77" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="81" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="83" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="83" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="81" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="78" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="71" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="51" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="48" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="57" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="89" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="96" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="82" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="77" />
+</RESPOINT>
+</RESONANCE>
+<HARMONIC_POSITION>
+<par name="type" value="0" />
+<par name="parameter1" value="71" />
+<par name="parameter2" value="71" />
+<par name="parameter3" value="43" />
+</HARMONIC_POSITION>
+<SAMPLE_QUALITY>
+<par name="samplesize" value="3" />
+<par name="basenote" value="4" />
+<par name="octaves" value="3" />
+<par name="samples_per_octave" value="2" />
+</SAMPLE_QUALITY>
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="57" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="106" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="57" />
+<par name="val" value="106" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="fixed_freq" value="0" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.256" />
+<par name="intensity" value="26" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+</PAD_SYNTH_PARAMETERS>
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="3" />
+<par name="preset" value="8" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="64" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="40" />
+</par_no>
+<par_no id="4">
+<par name="par" value="1" />
+</par_no>
+<par_no id="5">
+<par name="par" value="62" />
+</par_no>
+<par_no id="6">
+<par name="par" value="12" />
+</par_no>
+<par_no id="7">
+<par name="par" value="19" />
+</par_no>
+<par_no id="8">
+<par name="par" value="97" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0055-Thick Bass.xiz b/data/presets/ZynAddSubFX/Companion/0055-Thick Bass.xiz
new file mode 100644
index 0000000..764d83f
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0055-Thick Bass.xiz
@@ -0,0 +1,7149 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Thick Bass</string>
+<string name="author">Will Godfrey
+GPL V2</string>
+<string name="comments"></string>
+<par name="type" value="5" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="104" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="93" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="93" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="3" />
+<par name="unison_frequency_spread" value="24" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="4" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="110" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="77" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="0" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="77" />
+<par name="val" value="0" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="70" />
+<par name="wave_shaping_function" value="1" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="15360" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0057-Ultra Bass.xiz b/data/presets/ZynAddSubFX/Companion/0057-Ultra Bass.xiz
new file mode 100644
index 0000000..0e165c1
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0057-Ultra Bass.xiz
@@ -0,0 +1,14223 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Ultra Bass</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments">Also works as a nice lead instrument!</string>
+<par name="type" value="5" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="1" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="70" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="1024" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="70" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="14" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="yes" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.349" />
+<par name="intensity" value="98" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8213" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="14" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="15360" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="96" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="70" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="24" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="24" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="15360" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.611" />
+<par name="intensity" value="42" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="21" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="1" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0060-Stopped Pipe.xiz b/data/presets/ZynAddSubFX/Companion/0060-Stopped Pipe.xiz
new file mode 100644
index 0000000..64c9184
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0060-Stopped Pipe.xiz
@@ -0,0 +1,1627 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="1" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Stopped Pipe</string>
+<string name="author">Will Godfrey
+GPL V2 or later</string>
+<string name="comments">Based on Paul's Church Organ 4</string>
+<par name="type" value="3" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="no" />
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="yes" />
+<PAD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="mode" value="0" />
+<par name="bandwidth" value="455" />
+<par name="bandwidth_scale" value="0" />
+<HARMONIC_PROFILE>
+<par name="base_type" value="1" />
+<par name="base_par1" value="90" />
+<par name="frequency_multiplier" value="12" />
+<par name="modulator_par1" value="0" />
+<par name="modulator_frequency" value="30" />
+<par name="width" value="127" />
+<par name="amplitude_multiplier_type" value="0" />
+<par name="amplitude_multiplier_mode" value="2" />
+<par name="amplitude_multiplier_par1" value="80" />
+<par name="amplitude_multiplier_par2" value="98" />
+<par_bool name="autoscale" value="yes" />
+<par name="one_half" value="0" />
+</HARMONIC_PROFILE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="1" />
+<par name="base_function_par" value="19" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="122" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<HARMONIC_POSITION>
+<par name="type" value="0" />
+<par name="parameter1" value="64" />
+<par name="parameter2" value="64" />
+<par name="parameter3" value="0" />
+</HARMONIC_POSITION>
+<SAMPLE_QUALITY>
+<par name="samplesize" value="3" />
+<par name="basenote" value="4" />
+<par name="octaves" value="3" />
+<par name="samples_per_octave" value="2" />
+</SAMPLE_QUALITY>
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="100" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="69" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="24" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="55" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="24" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="55" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="fixed_freq" value="0" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.641" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="41" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="0" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="3" />
+<par name="freq" value="40" />
+<par name="q" value="33" />
+<par name="stages" value="2" />
+<par name="freq_track" value="127" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="34" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="36" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="107" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="107" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="36" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+</PAD_SYNTH_PARAMETERS>
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="7" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="67" />
+</par_no>
+<par_no id="10">
+<par name="par" value="8" />
+</par_no>
+<par_no id="11">
+<par name="par" value="32" />
+</par_no>
+<par_no id="12">
+<par name="par" value="81" />
+</par_no>
+<par_no id="13">
+<par name="par" value="57" />
+</par_no>
+<par_no id="16">
+<par name="par" value="64" />
+</par_no>
+<par_no id="17">
+<par name="par" value="64" />
+</par_no>
+<par_no id="18">
+<par name="par" value="64" />
+</par_no>
+<par_no id="21">
+<par name="par" value="64" />
+</par_no>
+<par_no id="22">
+<par name="par" value="64" />
+</par_no>
+<par_no id="23">
+<par name="par" value="64" />
+</par_no>
+<par_no id="26">
+<par name="par" value="64" />
+</par_no>
+<par_no id="27">
+<par name="par" value="64" />
+</par_no>
+<par_no id="28">
+<par name="par" value="64" />
+</par_no>
+<par_no id="31">
+<par name="par" value="64" />
+</par_no>
+<par_no id="32">
+<par name="par" value="64" />
+</par_no>
+<par_no id="33">
+<par name="par" value="64" />
+</par_no>
+<par_no id="36">
+<par name="par" value="64" />
+</par_no>
+<par_no id="37">
+<par name="par" value="64" />
+</par_no>
+<par_no id="38">
+<par name="par" value="64" />
+</par_no>
+<par_no id="41">
+<par name="par" value="64" />
+</par_no>
+<par_no id="42">
+<par name="par" value="64" />
+</par_no>
+<par_no id="43">
+<par name="par" value="64" />
+</par_no>
+<par_no id="46">
+<par name="par" value="64" />
+</par_no>
+<par_no id="47">
+<par name="par" value="64" />
+</par_no>
+<par_no id="48">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0074-Smooth Expanded.xiz b/data/presets/ZynAddSubFX/Companion/0074-Smooth Expanded.xiz
new file mode 100644
index 0000000..cc060f7
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0074-Smooth Expanded.xiz
@@ -0,0 +1,7988 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Smooth Expanded</string>
+<string name="author">Will Godfrey
+GPL V 2 or later</string>
+<string name="comments">Now has a slow long tail.
+Only really noticable on lower notes.</string>
+<par name="type" value="12" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="74" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="74" />
+<par name="D_dt" value="0" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="121" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="74" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="0" />
+<par name="val" value="121" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="94" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.57" />
+<par name="intensity" value="15" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="91" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="4" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="94" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="72" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="72" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="yes" />
+<SUB_SYNTH_PARAMETERS>
+<par name="num_stages" value="5" />
+<par name="harmonic_mag_type" value="1" />
+<par name="start" value="1" />
+<HARMONICS>
+<HARMONIC id="0">
+<par name="mag" value="108" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="1">
+<par name="mag" value="67" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="39" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="8" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="7">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="9">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="10">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="11">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="12">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="13">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="14">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="15">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="16">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="17">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="18">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="19">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="20">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="21">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="22">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="23">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="24">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="25">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="26">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="27">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="28">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="29">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="30">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="31">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="32">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="33">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="34">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="35">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="36">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="37">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="38">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="39">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="40">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="41">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="42">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="43">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="44">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="45">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="46">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="47">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="48">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="49">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="50">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="51">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="52">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="53">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="54">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="55">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="56">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="57">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="58">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="59">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="60">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="61">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="62">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="63">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+</HARMONICS>
+<AMPLITUDE_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="volume" value="104" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="70" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="29" />
+<par name="D_dt" value="78" />
+<par name="R_dt" value="56" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="93" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="29" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="78" />
+<par name="val" value="93" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="56" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="65" />
+<par name="bandwidth_scale" value="65" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="band_width_envelope_enabled" value="no" />
+<BANDWIDTH_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="100" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="100" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</BANDWIDTH_ENVELOPE>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par_bool name="enabled" value="no" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="80" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par name="filter_velocity_sensing" value="64" />
+<par name="filter_velocity_sensing_amplitude" value="64" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+</FILTER_PARAMETERS>
+</SUB_SYNTH_PARAMETERS>
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="53" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0092-Wind Pipes.xiz b/data/presets/ZynAddSubFX/Companion/0092-Wind Pipes.xiz
new file mode 100644
index 0000000..ee378ae
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0092-Wind Pipes.xiz
@@ -0,0 +1,950 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Wind Pipes</string>
+<string name="author">Will J Godfrey
+GPL V 2 or later</string>
+<string name="comments"></string>
+<par name="type" value="10" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="1" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="no" />
+<par_bool name="sub_enabled" value="yes" />
+<SUB_SYNTH_PARAMETERS>
+<par name="num_stages" value="2" />
+<par name="harmonic_mag_type" value="0" />
+<par name="start" value="1" />
+<HARMONICS>
+<HARMONIC id="0">
+<par name="mag" value="60" />
+<par name="relbw" value="90" />
+</HARMONIC>
+<HARMONIC id="1">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="6" />
+<par name="relbw" value="109" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="4" />
+<par name="relbw" value="113" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="4" />
+<par name="relbw" value="119" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="4" />
+<par name="relbw" value="127" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="7">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="9">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="10">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="11">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="12">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="13">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="14">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="15">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="16">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="17">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="18">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="19">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="20">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="21">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="22">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="23">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="24">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="25">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="26">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="27">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="28">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="29">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="30">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="31">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="32">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="33">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="34">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="35">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="36">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="37">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="38">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="39">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="40">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="41">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="42">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="43">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="44">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="45">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="46">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="47">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="48">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="49">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="50">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="51">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="52">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="53">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="54">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="55">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="56">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="57">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="58">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="59">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="60">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="61">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="62">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="63">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+</HARMONICS>
+<AMPLITUDE_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="volume" value="96" />
+<par name="panning" value="45" />
+<par name="velocity_sensing" value="90" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="83" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="42" />
+<par name="D_dt" value="97" />
+<par name="R_dt" value="57" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="32" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="42" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="97" />
+<par name="val" value="32" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="57" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="40" />
+<par name="bandwidth_scale" value="64" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="band_width_envelope_enabled" value="no" />
+<BANDWIDTH_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="100" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="100" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</BANDWIDTH_ENVELOPE>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par_bool name="enabled" value="no" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="80" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par name="filter_velocity_sensing" value="64" />
+<par name="filter_velocity_sensing_amplitude" value="64" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+</FILTER_PARAMETERS>
+</SUB_SYNTH_PARAMETERS>
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="43" />
+</par_no>
+<par_no id="1">
+<par name="par" value="66" />
+</par_no>
+<par_no id="2">
+<par name="par" value="39" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0106-Harpsichord.xiz b/data/presets/ZynAddSubFX/Companion/0106-Harpsichord.xiz
new file mode 100644
index 0000000..489d98d
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0106-Harpsichord.xiz
@@ -0,0 +1,7178 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Harpsichord</string>
+<string name="author">Will J Godfrey
+GPL V2 or later</string>
+<string name="comments"></string>
+<par name="type" value="11" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="99" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="127" />
+<par name="q" value="0" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="10" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="13" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="102" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="111" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="yes" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="61" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="0" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="61" />
+<par name="val" value="0" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="3" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="28" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="44" />
+</par_no>
+<par_no id="3">
+<par name="par" value="10" />
+</par_no>
+<par_no id="7">
+<par name="par" value="127" />
+</par_no>
+<par_no id="8">
+<par name="par" value="21" />
+</par_no>
+<par_no id="9">
+<par name="par" value="78" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0107-Cathedral Harp.xiz b/data/presets/ZynAddSubFX/Companion/0107-Cathedral Harp.xiz
new file mode 100644
index 0000000..615ead4
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0107-Cathedral Harp.xiz
@@ -0,0 +1,7205 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Cathedral Pad</string>
+<string name="author">Will J Godfrey
+GPL V2 or later</string>
+<string name="comments"></string>
+<par name="type" value="11" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="99" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="80" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="127" />
+<par name="q" value="0" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="10" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="13" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="102" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="111" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="yes" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="61" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="0" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="61" />
+<par name="val" value="0" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="3" />
+<par name="preset" value="1" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="64" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="45" />
+</par_no>
+<par_no id="5">
+<par name="par" value="98" />
+</par_no>
+<par_no id="6">
+<par name="par" value="56" />
+</par_no>
+<par_no id="7">
+<par name="par" value="90" />
+</par_no>
+<par_no id="8">
+<par name="par" value="64" />
+</par_no>
+<par_no id="9">
+<par name="par" value="19" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="46" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="71" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0108-Angel Harp.xiz b/data/presets/ZynAddSubFX/Companion/0108-Angel Harp.xiz
new file mode 100644
index 0000000..011acd8
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0108-Angel Harp.xiz
@@ -0,0 +1,8012 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Angel Harp</string>
+<string name="author">Will J Godfrey
+GPL V2 or later</string>
+<string name="comments">Has a long tail.
+Works best on very long slow notes.</string>
+<par name="type" value="11" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="99" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="127" />
+<par name="q" value="0" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="10" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="13" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="102" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="111" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="yes" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="61" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="0" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="61" />
+<par name="val" value="0" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="81" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continuous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="yes" />
+<SUB_SYNTH_PARAMETERS>
+<par name="num_stages" value="2" />
+<par name="harmonic_mag_type" value="0" />
+<par name="start" value="1" />
+<HARMONICS>
+<HARMONIC id="0">
+<par name="mag" value="77" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="1">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="20" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="7">
+<par name="mag" value="4" />
+<par name="relbw" value="96" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="9">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="10">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="11">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="12">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="13">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="14">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="15">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="16">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="17">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="18">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="19">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="20">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="21">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="22">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="23">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="24">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="25">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="26">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="27">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="28">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="29">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="30">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="31">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="32">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="33">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="34">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="35">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="36">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="37">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="38">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="39">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="40">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="41">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="42">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="43">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="44">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="45">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="46">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="47">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="48">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="49">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="50">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="51">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="52">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="53">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="54">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="55">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="56">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="57">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="58">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="59">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="60">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="61">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="62">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="63">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+</HARMONICS>
+<AMPLITUDE_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="volume" value="71" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="90" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="37" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="37" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="25" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="40" />
+<par name="bandwidth_scale" value="64" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="band_width_envelope_enabled" value="no" />
+<BANDWIDTH_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="100" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="100" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</BANDWIDTH_ENVELOPE>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par_bool name="enabled" value="no" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="80" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par name="filter_velocity_sensing" value="64" />
+<par name="filter_velocity_sensing_amplitude" value="64" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+</FILTER_PARAMETERS>
+</SUB_SYNTH_PARAMETERS>
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="2" />
+<par name="preset" value="5" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="33" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="44" />
+</par_no>
+<par_no id="3">
+<par name="par" value="17" />
+</par_no>
+<par_no id="5">
+<par name="par" value="82" />
+</par_no>
+<par_no id="6">
+<par name="par" value="24" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="40" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="63" />
+</par_no>
+<par_no id="3">
+<par name="par" value="24" />
+</par_no>
+<par_no id="7">
+<par name="par" value="85" />
+</par_no>
+<par_no id="8">
+<par name="par" value="5" />
+</par_no>
+<par_no id="9">
+<par name="par" value="83" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0116-Soprano.xiz b/data/presets/ZynAddSubFX/Companion/0116-Soprano.xiz
new file mode 100644
index 0000000..52947ef
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0116-Soprano.xiz
@@ -0,0 +1,1509 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="1" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Soprano</string>
+<string name="author">Will J Godfrey
+GPL V2 or later</string>
+<string name="comments"></string>
+<par name="type" value="0" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="no" />
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="yes" />
+<PAD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="mode" value="0" />
+<par name="bandwidth" value="589" />
+<par name="bandwidth_scale" value="0" />
+<HARMONIC_PROFILE>
+<par name="base_type" value="0" />
+<par name="base_par1" value="99" />
+<par name="frequency_multiplier" value="8" />
+<par name="modulator_par1" value="0" />
+<par name="modulator_frequency" value="55" />
+<par name="width" value="127" />
+<par name="amplitude_multiplier_type" value="0" />
+<par name="amplitude_multiplier_mode" value="2" />
+<par name="amplitude_multiplier_par1" value="80" />
+<par name="amplitude_multiplier_par2" value="4" />
+<par_bool name="autoscale" value="no" />
+<par name="one_half" value="0" />
+</HARMONIC_PROFILE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="13" />
+<par name="base_function_par" value="56" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="1" />
+<par name="modulation_par1" value="20" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="87" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="31" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="3" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="1" />
+<par name="adaptive_harmonics_base_frequency" value="118" />
+<par name="adaptive_harmonics_power" value="93" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="102" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="104" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<HARMONIC_POSITION>
+<par name="type" value="0" />
+<par name="parameter1" value="255" />
+<par name="parameter2" value="64" />
+<par name="parameter3" value="0" />
+</HARMONIC_POSITION>
+<SAMPLE_QUALITY>
+<par name="samplesize" value="2" />
+<par name="basenote" value="4" />
+<par name="octaves" value="3" />
+<par name="samples_per_octave" value="4" />
+</SAMPLE_QUALITY>
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="99" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="27" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="33" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="71" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="33" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="40" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="71" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="fixed_freq" value="0" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.506" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="6" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="25" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="0" />
+<par name="freq" value="85" />
+<par name="q" value="33" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="80" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="yes" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="35" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="98" />
+<par name="A_val" value="37" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="43" />
+<POINT id="0">
+<par name="val" value="37" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="62" />
+<par name="val" value="94" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="98" />
+<par name="val" value="43" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+</PAD_SYNTH_PARAMETERS>
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Companion/0119-Ghost Choir.xiz b/data/presets/ZynAddSubFX/Companion/0119-Ghost Choir.xiz
new file mode 100644
index 0000000..4b2af23
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Companion/0119-Ghost Choir.xiz
@@ -0,0 +1,8065 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="1" version-minor="1">
+<INFORMATION>
+<par name="PADsynth_used" value="0" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<INSTRUMENT>
+<INFO>
+<string name="name">Ghost Choir</string>
+<string name="author">Will J Godfrey
+GPL V2 or later</string>
+<string name="comments"></string>
+<par name="type" value="12" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="75" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="88" />
+<par name="punch_strength" value="50" />
+<par name="punch_time" value="66" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="94" />
+<par name="R_dt" value="84" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="50" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="94" />
+<par name="val" value="50" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="84" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.564" />
+<par name="intensity" value="26" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="91" />
+<par name="q" value="24" />
+<par name="stages" value="1" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="yes" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="74" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="95" />
+<par name="D_val" value="59" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="48" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="63" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.63" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+<par name="max_db" value="20" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<par_bool name="protect_fundamental_frequency" value="no" />
+<par name="resonance_points" value="256" />
+<RESPOINT id="0">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="1">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="2">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="3">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="4">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="5">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="6">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="7">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="8">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="9">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="10">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="11">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="12">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="13">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="14">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="15">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="16">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="17">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="18">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="19">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="20">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="21">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="22">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="23">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="24">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="25">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="26">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="27">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="28">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="29">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="30">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="31">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="32">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="33">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="34">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="35">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="36">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="37">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="38">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="39">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="40">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="41">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="42">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="43">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="44">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="45">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="46">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="47">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="48">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="49">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="50">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="51">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="52">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="53">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="54">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="55">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="56">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="57">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="58">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="59">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="60">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="61">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="62">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="63">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="64">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="65">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="66">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="67">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="68">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="69">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="70">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="71">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="72">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="73">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="74">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="75">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="76">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="77">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="78">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="79">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="80">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="81">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="82">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="83">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="84">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="85">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="86">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="87">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="88">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="89">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="90">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="91">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="92">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="93">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="94">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="95">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="96">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="97">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="98">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="99">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="100">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="101">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="102">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="103">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="104">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="105">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="106">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="107">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="108">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="109">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="110">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="111">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="112">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="113">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="114">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="115">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="116">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="117">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="118">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="119">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="120">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="121">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="122">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="123">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="124">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="125">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="126">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="127">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="128">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="129">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="130">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="131">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="132">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="133">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="134">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="135">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="136">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="137">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="138">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="139">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="140">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="141">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="142">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="143">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="144">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="145">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="146">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="147">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="148">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="149">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="150">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="151">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="152">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="153">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="154">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="155">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="156">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="157">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="158">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="159">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="160">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="161">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="162">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="163">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="164">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="165">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="166">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="167">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="168">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="169">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="170">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="171">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="172">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="173">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="174">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="175">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="176">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="177">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="178">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="179">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="180">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="181">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="182">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="183">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="184">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="185">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="186">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="187">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="188">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="189">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="190">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="191">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="192">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="193">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="194">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="195">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="196">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="197">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="198">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="199">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="200">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="201">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="202">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="203">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="204">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="205">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="206">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="207">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="208">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="209">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="210">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="211">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="212">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="213">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="214">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="215">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="216">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="217">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="218">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="219">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="220">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="221">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="222">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="223">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="224">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="225">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="226">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="227">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="228">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="229">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="230">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="231">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="232">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="233">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="234">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="235">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="236">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="237">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="238">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="239">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="240">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="241">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="242">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="243">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="244">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="245">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="246">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="247">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="248">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="249">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="250">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="251">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="252">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="253">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="254">
+<par name="val" value="64" />
+</RESPOINT>
+<RESPOINT id="255">
+<par name="val" value="64" />
+</RESPOINT>
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="3" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="3" />
+<par name="base_function_par" value="108" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="105" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="1" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="44" />
+<par name="amp_rand_type" value="1" />
+<par name="amp_rand_power" value="48" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="34" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="5204" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="3" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="48" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="6264" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="3" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="66" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="7131" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="42" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="3" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="75" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8673" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="65" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="40" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="56" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="3" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="3" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="88" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="9926" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="29" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="119" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="57" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="27" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="33" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="10" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="105" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="93" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="121" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="95" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="6" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="85" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="58" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="11" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="17" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="113" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="79" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="36" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="41" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="30" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="16" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="50" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="108" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="90" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="125" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="20" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="8" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="63" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="2" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="45" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="115" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="52" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="114" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="66" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="96" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="107" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="100" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="100" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.709" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="no" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="40" />
+<par name="start_phase" value="0" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="50" />
+<par name="q" value="60" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="47" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="43" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="106" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="70" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="109" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="35" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="38" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="4" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="111" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="83" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="14" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="21" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="75" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="120" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="60" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="18" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="103" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="117" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="91" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="74" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="31" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="23" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="54" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="101" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="89" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="24" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="67" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="97" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="76" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="no" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="90" />
+<par name="D_val" value="40" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="90" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="40" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="10" />
+<par name="val" value="40" />
+</POINT>
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="no" />
+<FILTER_LFO>
+<par_real name="freq" value="0.394" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="90" />
+<par name="volume_damp" value="64" />
+<par name="velocity_sensing" value="64" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="90" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="80" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="90" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="100" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="90" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="80" />
+<par name="A_val" value="20" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+<POINT id="0">
+<par name="val" value="20" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="90" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="80" />
+<par name="val" value="40" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="yes" />
+<SUB_SYNTH_PARAMETERS>
+<par name="num_stages" value="2" />
+<par name="harmonic_mag_type" value="0" />
+<par name="start" value="1" />
+<HARMONICS>
+<HARMONIC id="0">
+<par name="mag" value="127" />
+<par name="relbw" value="79" />
+</HARMONIC>
+<HARMONIC id="1">
+<par name="mag" value="56" />
+<par name="relbw" value="96" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="28" />
+<par name="relbw" value="92" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="7">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="9">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="10">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="11">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="12">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="13">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="14">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="15">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="16">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="17">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="18">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="19">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="20">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="21">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="22">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="23">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="24">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="25">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="26">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="27">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="28">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="29">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="30">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="31">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="32">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="33">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="34">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="35">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="36">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="37">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="38">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="39">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="40">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="41">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="42">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="43">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="44">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="45">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="46">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="47">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="48">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="49">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="50">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="51">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="52">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="53">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="54">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="55">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="56">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="57">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="58">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="59">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="60">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="61">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="62">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="63">
+<par name="mag" value="0" />
+<par name="relbw" value="64" />
+</HARMONIC>
+</HARMONICS>
+<AMPLITUDE_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="volume" value="80" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="127" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="109" />
+<par name="R_dt" value="89" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="81" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="0" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="0" />
+<par name="val" value="127" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="109" />
+<par name="val" value="81" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="89" />
+<par name="val" value="0" />
+</POINT>
+</AMPLITUDE_ENVELOPE>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="40" />
+<par name="bandwidth_scale" value="64" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="30" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="30" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="50" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FREQUENCY_ENVELOPE>
+<par_bool name="band_width_envelope_enabled" value="no" />
+<BANDWIDTH_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="100" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="100" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</BANDWIDTH_ENVELOPE>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par_bool name="enabled" value="no" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="80" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+<FORMANT_FILTER>
+<par name="num_formants" value="3" />
+<par name="formant_slowness" value="64" />
+<par name="vowel_clearness" value="64" />
+<par name="center_freq" value="64" />
+<par name="octaves_freq" value="64" />
+<VOWEL id="0">
+<FORMANT id="0">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="13" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="19" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="61" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="94" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="73" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="9" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="92" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="1">
+<FORMANT id="0">
+<par name="freq" value="87" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="1" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="69" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="51" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="78" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="32" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="112" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="123" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="2">
+<FORMANT id="0">
+<par name="freq" value="28" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="71" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="62" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="55" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="53" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="98" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="102" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="124" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="46" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="3">
+<FORMANT id="0">
+<par name="freq" value="34" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="12" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="82" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="100" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="104" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="72" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="64" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="110" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="5" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="39" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="4">
+<FORMANT id="0">
+<par name="freq" value="68" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="116" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="122" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="25" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="49" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="37" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="22" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="84" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="59" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<VOWEL id="5">
+<FORMANT id="0">
+<par name="freq" value="48" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="1">
+<par name="freq" value="88" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="2">
+<par name="freq" value="126" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="3">
+<par name="freq" value="86" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="4">
+<par name="freq" value="99" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="5">
+<par name="freq" value="7" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="6">
+<par name="freq" value="26" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="7">
+<par name="freq" value="15" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="8">
+<par name="freq" value="77" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="9">
+<par name="freq" value="44" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="10">
+<par name="freq" value="118" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+<FORMANT id="11">
+<par name="freq" value="0" />
+<par name="amp" value="127" />
+<par name="q" value="64" />
+</FORMANT>
+</VOWEL>
+<par name="sequence_size" value="3" />
+<par name="sequence_stretch" value="40" />
+<par_bool name="sequence_reversed" value="no" />
+<SEQUENCE_POS id="0">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="1">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="2">
+<par name="vowel_id" value="2" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="3">
+<par name="vowel_id" value="3" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="4">
+<par name="vowel_id" value="4" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="5">
+<par name="vowel_id" value="5" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="6">
+<par name="vowel_id" value="0" />
+</SEQUENCE_POS>
+<SEQUENCE_POS id="7">
+<par name="vowel_id" value="1" />
+</SEQUENCE_POS>
+</FORMANT_FILTER>
+</FILTER>
+<par name="filter_velocity_sensing" value="64" />
+<par name="filter_velocity_sensing_amplitude" value="64" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+<POINT id="0">
+<par name="val" value="64" />
+</POINT>
+<POINT id="1">
+<par name="dt" value="40" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="2">
+<par name="dt" value="70" />
+<par name="val" value="64" />
+</POINT>
+<POINT id="3">
+<par name="dt" value="60" />
+<par name="val" value="64" />
+</POINT>
+</FILTER_ENVELOPE>
+</FILTER_PARAMETERS>
+</SUB_SYNTH_PARAMETERS>
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="1" />
+<par name="preset" value="1" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="104" />
+</par_no>
+<par_no id="1">
+<par name="par" value="64" />
+</par_no>
+<par_no id="2">
+<par name="par" value="69" />
+</par_no>
+<par_no id="3">
+<par name="par" value="35" />
+</par_no>
+<par_no id="7">
+<par name="par" value="127" />
+</par_no>
+<par_no id="9">
+<par name="par" value="71" />
+</par_no>
+<par_no id="11">
+<par name="par" value="64" />
+</par_no>
+<par_no id="12">
+<par name="par" value="20" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="7" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="72" />
+</par_no>
+<par_no id="10">
+<par name="par" value="1" />
+</par_no>
+<par_no id="11">
+<par name="par" value="101" />
+</par_no>
+<par_no id="12">
+<par name="par" value="64" />
+</par_no>
+<par_no id="13">
+<par name="par" value="62" />
+</par_no>
+<par_no id="16">
+<par name="par" value="64" />
+</par_no>
+<par_no id="17">
+<par name="par" value="64" />
+</par_no>
+<par_no id="18">
+<par name="par" value="64" />
+</par_no>
+<par_no id="21">
+<par name="par" value="64" />
+</par_no>
+<par_no id="22">
+<par name="par" value="64" />
+</par_no>
+<par_no id="23">
+<par name="par" value="64" />
+</par_no>
+<par_no id="26">
+<par name="par" value="64" />
+</par_no>
+<par_no id="27">
+<par name="par" value="64" />
+</par_no>
+<par_no id="28">
+<par name="par" value="64" />
+</par_no>
+<par_no id="31">
+<par name="par" value="64" />
+</par_no>
+<par_no id="32">
+<par name="par" value="64" />
+</par_no>
+<par_no id="33">
+<par name="par" value="64" />
+</par_no>
+<par_no id="36">
+<par name="par" value="64" />
+</par_no>
+<par_no id="37">
+<par name="par" value="64" />
+</par_no>
+<par_no id="38">
+<par name="par" value="64" />
+</par_no>
+<par_no id="41">
+<par name="par" value="64" />
+</par_no>
+<par_no id="42">
+<par name="par" value="64" />
+</par_no>
+<par_no id="43">
+<par name="par" value="64" />
+</par_no>
+<par_no id="46">
+<par name="par" value="64" />
+</par_no>
+<par_no id="47">
+<par name="par" value="64" />
+</par_no>
+<par_no id="48">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+</ZynAddSubFX-data>
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/.bankdir b/data/presets/ZynAddSubFX/Cormi_Noise/.bankdir
new file mode 100644
index 0000000..e69de29
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0002-Sparo_01.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0002-Sparo_01.xiz
new file mode 100644
index 0000000..25dcd86
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0002-Sparo_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0003-Laser_01.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0003-Laser_01.xiz
new file mode 100644
index 0000000..0d6b316
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0003-Laser_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0005-Elettrico.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0005-Elettrico.xiz
new file mode 100644
index 0000000..863ff97
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0005-Elettrico.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0006-Ronzio_01.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0006-Ronzio_01.xiz
new file mode 100644
index 0000000..6d7a8b9
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0006-Ronzio_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0007-Ronzio_02.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0007-Ronzio_02.xiz
new file mode 100644
index 0000000..d555cb5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0007-Ronzio_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0008-Ronzio_03.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0008-Ronzio_03.xiz
new file mode 100644
index 0000000..d11c582
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0008-Ronzio_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0010-Interferenze.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0010-Interferenze.xiz
new file mode 100644
index 0000000..93104e8
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0010-Interferenze.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0012-Passa_astronave.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0012-Passa_astronave.xiz
new file mode 100644
index 0000000..b0e042f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0012-Passa_astronave.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0013-Passa_asteroide.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0013-Passa_asteroide.xiz
new file mode 100644
index 0000000..10c390c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0013-Passa_asteroide.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0015-Nave.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0015-Nave.xiz
new file mode 100644
index 0000000..2db3956
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0015-Nave.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0017-Strano_01.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0017-Strano_01.xiz
new file mode 100644
index 0000000..1ca2fd0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0017-Strano_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0018-Strano_02.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0018-Strano_02.xiz
new file mode 100644
index 0000000..7339411
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0018-Strano_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0020-Acqua.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0020-Acqua.xiz
new file mode 100644
index 0000000..007a209
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0020-Acqua.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0021-Asteroide.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0021-Asteroide.xiz
new file mode 100644
index 0000000..ecbcb4c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0021-Asteroide.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0024-tastiera.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0024-tastiera.xiz
new file mode 100644
index 0000000..921fcbf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0024-tastiera.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0026-beepA.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0026-beepA.xiz
new file mode 100644
index 0000000..b49da16
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0026-beepA.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0027-beepB.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0027-beepB.xiz
new file mode 100644
index 0000000..343ead2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0027-beepB.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0028-beepC.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0028-beepC.xiz
new file mode 100644
index 0000000..539f5bc
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0028-beepC.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0033-buao.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0033-buao.xiz
new file mode 100644
index 0000000..32bf80a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0033-buao.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0034-creepy.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0034-creepy.xiz
new file mode 100644
index 0000000..075d459
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0034-creepy.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0036-Trillo.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0036-Trillo.xiz
new file mode 100644
index 0000000..467cb52
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0036-Trillo.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0037-Trillo1.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0037-Trillo1.xiz
new file mode 100644
index 0000000..a2bea52
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0037-Trillo1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0038-Trillo2.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0038-Trillo2.xiz
new file mode 100644
index 0000000..951b668
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0038-Trillo2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0039-Trillo5.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0039-Trillo5.xiz
new file mode 100644
index 0000000..a3e3afa
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0039-Trillo5.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0041-Scherzo.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0041-Scherzo.xiz
new file mode 100644
index 0000000..cbe812b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0041-Scherzo.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0043-Grave.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0043-Grave.xiz
new file mode 100644
index 0000000..474b85a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0043-Grave.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0045-Fischia_01.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0045-Fischia_01.xiz
new file mode 100644
index 0000000..50a2e24
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0045-Fischia_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0046-Fischia_02.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0046-Fischia_02.xiz
new file mode 100644
index 0000000..661c575
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0046-Fischia_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0047-Fischia_03.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0047-Fischia_03.xiz
new file mode 100644
index 0000000..296ece2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0047-Fischia_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0049-Resonance Pad2.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0049-Resonance Pad2.xiz
new file mode 100644
index 0000000..0d16814
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0049-Resonance Pad2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0050-Resonance Pad2.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0050-Resonance Pad2.xiz
new file mode 100644
index 0000000..3db0c7b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0050-Resonance Pad2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0052-ImpossibleDream1.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0052-ImpossibleDream1.xiz
new file mode 100644
index 0000000..be0d3cb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0052-ImpossibleDream1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0053-ImpossibleDream4.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0053-ImpossibleDream4.xiz
new file mode 100644
index 0000000..46ff14e
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0053-ImpossibleDream4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0054-Delayed Echo.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0054-Delayed Echo.xiz
new file mode 100644
index 0000000..90d7057
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0054-Delayed Echo.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0057-Glass_01.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0057-Glass_01.xiz
new file mode 100644
index 0000000..4288c27
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0057-Glass_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0059-Tremulo_01.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0059-Tremulo_01.xiz
new file mode 100644
index 0000000..70e2f5f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0059-Tremulo_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Noise/0061-Campane.xiz b/data/presets/ZynAddSubFX/Cormi_Noise/0061-Campane.xiz
new file mode 100644
index 0000000..a9f8536
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Noise/0061-Campane.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0001-Bassoon.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0001-Bassoon.xiz
new file mode 100644
index 0000000..2512518
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0001-Bassoon.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0002-Bassoon2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0002-Bassoon2.xiz
new file mode 100644
index 0000000..0a84334
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0002-Bassoon2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0003-Bassoon3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0003-Bassoon3.xiz
new file mode 100644
index 0000000..cc87fb2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0003-Bassoon3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0004-Volo.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0004-Volo.xiz
new file mode 100644
index 0000000..973917d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0004-Volo.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0006-Arpeggio_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0006-Arpeggio_01.xiz
new file mode 100644
index 0000000..5fbfe12
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0006-Arpeggio_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0007-Arpeggio_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0007-Arpeggio_02.xiz
new file mode 100644
index 0000000..70358ac
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0007-Arpeggio_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0008-Arpeggio_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0008-Arpeggio_03.xiz
new file mode 100644
index 0000000..558a0c9
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0008-Arpeggio_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0009-Glass Arpeggio2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0009-Glass Arpeggio2.xiz
new file mode 100644
index 0000000..df76d55
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0009-Glass Arpeggio2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0011-abracadabra.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0011-abracadabra.xiz
new file mode 100644
index 0000000..737f99e
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0011-abracadabra.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0012-Ghost Whistle.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0012-Ghost Whistle.xiz
new file mode 100644
index 0000000..eb93ca5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0012-Ghost Whistle.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0013-Spazio1.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0013-Spazio1.xiz
new file mode 100644
index 0000000..d83f080
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0013-Spazio1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0014-Spazio2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0014-Spazio2.xiz
new file mode 100644
index 0000000..fad3675
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0014-Spazio2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0015-Space Synth.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0015-Space Synth.xiz
new file mode 100644
index 0000000..8d978f3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0015-Space Synth.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0016-SpaceAtmo.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0016-SpaceAtmo.xiz
new file mode 100644
index 0000000..707614f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0016-SpaceAtmo.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0017-friendly sines.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0017-friendly sines.xiz
new file mode 100644
index 0000000..688b67e
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0017-friendly sines.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0019-Acquoso_1.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0019-Acquoso_1.xiz
new file mode 100644
index 0000000..2c77e6d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0019-Acquoso_1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0020-Acquoso_5.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0020-Acquoso_5.xiz
new file mode 100644
index 0000000..1a9d8dd
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0020-Acquoso_5.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0021-Acquoso_6.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0021-Acquoso_6.xiz
new file mode 100644
index 0000000..6557d16
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0021-Acquoso_6.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0023-Fagotto_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0023-Fagotto_01.xiz
new file mode 100644
index 0000000..a3d03b6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0023-Fagotto_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0024-Fagotto_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0024-Fagotto_02.xiz
new file mode 100644
index 0000000..6a76b91
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0024-Fagotto_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0025-Fagotto_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0025-Fagotto_03.xiz
new file mode 100644
index 0000000..c507458
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0025-Fagotto_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0027-Delicato_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0027-Delicato_01.xiz
new file mode 100644
index 0000000..2a344f6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0027-Delicato_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0028-Delicato_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0028-Delicato_02.xiz
new file mode 100644
index 0000000..a413fb7
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0028-Delicato_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0029-Delicato_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0029-Delicato_03.xiz
new file mode 100644
index 0000000..5bd257c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0029-Delicato_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0031-Wah_dolce_1.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0031-Wah_dolce_1.xiz
new file mode 100644
index 0000000..5fa8551
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0031-Wah_dolce_1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0032-Wah_dolce_2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0032-Wah_dolce_2.xiz
new file mode 100644
index 0000000..02c9f06
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0032-Wah_dolce_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0033-Long Space Choir 2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0033-Long Space Choir 2.xiz
new file mode 100644
index 0000000..6aa3e2c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0033-Long Space Choir 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0034-Choir Pad4.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0034-Choir Pad4.xiz
new file mode 100644
index 0000000..d04ab46
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0034-Choir Pad4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0035-Ancient_Echos.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0035-Ancient_Echos.xiz
new file mode 100644
index 0000000..49889c5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0035-Ancient_Echos.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0036-Campane.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0036-Campane.xiz
new file mode 100644
index 0000000..a875d87
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0036-Campane.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0037-Chorus.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0037-Chorus.xiz
new file mode 100644
index 0000000..3f850ed
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0037-Chorus.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0038-HellVoice.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0038-HellVoice.xiz
new file mode 100644
index 0000000..8e38c3d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0038-HellVoice.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0039-Chorus2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0039-Chorus2.xiz
new file mode 100644
index 0000000..a13fbf5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0039-Chorus2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0041-DarkNight.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0041-DarkNight.xiz
new file mode 100644
index 0000000..ecb118b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0041-DarkNight.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0042-LightDawn.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0042-LightDawn.xiz
new file mode 100644
index 0000000..4c774e2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0042-LightDawn.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0043-Fiiuu.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0043-Fiiuu.xiz
new file mode 100644
index 0000000..da79cec
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0043-Fiiuu.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0045-Spazio_profondo1.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0045-Spazio_profondo1.xiz
new file mode 100644
index 0000000..f5307ff
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0045-Spazio_profondo1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0046-Spazio_Profondo2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0046-Spazio_Profondo2.xiz
new file mode 100644
index 0000000..50e5c9e
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0046-Spazio_Profondo2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0047-Spazio_Profondo3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0047-Spazio_Profondo3.xiz
new file mode 100644
index 0000000..b14c20f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0047-Spazio_Profondo3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0049-DolcePiano_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0049-DolcePiano_01.xiz
new file mode 100644
index 0000000..45d29d9
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0049-DolcePiano_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0050-DolcePiano_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0050-DolcePiano_02.xiz
new file mode 100644
index 0000000..5ac631b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0050-DolcePiano_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0051-DolcePiano_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0051-DolcePiano_03.xiz
new file mode 100644
index 0000000..54fb3e4
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0051-DolcePiano_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0053-Ding_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0053-Ding_01.xiz
new file mode 100644
index 0000000..f0a4290
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0053-Ding_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0054-Ding_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0054-Ding_02.xiz
new file mode 100644
index 0000000..2927aa3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0054-Ding_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0056-Senza_tempo.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0056-Senza_tempo.xiz
new file mode 100644
index 0000000..976d7c2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0056-Senza_tempo.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0057-Senza_tempo_2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0057-Senza_tempo_2.xiz
new file mode 100644
index 0000000..fe1b71a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0057-Senza_tempo_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0058-Senza_tempo_3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0058-Senza_tempo_3.xiz
new file mode 100644
index 0000000..70f737f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0058-Senza_tempo_3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0059-Senza_tempo_4.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0059-Senza_tempo_4.xiz
new file mode 100644
index 0000000..ddd9b54
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0059-Senza_tempo_4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0060-Senza_tempo_5.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0060-Senza_tempo_5.xiz
new file mode 100644
index 0000000..5efcb0b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0060-Senza_tempo_5.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0062-Sospirato_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0062-Sospirato_01.xiz
new file mode 100644
index 0000000..162485c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0062-Sospirato_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0063-Sospirato_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0063-Sospirato_02.xiz
new file mode 100644
index 0000000..a8eb884
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0063-Sospirato_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0064-Sospirato_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0064-Sospirato_03.xiz
new file mode 100644
index 0000000..0b633f6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0064-Sospirato_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0065-Synth_piano_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0065-Synth_piano_03.xiz
new file mode 100644
index 0000000..25f8889
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0065-Synth_piano_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0066-Synth_Piano_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0066-Synth_Piano_02.xiz
new file mode 100644
index 0000000..ecf970d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0066-Synth_Piano_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0068-Piano.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0068-Piano.xiz
new file mode 100644
index 0000000..c886a6b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0068-Piano.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0069-Pianola.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0069-Pianola.xiz
new file mode 100644
index 0000000..04d63cf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0069-Pianola.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0070-clavicembalo.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0070-clavicembalo.xiz
new file mode 100644
index 0000000..af7b1a4
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0070-clavicembalo.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0072-Zufolo_1.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0072-Zufolo_1.xiz
new file mode 100644
index 0000000..c14c298
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0072-Zufolo_1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0073-Zufolo_2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0073-Zufolo_2.xiz
new file mode 100644
index 0000000..6dbb5e0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0073-Zufolo_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0074-Zufolo_3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0074-Zufolo_3.xiz
new file mode 100644
index 0000000..ef85ac5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0074-Zufolo_3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0075-Zufolo_4.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0075-Zufolo_4.xiz
new file mode 100644
index 0000000..3aed092
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0075-Zufolo_4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0076-Pinkollo.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0076-Pinkollo.xiz
new file mode 100644
index 0000000..572457f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0076-Pinkollo.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0078-Tremulo_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0078-Tremulo_01.xiz
new file mode 100644
index 0000000..9241dfd
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0078-Tremulo_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0079-Tremulo_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0079-Tremulo_02.xiz
new file mode 100644
index 0000000..9ea916a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0079-Tremulo_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0081-Organetto_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0081-Organetto_01.xiz
new file mode 100644
index 0000000..931c8bc
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0081-Organetto_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0082-Organetto_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0082-Organetto_02.xiz
new file mode 100644
index 0000000..41d0abf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0082-Organetto_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0084-Organo_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0084-Organo_01.xiz
new file mode 100644
index 0000000..3e11bca
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0084-Organo_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0085-Organo_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0085-Organo_02.xiz
new file mode 100644
index 0000000..61a8140
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0085-Organo_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0086-Organo_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0086-Organo_03.xiz
new file mode 100644
index 0000000..ae82fa3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0086-Organo_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0087-Harp 3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0087-Harp 3.xiz
new file mode 100644
index 0000000..36a7b2d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0087-Harp 3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0088-Harp4.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0088-Harp4.xiz
new file mode 100644
index 0000000..d39bdc0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0088-Harp4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0090-Dolcino_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0090-Dolcino_01.xiz
new file mode 100644
index 0000000..367ddc8
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0090-Dolcino_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0091-Dolcino_02.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0091-Dolcino_02.xiz
new file mode 100644
index 0000000..a5b26eb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0091-Dolcino_02.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0092-Dolcino_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0092-Dolcino_03.xiz
new file mode 100644
index 0000000..7c283bb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0092-Dolcino_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0093-Dolcino_04.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0093-Dolcino_04.xiz
new file mode 100644
index 0000000..84682b3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0093-Dolcino_04.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0095-Accordian.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0095-Accordian.xiz
new file mode 100644
index 0000000..0a7f8c6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0095-Accordian.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0096-padNice.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0096-padNice.xiz
new file mode 100644
index 0000000..f7f443d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0096-padNice.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0097-k.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0097-k.xiz
new file mode 100644
index 0000000..177c803
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0097-k.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0098-z.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0098-z.xiz
new file mode 100644
index 0000000..0a3b349
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0098-z.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0099-a.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0099-a.xiz
new file mode 100644
index 0000000..80cadfb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0099-a.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0100-Steel Rhodes.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0100-Steel Rhodes.xiz
new file mode 100644
index 0000000..8f8480b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0100-Steel Rhodes.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0101-Sweet_Night.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0101-Sweet_Night.xiz
new file mode 100644
index 0000000..5dc0a54
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0101-Sweet_Night.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0102-Sweet_Night_2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0102-Sweet_Night_2.xiz
new file mode 100644
index 0000000..79378a3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0102-Sweet_Night_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0103-Gocce.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0103-Gocce.xiz
new file mode 100644
index 0000000..83608cf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0103-Gocce.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0104-Ice Rhodes2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0104-Ice Rhodes2.xiz
new file mode 100644
index 0000000..869246a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0104-Ice Rhodes2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0105-Voluttuoso.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0105-Voluttuoso.xiz
new file mode 100644
index 0000000..ce7cdec
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0105-Voluttuoso.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0106-Entropia.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0106-Entropia.xiz
new file mode 100644
index 0000000..0e28f2d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0106-Entropia.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0108-Arcano.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0108-Arcano.xiz
new file mode 100644
index 0000000..ff02336
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0108-Arcano.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0109-Arcano2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0109-Arcano2.xiz
new file mode 100644
index 0000000..459c8ed
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0109-Arcano2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0110-Arcano3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0110-Arcano3.xiz
new file mode 100644
index 0000000..ae4325c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0110-Arcano3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0112-Glass_01.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0112-Glass_01.xiz
new file mode 100644
index 0000000..0ce32db
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0112-Glass_01.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0113-Glass_02a.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0113-Glass_02a.xiz
new file mode 100644
index 0000000..17c4a65
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0113-Glass_02a.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0114-Glass_02b.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0114-Glass_02b.xiz
new file mode 100644
index 0000000..4e29422
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0114-Glass_02b.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0115-Glass_03.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0115-Glass_03.xiz
new file mode 100644
index 0000000..978650d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0115-Glass_03.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0116-Glass_04.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0116-Glass_04.xiz
new file mode 100644
index 0000000..2822e7c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0116-Glass_04.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0119-Arcadia_1.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0119-Arcadia_1.xiz
new file mode 100644
index 0000000..57b7445
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0119-Arcadia_1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0120-Arcadia_2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0120-Arcadia_2.xiz
new file mode 100644
index 0000000..ba06444
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0120-Arcadia_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0121-Arcadia_3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0121-Arcadia_3.xiz
new file mode 100644
index 0000000..06ffc16
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0121-Arcadia_3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0122-Arcadia_4.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0122-Arcadia_4.xiz
new file mode 100644
index 0000000..d56fe53
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0122-Arcadia_4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0124-Armonica.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0124-Armonica.xiz
new file mode 100644
index 0000000..26e4fd2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0124-Armonica.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0125-Fanfara.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0125-Fanfara.xiz
new file mode 100644
index 0000000..f39d8da
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0125-Fanfara.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0126-Polvere.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0126-Polvere.xiz
new file mode 100644
index 0000000..fe4b19d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0126-Polvere.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0127-Comb Filter.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0127-Comb Filter.xiz
new file mode 100644
index 0000000..8f2c477
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0127-Comb Filter.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0128-Synth Pad 5.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0128-Synth Pad 5.xiz
new file mode 100644
index 0000000..72e2fdd
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0128-Synth Pad 5.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0129-Bello.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0129-Bello.xiz
new file mode 100644
index 0000000..c0e3e0a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0129-Bello.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0130-abbellimento.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0130-abbellimento.xiz
new file mode 100644
index 0000000..4299483
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0130-abbellimento.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0131-Carino.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0131-Carino.xiz
new file mode 100644
index 0000000..02c1ef8
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0131-Carino.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0132-Cigno.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0132-Cigno.xiz
new file mode 100644
index 0000000..f6b35c3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0132-Cigno.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0133-fluido.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0133-fluido.xiz
new file mode 100644
index 0000000..94704e0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0133-fluido.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0136-Romantico.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0136-Romantico.xiz
new file mode 100644
index 0000000..4f35d51
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0136-Romantico.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0137-Romantico2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0137-Romantico2.xiz
new file mode 100644
index 0000000..a69af5b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0137-Romantico2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0138-romanticone.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0138-romanticone.xiz
new file mode 100644
index 0000000..367112c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0138-romanticone.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0139-Emptyness3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0139-Emptyness3.xiz
new file mode 100644
index 0000000..81e58f3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0139-Emptyness3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0140-Foglie.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0140-Foglie.xiz
new file mode 100644
index 0000000..e73adcd
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0140-Foglie.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0142-Solitudine.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0142-Solitudine.xiz
new file mode 100644
index 0000000..b2be370
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0142-Solitudine.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0144-Inquietudine.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0144-Inquietudine.xiz
new file mode 100644
index 0000000..9e1d733
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0144-Inquietudine.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0145-c.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0145-c.xiz
new file mode 100644
index 0000000..9f38808
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0145-c.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0146-Ancestrale.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0146-Ancestrale.xiz
new file mode 100644
index 0000000..c0c48bb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0146-Ancestrale.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0147-Attesa.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0147-Attesa.xiz
new file mode 100644
index 0000000..6aabbc8
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0147-Attesa.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0148-vento.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0148-vento.xiz
new file mode 100644
index 0000000..85e024c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0148-vento.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0149-pioggia.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0149-pioggia.xiz
new file mode 100644
index 0000000..29852c7
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0149-pioggia.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0150-nebbia.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0150-nebbia.xiz
new file mode 100644
index 0000000..011f3c2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0150-nebbia.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0151-Memory.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0151-Memory.xiz
new file mode 100644
index 0000000..b10b761
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0151-Memory.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0152-Memory2.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0152-Memory2.xiz
new file mode 100644
index 0000000..453fe01
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0152-Memory2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0153-Memory3.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0153-Memory3.xiz
new file mode 100644
index 0000000..aefd1fe
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0153-Memory3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0155-contorno.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0155-contorno.xiz
new file mode 100644
index 0000000..75a1aad
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0155-contorno.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0156-fantasia.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0156-fantasia.xiz
new file mode 100644
index 0000000..9e68fab
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0156-fantasia.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0157-nostalgia.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0157-nostalgia.xiz
new file mode 100644
index 0000000..7ecc7b6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0157-nostalgia.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0158-patetico.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0158-patetico.xiz
new file mode 100644
index 0000000..0b04f64
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0158-patetico.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/0159-Destino.xiz b/data/presets/ZynAddSubFX/Cormi_Sound/0159-Destino.xiz
new file mode 100644
index 0000000..08079a4
Binary files /dev/null and b/data/presets/ZynAddSubFX/Cormi_Sound/0159-Destino.xiz differ
diff --git a/data/presets/ZynAddSubFX/Cormi_Sound/ReadMe.txt b/data/presets/ZynAddSubFX/Cormi_Sound/ReadMe.txt
new file mode 100644
index 0000000..1a82faa
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Cormi_Sound/ReadMe.txt
@@ -0,0 +1,27 @@
+ January 28th 2013
+
+Dear friend,
+here's an improved version of my instruments, release V2.0
+There are two banks: sound and noise.
+
+Maybe in the next times I'll need three of them.
+
+I like fantasy sounds, the zyn instruments do not reflect real instruments.
+Some are modified copies created by others.
+
+I'm using ZynAddSubFx in almost all of my compositions. They are oriented to background sounds for narration.
+So the instruments want to suggest atmospheres, feelings, and are not finalized to songs.
+Often I mix two or three instruments simultaneously to produce a full sound.
+
+
+You can hear some of them in:
+http://www.freesound.org/search/?q=cormi&f=duration%3A%5B0+TO+*%5D&s=created+desc&advanced=1&a_username=1&g=1
+
+
+
+I hope you'll enjoy my work as I enjoyed those that people wanted to share with me.
+
+
+
+
+cormi
diff --git a/data/presets/ZynAddSubFX/Guitar/0065-Clean Guitar1.xiz b/data/presets/ZynAddSubFX/Guitar/0065-Clean Guitar1.xiz
index 98f1c2b..4233f4f 100644
Binary files a/data/presets/ZynAddSubFX/Guitar/0065-Clean Guitar1.xiz and b/data/presets/ZynAddSubFX/Guitar/0065-Clean Guitar1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Guitar/0066-Electric Guitar.xiz b/data/presets/ZynAddSubFX/Guitar/0066-Electric Guitar.xiz
new file mode 100644
index 0000000..57bdeae
Binary files /dev/null and b/data/presets/ZynAddSubFX/Guitar/0066-Electric Guitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/Guitar/0097-Space Guitar.xiz b/data/presets/ZynAddSubFX/Guitar/0097-Space Guitar.xiz
new file mode 100644
index 0000000..4a7802d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Guitar/0097-Space Guitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0001-SquareToSine.xiz b/data/presets/ZynAddSubFX/Laba170bank/0001-SquareToSine.xiz
new file mode 100644
index 0000000..63b26b3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0001-SquareToSine.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0002-GaussToSine.xiz b/data/presets/ZynAddSubFX/Laba170bank/0002-GaussToSine.xiz
new file mode 100644
index 0000000..eb8603b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0002-GaussToSine.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0003-MorphingOrgan.xiz b/data/presets/ZynAddSubFX/Laba170bank/0003-MorphingOrgan.xiz
new file mode 100644
index 0000000..104eb6c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0003-MorphingOrgan.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0004-ThinLead.xiz b/data/presets/ZynAddSubFX/Laba170bank/0004-ThinLead.xiz
new file mode 100644
index 0000000..b3c5bcf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0004-ThinLead.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0005-BrightLead.xiz b/data/presets/ZynAddSubFX/Laba170bank/0005-BrightLead.xiz
new file mode 100644
index 0000000..941e01a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0005-BrightLead.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0006-GenericLead.xiz b/data/presets/ZynAddSubFX/Laba170bank/0006-GenericLead.xiz
new file mode 100644
index 0000000..005c06d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0006-GenericLead.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0007-MorphingSuperSaw.xiz b/data/presets/ZynAddSubFX/Laba170bank/0007-MorphingSuperSaw.xiz
new file mode 100644
index 0000000..7132581
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0007-MorphingSuperSaw.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0008-BrassyFlute.xiz b/data/presets/ZynAddSubFX/Laba170bank/0008-BrassyFlute.xiz
new file mode 100644
index 0000000..fe62db1
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0008-BrassyFlute.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0009-GenericLead2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0009-GenericLead2.xiz
new file mode 100644
index 0000000..6869a87
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0009-GenericLead2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0027-ShortFlute.xiz b/data/presets/ZynAddSubFX/Laba170bank/0027-ShortFlute.xiz
new file mode 100644
index 0000000..be413be
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0027-ShortFlute.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0028-PianoBell.xiz b/data/presets/ZynAddSubFX/Laba170bank/0028-PianoBell.xiz
new file mode 100644
index 0000000..7dbdd8e
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0028-PianoBell.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0029-PianoHarp.xiz b/data/presets/ZynAddSubFX/Laba170bank/0029-PianoHarp.xiz
new file mode 100644
index 0000000..0789d7d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0029-PianoHarp.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0030-ScaredPulse.xiz b/data/presets/ZynAddSubFX/Laba170bank/0030-ScaredPulse.xiz
new file mode 100644
index 0000000..8337f39
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0030-ScaredPulse.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0031-Twang2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0031-Twang2.xiz
new file mode 100644
index 0000000..b2379ad
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0031-Twang2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0032-Twang1.xiz b/data/presets/ZynAddSubFX/Laba170bank/0032-Twang1.xiz
new file mode 100644
index 0000000..221935a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0032-Twang1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0037-FatPatch.xiz b/data/presets/ZynAddSubFX/Laba170bank/0037-FatPatch.xiz
new file mode 100644
index 0000000..67dd10a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0037-FatPatch.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0038-FatPatchSimpler.xiz b/data/presets/ZynAddSubFX/Laba170bank/0038-FatPatchSimpler.xiz
new file mode 100644
index 0000000..7391694
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0038-FatPatchSimpler.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0039-FatPatchSimpler2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0039-FatPatchSimpler2.xiz
new file mode 100644
index 0000000..7927e27
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0039-FatPatchSimpler2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0046-NoisyGuitar.xiz b/data/presets/ZynAddSubFX/Laba170bank/0046-NoisyGuitar.xiz
new file mode 100644
index 0000000..ca9d80b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0046-NoisyGuitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0047-NoisyGuitar2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0047-NoisyGuitar2.xiz
new file mode 100644
index 0000000..f5c3b59
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0047-NoisyGuitar2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0048-NoisyGuitar3.xiz b/data/presets/ZynAddSubFX/Laba170bank/0048-NoisyGuitar3.xiz
new file mode 100644
index 0000000..22942b0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0048-NoisyGuitar3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0049-guitar-PowerChorder.xiz b/data/presets/ZynAddSubFX/Laba170bank/0049-guitar-PowerChorder.xiz
new file mode 100644
index 0000000..8cb0826
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0049-guitar-PowerChorder.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0050-SynGuitarAcoustic1.xiz b/data/presets/ZynAddSubFX/Laba170bank/0050-SynGuitarAcoustic1.xiz
new file mode 100644
index 0000000..925ea8f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0050-SynGuitarAcoustic1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0051-SynGuitarAcoustic2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0051-SynGuitarAcoustic2.xiz
new file mode 100644
index 0000000..9f33821
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0051-SynGuitarAcoustic2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0052-SynGuitarAcoustic3.xiz b/data/presets/ZynAddSubFX/Laba170bank/0052-SynGuitarAcoustic3.xiz
new file mode 100644
index 0000000..0cc1eab
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0052-SynGuitarAcoustic3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0054-DevilsFiddle.xiz b/data/presets/ZynAddSubFX/Laba170bank/0054-DevilsFiddle.xiz
new file mode 100644
index 0000000..2d3803f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0054-DevilsFiddle.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0055-DevilsFiddle2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0055-DevilsFiddle2.xiz
new file mode 100644
index 0000000..93c06cc
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0055-DevilsFiddle2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0085-PanFluteSawPad.xiz b/data/presets/ZynAddSubFX/Laba170bank/0085-PanFluteSawPad.xiz
new file mode 100644
index 0000000..03d8766
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0085-PanFluteSawPad.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0086-BlownPiano.xiz b/data/presets/ZynAddSubFX/Laba170bank/0086-BlownPiano.xiz
new file mode 100644
index 0000000..9b9e1cf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0086-BlownPiano.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0087-ChoirPatch.xiz b/data/presets/ZynAddSubFX/Laba170bank/0087-ChoirPatch.xiz
new file mode 100644
index 0000000..e4aa4e6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0087-ChoirPatch.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0088-InfraSoundPad.xiz b/data/presets/ZynAddSubFX/Laba170bank/0088-InfraSoundPad.xiz
new file mode 100644
index 0000000..c6b6dc0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0088-InfraSoundPad.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0089-InfraSound2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0089-InfraSound2.xiz
new file mode 100644
index 0000000..770fcc8
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0089-InfraSound2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0090-Pad-RingModSine.xiz b/data/presets/ZynAddSubFX/Laba170bank/0090-Pad-RingModSine.xiz
new file mode 100644
index 0000000..280576b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0090-Pad-RingModSine.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0091-FatPad.xiz b/data/presets/ZynAddSubFX/Laba170bank/0091-FatPad.xiz
new file mode 100644
index 0000000..70e5d4f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0091-FatPad.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0092-VibratingPad.xiz b/data/presets/ZynAddSubFX/Laba170bank/0092-VibratingPad.xiz
new file mode 100644
index 0000000..e189a0c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0092-VibratingPad.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0097-AnalogBass.xiz b/data/presets/ZynAddSubFX/Laba170bank/0097-AnalogBass.xiz
new file mode 100644
index 0000000..2d83459
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0097-AnalogBass.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0098-DoublePadBass.xiz b/data/presets/ZynAddSubFX/Laba170bank/0098-DoublePadBass.xiz
new file mode 100644
index 0000000..834952c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0098-DoublePadBass.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0099-SharpBass1.xiz b/data/presets/ZynAddSubFX/Laba170bank/0099-SharpBass1.xiz
new file mode 100644
index 0000000..3df572c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0099-SharpBass1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0100-SharpBass4.xiz b/data/presets/ZynAddSubFX/Laba170bank/0100-SharpBass4.xiz
new file mode 100644
index 0000000..2a944c6
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0100-SharpBass4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0101-SharpBass5.xiz b/data/presets/ZynAddSubFX/Laba170bank/0101-SharpBass5.xiz
new file mode 100644
index 0000000..7d3a033
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0101-SharpBass5.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0102-PluckedWithTailBassy.xiz b/data/presets/ZynAddSubFX/Laba170bank/0102-PluckedWithTailBassy.xiz
new file mode 100644
index 0000000..36a82d5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0102-PluckedWithTailBassy.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0103-PluckedAnalogBass.xiz b/data/presets/ZynAddSubFX/Laba170bank/0103-PluckedAnalogBass.xiz
new file mode 100644
index 0000000..c1bd866
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0103-PluckedAnalogBass.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0108-NoisyPulseLead.xiz b/data/presets/ZynAddSubFX/Laba170bank/0108-NoisyPulseLead.xiz
new file mode 100644
index 0000000..6c1dc00
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0108-NoisyPulseLead.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0109-NoisyPulseLead2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0109-NoisyPulseLead2.xiz
new file mode 100644
index 0000000..a98afd9
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0109-NoisyPulseLead2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0110-wierdSchwoop.xiz b/data/presets/ZynAddSubFX/Laba170bank/0110-wierdSchwoop.xiz
new file mode 100644
index 0000000..7de5f97
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0110-wierdSchwoop.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0111-PoorAccordion.xiz b/data/presets/ZynAddSubFX/Laba170bank/0111-PoorAccordion.xiz
new file mode 100644
index 0000000..3bf808c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0111-PoorAccordion.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0112-PoorTrumpet.xiz b/data/presets/ZynAddSubFX/Laba170bank/0112-PoorTrumpet.xiz
new file mode 100644
index 0000000..258890e
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0112-PoorTrumpet.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0113-BassyChirp.xiz b/data/presets/ZynAddSubFX/Laba170bank/0113-BassyChirp.xiz
new file mode 100644
index 0000000..380ded4
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0113-BassyChirp.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0114-hoarseorgan.xiz b/data/presets/ZynAddSubFX/Laba170bank/0114-hoarseorgan.xiz
new file mode 100644
index 0000000..62e654a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0114-hoarseorgan.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0115-MysticlBells.xiz b/data/presets/ZynAddSubFX/Laba170bank/0115-MysticlBells.xiz
new file mode 100644
index 0000000..623ab6a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0115-MysticlBells.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0129-chip-SlowSawStrings.xiz b/data/presets/ZynAddSubFX/Laba170bank/0129-chip-SlowSawStrings.xiz
new file mode 100644
index 0000000..01e791a
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0129-chip-SlowSawStrings.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0130-chip-SIDarpSoft.xiz b/data/presets/ZynAddSubFX/Laba170bank/0130-chip-SIDarpSoft.xiz
new file mode 100644
index 0000000..26da9ae
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0130-chip-SIDarpSoft.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0131-chip-SIDarpSharp.xiz b/data/presets/ZynAddSubFX/Laba170bank/0131-chip-SIDarpSharp.xiz
new file mode 100644
index 0000000..6e6f1eb
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0131-chip-SIDarpSharp.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0132-chip-SIDarpSharp2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0132-chip-SIDarpSharp2.xiz
new file mode 100644
index 0000000..8741720
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0132-chip-SIDarpSharp2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0133-chip-HarshSaw.xiz b/data/presets/ZynAddSubFX/Laba170bank/0133-chip-HarshSaw.xiz
new file mode 100644
index 0000000..d099e97
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0133-chip-HarshSaw.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0134-chip-VibratoLead.xiz b/data/presets/ZynAddSubFX/Laba170bank/0134-chip-VibratoLead.xiz
new file mode 100644
index 0000000..98c2f68
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0134-chip-VibratoLead.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0135-chip-VibratoLead2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0135-chip-VibratoLead2.xiz
new file mode 100644
index 0000000..a9a73ab
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0135-chip-VibratoLead2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0136-chip-PWM-VibratoLead.xiz b/data/presets/ZynAddSubFX/Laba170bank/0136-chip-PWM-VibratoLead.xiz
new file mode 100644
index 0000000..47e3e5b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0136-chip-PWM-VibratoLead.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0137-chip-PolyDistorted.xiz b/data/presets/ZynAddSubFX/Laba170bank/0137-chip-PolyDistorted.xiz
new file mode 100644
index 0000000..a1e39c2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0137-chip-PolyDistorted.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0138-chip-PolyDistorted2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0138-chip-PolyDistorted2.xiz
new file mode 100644
index 0000000..7065c72
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0138-chip-PolyDistorted2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0146-PluckedWithVibTail.xiz b/data/presets/ZynAddSubFX/Laba170bank/0146-PluckedWithVibTail.xiz
new file mode 100644
index 0000000..2b796ab
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0146-PluckedWithVibTail.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0147-PluckedWithTail2.xiz b/data/presets/ZynAddSubFX/Laba170bank/0147-PluckedWithTail2.xiz
new file mode 100644
index 0000000..a93c4df
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0147-PluckedWithTail2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/0148-PluckedWithTail.xiz b/data/presets/ZynAddSubFX/Laba170bank/0148-PluckedWithTail.xiz
new file mode 100644
index 0000000..9546979
Binary files /dev/null and b/data/presets/ZynAddSubFX/Laba170bank/0148-PluckedWithTail.xiz differ
diff --git a/data/presets/ZynAddSubFX/Laba170bank/descriptions.txt b/data/presets/ZynAddSubFX/Laba170bank/descriptions.txt
new file mode 100644
index 0000000..b4df119
--- /dev/null
+++ b/data/presets/ZynAddSubFX/Laba170bank/descriptions.txt
@@ -0,0 +1,8 @@
+Author of presets: Laba170
+
+Made in Zynaddsubfx vsti ver 2.4.1.420
+
+
+* Some of these presets needs unison to sound like they were intended.
+
+* Relative bandwith (relBW) can on many patches be tweaked to fatten up the sound or make it sharper.
\ No newline at end of file
diff --git a/data/presets/ZynAddSubFX/Misc/0005-Bells 4.xiz b/data/presets/ZynAddSubFX/Misc/0005-Bells 4.xiz
new file mode 100644
index 0000000..f5002c4
Binary files /dev/null and b/data/presets/ZynAddSubFX/Misc/0005-Bells 4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Misc/0036-Trash Synth 4.xiz b/data/presets/ZynAddSubFX/Misc/0036-Trash Synth 4.xiz
new file mode 100644
index 0000000..9059690
Binary files /dev/null and b/data/presets/ZynAddSubFX/Misc/0036-Trash Synth 4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Misc/0065-SuperSaw 1.xiz b/data/presets/ZynAddSubFX/Misc/0065-SuperSaw 1.xiz
new file mode 100644
index 0000000..c90f615
Binary files /dev/null and b/data/presets/ZynAddSubFX/Misc/0065-SuperSaw 1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Misc/0066-SuperSaw 2.xiz b/data/presets/ZynAddSubFX/Misc/0066-SuperSaw 2.xiz
new file mode 100644
index 0000000..d4a8cc7
Binary files /dev/null and b/data/presets/ZynAddSubFX/Misc/0066-SuperSaw 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Misc/0067-SuperSaw 3.xiz b/data/presets/ZynAddSubFX/Misc/0067-SuperSaw 3.xiz
new file mode 100644
index 0000000..871e711
Binary files /dev/null and b/data/presets/ZynAddSubFX/Misc/0067-SuperSaw 3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Misc/0068-SuperSaw 4.xiz b/data/presets/ZynAddSubFX/Misc/0068-SuperSaw 4.xiz
new file mode 100644
index 0000000..117d41d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Misc/0068-SuperSaw 4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Misc/0069-SuperSaw 5.xiz b/data/presets/ZynAddSubFX/Misc/0069-SuperSaw 5.xiz
new file mode 100644
index 0000000..ba3202d
Binary files /dev/null and b/data/presets/ZynAddSubFX/Misc/0069-SuperSaw 5.xiz differ
diff --git a/data/presets/ZynAddSubFX/Misc/0070-SuperSaw 6.xiz b/data/presets/ZynAddSubFX/Misc/0070-SuperSaw 6.xiz
new file mode 100644
index 0000000..5ee055f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Misc/0070-SuperSaw 6.xiz differ
diff --git a/data/presets/ZynAddSubFX/Organ/0012-Organ 12.xiz b/data/presets/ZynAddSubFX/Organ/0012-Organ 12.xiz
new file mode 100644
index 0000000..38ae599
Binary files /dev/null and b/data/presets/ZynAddSubFX/Organ/0012-Organ 12.xiz differ
diff --git a/data/presets/ZynAddSubFX/Organ/0040-Church Organ 4.xiz b/data/presets/ZynAddSubFX/Organ/0040-Church Organ 4.xiz
new file mode 100644
index 0000000..5527737
Binary files /dev/null and b/data/presets/ZynAddSubFX/Organ/0040-Church Organ 4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Pads/0034-Synth Pad 2.xiz b/data/presets/ZynAddSubFX/Pads/0034-Synth Pad 2.xiz
index 60258b4..0a2a548 100644
Binary files a/data/presets/ZynAddSubFX/Pads/0034-Synth Pad 2.xiz and b/data/presets/ZynAddSubFX/Pads/0034-Synth Pad 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Pads/0037-Synth Pad 5.xiz b/data/presets/ZynAddSubFX/Pads/0037-Synth Pad 5.xiz
new file mode 100644
index 0000000..d234cc2
Binary files /dev/null and b/data/presets/ZynAddSubFX/Pads/0037-Synth Pad 5.xiz differ
diff --git a/data/presets/ZynAddSubFX/Pads/0097-Bell Pad.xiz b/data/presets/ZynAddSubFX/Pads/0097-Bell Pad.xiz
new file mode 100644
index 0000000..b8fbe4f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Pads/0097-Bell Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/Plucked/0065-Plucked Pad1.xiz b/data/presets/ZynAddSubFX/Plucked/0065-Plucked Pad1.xiz
new file mode 100644
index 0000000..6c5e365
Binary files /dev/null and b/data/presets/ZynAddSubFX/Plucked/0065-Plucked Pad1.xiz differ
diff --git a/data/presets/ZynAddSubFX/ReedAndWind/0040-Reed 8.xiz b/data/presets/ZynAddSubFX/ReedAndWind/0040-Reed 8.xiz
new file mode 100644
index 0000000..c691527
Binary files /dev/null and b/data/presets/ZynAddSubFX/ReedAndWind/0040-Reed 8.xiz differ
diff --git a/data/presets/ZynAddSubFX/ReedAndWind/0068-Chorused Flute.xiz b/data/presets/ZynAddSubFX/ReedAndWind/0068-Chorused Flute.xiz
new file mode 100644
index 0000000..1eb4136
Binary files /dev/null and b/data/presets/ZynAddSubFX/ReedAndWind/0068-Chorused Flute.xiz differ
diff --git a/data/presets/ZynAddSubFX/Rhodes/0034-FM Rhodes 2.xiz b/data/presets/ZynAddSubFX/Rhodes/0034-FM Rhodes 2.xiz
index 37d914e..0489d0b 100644
Binary files a/data/presets/ZynAddSubFX/Rhodes/0034-FM Rhodes 2.xiz and b/data/presets/ZynAddSubFX/Rhodes/0034-FM Rhodes 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Rhodes/0067-RhodesPad1.xiz b/data/presets/ZynAddSubFX/Rhodes/0067-RhodesPad1.xiz
new file mode 100644
index 0000000..258f51b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Rhodes/0067-RhodesPad1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Rhodes/0068-RhodesPad2.xiz b/data/presets/ZynAddSubFX/Rhodes/0068-RhodesPad2.xiz
new file mode 100644
index 0000000..7161dce
Binary files /dev/null and b/data/presets/ZynAddSubFX/Rhodes/0068-RhodesPad2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Splitted/0001-Strings and Reed1.xiz b/data/presets/ZynAddSubFX/Splitted/0001-Strings and Reed1.xiz
new file mode 100644
index 0000000..82f7d2e
Binary files /dev/null and b/data/presets/ZynAddSubFX/Splitted/0001-Strings and Reed1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Splitted/0002-Strings and Reed2.xiz b/data/presets/ZynAddSubFX/Splitted/0002-Strings and Reed2.xiz
new file mode 100644
index 0000000..24dcd3b
Binary files /dev/null and b/data/presets/ZynAddSubFX/Splitted/0002-Strings and Reed2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Splitted/0003-Strings and Flute.xiz b/data/presets/ZynAddSubFX/Splitted/0003-Strings and Flute.xiz
new file mode 100644
index 0000000..82d2b54
Binary files /dev/null and b/data/presets/ZynAddSubFX/Splitted/0003-Strings and Flute.xiz differ
diff --git a/data/presets/ZynAddSubFX/Splitted/0033-Choir and Reed.xiz b/data/presets/ZynAddSubFX/Splitted/0033-Choir and Reed.xiz
new file mode 100644
index 0000000..acd226f
Binary files /dev/null and b/data/presets/ZynAddSubFX/Splitted/0033-Choir and Reed.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0010-Strings Pad1.xiz b/data/presets/ZynAddSubFX/Strings/0010-Strings Pad1.xiz
new file mode 100644
index 0000000..37b5aa5
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0010-Strings Pad1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0011-Strings Pad2.xiz b/data/presets/ZynAddSubFX/Strings/0011-Strings Pad2.xiz
new file mode 100644
index 0000000..fef8a75
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0011-Strings Pad2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0012-Strings Pad3.xiz b/data/presets/ZynAddSubFX/Strings/0012-Strings Pad3.xiz
new file mode 100644
index 0000000..1a2d9d0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0012-Strings Pad3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0013-Strings Pad4.xiz b/data/presets/ZynAddSubFX/Strings/0013-Strings Pad4.xiz
new file mode 100644
index 0000000..7d200d3
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0013-Strings Pad4.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0014-Strings Pad5.xiz b/data/presets/ZynAddSubFX/Strings/0014-Strings Pad5.xiz
new file mode 100644
index 0000000..58b539c
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0014-Strings Pad5.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0015-Strings Pad6.xiz b/data/presets/ZynAddSubFX/Strings/0015-Strings Pad6.xiz
new file mode 100644
index 0000000..b9bed21
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0015-Strings Pad6.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0066-Dual Strings.xiz b/data/presets/ZynAddSubFX/Strings/0066-Dual Strings.xiz
index 4e236ba..1a83fb1 100644
Binary files a/data/presets/ZynAddSubFX/Strings/0066-Dual Strings.xiz and b/data/presets/ZynAddSubFX/Strings/0066-Dual Strings.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0067-Dual Strings Oct1.xiz b/data/presets/ZynAddSubFX/Strings/0067-Dual Strings Oct1.xiz
new file mode 100644
index 0000000..e36b557
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0067-Dual Strings Oct1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0068-Dual Strings Oct2.xiz b/data/presets/ZynAddSubFX/Strings/0068-Dual Strings Oct2.xiz
new file mode 100644
index 0000000..2d93b42
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0068-Dual Strings Oct2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Strings/0073-Morph Strings1.xiz b/data/presets/ZynAddSubFX/Strings/0073-Morph Strings1.xiz
new file mode 100644
index 0000000..7e988f0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Strings/0073-Morph Strings1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Synth/0006-Pulse Pad 3.xiz b/data/presets/ZynAddSubFX/Synth/0006-Pulse Pad 3.xiz
new file mode 100644
index 0000000..a460bdf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Synth/0006-Pulse Pad 3.xiz differ
diff --git a/data/presets/ZynAddSubFX/Synth/0065-Computer Lead1.xiz b/data/presets/ZynAddSubFX/Synth/0065-Computer Lead1.xiz
new file mode 100644
index 0000000..d11e7bf
Binary files /dev/null and b/data/presets/ZynAddSubFX/Synth/0065-Computer Lead1.xiz differ
diff --git a/data/presets/ZynAddSubFX/Synth/0066-Computer Lead2.xiz b/data/presets/ZynAddSubFX/Synth/0066-Computer Lead2.xiz
new file mode 100644
index 0000000..69804a0
Binary files /dev/null and b/data/presets/ZynAddSubFX/Synth/0066-Computer Lead2.xiz differ
diff --git a/data/presets/ZynAddSubFX/Synth/0070-Solo Synth 1.xiz b/data/presets/ZynAddSubFX/Synth/0070-Solo Synth 1.xiz
new file mode 100644
index 0000000..d043677
Binary files /dev/null and b/data/presets/ZynAddSubFX/Synth/0070-Solo Synth 1.xiz differ
diff --git a/data/presets/ZynAddSubFX/SynthPiano/0043-Saw Piano 1.xiz b/data/presets/ZynAddSubFX/SynthPiano/0043-Saw Piano 1.xiz
new file mode 100644
index 0000000..245be87
Binary files /dev/null and b/data/presets/ZynAddSubFX/SynthPiano/0043-Saw Piano 1.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0001-Folk Flute.xiz b/data/presets/ZynAddSubFX/olivers-100/0001-Folk Flute.xiz
new file mode 100644
index 0000000..d6fd85a
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0001-Folk Flute.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0002-Bamboo Flute.xiz b/data/presets/ZynAddSubFX/olivers-100/0002-Bamboo Flute.xiz
new file mode 100644
index 0000000..429c11a
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0002-Bamboo Flute.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0003-FM Flute.xiz b/data/presets/ZynAddSubFX/olivers-100/0003-FM Flute.xiz
new file mode 100644
index 0000000..e3c3285
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0003-FM Flute.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0004-Triple Osc Flute.xiz b/data/presets/ZynAddSubFX/olivers-100/0004-Triple Osc Flute.xiz
new file mode 100644
index 0000000..6394700
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0004-Triple Osc Flute.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0005-Soprano Double Reed.xiz b/data/presets/ZynAddSubFX/olivers-100/0005-Soprano Double Reed.xiz
new file mode 100644
index 0000000..f65fdd2
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0005-Soprano Double Reed.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0006-FM Saxophone.xiz b/data/presets/ZynAddSubFX/olivers-100/0006-FM Saxophone.xiz
new file mode 100644
index 0000000..5eb8bef
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0006-FM Saxophone.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0007-FM Saxophone 2.xiz b/data/presets/ZynAddSubFX/olivers-100/0007-FM Saxophone 2.xiz
new file mode 100644
index 0000000..b1c0493
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0007-FM Saxophone 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0008-Concertina.xiz b/data/presets/ZynAddSubFX/olivers-100/0008-Concertina.xiz
new file mode 100644
index 0000000..fed42c3
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0008-Concertina.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0009-FM Brass 1.xiz b/data/presets/ZynAddSubFX/olivers-100/0009-FM Brass 1.xiz
new file mode 100644
index 0000000..a8e4188
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0009-FM Brass 1.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0010-FM Brass 2.xiz b/data/presets/ZynAddSubFX/olivers-100/0010-FM Brass 2.xiz
new file mode 100644
index 0000000..c368741
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0010-FM Brass 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0011-FM Brass 3.xiz b/data/presets/ZynAddSubFX/olivers-100/0011-FM Brass 3.xiz
new file mode 100644
index 0000000..6992889
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0011-FM Brass 3.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0013-Soft Guitar.xiz b/data/presets/ZynAddSubFX/olivers-100/0013-Soft Guitar.xiz
new file mode 100644
index 0000000..6f39f38
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0013-Soft Guitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0014-Dist Jazz Guitar.xiz b/data/presets/ZynAddSubFX/olivers-100/0014-Dist Jazz Guitar.xiz
new file mode 100644
index 0000000..2d50e0d
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0014-Dist Jazz Guitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0015-Dist Jazz Guitar 2.xiz b/data/presets/ZynAddSubFX/olivers-100/0015-Dist Jazz Guitar 2.xiz
new file mode 100644
index 0000000..4f0fd00
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0015-Dist Jazz Guitar 2.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0016-Banjoey.xiz b/data/presets/ZynAddSubFX/olivers-100/0016-Banjoey.xiz
new file mode 100644
index 0000000..5e561c6
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0016-Banjoey.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0017-Bass Guitar.xiz b/data/presets/ZynAddSubFX/olivers-100/0017-Bass Guitar.xiz
new file mode 100644
index 0000000..9264149
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0017-Bass Guitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0018-Bass Guitar - Slap.xiz b/data/presets/ZynAddSubFX/olivers-100/0018-Bass Guitar - Slap.xiz
new file mode 100644
index 0000000..47d6919
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0018-Bass Guitar - Slap.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0019-FM Sitar.xiz b/data/presets/ZynAddSubFX/olivers-100/0019-FM Sitar.xiz
new file mode 100644
index 0000000..6aded73
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0019-FM Sitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0021-EP - Twangy.xiz b/data/presets/ZynAddSubFX/olivers-100/0021-EP - Twangy.xiz
new file mode 100644
index 0000000..be2b4f1
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0021-EP - Twangy.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0022-EP - Muted.xiz b/data/presets/ZynAddSubFX/olivers-100/0022-EP - Muted.xiz
new file mode 100644
index 0000000..03a8ca3
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0022-EP - Muted.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0023-EP - Brighter.xiz b/data/presets/ZynAddSubFX/olivers-100/0023-EP - Brighter.xiz
new file mode 100644
index 0000000..772c23e
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0023-EP - Brighter.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0024-Far Out EP.xiz b/data/presets/ZynAddSubFX/olivers-100/0024-Far Out EP.xiz
new file mode 100644
index 0000000..682cff5
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0024-Far Out EP.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0025-Clavinoid.xiz b/data/presets/ZynAddSubFX/olivers-100/0025-Clavinoid.xiz
new file mode 100644
index 0000000..42975f2
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0025-Clavinoid.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0026-Harpsichord.xiz b/data/presets/ZynAddSubFX/olivers-100/0026-Harpsichord.xiz
new file mode 100644
index 0000000..0c7eca8
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0026-Harpsichord.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0027-Toy Piano.xiz b/data/presets/ZynAddSubFX/olivers-100/0027-Toy Piano.xiz
new file mode 100644
index 0000000..4f1c5b5
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0027-Toy Piano.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0028-Mallets.xiz b/data/presets/ZynAddSubFX/olivers-100/0028-Mallets.xiz
new file mode 100644
index 0000000..937d9e0
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0028-Mallets.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0029-Steel Drums.xiz b/data/presets/ZynAddSubFX/olivers-100/0029-Steel Drums.xiz
new file mode 100644
index 0000000..ed92098
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0029-Steel Drums.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0030-Balinese Chimes.xiz b/data/presets/ZynAddSubFX/olivers-100/0030-Balinese Chimes.xiz
new file mode 100644
index 0000000..af080ec
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0030-Balinese Chimes.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0031-Muffled Chimes.xiz b/data/presets/ZynAddSubFX/olivers-100/0031-Muffled Chimes.xiz
new file mode 100644
index 0000000..e8c25a6
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0031-Muffled Chimes.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0032-Drum Kit.xiz b/data/presets/ZynAddSubFX/olivers-100/0032-Drum Kit.xiz
new file mode 100644
index 0000000..33e5a9a
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0032-Drum Kit.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0033-Big Crunchy.xiz b/data/presets/ZynAddSubFX/olivers-100/0033-Big Crunchy.xiz
new file mode 100644
index 0000000..dc0c2cb
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0033-Big Crunchy.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0034-Big Flangey.xiz b/data/presets/ZynAddSubFX/olivers-100/0034-Big Flangey.xiz
new file mode 100644
index 0000000..a6ae4bb
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0034-Big Flangey.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0035-Numanesque.xiz b/data/presets/ZynAddSubFX/olivers-100/0035-Numanesque.xiz
new file mode 100644
index 0000000..532ea19
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0035-Numanesque.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0036-240 Grit Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0036-240 Grit Lead.xiz
new file mode 100644
index 0000000..0051ee2
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0036-240 Grit Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0037-320 Grit Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0037-320 Grit Lead.xiz
new file mode 100644
index 0000000..d4acf52
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0037-320 Grit Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0038-Gentle Triangle Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0038-Gentle Triangle Lead.xiz
new file mode 100644
index 0000000..07b2a83
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0038-Gentle Triangle Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0039-Sliding Squares Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0039-Sliding Squares Lead.xiz
new file mode 100644
index 0000000..a35605a
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0039-Sliding Squares Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0040-Pheasant Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0040-Pheasant Lead.xiz
new file mode 100644
index 0000000..f4843b6
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0040-Pheasant Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0041-Plinker Bell.xiz b/data/presets/ZynAddSubFX/olivers-100/0041-Plinker Bell.xiz
new file mode 100644
index 0000000..5a718a3
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0041-Plinker Bell.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0042-Low pH Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0042-Low pH Lead.xiz
new file mode 100644
index 0000000..8391ad2
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0042-Low pH Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0043-Hovabotalilfanfeer.xiz b/data/presets/ZynAddSubFX/olivers-100/0043-Hovabotalilfanfeer.xiz
new file mode 100644
index 0000000..3b659df
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0043-Hovabotalilfanfeer.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0044-Muted Fanfare.xiz b/data/presets/ZynAddSubFX/olivers-100/0044-Muted Fanfare.xiz
new file mode 100644
index 0000000..51d8ed7
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0044-Muted Fanfare.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0045-Bink Bink Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0045-Bink Bink Lead.xiz
new file mode 100644
index 0000000..886aa80
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0045-Bink Bink Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0046-Bogus PWM Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0046-Bogus PWM Lead.xiz
new file mode 100644
index 0000000..2852a60
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0046-Bogus PWM Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0047-Dirty Vibrato Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0047-Dirty Vibrato Lead.xiz
new file mode 100644
index 0000000..123421d
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0047-Dirty Vibrato Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0048-Wichita Whoop.xiz b/data/presets/ZynAddSubFX/olivers-100/0048-Wichita Whoop.xiz
new file mode 100644
index 0000000..79c83a3
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0048-Wichita Whoop.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0049-Bitey Triangle Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0049-Bitey Triangle Lead.xiz
new file mode 100644
index 0000000..b062525
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0049-Bitey Triangle Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0050-70s Triangle Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0050-70s Triangle Lead.xiz
new file mode 100644
index 0000000..f50738b
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0050-70s Triangle Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0051-Agro Odds Lead.xiz b/data/presets/ZynAddSubFX/olivers-100/0051-Agro Odds Lead.xiz
new file mode 100644
index 0000000..b98ad0f
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0051-Agro Odds Lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0052-Soft Synth Brass.xiz b/data/presets/ZynAddSubFX/olivers-100/0052-Soft Synth Brass.xiz
new file mode 100644
index 0000000..b5d68a1
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0052-Soft Synth Brass.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0054-Funky Reso Bass.xiz b/data/presets/ZynAddSubFX/olivers-100/0054-Funky Reso Bass.xiz
new file mode 100644
index 0000000..da71f23
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0054-Funky Reso Bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0055-ssaB oseR yknuF.xiz b/data/presets/ZynAddSubFX/olivers-100/0055-ssaB oseR yknuF.xiz
new file mode 100644
index 0000000..099f40c
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0055-ssaB oseR yknuF.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0056-Creeky Reso Base.xiz b/data/presets/ZynAddSubFX/olivers-100/0056-Creeky Reso Base.xiz
new file mode 100644
index 0000000..ebae784
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0056-Creeky Reso Base.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0057-Synth Bass.xiz b/data/presets/ZynAddSubFX/olivers-100/0057-Synth Bass.xiz
new file mode 100644
index 0000000..8215f2a
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0057-Synth Bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0058-Basic Thick Bass.xiz b/data/presets/ZynAddSubFX/olivers-100/0058-Basic Thick Bass.xiz
new file mode 100644
index 0000000..964eacb
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0058-Basic Thick Bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0059-Dirt Encrusted Bass.xiz b/data/presets/ZynAddSubFX/olivers-100/0059-Dirt Encrusted Bass.xiz
new file mode 100644
index 0000000..9130081
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0059-Dirt Encrusted Bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0060-Punch Bass.xiz b/data/presets/ZynAddSubFX/olivers-100/0060-Punch Bass.xiz
new file mode 100644
index 0000000..b1743b8
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0060-Punch Bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0061-Formant Bass.xiz b/data/presets/ZynAddSubFX/olivers-100/0061-Formant Bass.xiz
new file mode 100644
index 0000000..c6397f0
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0061-Formant Bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0065-Osiris Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0065-Osiris Pad.xiz
new file mode 100644
index 0000000..37f5e73
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0065-Osiris Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0066-Phased Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0066-Phased Pad.xiz
new file mode 100644
index 0000000..c5df6fe
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0066-Phased Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0067-Growing Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0067-Growing Pad.xiz
new file mode 100644
index 0000000..025048b
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0067-Growing Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0068-Vintage Sweep Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0068-Vintage Sweep Pad.xiz
new file mode 100644
index 0000000..a725c84
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0068-Vintage Sweep Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0069-Mellow Echo Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0069-Mellow Echo Pad.xiz
new file mode 100644
index 0000000..13f48a3
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0069-Mellow Echo Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0070-Flanged Wind Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0070-Flanged Wind Pad.xiz
new file mode 100644
index 0000000..070fe34
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0070-Flanged Wind Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0071-Warble Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0071-Warble Pad.xiz
new file mode 100644
index 0000000..ea2a5b6
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0071-Warble Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0072-Organz from Outta Space.xiz b/data/presets/ZynAddSubFX/olivers-100/0072-Organz from Outta Space.xiz
new file mode 100644
index 0000000..9dc7afa
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0072-Organz from Outta Space.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0073-Shimmer Swell.xiz b/data/presets/ZynAddSubFX/olivers-100/0073-Shimmer Swell.xiz
new file mode 100644
index 0000000..510a4ee
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0073-Shimmer Swell.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0074-80s Poly 5ths.xiz b/data/presets/ZynAddSubFX/olivers-100/0074-80s Poly 5ths.xiz
new file mode 100644
index 0000000..006f6b8
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0074-80s Poly 5ths.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0075-Swell 5ths.xiz b/data/presets/ZynAddSubFX/olivers-100/0075-Swell 5ths.xiz
new file mode 100644
index 0000000..32c6e2c
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0075-Swell 5ths.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0076-Vastness 5ths.xiz b/data/presets/ZynAddSubFX/olivers-100/0076-Vastness 5ths.xiz
new file mode 100644
index 0000000..2e60650
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0076-Vastness 5ths.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0077-Celestial 5ths.xiz b/data/presets/ZynAddSubFX/olivers-100/0077-Celestial 5ths.xiz
new file mode 100644
index 0000000..4a0ddf2
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0077-Celestial 5ths.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0078-Supersaw Snit.xiz b/data/presets/ZynAddSubFX/olivers-100/0078-Supersaw Snit.xiz
new file mode 100644
index 0000000..46243b3
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0078-Supersaw Snit.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0079-Subtle Supersaw Strings.xiz b/data/presets/ZynAddSubFX/olivers-100/0079-Subtle Supersaw Strings.xiz
new file mode 100644
index 0000000..a9c4e59
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0079-Subtle Supersaw Strings.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0080-Jarre Strings.xiz b/data/presets/ZynAddSubFX/olivers-100/0080-Jarre Strings.xiz
new file mode 100644
index 0000000..5172034
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0080-Jarre Strings.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0081-Phased String Machine.xiz b/data/presets/ZynAddSubFX/olivers-100/0081-Phased String Machine.xiz
new file mode 100644
index 0000000..6cfadaf
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0081-Phased String Machine.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0082-Tronic Strings.xiz b/data/presets/ZynAddSubFX/olivers-100/0082-Tronic Strings.xiz
new file mode 100644
index 0000000..fecd5b8
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0082-Tronic Strings.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0083-Tronic Voices.xiz b/data/presets/ZynAddSubFX/olivers-100/0083-Tronic Voices.xiz
new file mode 100644
index 0000000..3cefcc6
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0083-Tronic Voices.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0084-Welcome to the 80s.xiz b/data/presets/ZynAddSubFX/olivers-100/0084-Welcome to the 80s.xiz
new file mode 100644
index 0000000..bbcc935
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0084-Welcome to the 80s.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0085-Bright 80s Horn Stab.xiz b/data/presets/ZynAddSubFX/olivers-100/0085-Bright 80s Horn Stab.xiz
new file mode 100644
index 0000000..2cc7aec
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0085-Bright 80s Horn Stab.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0086-Star Voyage Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0086-Star Voyage Pad.xiz
new file mode 100644
index 0000000..72aa82a
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0086-Star Voyage Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0087-Breathy Too.xiz b/data/presets/ZynAddSubFX/olivers-100/0087-Breathy Too.xiz
new file mode 100644
index 0000000..5c056dd
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0087-Breathy Too.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0088-Outer Galaxy Pad.xiz b/data/presets/ZynAddSubFX/olivers-100/0088-Outer Galaxy Pad.xiz
new file mode 100644
index 0000000..24066a5
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0088-Outer Galaxy Pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0090-Vintage Unison.xiz b/data/presets/ZynAddSubFX/olivers-100/0090-Vintage Unison.xiz
new file mode 100644
index 0000000..5f379ca
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0090-Vintage Unison.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0091-Breezy Chord.xiz b/data/presets/ZynAddSubFX/olivers-100/0091-Breezy Chord.xiz
new file mode 100644
index 0000000..53de24e
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0091-Breezy Chord.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0092-Airy Chord.xiz b/data/presets/ZynAddSubFX/olivers-100/0092-Airy Chord.xiz
new file mode 100644
index 0000000..26e6dc3
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0092-Airy Chord.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0093-Chimey Chord.xiz b/data/presets/ZynAddSubFX/olivers-100/0093-Chimey Chord.xiz
new file mode 100644
index 0000000..0aea8f9
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0093-Chimey Chord.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0094-Donk Donk Chord.xiz b/data/presets/ZynAddSubFX/olivers-100/0094-Donk Donk Chord.xiz
new file mode 100644
index 0000000..0c557fd
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0094-Donk Donk Chord.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0097-Passing Comet.xiz b/data/presets/ZynAddSubFX/olivers-100/0097-Passing Comet.xiz
new file mode 100644
index 0000000..66666ba
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0097-Passing Comet.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0098-Sweepy Noisy Pulses.xiz b/data/presets/ZynAddSubFX/olivers-100/0098-Sweepy Noisy Pulses.xiz
new file mode 100644
index 0000000..c5cf27b
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0098-Sweepy Noisy Pulses.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0099-Robot Overlords.xiz b/data/presets/ZynAddSubFX/olivers-100/0099-Robot Overlords.xiz
new file mode 100644
index 0000000..b6dd507
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0099-Robot Overlords.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0100-Scrubbed Launch.xiz b/data/presets/ZynAddSubFX/olivers-100/0100-Scrubbed Launch.xiz
new file mode 100644
index 0000000..c3f2d0a
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0100-Scrubbed Launch.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0101-Alien Lawnmower.xiz b/data/presets/ZynAddSubFX/olivers-100/0101-Alien Lawnmower.xiz
new file mode 100644
index 0000000..a36d5b8
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0101-Alien Lawnmower.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0102-RacecaR.xiz b/data/presets/ZynAddSubFX/olivers-100/0102-RacecaR.xiz
new file mode 100644
index 0000000..e98a5d2
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0102-RacecaR.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0103-Electric Swell.xiz b/data/presets/ZynAddSubFX/olivers-100/0103-Electric Swell.xiz
new file mode 100644
index 0000000..95f8b2e
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0103-Electric Swell.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0104-Classic FM Twang.xiz b/data/presets/ZynAddSubFX/olivers-100/0104-Classic FM Twang.xiz
new file mode 100644
index 0000000..94790ec
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0104-Classic FM Twang.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0105-Ominosity.xiz b/data/presets/ZynAddSubFX/olivers-100/0105-Ominosity.xiz
new file mode 100644
index 0000000..618af7e
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0105-Ominosity.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0106-Unpleasantly Drunk.xiz b/data/presets/ZynAddSubFX/olivers-100/0106-Unpleasantly Drunk.xiz
new file mode 100644
index 0000000..cd41041
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0106-Unpleasantly Drunk.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0107-Hammering Metal.xiz b/data/presets/ZynAddSubFX/olivers-100/0107-Hammering Metal.xiz
new file mode 100644
index 0000000..ee234bb
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0107-Hammering Metal.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0108-Boiling Cauldron.xiz b/data/presets/ZynAddSubFX/olivers-100/0108-Boiling Cauldron.xiz
new file mode 100644
index 0000000..793be4f
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0108-Boiling Cauldron.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/0109-Crickets.xiz b/data/presets/ZynAddSubFX/olivers-100/0109-Crickets.xiz
new file mode 100644
index 0000000..40450fc
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/0109-Crickets.xiz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/README b/data/presets/ZynAddSubFX/olivers-100/README
new file mode 100644
index 0000000..2024414
--- /dev/null
+++ b/data/presets/ZynAddSubFX/olivers-100/README
@@ -0,0 +1,13 @@
+ This is Oliver's hundred, a bank of patch files for ZynAddSubFX.
+There are two bonus combination patches provided as parameter files.
+I strongly encourage you to adapt these sounds to your own use and
+to share your creations.
+
+Important: many of these sounds have directions which you may view by
+selecting "Edit instrument" from the advanced user interface window.
+Many of the lead instruments have a vibrato effect controlled by the
+modulation wheel. Setting the modulation to zero gives a steady tone,
+but a newly initialized voice assumes the modulation wheel is at 64.
+
+Wishing you well with your musical endeavors,
+Christopher Oliver
diff --git a/data/presets/ZynAddSubFX/olivers-100/lead-combi.xmz b/data/presets/ZynAddSubFX/olivers-100/lead-combi.xmz
new file mode 100644
index 0000000..88c4750
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/lead-combi.xmz differ
diff --git a/data/presets/ZynAddSubFX/olivers-100/organ-combi.xmz b/data/presets/ZynAddSubFX/olivers-100/organ-combi.xmz
new file mode 100644
index 0000000..f9228b6
Binary files /dev/null and b/data/presets/ZynAddSubFX/olivers-100/organ-combi.xmz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0001-strings_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0001-strings_pad.xiz
new file mode 100644
index 0000000..e2e59cd
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0001-strings_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0002-analog_strings.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0002-analog_strings.xiz
new file mode 100644
index 0000000..466ba7a
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0002-analog_strings.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0003-smooth_strings_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0003-smooth_strings_pad.xiz
new file mode 100644
index 0000000..2ece181
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0003-smooth_strings_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0004-trance_strings_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0004-trance_strings_pad.xiz
new file mode 100644
index 0000000..b98cb47
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0004-trance_strings_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0005-mega_string.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0005-mega_string.xiz
new file mode 100644
index 0000000..cc504e2
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0005-mega_string.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0007-bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0007-bass.xiz
new file mode 100644
index 0000000..50e853f
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0007-bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0008-bass2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0008-bass2.xiz
new file mode 100644
index 0000000..e2b21e6
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0008-bass2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0009-agressive_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0009-agressive_bass.xiz
new file mode 100644
index 0000000..12bdd7a
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0009-agressive_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0010-synth_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0010-synth_bass.xiz
new file mode 100644
index 0000000..f17b155
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0010-synth_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0011-synth_bass_fat.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0011-synth_bass_fat.xiz
new file mode 100644
index 0000000..e3f7f15
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0011-synth_bass_fat.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0013-supersaw.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0013-supersaw.xiz
new file mode 100644
index 0000000..1376784
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0013-supersaw.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0014-supersaw_wihout_release.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0014-supersaw_wihout_release.xiz
new file mode 100644
index 0000000..faafeb0
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0014-supersaw_wihout_release.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0015-superpulse.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0015-superpulse.xiz
new file mode 100644
index 0000000..8213cf0
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0015-superpulse.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0016-sine_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0016-sine_pad.xiz
new file mode 100644
index 0000000..245e1c9
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0016-sine_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0018-organ1.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0018-organ1.xiz
new file mode 100644
index 0000000..78a2717
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0018-organ1.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0020-pulse_organ.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0020-pulse_organ.xiz
new file mode 100644
index 0000000..6417c25
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0020-pulse_organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0021-rock_organ+distorsion.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0021-rock_organ+distorsion.xiz
new file mode 100644
index 0000000..5fe92c8
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0021-rock_organ+distorsion.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0022-rock_organ.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0022-rock_organ.xiz
new file mode 100644
index 0000000..1473c87
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0022-rock_organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0023-space_organ.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0023-space_organ.xiz
new file mode 100644
index 0000000..e086ac6
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0023-space_organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0024-space_organ2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0024-space_organ2.xiz
new file mode 100644
index 0000000..80bdf70
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0024-space_organ2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0026-bell_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0026-bell_pad.xiz
new file mode 100644
index 0000000..eace4f9
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0026-bell_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0027-inna_bell_like.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0027-inna_bell_like.xiz
new file mode 100644
index 0000000..de92691
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0027-inna_bell_like.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0029-hard_pulse.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0029-hard_pulse.xiz
new file mode 100644
index 0000000..d21e65c
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0029-hard_pulse.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0030-power_pulsions_lead.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0030-power_pulsions_lead.xiz
new file mode 100644
index 0000000..833b59a
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0030-power_pulsions_lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0031-wah_sine.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0031-wah_sine.xiz
new file mode 100644
index 0000000..2cb868d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0031-wah_sine.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0032-.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0032-.xiz
new file mode 100644
index 0000000..66c420d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0032-.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0034-alert_!.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0034-alert_!.xiz
new file mode 100644
index 0000000..485d27a
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0034-alert_!.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0035-alarm2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0035-alarm2.xiz
new file mode 100644
index 0000000..acc3a9b
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0035-alarm2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0036-glitch.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0036-glitch.xiz
new file mode 100644
index 0000000..38f942d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0036-glitch.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0037-the_rain.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0037-the_rain.xiz
new file mode 100644
index 0000000..2d65467
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0037-the_rain.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0038-the_starting_machine.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0038-the_starting_machine.xiz
new file mode 100644
index 0000000..9277397
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0038-the_starting_machine.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/0039-thunder.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank/0039-thunder.xiz
new file mode 100644
index 0000000..c7e0293
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank/0039-thunder.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank/README b/data/presets/ZynAddSubFX/the_mysterious_bank/README
new file mode 100644
index 0000000..f08f892
--- /dev/null
+++ b/data/presets/ZynAddSubFX/the_mysterious_bank/README
@@ -0,0 +1,4 @@
+The My?terious Bank for ZynAddSubFx
+-----------------------------------
+
+2010 My?terious, sous licence Creative Commons BY
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0001-analog strings.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0001-analog strings.xiz
new file mode 100644
index 0000000..02e664e
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0001-analog strings.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0003-fingered_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0003-fingered_bass.xiz
new file mode 100644
index 0000000..6944370
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0003-fingered_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0004-synth_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0004-synth_bass.xiz
new file mode 100644
index 0000000..cb828b0
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0004-synth_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0005-synth_bass_2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0005-synth_bass_2.xiz
new file mode 100644
index 0000000..c5ef500
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0005-synth_bass_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0006-synth_bass_3.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0006-synth_bass_3.xiz
new file mode 100644
index 0000000..a157cda
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0006-synth_bass_3.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0007-synth_bass_4.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0007-synth_bass_4.xiz
new file mode 100644
index 0000000..156491d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0007-synth_bass_4.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0009-organ1.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0009-organ1.xiz
new file mode 100644
index 0000000..82b6d41
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0009-organ1.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0010-organ2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0010-organ2.xiz
new file mode 100644
index 0000000..6afe9b0
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0010-organ2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0011-organ3.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0011-organ3.xiz
new file mode 100644
index 0000000..b8a8c74
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0011-organ3.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0012-church_organ.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0012-church_organ.xiz
new file mode 100644
index 0000000..becaaa7
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0012-church_organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0014-synth_bell.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0014-synth_bell.xiz
new file mode 100644
index 0000000..897c504
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0014-synth_bell.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0015-rhodes1.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0015-rhodes1.xiz
new file mode 100644
index 0000000..afdb409
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0015-rhodes1.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0016-pseudo_steeldrums.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0016-pseudo_steeldrums.xiz
new file mode 100644
index 0000000..07e9f60
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0016-pseudo_steeldrums.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0017-musicbox.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0017-musicbox.xiz
new file mode 100644
index 0000000..b2331d8
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0017-musicbox.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0019-sine_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0019-sine_pad.xiz
new file mode 100644
index 0000000..a7042cb
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0019-sine_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0020-sine_pad2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0020-sine_pad2.xiz
new file mode 100644
index 0000000..be8bd9e
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0020-sine_pad2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0021-power_dnb.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0021-power_dnb.xiz
new file mode 100644
index 0000000..1aa8b9d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0021-power_dnb.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0022-fantasy_choir.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0022-fantasy_choir.xiz
new file mode 100644
index 0000000..c8fb9fd
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0022-fantasy_choir.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0023-heavy_metal_guitar.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0023-heavy_metal_guitar.xiz
new file mode 100644
index 0000000..3846dd2
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0023-heavy_metal_guitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0024-synth_flute.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0024-synth_flute.xiz
new file mode 100644
index 0000000..787d504
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0024-synth_flute.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0026-kick.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0026-kick.xiz
new file mode 100644
index 0000000..67a463a
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0026-kick.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0027-hithat.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0027-hithat.xiz
new file mode 100644
index 0000000..264a31d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0027-hithat.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0028-snare.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0028-snare.xiz
new file mode 100644
index 0000000..e521833
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0028-snare.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0030-canyon_wind.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0030-canyon_wind.xiz
new file mode 100644
index 0000000..acbc7b9
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0030-canyon_wind.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0031-etrange_sound.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0031-etrange_sound.xiz
new file mode 100644
index 0000000..3209ec5
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0031-etrange_sound.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0032-mega_alert.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0032-mega_alert.xiz
new file mode 100644
index 0000000..d3ef09d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0032-mega_alert.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0033-new_glitch.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0033-new_glitch.xiz
new file mode 100644
index 0000000..bea7551
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0033-new_glitch.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0034-radio.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0034-radio.xiz
new file mode 100644
index 0000000..01b9372
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0034-radio.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0035-the_drunk_world.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0035-the_drunk_world.xiz
new file mode 100644
index 0000000..a381bfd
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0035-the_drunk_world.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0036-ufo.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0036-ufo.xiz
new file mode 100644
index 0000000..d32f697
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0036-ufo.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0037-ufo2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0037-ufo2.xiz
new file mode 100644
index 0000000..d22ea74
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0037-ufo2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_2/0038-8_bit_car.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0038-8_bit_car.xiz
new file mode 100644
index 0000000..e81fc7a
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_2/0038-8_bit_car.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0001-soft_strings.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0001-soft_strings.xiz
new file mode 100644
index 0000000..6b99ee0
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0001-soft_strings.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0002-sines_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0002-sines_pad.xiz
new file mode 100644
index 0000000..cce8ae0
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0002-sines_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0003-at_saturnus.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0003-at_saturnus.xiz
new file mode 100644
index 0000000..b392de1
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0003-at_saturnus.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0004-echoes.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0004-echoes.xiz
new file mode 100644
index 0000000..69d738c
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0004-echoes.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0005-echoes2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0005-echoes2.xiz
new file mode 100644
index 0000000..9842e6a
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0005-echoes2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0007-compad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0007-compad.xiz
new file mode 100644
index 0000000..9664380
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0007-compad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0008-padding.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0008-padding.xiz
new file mode 100644
index 0000000..27af296
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0008-padding.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0009-res_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0009-res_pad.xiz
new file mode 100644
index 0000000..163cd59
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0009-res_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0010-supersaw.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0010-supersaw.xiz
new file mode 100644
index 0000000..892077b
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0010-supersaw.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0011-portal2_lead.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0011-portal2_lead.xiz
new file mode 100644
index 0000000..4ad6099
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0011-portal2_lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0013-fantasy_bell.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0013-fantasy_bell.xiz
new file mode 100644
index 0000000..a5da6a9
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0013-fantasy_bell.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0014-dreaming_bells.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0014-dreaming_bells.xiz
new file mode 100644
index 0000000..53e36bc
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0014-dreaming_bells.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0015-dreaming_bells_dnb.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0015-dreaming_bells_dnb.xiz
new file mode 100644
index 0000000..04d66b9
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0015-dreaming_bells_dnb.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0016-mega_bell.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0016-mega_bell.xiz
new file mode 100644
index 0000000..523e08c
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0016-mega_bell.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0017-in_the_space.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0017-in_the_space.xiz
new file mode 100644
index 0000000..28e40cc
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0017-in_the_space.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0019-a_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0019-a_bass.xiz
new file mode 100644
index 0000000..c9d5a0e
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0019-a_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0020-synth_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0020-synth_bass.xiz
new file mode 100644
index 0000000..52f93e3
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0020-synth_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0021-synth_bass_2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0021-synth_bass_2.xiz
new file mode 100644
index 0000000..6feb8e5
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0021-synth_bass_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0022-synth_bass_3.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0022-synth_bass_3.xiz
new file mode 100644
index 0000000..37ab79e
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0022-synth_bass_3.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0023-dnb_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0023-dnb_bass.xiz
new file mode 100644
index 0000000..69eb6dd
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0023-dnb_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0024-fat_dnb_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0024-fat_dnb_bass.xiz
new file mode 100644
index 0000000..e78d72c
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0024-fat_dnb_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0026-cool_organ.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0026-cool_organ.xiz
new file mode 100644
index 0000000..092daf8
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0026-cool_organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0027-cool_organ2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0027-cool_organ2.xiz
new file mode 100644
index 0000000..57c7cd5
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0027-cool_organ2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0029-new_arpeggio_3.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0029-new_arpeggio_3.xiz
new file mode 100644
index 0000000..c1b623d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0029-new_arpeggio_3.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0030-from_new_arp3.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0030-from_new_arp3.xiz
new file mode 100644
index 0000000..5b01ec2
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0030-from_new_arp3.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0032-ufo_blues.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0032-ufo_blues.xiz
new file mode 100644
index 0000000..2212ced
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0032-ufo_blues.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0033-ufo_funk.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0033-ufo_funk.xiz
new file mode 100644
index 0000000..75cac5d
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0033-ufo_funk.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0034-synth_guitar.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0034-synth_guitar.xiz
new file mode 100644
index 0000000..13e7564
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0034-synth_guitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0035-taped_instrument.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0035-taped_instrument.xiz
new file mode 100644
index 0000000..9bd5118
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0035-taped_instrument.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0037-computer.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0037-computer.xiz
new file mode 100644
index 0000000..3aa2ea7
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0037-computer.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0038-falling_stars.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0038-falling_stars.xiz
new file mode 100644
index 0000000..12a4bcd
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0038-falling_stars.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_3/0039-real_glitch.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0039-real_glitch.xiz
new file mode 100644
index 0000000..05ba702
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_3/0039-real_glitch.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0001-res_strings_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0001-res_strings_pad.xiz
new file mode 100644
index 0000000..f2b7d67
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0001-res_strings_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0002-another_respad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0002-another_respad.xiz
new file mode 100644
index 0000000..3e69878
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0002-another_respad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0003-strings_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0003-strings_pad.xiz
new file mode 100644
index 0000000..1e3bc29
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0003-strings_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0004-strings_pad_2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0004-strings_pad_2.xiz
new file mode 100644
index 0000000..8b1bcdb
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0004-strings_pad_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0005-synth_strings.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0005-synth_strings.xiz
new file mode 100644
index 0000000..415e0ab
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0005-synth_strings.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0007-from_another_space.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0007-from_another_space.xiz
new file mode 100644
index 0000000..885491f
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0007-from_another_space.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0008-from_another_galaxy.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0008-from_another_galaxy.xiz
new file mode 100644
index 0000000..ec5f72e
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0008-from_another_galaxy.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0009-from_another_planet.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0009-from_another_planet.xiz
new file mode 100644
index 0000000..ec9fcd2
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0009-from_another_planet.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0010-unamed_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0010-unamed_pad.xiz
new file mode 100644
index 0000000..78bc6e6
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0010-unamed_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0011-arpeggio1.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0011-arpeggio1.xiz
new file mode 100644
index 0000000..7bc8fbb
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0011-arpeggio1.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0013-metal_bell.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0013-metal_bell.xiz
new file mode 100644
index 0000000..b8b2025
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0013-metal_bell.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0014-bell.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0014-bell.xiz
new file mode 100644
index 0000000..04bc6b1
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0014-bell.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0015-belly.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0015-belly.xiz
new file mode 100644
index 0000000..af92273
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0015-belly.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0016-sine_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0016-sine_pad.xiz
new file mode 100644
index 0000000..1ece753
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0016-sine_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0017-wil_aow_space.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0017-wil_aow_space.xiz
new file mode 100644
index 0000000..907b005
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0017-wil_aow_space.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0019-bass_pad.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0019-bass_pad.xiz
new file mode 100644
index 0000000..c90b77f
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0019-bass_pad.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0020-bass_pad_fat.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0020-bass_pad_fat.xiz
new file mode 100644
index 0000000..d1591a2
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0020-bass_pad_fat.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0021-synth_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0021-synth_bass.xiz
new file mode 100644
index 0000000..24d6bc3
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0021-synth_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0022-synth_bass_2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0022-synth_bass_2.xiz
new file mode 100644
index 0000000..dda99d3
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0022-synth_bass_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0023-hard_bass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0023-hard_bass.xiz
new file mode 100644
index 0000000..434c4c6
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0023-hard_bass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0024-pseudo_doublebass.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0024-pseudo_doublebass.xiz
new file mode 100644
index 0000000..9e34e49
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0024-pseudo_doublebass.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0025-synth_bass_3.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0025-synth_bass_3.xiz
new file mode 100644
index 0000000..3a1543c
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0025-synth_bass_3.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0027-funky_lead.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0027-funky_lead.xiz
new file mode 100644
index 0000000..f5b29f9
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0027-funky_lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0028-daft_punk_lead.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0028-daft_punk_lead.xiz
new file mode 100644
index 0000000..58cc430
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0028-daft_punk_lead.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0029-synth_guitar.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0029-synth_guitar.xiz
new file mode 100644
index 0000000..ba1104e
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0029-synth_guitar.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0031-rhodes.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0031-rhodes.xiz
new file mode 100644
index 0000000..8270af8
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0031-rhodes.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0032-rhodes_2.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0032-rhodes_2.xiz
new file mode 100644
index 0000000..8502d82
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0032-rhodes_2.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0033-80s_rhodes.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0033-80s_rhodes.xiz
new file mode 100644
index 0000000..35514f6
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0033-80s_rhodes.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0035-organ.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0035-organ.xiz
new file mode 100644
index 0000000..893c095
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0035-organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0036-organ_not_distorted.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0036-organ_not_distorted.xiz
new file mode 100644
index 0000000..af2a2e0
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0036-organ_not_distorted.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0037-old_organ.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0037-old_organ.xiz
new file mode 100644
index 0000000..01b637e
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0037-old_organ.xiz differ
diff --git a/data/presets/ZynAddSubFX/the_mysterious_bank_4/0039-jazz_guitar.xiz b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0039-jazz_guitar.xiz
new file mode 100644
index 0000000..2f9ac77
Binary files /dev/null and b/data/presets/ZynAddSubFX/the_mysterious_bank_4/0039-jazz_guitar.xiz differ
diff --git a/data/projects/CoolSongs/CapDan-ZeroSumGame-OriginalByZakarra.mmpz b/data/projects/CoolSongs/CapDan-ZeroSumGame-OriginalByZakarra.mmpz
deleted file mode 100644
index a39347d..0000000
Binary files a/data/projects/CoolSongs/CapDan-ZeroSumGame-OriginalByZakarra.mmpz and /dev/null differ
diff --git a/data/projects/CoolSongs/CapDan-TwilightArea-OriginalByAlf42red.mmpz b/data/projects/CoolSongs/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz
similarity index 100%
rename from data/projects/CoolSongs/CapDan-TwilightArea-OriginalByAlf42red.mmpz
rename to data/projects/CoolSongs/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz
diff --git a/data/projects/CoolSongs/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz b/data/projects/CoolSongs/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz
new file mode 100644
index 0000000..4e9021d
Binary files /dev/null and b/data/projects/CoolSongs/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz differ
diff --git a/data/projects/CoolSongs/LICENSES.TXT b/data/projects/CoolSongs/LICENSES.TXT
index 94b95d9..369d901 100644
--- a/data/projects/CoolSongs/LICENSES.TXT
+++ b/data/projects/CoolSongs/LICENSES.TXT
@@ -1,75 +1,75 @@
* Alf42red-Mauiwowi.mmpz
- CC (by-sa)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=819
+ - http://lmms.io/lsp/index.php?action=show&file=819
* CapDan-TwilightArea-OriginalByAlf42red.mmpz
- CC (by-sa)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1439
+ - http://lmms.io/lsp/index.php?action=show&file=1439
* CapDan-ZeroSumGame-OriginalByZakarra.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1565
+ - http://lmms.io/lsp/index.php?action=show&file=1565
* Farbro-Tectonic.mmpz
- CC (by)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1327
+ - http://lmms.io/lsp/index.php?action=show&file=1327
* Greippi-ardudar.mmpz
- CC (by-sa)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=4916
+ - http://lmms.io/lsp/index.php?action=show&file=4916
* Impulslogik-Zen.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=581
+ - http://lmms.io/lsp/index.php?action=show&file=581
* Momo64-esp.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1534
+ - http://lmms.io/lsp/index.php?action=show&file=1534
* Namitryus-K-Project.mmpz
- CC (by-nc)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1138
+ - http://lmms.io/lsp/index.php?action=show&file=1138
* Oglsdl-Dr8v2.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1124
+ - http://lmms.io/lsp/index.php?action=show&file=1124
* Root84-Initialize.mmpz
- Yellow openmusic
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=628
+ - http://lmms.io/lsp/index.php?action=show&file=628
* Saber-FinalStep.mmpz
- BSD
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=721
+ - http://lmms.io/lsp/index.php?action=show&file=721
* Settel-InnerRecreation.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=515
+ - http://lmms.io/lsp/index.php?action=show&file=515
* Skiessi-Onion.mmpz
- CC (by-sa)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=405
+ - http://lmms.io/lsp/index.php?action=show&file=405
* Socceroos-Progress.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1516
+ - http://lmms.io/lsp/index.php?action=show&file=1516
* TameAnderson-MakeMe.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1060
+ - http://lmms.io/lsp/index.php?action=show&file=1060
* unfa-Spoken.mmpz
- CC (by-nc)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=4929
+ - http://lmms.io/lsp/index.php?action=show&file=4929
* Zakarra-MainstreamMemory.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1201
+ - http://lmms.io/lsp/index.php?action=show&file=1201
* Zakarra-OneDay.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1501
+ - http://lmms.io/lsp/index.php?action=show&file=1501
* Zakarra-59_Degrees.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1059
+ - http://lmms.io/lsp/index.php?action=show&file=1059
diff --git a/data/projects/CoolSongs/Popsip-Electric Dancer.mmpz b/data/projects/CoolSongs/Popsip-Electric Dancer.mmpz
new file mode 100644
index 0000000..4db5d0d
Binary files /dev/null and b/data/projects/CoolSongs/Popsip-Electric Dancer.mmpz differ
diff --git a/data/projects/CoolSongs/Skiessi-Onion.mmpz b/data/projects/CoolSongs/Skiessi/Skiessi-Onion.mmpz
similarity index 100%
rename from data/projects/CoolSongs/Skiessi-Onion.mmpz
rename to data/projects/CoolSongs/Skiessi/Skiessi-Onion.mmpz
diff --git a/data/projects/CoolSongs/Skiessi/Skiessi-RandomProjectNumber14253.mmpz b/data/projects/CoolSongs/Skiessi/Skiessi-RandomProjectNumber14253.mmpz
new file mode 100644
index 0000000..26985a5
Binary files /dev/null and b/data/projects/CoolSongs/Skiessi/Skiessi-RandomProjectNumber14253.mmpz differ
diff --git a/data/projects/CoolSongs/Skiessi-TurningPoint.mmpz b/data/projects/CoolSongs/Skiessi/Skiessi-TurningPoint.mmpz
similarity index 100%
rename from data/projects/CoolSongs/Skiessi-TurningPoint.mmpz
rename to data/projects/CoolSongs/Skiessi/Skiessi-TurningPoint.mmpz
diff --git a/data/projects/CoolSongs/TobyDox-Psycho.mmpz b/data/projects/CoolSongs/TobyDox-Psycho.mmpz
new file mode 100644
index 0000000..a3ab6fb
Binary files /dev/null and b/data/projects/CoolSongs/TobyDox-Psycho.mmpz differ
diff --git a/data/projects/CoolSongs/Zakarra-59_Degrees.mmpz b/data/projects/CoolSongs/Zakarra/Zakarra-59_Degrees.mmpz
similarity index 100%
rename from data/projects/CoolSongs/Zakarra-59_Degrees.mmpz
rename to data/projects/CoolSongs/Zakarra/Zakarra-59_Degrees.mmpz
diff --git a/data/projects/CoolSongs/Zakarra-MainstreamMemory.mmpz b/data/projects/CoolSongs/Zakarra/Zakarra-MainstreamMemory.mmpz
similarity index 100%
rename from data/projects/CoolSongs/Zakarra-MainstreamMemory.mmpz
rename to data/projects/CoolSongs/Zakarra/Zakarra-MainstreamMemory.mmpz
diff --git a/data/projects/CoolSongs/Zakarra-OneDay.mmpz b/data/projects/CoolSongs/Zakarra/Zakarra-OneDay.mmpz
similarity index 100%
rename from data/projects/CoolSongs/Zakarra-OneDay.mmpz
rename to data/projects/CoolSongs/Zakarra/Zakarra-OneDay.mmpz
diff --git a/data/projects/Demos/LICENSES.TXT b/data/projects/Demos/LICENSES.TXT
index 3e1e6ec..34e5720 100644
--- a/data/projects/Demos/LICENSES.TXT
+++ b/data/projects/Demos/LICENSES.TXT
@@ -1,24 +1,24 @@
* CapDan-ReggaetonTry.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1370
+ - http://lmms.io/lsp/index.php?action=show&file=1370
* CapDan-ReggaeTry.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1369
+ - http://lmms.io/lsp/index.php?action=show&file=1369
* EsoXLB-CPU.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=723
+ - http://lmms.io/lsp/index.php?action=show&file=723
* Oglsdl-PpTrip.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1156
+ - http://lmms.io/lsp/index.php?action=show&file=1156
* Skiessi-C64.mmpz
- CC (by sa)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=472
+ - http://lmms.io/lsp/index.php?action=show&file=472
* Thomasso-AxeFromThe80s.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=474
+ - http://lmms.io/lsp/index.php?action=show&file=474
diff --git a/data/projects/OldStuff/BlueWolf-DreamTravel.mmp b/data/projects/OldStuff/BlueWolf-DreamTravel.mmp
deleted file mode 100644
index a149a10..0000000
--- a/data/projects/OldStuff/BlueWolf-DreamTravel.mmp
+++ /dev/null
@@ -1,883 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="song" >
- <head timesig_numerator="4" mastervol="75" timesig_denominator="4" bpm="170" masterpitch="0" />
- <song>
- <trackcontainer type="song" >
- <track muted="0" type="1" name="Base" >
- <bbtrack>
- <trackcontainer type="bbtrackcontainer" >
- <track muted="0" type="0" name="strings01.ogg" >
- <instrumenttrack pan="-51" fxch="0" pitch="0" basenote="57" vol="48" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999985" sframe="0" src="stringsnpads/strings01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.51" lamt="0" syncmode="0" latt="0" rel="0.49" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="1" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="strings01.ogg" pos="0" len="768" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="192" />
- <note pan="0" key="38" vol="100" pos="192" len="192" />
- <note pan="0" key="41" vol="100" pos="384" len="192" />
- <note pan="0" key="38" vol="100" pos="576" len="192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="strings01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="space_strings01.ogg" >
- <instrumenttrack pan="12" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99998" sframe="0" src="stringsnpads/space_strings01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="1" sus="1" amt="0.96" x100="0" att="0" lpdel="0" hold="0.34" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="space_strings01.ogg" pos="1536" len="1344" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="192" />
- <note pan="0" key="50" vol="100" pos="384" len="192" />
- <note pan="0" key="53" vol="100" pos="768" len="192" />
- <note pan="0" key="50" vol="100" pos="1152" len="192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="space_strings01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="nord_ambient01.ogg" >
- <instrumenttrack pan="-46" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999985" sframe="0" src="stringsnpads/nord_ambient01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="1" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="1" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="nord_ambient01.ogg" pos="1536" len="1536" frozen="0" >
- <note pan="0" key="57" vol="100" pos="192" len="384" />
- <note pan="0" key="57" vol="100" pos="576" len="384" />
- <note pan="0" key="57" vol="100" pos="960" len="384" />
- <note pan="0" key="57" vol="100" pos="1344" len="192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="nord_ambient01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="jungle01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999976" sframe="0" src="beats/jungle01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="192" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="jungle01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="bassdrum03.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999701" sframe="0" src="drums/bassdrum03.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum03.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="64" muted="0" type="0" name="bassdrum03.ogg" pos="1728" len="768" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="288" len="-192" />
- <note pan="0" key="57" vol="100" pos="384" len="-192" />
- </pattern>
- </track>
- <track muted="0" type="0" name="clap02.ogg" >
- <instrumenttrack pan="-16" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999568" sframe="0" src="drums/clap02.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="576" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap02.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="clap03.ogg" >
- <instrumenttrack pan="31" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99926" sframe="0" src="drums/clap03.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="576" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="clap03.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="64" muted="0" type="0" name="clap03.ogg" pos="1728" len="768" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="240" len="-192" />
- <note pan="0" key="57" vol="100" pos="336" len="-192" />
- <note pan="0" key="57" vol="100" pos="432" len="-192" />
- <note pan="0" key="57" vol="100" pos="528" len="-192" />
- <note pan="0" key="57" vol="100" pos="624" len="-192" />
- <note pan="0" key="57" vol="100" pos="720" len="-192" />
- </pattern>
- </track>
- <track muted="0" type="0" name="matrix1000_pluck01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99991" sframe="0" src="basses/matrix1000_pluck01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.14" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="matrix1000_pluck01.ogg" pos="960" len="768" frozen="0" >
- <note pan="0" key="57" vol="100" pos="24" len="24" />
- <note pan="0" key="57" vol="100" pos="72" len="24" />
- <note pan="0" key="57" vol="100" pos="120" len="24" />
- <note pan="0" key="57" vol="100" pos="168" len="24" />
- <note pan="0" key="50" vol="100" pos="216" len="24" />
- <note pan="0" key="50" vol="100" pos="264" len="24" />
- <note pan="0" key="50" vol="100" pos="312" len="24" />
- <note pan="0" key="50" vol="100" pos="360" len="24" />
- <note pan="0" key="53" vol="100" pos="408" len="24" />
- <note pan="0" key="53" vol="100" pos="456" len="24" />
- <note pan="0" key="53" vol="100" pos="504" len="24" />
- <note pan="0" key="53" vol="100" pos="552" len="24" />
- <note pan="0" key="50" vol="100" pos="600" len="24" />
- <note pan="0" key="50" vol="100" pos="648" len="24" />
- <note pan="0" key="50" vol="100" pos="696" len="24" />
- <note pan="0" key="50" vol="100" pos="744" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="matrix1000_pluck01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="kick_distorted01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999821" sframe="0" src="drums/kick_distorted01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="384" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="576" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="shaker03.ogg" >
- <instrumenttrack pan="36" fxch="0" pitch="0" basenote="57" vol="48" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.998949" sframe="0" src="drums/shaker03.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="768" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="36" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="shaker03.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="piano02.ogg" >
- <instrumenttrack pan="-36" fxch="0" pitch="0" basenote="57" vol="62" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999991" sframe="0" src="instruments/piano02.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.98" sus="0.5" amt="1" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="piano02.ogg" pos="1152" len="3072" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="48" />
- <note pan="0" key="57" vol="100" pos="48" len="48" />
- <note pan="0" key="57" vol="100" pos="96" len="48" />
- <note pan="0" key="57" vol="100" pos="144" len="24" />
- <note pan="0" key="60" vol="100" pos="168" len="24" />
- <note pan="0" key="62" vol="100" pos="192" len="48" />
- <note pan="0" key="62" vol="100" pos="240" len="48" />
- <note pan="0" key="62" vol="100" pos="288" len="48" />
- <note pan="0" key="62" vol="100" pos="336" len="48" />
- <note pan="0" key="65" vol="100" pos="384" len="48" />
- <note pan="0" key="65" vol="100" pos="432" len="48" />
- <note pan="0" key="65" vol="100" pos="480" len="48" />
- <note pan="0" key="65" vol="100" pos="528" len="24" />
- <note pan="0" key="70" vol="100" pos="552" len="24" />
- <note pan="0" key="69" vol="100" pos="576" len="48" />
- <note pan="0" key="69" vol="100" pos="624" len="48" />
- <note pan="0" key="69" vol="100" pos="672" len="48" />
- <note pan="0" key="69" vol="100" pos="720" len="48" />
- <note pan="0" key="72" vol="100" pos="768" len="48" />
- <note pan="0" key="72" vol="100" pos="816" len="48" />
- <note pan="0" key="72" vol="100" pos="864" len="48" />
- <note pan="0" key="72" vol="100" pos="912" len="24" />
- <note pan="0" key="70" vol="100" pos="936" len="24" />
- <note pan="0" key="69" vol="100" pos="960" len="48" />
- <note pan="0" key="69" vol="100" pos="1008" len="48" />
- <note pan="0" key="69" vol="100" pos="1056" len="48" />
- <note pan="0" key="69" vol="100" pos="1104" len="48" />
- <note pan="0" key="67" vol="100" pos="1152" len="48" />
- <note pan="0" key="67" vol="100" pos="1200" len="48" />
- <note pan="0" key="67" vol="100" pos="1248" len="48" />
- <note pan="0" key="67" vol="100" pos="1296" len="24" />
- <note pan="0" key="70" vol="100" pos="1320" len="24" />
- <note pan="0" key="69" vol="100" pos="1344" len="48" />
- <note pan="0" key="69" vol="100" pos="1392" len="48" />
- <note pan="0" key="69" vol="100" pos="1440" len="48" />
- <note pan="0" key="69" vol="100" pos="1488" len="48" />
- <note pan="0" key="57" vol="100" pos="1536" len="48" />
- <note pan="0" key="57" vol="100" pos="1584" len="48" />
- <note pan="0" key="57" vol="100" pos="1632" len="48" />
- <note pan="0" key="57" vol="100" pos="1680" len="24" />
- <note pan="0" key="60" vol="100" pos="1704" len="24" />
- <note pan="0" key="62" vol="100" pos="1728" len="48" />
- <note pan="0" key="62" vol="100" pos="1776" len="48" />
- <note pan="0" key="62" vol="100" pos="1824" len="48" />
- <note pan="0" key="62" vol="100" pos="1872" len="48" />
- <note pan="0" key="69" vol="100" pos="1920" len="48" />
- <note pan="0" key="69" vol="100" pos="1968" len="48" />
- <note pan="0" key="69" vol="100" pos="2016" len="48" />
- <note pan="0" key="69" vol="100" pos="2064" len="24" />
- <note pan="0" key="67" vol="100" pos="2088" len="24" />
- <note pan="0" key="69" vol="100" pos="2112" len="48" />
- <note pan="0" key="69" vol="100" pos="2160" len="48" />
- <note pan="0" key="69" vol="100" pos="2208" len="48" />
- <note pan="0" key="69" vol="100" pos="2256" len="48" />
- <note pan="0" key="72" vol="100" pos="2304" len="48" />
- <note pan="0" key="72" vol="100" pos="2352" len="48" />
- <note pan="0" key="72" vol="100" pos="2400" len="48" />
- <note pan="0" key="72" vol="100" pos="2448" len="24" />
- <note pan="0" key="70" vol="100" pos="2472" len="24" />
- <note pan="0" key="69" vol="100" pos="2496" len="48" />
- <note pan="0" key="69" vol="100" pos="2544" len="48" />
- <note pan="0" key="69" vol="100" pos="2592" len="48" />
- <note pan="0" key="69" vol="100" pos="2640" len="48" />
- <note pan="0" key="67" vol="100" pos="2688" len="48" />
- <note pan="0" key="67" vol="100" pos="2736" len="48" />
- <note pan="0" key="67" vol="100" pos="2784" len="48" />
- <note pan="0" key="67" vol="100" pos="2832" len="24" />
- <note pan="0" key="63" vol="100" pos="2856" len="24" />
- <note pan="0" key="62" vol="100" pos="2880" len="48" />
- <note pan="0" key="62" vol="100" pos="2928" len="48" />
- <note pan="0" key="62" vol="100" pos="2976" len="48" />
- <note pan="0" key="62" vol="100" pos="3024" len="48" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="piano02.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="violin_pizzicato01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99978" sframe="0" src="instruments/violin_pizzicato01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="violin_pizzicato01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="harpsichord01.ogg" >
- <instrumenttrack pan="31" fxch="0" pitch="0" basenote="57" vol="56" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999977" sframe="0" src="instruments/harpsichord01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="1" sus="0.5" amt="1" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="harpsichord01.ogg" pos="1344" len="3072" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="48" />
- <note pan="0" key="55" vol="100" pos="72" len="12" />
- <note pan="0" key="57" vol="100" pos="96" len="48" />
- <note pan="0" key="58" vol="100" pos="168" len="12" />
- <note pan="0" key="57" vol="100" pos="192" len="48" />
- <note pan="0" key="62" vol="100" pos="384" len="48" />
- <note pan="0" key="60" vol="100" pos="456" len="12" />
- <note pan="0" key="58" vol="100" pos="480" len="48" />
- <note pan="0" key="60" vol="100" pos="552" len="12" />
- <note pan="0" key="57" vol="100" pos="576" len="48" />
- <note pan="0" key="57" vol="100" pos="768" len="48" />
- <note pan="0" key="55" vol="100" pos="840" len="12" />
- <note pan="0" key="57" vol="100" pos="864" len="48" />
- <note pan="0" key="58" vol="100" pos="936" len="12" />
- <note pan="0" key="57" vol="100" pos="960" len="48" />
- <note pan="0" key="58" vol="100" pos="1152" len="48" />
- <note pan="0" key="60" vol="100" pos="1224" len="12" />
- <note pan="0" key="62" vol="100" pos="1248" len="48" />
- <note pan="0" key="60" vol="100" pos="1320" len="12" />
- <note pan="0" key="57" vol="100" pos="1344" len="48" />
- <note pan="0" key="57" vol="100" pos="1536" len="48" />
- <note pan="0" key="55" vol="100" pos="1608" len="12" />
- <note pan="0" key="57" vol="100" pos="1632" len="48" />
- <note pan="0" key="58" vol="100" pos="1704" len="12" />
- <note pan="0" key="57" vol="100" pos="1728" len="48" />
- <note pan="0" key="55" vol="100" pos="1920" len="48" />
- <note pan="0" key="57" vol="100" pos="1992" len="12" />
- <note pan="0" key="58" vol="100" pos="2016" len="48" />
- <note pan="0" key="60" vol="100" pos="2088" len="12" />
- <note pan="0" key="57" vol="100" pos="2112" len="48" />
- <note pan="0" key="57" vol="100" pos="2304" len="48" />
- <note pan="0" key="55" vol="100" pos="2376" len="12" />
- <note pan="0" key="57" vol="100" pos="2400" len="48" />
- <note pan="0" key="58" vol="100" pos="2472" len="12" />
- <note pan="0" key="57" vol="100" pos="2496" len="48" />
- <note pan="0" key="60" vol="100" pos="2688" len="48" />
- <note pan="0" key="62" vol="100" pos="2760" len="12" />
- <note pan="0" key="60" vol="100" pos="2784" len="48" />
- <note pan="0" key="58" vol="100" pos="2856" len="12" />
- <note pan="0" key="57" vol="100" pos="2880" len="48" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="harpsichord01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- </trackcontainer>
- </bbtrack>
- <bbtco muted="0" name="Base" pos="9216" color="4282417407" len="3072" />
- <bbtco muted="0" name="Base" pos="12288" color="4282417407" len="3072" />
- <bbtco muted="0" name="Base" pos="46080" color="4282417407" len="3072" />
- <bbtco muted="0" name="Base" pos="49152" color="4282417407" len="3072" />
- <bbtco muted="0" name="Base" pos="52224" color="4282417407" len="3072" />
- </track>
- <track muted="0" type="1" name="Jungle" >
- <bbtrack/>
- <bbtco muted="0" name="Jungle" pos="12288" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="15360" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="18432" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="21504" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="24576" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="29184" color="4282417407" len="1344" />
- <bbtco muted="0" name="Jungle" pos="30720" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="35328" color="4282417407" len="1536" />
- <bbtco muted="0" name="Jungle" pos="36864" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="39936" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="43008" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="46080" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="49152" color="4282417407" len="3072" />
- <bbtco muted="0" name="Jungle" pos="52224" color="4282417407" len="2304" />
- </track>
- <track muted="0" type="1" name="Beat" >
- <bbtrack/>
- <bbtco muted="0" name="Beat" pos="3072" color="4282417407" len="1536" />
- <bbtco muted="0" name="Beat" pos="7680" color="4282417407" len="768" />
- <bbtco muted="0" name="Beat" pos="8448" color="4282417407" len="768" />
- <bbtco muted="0" name="Beat" pos="9216" color="4282417407" len="2304" />
- <bbtco muted="0" name="Beat" pos="12288" color="4282417407" len="1536" />
- <bbtco muted="0" name="Beat" pos="19968" color="4282417407" len="1536" />
- <bbtco muted="0" name="Beat" pos="21696" color="4282417407" len="2880" />
- <bbtco muted="0" name="Beat" pos="46080" color="4282417407" len="3072" />
- <bbtco muted="0" name="Beat" pos="49344" color="4282417407" len="2880" />
- </track>
- <track muted="0" type="1" name="Beat2" >
- <bbtrack/>
- <bbtco muted="0" name="Beat2" pos="4608" color="4282417407" len="1536" />
- <bbtco muted="0" name="Beat2" pos="13824" color="4282417407" len="1536" />
- <bbtco muted="0" name="Beat2" pos="15360" color="4282417407" len="2304" />
- <bbtco muted="0" name="Beat2" pos="24576" color="4282417407" len="3072" />
- <bbtco muted="0" name="Beat2" pos="30720" color="4282417407" len="3072" />
- <bbtco muted="0" name="Beat2" pos="33792" color="4282417407" len="3072" />
- <bbtco muted="0" name="Beat2" pos="37248" color="4282417407" len="2688" />
- <bbtco muted="0" name="Beat2" pos="39936" color="4282417407" len="3072" />
- <bbtco muted="0" name="Beat2" pos="43008" color="4282417407" len="3072" />
- </track>
- <track muted="0" type="1" name="Shaker" >
- <bbtrack/>
- <bbtco muted="0" name="Shaker" pos="15360" color="4282417407" len="3072" />
- <bbtco muted="0" name="Shaker" pos="21504" color="4282417407" len="3072" />
- <bbtco muted="0" name="Shaker" pos="24576" color="4282417407" len="3072" />
- <bbtco muted="0" name="Shaker" pos="30720" color="4282417407" len="3072" />
- <bbtco muted="0" name="Shaker" pos="33792" color="4282417407" len="3072" />
- <bbtco muted="0" name="Shaker" pos="39936" color="4282417407" len="3072" />
- <bbtco muted="0" name="Shaker" pos="53760" color="4282417407" len="1536" />
- </track>
- <track muted="0" type="1" name="Matrix" >
- <bbtrack/>
- <bbtco muted="0" name="Matrix" pos="6144" color="4282417407" len="768" />
- <bbtco muted="0" name="Matrix" pos="6912" color="4282417407" len="768" />
- <bbtco muted="0" name="Matrix" pos="7680" color="4282417407" len="768" />
- <bbtco muted="0" name="Matrix" pos="8448" color="4282417407" len="768" />
- <bbtco muted="0" name="Matrix" pos="9216" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="12288" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="15360" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="18432" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="21504" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="24576" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="30720" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="33792" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="36864" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="39936" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="43008" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="46080" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="49152" color="4282417407" len="3072" />
- <bbtco muted="0" name="Matrix" pos="52224" color="4282417407" len="3072" />
- </track>
- <track muted="0" type="1" name="Piano" >
- <bbtrack/>
- <bbtco muted="0" name="Piano" pos="18432" color="4282417407" len="3072" />
- <bbtco muted="0" name="Piano" pos="21504" color="4282417407" len="3072" />
- <bbtco muted="0" name="Piano" pos="24576" color="4282417407" len="3072" />
- <bbtco muted="0" name="Piano" pos="27648" color="4282417407" len="3072" />
- <bbtco muted="0" name="Piano" pos="30720" color="4282417407" len="3072" />
- <bbtco muted="0" name="Piano" pos="36864" color="4282417407" len="3072" />
- <bbtco muted="0" name="Piano" pos="39936" color="4282417407" len="3072" />
- <bbtco muted="0" name="Piano" pos="43008" color="4282417407" len="3072" />
- <bbtco muted="0" name="Piano" pos="46080" color="4282417407" len="3072" />
- </track>
- <track muted="0" type="1" name="Harp" >
- <bbtrack/>
- <bbtco muted="0" name="Harp" pos="27648" color="4282417407" len="3072" />
- <bbtco muted="0" name="Harp" pos="30720" color="4282417407" len="3072" />
- <bbtco muted="0" name="Harp" pos="33792" color="4282417407" len="3072" />
- <bbtco muted="0" name="Harp" pos="36864" color="4282417407" len="3072" />
- <bbtco muted="0" name="Harp" pos="39936" color="4282417407" len="3072" />
- </track>
- <track muted="0" type="1" name="Sounds" >
- <bbtrack/>
- <bbtco muted="0" name="Sounds" pos="0" color="4282417407" len="1536" />
- <bbtco muted="0" name="Sounds" pos="1536" color="4282417407" len="1536" />
- <bbtco muted="0" name="Sounds" pos="3072" color="4282417407" len="1536" />
- <bbtco muted="0" name="Sounds" pos="4608" color="4282417407" len="1536" />
- </track>
- <track muted="0" type="1" name="Beat/Bassline 9" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Baseline 9" pos="1536" color="4282417407" len="1536" />
- <bbtco muted="0" name="Beat/Baseline 9" pos="3072" color="4282417407" len="1536" />
- </track>
- <track muted="0" type="0" name="space_strings01.ogg" >
- <instrumenttrack pan="56" fxch="0" pitch="0" basenote="57" vol="60" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999988" sframe="0" src="stringsnpads/space_strings01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="1" lamt="0" syncmode="0" latt="0" rel="0.1" sus="1" amt="1" x100="0" att="0" lpdel="0" hold="0.38" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="space_strings01.ogg" pos="18240" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="192" />
- </pattern>
- </track>
- </trackcontainer>
- <track muted="0" type="6" name="Automation track" >
- <automationtrack/>
- </track>
- <fxmixer>
- <fxchannel num="0" muted="0" volume="1" name="Master" >
- <fxchain numofeffects="2" enabled="1" >
- <effect key="AAAACQAAAAACAAAACgAAAAAsAEYAYQBzAHQAIABMAG8AbwBrAGEAaABlAGEAZAAgAGwAaQBtAGkAdABlAHIAAAALAAAAAAIAAAAoAGYAYQBzAHQATABvAG8AawBhAGgAZQBhAGQATABpAG0AaQB0AGUAcgAAADwAZgBhAHMAdABfAGwAbwBvAGsAYQBoAGUAYQBkAF8AbABpAG0AaQB0AGUAcgBfADEAOQAxADMALgBzAG8=" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port00="-1.2" port01="0" port02="109.45" syncmode="0" port02_numerator="4" ports="3" port02_denominator="4" />
- </effect>
- <effect key="AAAACQAAAAACAAAACgAAAABmAEMAKgAgAFAAbABhAHQAZQAyAHgAMgAgAC0AIABWAGUAcgBzAGEAdABpAGwAZQAgAHAAbABhAHQAZQAgAHIAZQB2AGUAcgBiACwAIABzAHQAZQByAGUAbwAgAGkAbgBwAHUAdABzAAAACwAAAAACAAAAEABQAGwAYQB0AGUAMgB4ADIAAAAOAGMAYQBwAHMALgBzAG8=" autoquit="1" gate="0" name="ladspaeffect" wet="-0.8" on="1" >
- <ladspacontrols port02="0.50197" port03="0.3745" port04="0.249875" port05="0.25" ports="4" />
- </effect>
- </fxchain>
- </fxchannel>
- <fxchannel num="1" muted="0" volume="1" name="FX 1" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="2" muted="0" volume="1" name="FX 2" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="3" muted="0" volume="1" name="FX 3" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="4" muted="0" volume="1" name="FX 4" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="5" muted="0" volume="1" name="FX 5" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="6" muted="0" volume="1" name="FX 6" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="7" muted="0" volume="1" name="FX 7" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="8" muted="0" volume="1" name="FX 8" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="9" muted="0" volume="1" name="FX 9" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="10" muted="0" volume="1" name="FX 10" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="11" muted="0" volume="1" name="FX 11" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="12" muted="0" volume="1" name="FX 12" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="13" muted="0" volume="1" name="FX 13" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="14" muted="0" volume="1" name="FX 14" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="15" muted="0" volume="1" name="FX 15" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="16" muted="0" volume="1" name="FX 16" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="17" muted="0" volume="1" name="FX 17" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="18" muted="0" volume="1" name="FX 18" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="19" muted="0" volume="1" name="FX 19" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="20" muted="0" volume="1" name="FX 20" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="21" muted="0" volume="1" name="FX 21" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="22" muted="0" volume="1" name="FX 22" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="23" muted="0" volume="1" name="FX 23" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="24" muted="0" volume="1" name="FX 24" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="25" muted="0" volume="1" name="FX 25" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="26" muted="0" volume="1" name="FX 26" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="27" muted="0" volume="1" name="FX 27" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="28" muted="0" volume="1" name="FX 28" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="29" muted="0" volume="1" name="FX 29" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="30" muted="0" volume="1" name="FX 30" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="31" muted="0" volume="1" name="FX 31" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="32" muted="0" volume="1" name="FX 32" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="33" muted="0" volume="1" name="FX 33" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="34" muted="0" volume="1" name="FX 34" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="35" muted="0" volume="1" name="FX 35" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="36" muted="0" volume="1" name="FX 36" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="37" muted="0" volume="1" name="FX 37" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="38" muted="0" volume="1" name="FX 38" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="39" muted="0" volume="1" name="FX 39" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="40" muted="0" volume="1" name="FX 40" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="41" muted="0" volume="1" name="FX 41" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="42" muted="0" volume="1" name="FX 42" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="43" muted="0" volume="1" name="FX 43" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="44" muted="0" volume="1" name="FX 44" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="45" muted="0" volume="1" name="FX 45" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="46" muted="0" volume="1" name="FX 46" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="47" muted="0" volume="1" name="FX 47" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="48" muted="0" volume="1" name="FX 48" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="49" muted="0" volume="1" name="FX 49" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="50" muted="0" volume="1" name="FX 50" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="51" muted="0" volume="1" name="FX 51" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="52" muted="0" volume="1" name="FX 52" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="53" muted="0" volume="1" name="FX 53" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="54" muted="0" volume="1" name="FX 54" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="55" muted="0" volume="1" name="FX 55" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="56" muted="0" volume="1" name="FX 56" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="57" muted="0" volume="1" name="FX 57" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="58" muted="0" volume="1" name="FX 58" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="59" muted="0" volume="1" name="FX 59" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="60" muted="0" volume="1" name="FX 60" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="61" muted="0" volume="1" name="FX 61" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="62" muted="0" volume="1" name="FX 62" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="63" muted="0" volume="1" name="FX 63" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="64" muted="0" volume="1" name="FX 64" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- </fxmixer>
- <pianoroll width="840" x="-11" y="0" height="480" visible="0" />
- <automationeditor width="740" x="0" y="0" height="480" visible="0" />
- <projectnotes width="400" x="700" y="10" height="300" visible="0" ><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#e0e0e0;">Put down your project notes here.</span></p></body></html>]]></projectnotes>
- <timeline lp1pos="192" lp0pos="0" lpstate="0" />
- <controllers/>
- </song>
-</multimedia-project>
diff --git a/data/projects/OldStuff/Chris-HorizonRemix.mmp b/data/projects/OldStuff/Chris-HorizonRemix.mmp
deleted file mode 100644
index 3b02312..0000000
--- a/data/projects/OldStuff/Chris-HorizonRemix.mmp
+++ /dev/null
@@ -1,1328 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta2" type="song" >
- <head timesig_numerator="4" mastervol="20" timesig_denominator="4" bpm="180" masterpitch="0" />
- <song>
- <trackcontainer type="song" >
- <track muted="0" type="2" name="" >
- <sampletrack vol="100" >
- <fxchain numofeffects="0" enabled="0" />
- </sampletrack>
- </track>
- <track muted="0" type="1" name="Basic Bass" >
- <bbtrack>
- <trackcontainer type="bbtrackcontainer" >
- <track muted="0" type="0" name="FatCheese" >
- <instrumenttrack pan="0" fxch="2" pitch="0" basenote="81" vol="124" >
- <instrument name="lb302" >
- <lb302 db24="0" vcf_res="0.925" vcf_dec="0" dead="0" vcf_mod="0.09" dist="0.1" slide_dec="0.48" slide="0" shape="0" >
- <vcf_cut value="0.36" id="15265" />
- </lb302>
- </instrument>
- <eldata fres="0.57" ftype="6" fcut="3354" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.374" lamt="0" syncmode="0" latt="0" rel="0.18" sus="0" amt="0" x100="0" att="0.037" lpdel="0" hold="0" lshp="0" lspd="0.1553" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.158" lamt="0.515" syncmode="0" latt="0" rel="0" sus="0.998" amt="0.58" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.53" ctlenvamt="1" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0.23" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="1" lspd="0.4849" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="167" arprange="3" arptime_denominator="1" syncmode="5" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="73" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="1" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="FatCheese" pos="0" len="3072" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="24" />
- <note pan="0" key="57" vol="100" pos="24" len="24" />
- <note pan="0" key="69" vol="100" pos="48" len="24" />
- <note pan="0" key="45" vol="100" pos="72" len="24" />
- <note pan="0" key="57" vol="100" pos="96" len="24" />
- <note pan="0" key="69" vol="100" pos="120" len="24" />
- <note pan="0" key="45" vol="100" pos="144" len="24" />
- <note pan="0" key="69" vol="100" pos="168" len="24" />
- <note pan="0" key="41" vol="100" pos="192" len="24" />
- <note pan="0" key="53" vol="100" pos="216" len="24" />
- <note pan="0" key="65" vol="100" pos="240" len="24" />
- <note pan="0" key="41" vol="100" pos="264" len="24" />
- <note pan="0" key="53" vol="100" pos="288" len="24" />
- <note pan="0" key="65" vol="100" pos="312" len="24" />
- <note pan="0" key="41" vol="100" pos="336" len="24" />
- <note pan="0" key="65" vol="100" pos="360" len="24" />
- <note pan="0" key="48" vol="100" pos="384" len="24" />
- <note pan="0" key="60" vol="100" pos="408" len="24" />
- <note pan="0" key="72" vol="100" pos="432" len="24" />
- <note pan="0" key="48" vol="100" pos="456" len="24" />
- <note pan="0" key="60" vol="100" pos="480" len="24" />
- <note pan="0" key="72" vol="100" pos="504" len="24" />
- <note pan="0" key="48" vol="100" pos="528" len="24" />
- <note pan="0" key="72" vol="100" pos="552" len="24" />
- <note pan="0" key="43" vol="100" pos="576" len="24" />
- <note pan="0" key="55" vol="100" pos="600" len="24" />
- <note pan="0" key="67" vol="100" pos="624" len="24" />
- <note pan="0" key="43" vol="100" pos="648" len="24" />
- <note pan="0" key="55" vol="100" pos="672" len="24" />
- <note pan="0" key="67" vol="100" pos="696" len="24" />
- <note pan="0" key="43" vol="100" pos="720" len="24" />
- <note pan="0" key="67" vol="100" pos="744" len="24" />
- <note pan="0" key="45" vol="100" pos="768" len="24" />
- <note pan="0" key="57" vol="100" pos="792" len="24" />
- <note pan="0" key="69" vol="100" pos="816" len="24" />
- <note pan="0" key="45" vol="100" pos="840" len="24" />
- <note pan="0" key="57" vol="100" pos="864" len="24" />
- <note pan="0" key="69" vol="100" pos="888" len="24" />
- <note pan="0" key="45" vol="100" pos="912" len="24" />
- <note pan="0" key="69" vol="100" pos="936" len="24" />
- <note pan="0" key="41" vol="100" pos="960" len="24" />
- <note pan="0" key="53" vol="100" pos="984" len="24" />
- <note pan="0" key="65" vol="100" pos="1008" len="24" />
- <note pan="0" key="41" vol="100" pos="1032" len="24" />
- <note pan="0" key="53" vol="100" pos="1056" len="24" />
- <note pan="0" key="65" vol="100" pos="1080" len="24" />
- <note pan="0" key="41" vol="100" pos="1104" len="24" />
- <note pan="0" key="65" vol="100" pos="1128" len="24" />
- <note pan="0" key="48" vol="100" pos="1152" len="24" />
- <note pan="0" key="60" vol="100" pos="1176" len="24" />
- <note pan="0" key="72" vol="100" pos="1200" len="24" />
- <note pan="0" key="48" vol="100" pos="1224" len="24" />
- <note pan="0" key="60" vol="100" pos="1248" len="24" />
- <note pan="0" key="72" vol="100" pos="1272" len="24" />
- <note pan="0" key="48" vol="100" pos="1296" len="24" />
- <note pan="0" key="72" vol="100" pos="1320" len="24" />
- <note pan="0" key="43" vol="100" pos="1344" len="24" />
- <note pan="0" key="55" vol="100" pos="1368" len="24" />
- <note pan="0" key="43" vol="100" pos="1392" len="24" />
- <note pan="0" key="67" vol="100" pos="1392" len="24" />
- <note pan="0" key="55" vol="100" pos="1416" len="24" />
- <note pan="0" key="43" vol="100" pos="1440" len="24" />
- <note pan="0" key="55" vol="100" pos="1464" len="24" />
- <note pan="0" key="43" vol="100" pos="1488" len="24" />
- <note pan="0" key="67" vol="100" pos="1488" len="24" />
- <note pan="0" key="55" vol="100" pos="1512" len="24" />
- <note pan="0" key="45" vol="100" pos="1536" len="24" />
- <note pan="0" key="57" vol="100" pos="1560" len="24" />
- <note pan="0" key="69" vol="100" pos="1584" len="24" />
- <note pan="0" key="45" vol="100" pos="1608" len="24" />
- <note pan="0" key="57" vol="100" pos="1632" len="24" />
- <note pan="0" key="69" vol="100" pos="1656" len="24" />
- <note pan="0" key="45" vol="100" pos="1680" len="24" />
- <note pan="0" key="69" vol="100" pos="1704" len="24" />
- <note pan="0" key="41" vol="100" pos="1728" len="24" />
- <note pan="0" key="53" vol="100" pos="1752" len="24" />
- <note pan="0" key="65" vol="100" pos="1776" len="24" />
- <note pan="0" key="41" vol="100" pos="1800" len="24" />
- <note pan="0" key="53" vol="100" pos="1824" len="24" />
- <note pan="0" key="65" vol="100" pos="1848" len="24" />
- <note pan="0" key="41" vol="100" pos="1872" len="24" />
- <note pan="0" key="65" vol="100" pos="1896" len="24" />
- <note pan="0" key="48" vol="100" pos="1920" len="24" />
- <note pan="0" key="60" vol="100" pos="1944" len="24" />
- <note pan="0" key="72" vol="100" pos="1968" len="24" />
- <note pan="0" key="48" vol="100" pos="1992" len="24" />
- <note pan="0" key="60" vol="100" pos="2016" len="24" />
- <note pan="0" key="72" vol="100" pos="2040" len="24" />
- <note pan="0" key="48" vol="100" pos="2064" len="24" />
- <note pan="0" key="72" vol="100" pos="2088" len="24" />
- <note pan="0" key="43" vol="100" pos="2112" len="24" />
- <note pan="0" key="55" vol="100" pos="2136" len="24" />
- <note pan="0" key="67" vol="100" pos="2160" len="24" />
- <note pan="0" key="43" vol="100" pos="2184" len="24" />
- <note pan="0" key="55" vol="100" pos="2208" len="24" />
- <note pan="0" key="67" vol="100" pos="2232" len="24" />
- <note pan="0" key="43" vol="100" pos="2256" len="24" />
- <note pan="0" key="67" vol="100" pos="2280" len="24" />
- <note pan="0" key="45" vol="100" pos="2304" len="24" />
- <note pan="0" key="57" vol="100" pos="2328" len="24" />
- <note pan="0" key="69" vol="100" pos="2352" len="24" />
- <note pan="0" key="45" vol="100" pos="2376" len="24" />
- <note pan="0" key="57" vol="100" pos="2400" len="24" />
- <note pan="0" key="69" vol="100" pos="2424" len="24" />
- <note pan="0" key="45" vol="100" pos="2448" len="24" />
- <note pan="0" key="69" vol="100" pos="2472" len="24" />
- <note pan="0" key="41" vol="100" pos="2496" len="24" />
- <note pan="0" key="53" vol="100" pos="2520" len="24" />
- <note pan="0" key="65" vol="100" pos="2544" len="24" />
- <note pan="0" key="41" vol="100" pos="2568" len="24" />
- <note pan="0" key="53" vol="100" pos="2592" len="24" />
- <note pan="0" key="65" vol="100" pos="2616" len="24" />
- <note pan="0" key="41" vol="100" pos="2640" len="24" />
- <note pan="0" key="65" vol="100" pos="2664" len="24" />
- <note pan="0" key="48" vol="100" pos="2688" len="24" />
- <note pan="0" key="60" vol="100" pos="2712" len="24" />
- <note pan="0" key="72" vol="100" pos="2736" len="24" />
- <note pan="0" key="48" vol="100" pos="2760" len="24" />
- <note pan="0" key="60" vol="100" pos="2784" len="24" />
- <note pan="0" key="72" vol="100" pos="2808" len="24" />
- <note pan="0" key="48" vol="100" pos="2832" len="24" />
- <note pan="0" key="72" vol="100" pos="2856" len="24" />
- <note pan="0" key="55" vol="100" pos="2880" len="12" />
- <note pan="0" key="43" vol="100" pos="2880" len="96" />
- <note pan="0" key="67" vol="100" pos="2892" len="12" />
- <note pan="0" key="55" vol="100" pos="2904" len="12" />
- <note pan="0" key="67" vol="100" pos="2928" len="12" />
- <note pan="0" key="55" vol="100" pos="2952" len="12" />
- <note pan="0" key="67" vol="100" pos="2964" len="12" />
- <note pan="0" key="55" vol="100" pos="2976" len="12" />
- <note pan="0" key="43" vol="100" pos="2976" len="24" />
- <note pan="0" key="67" vol="100" pos="2988" len="12" />
- <note pan="0" key="55" vol="100" pos="3000" len="12" />
- <note pan="0" key="43" vol="100" pos="3000" len="24" />
- <note pan="0" key="67" vol="100" pos="3024" len="12" />
- <note pan="0" key="43" vol="100" pos="3024" len="24" />
- <note pan="0" key="43" vol="100" pos="3048" len="24" />
- <note pan="0" key="55" vol="100" pos="3048" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="FatCheese" pos="192" len="192" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="96" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="E-Organ" >
- <instrumenttrack pan="0" fxch="3" pitch="0" basenote="33" vol="54" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="10" userwavefile1="" finer1="16" userwavefile2="" finer2="24" coarse0="0" coarse1="0" coarse2="0" finel0="-10" finel1="-16" modalgo1="2" modalgo2="2" finel2="-22" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.04" lamt="0" syncmode="0" latt="0" rel="0.29" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0.64" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.42" lamt="0" syncmode="0" latt="0" rel="0" sus="0" amt="0" x100="0" att="0.24" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="2" chord-enabled="1" />
- <arpeggiator arptime="150" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="1" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="E-Organ" pos="768" len="1536" frozen="0" >
- <note pan="0" key="33" vol="100" pos="24" len="24" />
- <note pan="0" key="40" vol="100" pos="48" len="24" />
- <note pan="0" key="33" vol="100" pos="72" len="12" />
- <note pan="0" key="38" vol="100" pos="96" len="24" />
- <note pan="0" key="33" vol="100" pos="120" len="12" />
- <note pan="0" key="33" vol="100" pos="132" len="12" />
- <note pan="0" key="40" vol="100" pos="144" len="24" />
- <note pan="0" key="41" vol="100" pos="168" len="24" />
- <note pan="0" key="41" vol="100" pos="216" len="24" />
- <note pan="0" key="40" vol="100" pos="240" len="24" />
- <note pan="0" key="33" vol="100" pos="264" len="24" />
- <note pan="0" key="38" vol="100" pos="288" len="24" />
- <note pan="0" key="28" vol="100" pos="312" len="24" />
- <note pan="0" key="36" vol="100" pos="336" len="24" />
- <note pan="0" key="31" vol="100" pos="360" len="24" />
- <note pan="0" key="31" vol="100" pos="408" len="6" />
- <note pan="0" key="31" vol="100" pos="420" len="6" />
- <note pan="0" key="36" vol="100" pos="432" len="24" />
- <note pan="0" key="31" vol="100" pos="456" len="12" />
- <note pan="0" key="31" vol="100" pos="468" len="12" />
- <note pan="0" key="38" vol="100" pos="480" len="24" />
- <note pan="0" key="31" vol="100" pos="504" len="24" />
- <note pan="0" key="40" vol="100" pos="528" len="24" />
- <note pan="0" key="43" vol="100" pos="552" len="36" />
- <note pan="0" key="33" vol="100" pos="588" len="12" />
- <note pan="0" key="43" vol="100" pos="600" len="24" />
- <note pan="0" key="41" vol="100" pos="624" len="24" />
- <note pan="0" key="36" vol="100" pos="648" len="24" />
- <note pan="0" key="40" vol="100" pos="672" len="48" />
- <note pan="0" key="38" vol="100" pos="720" len="24" />
- <note pan="0" key="40" vol="100" pos="744" len="24" />
- <note pan="0" key="36" vol="100" pos="816" len="24" />
- <note pan="0" key="31" vol="100" pos="840" len="24" />
- <note pan="0" key="36" vol="100" pos="864" len="6" />
- <note pan="0" key="36" vol="100" pos="876" len="12" />
- <note pan="0" key="36" vol="100" pos="888" len="12" />
- <note pan="0" key="38" vol="100" pos="912" len="24" />
- <note pan="0" key="36" vol="100" pos="936" len="24" />
- <note pan="0" key="36" vol="100" pos="984" len="24" />
- <note pan="0" key="33" vol="100" pos="1008" len="24" />
- <note pan="0" key="36" vol="100" pos="1032" len="24" />
- <note pan="0" key="36" vol="100" pos="1056" len="24" />
- <note pan="0" key="38" vol="100" pos="1080" len="24" />
- <note pan="0" key="40" vol="100" pos="1104" len="24" />
- <note pan="0" key="36" vol="100" pos="1128" len="24" />
- <note pan="0" key="36" vol="100" pos="1200" len="48" />
- <note pan="0" key="38" vol="100" pos="1248" len="48" />
- <note pan="0" key="40" vol="100" pos="1296" len="24" />
- <note pan="0" key="38" vol="100" pos="1320" len="24" />
- <note pan="0" key="33" vol="100" pos="1344" len="24" />
- <note pan="0" key="38" vol="100" pos="1368" len="24" />
- <note pan="0" key="36" vol="100" pos="1392" len="24" />
- <note pan="0" key="36" vol="100" pos="1416" len="24" />
- <note pan="0" key="35" vol="100" pos="1440" len="24" />
- <note pan="0" key="36" vol="100" pos="1464" len="24" />
- <note pan="0" key="38" vol="100" pos="1488" len="24" />
- <note pan="0" key="36" vol="100" pos="1512" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="FM-Wood Arp" >
- <instrumenttrack pan="0" fxch="1" pitch="0" basenote="69" vol="43" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="12" userwavefile2="samples/empty.wav" finer2="38" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-4" modalgo1="0" modalgo2="0" finel2="6" pan0="0" modalgo3="0" pan1="-30" stphdetun0="253" pan2="26" stphdetun1="85" wavetype0="5" stphdetun2="115" wavetype1="5" wavetype2="4" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="38" />
- </instrument>
- <eldata fres="0.85" ftype="0" fcut="1540" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.428" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.164" lamt="0" syncmode="0" latt="0" rel="0" sus="0.999" amt="0.545" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.3411" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.125" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.999" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="2" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="3" arptime_numerator="1" arpdir="2" arpgate="58" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="1" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="FM-Wood Arp" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FM-Wood Arp" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="FM-Wood Arp" pos="384" len="1536" frozen="0" >
- <note pan="0" key="60" vol="100" pos="96" len="48" />
- <note pan="0" key="60" vol="100" pos="168" len="24" />
- <note pan="0" key="60" vol="100" pos="288" len="48" />
- <note pan="0" key="60" vol="100" pos="360" len="24" />
- <note pan="0" key="60" vol="100" pos="480" len="48" />
- <note pan="0" key="62" vol="100" pos="528" len="24" />
- <note pan="0" key="64" vol="100" pos="552" len="24" />
- <note pan="0" key="65" vol="100" pos="600" len="24" />
- <note pan="0" key="64" vol="100" pos="672" len="48" />
- <note pan="0" key="62" vol="100" pos="720" len="24" />
- <note pan="0" key="60" vol="100" pos="744" len="24" />
- <note pan="0" key="60" vol="100" pos="864" len="48" />
- <note pan="0" key="59" vol="100" pos="912" len="24" />
- <note pan="0" key="60" vol="100" pos="936" len="24" />
- <note pan="0" key="60" vol="100" pos="1056" len="48" />
- <note pan="0" key="62" vol="100" pos="1104" len="24" />
- <note pan="0" key="60" vol="100" pos="1128" len="24" />
- <note pan="0" key="60" vol="100" pos="1248" len="48" />
- <note pan="0" key="62" vol="100" pos="1296" len="24" />
- <note pan="0" key="60" vol="100" pos="1320" len="24" />
- <note pan="0" key="59" vol="100" pos="1368" len="24" />
- <note pan="0" key="57" vol="100" pos="1416" len="24" />
- <note pan="0" key="55" vol="100" pos="1464" len="24" />
- <note pan="0" key="57" vol="100" pos="1512" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="FM-Wood Arp" pos="576" len="768" frozen="0" >
- <note pan="0" key="40" vol="70" pos="0" len="192" />
- <note pan="0" key="36" vol="68" pos="192" len="192" />
- <note pan="0" key="43" vol="78" pos="384" len="192" />
- <note pan="0" key="38" vol="68" pos="576" len="192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="FM-Wood Arp" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FM-Wood Arp" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FM-Wood Arp" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FM-Wood Arp" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FM-Wood Arp" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FM-Wood Arp" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Moog" >
- <instrumenttrack pan="0" fxch="6" pitch="0" basenote="57" vol="14" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="13" userwavefile2="samples/empty.wav" finer2="-3" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-14" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="50" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="2" ftype="0" fcut="143" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.136" lamt="0" syncmode="0" latt="0" rel="0" sus="0.998" amt="1" x100="0" att="0" lpdel="0" hold="0.238" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.223" lamt="0" syncmode="0" latt="0" rel="0" sus="0.998" amt="0.79" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.767" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="-0.01" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="2" chord-enabled="1" />
- <arpeggiator arptime="179" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="142" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Moog" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Moog" pos="960" len="768" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="12" />
- <note pan="0" key="48" vol="100" pos="12" len="12" />
- <note pan="0" key="52" vol="100" pos="24" len="12" />
- <note pan="0" key="48" vol="100" pos="36" len="12" />
- <note pan="0" key="57" vol="100" pos="48" len="12" />
- <note pan="0" key="52" vol="100" pos="60" len="12" />
- <note pan="0" key="48" vol="100" pos="72" len="12" />
- <note pan="0" key="52" vol="100" pos="84" len="12" />
- <note pan="0" key="45" vol="100" pos="96" len="12" />
- <note pan="0" key="48" vol="100" pos="108" len="12" />
- <note pan="0" key="52" vol="100" pos="120" len="12" />
- <note pan="0" key="48" vol="100" pos="132" len="12" />
- <note pan="0" key="57" vol="100" pos="144" len="12" />
- <note pan="0" key="52" vol="100" pos="156" len="12" />
- <note pan="0" key="48" vol="100" pos="168" len="12" />
- <note pan="0" key="52" vol="100" pos="180" len="12" />
- <note pan="0" key="45" vol="100" pos="192" len="12" />
- <note pan="0" key="48" vol="100" pos="204" len="12" />
- <note pan="0" key="53" vol="100" pos="216" len="12" />
- <note pan="0" key="48" vol="100" pos="228" len="12" />
- <note pan="0" key="57" vol="100" pos="240" len="12" />
- <note pan="0" key="53" vol="100" pos="252" len="12" />
- <note pan="0" key="48" vol="100" pos="264" len="12" />
- <note pan="0" key="53" vol="100" pos="276" len="12" />
- <note pan="0" key="45" vol="100" pos="288" len="12" />
- <note pan="0" key="48" vol="100" pos="300" len="12" />
- <note pan="0" key="53" vol="100" pos="312" len="12" />
- <note pan="0" key="48" vol="100" pos="324" len="12" />
- <note pan="0" key="57" vol="100" pos="336" len="12" />
- <note pan="0" key="53" vol="100" pos="348" len="12" />
- <note pan="0" key="48" vol="100" pos="360" len="12" />
- <note pan="0" key="53" vol="100" pos="372" len="12" />
- <note pan="0" key="48" vol="100" pos="384" len="12" />
- <note pan="0" key="52" vol="100" pos="396" len="12" />
- <note pan="0" key="55" vol="100" pos="408" len="12" />
- <note pan="0" key="52" vol="100" pos="420" len="12" />
- <note pan="0" key="60" vol="100" pos="432" len="12" />
- <note pan="0" key="55" vol="100" pos="444" len="12" />
- <note pan="0" key="52" vol="100" pos="456" len="12" />
- <note pan="0" key="55" vol="100" pos="468" len="12" />
- <note pan="0" key="48" vol="100" pos="480" len="12" />
- <note pan="0" key="52" vol="100" pos="492" len="12" />
- <note pan="0" key="55" vol="100" pos="504" len="12" />
- <note pan="0" key="52" vol="100" pos="516" len="12" />
- <note pan="0" key="60" vol="100" pos="528" len="12" />
- <note pan="0" key="55" vol="100" pos="540" len="12" />
- <note pan="0" key="52" vol="100" pos="552" len="12" />
- <note pan="0" key="55" vol="100" pos="564" len="12" />
- <note pan="0" key="43" vol="100" pos="576" len="12" />
- <note pan="0" key="47" vol="100" pos="588" len="12" />
- <note pan="0" key="50" vol="100" pos="600" len="12" />
- <note pan="0" key="47" vol="100" pos="612" len="12" />
- <note pan="0" key="55" vol="100" pos="624" len="12" />
- <note pan="0" key="50" vol="100" pos="636" len="12" />
- <note pan="0" key="47" vol="100" pos="648" len="12" />
- <note pan="0" key="50" vol="100" pos="660" len="12" />
- <note pan="0" key="43" vol="100" pos="672" len="12" />
- <note pan="0" key="47" vol="100" pos="684" len="12" />
- <note pan="0" key="50" vol="100" pos="696" len="12" />
- <note pan="0" key="47" vol="100" pos="708" len="12" />
- <note pan="0" key="55" vol="100" pos="720" len="12" />
- <note pan="0" key="50" vol="100" pos="732" len="12" />
- <note pan="0" key="47" vol="100" pos="744" len="12" />
- <note pan="0" key="50" vol="100" pos="756" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Moog" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="crash02.ogg" >
- <instrumenttrack pan="0" fxch="5" pitch="0" basenote="57" vol="190" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="1" sframe="0" src="drums/crash02.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="1" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1152" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="kick_hard01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="102" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="1" sframe="0" src="drums/kick_hard01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="1152" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="kick_hard01.ogg" pos="1344" len="384" frozen="0" >
- <note pan="0" key="55" vol="100" pos="0" len="48" />
- <note pan="0" key="55" vol="100" pos="120" len="48" />
- <note pan="0" key="55" vol="100" pos="168" len="48" />
- <note pan="0" key="55" vol="100" pos="192" len="48" />
- <note pan="0" key="55" vol="100" pos="264" len="12" />
- <note pan="0" key="55" vol="100" pos="276" len="36" />
- <note pan="0" key="55" vol="100" pos="312" len="36" />
- <note pan="0" key="55" vol="100" pos="360" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="snare_hiphop01.ogg" >
- <instrumenttrack pan="0" fxch="4" pitch="0" basenote="57" vol="146" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="1" sframe="0" src="drums/snare_hiphop01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="snare_hiphop01.ogg" pos="1344" len="384" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="24" />
- <note pan="0" key="57" vol="100" pos="144" len="24" />
- <note pan="0" key="57" vol="100" pos="240" len="24" />
- <note pan="0" key="57" vol="100" pos="336" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_hiphop01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="hihat_closed02.ogg" >
- <instrumenttrack pan="0" fxch="4" pitch="0" basenote="57" vol="76" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="1" sframe="0" src="drums/hihat_closed02.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="hihat_closed02.ogg" pos="1344" len="384" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="24" />
- <note pan="0" key="57" vol="100" pos="24" len="24" />
- <note pan="0" key="57" vol="100" pos="48" len="24" />
- <note pan="0" key="57" vol="100" pos="72" len="12" />
- <note pan="0" key="57" vol="100" pos="84" len="12" />
- <note pan="0" key="57" vol="100" pos="96" len="12" />
- <note pan="0" key="57" vol="100" pos="108" len="12" />
- <note pan="0" key="57" vol="100" pos="120" len="24" />
- <note pan="0" key="57" vol="100" pos="144" len="24" />
- <note pan="0" key="57" vol="100" pos="168" len="24" />
- <note pan="0" key="57" vol="100" pos="192" len="24" />
- <note pan="0" key="57" vol="100" pos="216" len="24" />
- <note pan="0" key="57" vol="100" pos="240" len="24" />
- <note pan="0" key="57" vol="100" pos="264" len="24" />
- <note pan="0" key="57" vol="100" pos="288" len="24" />
- <note pan="0" key="57" vol="100" pos="312" len="24" />
- <note pan="0" key="57" vol="100" pos="336" len="12" />
- <note pan="0" key="57" vol="100" pos="348" len="6" />
- <note pan="0" key="57" vol="100" pos="354" len="6" />
- <note pan="0" key="57" vol="100" pos="360" len="6" />
- <note pan="0" key="57" vol="100" pos="366" len="6" />
- <note pan="0" key="57" vol="100" pos="372" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="1728" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="hihat_opened01.ogg" >
- <instrumenttrack pan="0" fxch="4" pitch="0" basenote="57" vol="76" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="1" sframe="0" src="drums/hihat_opened01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1536" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1728" len="192" frozen="0" />
- </track>
- </trackcontainer>
- </bbtrack>
- <bbtco muted="0" name="Basic Bass" pos="0" color="4282417407" len="3072" />
- <bbtco muted="0" name="Basic Bass" pos="3072" color="4282417407" len="3072" />
- <bbtco muted="0" name="Basic Bass" pos="7680" color="4282417407" len="3072" />
- <bbtco muted="0" name="Basic Bass" pos="10752" color="4282417407" len="6144" />
- <bbtco muted="0" name="Basic Bass" pos="15360" color="4282417407" len="3072" />
- </track>
- <track muted="0" type="1" name="Basic Bass Cap" >
- <bbtrack/>
- </track>
- <track muted="0" type="1" name="Wreckage Lead Small" >
- <bbtrack/>
- <bbtco muted="0" name="Wreckage Lead Small" pos="1536" color="4282417407" len="1536" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="4608" color="4282417407" len="1536" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="10752" color="4282417407" len="1536" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="12288" color="4282417407" len="3072" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="16896" color="4282417407" len="1536" />
- </track>
- <track muted="0" type="0" name="snare01.ogg" >
- <instrumenttrack pan="0" fxch="2" pitch="0" basenote="57" vol="200" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="1" sframe="0" src="drums/snare01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="1" enabled="1" >
- <effect autoquit="0" gate="0" name="dummy" wet="1" on="1" >
- <dummycontrols/>
- <key/>
- </effect>
- </fxchain>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="snare01.ogg" pos="5376" len="768" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="96" />
- <note pan="0" key="57" vol="100" pos="96" len="96" />
- <note pan="0" key="57" vol="100" pos="192" len="48" />
- <note pan="0" key="57" vol="100" pos="240" len="48" />
- <note pan="0" key="57" vol="100" pos="288" len="48" />
- <note pan="0" key="57" vol="100" pos="336" len="48" />
- <note pan="0" key="57" vol="100" pos="384" len="24" />
- <note pan="0" key="57" vol="100" pos="408" len="24" />
- <note pan="0" key="57" vol="100" pos="432" len="24" />
- <note pan="0" key="57" vol="100" pos="456" len="24" />
- <note pan="0" key="57" vol="100" pos="480" len="24" />
- <note pan="0" key="57" vol="100" pos="504" len="24" />
- <note pan="0" key="57" vol="100" pos="528" len="24" />
- <note pan="0" key="57" vol="100" pos="552" len="24" />
- <note pan="0" key="57" vol="100" pos="576" len="12" />
- <note pan="0" key="57" vol="100" pos="588" len="12" />
- <note pan="0" key="57" vol="100" pos="600" len="12" />
- <note pan="0" key="57" vol="100" pos="612" len="12" />
- <note pan="0" key="57" vol="100" pos="624" len="12" />
- <note pan="0" key="57" vol="100" pos="636" len="12" />
- <note pan="0" key="57" vol="100" pos="648" len="12" />
- <note pan="0" key="57" vol="100" pos="660" len="12" />
- <note pan="0" key="57" vol="100" pos="672" len="12" />
- <note pan="0" key="57" vol="100" pos="684" len="12" />
- <note pan="0" key="57" vol="100" pos="696" len="12" />
- <note pan="0" key="57" vol="100" pos="708" len="12" />
- <note pan="0" key="57" vol="100" pos="720" len="12" />
- <note pan="0" key="57" vol="100" pos="732" len="12" />
- <note pan="0" key="57" vol="100" pos="744" len="12" />
- <note pan="0" key="57" vol="100" pos="756" len="12" />
- </pattern>
- </track>
- <track muted="0" type="1" name="Harm Bass" >
- <bbtrack/>
- <bbtco muted="0" name="Harm Bass" pos="15360" color="4282417407" len="768" />
- <bbtco muted="0" name="Harm Bass" pos="16128" color="4282417407" len="768" />
- <bbtco muted="0" name="Harm Bass" pos="16896" color="4282417407" len="768" />
- <bbtco muted="0" name="Harm Bass" pos="17664" color="4282417407" len="768" />
- <bbtco muted="0" name="Harm Bass" pos="3072" color="4282417407" len="768" />
- <bbtco muted="0" name="Harm Bass" pos="3840" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="Horizon Lead" >
- <bbtrack/>
- <bbtco muted="0" name="Horizon Lead" pos="6144" color="4282417407" len="3072" />
- <bbtco muted="0" name="Horizon Lead" pos="12288" color="4282417407" len="1536" />
- <bbtco muted="0" name="Horizon Lead" pos="13824" color="4282417407" len="1536" />
- <bbtco muted="0" name="Horizon Lead" pos="15360" color="4282417407" len="1536" />
- <bbtco muted="0" name="Horizon Lead" pos="16896" color="4282417407" len="1536" />
- <bbtco muted="0" name="Horizon Lead" pos="18432" color="4282417407" len="1536" />
- </track>
- <track muted="0" type="1" name="Fast Stuff" >
- <bbtrack/>
- <bbtco muted="0" name="Fast Stuff" pos="9984" color="4282417407" len="2304" />
- <bbtco muted="0" name="Fast Stuff" pos="12288" color="4282417407" len="768" />
- <bbtco muted="0" name="Fast Stuff" pos="13056" color="4282417407" len="768" />
- <bbtco muted="0" name="Fast Stuff" pos="13824" color="4282417407" len="768" />
- <bbtco muted="0" name="Fast Stuff" pos="14592" color="4282417407" len="768" />
- <bbtco muted="0" name="Fast Stuff" pos="15360" color="4282417407" len="768" />
- <bbtco muted="0" name="Fast Stuff" pos="16128" color="4282417407" len="768" />
- <bbtco muted="0" name="Fast Stuff" pos="16896" color="4282417407" len="768" />
- <bbtco muted="0" name="Fast Stuff" pos="17664" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="Crash" >
- <bbtrack/>
- <bbtco muted="0" name="Crash" pos="6144" color="4282417407" len="192" />
- <bbtco muted="0" name="Crash" pos="6912" color="4282417407" len="192" />
- <bbtco muted="0" name="Crash" pos="6720" color="4282417407" len="192" />
- <bbtco muted="0" name="Crash" pos="7680" color="4282417407" len="192" />
- <bbtco muted="0" name="Crash" pos="7296" color="4282417407" len="192" />
- <bbtco muted="0" name="Crash" pos="9216" color="4282417407" len="192" />
- <bbtco muted="0" name="Crash" pos="18432" color="4282417407" len="192" />
- </track>
- <track muted="0" type="1" name="Drumbeat" >
- <bbtrack/>
- <bbtco muted="0" name="Drumbeat" pos="768" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="1152" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="1536" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="1920" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="2304" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="2688" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="4608" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="4992" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="5376" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="5760" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="7680" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="8064" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="8448" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="8832" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="9216" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="9600" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="10752" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="11136" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="11520" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="11904" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="12288" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="12672" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="13056" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="13440" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="13824" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="14208" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="14592" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="14976" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="15360" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="15744" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="16128" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="16512" color="4282417407" len="396" />
- <bbtco muted="0" name="Drumbeat" pos="16896" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="17280" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="18048" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="17664" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="18432" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="18816" color="4282417407" len="384" />
- <bbtco muted="0" name="Drumbeat" pos="19200" color="4282417407" len="384" />
- </track>
- <track muted="0" type="1" name="Open hat" >
- <bbtrack/>
- <bbtco muted="0" name="Open hat" pos="3840" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="4032" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="4224" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="4416" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="4608" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="4800" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="4992" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="5184" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="5376" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="5568" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="5760" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="5952" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="9984" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="10368" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="10176" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="10560" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="10752" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="10944" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="11328" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="11136" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="11712" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="13632" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="12096" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="11904" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="12288" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="12480" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="12672" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="12864" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="13056" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="13248" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="13440" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="11520" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="13824" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="14016" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="14400" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="14208" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="14592" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="14784" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="14976" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="15360" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="15168" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="15552" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="15744" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="15936" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="16128" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="16320" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="16512" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="16896" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="16704" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="17280" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="17088" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="17472" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="17664" color="4282417407" len="192" />
- <bbtco muted="0" name="Open hat" pos="17856" color="4282417407" len="192" />
- </track>
- <track muted="0" type="1" name="Beat/Bassline 9" >
- <bbtrack/>
- </track>
- </trackcontainer>
- <track muted="0" type="6" name="Automation track" >
- <automationtrack/>
- <automationpattern name="Tempo" pos="0" >
- <time value="140" pos="0" />
- </automationpattern>
- <automationpattern name="Master volume" pos="0" >
- <time value="100" pos="0" />
- </automationpattern>
- <automationpattern name="Master pitch" pos="0" >
- <time value="0" pos="0" />
- </automationpattern>
- <automationpattern name="LB302:FatCheese>VCF Cutoff Frequency" pos="0" >
- <time value="0.035" pos="0" />
- <time value="0.05" pos="12" />
- <time value="0.065" pos="24" />
- <time value="0.075" pos="36" />
- <time value="0.1" pos="48" />
- <time value="0.105" pos="60" />
- <time value="0.135" pos="72" />
- <time value="0.155" pos="84" />
- <time value="0.175" pos="96" />
- <time value="0.195" pos="108" />
- <time value="0.215" pos="120" />
- <time value="0.245" pos="132" />
- <time value="0.265" pos="144" />
- <time value="0.3" pos="156" />
- <time value="0.325" pos="168" />
- <time value="0.335" pos="180" />
- <time value="0.345" pos="192" />
- <time value="0.36" pos="204" />
- <time value="0.37" pos="216" />
- <time value="0.385" pos="228" />
- <time value="0.4" pos="240" />
- <time value="0.41" pos="252" />
- <time value="0.415" pos="264" />
- <time value="0.415" pos="276" />
- <time value="0.41" pos="288" />
- <time value="0.39" pos="300" />
- <time value="0.385" pos="312" />
- <time value="0.37" pos="324" />
- <time value="0.36" pos="336" />
- <time value="0.335" pos="348" />
- <time value="0.32" pos="372" />
- <time value="0.305" pos="396" />
- <time value="0.28" pos="408" />
- <time value="0.24" pos="420" />
- <time value="0.195" pos="432" />
- <time value="0.19" pos="444" />
- <time value="0.175" pos="456" />
- <time value="0.165" pos="468" />
- <time value="0.165" pos="480" />
- <time value="0.205" pos="492" />
- <time value="0.27" pos="504" />
- <time value="0.345" pos="516" />
- <time value="0.43" pos="528" />
- <time value="0.46" pos="540" />
- <time value="0.585" pos="552" />
- <time value="0.61" pos="564" />
- <time value="0.605" pos="576" />
- <time value="0.57" pos="588" />
- <time value="0.385" pos="600" />
- <time value="0.32" pos="612" />
- <time value="0.225" pos="624" />
- <time value="0.2" pos="636" />
- <time value="0.19" pos="648" />
- <time value="0.19" pos="660" />
- <time value="0.19" pos="672" />
- <time value="0.185" pos="684" />
- <time value="0.185" pos="696" />
- <time value="0.15" pos="708" />
- <time value="0.125" pos="720" />
- <time value="0.145" pos="732" />
- <time value="0.165" pos="744" />
- <time value="0.195" pos="756" />
- <time value="0.245" pos="768" />
- <time value="0.28" pos="780" />
- <time value="0.36" pos="792" />
- <time value="0.45" pos="804" />
- <time value="0.61" pos="816" />
- <time value="0.615" pos="828" />
- <time value="0.6" pos="840" />
- <time value="0.565" pos="852" />
- <time value="0.54" pos="864" />
- <time value="0.485" pos="876" />
- <time value="0.455" pos="888" />
- <time value="0.345" pos="936" />
- <time value="0.335" pos="948" />
- <time value="0.335" pos="960" />
- <time value="0.325" pos="972" />
- <time value="0.67" pos="984" />
- <time value="0.19" pos="996" />
- <time value="0.195" pos="1008" />
- <time value="0.18" pos="1020" />
- <time value="0.155" pos="1032" />
- <time value="0.14" pos="1044" />
- <time value="0.12" pos="1056" />
- <time value="0.105" pos="1068" />
- <time value="0.105" pos="1080" />
- <time value="0.105" pos="1092" />
- <time value="0.44" pos="1104" />
- <time value="0.095" pos="1116" />
- <time value="0.09" pos="1128" />
- <time value="0.09" pos="1140" />
- <time value="0.535" pos="1152" />
- <time value="0.12" pos="1164" />
- <time value="0.145" pos="1176" />
- <time value="0.61" pos="1188" />
- <time value="0.21" pos="1200" />
- <time value="0.23" pos="1212" />
- <time value="0.275" pos="1224" />
- <time value="0.315" pos="1236" />
- <time value="0.375" pos="1248" />
- <time value="0.41" pos="1260" />
- <time value="0.46" pos="1272" />
- <time value="0.52" pos="1284" />
- <time value="0.525" pos="1296" />
- <time value="0.525" pos="1308" />
- <time value="0.53" pos="1320" />
- <time value="0.535" pos="1332" />
- <time value="0.545" pos="1344" />
- <time value="0.545" pos="1356" />
- <time value="0.5" pos="1368" />
- <time value="0.45" pos="1380" />
- <time value="0.4" pos="1392" />
- <time value="0.33" pos="1404" />
- <time value="0.315" pos="1416" />
- <time value="0.325" pos="1428" />
- <time value="0.36" pos="1440" />
- <time value="0.4" pos="1452" />
- <time value="0.425" pos="1464" />
- <time value="0.465" pos="1476" />
- <time value="0.49" pos="1488" />
- <time value="0.455" pos="1500" />
- <time value="0.39" pos="1512" />
- <time value="0.35" pos="1524" />
- <time value="0.28" pos="1536" />
- <time value="0.305" pos="1548" />
- <time value="0.315" pos="1560" />
- <time value="0.34" pos="1572" />
- <time value="0.435" pos="1584" />
- <time value="0.365" pos="1596" />
- <time value="0.265" pos="1608" />
- <time value="0.28" pos="1620" />
- <time value="0.25" pos="1632" />
- <time value="0.22" pos="1644" />
- <time value="0.19" pos="1656" />
- <time value="0.165" pos="1668" />
- <time value="0.15" pos="1680" />
- <time value="0.135" pos="1692" />
- <time value="0.125" pos="1704" />
- <time value="0.125" pos="1716" />
- <time value="0.115" pos="1728" />
- <time value="0.11" pos="1740" />
- <time value="0.585" pos="1752" />
- <time value="0.1" pos="1764" />
- <time value="0.095" pos="1776" />
- <time value="0.09" pos="1788" />
- <time value="0.315" pos="1800" />
- <time value="0.29" pos="1812" />
- <time value="0.305" pos="1824" />
- <time value="0.305" pos="1836" />
- <time value="0.295" pos="1848" />
- <time value="0.255" pos="1860" />
- <time value="0.255" pos="1872" />
- <time value="0.265" pos="1884" />
- <time value="0.265" pos="1896" />
- <time value="0.065" pos="1908" />
- <time value="0.07" pos="1920" />
- <time value="0.075" pos="1932" />
- <time value="0.075" pos="1944" />
- <time value="0.085" pos="1956" />
- <time value="0.535" pos="1968" />
- <time value="0.11" pos="1980" />
- <time value="0.125" pos="1992" />
- <time value="0.17" pos="2004" />
- <time value="0.185" pos="2016" />
- <time value="0.225" pos="2028" />
- <time value="0.675" pos="2040" />
- <time value="0.325" pos="2052" />
- <time value="0.36" pos="2064" />
- <time value="0.375" pos="2076" />
- <time value="0.37" pos="2088" />
- <time value="0.22" pos="2112" />
- <time value="0.17" pos="2124" />
- <time value="0.14" pos="2136" />
- <time value="0.095" pos="2148" />
- <time value="0.09" pos="2160" />
- <time value="0.075" pos="2172" />
- <time value="0.075" pos="2184" />
- <time value="0.08" pos="2196" />
- <time value="0.1" pos="2208" />
- <time value="0.24" pos="2220" />
- <time value="0.395" pos="2232" />
- <time value="0.51" pos="2244" />
- <time value="0.57" pos="2256" />
- <time value="0.66" pos="2268" />
- <time value="0.775" pos="2280" />
- <time value="0.87" pos="2292" />
- <time value="1.02" pos="2304" />
- <time value="1.01" pos="2316" />
- <time value="0.915" pos="2328" />
- <time value="0.865" pos="2340" />
- <time value="0.785" pos="2352" />
- <time value="0.335" pos="2364" />
- <time value="0.455" pos="2376" />
- <time value="0.48" pos="2388" />
- <time value="0.31" pos="2400" />
- <time value="0.54" pos="2412" />
- <time value="0.585" pos="2424" />
- <time value="0.625" pos="2436" />
- <time value="0.68" pos="2448" />
- <time value="0.8" pos="2460" />
- <time value="0.81" pos="2472" />
- <time value="0.795" pos="2484" />
- <time value="0.785" pos="2496" />
- <time value="0.75" pos="2508" />
- <time value="0.705" pos="2520" />
- <time value="0.635" pos="2532" />
- <time value="0.61" pos="2544" />
- <time value="0.575" pos="2556" />
- <time value="0.565" pos="2568" />
- <time value="0.565" pos="2580" />
- <time value="0.56" pos="2592" />
- <time value="0.56" pos="2604" />
- <time value="0.55" pos="2616" />
- <time value="0.575" pos="2628" />
- <time value="0.605" pos="2640" />
- <time value="0.66" pos="2652" />
- <time value="0.64" pos="2664" />
- <time value="0.61" pos="2676" />
- <time value="0.595" pos="2688" />
- <time value="0.395" pos="2700" />
- <time value="0.565" pos="2712" />
- <time value="0.525" pos="2724" />
- <time value="0.495" pos="2736" />
- <time value="0.45" pos="2748" />
- <time value="0.28" pos="2760" />
- <time value="0.42" pos="2772" />
- <time value="0.42" pos="2784" />
- <time value="0.54" pos="2796" />
- <time value="0.54" pos="2808" />
- <time value="0.54" pos="2820" />
- <time value="0.54" pos="2832" />
- <time value="0.54" pos="2844" />
- <time value="0.54" pos="2856" />
- <time value="0.54" pos="2868" />
- <time value="0.54" pos="2880" />
- <time value="0.54" pos="2892" />
- <time value="0.395" pos="2904" />
- <time value="0.35" pos="2916" />
- <time value="0.32" pos="2928" />
- <time value="0.28" pos="2940" />
- <time value="0.23" pos="2952" />
- <time value="0.19" pos="2964" />
- <time value="0.15" pos="2976" />
- <time value="0.11" pos="2988" />
- <time value="0.1" pos="3000" />
- <time value="0.09" pos="3012" />
- <time value="0.08" pos="3024" />
- <time value="0.07" pos="3036" />
- <time value="0.065" pos="3048" />
- <time value="0.065" pos="3060" />
- <time value="0.055" pos="3072" />
- <time value="0.05" pos="3084" />
- <time value="0.05" pos="3096" />
- <time value="0.05" pos="3108" />
- <time value="0.04" pos="3120" />
- <time value="0.04" pos="3132" />
- <time value="0.05" pos="3144" />
- <time value="0.055" pos="3156" />
- <time value="0.075" pos="3168" />
- <time value="0.1" pos="3180" />
- <time value="0.13" pos="3192" />
- <time value="0.185" pos="3204" />
- <time value="0.2" pos="3216" />
- <object id="15265" />
- </automationpattern>
- </track>
- <fxmixer>
- <fxchannel num="0" muted="0" volume="1" name="Master" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="1" muted="0" volume="1.02" name="FX 1" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="2" muted="0" volume="1.16" name="FX 2" >
- <fxchain numofeffects="1" enabled="1" >
- <effect autoquit="1800" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port02="0.76041" port03="0.48685" port04="0" port05="0.39" ports="4" />
- <key>
- <attribute value="caps.dll" name="file" />
- <attribute value="Plate2x2" name="plugin" />
- </key>
- </effect>
- </fxchain>
- </fxchannel>
- <fxchannel num="3" muted="0" volume="0.97" name="FX 3" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="4" muted="0" volume="0.95" name="FX 4" >
- <fxchain numofeffects="1" enabled="1" >
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="0.1" on="1" >
- <ladspacontrols port02="0.72065" port03="0.19474" port04="0.25987" port05="1" ports="4" />
- <key>
- <attribute value="caps.dll" name="file" />
- <attribute value="Plate2x2" name="plugin" />
- </key>
- </effect>
- </fxchain>
- </fxchannel>
- <fxchannel num="5" muted="0" volume="1.67" name="FX 5" >
- <fxchain numofeffects="1" enabled="1" >
- <effect autoquit="0" gate="0" name="ladspaeffect" wet="0.48" on="1" >
- <ladspacontrols port02="0.97909" port03="0.749" port04="0.9995" port05="1" ports="4" />
- <key>
- <attribute value="caps.dll" name="file" />
- <attribute value="Plate2x2" name="plugin" />
- </key>
- </effect>
- </fxchain>
- </fxchannel>
- <fxchannel num="6" muted="0" volume="0.69" name="FX 6" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="7" muted="0" volume="1" name="FX 7" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="8" muted="0" volume="1" name="FX 8" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="9" muted="0" volume="1" name="FX 9" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="10" muted="0" volume="1" name="FX 10" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="11" muted="0" volume="1" name="FX 11" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="12" muted="0" volume="1" name="FX 12" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="13" muted="0" volume="1" name="FX 13" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="14" muted="0" volume="1" name="FX 14" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="15" muted="0" volume="1" name="FX 15" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="16" muted="0" volume="1" name="FX 16" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="17" muted="0" volume="1" name="FX 17" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="18" muted="0" volume="1" name="FX 18" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="19" muted="0" volume="1" name="FX 19" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="20" muted="0" volume="1" name="FX 20" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="21" muted="0" volume="1" name="FX 21" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="22" muted="0" volume="1" name="FX 22" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="23" muted="0" volume="1" name="FX 23" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="24" muted="0" volume="1" name="FX 24" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="25" muted="0" volume="1" name="FX 25" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="26" muted="0" volume="1" name="FX 26" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="27" muted="0" volume="1" name="FX 27" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="28" muted="0" volume="1" name="FX 28" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="29" muted="0" volume="1" name="FX 29" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="30" muted="0" volume="1" name="FX 30" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="31" muted="0" volume="1" name="FX 31" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="32" muted="0" volume="1" name="FX 32" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="33" muted="0" volume="1" name="FX 33" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="34" muted="0" volume="1" name="FX 34" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="35" muted="0" volume="1" name="FX 35" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="36" muted="0" volume="1" name="FX 36" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="37" muted="0" volume="1" name="FX 37" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="38" muted="0" volume="1" name="FX 38" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="39" muted="0" volume="1" name="FX 39" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="40" muted="0" volume="1" name="FX 40" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="41" muted="0" volume="1" name="FX 41" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="42" muted="0" volume="1" name="FX 42" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="43" muted="0" volume="1" name="FX 43" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="44" muted="0" volume="1" name="FX 44" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="45" muted="0" volume="1" name="FX 45" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="46" muted="0" volume="1" name="FX 46" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="47" muted="0" volume="1" name="FX 47" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="48" muted="0" volume="1" name="FX 48" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="49" muted="0" volume="1" name="FX 49" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="50" muted="0" volume="1" name="FX 50" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="51" muted="0" volume="1" name="FX 51" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="52" muted="0" volume="1" name="FX 52" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="53" muted="0" volume="1" name="FX 53" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="54" muted="0" volume="1" name="FX 54" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="55" muted="0" volume="1" name="FX 55" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="56" muted="0" volume="1" name="FX 56" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="57" muted="0" volume="1" name="FX 57" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="58" muted="0" volume="1" name="FX 58" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="59" muted="0" volume="1" name="FX 59" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="60" muted="0" volume="1" name="FX 60" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="61" muted="0" volume="1" name="FX 61" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="62" muted="0" volume="1" name="FX 62" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="63" muted="0" volume="1" name="FX 63" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="64" muted="0" volume="1" name="FX 64" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- </fxmixer>
- <pianoroll width="640" x="83" y="243" height="493" visible="0" />
- <automationeditor width="740" x="0" y="0" height="480" visible="0" />
- <projectnotes width="432" x="788" y="243" height="366" visible="1" ><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
-<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:12pt;">HORIZON</span></p>
-<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:12pt;">Cover by: Chris Bulman</span></p>
-<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:12pt;">Original song by: Malex</span></p>
-<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:12pt;">DONT CLOSE THIS! SCROLL DOWN!</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:10pt;">hello,</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:10pt;">I'm Chris Bulman. i originally started writing music when i was 14, using the FL-Studio 5 demo. i saw lmms on sourceforge and instantly switched to linux Just for lmms. time went by, and i bought fl-studio (which runs well in wine btw), and now i bounce between them. I listened to Hori [...]
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:10pt;">if you like this, come check out my music at:</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:10pt;">www.soundclick.com/chrisbulman</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:10pt;">www.myspace.com/bulmanchris</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:10pt;">http://www.facebook.com/home.php?#/pages/Chris-Bulman/11988709369</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Trebuchet MS'; font-size:10pt;">www.d3drocks.co.cc (my VST website)</p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" font-family:'Trebuchet MS'; font-size:10pt;">thanks for listening</span></p>
-<ul style="-qt-list-indent: 1;"><li style=" font-family:'Sans Serif';" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Trebuchet MS'; font-size:10pt;">chris</span></li></ul>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"></p></body></html>]]></projectnotes>
- <timeline lp1pos="20160" lp0pos="0" lpstate="1" />
- <controllers/>
- </song>
-</multimedia-project>
diff --git a/data/projects/OldStuff/Malex-Horizon4.mmp b/data/projects/OldStuff/Malex-Horizon4.mmp
deleted file mode 100644
index 80e9607..0000000
--- a/data/projects/OldStuff/Malex-Horizon4.mmp
+++ /dev/null
@@ -1,639 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="song" >
- <head timesig_numerator="4" mastervol="94" timesig_denominator="4" bpm="180" masterpitch="0" />
- <song>
- <trackcontainer type="song" >
- <track muted="0" type="1" name="Basic Bass" >
- <bbtrack>
- <trackcontainer type="bbtrackcontainer" >
- <track muted="0" type="0" name="FatCheese" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="100" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="169" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="-12" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="3" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="102" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="5" wavetype2="4" vol0="100" vol1="100" phoffset0="295" phoffset1="267" vol2="100" />
- </instrument>
- <eldata fres="0.57" ftype="6" fcut="3354" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.374" lamt="0" syncmode="0" latt="0" rel="0.18" sus="0" amt="1" x100="0" att="0.037" lpdel="0" hold="0" lshp="0" lspd="0.1553" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.158" lamt="0.515" syncmode="0" latt="0" rel="0" sus="0.998" amt="0.58" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.53" ctlenvamt="1" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0.23" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="1" lspd="0.4849" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="167" arprange="3" arptime_denominator="1" syncmode="5" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="73" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="FatCheese" pos="0" len="3072" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="24" />
- <note pan="0" key="57" vol="100" pos="24" len="24" />
- <note pan="0" key="69" vol="100" pos="48" len="24" />
- <note pan="0" key="45" vol="100" pos="72" len="24" />
- <note pan="0" key="57" vol="100" pos="96" len="24" />
- <note pan="0" key="69" vol="100" pos="120" len="24" />
- <note pan="0" key="45" vol="100" pos="144" len="24" />
- <note pan="0" key="69" vol="100" pos="168" len="24" />
- <note pan="0" key="41" vol="100" pos="192" len="24" />
- <note pan="0" key="53" vol="100" pos="216" len="24" />
- <note pan="0" key="65" vol="100" pos="240" len="24" />
- <note pan="0" key="41" vol="100" pos="264" len="24" />
- <note pan="0" key="53" vol="100" pos="288" len="24" />
- <note pan="0" key="65" vol="100" pos="312" len="24" />
- <note pan="0" key="41" vol="100" pos="336" len="24" />
- <note pan="0" key="65" vol="100" pos="360" len="24" />
- <note pan="0" key="48" vol="100" pos="384" len="24" />
- <note pan="0" key="60" vol="100" pos="408" len="24" />
- <note pan="0" key="72" vol="100" pos="432" len="24" />
- <note pan="0" key="48" vol="100" pos="456" len="24" />
- <note pan="0" key="60" vol="100" pos="480" len="24" />
- <note pan="0" key="72" vol="100" pos="504" len="24" />
- <note pan="0" key="48" vol="100" pos="528" len="24" />
- <note pan="0" key="72" vol="100" pos="552" len="24" />
- <note pan="0" key="43" vol="100" pos="576" len="24" />
- <note pan="0" key="55" vol="100" pos="600" len="24" />
- <note pan="0" key="67" vol="100" pos="624" len="24" />
- <note pan="0" key="43" vol="100" pos="648" len="24" />
- <note pan="0" key="55" vol="100" pos="672" len="24" />
- <note pan="0" key="67" vol="100" pos="696" len="24" />
- <note pan="0" key="43" vol="100" pos="720" len="24" />
- <note pan="0" key="67" vol="100" pos="744" len="24" />
- <note pan="0" key="45" vol="100" pos="768" len="24" />
- <note pan="0" key="57" vol="100" pos="792" len="24" />
- <note pan="0" key="69" vol="100" pos="816" len="24" />
- <note pan="0" key="45" vol="100" pos="840" len="24" />
- <note pan="0" key="57" vol="100" pos="864" len="24" />
- <note pan="0" key="69" vol="100" pos="888" len="24" />
- <note pan="0" key="45" vol="100" pos="912" len="24" />
- <note pan="0" key="69" vol="100" pos="936" len="24" />
- <note pan="0" key="41" vol="100" pos="960" len="24" />
- <note pan="0" key="53" vol="100" pos="984" len="24" />
- <note pan="0" key="65" vol="100" pos="1008" len="24" />
- <note pan="0" key="41" vol="100" pos="1032" len="24" />
- <note pan="0" key="53" vol="100" pos="1056" len="24" />
- <note pan="0" key="65" vol="100" pos="1080" len="24" />
- <note pan="0" key="41" vol="100" pos="1104" len="24" />
- <note pan="0" key="65" vol="100" pos="1128" len="24" />
- <note pan="0" key="48" vol="100" pos="1152" len="24" />
- <note pan="0" key="60" vol="100" pos="1176" len="24" />
- <note pan="0" key="72" vol="100" pos="1200" len="24" />
- <note pan="0" key="48" vol="100" pos="1224" len="24" />
- <note pan="0" key="60" vol="100" pos="1248" len="24" />
- <note pan="0" key="72" vol="100" pos="1272" len="24" />
- <note pan="0" key="48" vol="100" pos="1296" len="24" />
- <note pan="0" key="72" vol="100" pos="1320" len="24" />
- <note pan="0" key="43" vol="100" pos="1344" len="24" />
- <note pan="0" key="55" vol="100" pos="1368" len="24" />
- <note pan="0" key="43" vol="100" pos="1392" len="24" />
- <note pan="0" key="67" vol="100" pos="1392" len="24" />
- <note pan="0" key="55" vol="100" pos="1416" len="24" />
- <note pan="0" key="43" vol="100" pos="1440" len="24" />
- <note pan="0" key="55" vol="100" pos="1464" len="24" />
- <note pan="0" key="43" vol="100" pos="1488" len="24" />
- <note pan="0" key="67" vol="100" pos="1488" len="24" />
- <note pan="0" key="55" vol="100" pos="1512" len="24" />
- <note pan="0" key="45" vol="100" pos="1536" len="24" />
- <note pan="0" key="57" vol="100" pos="1560" len="24" />
- <note pan="0" key="69" vol="100" pos="1584" len="24" />
- <note pan="0" key="45" vol="100" pos="1608" len="24" />
- <note pan="0" key="57" vol="100" pos="1632" len="24" />
- <note pan="0" key="69" vol="100" pos="1656" len="24" />
- <note pan="0" key="45" vol="100" pos="1680" len="24" />
- <note pan="0" key="69" vol="100" pos="1704" len="24" />
- <note pan="0" key="41" vol="100" pos="1728" len="24" />
- <note pan="0" key="53" vol="100" pos="1752" len="24" />
- <note pan="0" key="65" vol="100" pos="1776" len="24" />
- <note pan="0" key="41" vol="100" pos="1800" len="24" />
- <note pan="0" key="53" vol="100" pos="1824" len="24" />
- <note pan="0" key="65" vol="100" pos="1848" len="24" />
- <note pan="0" key="41" vol="100" pos="1872" len="24" />
- <note pan="0" key="65" vol="100" pos="1896" len="24" />
- <note pan="0" key="48" vol="100" pos="1920" len="24" />
- <note pan="0" key="60" vol="100" pos="1944" len="24" />
- <note pan="0" key="72" vol="100" pos="1968" len="24" />
- <note pan="0" key="48" vol="100" pos="1992" len="24" />
- <note pan="0" key="60" vol="100" pos="2016" len="24" />
- <note pan="0" key="72" vol="100" pos="2040" len="24" />
- <note pan="0" key="48" vol="100" pos="2064" len="24" />
- <note pan="0" key="72" vol="100" pos="2088" len="24" />
- <note pan="0" key="43" vol="100" pos="2112" len="24" />
- <note pan="0" key="55" vol="100" pos="2136" len="24" />
- <note pan="0" key="67" vol="100" pos="2160" len="24" />
- <note pan="0" key="43" vol="100" pos="2184" len="24" />
- <note pan="0" key="55" vol="100" pos="2208" len="24" />
- <note pan="0" key="67" vol="100" pos="2232" len="24" />
- <note pan="0" key="43" vol="100" pos="2256" len="24" />
- <note pan="0" key="67" vol="100" pos="2280" len="24" />
- <note pan="0" key="45" vol="100" pos="2304" len="24" />
- <note pan="0" key="57" vol="100" pos="2328" len="24" />
- <note pan="0" key="69" vol="100" pos="2352" len="24" />
- <note pan="0" key="45" vol="100" pos="2376" len="24" />
- <note pan="0" key="57" vol="100" pos="2400" len="24" />
- <note pan="0" key="69" vol="100" pos="2424" len="24" />
- <note pan="0" key="45" vol="100" pos="2448" len="24" />
- <note pan="0" key="69" vol="100" pos="2472" len="24" />
- <note pan="0" key="41" vol="100" pos="2496" len="24" />
- <note pan="0" key="53" vol="100" pos="2520" len="24" />
- <note pan="0" key="65" vol="100" pos="2544" len="24" />
- <note pan="0" key="41" vol="100" pos="2568" len="24" />
- <note pan="0" key="53" vol="100" pos="2592" len="24" />
- <note pan="0" key="65" vol="100" pos="2616" len="24" />
- <note pan="0" key="41" vol="100" pos="2640" len="24" />
- <note pan="0" key="65" vol="100" pos="2664" len="24" />
- <note pan="0" key="48" vol="100" pos="2688" len="24" />
- <note pan="0" key="60" vol="100" pos="2712" len="24" />
- <note pan="0" key="72" vol="100" pos="2736" len="24" />
- <note pan="0" key="48" vol="100" pos="2760" len="24" />
- <note pan="0" key="60" vol="100" pos="2784" len="24" />
- <note pan="0" key="72" vol="100" pos="2808" len="24" />
- <note pan="0" key="48" vol="100" pos="2832" len="24" />
- <note pan="0" key="72" vol="100" pos="2856" len="24" />
- <note pan="0" key="55" vol="100" pos="2880" len="12" />
- <note pan="0" key="43" vol="100" pos="2880" len="96" />
- <note pan="0" key="67" vol="100" pos="2892" len="12" />
- <note pan="0" key="55" vol="100" pos="2904" len="12" />
- <note pan="0" key="67" vol="100" pos="2928" len="12" />
- <note pan="0" key="55" vol="100" pos="2952" len="12" />
- <note pan="0" key="67" vol="100" pos="2964" len="12" />
- <note pan="0" key="55" vol="100" pos="2976" len="12" />
- <note pan="0" key="43" vol="100" pos="2976" len="24" />
- <note pan="0" key="67" vol="100" pos="2988" len="12" />
- <note pan="0" key="55" vol="100" pos="3000" len="12" />
- <note pan="0" key="43" vol="100" pos="3000" len="24" />
- <note pan="0" key="67" vol="100" pos="3024" len="12" />
- <note pan="0" key="43" vol="100" pos="3024" len="24" />
- <note pan="0" key="43" vol="100" pos="3048" len="24" />
- <note pan="0" key="55" vol="100" pos="3048" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="FatCheese" pos="192" len="192" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="96" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="960" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="E-Organ" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="50" vol="35" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="146" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="0" userwavefile2="samples/empty.wav" finer2="11" coarse0="-7" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="1" modalgo2="1" finel2="-18" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="125" wavetype0="0" stphdetun2="59" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="265" vol2="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.393" lamt="0" syncmode="0" latt="0" rel="0.215" sus="0" amt="1" x100="0" att="0.079" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="3" chord-enabled="1" />
- <arpeggiator arptime="150" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="E-Organ" pos="576" len="1536" frozen="0" >
- <note pan="0" key="33" vol="100" pos="24" len="24" />
- <note pan="0" key="40" vol="100" pos="48" len="24" />
- <note pan="0" key="33" vol="100" pos="72" len="24" />
- <note pan="0" key="38" vol="100" pos="96" len="24" />
- <note pan="0" key="33" vol="100" pos="120" len="24" />
- <note pan="0" key="40" vol="100" pos="144" len="24" />
- <note pan="0" key="41" vol="100" pos="168" len="24" />
- <note pan="0" key="41" vol="100" pos="216" len="24" />
- <note pan="0" key="40" vol="100" pos="240" len="24" />
- <note pan="0" key="38" vol="100" pos="288" len="24" />
- <note pan="0" key="36" vol="100" pos="336" len="24" />
- <note pan="0" key="31" vol="100" pos="360" len="24" />
- <note pan="0" key="31" vol="100" pos="408" len="24" />
- <note pan="0" key="36" vol="100" pos="432" len="24" />
- <note pan="0" key="31" vol="100" pos="456" len="24" />
- <note pan="0" key="38" vol="100" pos="480" len="24" />
- <note pan="0" key="31" vol="100" pos="504" len="24" />
- <note pan="0" key="40" vol="100" pos="528" len="24" />
- <note pan="0" key="43" vol="100" pos="552" len="36" />
- <note pan="0" key="43" vol="100" pos="600" len="24" />
- <note pan="0" key="41" vol="100" pos="624" len="24" />
- <note pan="0" key="40" vol="100" pos="672" len="48" />
- <note pan="0" key="38" vol="100" pos="720" len="24" />
- <note pan="0" key="40" vol="100" pos="744" len="24" />
- <note pan="0" key="36" vol="100" pos="816" len="36" />
- <note pan="0" key="36" vol="100" pos="864" len="36" />
- <note pan="0" key="38" vol="100" pos="912" len="24" />
- <note pan="0" key="36" vol="100" pos="936" len="24" />
- <note pan="0" key="36" vol="100" pos="984" len="24" />
- <note pan="0" key="36" vol="100" pos="1008" len="24" />
- <note pan="0" key="36" vol="100" pos="1032" len="24" />
- <note pan="0" key="36" vol="100" pos="1056" len="24" />
- <note pan="0" key="38" vol="100" pos="1080" len="24" />
- <note pan="0" key="40" vol="100" pos="1104" len="24" />
- <note pan="0" key="36" vol="100" pos="1128" len="24" />
- <note pan="0" key="36" vol="100" pos="1200" len="48" />
- <note pan="0" key="38" vol="100" pos="1248" len="48" />
- <note pan="0" key="40" vol="100" pos="1296" len="24" />
- <note pan="0" key="38" vol="100" pos="1320" len="24" />
- <note pan="0" key="38" vol="100" pos="1368" len="24" />
- <note pan="0" key="36" vol="100" pos="1392" len="24" />
- <note pan="0" key="36" vol="100" pos="1416" len="24" />
- <note pan="0" key="35" vol="100" pos="1440" len="24" />
- <note pan="0" key="36" vol="100" pos="1464" len="24" />
- <note pan="0" key="38" vol="100" pos="1488" len="24" />
- <note pan="0" key="36" vol="100" pos="1512" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="E-Organ" pos="960" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Analog Times" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="34" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="13" userwavefile2="samples/empty.wav" finer2="-3" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-14" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="50" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="0.01" ftype="6" fcut="1118" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.296" lamt="0" syncmode="0" latt="0" rel="0.213" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.223" lamt="0.145" syncmode="0" latt="0" rel="0" sus="0.998" amt="0.655" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.67" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="-0.01" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Analog Times" pos="384" len="1536" frozen="0" >
- <note pan="0" key="60" vol="100" pos="96" len="48" />
- <note pan="0" key="60" vol="100" pos="168" len="24" />
- <note pan="0" key="60" vol="100" pos="288" len="48" />
- <note pan="0" key="60" vol="100" pos="360" len="24" />
- <note pan="0" key="60" vol="100" pos="480" len="48" />
- <note pan="0" key="62" vol="100" pos="528" len="24" />
- <note pan="0" key="64" vol="100" pos="552" len="24" />
- <note pan="0" key="65" vol="100" pos="600" len="24" />
- <note pan="0" key="64" vol="100" pos="672" len="48" />
- <note pan="0" key="62" vol="100" pos="720" len="24" />
- <note pan="0" key="60" vol="100" pos="744" len="24" />
- <note pan="0" key="60" vol="100" pos="864" len="48" />
- <note pan="0" key="59" vol="100" pos="912" len="24" />
- <note pan="0" key="60" vol="100" pos="936" len="24" />
- <note pan="0" key="60" vol="100" pos="1056" len="48" />
- <note pan="0" key="62" vol="100" pos="1104" len="24" />
- <note pan="0" key="60" vol="100" pos="1128" len="24" />
- <note pan="0" key="60" vol="100" pos="1248" len="48" />
- <note pan="0" key="62" vol="100" pos="1296" len="24" />
- <note pan="0" key="60" vol="100" pos="1320" len="24" />
- <note pan="0" key="59" vol="100" pos="1368" len="24" />
- <note pan="0" key="57" vol="100" pos="1416" len="24" />
- <note pan="0" key="55" vol="100" pos="1464" len="24" />
- <note pan="0" key="57" vol="100" pos="1512" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Analog Times" pos="768" len="768" frozen="0" >
- <note pan="0" key="40" vol="70" pos="0" len="192" />
- <note pan="0" key="36" vol="68" pos="192" len="192" />
- <note pan="0" key="43" vol="78" pos="384" len="192" />
- <note pan="0" key="38" vol="68" pos="576" len="192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="960" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Moog" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="8" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="samples/empty.wav" finer0="0" userwavefile1="samples/empty.wav" finer1="13" userwavefile2="samples/empty.wav" finer2="-3" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-14" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="50" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="2" ftype="0" fcut="143" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.136" lamt="0" syncmode="0" latt="0" rel="0" sus="0.998" amt="1" x100="0" att="0" lpdel="0" hold="0.238" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.223" lamt="0" syncmode="0" latt="0" rel="0" sus="0.998" amt="0.79" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.767" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="-0.01" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="2" chord-enabled="1" />
- <arpeggiator arptime="179" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="142" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Moog" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Moog" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Moog" pos="960" len="768" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="12" />
- <note pan="0" key="48" vol="100" pos="12" len="12" />
- <note pan="0" key="52" vol="100" pos="24" len="12" />
- <note pan="0" key="48" vol="100" pos="36" len="12" />
- <note pan="0" key="57" vol="100" pos="48" len="12" />
- <note pan="0" key="52" vol="100" pos="60" len="12" />
- <note pan="0" key="48" vol="100" pos="72" len="12" />
- <note pan="0" key="52" vol="100" pos="84" len="12" />
- <note pan="0" key="45" vol="100" pos="96" len="12" />
- <note pan="0" key="48" vol="100" pos="108" len="12" />
- <note pan="0" key="52" vol="100" pos="120" len="12" />
- <note pan="0" key="48" vol="100" pos="132" len="12" />
- <note pan="0" key="57" vol="100" pos="144" len="12" />
- <note pan="0" key="52" vol="100" pos="156" len="12" />
- <note pan="0" key="48" vol="100" pos="168" len="12" />
- <note pan="0" key="52" vol="100" pos="180" len="12" />
- <note pan="0" key="45" vol="100" pos="192" len="12" />
- <note pan="0" key="48" vol="100" pos="204" len="12" />
- <note pan="0" key="53" vol="100" pos="216" len="12" />
- <note pan="0" key="48" vol="100" pos="228" len="12" />
- <note pan="0" key="57" vol="100" pos="240" len="12" />
- <note pan="0" key="53" vol="100" pos="252" len="12" />
- <note pan="0" key="48" vol="100" pos="264" len="12" />
- <note pan="0" key="53" vol="100" pos="276" len="12" />
- <note pan="0" key="45" vol="100" pos="288" len="12" />
- <note pan="0" key="48" vol="100" pos="300" len="12" />
- <note pan="0" key="53" vol="100" pos="312" len="12" />
- <note pan="0" key="48" vol="100" pos="324" len="12" />
- <note pan="0" key="57" vol="100" pos="336" len="12" />
- <note pan="0" key="53" vol="100" pos="348" len="12" />
- <note pan="0" key="48" vol="100" pos="360" len="12" />
- <note pan="0" key="53" vol="100" pos="372" len="12" />
- <note pan="0" key="48" vol="100" pos="384" len="12" />
- <note pan="0" key="52" vol="100" pos="396" len="12" />
- <note pan="0" key="55" vol="100" pos="408" len="12" />
- <note pan="0" key="52" vol="100" pos="420" len="12" />
- <note pan="0" key="60" vol="100" pos="432" len="12" />
- <note pan="0" key="55" vol="100" pos="444" len="12" />
- <note pan="0" key="52" vol="100" pos="456" len="12" />
- <note pan="0" key="55" vol="100" pos="468" len="12" />
- <note pan="0" key="48" vol="100" pos="480" len="12" />
- <note pan="0" key="52" vol="100" pos="492" len="12" />
- <note pan="0" key="55" vol="100" pos="504" len="12" />
- <note pan="0" key="52" vol="100" pos="516" len="12" />
- <note pan="0" key="60" vol="100" pos="528" len="12" />
- <note pan="0" key="55" vol="100" pos="540" len="12" />
- <note pan="0" key="52" vol="100" pos="552" len="12" />
- <note pan="0" key="55" vol="100" pos="564" len="12" />
- <note pan="0" key="43" vol="100" pos="576" len="12" />
- <note pan="0" key="47" vol="100" pos="588" len="12" />
- <note pan="0" key="50" vol="100" pos="600" len="12" />
- <note pan="0" key="47" vol="100" pos="612" len="12" />
- <note pan="0" key="55" vol="100" pos="624" len="12" />
- <note pan="0" key="50" vol="100" pos="636" len="12" />
- <note pan="0" key="47" vol="100" pos="648" len="12" />
- <note pan="0" key="50" vol="100" pos="660" len="12" />
- <note pan="0" key="43" vol="100" pos="672" len="12" />
- <note pan="0" key="47" vol="100" pos="684" len="12" />
- <note pan="0" key="50" vol="100" pos="696" len="12" />
- <note pan="0" key="47" vol="100" pos="708" len="12" />
- <note pan="0" key="55" vol="100" pos="720" len="12" />
- <note pan="0" key="50" vol="100" pos="732" len="12" />
- <note pan="0" key="47" vol="100" pos="744" len="12" />
- <note pan="0" key="50" vol="100" pos="756" len="12" />
- </pattern>
- </track>
- </trackcontainer>
- </bbtrack>
- <bbtco muted="0" name="Basic Bass" pos="0" color="4282417407" len="3072" />
- <bbtco muted="0" name="Basic Bass" pos="6144" color="4282417407" len="3072" />
- <bbtco muted="0" name="Basic Bass" pos="3072" color="4282417407" len="3072" />
- <bbtco muted="0" name="Basic Bass" pos="9216" color="4282417407" len="3072" />
- <bbtco muted="0" name="Basic Bass" pos="12288" color="4282417407" len="6144" />
- <bbtco muted="0" name="Basic Bass" pos="19200" color="4282417407" len="2304" />
- <bbtco muted="0" name="Basic Bass" pos="21504" color="4282417407" len="3072" />
- </track>
- <track muted="0" type="1" name="Basic Bass Cap" >
- <bbtrack/>
- <bbtco muted="0" name="Basic Bass Cap" pos="24576" color="4282417407" len="192" />
- </track>
- <track muted="0" type="1" name="Wreckage Lead Small" >
- <bbtrack/>
- <bbtco muted="0" name="Wreckage Lead Small" pos="1536" color="4282417407" len="1536" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="6144" color="4282417407" len="3072" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="4608" color="4282417407" len="1536" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="10740" color="4282417407" len="1536" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="12288" color="4282417407" len="3072" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="16896" color="4282417407" len="1536" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="19968" color="4282417407" len="1536" />
- <bbtco muted="0" name="Wreckage Lead Small" pos="23040" color="4282417407" len="1536" />
- </track>
- <track muted="0" type="1" name="Horizon Lead" >
- <bbtrack/>
- <bbtco muted="0" name="Horizon Lead" pos="6144" color="4282417407" len="3072" />
- <bbtco muted="0" name="Horizon Lead" pos="12288" color="4282417407" len="12288" />
- </track>
- <track muted="0" type="1" name="Harm Bass" >
- <bbtrack/>
- <bbtco muted="0" name="Harm Bass" pos="3072" color="4282417407" len="3060" />
- <bbtco muted="0" name="Harm Bass" pos="15360" color="4282417407" len="7680" />
- </track>
- <track muted="0" type="1" name="Fast Stuff" >
- <bbtrack/>
- <bbtco muted="0" name="Fast Stuff" pos="9984" color="4282417407" len="2304" />
- <bbtco muted="0" name="Fast Stuff" pos="12288" color="4282417407" len="9216" />
- </track>
- </trackcontainer>
- <track muted="0" type="6" name="Automation track" >
- <automationtrack/>
- </track>
- <fxmixer>
- <fxchannel num="0" muted="0" volume="0.5" name="Master" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="1" muted="0" volume="1" name="FX 1" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="2" muted="0" volume="1" name="FX 2" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="3" muted="0" volume="1" name="FX 3" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="4" muted="0" volume="1" name="FX 4" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="5" muted="0" volume="1" name="FX 5" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="6" muted="0" volume="1" name="FX 6" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="7" muted="0" volume="1" name="FX 7" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="8" muted="0" volume="1" name="FX 8" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="9" muted="0" volume="1" name="FX 9" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="10" muted="0" volume="1" name="FX 10" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="11" muted="0" volume="1" name="FX 11" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="12" muted="0" volume="1" name="FX 12" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="13" muted="0" volume="1" name="FX 13" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="14" muted="0" volume="1" name="FX 14" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="15" muted="0" volume="1" name="FX 15" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="16" muted="0" volume="1" name="FX 16" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="17" muted="0" volume="1" name="FX 17" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="18" muted="0" volume="1" name="FX 18" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="19" muted="0" volume="1" name="FX 19" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="20" muted="0" volume="1" name="FX 20" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="21" muted="0" volume="1" name="FX 21" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="22" muted="0" volume="1" name="FX 22" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="23" muted="0" volume="1" name="FX 23" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="24" muted="0" volume="1" name="FX 24" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="25" muted="0" volume="1" name="FX 25" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="26" muted="0" volume="1" name="FX 26" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="27" muted="0" volume="1" name="FX 27" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="28" muted="0" volume="1" name="FX 28" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="29" muted="0" volume="1" name="FX 29" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="30" muted="0" volume="1" name="FX 30" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="31" muted="0" volume="1" name="FX 31" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="32" muted="0" volume="1" name="FX 32" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="33" muted="0" volume="1" name="FX 33" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="34" muted="0" volume="1" name="FX 34" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="35" muted="0" volume="1" name="FX 35" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="36" muted="0" volume="1" name="FX 36" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="37" muted="0" volume="1" name="FX 37" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="38" muted="0" volume="1" name="FX 38" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="39" muted="0" volume="1" name="FX 39" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="40" muted="0" volume="1" name="FX 40" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="41" muted="0" volume="1" name="FX 41" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="42" muted="0" volume="1" name="FX 42" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="43" muted="0" volume="1" name="FX 43" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="44" muted="0" volume="1" name="FX 44" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="45" muted="0" volume="1" name="FX 45" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="46" muted="0" volume="1" name="FX 46" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="47" muted="0" volume="1" name="FX 47" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="48" muted="0" volume="1" name="FX 48" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="49" muted="0" volume="1" name="FX 49" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="50" muted="0" volume="1" name="FX 50" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="51" muted="0" volume="1" name="FX 51" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="52" muted="0" volume="1" name="FX 52" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="53" muted="0" volume="1" name="FX 53" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="54" muted="0" volume="1" name="FX 54" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="55" muted="0" volume="1" name="FX 55" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="56" muted="0" volume="1" name="FX 56" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="57" muted="0" volume="1" name="FX 57" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="58" muted="0" volume="1" name="FX 58" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="59" muted="0" volume="1" name="FX 59" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="60" muted="0" volume="1" name="FX 60" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="61" muted="0" volume="1" name="FX 61" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="62" muted="0" volume="1" name="FX 62" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="63" muted="0" volume="1" name="FX 63" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="64" muted="0" volume="1" name="FX 64" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- </fxmixer>
- <pianoroll width="640" x="0" y="0" height="480" visible="0" />
- <automationeditor width="740" x="0" y="0" height="480" visible="0" />
- <projectnotes width="316" x="714" y="355" height="200" visible="1" ><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
-<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-family:'Trebuchet MS'; font-size:14pt;">HORIZON4 - by Malex</span></p>
-<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-family:'Times New Roman'; font-size:11pt;">http://MalexMedia.Net/</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-family:'Times New Roman'; font-size:11pt;"> Here is yet another (fairly poor) rendition of the popular 'Horizon' song. There's been a new version of the Horizon song on every one of my past albums, and its safe to assume that there'll be one on my next one too.</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-family:'Times New Roman'; font-size:11pt;"> Why am I making this song available to the outside world? It sounds almost embarrassingly rough, it'd be pretty easy to rip off, and I've got better things to do, (like running the Malex Media Network).</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-family:'Times New Roman'; font-size:11pt;"> Maybe it doesn't make sense, but I'm releasing this song in the hope that it will draw some small amount of attention to LMMS. I believe in LMMS. I believe that LMMS is amazing simply because of its raw, unbridled potential. The way it is designed coupled with the f [...]
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-family:'Times New Roman'; font-size:11pt;"> Maybe this program is still missing a feature that you feel like you need (I know that's true in my case), but don't let that stop you from keeping an eye on this project. Contribute if you can, and help make the best music studio in the world.</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-family:'Times New Roman'; font-size:11pt;"> --Alex (Malex) Markley</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-family:'Times New Roman'; font-size:11pt; font-style:italic;">Note: This song is Copyright (C) 2006 by Alex Markley. It is freely redistributable in its current state. The content of this song may not be altered for distribution. The formatting of this song data may be altered, as long as the data itself (ie, [...]
- <timeline lp1pos="192" lp0pos="0" lpstate="0" />
- <controllers/>
- </song>
-</multimedia-project>
diff --git a/data/projects/OldStuff/MysthR-Living.mmpz b/data/projects/OldStuff/MysthR-Living.mmpz
deleted file mode 100644
index 37f4088..0000000
Binary files a/data/projects/OldStuff/MysthR-Living.mmpz and /dev/null differ
diff --git a/data/projects/OldStuff/Siegel-DreamWave.mmp b/data/projects/OldStuff/Siegel-DreamWave.mmp
deleted file mode 100644
index d3a558c..0000000
--- a/data/projects/OldStuff/Siegel-DreamWave.mmp
+++ /dev/null
@@ -1,1204 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="song" >
- <head timesig_numerator="4" mastervol="100" timesig_denominator="4" bpm="145" masterpitch="0" />
- <song>
- <trackcontainer type="song" >
- <track muted="0" type="1" name="piano1" >
- <bbtrack>
- <trackcontainer type="bbtrackcontainer" >
- <track muted="0" type="0" name="brummel_echo" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="60" vol="9" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="1" modalgo2="3" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="3" stphdetun2="0" wavetype1="5" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="10" ftype="4" fcut="12429" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.791" lamt="1" syncmode="0" latt="0" rel="0.365" sus="0.349" amt="1" x100="1" att="0.09" lpdel="0" hold="0.028" lshp="3" lspd="0.3622" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="1" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="brummel_echo" pos="0" len="768" frozen="0" >
- <note pan="0" key="48" vol="100" pos="0" len="24" />
- <note pan="0" key="50" vol="100" pos="48" len="24" />
- <note pan="0" key="43" vol="100" pos="96" len="24" />
- <note pan="0" key="45" vol="100" pos="120" len="24" />
- <note pan="0" key="40" vol="100" pos="192" len="96" />
- <note pan="0" key="48" vol="100" pos="384" len="24" />
- <note pan="0" key="50" vol="100" pos="432" len="24" />
- <note pan="0" key="41" vol="100" pos="480" len="24" />
- <note pan="0" key="40" vol="100" pos="504" len="24" />
- <note pan="0" key="40" vol="100" pos="552" len="24" />
- <note pan="0" key="40" vol="100" pos="600" len="24" />
- <note pan="0" key="39" vol="100" pos="624" len="24" />
- <note pan="0" key="40" vol="100" pos="672" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="brummel_echo" pos="192" len="768" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="72" />
- <note pan="0" key="47" vol="78" pos="144" len="72" />
- <note pan="0" key="52" vol="78" pos="288" len="48" />
- <note pan="0" key="38" vol="78" pos="384" len="48" />
- <note pan="0" key="40" vol="100" pos="480" len="48" />
- <note pan="0" key="41" vol="100" pos="576" len="48" />
- <note pan="0" key="40" vol="100" pos="648" len="72" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="brummel_echo" pos="384" len="768" frozen="0" >
- <note pan="0" key="45" vol="100" pos="0" len="72" />
- <note pan="0" key="47" vol="78" pos="144" len="72" />
- <note pan="0" key="52" vol="78" pos="288" len="48" />
- <note pan="0" key="38" vol="78" pos="384" len="48" />
- <note pan="0" key="40" vol="100" pos="480" len="48" />
- <note pan="0" key="41" vol="100" pos="576" len="48" />
- <note pan="0" key="38" vol="100" pos="648" len="72" />
- <note pan="0" key="40" vol="100" pos="720" len="48" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="brummel_echo" pos="576" len="384" frozen="0" >
- <note pan="0" key="47" vol="100" pos="0" len="72" />
- <note pan="0" key="60" vol="100" pos="72" len="72" />
- <note pan="0" key="57" vol="100" pos="144" len="144" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="brummel_echo" pos="768" len="384" frozen="0" >
- <note pan="0" key="81" vol="100" pos="0" len="72" />
- <note pan="0" key="69" vol="70" pos="0" len="72" />
- <note pan="0" key="57" vol="100" pos="144" len="144" />
- <note pan="0" key="55" vol="100" pos="288" len="72" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="brummel_echo" pos="960" len="384" frozen="0" >
- <note pan="0" key="48" vol="100" pos="0" len="24" />
- <note pan="0" key="50" vol="100" pos="48" len="24" />
- <note pan="0" key="43" vol="100" pos="96" len="24" />
- <note pan="0" key="45" vol="100" pos="120" len="24" />
- <note pan="0" key="40" vol="100" pos="192" len="96" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="2880" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="3072" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="3264" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bassdrum04.ogg" pos="3456" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="3648" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="3840" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="4032" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="brummel_echo" pos="4224" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="kick_hardcore01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="68" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99969" sframe="0" src="drums/kick_hardcore01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.84" ftype="7" fcut="8873" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="1920" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="2112" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="2304" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="2496" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="2688" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="2880" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="3072" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="3264" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="3456" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="3648" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="3840" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="4032" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="4224" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- </pattern>
- </track>
- <track muted="0" type="0" name="snare_electro01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="70" vol="29" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99994" sframe="0" src="drums/snare_electro01.ogg" amp="100" />
- </instrument>
- <eldata fres="3.72" ftype="7" fcut="1722" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="2688" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="2880" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="3072" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="3264" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="3456" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="3648" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="3840" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="4032" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_electro01.ogg" pos="4224" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="156" len="-192" />
- </pattern>
- </track>
- <track muted="0" type="0" name="hihat_closed01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="22" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99908" sframe="0" src="drums/hihat_closed01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="1920" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="2112" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="2304" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="2496" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="2688" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="2880" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="3072" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="3264" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="36" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="156" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="3456" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="36" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="156" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="3648" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="36" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="156" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="3840" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="36" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="156" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="4032" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed01.ogg" pos="4224" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="36" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="156" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- </track>
- <track muted="0" type="0" name="synth_acid01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="70" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99951" sframe="0" src="basses/synth_acid01.ogg" amp="500" />
- </instrument>
- <eldata fres="0.01" ftype="7" fcut="10122" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.233" sus="0.499" amt="1" x100="1" att="0" lpdel="0" hold="0.085" lshp="0" lspd="0.0988" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="6" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="1" enabled="1" >
- <effect key="AAAACQAAAAACAAAACgAAAAAWAGIAYQBzAHMAYgBvAG8AcwB0AGUAcgAAAAAB/////w==" autoquit="0" gate="0" name="bassbooster" wet="1" on="1" >
- <bassboostercontrols ratio="2" freq="88" gain="1" />
- </effect>
- </fxchain>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="synth_acid02.ogg" pos="1344" len="768" frozen="0" >
- <note pan="0" key="63" vol="100" pos="0" len="24" />
- <note pan="0" key="63" vol="100" pos="24" len="24" />
- <note pan="0" key="63" vol="100" pos="72" len="24" />
- <note pan="0" key="63" vol="100" pos="96" len="24" />
- <note pan="0" key="63" vol="100" pos="120" len="24" />
- <note pan="0" key="63" vol="100" pos="168" len="24" />
- <note pan="0" key="63" vol="100" pos="216" len="24" />
- <note pan="0" key="63" vol="100" pos="264" len="24" />
- <note pan="0" key="63" vol="100" pos="288" len="24" />
- <note pan="0" key="63" vol="100" pos="312" len="24" />
- <note pan="0" key="58" vol="100" pos="384" len="24" />
- <note pan="0" key="58" vol="100" pos="408" len="24" />
- <note pan="0" key="58" vol="100" pos="456" len="24" />
- <note pan="0" key="66" vol="100" pos="504" len="24" />
- <note pan="0" key="66" vol="100" pos="528" len="24" />
- <note pan="0" key="65" vol="100" pos="552" len="24" />
- <note pan="0" key="58" vol="100" pos="600" len="24" />
- <note pan="0" key="58" vol="100" pos="648" len="24" />
- <note pan="0" key="58" vol="100" pos="672" len="24" />
- <note pan="0" key="58" vol="100" pos="696" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="synth_acid01.ogg" pos="1536" len="768" frozen="0" >
- <note pan="0" key="63" vol="100" pos="0" len="24" />
- <note pan="0" key="63" vol="94" pos="24" len="24" />
- <note pan="0" key="63" vol="100" pos="48" len="24" />
- <note pan="0" key="61" vol="98" pos="72" len="24" />
- <note pan="0" key="63" vol="98" pos="96" len="24" />
- <note pan="0" key="63" vol="92" pos="120" len="24" />
- <note pan="0" key="66" vol="100" pos="144" len="24" />
- <note pan="0" key="66" vol="100" pos="168" len="48" />
- <note pan="0" key="63" vol="100" pos="216" len="24" />
- <note pan="0" key="61" vol="100" pos="240" len="24" />
- <note pan="0" key="61" vol="100" pos="264" len="24" />
- <note pan="0" key="63" vol="100" pos="288" len="24" />
- <note pan="0" key="63" vol="100" pos="312" len="24" />
- <note pan="0" key="63" vol="100" pos="336" len="24" />
- <note pan="0" key="56" vol="100" pos="384" len="24" />
- <note pan="0" key="56" vol="100" pos="408" len="24" />
- <note pan="0" key="56" vol="100" pos="432" len="24" />
- <note pan="0" key="56" vol="100" pos="456" len="24" />
- <note pan="0" key="66" vol="100" pos="504" len="24" />
- <note pan="0" key="66" vol="100" pos="528" len="24" />
- <note pan="0" key="66" vol="100" pos="552" len="24" />
- <note pan="0" key="61" vol="100" pos="600" len="24" />
- <note pan="0" key="61" vol="100" pos="624" len="24" />
- <note pan="0" key="61" vol="100" pos="648" len="24" />
- <note pan="0" key="63" vol="100" pos="672" len="24" />
- <note pan="0" key="63" vol="100" pos="696" len="24" />
- <note pan="0" key="63" vol="100" pos="720" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="2880" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="3072" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="3264" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="3456" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="3648" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="3840" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="4032" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="synth_acid01.ogg" pos="4224" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="snare_muffled02.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="105" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99952" sframe="0" src="drums/snare_muffled02.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="1920" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="2112" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="2304" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="2496" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="156" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="2880" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="3072" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="3264" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="3456" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="3648" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="3840" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="4032" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare_muffled02.ogg" pos="4224" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="crash02.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="59" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99995" sframe="0" src="drums/crash02.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="2496" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="2880" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="3072" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="3264" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="3456" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="3648" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="3840" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="4032" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="4224" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="warp01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="59" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99989" sframe="0" src="effects/warp01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="1" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.998" lamt="0" syncmode="0" latt="0" rel="0.998" sus="0.544" amt="1" x100="0" att="0" lpdel="0" hold="0.998" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="warp01.ogg" pos="1728" len="768" frozen="0" >
- <note pan="0" key="63" vol="100" pos="144" len="384" />
- <note pan="0" key="60" vol="100" pos="192" len="384" />
- <note pan="0" key="57" vol="100" pos="240" len="384" />
- <note pan="0" key="54" vol="100" pos="288" len="384" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="2880" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="3072" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="3264" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="3456" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="3648" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="3840" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="4032" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="warp01.ogg" pos="4224" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="juno_pad01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="48" vol="63" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99997" sframe="0" src="stringsnpads/juno_pad01.ogg" amp="100" />
- </instrument>
- <eldata fres="10" ftype="7" fcut="11711" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.998" lamt="0" syncmode="0" latt="0" rel="0.998" sus="0.432" amt="1" x100="1" att="0" lpdel="0" hold="0.998" lshp="3" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="juno_pad01.ogg" pos="1152" len="2880" frozen="0" >
- <note pan="0" key="61" vol="100" pos="0" len="192" />
- <note pan="0" key="59" vol="100" pos="192" len="192" />
- <note pan="0" key="61" vol="100" pos="384" len="192" />
- <note pan="0" key="64" vol="100" pos="576" len="192" />
- <note pan="0" key="61" vol="100" pos="768" len="192" />
- <note pan="0" key="57" vol="100" pos="960" len="192" />
- <note pan="0" key="52" vol="100" pos="1152" len="192" />
- <note pan="0" key="61" vol="100" pos="1536" len="192" />
- <note pan="0" key="59" vol="100" pos="1728" len="192" />
- <note pan="0" key="61" vol="100" pos="1920" len="192" />
- <note pan="0" key="64" vol="100" pos="2112" len="192" />
- <note pan="0" key="61" vol="100" pos="2304" len="192" />
- <note pan="0" key="57" vol="100" pos="2496" len="192" />
- <note pan="0" key="49" vol="100" pos="2688" len="192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="2880" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="3072" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="3264" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="3456" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="3648" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="3840" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="4032" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="juno_pad01.ogg" pos="4224" len="192" frozen="0" />
- </track>
- </trackcontainer>
- </bbtrack>
- <bbtco muted="0" name="piano" pos="0" color="4281717759" len="768" />
- <bbtco muted="0" name="piano" pos="768" color="4281717759" len="768" />
- <bbtco muted="0" name="piano" pos="1536" color="4281717759" len="768" />
- <bbtco muted="0" name="piano" pos="2304" color="4281717759" len="768" />
- <bbtco muted="0" name="piano" pos="3072" color="4281717759" len="768" />
- <bbtco muted="0" name="piano" pos="3840" color="4281717759" len="768" />
- <bbtco muted="0" name="piano1" pos="4608" color="4281717759" len="768" />
- <bbtco muted="0" name="piano1" pos="5376" color="4281717759" len="768" />
- <bbtco muted="0" name="piano1" pos="10752" color="4281717759" len="768" />
- <bbtco muted="0" name="piano1" pos="11520" color="4281717759" len="768" />
- <bbtco muted="0" name="piano1" pos="12288" color="4281717759" len="768" />
- <bbtco muted="0" name="piano1" pos="13056" color="4281717759" len="768" />
- <bbtco muted="0" name="piano1" pos="13824" color="4281717759" len="768" />
- <bbtco muted="0" name="piano1" pos="14592" color="4281717759" len="768" />
- </track>
- <track muted="0" type="1" name="piano2" >
- <bbtrack/>
- <bbtco muted="0" name="piano2" pos="6144" color="4281759686" len="768" />
- <bbtco muted="0" name="piano2" pos="9216" color="4281759686" len="768" />
- <bbtco muted="0" name="piano2" pos="7680" color="4281759686" len="768" />
- <bbtco muted="0" name="piano2" pos="19968" color="4281759686" len="768" />
- <bbtco muted="0" name="piano2" pos="21504" color="4281759686" len="768" />
- <bbtco muted="0" name="piano2" pos="23040" color="4281759686" len="768" />
- </track>
- <track muted="0" type="1" name="piano3" >
- <bbtrack/>
- <bbtco muted="0" name="piano3" pos="6912" color="4281618344" len="768" />
- <bbtco muted="0" name="piano3" pos="9984" color="4281618344" len="768" />
- <bbtco muted="0" name="piano3" pos="8448" color="4281618344" len="768" />
- <bbtco muted="0" name="piano3" pos="20736" color="4281618344" len="768" />
- <bbtco muted="0" name="piano3" pos="22272" color="4281618344" len="768" />
- <bbtco muted="0" name="piano3" pos="23808" color="4281618344" len="768" />
- </track>
- <track muted="0" type="1" name="piano4" >
- <bbtrack/>
- <bbtco muted="0" name="piano4" pos="17664" color="4282417407" len="384" />
- <bbtco muted="0" name="piano4" pos="16896" color="4282417407" len="384" />
- <bbtco muted="0" name="piano4" pos="18432" color="4282417407" len="384" />
- <bbtco muted="0" name="piano4" pos="19200" color="4282417407" len="384" />
- </track>
- <track muted="0" type="1" name="piano5" >
- <bbtrack/>
- <bbtco muted="0" name="piano5" pos="17280" color="4282417407" len="384" />
- <bbtco muted="0" name="piano5" pos="18048" color="4282417407" len="384" />
- <bbtco muted="0" name="piano5" pos="18816" color="4282417407" len="384" />
- <bbtco muted="0" name="piano5" pos="19584" color="4282417407" len="384" />
- </track>
- <track muted="0" type="1" name="piano6" >
- <bbtrack/>
- <bbtco muted="0" name="piano6" pos="24576" color="4281717759" len="384" />
- </track>
- <track muted="0" type="1" name="add.mel." >
- <bbtrack/>
- <bbtco muted="0" name="add.mel." pos="3072" color="4289396480" len="2880" />
- <bbtco muted="0" name="add.mel." pos="12288" color="4289396480" len="2880" />
- </track>
- <track muted="0" type="1" name="base1" >
- <bbtrack/>
- <bbtco muted="0" name="base1" pos="1536" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="2304" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="3072" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="3840" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="4608" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="5376" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="10752" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="14592" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="13824" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="13056" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="11520" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="12288" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="15360" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="16128" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="16896" color="4293646645" len="768" />
- <bbtco muted="0" name="base1" pos="17664" color="4293646645" len="768" />
- </track>
- <track muted="0" type="1" name="base2" >
- <bbtrack/>
- <bbtco muted="0" name="base2" pos="6912" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="7680" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="8448" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="9216" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="9984" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="6144" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="19968" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="20736" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="21504" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="22272" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="23040" color="4294945280" len="768" />
- <bbtco muted="0" name="base2" pos="23808" color="4294945280" len="768" />
- </track>
- <track muted="0" type="1" name="base3" >
- <bbtrack/>
- <bbtco muted="0" name="base3" pos="19584" color="4282417407" len="384" />
- </track>
- <track muted="0" type="1" name="beat1_1" >
- <bbtrack/>
- <bbtco muted="0" name="beat1_1" pos="1920" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="2304" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="2496" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="3072" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="4032" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="4224" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="4608" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="4800" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="5376" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="5760" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="10944" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="11328" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="11520" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="11904" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="12096" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="12672" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="13056" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="13248" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="13632" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="13824" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="14400" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="14784" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="14976" color="4291233210" len="192" />
- <bbtco muted="0" name="beat1_1" pos="3648" color="4291233210" len="192" />
- </track>
- <track muted="0" type="1" name="beat1_2" >
- <bbtrack/>
- <bbtco muted="0" name="beat1_2" pos="1536" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="2112" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="3264" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="3840" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="4416" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="4992" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="5568" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="11136" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="11712" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="12288" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="12864" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="13440" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="14016" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="14592" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="15168" color="4294912393" len="192" />
- <bbtco muted="0" name="beat1_2" pos="2688" color="4294912393" len="192" />
- </track>
- <track muted="0" type="1" name="beat1_3" >
- <bbtrack/>
- <bbtco muted="0" name="beat1_3" pos="1728" color="4294930170" len="192" />
- <bbtco muted="0" name="beat1_3" pos="3456" color="4294930170" len="192" />
- <bbtco muted="0" name="beat1_3" pos="5184" color="4294930170" len="192" />
- <bbtco muted="0" name="beat1_3" pos="10752" color="4294930170" len="192" />
- <bbtco muted="0" name="beat1_3" pos="12480" color="4294930170" len="192" />
- <bbtco muted="0" name="beat1_3" pos="14208" color="4294930170" len="192" />
- </track>
- <track muted="0" type="1" name="beat1_4" >
- <bbtrack/>
- <bbtco muted="0" name="beat4" pos="5952" color="4294890495" len="192" />
- </track>
- <track muted="0" type="1" name="beat1_1_2" >
- <bbtrack/>
- <bbtco muted="0" name="beat1_1_2" pos="192" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="576" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="768" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="1152" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="1344" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="15552" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="15936" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="16128" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="16512" color="4288453788" len="192" />
- <bbtco muted="0" name="beat1_1_2" pos="16704" color="4288453788" len="192" />
- </track>
- <track muted="0" type="1" name="beat1_2_2" >
- <bbtrack/>
- <bbtco muted="0" name="beat1_2_2" pos="384" color="4292664540" len="192" />
- <bbtco muted="0" name="beat1_2_2" pos="960" color="4292664540" len="192" />
- <bbtco muted="0" name="beat1_2_2" pos="15744" color="4292664540" len="192" />
- <bbtco muted="0" name="beat1_2_2" pos="16320" color="4292664540" len="192" />
- </track>
- <track muted="0" type="1" name="beat1_3_2" >
- <bbtrack/>
- <bbtco muted="0" name="beat1_3_2" pos="0" color="4284440415" len="192" />
- <bbtco muted="0" name="beat1_3_2" pos="15360" color="4284440415" len="192" />
- </track>
- <track muted="0" type="1" name="beat2_1" >
- <bbtrack/>
- <bbtco muted="0" name="beat2_1" pos="8064" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="8448" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="8832" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="9216" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="9600" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="9984" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="10368" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="7680" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="19968" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="20352" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="20736" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="21120" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="21504" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="21888" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="22272" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="22656" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="23040" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="23424" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="23808" color="4285520657" len="192" />
- <bbtco muted="0" name="beat2_1" pos="24192" color="4285520657" len="192" />
- </track>
- <track muted="0" type="1" name="beat2_2" >
- <bbtrack/>
- <bbtco muted="0" name="beat2_2" pos="7872" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="8640" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="9408" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="10176" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="20160" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="20928" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="21696" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="22464" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="23232" color="4281379517" len="192" />
- <bbtco muted="0" name="beat2_2" pos="24000" color="4281379517" len="192" />
- </track>
- <track muted="0" type="1" name="beat2_3" >
- <bbtrack/>
- <bbtco muted="0" name="beat2_1" pos="8256" color="4278228575" len="192" />
- <bbtco muted="0" name="beat2_3" pos="9792" color="4278228575" len="192" />
- <bbtco muted="0" name="beat2_3" pos="20544" color="4278228575" len="192" />
- <bbtco muted="0" name="beat2_3" pos="22080" color="4278228575" len="192" />
- <bbtco muted="0" name="beat2_3" pos="23616" color="4278228575" len="192" />
- </track>
- <track muted="0" type="1" name="beat2_4" >
- <bbtrack/>
- <bbtco muted="0" name="beat2_3" pos="9024" color="4284509096" len="192" />
- <bbtco muted="0" name="beat2_3" pos="10560" color="4284509096" len="192" />
- <bbtco muted="0" name="beat2_4" pos="21312" color="4284509096" len="192" />
- <bbtco muted="0" name="beat2_4" pos="22848" color="4284509096" len="192" />
- <bbtco muted="0" name="beat2_4" pos="24384" color="4284509096" len="192" />
- </track>
- <track muted="0" type="1" name="beat3_1" >
- <bbtrack/>
- </track>
- <track muted="0" type="1" name="beat4_1" >
- <bbtrack/>
- </track>
- </trackcontainer>
- <track muted="0" type="6" name="Automation track" >
- <automationtrack/>
- <automationpattern name="Tempo" pos="0" >
- <time value="140" pos="0" />
- <object id="2543119" />
- </automationpattern>
- <automationpattern name="Master volume" pos="0" >
- <time value="100" pos="0" />
- <object id="7302566" />
- </automationpattern>
- <automationpattern name="Master pitch" pos="0" >
- <time value="0" pos="0" />
- <object id="11881398" />
- </automationpattern>
- </track>
- <fxmixer>
- <fxchannel num="0" muted="0" volume="0.83" name="Master" >
- <fxchain numofeffects="2" enabled="1" >
- <effect key="AAAACQAAAAACAAAACgAAAAAsAEYAYQBzAHQAIABMAG8AbwBrAGEAaABlAGEAZAAgAGwAaQBtAGkAdABlAHIAAAALAAAAAAIAAAAoAGYAYQBzAHQATABvAG8AawBhAGgAZQBhAGQATABpAG0AaQB0AGUAcgAAADwAZgBhAHMAdABfAGwAbwBvAGsAYQBoAGUAYQBkAF8AbABpAG0AaQB0AGUAcgBfADEAOQAxADMALgBzAG8=" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port00="-3.2" port01="0" port02="248.75" syncmode="0" port02_numerator="4" ports="3" port02_denominator="4" />
- </effect>
- <effect key="AAAACQAAAAACAAAACgAAAABmAEMAKgAgAFAAbABhAHQAZQAyAHgAMgAgAC0AIABWAGUAcgBzAGEAdABpAGwAZQAgAHAAbABhAHQAZQAgAHIAZQB2AGUAcgBiACwAIABzAHQAZQByAGUAbwAgAGkAbgBwAHUAdABzAAAACwAAAAACAAAAEABQAGwAYQB0AGUAMgB4ADIAAAAOAGMAYQBwAHMALgBzAG8=" autoquit="1" gate="0" name="ladspaeffect" wet="0.64" on="1" >
- <ladspacontrols port02="0.50197" port03="0.3745" port04="0.249875" port05="0.25" ports="4" />
- </effect>
- </fxchain>
- </fxchannel>
- <fxchannel num="1" muted="0" volume="1" name="FX 1" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="2" muted="0" volume="1" name="FX 2" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="3" muted="0" volume="1" name="FX 3" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="4" muted="0" volume="1" name="FX 4" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="5" muted="0" volume="1" name="FX 5" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="6" muted="0" volume="1" name="FX 6" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="7" muted="0" volume="1" name="FX 7" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="8" muted="0" volume="1" name="FX 8" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="9" muted="0" volume="1" name="FX 9" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="10" muted="0" volume="1" name="FX 10" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="11" muted="0" volume="1" name="FX 11" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="12" muted="0" volume="1" name="FX 12" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="13" muted="0" volume="1" name="FX 13" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="14" muted="0" volume="1" name="FX 14" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="15" muted="0" volume="1" name="FX 15" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="16" muted="0" volume="1" name="FX 16" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="17" muted="0" volume="1" name="FX 17" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="18" muted="0" volume="1" name="FX 18" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="19" muted="0" volume="1" name="FX 19" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="20" muted="0" volume="1" name="FX 20" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="21" muted="0" volume="1" name="FX 21" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="22" muted="0" volume="1" name="FX 22" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="23" muted="0" volume="1" name="FX 23" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="24" muted="0" volume="1" name="FX 24" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="25" muted="0" volume="1" name="FX 25" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="26" muted="0" volume="1" name="FX 26" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="27" muted="0" volume="1" name="FX 27" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="28" muted="0" volume="1" name="FX 28" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="29" muted="0" volume="1" name="FX 29" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="30" muted="0" volume="1" name="FX 30" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="31" muted="0" volume="1" name="FX 31" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="32" muted="0" volume="1" name="FX 32" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="33" muted="0" volume="1" name="FX 33" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="34" muted="0" volume="1" name="FX 34" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="35" muted="0" volume="1" name="FX 35" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="36" muted="0" volume="1" name="FX 36" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="37" muted="0" volume="1" name="FX 37" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="38" muted="0" volume="1" name="FX 38" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="39" muted="0" volume="1" name="FX 39" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="40" muted="0" volume="1" name="FX 40" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="41" muted="0" volume="1" name="FX 41" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="42" muted="0" volume="1" name="FX 42" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="43" muted="0" volume="1" name="FX 43" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="44" muted="0" volume="1" name="FX 44" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="45" muted="0" volume="1" name="FX 45" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="46" muted="0" volume="1" name="FX 46" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="47" muted="0" volume="1" name="FX 47" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="48" muted="0" volume="1" name="FX 48" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="49" muted="0" volume="1" name="FX 49" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="50" muted="0" volume="1" name="FX 50" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="51" muted="0" volume="1" name="FX 51" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="52" muted="0" volume="1" name="FX 52" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="53" muted="0" volume="1" name="FX 53" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="54" muted="0" volume="1" name="FX 54" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="55" muted="0" volume="1" name="FX 55" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="56" muted="0" volume="1" name="FX 56" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="57" muted="0" volume="1" name="FX 57" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="58" muted="0" volume="1" name="FX 58" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="59" muted="0" volume="1" name="FX 59" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="60" muted="0" volume="1" name="FX 60" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="61" muted="0" volume="1" name="FX 61" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="62" muted="0" volume="1" name="FX 62" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="63" muted="0" volume="1" name="FX 63" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="64" muted="0" volume="1" name="FX 64" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- </fxmixer>
- <pianoroll width="640" x="0" y="0" height="480" visible="0" />
- <automationeditor width="740" x="0" y="0" height="480" visible="0" />
- <projectnotes width="300" x="524" y="216" height="200" visible="1" ><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" color:#ff0000;">piepmelodie berarbeiten. klingt zu poppig-kindisch-pseudo-traurig. muss nach abgrund klingen.</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><span style=" color:#ff0000;">base2 berarbeiten. muss mehr pumpen!</span></p></body></html>]]></projectnotes>
- <timeline lp1pos="192" lp0pos="0" lpstate="0" />
- <controllers/>
- </song>
-</multimedia-project>
diff --git a/data/projects/OldStuff/Siegel-SpeedTrack.mmp b/data/projects/OldStuff/Siegel-SpeedTrack.mmp
deleted file mode 100644
index 057a80f..0000000
--- a/data/projects/OldStuff/Siegel-SpeedTrack.mmp
+++ /dev/null
@@ -1,671 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.2.1-svn20070507" type="song" version="1.0" >
- <head masterpitch="0" bpm="140" mastervol="24" />
- <song>
- <trackcontainer width="680" x="0" y="6" height="300" type="songeditor" visible="1" >
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="raw_piano" >
- <trackcontainer width="691" x="8" y="-10" height="503" type="bbeditor" visible="0" >
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="436" basenote="57" vol="116" name="kick_hard01.ogg" tab="0" visible="0" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99919" sframe="0" amp="100" src="drums/kick_hard01.ogg" />
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arptime_numerator="1" arprange="1" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="0" chorddisabled="1" arpgate="100" arp="0" arptime="100" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="320" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="384" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="448" frozen="0" len="64" />
- <pattern steps="32" muted="0" type="0" name="kick_hard01.ogg" pos="512" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="64" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="80" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="96" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="112" len="-64" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_hard01.ogg" pos="576" frozen="0" len="64" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="8" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="24" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="60" len="-64" />
- </pattern>
- <pattern steps="32" muted="0" type="0" name="kick_hard01.ogg" pos="640" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="8" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="24" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="60" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="64" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="72" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="88" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="96" len="-64" />
- </pattern>
- <pattern steps="32" muted="0" type="0" name="kick_hard01.ogg" pos="704" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="8" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="24" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="60" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="64" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="72" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="88" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="96" len="-64" />
- </pattern>
- <pattern steps="32" muted="0" type="0" name="kick_hard01.ogg" pos="768" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="8" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="24" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="68" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="72" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="88" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="92" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="100" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="104" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="108" len="-64" />
- </pattern>
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="436" basenote="57" vol="18" name="snare07.ogg" tab="0" visible="0" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.9998" sframe="0" amp="500" src="drums/snare07.ogg" />
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arptime_numerator="1" arprange="1" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="0" chorddisabled="1" arpgate="100" arp="0" arptime="100" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="0" >
- <rack numofeffects="1" >
- <effect key="AAAAAgAAAAIAAAADAAAAJgBGAG8AbABkAG8AdgBlAHIAIABkAGkAcwB0AG8AcgB0AGkAbwBuAAAABAAAAAIAAAAQAGYAbwBsAGQAbwB2AGUAcgAAACAAZgBvAGwAZABvAHYAZQByAF8AMQAyADEAMwAuAHMAbwAA" autoquit="0" name="ladspaeffect" gate="0" wet="0.25" on="1" >
- <ladspacontrols port10="0.98" port11="0.16" port00="0.98" port01="0.16" port01link="1" port00link="1" link="1" ports="4" />
- </effect>
- </rack>
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="320" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="384" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="448" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="512" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="snare07.ogg" pos="576" frozen="0" len="64" >
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- </pattern>
- <pattern steps="32" muted="0" type="0" name="snare07.ogg" pos="640" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="80" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="112" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="120" len="-64" />
- </pattern>
- <pattern steps="32" muted="0" type="0" name="snare07.ogg" pos="704" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="80" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="112" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="120" len="-64" />
- </pattern>
- <pattern steps="32" muted="0" type="0" name="snare07.ogg" pos="768" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="36" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="56" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="60" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="80" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="96" len="-64" />
- </pattern>
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="436" basenote="57" vol="44" name="hihat_opened02.ogg" tab="0" visible="0" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99868" sframe="0" amp="100" src="drums/hihat_opened02.ogg" />
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arptime_numerator="1" arprange="1" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="0" chorddisabled="1" arpgate="100" arp="0" arptime="100" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="320" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="384" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="448" frozen="0" len="64" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="4" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="8" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="12" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="20" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="24" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="36" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="40" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="44" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="52" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="56" len="-64" />
- </pattern>
- <pattern steps="32" muted="0" type="0" name="hihat_opened02.ogg" pos="512" frozen="0" len="128" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="576" frozen="0" len="64" />
- <pattern steps="32" muted="0" type="0" name="hihat_opened02.ogg" pos="640" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="8" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="24" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="40" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="56" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="64" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="72" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="80" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="88" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="96" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="104" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="112" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="116" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="120" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="124" len="-64" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="704" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened02.ogg" pos="768" frozen="0" len="64" />
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="436" basenote="65" vol="56" name="FatCheese" tab="1" visible="0" >
- <tripleoscillator userwavefile1="" wavetype1="2" coarse1="-12" userwavefile2="" wavetype2="4" coarse2="-12" vol0="100" vol1="100" finel0="0" vol2="100" finel1="0" finel2="-25" modalgo1="2" stphdetun0="102" pan0="0" modalgo2="2" stphdetun1="0" pan1="0" stphdetun2="0" pan2="0" phoffset0="295" phoffset1="267" phoffset2="169" finer0="0" finer1="0" finer2="30" userwavefile0="" wavetype0="2" coarse0="-12" />
- <eldata fres="2.9" ftype="7" fcut="1394" fwet="1" >
- <elvol lspd_numerator="1" lpdel="0" amt="1" rel="0.037" ctlenvamt="0" latt="0" syncmode="0" sus="0" lspd_denominator="1" lspd="0.1553" att="0.037" pdel="0" lamt="0" dec="0.134" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lspd_numerator="1" lpdel="0" amt="0.58" rel="0" ctlenvamt="0" latt="0" syncmode="0" sus="0.998" lspd_denominator="1" lspd="0.53" att="0" pdel="0" lamt="0" dec="0.158" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.4849" att="0" pdel="0" lamt="0.23" dec="0.499" userwavefile="" x100="0" lshp="1" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arptime_numerator="1" arprange="1" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="3" chorddisabled="1" arpgate="30" arp="0" arptime="857" arpdir="2" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="1" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="1" name="ResoBass" pos="64" frozen="0" len="64" >
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="0" len="8" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="8" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="12" len="4" />
- <note tone="4" pan="0" oct="3" detuning="0" vol="100" pos="16" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="20" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="24" len="4" />
- <note tone="6" pan="0" oct="3" detuning="0" vol="100" pos="28" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="32" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="36" len="8" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="44" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="48" len="8" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="56" len="8" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="ResoBass" pos="128" frozen="0" len="128" >
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="0" len="8" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="8" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="12" len="4" />
- <note tone="4" pan="0" oct="3" detuning="0" vol="100" pos="16" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="20" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="24" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="28" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="32" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="36" len="8" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="44" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="48" len="16" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="64" len="8" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="72" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="76" len="4" />
- <note tone="4" pan="0" oct="3" detuning="0" vol="100" pos="80" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="84" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="88" len="4" />
- <note tone="11" pan="0" oct="2" detuning="0" vol="100" pos="92" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="96" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="100" len="8" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="108" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="112" len="8" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="120" len="4" />
- <note tone="1" pan="0" oct="3" detuning="0" vol="100" pos="124" len="4" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="FatCheese" pos="192" frozen="0" len="128" >
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="0" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="8" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="12" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="24" len="8" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="40" len="8" />
- <note tone="6" pan="0" oct="3" detuning="0" vol="100" pos="48" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="56" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="60" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="64" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="72" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="76" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="88" len="8" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="FatCheese" pos="256" frozen="0" len="128" >
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="0" len="8" />
- <note tone="7" pan="0" oct="3" detuning="0" vol="100" pos="8" len="4" />
- <note tone="7" pan="0" oct="3" detuning="0" vol="100" pos="12" len="4" />
- <note tone="7" pan="0" oct="3" detuning="0" vol="100" pos="24" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="40" len="8" />
- <note tone="8" pan="0" oct="3" detuning="0" vol="100" pos="48" len="8" />
- <note tone="7" pan="0" oct="3" detuning="0" vol="100" pos="56" len="4" />
- <note tone="7" pan="0" oct="3" detuning="0" vol="100" pos="60" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="64" len="8" />
- <note tone="7" pan="0" oct="3" detuning="0" vol="100" pos="72" len="4" />
- <note tone="7" pan="0" oct="3" detuning="0" vol="100" pos="76" len="4" />
- <note tone="7" pan="0" oct="3" detuning="0" vol="100" pos="88" len="8" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="FatCheese" pos="320" frozen="0" len="128" >
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="0" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="8" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="12" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="24" len="8" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="40" len="8" />
- <note tone="6" pan="0" oct="3" detuning="0" vol="100" pos="48" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="56" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="60" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="64" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="72" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="76" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="88" len="8" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="FatCheese" pos="384" frozen="0" len="128" >
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="0" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="8" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="12" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="24" len="8" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="40" len="8" />
- <note tone="6" pan="0" oct="3" detuning="0" vol="100" pos="48" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="56" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="60" len="4" />
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="64" len="8" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="72" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="76" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="88" len="8" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="448" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="512" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="576" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="640" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="704" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="FatCheese" pos="768" frozen="0" len="64" />
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="437" basenote="65" vol="61" name="Arpeggio 2" tab="2" visible="0" >
- <tripleoscillator userwavefile1="empty.wav" wavetype1="0" coarse1="0" userwavefile2="empty.wav" wavetype2="0" coarse2="12" vol0="100" vol1="100" finel0="-10" vol2="115" finel1="10" finel2="-2" modalgo1="0" stphdetun0="232" pan0="9" modalgo2="1" stphdetun1="110" pan1="-20" stphdetun2="109" pan2="10" phoffset0="87" phoffset1="280" phoffset2="82" finer0="13" finer1="16" finer2="4" userwavefile0="empty.wav" wavetype0="2" coarse0="-12" />
- <eldata fres="0.99" ftype="7" fcut="9660" fwet="1" >
- <elvol lspd_numerator="1" lpdel="0" amt="1" rel="0.165" ctlenvamt="0" latt="0" syncmode="0" sus="0" lspd_denominator="1" lspd="0.1" att="0.048" pdel="0" lamt="0" dec="0.998" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lspd_numerator="1" lpdel="0" amt="0.33" rel="0" ctlenvamt="0" latt="0" syncmode="0" sus="0.998" lspd_denominator="1" lspd="0.6634" att="0.017" pdel="0" lamt="0" dec="0.223" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0" ctlenvamt="0" latt="0" syncmode="1" sus="0.499" lspd_denominator="1" lspd="0.1714" att="0.499" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="2" arptime_numerator="1" arprange="3" arpdisabled="0" arptime_denominator="1" chord="0" syncmode="5" chorddisabled="1" arpgate="32" arp="0" arptime="214" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="1" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="Fat" pos="0" frozen="0" len="256" >
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="0" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="4" len="4" />
- <note tone="6" pan="0" oct="4" detuning="0" vol="100" pos="8" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="12" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="16" len="4" />
- <note tone="8" pan="0" oct="4" detuning="0" vol="100" pos="20" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="24" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="28" len="4" />
- <note tone="6" pan="0" oct="4" detuning="0" vol="100" pos="32" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="36" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="40" len="4" />
- <note tone="8" pan="0" oct="4" detuning="0" vol="100" pos="44" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="48" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="52" len="4" />
- <note tone="11" pan="0" oct="4" detuning="0" vol="100" pos="56" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="60" len="4" />
- <note tone="10" pan="0" oct="4" detuning="0" vol="100" pos="64" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="68" len="4" />
- <note tone="6" pan="0" oct="4" detuning="0" vol="100" pos="72" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="76" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="80" len="4" />
- <note tone="8" pan="0" oct="4" detuning="0" vol="100" pos="84" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="88" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="92" len="4" />
- <note tone="6" pan="0" oct="4" detuning="0" vol="100" pos="96" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="100" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="104" len="4" />
- <note tone="8" pan="0" oct="4" detuning="0" vol="100" pos="108" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="112" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="116" len="4" />
- <note tone="10" pan="0" oct="4" detuning="0" vol="100" pos="120" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="124" len="4" />
- <note tone="11" pan="0" oct="4" detuning="0" vol="100" pos="128" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="132" len="4" />
- <note tone="6" pan="0" oct="4" detuning="0" vol="100" pos="136" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="140" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="144" len="4" />
- <note tone="8" pan="0" oct="4" detuning="0" vol="100" pos="148" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="152" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="156" len="4" />
- <note tone="6" pan="0" oct="4" detuning="0" vol="100" pos="160" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="164" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="168" len="4" />
- <note tone="8" pan="0" oct="4" detuning="0" vol="100" pos="172" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="176" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="180" len="4" />
- <note tone="11" pan="0" oct="4" detuning="0" vol="100" pos="184" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="188" len="4" />
- <note tone="10" pan="0" oct="4" detuning="0" vol="100" pos="192" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="196" len="4" />
- <note tone="6" pan="0" oct="4" detuning="0" vol="100" pos="200" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="204" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="208" len="4" />
- <note tone="8" pan="0" oct="4" detuning="0" vol="100" pos="212" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="216" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="220" len="4" />
- <note tone="6" pan="0" oct="4" detuning="0" vol="100" pos="224" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="228" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="232" len="4" />
- <note tone="8" pan="0" oct="4" detuning="0" vol="100" pos="236" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="240" len="4" />
- <note tone="3" pan="0" oct="4" detuning="0" vol="100" pos="244" len="4" />
- <note tone="10" pan="0" oct="4" detuning="0" vol="100" pos="248" len="4" />
- <note tone="11" pan="0" oct="4" detuning="0" vol="100" pos="252" len="4" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="320" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="384" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="448" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="512" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="576" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="640" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="704" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="768" frozen="0" len="64" />
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="437" basenote="65" vol="69" name="Arpeggio 2" tab="2" visible="0" >
- <tripleoscillator userwavefile1="empty.wav" wavetype1="0" coarse1="0" userwavefile2="empty.wav" wavetype2="0" coarse2="12" vol0="100" vol1="100" finel0="-10" vol2="115" finel1="10" finel2="-2" modalgo1="0" stphdetun0="232" pan0="9" modalgo2="1" stphdetun1="110" pan1="-20" stphdetun2="109" pan2="10" phoffset0="87" phoffset1="280" phoffset2="82" finer0="13" finer1="16" finer2="4" userwavefile0="empty.wav" wavetype0="2" coarse0="-12" />
- <eldata fres="0.99" ftype="7" fcut="9660" fwet="1" >
- <elvol lspd_numerator="1" lpdel="0" amt="1" rel="0.165" ctlenvamt="0" latt="0" syncmode="0" sus="0" lspd_denominator="1" lspd="0.1" att="0.048" pdel="0" lamt="0" dec="0.998" userwavefile="" x100="0" lshp="0" hold="0" />
- <elcut lspd_numerator="1" lpdel="0" amt="0.33" rel="0" ctlenvamt="0" latt="0" syncmode="0" sus="0.998" lspd_denominator="1" lspd="0.6634" att="0.017" pdel="0" lamt="0" dec="0.223" userwavefile="" x100="0" lshp="0" hold="0" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0" ctlenvamt="0" latt="0" syncmode="1" sus="0.499" lspd_denominator="1" lspd="0.1714" att="0.499" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="2" arptime_numerator="1" arprange="3" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="5" chorddisabled="1" arpgate="32" arp="0" arptime="214" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="1" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Fat" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="1" name="Arpeggio 2" pos="320" frozen="0" len="128" >
- <note tone="3" pan="0" oct="3" detuning="0" vol="100" pos="96" len="8" />
- <note tone="0" pan="0" oct="4" detuning="0" vol="100" pos="104" len="4" />
- <note tone="0" pan="0" oct="4" detuning="0" vol="100" pos="108" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="112" len="8" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Arpeggio 2" pos="384" frozen="0" len="128" >
- <note tone="1" pan="0" oct="4" detuning="0" vol="100" pos="96" len="8" />
- <note tone="0" pan="0" oct="4" detuning="0" vol="100" pos="104" len="4" />
- <note tone="0" pan="0" oct="4" detuning="0" vol="100" pos="108" len="4" />
- <note tone="5" pan="0" oct="3" detuning="0" vol="100" pos="112" len="8" />
- <note tone="0" pan="0" oct="4" detuning="0" vol="100" pos="120" len="8" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="448" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="512" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="576" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="640" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="704" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="Arpeggio 2" pos="768" frozen="0" len="64" />
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="436" basenote="57" vol="70" name="ride01.ogg" tab="0" visible="0" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99978" sframe="0" amp="100" src="drums/ride01.ogg" />
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elcut lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.499" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.499" userwavefile="" x100="0" lshp="0" hold="0.499" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arptime_numerator="1" arprange="1" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="0" chorddisabled="1" arpgate="100" arp="0" arptime="100" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="320" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="384" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="448" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="512" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="ride01.ogg" pos="576" frozen="0" len="64" />
- <pattern steps="32" muted="0" type="0" name="hihat_opened02.ogg" pos="640" frozen="0" len="128" />
- <pattern steps="32" muted="0" type="0" name="hihat_opened02.ogg" pos="704" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="8" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="24" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="40" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="56" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="64" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="72" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="80" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="88" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="96" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="104" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="112" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="116" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="120" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="124" len="-64" />
- </pattern>
- <pattern steps="32" muted="0" type="0" name="hihat_opened02.ogg" pos="768" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="0" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="8" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="16" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="24" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="32" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="40" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="48" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="56" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="80" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="96" len="-64" />
- </pattern>
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="436" basenote="57" vol="130" name="crash02.ogg" tab="0" visible="0" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99995" sframe="0" amp="100" src="drums/crash02.ogg" />
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- <elcut lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arptime_numerator="1" arprange="1" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="0" chorddisabled="1" arpgate="100" arp="0" arptime="100" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="320" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="384" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="448" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="512" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="576" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="640" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="crash02.ogg" pos="704" frozen="0" len="64" />
- <pattern steps="32" muted="0" type="0" name="crash02.ogg" pos="768" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="112" len="-64" />
- </pattern>
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="436" basenote="57" vol="172" name="tom_low01.ogg" tab="0" visible="0" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99971" sframe="0" amp="100" src="drums/tom_low01.ogg" />
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- <elcut lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arptime_numerator="1" arprange="1" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="0" chorddisabled="1" arpgate="100" arp="0" arptime="100" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="320" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="384" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="448" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="512" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="576" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="640" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_low01.ogg" pos="704" frozen="0" len="64" />
- <pattern steps="32" muted="0" type="0" name="tom_low01.ogg" pos="768" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="68" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="92" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="100" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="108" len="-64" />
- </pattern>
- </track>
- <track muted="0" height="32" type="0" >
- <instrumenttrack width="250" x="0" surpos-x="0" y="0" surpos-y="0" fxch="0" height="436" basenote="57" vol="172" name="tom_mid01.ogg" tab="0" visible="0" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99965" sframe="0" amp="100" src="drums/tom_mid01.ogg" />
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- <elcut lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- <elres lspd_numerator="1" lpdel="0" amt="0" rel="0.1" ctlenvamt="0" latt="0" syncmode="0" sus="0.5" lspd_denominator="1" lspd="0.1" att="0" pdel="0" lamt="0" dec="0.5" userwavefile="" x100="0" lshp="0" hold="0.5" />
- </eldata>
- <arpandchords arpmode="0" chordrange="1" arptime_numerator="1" arprange="1" arpdisabled="1" arptime_denominator="1" chord="0" syncmode="0" chorddisabled="1" arpgate="100" arp="0" arptime="100" arpdir="0" />
- <midi defvelout="0" inputchannel="0" outputchannel="1" receive="0" send="0" defvelin="0" />
- <fx fxdisabled="1" >
- <rack numofeffects="0" />
- </fx>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="0" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="64" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="128" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="192" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="256" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="320" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="384" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="448" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="512" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="576" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="640" frozen="0" len="64" />
- <pattern steps="16" muted="0" type="0" name="tom_mid01.ogg" pos="704" frozen="0" len="64" />
- <pattern steps="32" muted="0" type="0" name="tom_mid01.ogg" pos="768" frozen="0" len="128" >
- <note tone="9" pan="0" oct="4" vol="100" pos="72" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="88" len="-64" />
- <note tone="9" pan="0" oct="4" vol="100" pos="104" len="-64" />
- </pattern>
- </track>
- </trackcontainer>
- </bbtrack>
- <bbtco muted="0" name="raw_piano" color="4282897877" pos="512" len="1024" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="bass" />
- <bbtco muted="0" name="bass" color="4291857152" pos="0" len="256" />
- <bbtco muted="0" name="bass" color="4291857152" pos="384" len="384" />
- <bbtco muted="0" name="bass" color="4291857152" pos="896" len="384" />
- <bbtco muted="0" name="bass" color="4291857152" pos="1408" len="128" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="bass2" />
- <bbtco muted="0" name="bass2" color="4291493888" pos="256" len="128" />
- <bbtco muted="0" name="bass2" color="4291493888" pos="768" len="128" />
- <bbtco muted="0" name="bass2" color="4291493888" pos="1280" len="128" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="raw_p-0" />
- <bbtco muted="0" name="raw_p-0" color="4282417407" pos="1536" len="512" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="raw_p-0_1" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="raw_p-1" />
- <bbtco muted="0" name="raw_p-1" color="4282417407" pos="2048" len="256" />
- <bbtco muted="0" name="raw_p-1" color="4282417407" pos="2560" len="128" />
- <bbtco muted="0" name="raw_p-1" color="4282417407" pos="2816" len="128" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="raw_p-2" />
- <bbtco muted="0" name="raw_p-2" color="4282417407" pos="2304" len="256" />
- <bbtco muted="0" name="raw_p-2" color="4282417407" pos="2688" len="128" />
- <bbtco muted="0" name="raw_p-2" color="4282417407" pos="2944" len="128" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="hihat" />
- <bbtco muted="0" name="hihat" color="4294508477" pos="128" len="1920" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="basehammer" />
- <bbtco muted="0" name="basehammer" color="4294967167" pos="1792" len="256" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="drums_basic" />
- <bbtco muted="0" name="drums_basic" color="4290098432" pos="512" len="1024" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="drums_basic2" />
- <bbtco muted="0" name="drums_basic2" color="4287400960" pos="2048" len="512" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="drums_basic3" />
- <bbtco muted="0" name="drums_basic3" color="4283387648" pos="2560" len="512" />
- </track>
- <track muted="0" height="32" type="1" >
- <bbtrack icon="" name="drums_basic4" />
- <bbtco muted="0" name="drums_basic4" color="4279834880" pos="3072" len="128" />
- </track>
- </trackcontainer>
- <pianoroll width="639" x="51" y="40" height="479" visible="0" />
- <automation-editor width="640" x="0" y="4" height="480" visible="0" />
- <projectnotes width="300" x="0" y="201" height="200" visible="0" ><![CDATA[]]></projectnotes>
- <timeline lp1pos="128" lp0pos="0" lpstate="0" />
- </song>
-</multimedia-project>
diff --git a/data/projects/OldStuff/Silva-ElvesCall.mmp b/data/projects/OldStuff/Silva-ElvesCall.mmp
deleted file mode 100644
index d99961a..0000000
--- a/data/projects/OldStuff/Silva-ElvesCall.mmp
+++ /dev/null
@@ -1,890 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="song" >
- <head timesig_numerator="4" mastervol="100" timesig_denominator="4" bpm="80" masterpitch="0" />
- <song>
- <trackcontainer type="song" >
- <track muted="0" type="0" name="Default" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="0" stphdetun2="0" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="1" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- </track>
- <track muted="0" type="2" name="Sample track" >
- <sampletrack vol="100" >
- <fxchain numofeffects="0" enabled="0" />
- </sampletrack>
- <sampletco muted="0" pos="3840" len="384" src="sweep.ogg" />
- <sampletco muted="0" pos="4224" len="384" src="fmswoop2.ogg" />
- </track>
- <track muted="0" type="1" name="Beat/Bassline 0" >
- <bbtrack>
- <trackcontainer type="bbtrackcontainer" >
- <track muted="0" type="0" name="kicka" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="95" vol="74" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="30" userwavefile1="" finer1="0" userwavefile2="" finer2="24" coarse0="-12" coarse1="-24" coarse2="-12" finel0="-14" finel1="0" modalgo1="1" modalgo2="0" finel2="-6" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="0" stphdetun2="0" wavetype1="0" wavetype2="4" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="8.55" ftype="0" fcut="20" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.171" sus="0.497" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0.77" syncmode="4" latt="0" rel="0.344" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0375" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.264" lamt="0" syncmode="0" latt="0" rel="0.397" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="kicka" pos="0" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="156" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kicka" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="1344" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kicka" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kicka" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Default" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="6" >
- <instrument name="bitinvader" >
- <bitinvader version="0.1" sampleLength="128" normalize="1" sampleShape="AAAAADD7SD02vcg9g0AWPsLFRz7Nz3g+MaCUPtR8rD4W78M+gOjaPupa8T49nAM/2jkOP8B/GD+aZyI/SusrP/MENT/6rj0/A+RFPwKfTT8y21Q/G5RbP5jFYT/Ya2c/XoNsPwgJcT8L+nQ/+FN4P78Uez+sOn0/bcR+Pw+xfz8AAIA/D7F/P23Efj+sOn0/vhR7P/hTeD8K+nQ/CAlxP16DbD/Ya2c/l8VhPxqUWz8w21Q/Ap9NPwTkRT/4rj0/8wQ1P0jrKz+ZZyI/vX8YP9k5Dj89nAM/5lrxPn/o2j4Q78M+0nysPjOglD7Fz3g+wcVHPnpAFj4wvcg9/fpIPS69u7Ms+0i9R73IvYVAFr7NxUe+0M94vjiglL7XfKy+Fe/DvoXo2r7rWvG+P5 [...]
- </instrument>
- <eldata fres="6.08" ftype="4" fcut="3680" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.514" lamt="0.305" syncmode="6" latt="0" rel="0.998" sus="0.726" amt="0.44" x100="0" att="0.388" lpdel="0" hold="0.008" lshp="0" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.261" lamt="1" syncmode="7" latt="0" rel="0.772" sus="0.869" amt="1" x100="1" att="0.606" lpdel="0.143" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="3" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Default" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Default" pos="768" len="384" frozen="0" >
- <note pan="0" key="59" vol="100" pos="0" len="72" />
- <note pan="0" key="66" vol="100" pos="72" len="48" />
- <note pan="0" key="62" vol="100" pos="120" len="24" />
- <note pan="0" key="73" vol="100" pos="144" len="96" />
- <note pan="0" key="73" vol="100" pos="264" len="12" />
- <note pan="0" key="74" vol="100" pos="309" len="15" />
- <note pan="0" key="66" vol="100" pos="336" len="12" />
- <note pan="0" key="62" vol="100" pos="360" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Default" pos="960" len="384" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="48" />
- <note pan="0" key="56" vol="100" pos="48" len="48" />
- <note pan="0" key="52" vol="100" pos="96" len="48" />
- <note pan="0" key="50" vol="100" pos="144" len="48" />
- <note pan="0" key="57" vol="100" pos="192" len="48" />
- <note pan="0" key="56" vol="100" pos="240" len="48" />
- <note pan="0" key="59" vol="100" pos="288" len="48" />
- <note pan="0" key="54" vol="100" pos="336" len="48" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Default" pos="1152" len="768" frozen="0" >
- <note pan="0" key="59" vol="100" pos="0" len="192" />
- <note pan="0" key="41" vol="100" pos="192" len="96" />
- <note pan="0" key="55" vol="100" pos="288" len="96" />
- <note pan="0" key="54" vol="100" pos="384" len="96" />
- <note pan="0" key="49" vol="100" pos="480" len="144" />
- <note pan="0" key="50" vol="100" pos="648" len="72" />
- <note pan="0" key="52" vol="100" pos="720" len="48" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Default" pos="1536" len="384" frozen="0" >
- <note pan="0" key="59" vol="62" pos="0" len="12" />
- <note pan="0" key="67" vol="62" pos="48" len="12" />
- <note pan="0" key="46" vol="100" pos="192" len="12" />
- <note pan="0" key="54" vol="100" pos="240" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Default" pos="1728" len="768" frozen="0" >
- <note pan="0" key="59" vol="100" pos="0" len="96" />
- <note pan="0" key="66" vol="100" pos="96" len="96" />
- <note pan="0" key="64" vol="100" pos="192" len="96" />
- <note pan="0" key="67" vol="100" pos="288" len="96" />
- <note pan="0" key="66" vol="100" pos="384" len="96" />
- <note pan="0" key="71" vol="100" pos="480" len="96" />
- <note pan="0" key="74" vol="100" pos="576" len="96" />
- <note pan="0" key="73" vol="100" pos="672" len="96" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Default" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="84" vol="74" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="30" userwavefile1="" finer1="0" userwavefile2="" finer2="24" coarse0="11" coarse1="-13" coarse2="8" finel0="-14" finel1="0" modalgo1="1" modalgo2="1" finel2="-6" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="0" stphdetun2="0" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="8.24" ftype="0" fcut="1760" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.119" sus="0.476" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.179" lamt="0.77" syncmode="4" latt="0" rel="0.372" sus="0.716" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0375" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Default" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="62" vol="100" pos="24" len="-192" />
- <note pan="0" key="39" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Default" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="57" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="74" userwavefile0="" finer0="28" userwavefile1="" finer1="6" userwavefile2="" finer2="0" coarse0="-24" coarse1="-24" coarse2="-12" finel0="-28" finel1="-6" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="184" pan2="0" stphdetun1="183" wavetype0="6" stphdetun2="0" wavetype1="6" wavetype2="6" vol0="100" vol1="100" phoffset0="180" phoffset1="49" vol2="100" />
- </instrument>
- <eldata fres="1.68" ftype="0" fcut="1760" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.379" sus="0.68" amt="0.745" x100="0" att="0" lpdel="0" hold="0.012" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Default" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="bell" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="72" vol="143" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="74" userwavefile0="" finer0="28" userwavefile1="" finer1="6" userwavefile2="" finer2="0" coarse0="-16" coarse1="22" coarse2="17" finel0="-28" finel1="-6" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="184" pan2="0" stphdetun1="183" wavetype0="0" stphdetun2="0" wavetype1="0" wavetype2="0" vol0="100" vol1="100" phoffset0="180" phoffset1="49" vol2="40" />
- </instrument>
- <eldata fres="0.01" ftype="1" fcut="320" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.18" lamt="0" syncmode="0" latt="0" rel="0.301" sus="0.039" amt="1" x100="0" att="0.04" lpdel="0" hold="0.012" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.202" lamt="0" syncmode="0" latt="0" rel="0.358" sus="0.906" amt="1" x100="0" att="0.123" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="bell" pos="0" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="59" vol="100" pos="36" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="55" vol="100" pos="132" len="-192" />
- <note pan="0" key="52" vol="100" pos="156" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="bell" pos="192" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="54" vol="100" pos="108" len="12" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="bell" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bell" pos="576" len="192" frozen="0" >
- <note pan="0" key="55" vol="80" pos="84" len="-192" />
- <note pan="0" key="54" vol="82" pos="108" len="-192" />
- <note pan="0" key="59" vol="62" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="bell" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bell" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bell" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bell" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bell" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bell" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bell" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bell" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="hihat" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="60" vol="7" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="1" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="1" wavetype2="6" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="10" ftype="1" fcut="8480" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.089" sus="0.499" amt="0.78" x100="0" att="0.008" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="hihat" pos="0" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat" pos="192" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat" pos="576" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="5" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat" pos="1344" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Jupiter" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="94" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="80" userwavefile0="" finer0="0" userwavefile1="" finer1="13" userwavefile2="samples/shapes/smooth_inv_saw.ogg" finer2="0" coarse0="0" coarse1="0" coarse2="12" finel0="0" finel1="-16" modalgo1="1" modalgo2="1" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="121" pan2="0" stphdetun1="259" wavetype0="4" stphdetun2="92" wavetype1="0" wavetype2="1" vol0="40" vol1="42" phoffset0="0" phoffset1="266" vol2="31" />
- </instrument>
- <eldata fres="1.65" ftype="1" fcut="480" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.36" lamt="0.065" syncmode="5" latt="0" rel="0.49" sus="0.726" amt="1" x100="0" att="0.349" lpdel="0" hold="0" lshp="0" lspd="0.0188" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.303" lamt="0" syncmode="4" latt="0" rel="0.731" sus="0.666" amt="0.495" x100="0" att="0.578" lpdel="0" hold="0" lshp="0" lspd="0.0375" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="3" chord-enabled="0" />
- <arpeggiator arptime="188" arprange="1" arptime_denominator="1" syncmode="6" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="71" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Jupiter" pos="192" len="192" frozen="0" >
- <note pan="0" key="66" vol="100" pos="0" len="144" />
- <note pan="0" key="50" vol="100" pos="0" len="144" />
- <note pan="0" key="35" vol="186" pos="0" len="144" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Jupiter" pos="384" len="192" frozen="0" >
- <note pan="0" key="66" vol="100" pos="0" len="48" />
- <note pan="0" key="18" vol="100" pos="0" len="96" />
- <note pan="0" key="61" vol="100" pos="48" len="48" />
- <note pan="0" key="54" vol="100" pos="96" len="96" />
- <note pan="0" key="62" vol="100" pos="96" len="96" />
- <note pan="0" key="12" vol="100" pos="96" len="96" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Jupiter" pos="1152" len="768" frozen="0" >
- <note pan="0" key="83" vol="100" pos="0" len="192" />
- <note pan="0" key="74" vol="100" pos="0" len="192" />
- <note pan="0" key="73" vol="100" pos="192" len="192" />
- <note pan="0" key="85" vol="100" pos="192" len="192" />
- <note pan="0" key="86" vol="100" pos="384" len="192" />
- <note pan="0" key="74" vol="100" pos="384" len="192" />
- <note pan="0" key="85" vol="100" pos="576" len="192" />
- <note pan="0" key="73" vol="100" pos="576" len="192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Default" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="19" >
- <instrument name="vibedstrings" >
- <vibedstrings stiffness0="0" impulse0="0" active0="1" active1="0" active2="0" version="0.1" active3="0" active4="0" volume0="100" active5="0" length0="1" active6="0" active7="0" active8="0" pickup0="0.05" pick0="0" pan0="0" slap0="0" detune0="0" octave0="2" graph0="AACAvwAAfL8AAHi/AAB0vwAAcL8AAGy/AABovwAAZL8AAGC/AABcvwAAWL8AAFS/AABQvwAATL8AAEi/AABEvwAAQL8AADy/AAA4vwAANL8AADC/AAAsvwAAKL8AACS/AAAgvwAAHL8AABi/AAAUvwAAEL8AAAy/AAAIvwAABL8AAAC/AAD4vgAA8L4AAOi+AADgvgAA2L4AANC+ [...]
- </instrument>
- <eldata fres="0.55" ftype="1" fcut="480" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.555" sus="0" amt="1" x100="0" att="0.158" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0.499" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0.499" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="160" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="23" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Default" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Default" pos="1536" len="384" frozen="0" >
- <note pan="0" key="69" vol="40" pos="0" len="3" />
- <note pan="0" key="55" vol="100" pos="0" len="96" />
- <note pan="0" key="69" vol="100" pos="12" len="3" />
- <note pan="0" key="69" vol="100" pos="24" len="3" />
- <note pan="0" key="71" vol="100" pos="36" len="3" />
- <note pan="0" key="67" vol="100" pos="48" len="3" />
- <note pan="0" key="83" vol="100" pos="96" len="12" />
- <note pan="0" key="52" vol="64" pos="96" len="24" />
- <note pan="0" key="54" vol="58" pos="192" len="96" />
- <note pan="0" key="58" vol="50" pos="288" len="96" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Default" pos="1728" len="768" frozen="0" >
- <note pan="0" key="59" vol="100" pos="0" len="48" />
- <note pan="0" key="54" vol="100" pos="48" len="48" />
- <note pan="0" key="57" vol="100" pos="96" len="48" />
- <note pan="0" key="52" vol="100" pos="144" len="48" />
- <note pan="0" key="66" vol="100" pos="192" len="48" />
- <note pan="0" key="61" vol="100" pos="240" len="48" />
- <note pan="0" key="64" vol="100" pos="288" len="48" />
- <note pan="0" key="59" vol="100" pos="336" len="48" />
- <note pan="0" key="58" vol="100" pos="381" len="48" />
- <note pan="0" key="66" vol="100" pos="432" len="48" />
- <note pan="0" key="67" vol="100" pos="480" len="48" />
- <note pan="0" key="66" vol="100" pos="528" len="48" />
- <note pan="0" key="71" vol="100" pos="576" len="48" />
- <note pan="0" key="66" vol="100" pos="624" len="48" />
- <note pan="0" key="70" vol="100" pos="672" len="48" />
- <note pan="0" key="78" vol="100" pos="720" len="48" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="snare" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="98" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="74" userwavefile0="" finer0="28" userwavefile1="" finer1="6" userwavefile2="" finer2="0" coarse0="-24" coarse1="-24" coarse2="-12" finel0="-28" finel1="-6" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="184" pan2="0" stphdetun1="183" wavetype0="6" stphdetun2="0" wavetype1="6" wavetype2="6" vol0="100" vol1="100" phoffset0="180" phoffset1="49" vol2="100" />
- </instrument>
- <eldata fres="3.28" ftype="0" fcut="1760" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.18" sus="0.448" amt="0.745" x100="0" att="0" lpdel="0" hold="0.012" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="snare" pos="0" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare" pos="1920" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="snare" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="bass" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="75" vol="117" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="-12" coarse1="0" coarse2="12" finel0="0" finel1="0" modalgo1="2" modalgo2="1" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="0" stphdetun2="0" wavetype1="1" wavetype2="0" vol0="38" vol1="48" phoffset0="0" phoffset1="0" vol2="40" />
- </instrument>
- <eldata fres="0.01" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.048" lamt="0" syncmode="0" latt="0" rel="0.119" sus="0.395" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="5" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.0188" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="bass" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="bass" pos="960" len="384" frozen="0" >
- <note pan="0" key="41" vol="100" pos="0" len="12" />
- <note pan="0" key="41" vol="100" pos="48" len="12" />
- <note pan="0" key="43" vol="100" pos="60" len="12" />
- <note pan="0" key="44" vol="100" pos="96" len="12" />
- <note pan="0" key="39" vol="100" pos="132" len="36" />
- <note pan="0" key="41" vol="100" pos="192" len="12" />
- <note pan="0" key="41" vol="100" pos="240" len="12" />
- <note pan="0" key="43" vol="100" pos="252" len="12" />
- <note pan="0" key="46" vol="100" pos="288" len="12" />
- <note pan="0" key="34" vol="100" pos="324" len="36" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="bass" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="belltone" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="55" vol="29" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="74" userwavefile0="" finer0="0" userwavefile1="" finer1="6" userwavefile2="" finer2="0" coarse0="-12" coarse1="14" coarse2="-14" finel0="0" finel1="-6" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="184" pan2="0" stphdetun1="183" wavetype0="1" stphdetun2="0" wavetype1="5" wavetype2="0" vol0="100" vol1="70" phoffset0="180" phoffset1="49" vol2="30" />
- </instrument>
- <eldata fres="0.35" ftype="3" fcut="480" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.275" sus="0.448" amt="1" x100="0" att="0" lpdel="0" hold="0.012" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="94" arprange="2" arptime_denominator="1" syncmode="7" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="belltone" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="belltone" pos="960" len="192" frozen="0" >
- <note pan="0" key="42" vol="12" pos="0" len="6" />
- <note pan="0" key="45" vol="10" pos="12" len="6" />
- <note pan="0" key="50" vol="14" pos="24" len="6" />
- <note pan="0" key="54" vol="16" pos="48" len="6" />
- <note pan="0" key="57" vol="18" pos="60" len="6" />
- <note pan="0" key="61" vol="18" pos="72" len="6" />
- <note pan="0" key="64" vol="18" pos="84" len="3" />
- <note pan="0" key="66" vol="18" pos="96" len="3" />
- <note pan="0" key="73" vol="18" pos="108" len="3" />
- <note pan="0" key="74" vol="16" pos="120" len="3" />
- <note pan="0" key="78" vol="20" pos="132" len="3" />
- <note pan="0" key="81" vol="16" pos="144" len="3" />
- <note pan="0" key="84" vol="20" pos="156" len="3" />
- <note pan="0" key="85" vol="20" pos="168" len="3" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="belltone" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="belltone" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Default" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="98" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="74" userwavefile0="" finer0="28" userwavefile1="" finer1="6" userwavefile2="" finer2="0" coarse0="-24" coarse1="-24" coarse2="-12" finel0="-28" finel1="-6" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="184" pan2="0" stphdetun1="183" wavetype0="6" stphdetun2="0" wavetype1="6" wavetype2="6" vol0="100" vol1="100" phoffset0="180" phoffset1="49" vol2="100" />
- </instrument>
- <eldata fres="1.68" ftype="0" fcut="1600" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="0" latt="0" rel="0.231" sus="0.578" amt="0.745" x100="0" att="0" lpdel="0" hold="0.012" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Default" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1344" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2112" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="bass" >
- <instrumenttrack pan="7" fxch="1" pitch="0" basenote="96" vol="59" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="0" finel2="0" pan0="7" modalgo3="0" pan1="5" stphdetun0="0" pan2="9" stphdetun1="0" wavetype0="4" stphdetun2="0" wavetype1="3" wavetype2="3" vol0="32" vol1="33" phoffset0="0" phoffset1="15" vol2="34" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="800" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.123" lamt="0" syncmode="0" latt="0" rel="0.435" sus="0.527" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.104" lamt="0" syncmode="0" latt="0" rel="0.23" sus="0.717" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="0" />
- <arpeggiator arptime="188" arprange="1" arptime_denominator="1" syncmode="6" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="11" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="bass" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="bass" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="bass" pos="1920" len="192" frozen="0" >
- <note pan="0" key="62" vol="100" pos="0" len="-192" />
- <note pan="0" key="62" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- <note pan="0" key="57" vol="100" pos="108" len="18" />
- <note pan="0" key="62" vol="100" pos="132" len="-192" />
- <note pan="0" key="65" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="bass" pos="2112" len="192" frozen="0" />
- </track>
- </trackcontainer>
- </bbtrack>
- <bbtco muted="0" name="Beat/Bassline 0" pos="1536" color="4282417407" len="756" />
- <bbtco muted="0" name="Beat/Bassline 0" pos="3072" color="4282417407" len="1536" />
- <bbtco muted="0" name="Beat/Bassline 0" pos="9984" color="4282417407" len="1536" />
- </track>
- <track muted="0" type="1" name="Beat/Bassline 1" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 1" pos="0" color="4282417407" len="384" />
- <bbtco muted="0" name="Beat/Bassline 1" pos="6144" color="4282417407" len="372" />
- <bbtco muted="0" name="Beat/Bassline 1" pos="9600" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="Beat/Bassline 2" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 2" pos="384" color="4282417407" len="384" />
- <bbtco muted="0" name="Beat/Bassline 2" pos="6528" color="4282417407" len="384" />
- </track>
- <track muted="0" type="1" name="rythm1" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 3" pos="0" color="4282417407" len="1536" />
- <bbtco muted="0" name="rythm1" pos="2304" color="4282417407" len="768" />
- <bbtco muted="0" name="rythm1" pos="6144" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="elfcall" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 4" pos="768" color="4282417407" len="768" />
- <bbtco muted="0" name="Beat/Bassline 4" pos="3072" color="4282417407" len="1536" />
- <bbtco muted="0" name="Beat/Bassline 4" pos="7680" color="4282417407" len="384" />
- <bbtco muted="0" name="elfcall" pos="8832" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="Beat/Bassline 5" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 5" pos="1536" color="4282417407" len="768" />
- <bbtco muted="0" name="Beat/Bassline 5" pos="8064" color="4282417407" len="768" />
- <bbtco muted="0" name="Beat/Bassline 5" pos="9984" color="4282417407" len="1524" />
- </track>
- <track muted="0" type="1" name="Beat/Bassline 6" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 6" pos="2304" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="drutar" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 7" pos="4608" color="4282417407" len="1536" />
- <bbtco muted="0" name="sitar" pos="6912" color="4282417407" len="768" />
- <bbtco muted="0" name="sitar" pos="8064" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="sitar1" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 8" pos="4608" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="sitar2" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 9" pos="5376" color="4282417407" len="768" />
- <bbtco muted="0" name="Beat/Bassline 9" pos="6912" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="bassnare" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Bassline 10" pos="5376" color="4282417407" len="768" />
- <bbtco muted="0" name="Beat/Bassline 10" pos="6912" color="4282417407" len="768" />
- </track>
- <track muted="0" type="1" name="Beat/Bassline 11" >
- <bbtrack/>
- </track>
- </trackcontainer>
- <track muted="0" type="6" name="Automation track" >
- <automationtrack/>
- <automationpattern name="Tempo" pos="0" >
- <time value="140" pos="0" />
- <object id="7238917" />
- </automationpattern>
- <automationpattern name="Master volume" pos="0" >
- <time value="100" pos="0" />
- <object id="10414097" />
- </automationpattern>
- <automationpattern name="Master pitch" pos="0" >
- <time value="0" pos="0" />
- <object id="9026037" />
- </automationpattern>
- </track>
- <fxmixer>
- <fxchannel num="0" muted="0" volume="1" name="Master" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="1" muted="0" volume="1" name="FX 1" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="2" muted="0" volume="1" name="FX 2" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="3" muted="0" volume="1" name="FX 3" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="4" muted="0" volume="1" name="FX 4" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="5" muted="0" volume="1" name="FX 5" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="6" muted="0" volume="1" name="FX 6" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="7" muted="0" volume="1" name="FX 7" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="8" muted="0" volume="1" name="FX 8" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="9" muted="0" volume="1" name="FX 9" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="10" muted="0" volume="1" name="FX 10" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="11" muted="0" volume="1" name="FX 11" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="12" muted="0" volume="1" name="FX 12" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="13" muted="0" volume="1" name="FX 13" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="14" muted="0" volume="1" name="FX 14" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="15" muted="0" volume="1" name="FX 15" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="16" muted="0" volume="1" name="FX 16" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="17" muted="0" volume="1" name="FX 17" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="18" muted="0" volume="1" name="FX 18" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="19" muted="0" volume="1" name="FX 19" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="20" muted="0" volume="1" name="FX 20" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="21" muted="0" volume="1" name="FX 21" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="22" muted="0" volume="1" name="FX 22" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="23" muted="0" volume="1" name="FX 23" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="24" muted="0" volume="1" name="FX 24" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="25" muted="0" volume="1" name="FX 25" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="26" muted="0" volume="1" name="FX 26" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="27" muted="0" volume="1" name="FX 27" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="28" muted="0" volume="1" name="FX 28" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="29" muted="0" volume="1" name="FX 29" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="30" muted="0" volume="1" name="FX 30" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="31" muted="0" volume="1" name="FX 31" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="32" muted="0" volume="1" name="FX 32" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="33" muted="0" volume="1" name="FX 33" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="34" muted="0" volume="1" name="FX 34" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="35" muted="0" volume="1" name="FX 35" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="36" muted="0" volume="1" name="FX 36" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="37" muted="0" volume="1" name="FX 37" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="38" muted="0" volume="1" name="FX 38" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="39" muted="0" volume="1" name="FX 39" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="40" muted="0" volume="1" name="FX 40" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="41" muted="0" volume="1" name="FX 41" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="42" muted="0" volume="1" name="FX 42" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="43" muted="0" volume="1" name="FX 43" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="44" muted="0" volume="1" name="FX 44" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="45" muted="0" volume="1" name="FX 45" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="46" muted="0" volume="1" name="FX 46" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="47" muted="0" volume="1" name="FX 47" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="48" muted="0" volume="1" name="FX 48" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="49" muted="0" volume="1" name="FX 49" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="50" muted="0" volume="1" name="FX 50" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="51" muted="0" volume="1" name="FX 51" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="52" muted="0" volume="1" name="FX 52" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="53" muted="0" volume="1" name="FX 53" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="54" muted="0" volume="1" name="FX 54" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="55" muted="0" volume="1" name="FX 55" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="56" muted="0" volume="1" name="FX 56" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="57" muted="0" volume="1" name="FX 57" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="58" muted="0" volume="1" name="FX 58" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="59" muted="0" volume="1" name="FX 59" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="60" muted="0" volume="1" name="FX 60" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="61" muted="0" volume="1" name="FX 61" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="62" muted="0" volume="1" name="FX 62" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="63" muted="0" volume="1" name="FX 63" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="64" muted="0" volume="1" name="FX 64" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- </fxmixer>
- <pianoroll width="640" x="0" y="0" height="480" visible="0" />
- <automationeditor width="740" x="0" y="0" height="480" visible="0" />
- <projectnotes width="300" x="0" y="181" height="200" visible="0" ><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html>]]></projectnotes>
- <timeline lp1pos="6528" lp0pos="0" lpstate="0" />
- <controllers/>
- </song>
-</multimedia-project>
diff --git a/data/projects/OldStuff/Skiessi-RandomProjectNumber14253.mmpz b/data/projects/OldStuff/Skiessi-RandomProjectNumber14253.mmpz
deleted file mode 100644
index e1b1042..0000000
Binary files a/data/projects/OldStuff/Skiessi-RandomProjectNumber14253.mmpz and /dev/null differ
diff --git a/data/projects/OldStuff/TobyDox-Confused.mmp b/data/projects/OldStuff/TobyDox-Confused.mmp
deleted file mode 100644
index 786f24a..0000000
--- a/data/projects/OldStuff/TobyDox-Confused.mmp
+++ /dev/null
@@ -1,929 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.11" type="song">
- <head timesig_numerator="4" mastervol="94" timesig_denominator="4" bpm="160" masterpitch="0"/>
- <song>
- <trackcontainer width="870" x="5" y="5" maximized="0" height="639" visible="1" type="song" minimized="0">
- <track muted="0" type="1" name="Main Lead Jupiter">
- <bbtrack>
- <trackcontainer width="504" x="673" y="5" maximized="0" height="300" visible="1" type="bbtrackcontainer" minimized="0">
- <track muted="0" type="0" name="Jupiter">
- <instrumenttrack pan="0" fxch="3" pitch="0" basenote="57" vol="16">
- <instrument name="tripleoscillator">
- <tripleoscillator phoffset2="80" userwavefile0="" finer0="0" userwavefile1="" finer1="13" userwavefile2="shapes/smooth_inv_saw.ogg" finer2="0" coarse0="0" coarse1="0" coarse2="12" finel0="0" finel1="-16" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="121" pan2="0" stphdetun1="259" wavetype0="2" stphdetun2="92" wavetype1="2" wavetype2="3" vol0="100" vol1="100" phoffset0="0" phoffset1="266" vol2="63"/>
- </instrument>
- <eldata fres="1.26" ftype="7" fcut="1754" fwet="1">
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.597" lamt="0" syncmode="0" latt="0" rel="0.344" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.136" lamt="0.63" syncmode="0" latt="0" rel="0.016" sus="0.998" amt="0.82" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.2918" ctlenvamt="0" lspd_numerator="1"/>
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
- <arpeggiator arptime="72" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
- <midiport inputcontroller="0" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="0" outputprogram="1" readable="0"/>
- <fxchain numofeffects="0" enabled="0"/>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="Jupiter" pos="0" len="1920" frozen="0">
- <note pan="0" key="45" vol="100" pos="0" len="12"/>
- <note pan="0" key="48" vol="100" pos="12" len="12"/>
- <note pan="0" key="52" vol="100" pos="24" len="12"/>
- <note pan="0" key="45" vol="100" pos="36" len="12"/>
- <note pan="0" key="48" vol="100" pos="48" len="12"/>
- <note pan="0" key="52" vol="100" pos="60" len="12"/>
- <note pan="0" key="45" vol="100" pos="72" len="12"/>
- <note pan="0" key="48" vol="100" pos="84" len="12"/>
- <note pan="0" key="52" vol="100" pos="96" len="12"/>
- <note pan="0" key="45" vol="100" pos="108" len="12"/>
- <note pan="0" key="48" vol="100" pos="120" len="12"/>
- <note pan="0" key="52" vol="100" pos="132" len="12"/>
- <note pan="0" key="43" vol="100" pos="144" len="12"/>
- <note pan="0" key="48" vol="100" pos="156" len="12"/>
- <note pan="0" key="52" vol="100" pos="168" len="12"/>
- <note pan="0" key="43" vol="100" pos="180" len="12"/>
- <note pan="0" key="48" vol="100" pos="192" len="12"/>
- <note pan="0" key="52" vol="100" pos="204" len="12"/>
- <note pan="0" key="43" vol="100" pos="216" len="12"/>
- <note pan="0" key="48" vol="100" pos="228" len="12"/>
- <note pan="0" key="52" vol="100" pos="240" len="12"/>
- <note pan="0" key="43" vol="100" pos="252" len="12"/>
- <note pan="0" key="48" vol="100" pos="264" len="12"/>
- <note pan="0" key="52" vol="100" pos="276" len="12"/>
- <note pan="0" key="43" vol="100" pos="288" len="12"/>
- <note pan="0" key="47" vol="100" pos="300" len="12"/>
- <note pan="0" key="52" vol="100" pos="312" len="12"/>
- <note pan="0" key="43" vol="100" pos="324" len="12"/>
- <note pan="0" key="47" vol="100" pos="336" len="12"/>
- <note pan="0" key="52" vol="100" pos="348" len="12"/>
- <note pan="0" key="43" vol="100" pos="360" len="12"/>
- <note pan="0" key="47" vol="100" pos="372" len="12"/>
- <note pan="0" key="52" vol="100" pos="384" len="12"/>
- <note pan="0" key="43" vol="100" pos="396" len="12"/>
- <note pan="0" key="47" vol="100" pos="408" len="12"/>
- <note pan="0" key="52" vol="100" pos="420" len="12"/>
- <note pan="0" key="42" vol="100" pos="432" len="12"/>
- <note pan="0" key="47" vol="100" pos="444" len="12"/>
- <note pan="0" key="52" vol="100" pos="456" len="12"/>
- <note pan="0" key="42" vol="100" pos="468" len="12"/>
- <note pan="0" key="47" vol="100" pos="480" len="12"/>
- <note pan="0" key="52" vol="100" pos="492" len="12"/>
- <note pan="0" key="42" vol="100" pos="504" len="12"/>
- <note pan="0" key="47" vol="100" pos="516" len="12"/>
- <note pan="0" key="52" vol="100" pos="528" len="12"/>
- <note pan="0" key="42" vol="100" pos="540" len="12"/>
- <note pan="0" key="47" vol="100" pos="552" len="12"/>
- <note pan="0" key="52" vol="100" pos="564" len="12"/>
- <note pan="0" key="42" vol="100" pos="576" len="12"/>
- <note pan="0" key="47" vol="100" pos="588" len="12"/>
- <note pan="0" key="51" vol="100" pos="600" len="12"/>
- <note pan="0" key="42" vol="100" pos="612" len="12"/>
- <note pan="0" key="47" vol="100" pos="624" len="12"/>
- <note pan="0" key="51" vol="100" pos="636" len="12"/>
- <note pan="0" key="42" vol="100" pos="648" len="12"/>
- <note pan="0" key="47" vol="100" pos="660" len="12"/>
- <note pan="0" key="51" vol="100" pos="672" len="12"/>
- <note pan="0" key="42" vol="100" pos="684" len="12"/>
- <note pan="0" key="47" vol="100" pos="696" len="12"/>
- <note pan="0" key="51" vol="100" pos="708" len="12"/>
- <note pan="0" key="42" vol="100" pos="720" len="12"/>
- <note pan="0" key="47" vol="100" pos="732" len="12"/>
- <note pan="0" key="51" vol="100" pos="744" len="12"/>
- <note pan="0" key="42" vol="100" pos="756" len="12"/>
- <note pan="0" key="47" vol="100" pos="768" len="12"/>
- <note pan="0" key="51" vol="100" pos="780" len="12"/>
- <note pan="0" key="42" vol="100" pos="792" len="12"/>
- <note pan="0" key="47" vol="100" pos="804" len="12"/>
- <note pan="0" key="51" vol="100" pos="816" len="12"/>
- <note pan="0" key="42" vol="100" pos="828" len="12"/>
- <note pan="0" key="47" vol="100" pos="840" len="12"/>
- <note pan="0" key="51" vol="100" pos="852" len="12"/>
- <note pan="0" key="43" vol="100" pos="864" len="12"/>
- <note pan="0" key="48" vol="100" pos="876" len="12"/>
- <note pan="0" key="52" vol="100" pos="888" len="12"/>
- <note pan="0" key="43" vol="100" pos="900" len="12"/>
- <note pan="0" key="48" vol="100" pos="912" len="12"/>
- <note pan="0" key="52" vol="100" pos="924" len="12"/>
- <note pan="0" key="45" vol="100" pos="936" len="12"/>
- <note pan="0" key="48" vol="100" pos="948" len="12"/>
- <note pan="0" key="52" vol="100" pos="960" len="12"/>
- <note pan="0" key="45" vol="100" pos="972" len="12"/>
- <note pan="0" key="48" vol="100" pos="984" len="12"/>
- <note pan="0" key="52" vol="100" pos="996" len="12"/>
- <note pan="0" key="43" vol="100" pos="1008" len="12"/>
- <note pan="0" key="48" vol="100" pos="1020" len="12"/>
- <note pan="0" key="52" vol="100" pos="1032" len="12"/>
- <note pan="0" key="43" vol="100" pos="1044" len="12"/>
- <note pan="0" key="48" vol="100" pos="1056" len="12"/>
- <note pan="0" key="52" vol="100" pos="1068" len="12"/>
- <note pan="0" key="43" vol="100" pos="1080" len="12"/>
- <note pan="0" key="48" vol="100" pos="1092" len="12"/>
- <note pan="0" key="52" vol="100" pos="1104" len="12"/>
- <note pan="0" key="43" vol="100" pos="1116" len="12"/>
- <note pan="0" key="48" vol="100" pos="1128" len="12"/>
- <note pan="0" key="52" vol="100" pos="1140" len="12"/>
- <note pan="0" key="47" vol="100" pos="1152" len="12"/>
- <note pan="0" key="51" vol="100" pos="1164" len="12"/>
- <note pan="0" key="54" vol="100" pos="1176" len="12"/>
- <note pan="0" key="47" vol="100" pos="1188" len="12"/>
- <note pan="0" key="51" vol="100" pos="1200" len="12"/>
- <note pan="0" key="54" vol="100" pos="1212" len="12"/>
- <note pan="0" key="47" vol="100" pos="1224" len="12"/>
- <note pan="0" key="51" vol="100" pos="1236" len="12"/>
- <note pan="0" key="54" vol="100" pos="1248" len="12"/>
- <note pan="0" key="47" vol="100" pos="1260" len="12"/>
- <note pan="0" key="51" vol="100" pos="1272" len="12"/>
- <note pan="0" key="54" vol="100" pos="1284" len="12"/>
- <note pan="0" key="47" vol="100" pos="1296" len="12"/>
- <note pan="0" key="52" vol="100" pos="1308" len="12"/>
- <note pan="0" key="55" vol="100" pos="1320" len="12"/>
- <note pan="0" key="47" vol="100" pos="1332" len="12"/>
- <note pan="0" key="52" vol="100" pos="1344" len="12"/>
- <note pan="0" key="55" vol="100" pos="1356" len="12"/>
- <note pan="0" key="47" vol="100" pos="1368" len="12"/>
- <note pan="0" key="52" vol="100" pos="1380" len="12"/>
- <note pan="0" key="55" vol="100" pos="1392" len="12"/>
- <note pan="0" key="47" vol="100" pos="1404" len="12"/>
- <note pan="0" key="52" vol="100" pos="1416" len="12"/>
- <note pan="0" key="55" vol="100" pos="1428" len="12"/>
- <note pan="0" key="45" vol="100" pos="1440" len="12"/>
- <note pan="0" key="48" vol="100" pos="1452" len="12"/>
- <note pan="0" key="52" vol="100" pos="1464" len="12"/>
- <note pan="0" key="45" vol="100" pos="1476" len="12"/>
- <note pan="0" key="48" vol="100" pos="1488" len="12"/>
- <note pan="0" key="52" vol="100" pos="1500" len="12"/>
- <note pan="0" key="45" vol="100" pos="1512" len="12"/>
- <note pan="0" key="48" vol="100" pos="1524" len="12"/>
- <note pan="0" key="52" vol="100" pos="1536" len="12"/>
- <note pan="0" key="45" vol="100" pos="1548" len="12"/>
- <note pan="0" key="48" vol="100" pos="1560" len="12"/>
- <note pan="0" key="52" vol="100" pos="1572" len="12"/>
- <note pan="0" key="47" vol="100" pos="1584" len="12"/>
- <note pan="0" key="51" vol="100" pos="1596" len="12"/>
- <note pan="0" key="54" vol="100" pos="1608" len="12"/>
- <note pan="0" key="47" vol="100" pos="1620" len="12"/>
- <note pan="0" key="51" vol="100" pos="1632" len="12"/>
- <note pan="0" key="54" vol="100" pos="1644" len="12"/>
- <note pan="0" key="47" vol="100" pos="1656" len="12"/>
- <note pan="0" key="51" vol="100" pos="1668" len="12"/>
- <note pan="0" key="54" vol="100" pos="1680" len="12"/>
- <note pan="0" key="47" vol="100" pos="1692" len="12"/>
- <note pan="0" key="51" vol="100" pos="1704" len="12"/>
- <note pan="0" key="54" vol="100" pos="1716" len="12"/>
- <note pan="0" key="42" vol="100" pos="1728" len="12"/>
- <note pan="0" key="47" vol="100" pos="1740" len="12"/>
- <note pan="0" key="51" vol="100" pos="1752" len="12"/>
- <note pan="0" key="42" vol="100" pos="1764" len="12"/>
- <note pan="0" key="47" vol="100" pos="1776" len="12"/>
- <note pan="0" key="51" vol="100" pos="1788" len="12"/>
- <note pan="0" key="42" vol="100" pos="1800" len="12"/>
- <note pan="0" key="47" vol="100" pos="1812" len="12"/>
- <note pan="0" key="51" vol="100" pos="1824" len="12"/>
- <note pan="0" key="42" vol="100" pos="1836" len="12"/>
- <note pan="0" key="47" vol="100" pos="1848" len="12"/>
- <note pan="0" key="51" vol="100" pos="1860" len="12"/>
- <note pan="0" key="42" vol="100" pos="1872" len="12"/>
- <note pan="0" key="47" vol="100" pos="1884" len="12"/>
- <note pan="0" key="51" vol="100" pos="1896" len="12"/>
- <note pan="0" key="42" vol="100" pos="1908" len="12"/>
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="192" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="384" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="576" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="768" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Jupiter" pos="960" len="192" frozen="0"/>
- </track>
- <track muted="0" type="0" name="kick_hardcore01.ogg">
- <instrumenttrack pan="0" fxch="1" pitch="0" basenote="57" vol="59">
- <instrument name="audiofileprocessor">
- <audiofileprocessor reversed="0" looped="0" eframe="0.99957" sframe="0" src="drums/kick_hardcore01.ogg" amp="193"/>
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
- <midiport inputcontroller="0" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="0" outputprogram="1" readable="0"/>
- <fxchain numofeffects="0" enabled="0"/>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="0" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="192" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="384" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="576" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="768" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="kick_hardcore01.ogg" pos="960" len="192" frozen="0">
- <note pan="0" key="57" vol="100" pos="0" len="-192"/>
- <note pan="0" key="57" vol="100" pos="48" len="-192"/>
- <note pan="0" key="57" vol="100" pos="96" len="-192"/>
- <note pan="0" key="57" vol="100" pos="144" len="-192"/>
- </pattern>
- </track>
- <track muted="0" type="0" name="hihat_opened01.ogg">
- <instrumenttrack pan="0" fxch="2" pitch="0" basenote="57" vol="59">
- <instrument name="audiofileprocessor">
- <audiofileprocessor reversed="0" looped="0" eframe="0.999603" sframe="0" src="drums/hihat_opened01.ogg" amp="100"/>
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
- <midiport inputcontroller="0" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="0" outputprogram="1" readable="0"/>
- <fxchain numofeffects="0" enabled="0"/>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="0" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="192" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="384" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="576" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="768" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="960" len="192" frozen="0">
- <note pan="0" key="57" vol="100" pos="24" len="-192"/>
- <note pan="0" key="57" vol="100" pos="72" len="-192"/>
- <note pan="0" key="57" vol="100" pos="120" len="-192"/>
- <note pan="0" key="57" vol="100" pos="168" len="-192"/>
- </pattern>
- </track>
- <track muted="0" type="0" name="RaveBass 2">
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="19">
- <instrument name="tripleoscillator">
- <tripleoscillator phoffset2="82" userwavefile0="empty.wav" finer0="13" userwavefile1="empty.wav" finer1="16" userwavefile2="empty.wav" finer2="4" coarse0="-12" coarse1="0" coarse2="12" finel0="-10" finel1="10" modalgo1="2" modalgo2="2" finel2="-2" pan0="9" modalgo3="0" pan1="-20" stphdetun0="232" pan2="10" stphdetun1="110" wavetype0="2" stphdetun2="109" wavetype1="3" wavetype2="2" vol0="100" vol1="100" phoffset0="87" phoffset1="280" vol2="115"/>
- </instrument>
- <eldata fres="0.46" ftype="4" fcut="1250" fwet="1">
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.998" lamt="0" syncmode="0" latt="0" rel="0.238" sus="0" amt="1" x100="0" att="0.048" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0.499" lpdel="0" hold="0.499" lshp="1" lspd="0.6094" ctlenvamt="0" lspd_numerator="1"/>
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0" sus="0.499" amt="0" x100="0" att="0.499" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
- <arpeggiator arptime="100" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="76"/>
- <midiport inputcontroller="0" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="0" outputprogram="1" readable="0"/>
- <fxchain numofeffects="0" enabled="0"/>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="RaveBass 2" pos="0" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="RaveBass 2" pos="192" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="RaveBass 2" pos="384" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="RaveBass 2" pos="576" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="1" name="RaveBass 2" pos="768" len="1920" frozen="0">
- <note pan="0" key="45" vol="100" pos="0" len="141"/>
- <note pan="0" key="40" vol="100" pos="144" len="285"/>
- <note pan="0" key="42" vol="100" pos="432" len="144"/>
- <note pan="0" key="39" vol="100" pos="576" len="144"/>
- <note pan="0" key="35" vol="100" pos="720" len="144"/>
- <note pan="0" key="39" vol="100" pos="864" len="45"/>
- <note pan="0" key="42" vol="100" pos="912" len="45"/>
- <note pan="0" key="45" vol="100" pos="960" len="45"/>
- <note pan="0" key="48" vol="100" pos="1008" len="141"/>
- <note pan="0" key="47" vol="100" pos="1152" len="285"/>
- <note pan="0" key="45" vol="100" pos="1440" len="138"/>
- <note pan="0" key="47" vol="100" pos="1584" len="138"/>
- <note pan="0" key="51" vol="100" pos="1728" len="171"/>
- </pattern>
- <pattern steps="16" muted="0" type="0" name="RaveBass 2" pos="960" len="192" frozen="0"/>
- </track>
- <track muted="0" type="0" name="Soft Strings">
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="45" vol="29">
- <instrument name="tripleoscillator">
- <tripleoscillator phoffset2="80" userwavefile0="" finer0="0" userwavefile1="" finer1="13" userwavefile2="shapes/smooth_inv_saw.ogg" finer2="0" coarse0="0" coarse1="0" coarse2="12" finel0="0" finel1="-16" modalgo1="2" modalgo2="0" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="121" pan2="0" stphdetun1="259" wavetype0="2" stphdetun2="92" wavetype1="2" wavetype2="3" vol0="100" vol1="100" phoffset0="0" phoffset1="266" vol2="42"/>
- </instrument>
- <eldata fres="1.04" ftype="7" fcut="2524" fwet="1">
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.597" lamt="0" syncmode="0" latt="0" rel="0.328" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.136" lamt="0.63" syncmode="0" latt="0" rel="0.016" sus="0.998" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.6268" ctlenvamt="0" lspd_numerator="1"/>
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0.43" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.6717" ctlenvamt="0" lspd_numerator="1"/>
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
- <arpeggiator arptime="158" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
- <midiport inputcontroller="0" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="0" outputprogram="1" readable="0"/>
- <fxchain numofeffects="0" enabled="0"/>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Soft Strings" pos="0" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="1" name="Soft Strings" pos="192" len="1920" frozen="0">
- <note pan="0" key="45" vol="100" pos="0" len="12"/>
- <note pan="0" key="48" vol="100" pos="12" len="12"/>
- <note pan="0" key="52" vol="100" pos="24" len="12"/>
- <note pan="0" key="45" vol="100" pos="36" len="12"/>
- <note pan="0" key="48" vol="100" pos="48" len="12"/>
- <note pan="0" key="52" vol="100" pos="60" len="12"/>
- <note pan="0" key="45" vol="100" pos="72" len="12"/>
- <note pan="0" key="48" vol="100" pos="84" len="12"/>
- <note pan="0" key="52" vol="100" pos="96" len="12"/>
- <note pan="0" key="45" vol="100" pos="108" len="12"/>
- <note pan="0" key="48" vol="100" pos="120" len="12"/>
- <note pan="0" key="52" vol="100" pos="132" len="12"/>
- <note pan="0" key="43" vol="100" pos="144" len="12"/>
- <note pan="0" key="48" vol="100" pos="156" len="12"/>
- <note pan="0" key="52" vol="100" pos="168" len="12"/>
- <note pan="0" key="43" vol="100" pos="180" len="12"/>
- <note pan="0" key="48" vol="100" pos="192" len="12"/>
- <note pan="0" key="52" vol="100" pos="204" len="12"/>
- <note pan="0" key="43" vol="100" pos="216" len="12"/>
- <note pan="0" key="48" vol="100" pos="228" len="12"/>
- <note pan="0" key="52" vol="100" pos="240" len="12"/>
- <note pan="0" key="43" vol="100" pos="252" len="12"/>
- <note pan="0" key="48" vol="100" pos="264" len="12"/>
- <note pan="0" key="52" vol="100" pos="276" len="12"/>
- <note pan="0" key="43" vol="100" pos="288" len="12"/>
- <note pan="0" key="47" vol="100" pos="300" len="12"/>
- <note pan="0" key="52" vol="100" pos="312" len="12"/>
- <note pan="0" key="43" vol="100" pos="324" len="12"/>
- <note pan="0" key="47" vol="100" pos="336" len="12"/>
- <note pan="0" key="52" vol="100" pos="348" len="12"/>
- <note pan="0" key="43" vol="100" pos="360" len="12"/>
- <note pan="0" key="47" vol="100" pos="372" len="12"/>
- <note pan="0" key="52" vol="100" pos="384" len="12"/>
- <note pan="0" key="43" vol="100" pos="396" len="12"/>
- <note pan="0" key="47" vol="100" pos="408" len="12"/>
- <note pan="0" key="52" vol="100" pos="420" len="12"/>
- <note pan="0" key="42" vol="100" pos="432" len="12"/>
- <note pan="0" key="47" vol="100" pos="444" len="12"/>
- <note pan="0" key="52" vol="100" pos="456" len="12"/>
- <note pan="0" key="42" vol="100" pos="468" len="12"/>
- <note pan="0" key="47" vol="100" pos="480" len="12"/>
- <note pan="0" key="52" vol="100" pos="492" len="12"/>
- <note pan="0" key="42" vol="100" pos="504" len="12"/>
- <note pan="0" key="47" vol="100" pos="516" len="12"/>
- <note pan="0" key="52" vol="100" pos="528" len="12"/>
- <note pan="0" key="42" vol="100" pos="540" len="12"/>
- <note pan="0" key="47" vol="100" pos="552" len="12"/>
- <note pan="0" key="52" vol="100" pos="564" len="12"/>
- <note pan="0" key="42" vol="100" pos="576" len="12"/>
- <note pan="0" key="47" vol="100" pos="588" len="12"/>
- <note pan="0" key="51" vol="100" pos="600" len="12"/>
- <note pan="0" key="42" vol="100" pos="612" len="12"/>
- <note pan="0" key="47" vol="100" pos="624" len="12"/>
- <note pan="0" key="51" vol="100" pos="636" len="12"/>
- <note pan="0" key="42" vol="100" pos="648" len="12"/>
- <note pan="0" key="47" vol="100" pos="660" len="12"/>
- <note pan="0" key="51" vol="100" pos="672" len="12"/>
- <note pan="0" key="42" vol="100" pos="684" len="12"/>
- <note pan="0" key="47" vol="100" pos="696" len="12"/>
- <note pan="0" key="51" vol="100" pos="708" len="12"/>
- <note pan="0" key="42" vol="100" pos="720" len="12"/>
- <note pan="0" key="47" vol="100" pos="732" len="12"/>
- <note pan="0" key="51" vol="100" pos="744" len="12"/>
- <note pan="0" key="42" vol="100" pos="756" len="12"/>
- <note pan="0" key="47" vol="100" pos="768" len="12"/>
- <note pan="0" key="51" vol="100" pos="780" len="12"/>
- <note pan="0" key="42" vol="100" pos="792" len="12"/>
- <note pan="0" key="47" vol="100" pos="804" len="12"/>
- <note pan="0" key="51" vol="100" pos="816" len="12"/>
- <note pan="0" key="42" vol="100" pos="828" len="12"/>
- <note pan="0" key="47" vol="100" pos="840" len="12"/>
- <note pan="0" key="51" vol="100" pos="852" len="12"/>
- <note pan="0" key="43" vol="100" pos="864" len="12"/>
- <note pan="0" key="48" vol="100" pos="876" len="12"/>
- <note pan="0" key="52" vol="100" pos="888" len="12"/>
- <note pan="0" key="43" vol="100" pos="900" len="12"/>
- <note pan="0" key="48" vol="100" pos="912" len="12"/>
- <note pan="0" key="52" vol="100" pos="924" len="12"/>
- <note pan="0" key="45" vol="100" pos="936" len="12"/>
- <note pan="0" key="48" vol="100" pos="948" len="12"/>
- <note pan="0" key="52" vol="100" pos="960" len="12"/>
- <note pan="0" key="45" vol="100" pos="972" len="12"/>
- <note pan="0" key="48" vol="100" pos="984" len="12"/>
- <note pan="0" key="52" vol="100" pos="996" len="12"/>
- <note pan="0" key="43" vol="100" pos="1008" len="12"/>
- <note pan="0" key="48" vol="100" pos="1020" len="12"/>
- <note pan="0" key="52" vol="100" pos="1032" len="12"/>
- <note pan="0" key="43" vol="100" pos="1044" len="12"/>
- <note pan="0" key="48" vol="100" pos="1056" len="12"/>
- <note pan="0" key="52" vol="100" pos="1068" len="12"/>
- <note pan="0" key="43" vol="100" pos="1080" len="12"/>
- <note pan="0" key="48" vol="100" pos="1092" len="12"/>
- <note pan="0" key="52" vol="100" pos="1104" len="12"/>
- <note pan="0" key="43" vol="100" pos="1116" len="12"/>
- <note pan="0" key="48" vol="100" pos="1128" len="12"/>
- <note pan="0" key="52" vol="100" pos="1140" len="12"/>
- <note pan="0" key="47" vol="100" pos="1152" len="12"/>
- <note pan="0" key="51" vol="100" pos="1164" len="12"/>
- <note pan="0" key="54" vol="100" pos="1176" len="12"/>
- <note pan="0" key="47" vol="100" pos="1188" len="12"/>
- <note pan="0" key="51" vol="100" pos="1200" len="12"/>
- <note pan="0" key="54" vol="100" pos="1212" len="12"/>
- <note pan="0" key="47" vol="100" pos="1224" len="12"/>
- <note pan="0" key="51" vol="100" pos="1236" len="12"/>
- <note pan="0" key="54" vol="100" pos="1248" len="12"/>
- <note pan="0" key="47" vol="100" pos="1260" len="12"/>
- <note pan="0" key="51" vol="100" pos="1272" len="12"/>
- <note pan="0" key="54" vol="100" pos="1284" len="12"/>
- <note pan="0" key="47" vol="100" pos="1296" len="12"/>
- <note pan="0" key="52" vol="100" pos="1308" len="12"/>
- <note pan="0" key="55" vol="100" pos="1320" len="12"/>
- <note pan="0" key="47" vol="100" pos="1332" len="12"/>
- <note pan="0" key="52" vol="100" pos="1344" len="12"/>
- <note pan="0" key="55" vol="100" pos="1356" len="12"/>
- <note pan="0" key="47" vol="100" pos="1368" len="12"/>
- <note pan="0" key="52" vol="100" pos="1380" len="12"/>
- <note pan="0" key="55" vol="100" pos="1392" len="12"/>
- <note pan="0" key="47" vol="100" pos="1404" len="12"/>
- <note pan="0" key="52" vol="100" pos="1416" len="12"/>
- <note pan="0" key="55" vol="100" pos="1428" len="12"/>
- <note pan="0" key="45" vol="100" pos="1440" len="12"/>
- <note pan="0" key="48" vol="100" pos="1452" len="12"/>
- <note pan="0" key="52" vol="100" pos="1464" len="12"/>
- <note pan="0" key="45" vol="100" pos="1476" len="12"/>
- <note pan="0" key="48" vol="100" pos="1488" len="12"/>
- <note pan="0" key="52" vol="100" pos="1500" len="12"/>
- <note pan="0" key="45" vol="100" pos="1512" len="12"/>
- <note pan="0" key="48" vol="100" pos="1524" len="12"/>
- <note pan="0" key="52" vol="100" pos="1536" len="12"/>
- <note pan="0" key="45" vol="100" pos="1548" len="12"/>
- <note pan="0" key="48" vol="100" pos="1560" len="12"/>
- <note pan="0" key="52" vol="100" pos="1572" len="12"/>
- <note pan="0" key="47" vol="100" pos="1584" len="12"/>
- <note pan="0" key="51" vol="100" pos="1596" len="12"/>
- <note pan="0" key="54" vol="100" pos="1608" len="12"/>
- <note pan="0" key="47" vol="100" pos="1620" len="12"/>
- <note pan="0" key="51" vol="100" pos="1632" len="12"/>
- <note pan="0" key="54" vol="100" pos="1644" len="12"/>
- <note pan="0" key="47" vol="100" pos="1656" len="12"/>
- <note pan="0" key="51" vol="100" pos="1668" len="12"/>
- <note pan="0" key="54" vol="100" pos="1680" len="12"/>
- <note pan="0" key="47" vol="100" pos="1692" len="12"/>
- <note pan="0" key="51" vol="100" pos="1704" len="12"/>
- <note pan="0" key="54" vol="100" pos="1716" len="12"/>
- <note pan="0" key="42" vol="100" pos="1728" len="12"/>
- <note pan="0" key="47" vol="100" pos="1740" len="12"/>
- <note pan="0" key="51" vol="100" pos="1752" len="12"/>
- <note pan="0" key="42" vol="100" pos="1764" len="12"/>
- <note pan="0" key="47" vol="100" pos="1776" len="12"/>
- <note pan="0" key="51" vol="100" pos="1788" len="12"/>
- <note pan="0" key="42" vol="100" pos="1800" len="12"/>
- <note pan="0" key="47" vol="100" pos="1812" len="12"/>
- <note pan="0" key="51" vol="100" pos="1824" len="12"/>
- <note pan="0" key="42" vol="100" pos="1836" len="12"/>
- <note pan="0" key="47" vol="100" pos="1848" len="12"/>
- <note pan="0" key="51" vol="100" pos="1860" len="12"/>
- <note pan="0" key="42" vol="100" pos="1872" len="12"/>
- <note pan="0" key="47" vol="100" pos="1884" len="12"/>
- <note pan="0" key="51" vol="100" pos="1896" len="12"/>
- <note pan="0" key="42" vol="100" pos="1908" len="12"/>
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Soft Strings" pos="384" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Soft Strings" pos="576" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Soft Strings" pos="768" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Soft Strings" pos="960" len="192" frozen="0"/>
- </track>
- <track muted="0" type="0" name="Rough!">
- <instrumenttrack pan="0" fxch="4" pitch="0" basenote="57" vol="59">
- <instrument name="tripleoscillator">
- <tripleoscillator phoffset2="242" userwavefile0="" finer0="0" userwavefile1="" finer1="-32" userwavefile2="" finer2="16" coarse0="0" coarse1="0" coarse2="-12" finel0="0" finel1="22" modalgo1="1" modalgo2="3" finel2="-30" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="142" wavetype0="3" stphdetun2="292" wavetype1="2" wavetype2="4" vol0="119" vol1="79" phoffset0="0" phoffset1="120" vol2="100"/>
- </instrument>
- <eldata fres="10" ftype="0" fcut="14000" fwet="0">
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.293" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1"/>
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1"/>
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100"/>
- <midiport inputcontroller="0" fixedoutputvelocity="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="0" outputprogram="1" readable="0"/>
- <fxchain numofeffects="0" enabled="0"/>
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Rough!" pos="0" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Rough!" pos="192" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="1" name="Rough!" pos="384" len="1920" frozen="0">
- <note pan="0" key="45" vol="100" pos="0" len="141"/>
- <note pan="0" key="40" vol="100" pos="144" len="285"/>
- <note pan="0" key="30" vol="100" pos="432" len="144"/>
- <note pan="0" key="35" vol="100" pos="576" len="144"/>
- <note pan="0" key="39" vol="100" pos="720" len="144"/>
- <note pan="0" key="39" vol="100" pos="864" len="45"/>
- <note pan="0" key="42" vol="100" pos="912" len="45"/>
- <note pan="0" key="45" vol="100" pos="960" len="45"/>
- <note pan="0" key="48" vol="100" pos="1008" len="141"/>
- <note pan="0" key="42" vol="100" pos="1152" len="123"/>
- <note pan="0" key="47" vol="100" pos="1272" len="168"/>
- <note pan="0" key="42" vol="100" pos="1440" len="138"/>
- <note pan="0" key="47" vol="100" pos="1581" len="138"/>
- <note pan="0" key="51" vol="100" pos="1728" len="171"/>
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Rough!" pos="576" len="1920" frozen="0">
- <note pan="0" key="45" vol="100" pos="0" len="12"/>
- <note pan="0" key="48" vol="100" pos="12" len="12"/>
- <note pan="0" key="52" vol="100" pos="24" len="12"/>
- <note pan="0" key="45" vol="100" pos="36" len="12"/>
- <note pan="0" key="48" vol="100" pos="48" len="12"/>
- <note pan="0" key="52" vol="100" pos="60" len="12"/>
- <note pan="0" key="45" vol="100" pos="72" len="12"/>
- <note pan="0" key="48" vol="100" pos="84" len="12"/>
- <note pan="0" key="52" vol="100" pos="96" len="12"/>
- <note pan="0" key="45" vol="100" pos="108" len="12"/>
- <note pan="0" key="48" vol="100" pos="120" len="12"/>
- <note pan="0" key="52" vol="100" pos="132" len="12"/>
- <note pan="0" key="43" vol="100" pos="144" len="12"/>
- <note pan="0" key="48" vol="100" pos="156" len="12"/>
- <note pan="0" key="52" vol="100" pos="168" len="12"/>
- <note pan="0" key="43" vol="100" pos="180" len="12"/>
- <note pan="0" key="48" vol="100" pos="192" len="12"/>
- <note pan="0" key="52" vol="100" pos="204" len="12"/>
- <note pan="0" key="43" vol="100" pos="216" len="12"/>
- <note pan="0" key="48" vol="100" pos="228" len="12"/>
- <note pan="0" key="52" vol="100" pos="240" len="12"/>
- <note pan="0" key="43" vol="100" pos="252" len="12"/>
- <note pan="0" key="48" vol="100" pos="264" len="12"/>
- <note pan="0" key="52" vol="100" pos="276" len="12"/>
- <note pan="0" key="43" vol="100" pos="288" len="12"/>
- <note pan="0" key="47" vol="100" pos="300" len="12"/>
- <note pan="0" key="52" vol="100" pos="312" len="12"/>
- <note pan="0" key="43" vol="100" pos="324" len="12"/>
- <note pan="0" key="47" vol="100" pos="336" len="12"/>
- <note pan="0" key="52" vol="100" pos="348" len="12"/>
- <note pan="0" key="43" vol="100" pos="360" len="12"/>
- <note pan="0" key="47" vol="100" pos="372" len="12"/>
- <note pan="0" key="52" vol="100" pos="384" len="12"/>
- <note pan="0" key="43" vol="100" pos="396" len="12"/>
- <note pan="0" key="47" vol="100" pos="408" len="12"/>
- <note pan="0" key="52" vol="100" pos="420" len="12"/>
- <note pan="0" key="42" vol="100" pos="432" len="12"/>
- <note pan="0" key="47" vol="100" pos="444" len="12"/>
- <note pan="0" key="52" vol="100" pos="456" len="12"/>
- <note pan="0" key="42" vol="100" pos="468" len="12"/>
- <note pan="0" key="47" vol="100" pos="480" len="12"/>
- <note pan="0" key="52" vol="100" pos="492" len="12"/>
- <note pan="0" key="42" vol="100" pos="504" len="12"/>
- <note pan="0" key="47" vol="100" pos="516" len="12"/>
- <note pan="0" key="52" vol="100" pos="528" len="12"/>
- <note pan="0" key="42" vol="100" pos="540" len="12"/>
- <note pan="0" key="47" vol="100" pos="552" len="12"/>
- <note pan="0" key="52" vol="100" pos="564" len="12"/>
- <note pan="0" key="42" vol="100" pos="576" len="12"/>
- <note pan="0" key="47" vol="100" pos="588" len="12"/>
- <note pan="0" key="51" vol="100" pos="600" len="12"/>
- <note pan="0" key="42" vol="100" pos="612" len="12"/>
- <note pan="0" key="47" vol="100" pos="624" len="12"/>
- <note pan="0" key="51" vol="100" pos="636" len="12"/>
- <note pan="0" key="42" vol="100" pos="648" len="12"/>
- <note pan="0" key="47" vol="100" pos="660" len="12"/>
- <note pan="0" key="51" vol="100" pos="672" len="12"/>
- <note pan="0" key="42" vol="100" pos="684" len="12"/>
- <note pan="0" key="47" vol="100" pos="696" len="12"/>
- <note pan="0" key="51" vol="100" pos="708" len="12"/>
- <note pan="0" key="42" vol="100" pos="720" len="12"/>
- <note pan="0" key="47" vol="100" pos="732" len="12"/>
- <note pan="0" key="51" vol="100" pos="744" len="12"/>
- <note pan="0" key="42" vol="100" pos="756" len="12"/>
- <note pan="0" key="47" vol="100" pos="768" len="12"/>
- <note pan="0" key="51" vol="100" pos="780" len="12"/>
- <note pan="0" key="42" vol="100" pos="792" len="12"/>
- <note pan="0" key="47" vol="100" pos="804" len="12"/>
- <note pan="0" key="51" vol="100" pos="816" len="12"/>
- <note pan="0" key="42" vol="100" pos="828" len="12"/>
- <note pan="0" key="47" vol="100" pos="840" len="12"/>
- <note pan="0" key="51" vol="100" pos="852" len="12"/>
- <note pan="0" key="43" vol="100" pos="864" len="12"/>
- <note pan="0" key="48" vol="100" pos="876" len="12"/>
- <note pan="0" key="52" vol="100" pos="888" len="12"/>
- <note pan="0" key="43" vol="100" pos="900" len="12"/>
- <note pan="0" key="48" vol="100" pos="912" len="12"/>
- <note pan="0" key="52" vol="100" pos="924" len="12"/>
- <note pan="0" key="45" vol="100" pos="936" len="12"/>
- <note pan="0" key="48" vol="100" pos="948" len="12"/>
- <note pan="0" key="52" vol="100" pos="960" len="12"/>
- <note pan="0" key="45" vol="100" pos="972" len="12"/>
- <note pan="0" key="48" vol="100" pos="984" len="12"/>
- <note pan="0" key="52" vol="100" pos="996" len="12"/>
- <note pan="0" key="43" vol="100" pos="1008" len="12"/>
- <note pan="0" key="48" vol="100" pos="1020" len="12"/>
- <note pan="0" key="52" vol="100" pos="1032" len="12"/>
- <note pan="0" key="43" vol="100" pos="1044" len="12"/>
- <note pan="0" key="48" vol="100" pos="1056" len="12"/>
- <note pan="0" key="52" vol="100" pos="1068" len="12"/>
- <note pan="0" key="43" vol="100" pos="1080" len="12"/>
- <note pan="0" key="48" vol="100" pos="1092" len="12"/>
- <note pan="0" key="52" vol="100" pos="1104" len="12"/>
- <note pan="0" key="43" vol="100" pos="1116" len="12"/>
- <note pan="0" key="48" vol="100" pos="1128" len="12"/>
- <note pan="0" key="52" vol="100" pos="1140" len="12"/>
- <note pan="0" key="47" vol="100" pos="1152" len="12"/>
- <note pan="0" key="51" vol="100" pos="1164" len="12"/>
- <note pan="0" key="54" vol="100" pos="1176" len="12"/>
- <note pan="0" key="47" vol="100" pos="1188" len="12"/>
- <note pan="0" key="51" vol="100" pos="1200" len="12"/>
- <note pan="0" key="54" vol="100" pos="1212" len="12"/>
- <note pan="0" key="47" vol="100" pos="1224" len="12"/>
- <note pan="0" key="51" vol="100" pos="1236" len="12"/>
- <note pan="0" key="54" vol="100" pos="1248" len="12"/>
- <note pan="0" key="47" vol="100" pos="1260" len="12"/>
- <note pan="0" key="51" vol="100" pos="1272" len="12"/>
- <note pan="0" key="54" vol="100" pos="1284" len="12"/>
- <note pan="0" key="47" vol="100" pos="1296" len="12"/>
- <note pan="0" key="52" vol="100" pos="1308" len="12"/>
- <note pan="0" key="55" vol="100" pos="1320" len="12"/>
- <note pan="0" key="47" vol="100" pos="1332" len="12"/>
- <note pan="0" key="52" vol="100" pos="1344" len="12"/>
- <note pan="0" key="55" vol="100" pos="1356" len="12"/>
- <note pan="0" key="47" vol="100" pos="1368" len="12"/>
- <note pan="0" key="52" vol="100" pos="1380" len="12"/>
- <note pan="0" key="55" vol="100" pos="1392" len="12"/>
- <note pan="0" key="47" vol="100" pos="1404" len="12"/>
- <note pan="0" key="52" vol="100" pos="1416" len="12"/>
- <note pan="0" key="55" vol="100" pos="1428" len="12"/>
- <note pan="0" key="45" vol="100" pos="1440" len="12"/>
- <note pan="0" key="48" vol="100" pos="1452" len="12"/>
- <note pan="0" key="52" vol="100" pos="1464" len="12"/>
- <note pan="0" key="45" vol="100" pos="1476" len="12"/>
- <note pan="0" key="48" vol="100" pos="1488" len="12"/>
- <note pan="0" key="52" vol="100" pos="1500" len="12"/>
- <note pan="0" key="45" vol="100" pos="1512" len="12"/>
- <note pan="0" key="48" vol="100" pos="1524" len="12"/>
- <note pan="0" key="52" vol="100" pos="1536" len="12"/>
- <note pan="0" key="45" vol="100" pos="1548" len="12"/>
- <note pan="0" key="48" vol="100" pos="1560" len="12"/>
- <note pan="0" key="52" vol="100" pos="1572" len="12"/>
- <note pan="0" key="47" vol="100" pos="1584" len="12"/>
- <note pan="0" key="51" vol="100" pos="1596" len="12"/>
- <note pan="0" key="54" vol="100" pos="1608" len="12"/>
- <note pan="0" key="47" vol="100" pos="1620" len="12"/>
- <note pan="0" key="51" vol="100" pos="1632" len="12"/>
- <note pan="0" key="54" vol="100" pos="1644" len="12"/>
- <note pan="0" key="47" vol="100" pos="1656" len="12"/>
- <note pan="0" key="51" vol="100" pos="1668" len="12"/>
- <note pan="0" key="54" vol="100" pos="1680" len="12"/>
- <note pan="0" key="47" vol="100" pos="1692" len="12"/>
- <note pan="0" key="51" vol="100" pos="1704" len="12"/>
- <note pan="0" key="54" vol="100" pos="1716" len="12"/>
- <note pan="0" key="42" vol="100" pos="1728" len="12"/>
- <note pan="0" key="47" vol="100" pos="1740" len="12"/>
- <note pan="0" key="51" vol="100" pos="1752" len="12"/>
- <note pan="0" key="42" vol="100" pos="1764" len="12"/>
- <note pan="0" key="47" vol="100" pos="1776" len="12"/>
- <note pan="0" key="51" vol="100" pos="1788" len="12"/>
- <note pan="0" key="42" vol="100" pos="1800" len="12"/>
- <note pan="0" key="47" vol="100" pos="1812" len="12"/>
- <note pan="0" key="51" vol="100" pos="1824" len="12"/>
- <note pan="0" key="42" vol="100" pos="1836" len="12"/>
- <note pan="0" key="47" vol="100" pos="1848" len="12"/>
- <note pan="0" key="51" vol="100" pos="1860" len="12"/>
- <note pan="0" key="42" vol="100" pos="1872" len="12"/>
- <note pan="0" key="47" vol="100" pos="1884" len="12"/>
- <note pan="0" key="51" vol="100" pos="1896" len="12"/>
- <note pan="0" key="42" vol="100" pos="1908" len="12"/>
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Rough!" pos="768" len="192" frozen="0"/>
- <pattern steps="16" muted="0" type="0" name="Rough!" pos="960" len="192" frozen="0"/>
- </track>
- </trackcontainer>
- </bbtrack>
- <bbtco muted="0" name="Main Lead Jupiter" pos="0" color="4294945280" len="9600"/>
- <bbtco muted="0" name="Main Lead Jupiter" pos="13440" color="4294945280" len="3840"/>
- <bbtco muted="0" name="" pos="5184" color="4294945280" len="1920"/>
- </track>
- <track muted="0" type="1" name="Main Lead FM">
- <bbtrack/>
- <bbtco muted="0" name="Main Lead FM" pos="3840" color="4294950912" len="3840"/>
- <bbtco muted="0" name="Main Lead FM" pos="11520" color="4294950912" len="3840"/>
- </track>
- <track muted="0" type="1" name="Rough">
- <bbtrack/>
- <bbtco muted="0" name="Rough" pos="5760" color="4294901760" len="1920"/>
- <bbtco muted="0" name="Rough" pos="13440" color="4294901760" len="1920"/>
- </track>
- <track muted="0" type="1" name="Main Lead Rough">
- <bbtrack/>
- <bbtco muted="0" name="Main Lead Rough" pos="7680" color="4294959104" len="7680"/>
- </track>
- <track muted="0" type="1" name="RaveBass">
- <bbtrack/>
- <bbtco muted="0" name="Bass #1" pos="1920" color="4278223103" len="13440"/>
- </track>
- <track muted="0" type="1" name="Beat">
- <bbtrack/>
- <bbtco muted="0" name="Beat" pos="1920" color="4278255360" len="7680"/>
- <bbtco muted="0" name="Beat" pos="13440" color="4278255360" len="1920"/>
- </track>
- </trackcontainer>
- <track muted="0" type="6" name="Automation track">
- <automationtrack/>
- <automationpattern name="Tempo" pos="0" len="192">
- <time value="140" pos="0"/>
- </automationpattern>
- <automationpattern name="Master volume" pos="0" len="192">
- <time value="100" pos="0"/>
- </automationpattern>
- <automationpattern name="Master pitch" pos="0" len="192">
- <time value="0" pos="0"/>
- </automationpattern>
- </track>
- <fxmixer width="865" x="14" y="551" maximized="0" height="278" visible="1" minimized="0">
- <fxchannel num="0" muted="0" volume="0.95" name="Master">
- <fxchain numofeffects="2" enabled="1">
- <effect autoquit_numerator="1" autoquit_denominator="1" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
- <ladspacontrols port00="-5.2" port01="0" port02="10" syncmode="0" port02_numerator="4" ports="3" port02_denominator="4"/>
- <key>
- <attribute value="fast_lookahead_limiter_1913.so" name="file"/>
- <attribute value="fastLookaheadLimiter" name="plugin"/>
- </key>
- </effect>
- <effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
- <ladspacontrols port02="0.95921" port03="0.60669" port04="0.249875" port05="0.2" ports="4"/>
- <key>
- <attribute value="caps" name="file"/>
- <attribute value="Plate2x2" name="plugin"/>
- </key>
- </effect>
- </fxchain>
- </fxchannel>
- <fxchannel num="1" muted="0" volume="1" name="FX 1">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="2" muted="0" volume="1" name="FX 2">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="3" muted="0" volume="1" name="FX 3">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="4" muted="0" volume="1" name="FX 4">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="5" muted="0" volume="1" name="FX 5">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="6" muted="0" volume="1" name="FX 6">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="7" muted="0" volume="1" name="FX 7">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="8" muted="0" volume="1" name="FX 8">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="9" muted="0" volume="1" name="FX 9">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="10" muted="0" volume="1" name="FX 10">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="11" muted="0" volume="1" name="FX 11">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="12" muted="0" volume="1" name="FX 12">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="13" muted="0" volume="1" name="FX 13">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="14" muted="0" volume="1" name="FX 14">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="15" muted="0" volume="1" name="FX 15">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="16" muted="0" volume="1" name="FX 16">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="17" muted="0" volume="1" name="FX 17">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="18" muted="0" volume="1" name="FX 18">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="19" muted="0" volume="1" name="FX 19">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="20" muted="0" volume="1" name="FX 20">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="21" muted="0" volume="1" name="FX 21">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="22" muted="0" volume="1" name="FX 22">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="23" muted="0" volume="1" name="FX 23">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="24" muted="0" volume="1" name="FX 24">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="25" muted="0" volume="1" name="FX 25">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="26" muted="0" volume="1" name="FX 26">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="27" muted="0" volume="1" name="FX 27">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="28" muted="0" volume="1" name="FX 28">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="29" muted="0" volume="1" name="FX 29">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="30" muted="0" volume="1" name="FX 30">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="31" muted="0" volume="1" name="FX 31">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="32" muted="0" volume="1" name="FX 32">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="33" muted="0" volume="1" name="FX 33">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="34" muted="0" volume="1" name="FX 34">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="35" muted="0" volume="1" name="FX 35">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="36" muted="0" volume="1" name="FX 36">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="37" muted="0" volume="1" name="FX 37">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="38" muted="0" volume="1" name="FX 38">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="39" muted="0" volume="1" name="FX 39">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="40" muted="0" volume="1" name="FX 40">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="41" muted="0" volume="1" name="FX 41">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="42" muted="0" volume="1" name="FX 42">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="43" muted="0" volume="1" name="FX 43">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="44" muted="0" volume="1" name="FX 44">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="45" muted="0" volume="1" name="FX 45">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="46" muted="0" volume="1" name="FX 46">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="47" muted="0" volume="1" name="FX 47">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="48" muted="0" volume="1" name="FX 48">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="49" muted="0" volume="1" name="FX 49">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="50" muted="0" volume="1" name="FX 50">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="51" muted="0" volume="1" name="FX 51">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="52" muted="0" volume="1" name="FX 52">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="53" muted="0" volume="1" name="FX 53">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="54" muted="0" volume="1" name="FX 54">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="55" muted="0" volume="1" name="FX 55">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="56" muted="0" volume="1" name="FX 56">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="57" muted="0" volume="1" name="FX 57">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="58" muted="0" volume="1" name="FX 58">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="59" muted="0" volume="1" name="FX 59">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="60" muted="0" volume="1" name="FX 60">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="61" muted="0" volume="1" name="FX 61">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="62" muted="0" volume="1" name="FX 62">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="63" muted="0" volume="1" name="FX 63">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- <fxchannel num="64" muted="0" volume="1" name="FX 64">
- <fxchain numofeffects="0" enabled="0"/>
- </fxchannel>
- </fxmixer>
- <ControllerRackView width="258" x="880" y="310" maximized="0" height="172" visible="1" minimized="0"/>
- <pianoroll width="840" x="0" y="0" maximized="0" height="480" visible="0" minimized="0"/>
- <automationeditor width="740" x="0" y="0" maximized="0" height="480" visible="0" minimized="0"/>
- <projectnotes width="316" x="0" y="0" maximized="0" height="235" visible="0" minimized="0"><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Linux Biolinum O'; font-size:12pt; font-weight:400; font-style:normal;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'DejaVu Sans'; font-size:9pt;"></p></body></html>]]></projectnotes>
- <timeline lp1pos="192" lp0pos="0" lpstate="0"/>
- <controllers/>
- </song>
-</multimedia-project>
diff --git a/data/projects/OldStuff/TobyDox-Psycho.mmp b/data/projects/OldStuff/TobyDox-Psycho.mmp
deleted file mode 100644
index 703d94e..0000000
--- a/data/projects/OldStuff/TobyDox-Psycho.mmp
+++ /dev/null
@@ -1,1044 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE multimedia-project>
-<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-beta" type="song" >
- <head timesig_numerator="4" mastervol="98" timesig_denominator="4" bpm="180" masterpitch="0" />
- <song>
- <trackcontainer type="song" >
- <track muted="0" type="1" name="Raving crowd" >
- <bbtrack>
- <trackcontainer type="bbtrackcontainer" >
- <track muted="0" type="0" name="The Ultimate TB303" >
- <instrumenttrack pan="2" fxch="0" pitch="0" basenote="69" vol="55" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="shapes/micro.wav" finer0="0" userwavefile1="empty.wav" finer1="16" userwavefile2="empty.wav" finer2="14" coarse0="12" coarse1="0" coarse2="0" finel0="0" finel1="-25" modalgo1="2" modalgo2="1" finel2="-13" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="176" wavetype0="4" stphdetun2="0" wavetype1="2" wavetype2="0" vol0="100" vol1="200" phoffset0="0" phoffset1="78" vol2="69" />
- </instrument>
- <eldata fres="10" ftype="0" fcut="1296" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.209" lamt="0" syncmode="0" latt="0" rel="0.112" sus="0.998" amt="1" x100="0" att="0.066" lpdel="0" hold="0.043" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.165" lamt="0" syncmode="0" latt="0" rel="0" sus="0.998" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.2345" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="The Ultimate TB303" pos="1344" len="192" frozen="0" >
- <note pan="0" key="36" vol="100" pos="0" len="12" />
- <note pan="0" key="33" vol="100" pos="12" len="12" />
- <note pan="0" key="40" vol="100" pos="24" len="12" />
- <note pan="0" key="33" vol="100" pos="36" len="12" />
- <note pan="0" key="41" vol="100" pos="48" len="12" />
- <note pan="0" key="33" vol="100" pos="60" len="12" />
- <note pan="0" key="45" vol="100" pos="72" len="12" />
- <note pan="0" key="33" vol="100" pos="84" len="12" />
- <note pan="0" key="41" vol="100" pos="96" len="12" />
- <note pan="0" key="38" vol="100" pos="108" len="12" />
- <note pan="0" key="40" vol="100" pos="120" len="12" />
- <note pan="0" key="33" vol="100" pos="132" len="12" />
- <note pan="0" key="38" vol="100" pos="144" len="12" />
- <note pan="0" key="33" vol="100" pos="156" len="12" />
- <note pan="0" key="40" vol="100" pos="168" len="12" />
- <note pan="0" key="33" vol="100" pos="180" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="The Ultimate TB303" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="kick_hardcore01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="161" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.99957" sframe="0" src="drums/kick_hardcore01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="192" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="384" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1152" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="kick_distorted01.ogg" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="hihat_opened01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999603" sframe="0" src="drums/hihat_opened01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.623" lamt="0" syncmode="0" latt="0" rel="0.18" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0.261" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="576" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="hihat_opened01.ogg" pos="768" len="384" frozen="0" >
- <note pan="0" key="57" vol="5" pos="0" len="12" />
- <note pan="0" key="57" vol="10" pos="12" len="12" />
- <note pan="0" key="57" vol="12" pos="24" len="12" />
- <note pan="0" key="57" vol="15" pos="36" len="12" />
- <note pan="0" key="57" vol="17" pos="48" len="12" />
- <note pan="0" key="57" vol="20" pos="60" len="12" />
- <note pan="0" key="57" vol="22" pos="72" len="12" />
- <note pan="0" key="57" vol="25" pos="84" len="12" />
- <note pan="0" key="57" vol="27" pos="96" len="12" />
- <note pan="0" key="57" vol="30" pos="108" len="12" />
- <note pan="0" key="57" vol="35" pos="120" len="12" />
- <note pan="0" key="57" vol="40" pos="132" len="12" />
- <note pan="0" key="57" vol="45" pos="144" len="12" />
- <note pan="0" key="57" vol="50" pos="156" len="12" />
- <note pan="0" key="57" vol="55" pos="168" len="12" />
- <note pan="0" key="57" vol="60" pos="180" len="12" />
- <note pan="0" key="57" vol="65" pos="192" len="12" />
- <note pan="0" key="57" vol="70" pos="204" len="12" />
- <note pan="0" key="57" vol="75" pos="216" len="12" />
- <note pan="0" key="57" vol="80" pos="228" len="12" />
- <note pan="0" key="57" vol="85" pos="240" len="12" />
- <note pan="0" key="57" vol="90" pos="252" len="12" />
- <note pan="0" key="57" vol="95" pos="264" len="12" />
- <note pan="0" key="57" vol="95" pos="276" len="12" />
- <note pan="0" key="57" vol="90" pos="288" len="6" />
- <note pan="0" key="57" vol="85" pos="294" len="6" />
- <note pan="0" key="57" vol="80" pos="300" len="6" />
- <note pan="0" key="57" vol="75" pos="306" len="6" />
- <note pan="0" key="57" vol="70" pos="312" len="6" />
- <note pan="0" key="57" vol="75" pos="318" len="6" />
- <note pan="0" key="57" vol="80" pos="324" len="6" />
- <note pan="0" key="57" vol="85" pos="330" len="6" />
- <note pan="0" key="57" vol="90" pos="336" len="6" />
- <note pan="0" key="57" vol="95" pos="342" len="6" />
- <note pan="0" key="57" vol="100" pos="348" len="6" />
- <note pan="0" key="57" vol="105" pos="354" len="6" />
- <note pan="0" key="57" vol="110" pos="360" len="6" />
- <note pan="0" key="57" vol="115" pos="366" len="6" />
- <note pan="0" key="57" vol="110" pos="372" len="6" />
- <note pan="0" key="57" vol="100" pos="378" len="6" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1152" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_opened01.ogg" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="hihat_closed02.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.998414" sframe="0" src="drums/hihat_closed02.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="576" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="72" len="-192" />
- <note pan="0" key="57" vol="100" pos="120" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- <note pan="0" key="57" vol="100" pos="180" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="1152" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="hihat_closed02.ogg" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Analog Dreamz" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="35" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="15" userwavefile1="" finer1="-5" userwavefile2="" finer2="0" coarse0="-12" coarse1="-12" coarse2="-24" finel0="-18" finel1="14" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="4.73" ftype="1" fcut="164" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.216" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.629" lamt="0" syncmode="0" latt="0" rel="0.181" sus="0.717" amt="-0.58" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="115" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="11" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Analog Dreamz" pos="1536" len="576" frozen="0" >
- <note pan="0" key="58" vol="100" pos="0" len="12" />
- <note pan="0" key="55" vol="100" pos="12" len="12" />
- <note pan="0" key="50" vol="100" pos="24" len="12" />
- <note pan="0" key="58" vol="100" pos="36" len="12" />
- <note pan="0" key="55" vol="100" pos="48" len="12" />
- <note pan="0" key="50" vol="100" pos="60" len="12" />
- <note pan="0" key="58" vol="100" pos="72" len="12" />
- <note pan="0" key="55" vol="100" pos="84" len="12" />
- <note pan="0" key="50" vol="100" pos="96" len="12" />
- <note pan="0" key="58" vol="100" pos="108" len="12" />
- <note pan="0" key="55" vol="100" pos="120" len="12" />
- <note pan="0" key="50" vol="100" pos="132" len="12" />
- <note pan="0" key="58" vol="100" pos="144" len="12" />
- <note pan="0" key="55" vol="100" pos="156" len="12" />
- <note pan="0" key="51" vol="100" pos="168" len="12" />
- <note pan="0" key="58" vol="100" pos="180" len="12" />
- <note pan="0" key="55" vol="100" pos="192" len="12" />
- <note pan="0" key="51" vol="100" pos="204" len="12" />
- <note pan="0" key="58" vol="100" pos="216" len="12" />
- <note pan="0" key="55" vol="100" pos="228" len="12" />
- <note pan="0" key="51" vol="100" pos="240" len="12" />
- <note pan="0" key="58" vol="100" pos="252" len="12" />
- <note pan="0" key="55" vol="100" pos="264" len="12" />
- <note pan="0" key="51" vol="100" pos="276" len="12" />
- <note pan="0" key="58" vol="100" pos="288" len="12" />
- <note pan="0" key="55" vol="100" pos="300" len="12" />
- <note pan="0" key="50" vol="100" pos="312" len="12" />
- <note pan="0" key="58" vol="100" pos="324" len="12" />
- <note pan="0" key="55" vol="100" pos="336" len="12" />
- <note pan="0" key="50" vol="100" pos="348" len="12" />
- <note pan="0" key="58" vol="100" pos="360" len="12" />
- <note pan="0" key="55" vol="100" pos="372" len="12" />
- <note pan="0" key="50" vol="100" pos="384" len="12" />
- <note pan="0" key="58" vol="100" pos="396" len="12" />
- <note pan="0" key="55" vol="100" pos="408" len="12" />
- <note pan="0" key="50" vol="100" pos="420" len="12" />
- <note pan="0" key="57" vol="100" pos="432" len="12" />
- <note pan="0" key="53" vol="100" pos="444" len="12" />
- <note pan="0" key="50" vol="100" pos="456" len="12" />
- <note pan="0" key="57" vol="100" pos="468" len="12" />
- <note pan="0" key="53" vol="100" pos="480" len="12" />
- <note pan="0" key="50" vol="100" pos="492" len="12" />
- <note pan="0" key="57" vol="100" pos="504" len="12" />
- <note pan="0" key="53" vol="100" pos="516" len="12" />
- <note pan="0" key="50" vol="100" pos="528" len="12" />
- <note pan="0" key="57" vol="100" pos="540" len="12" />
- <note pan="0" key="53" vol="100" pos="552" len="12" />
- <note pan="0" key="50" vol="100" pos="564" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Analog Dreamz" pos="2688" len="192" frozen="0" >
- <note pan="0" key="58" vol="100" pos="0" len="45" />
- <note pan="0" key="53" vol="100" pos="48" len="45" />
- <note pan="0" key="49" vol="100" pos="96" len="45" />
- <note pan="0" key="53" vol="100" pos="144" len="45" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Analog Dreamz" pos="2880" len="576" frozen="0" >
- <note pan="0" key="55" vol="100" pos="0" len="12" />
- <note pan="0" key="50" vol="100" pos="12" len="12" />
- <note pan="0" key="43" vol="100" pos="24" len="12" />
- <note pan="0" key="55" vol="100" pos="36" len="12" />
- <note pan="0" key="50" vol="100" pos="48" len="12" />
- <note pan="0" key="43" vol="100" pos="60" len="12" />
- <note pan="0" key="55" vol="100" pos="72" len="12" />
- <note pan="0" key="50" vol="100" pos="84" len="12" />
- <note pan="0" key="43" vol="100" pos="96" len="12" />
- <note pan="0" key="55" vol="100" pos="108" len="12" />
- <note pan="0" key="50" vol="100" pos="120" len="12" />
- <note pan="0" key="43" vol="100" pos="132" len="12" />
- <note pan="0" key="55" vol="100" pos="144" len="12" />
- <note pan="0" key="50" vol="100" pos="156" len="12" />
- <note pan="0" key="43" vol="100" pos="168" len="12" />
- <note pan="0" key="55" vol="100" pos="180" len="12" />
- <note pan="0" key="50" vol="100" pos="192" len="12" />
- <note pan="0" key="43" vol="100" pos="204" len="12" />
- <note pan="0" key="55" vol="100" pos="216" len="12" />
- <note pan="0" key="50" vol="100" pos="228" len="12" />
- <note pan="0" key="43" vol="100" pos="240" len="12" />
- <note pan="0" key="55" vol="100" pos="252" len="12" />
- <note pan="0" key="50" vol="100" pos="264" len="12" />
- <note pan="0" key="43" vol="100" pos="276" len="12" />
- <note pan="0" key="43" vol="100" pos="288" len="276" />
- <note pan="0" key="50" vol="100" pos="288" len="276" />
- <note pan="0" key="55" vol="100" pos="288" len="276" />
- </pattern>
- </track>
- <track muted="0" type="0" name="crash01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="1" looped="0" eframe="0.999828" sframe="0" src="drums/crash01.ogg" amp="241" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="960" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Space Bass" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="81" vol="39" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="264" userwavefile0="empty.wav" finer0="0" userwavefile1="empty.wav" finer1="13" userwavefile2="empty.wav" finer2="-3" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-23" modalgo1="0" modalgo2="1" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="250" pan2="0" stphdetun1="50" wavetype0="2" stphdetun2="161" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="62" vol2="100" />
- </instrument>
- <eldata fres="1.46" ftype="1" fcut="1565" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.296" lamt="0" syncmode="0" latt="0" rel="0.219" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.223" lamt="0" syncmode="0" latt="0" rel="0" sus="0.998" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.767" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="-0.01" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="2" chord-enabled="1" />
- <arpeggiator arptime="167" arprange="2" arptime_denominator="1" syncmode="5" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="0" arpgate="78" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Space Bass" pos="1920" len="576" frozen="0" >
- <note pan="0" key="70" vol="100" pos="0" len="45" />
- <note pan="0" key="69" vol="100" pos="48" len="45" />
- <note pan="0" key="62" vol="100" pos="96" len="45" />
- <note pan="0" key="63" vol="100" pos="144" len="45" />
- <note pan="0" key="65" vol="100" pos="192" len="45" />
- <note pan="0" key="58" vol="100" pos="240" len="45" />
- <note pan="0" key="70" vol="100" pos="288" len="45" />
- <note pan="0" key="66" vol="100" pos="336" len="45" />
- <note pan="0" key="69" vol="100" pos="384" len="45" />
- <note pan="0" key="62" vol="100" pos="432" len="45" />
- <note pan="0" key="67" vol="100" pos="480" len="45" />
- <note pan="0" key="55" vol="100" pos="528" len="45" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Space Bass" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Analog Times" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="69" vol="100" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="empty.wav" finer0="0" userwavefile1="empty.wav" finer1="13" userwavefile2="empty.wav" finer2="-3" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="-14" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="50" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="0.09" ftype="6" fcut="1466" fwet="1" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.296" lamt="0" syncmode="0" latt="0" rel="0.312" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0917" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.223" lamt="0.635" syncmode="0" latt="0" rel="0" sus="0.998" amt="0.825" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.67" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="-0.01" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0" lshp="1" lspd="0.01" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="3" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="8" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Analog Times" pos="2112" len="192" frozen="0" >
- <note pan="0" key="70" vol="100" pos="0" len="12" />
- <note pan="0" key="68" vol="100" pos="24" len="12" />
- <note pan="0" key="70" vol="100" pos="48" len="12" />
- <note pan="0" key="70" vol="100" pos="72" len="12" />
- <note pan="0" key="70" vol="100" pos="96" len="12" />
- <note pan="0" key="73" vol="100" pos="120" len="12" />
- <note pan="0" key="70" vol="100" pos="144" len="12" />
- <note pan="0" key="65" vol="100" pos="168" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Analog Times" pos="2304" len="192" frozen="0" >
- <note pan="0" key="58" vol="100" pos="12" len="12" />
- <note pan="0" key="58" vol="100" pos="36" len="12" />
- <note pan="0" key="53" vol="100" pos="60" len="12" />
- <note pan="0" key="61" vol="100" pos="84" len="12" />
- <note pan="0" key="58" vol="100" pos="108" len="12" />
- <note pan="0" key="58" vol="100" pos="132" len="12" />
- <note pan="0" key="53" vol="100" pos="156" len="12" />
- <note pan="0" key="58" vol="100" pos="180" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Analog Times" pos="2496" len="192" frozen="0" >
- <note pan="0" key="43" vol="100" pos="0" len="24" />
- <note pan="0" key="43" vol="100" pos="24" len="48" />
- <note pan="0" key="39" vol="100" pos="48" len="48" />
- <note pan="0" key="31" vol="100" pos="72" len="42" />
- <note pan="0" key="34" vol="100" pos="96" len="42" />
- <note pan="0" key="33" vol="100" pos="120" len="42" />
- <note pan="0" key="38" vol="100" pos="144" len="48" />
- <note pan="0" key="36" vol="100" pos="168" len="24" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Times" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="crash01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999828" sframe="0" src="drums/crash01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1152" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="Analog Dreamz" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="35" >
- <instrument name="tripleoscillator" >
- <tripleoscillator phoffset2="0" userwavefile0="" finer0="15" userwavefile1="" finer1="-5" userwavefile2="" finer2="0" coarse0="-12" coarse1="-12" coarse2="-24" finel0="-18" finel1="14" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="0" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="2" stphdetun2="0" wavetype1="2" wavetype2="2" vol0="100" vol1="100" phoffset0="0" phoffset1="0" vol2="100" />
- </instrument>
- <eldata fres="4.73" ftype="1" fcut="280" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.209" sus="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.629" lamt="0" syncmode="0" latt="0" rel="0.181" sus="0.717" amt="0.155" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="115" arprange="2" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="1" arp="0" arptime_numerator="1" arpdir="1" arpgate="11" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Analog Dreamz" pos="1728" len="576" frozen="0" >
- <note pan="0" key="58" vol="100" pos="0" len="12" />
- <note pan="0" key="55" vol="100" pos="12" len="12" />
- <note pan="0" key="50" vol="100" pos="24" len="12" />
- <note pan="0" key="58" vol="100" pos="36" len="12" />
- <note pan="0" key="55" vol="100" pos="48" len="12" />
- <note pan="0" key="50" vol="100" pos="60" len="12" />
- <note pan="0" key="58" vol="100" pos="72" len="12" />
- <note pan="0" key="55" vol="100" pos="84" len="12" />
- <note pan="0" key="50" vol="100" pos="96" len="12" />
- <note pan="0" key="58" vol="100" pos="108" len="12" />
- <note pan="0" key="55" vol="100" pos="120" len="12" />
- <note pan="0" key="50" vol="100" pos="132" len="12" />
- <note pan="0" key="58" vol="100" pos="144" len="12" />
- <note pan="0" key="55" vol="100" pos="156" len="12" />
- <note pan="0" key="51" vol="100" pos="168" len="12" />
- <note pan="0" key="58" vol="100" pos="180" len="12" />
- <note pan="0" key="55" vol="100" pos="192" len="12" />
- <note pan="0" key="51" vol="100" pos="204" len="12" />
- <note pan="0" key="58" vol="100" pos="216" len="12" />
- <note pan="0" key="55" vol="100" pos="228" len="12" />
- <note pan="0" key="51" vol="100" pos="240" len="12" />
- <note pan="0" key="58" vol="100" pos="252" len="12" />
- <note pan="0" key="55" vol="100" pos="264" len="12" />
- <note pan="0" key="51" vol="100" pos="276" len="12" />
- <note pan="0" key="58" vol="100" pos="288" len="12" />
- <note pan="0" key="55" vol="100" pos="300" len="12" />
- <note pan="0" key="50" vol="100" pos="312" len="12" />
- <note pan="0" key="58" vol="100" pos="324" len="12" />
- <note pan="0" key="55" vol="100" pos="336" len="12" />
- <note pan="0" key="50" vol="100" pos="348" len="12" />
- <note pan="0" key="58" vol="100" pos="360" len="12" />
- <note pan="0" key="55" vol="100" pos="372" len="12" />
- <note pan="0" key="50" vol="100" pos="384" len="12" />
- <note pan="0" key="58" vol="100" pos="396" len="12" />
- <note pan="0" key="55" vol="100" pos="408" len="12" />
- <note pan="0" key="50" vol="100" pos="420" len="12" />
- <note pan="0" key="57" vol="100" pos="432" len="12" />
- <note pan="0" key="53" vol="100" pos="444" len="12" />
- <note pan="0" key="50" vol="100" pos="456" len="12" />
- <note pan="0" key="57" vol="100" pos="468" len="12" />
- <note pan="0" key="53" vol="100" pos="480" len="12" />
- <note pan="0" key="50" vol="100" pos="492" len="12" />
- <note pan="0" key="57" vol="100" pos="504" len="12" />
- <note pan="0" key="53" vol="100" pos="516" len="12" />
- <note pan="0" key="50" vol="100" pos="528" len="12" />
- <note pan="0" key="57" vol="100" pos="540" len="12" />
- <note pan="0" key="53" vol="100" pos="552" len="12" />
- <note pan="0" key="50" vol="100" pos="564" len="12" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Analog Dreamz" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="1" name="Analog Dreamz" pos="2688" len="192" frozen="0" >
- <note pan="0" key="58" vol="100" pos="0" len="45" />
- <note pan="0" key="53" vol="100" pos="48" len="45" />
- <note pan="0" key="49" vol="100" pos="96" len="45" />
- <note pan="0" key="53" vol="100" pos="144" len="45" />
- </pattern>
- <pattern steps="16" muted="0" type="1" name="Analog Dreamz" pos="2880" len="384" frozen="0" >
- <note pan="0" key="55" vol="100" pos="0" len="12" />
- <note pan="0" key="50" vol="100" pos="12" len="12" />
- <note pan="0" key="43" vol="100" pos="24" len="12" />
- <note pan="0" key="55" vol="100" pos="36" len="12" />
- <note pan="0" key="50" vol="100" pos="48" len="12" />
- <note pan="0" key="43" vol="100" pos="60" len="12" />
- <note pan="0" key="55" vol="100" pos="72" len="12" />
- <note pan="0" key="50" vol="100" pos="84" len="12" />
- <note pan="0" key="43" vol="100" pos="96" len="12" />
- <note pan="0" key="55" vol="100" pos="108" len="12" />
- <note pan="0" key="50" vol="100" pos="120" len="12" />
- <note pan="0" key="43" vol="100" pos="132" len="12" />
- <note pan="0" key="55" vol="100" pos="144" len="12" />
- <note pan="0" key="50" vol="100" pos="156" len="12" />
- <note pan="0" key="43" vol="100" pos="168" len="12" />
- <note pan="0" key="55" vol="100" pos="180" len="12" />
- <note pan="0" key="50" vol="100" pos="192" len="12" />
- <note pan="0" key="43" vol="100" pos="204" len="12" />
- <note pan="0" key="55" vol="100" pos="216" len="12" />
- <note pan="0" key="50" vol="100" pos="228" len="12" />
- <note pan="0" key="43" vol="100" pos="240" len="12" />
- <note pan="0" key="55" vol="100" pos="252" len="12" />
- <note pan="0" key="50" vol="100" pos="264" len="12" />
- <note pan="0" key="43" vol="100" pos="276" len="12" />
- </pattern>
- </track>
- <track muted="0" type="0" name="raving_crowd01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="112" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="1" eframe="0.999986" sframe="0" src="misc/raving_crowd01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.085" sus="0" amt="1" x100="0" att="0.093" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="1" name="raving_crowd01.ogg" pos="0" len="1536" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="1536" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="raving_crowd01.ogg" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="kick_distorted01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="165" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="0" looped="0" eframe="0.999687" sframe="0" src="drums/kick_distorted01.ogg" amp="100" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="Default" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="192" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- <note pan="0" key="57" vol="100" pos="96" len="-192" />
- <note pan="0" key="57" vol="100" pos="144" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="384" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="132" len="-192" />
- <note pan="0" key="57" vol="100" pos="168" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="960" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1152" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="0" len="-192" />
- <note pan="0" key="57" vol="100" pos="12" len="-192" />
- <note pan="0" key="57" vol="100" pos="24" len="-192" />
- <note pan="0" key="57" vol="100" pos="60" len="-192" />
- <note pan="0" key="57" vol="100" pos="84" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="Default" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="Default" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="snare01.ogg" pos="2880" len="192" frozen="0" />
- </track>
- <track muted="0" type="0" name="crash01.ogg" >
- <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
- <instrument name="audiofileprocessor" >
- <audiofileprocessor reversed="1" looped="0" eframe="0.999828" sframe="0" src="drums/crash01.ogg" amp="241" />
- </instrument>
- <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
- <elvol lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elcut lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- <elres lspd_denominator="1" pdel="0" userwavefile="" dec="0.499" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.499" amt="0" x100="0" att="0" lpdel="0" hold="0.499" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="1" />
- </eldata>
- <chordcreator chord="0" chordrange="1" chord-enabled="1" />
- <arpeggiator arptime="100" arprange="1" arptime_denominator="1" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="1" arpdir="0" arpgate="100" />
- <midiport inputcontroller="0" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" defvelout="0" readable="0" defvelin="0" />
- <fxchain numofeffects="0" enabled="0" />
- </instrumenttrack>
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="0" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="192" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="384" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="576" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="768" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="960" len="192" frozen="0" >
- <note pan="0" key="57" vol="100" pos="48" len="-192" />
- </pattern>
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1152" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1344" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1536" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1728" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="1920" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2112" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2304" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2496" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2688" len="192" frozen="0" />
- <pattern steps="16" muted="0" type="0" name="crash01.ogg" pos="2880" len="192" frozen="0" />
- </track>
- </trackcontainer>
- </bbtrack>
- <bbtco muted="0" name="Raving crowd" pos="0" color="4283782655" len="24576" />
- </track>
- <track muted="0" type="1" name="Kick" >
- <bbtrack/>
- <bbtco muted="0" name="Kick" pos="192" color="4278255360" len="3456" />
- <bbtco muted="0" name="Kick" pos="4800" color="4278255360" len="7488" />
- <bbtco muted="0" name="Kick" pos="13440" color="4278255360" len="1152" />
- <bbtco muted="0" name="Kick" pos="19584" color="4278255360" len="3840" />
- <bbtco muted="0" name="Kick" pos="16128" color="4278255360" len="2496" />
- </track>
- <track muted="0" type="1" name="KickRoll" >
- <bbtrack/>
- <bbtco muted="0" name="KickRoll" pos="384" color="4278233600" len="192" />
- <bbtco muted="0" name="KickRoll" pos="768" color="4278233600" len="192" />
- <bbtco muted="0" name="KickRoll" pos="1344" color="4278233600" len="192" />
- <bbtco muted="0" name="KickRoll" pos="2880" color="4278233600" len="192" />
- <bbtco muted="0" name="KickRoll" pos="2112" color="4278233600" len="192" />
- </track>
- <track muted="0" type="1" name="HiHats" >
- <bbtrack/>
- <bbtco muted="0" name="HiHats" pos="960" color="4283826175" len="2688" />
- <bbtco muted="0" name="HiHats" pos="5952" color="4278255615" len="5184" />
- <bbtco muted="0" name="HiHats" pos="12288" color="4278255615" len="2304" />
- <bbtco muted="0" name="HiHats" pos="15360" color="4278255615" len="8064" />
- </track>
- <track muted="0" type="1" name="HiHat-Roll" >
- <bbtrack/>
- <bbtco muted="0" name="HiHat-Roll" pos="3264" color="4278239167" len="384" />
- <bbtco muted="0" name="HiHat-Roll" pos="6720" color="4278239167" len="384" />
- <bbtco muted="0" name="HiHat-Roll" pos="10752" color="4278239167" len="384" />
- <bbtco muted="0" name="HiHat-Roll" pos="14208" color="4278239167" len="384" />
- <bbtco muted="0" name="HiHat-Roll" pos="15744" color="4278239167" len="384" />
- <bbtco muted="0" name="HiHat-Roll" pos="19776" color="4278239167" len="384" />
- <bbtco muted="0" name="HiHat-Roll" pos="23040" color="4278239167" len="384" />
- </track>
- <track muted="0" type="1" name="RevCrash" >
- <bbtrack/>
- <bbtco muted="0" name="RevCrash" pos="1536" color="4278230686" len="192" />
- <bbtco muted="0" name="RevCrash" pos="5760" color="4278230686" len="192" />
- </track>
- <track muted="0" type="1" name="Cool Roll" >
- <bbtrack/>
- <bbtco muted="0" name="EndSeq" pos="20160" color="4289353215" len="192" />
- </track>
- <track muted="0" type="1" name="Ultimate TB303" >
- <bbtrack/>
- <bbtco muted="0" name="Ultimate TB303" pos="1728" color="4294902015" len="1920" />
- <bbtco muted="0" name="Ultimate TB303" pos="11136" color="4294902015" len="1728" />
- </track>
- <track muted="0" type="1" name="HiFlow #1" >
- <bbtrack/>
- <bbtco muted="0" name="HiFlow #1" pos="3648" color="4294945280" len="7488" />
- <bbtco muted="0" name="HiFlow #1" pos="11712" color="4294945280" len="2880" />
- <bbtco muted="0" name="HiFlow #1" pos="20544" color="4294945280" len="4032" />
- </track>
- <track muted="0" type="1" name="HiFlow #2" >
- <bbtrack/>
- <bbtco muted="0" name="HiFlow #2" pos="7104" color="4294950912" len="4032" />
- <bbtco muted="0" name="HiFlow #2" pos="21696" color="4294950912" len="2880" />
- </track>
- <track muted="0" type="1" name="Lead #1" >
- <bbtrack/>
- <bbtco muted="0" name="Lead #1" pos="8256" color="4294957056" len="6336" />
- </track>
- <track muted="0" type="1" name="Lead #2" >
- <bbtrack/>
- <bbtco muted="0" name="Lead #2" pos="14592" color="4294961152" len="4224" />
- </track>
- <track muted="0" type="1" name="Lead #3" >
- <bbtrack/>
- <bbtco muted="0" name="Lead #3" pos="16128" color="4294967040" len="2112" />
- </track>
- <track muted="0" type="1" name="Bass" >
- <bbtrack/>
- <bbtco muted="0" name="Bass" pos="9408" color="4278233727" len="1728" />
- <bbtco muted="0" name="Bass" pos="12864" color="4278233727" len="1728" />
- <bbtco muted="0" name="Bass" pos="21120" color="4278233727" len="4032" />
- </track>
- <track muted="0" type="1" name="Bass #2" >
- <bbtrack/>
- <bbtco muted="0" name="Bass #2" pos="17664" color="4282615653" len="2496" />
- </track>
- <track muted="0" type="1" name="EndSeq" >
- <bbtrack/>
- <bbtco muted="0" name="Beat/Baseline 15" pos="24576" color="4294948864" len="576" />
- </track>
- </trackcontainer>
- <track muted="0" type="6" name="Automation track" >
- <automationtrack/>
- </track>
- <fxmixer>
- <fxchannel num="0" muted="0" volume="0.81" name="Master" >
- <fxchain numofeffects="1" enabled="1" >
- <effect key="AAAACQAAAAACAAAACgAAAAAsAEYAYQBzAHQAIABMAG8AbwBrAGEAaABlAGEAZAAgAGwAaQBtAGkAdABlAHIAAAALAAAAAAIAAAAoAGYAYQBzAHQATABvAG8AawBhAGgAZQBhAGQATABpAG0AaQB0AGUAcgAAADwAZgBhAHMAdABfAGwAbwBvAGsAYQBoAGUAYQBkAF8AbABpAG0AaQB0AGUAcgBfADEAOQAxADMALgBzAG8=" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1" >
- <ladspacontrols port00="-12.8" port01="0" port02="328.35" syncmode="0" port02_numerator="4" ports="3" port02_denominator="4" />
- </effect>
- </fxchain>
- </fxchannel>
- <fxchannel num="1" muted="0" volume="1" name="FX 1" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="2" muted="0" volume="1" name="FX 2" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="3" muted="0" volume="1" name="FX 3" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="4" muted="0" volume="1" name="FX 4" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="5" muted="0" volume="1" name="FX 5" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="6" muted="0" volume="1" name="FX 6" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="7" muted="0" volume="1" name="FX 7" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="8" muted="0" volume="1" name="FX 8" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="9" muted="0" volume="1" name="FX 9" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="10" muted="0" volume="1" name="FX 10" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="11" muted="0" volume="1" name="FX 11" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="12" muted="0" volume="1" name="FX 12" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="13" muted="0" volume="1" name="FX 13" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="14" muted="0" volume="1" name="FX 14" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="15" muted="0" volume="1" name="FX 15" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="16" muted="0" volume="1" name="FX 16" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="17" muted="0" volume="1" name="FX 17" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="18" muted="0" volume="1" name="FX 18" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="19" muted="0" volume="1" name="FX 19" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="20" muted="0" volume="1" name="FX 20" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="21" muted="0" volume="1" name="FX 21" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="22" muted="0" volume="1" name="FX 22" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="23" muted="0" volume="1" name="FX 23" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="24" muted="0" volume="1" name="FX 24" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="25" muted="0" volume="1" name="FX 25" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="26" muted="0" volume="1" name="FX 26" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="27" muted="0" volume="1" name="FX 27" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="28" muted="0" volume="1" name="FX 28" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="29" muted="0" volume="1" name="FX 29" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="30" muted="0" volume="1" name="FX 30" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="31" muted="0" volume="1" name="FX 31" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="32" muted="0" volume="1" name="FX 32" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="33" muted="0" volume="1" name="FX 33" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="34" muted="0" volume="1" name="FX 34" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="35" muted="0" volume="1" name="FX 35" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="36" muted="0" volume="1" name="FX 36" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="37" muted="0" volume="1" name="FX 37" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="38" muted="0" volume="1" name="FX 38" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="39" muted="0" volume="1" name="FX 39" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="40" muted="0" volume="1" name="FX 40" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="41" muted="0" volume="1" name="FX 41" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="42" muted="0" volume="1" name="FX 42" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="43" muted="0" volume="1" name="FX 43" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="44" muted="0" volume="1" name="FX 44" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="45" muted="0" volume="1" name="FX 45" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="46" muted="0" volume="1" name="FX 46" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="47" muted="0" volume="1" name="FX 47" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="48" muted="0" volume="1" name="FX 48" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="49" muted="0" volume="1" name="FX 49" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="50" muted="0" volume="1" name="FX 50" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="51" muted="0" volume="1" name="FX 51" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="52" muted="0" volume="1" name="FX 52" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="53" muted="0" volume="1" name="FX 53" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="54" muted="0" volume="1" name="FX 54" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="55" muted="0" volume="1" name="FX 55" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="56" muted="0" volume="1" name="FX 56" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="57" muted="0" volume="1" name="FX 57" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="58" muted="0" volume="1" name="FX 58" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="59" muted="0" volume="1" name="FX 59" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="60" muted="0" volume="1" name="FX 60" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="61" muted="0" volume="1" name="FX 61" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="62" muted="0" volume="1" name="FX 62" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="63" muted="0" volume="1" name="FX 63" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- <fxchannel num="64" muted="0" volume="1" name="FX 64" >
- <fxchain numofeffects="0" enabled="0" />
- </fxchannel>
- </fxmixer>
- <pianoroll width="640" x="58" y="119" height="480" visible="0" />
- <automationeditor width="740" x="0" y="0" height="480" visible="0" />
- <projectnotes width="483" x="0" y="180" height="249" visible="1" ><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
-<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-size:16pt; font-weight:600; font-style:italic;">TobyDox - "Psycho"</span></p>
-<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:10pt;"><span style=" font-weight:600; color:#ffcc00;">This is the first song written with LMMS being longer than only some tacts. Maybe you like it...</span></p></body></html>]]></projectnotes>
- <timeline lp1pos="5376" lp0pos="0" lpstate="0" />
- <controllers/>
- </song>
-</multimedia-project>
diff --git a/data/projects/Shorties/LICENSES.TXT b/data/projects/Shorties/LICENSES.TXT
index 336a93b..871bee6 100644
--- a/data/projects/Shorties/LICENSES.TXT
+++ b/data/projects/Shorties/LICENSES.TXT
@@ -1,15 +1,15 @@
* Greshz-CoolSnip.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=1170
+ - http://lmms.io/lsp/index.php?action=show&file=1170
* Root84-TrancyLoop.mmpz
- Yellow openmusic
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=246
+ - http://lmms.io/lsp/index.php?action=show&file=246
* Skiessi-222.mmpz
- CC (by-sa)
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=543
+ - http://lmms.io/lsp/index.php?action=show&file=543
* Surrender-Main.mmpz
- Artistic 2.0
- - http://lmms.sourceforge.net/lsp/index.php?action=show&file=489
+ - http://lmms.io/lsp/index.php?action=show&file=489
diff --git a/data/scripts/create_apple_dmg.sh.in b/data/scripts/create_apple_dmg.sh.in
index eb77b75..508b455 100644
--- a/data/scripts/create_apple_dmg.sh.in
+++ b/data/scripts/create_apple_dmg.sh.in
@@ -16,10 +16,11 @@ DMG_BACKGROUND_IMG="dmg_branding.png"
cp "@CMAKE_SOURCE_DIR@/data/${DMG_BACKGROUND_IMG}" .
# you should not need to change these
+OS_VER=`sw_vers -productVersion|cut -d"." -f1-2`
APP_LOWERCASE=$(echo $APP_NAME|tr '[:upper:]' '[:lower:]')
APP_EXE="${APP_NAME}.app/Contents/MacOS/${APP_LOWERCASE}"
-VOL_NAME="${APP_NAME} ${VERSION}" # volume name will be "SuperCoolApp 1.0.0"
+VOL_NAME="${APP_LOWERCASE}-${VERSION}-mac${OS_VER}" # volume name will be "SuperCoolApp 1.0.0"
DMG_TMP="${VOL_NAME}-temp.dmg"
DMG_FINAL="${VOL_NAME}.dmg" # final DMG name will be "SuperCoolApp 1.0.0.dmg"
STAGING_DIR="./Install" # we copy all our stuff into this dir
diff --git a/data/themes/default/background_artwork.png b/data/themes/default/background_artwork.png
index 8725e66..918fc27 100644
Binary files a/data/themes/default/background_artwork.png and b/data/themes/default/background_artwork.png differ
diff --git a/data/themes/default/fader_background.png b/data/themes/default/fader_background.png
index 2c0d0dd..682ff4c 100644
Binary files a/data/themes/default/fader_background.png and b/data/themes/default/fader_background.png differ
diff --git a/data/themes/default/help.png b/data/themes/default/help.png
index 86b6407..f38f9a7 100644
Binary files a/data/themes/default/help.png and b/data/themes/default/help.png differ
diff --git a/data/themes/default/loop_point.png b/data/themes/default/loop_point.png
deleted file mode 100644
index be64992..0000000
Binary files a/data/themes/default/loop_point.png and /dev/null differ
diff --git a/data/themes/default/loop_point_b.png b/data/themes/default/loop_point_b.png
new file mode 100644
index 0000000..bcd65ad
Binary files /dev/null and b/data/themes/default/loop_point_b.png differ
diff --git a/data/themes/default/loop_point_e.png b/data/themes/default/loop_point_e.png
new file mode 100644
index 0000000..40fdad9
Binary files /dev/null and b/data/themes/default/loop_point_e.png differ
diff --git a/data/themes/default/mixer_send_off.png b/data/themes/default/mixer_send_off.png
new file mode 100644
index 0000000..3033c49
Binary files /dev/null and b/data/themes/default/mixer_send_off.png differ
diff --git a/data/themes/default/mixer_send_on.png b/data/themes/default/mixer_send_on.png
new file mode 100644
index 0000000..776398e
Binary files /dev/null and b/data/themes/default/mixer_send_on.png differ
diff --git a/data/themes/default/new_channel.png b/data/themes/default/new_channel.png
new file mode 100644
index 0000000..8a27695
Binary files /dev/null and b/data/themes/default/new_channel.png differ
diff --git a/data/themes/default/pat_rec.png b/data/themes/default/pat_rec.png
new file mode 100644
index 0000000..5c0ed94
Binary files /dev/null and b/data/themes/default/pat_rec.png differ
diff --git a/data/themes/default/random_wave_active.png b/data/themes/default/random_wave_active.png
new file mode 100644
index 0000000..b65a9a0
Binary files /dev/null and b/data/themes/default/random_wave_active.png differ
diff --git a/data/themes/default/random_wave_inactive.png b/data/themes/default/random_wave_inactive.png
new file mode 100644
index 0000000..4718454
Binary files /dev/null and b/data/themes/default/random_wave_inactive.png differ
diff --git a/data/themes/default/receive_bg_arrow.png b/data/themes/default/receive_bg_arrow.png
new file mode 100644
index 0000000..f456176
Binary files /dev/null and b/data/themes/default/receive_bg_arrow.png differ
diff --git a/data/themes/default/send_bg_arrow.png b/data/themes/default/send_bg_arrow.png
new file mode 100644
index 0000000..8c4bfcf
Binary files /dev/null and b/data/themes/default/send_bg_arrow.png differ
diff --git a/data/themes/default/soundfont_file.png b/data/themes/default/soundfont_file.png
new file mode 100644
index 0000000..774c824
Binary files /dev/null and b/data/themes/default/soundfont_file.png differ
diff --git a/data/themes/default/style.css b/data/themes/default/style.css
index 4b4bfc1..005cc57 100644
--- a/data/themes/default/style.css
+++ b/data/themes/default/style.css
@@ -7,16 +7,24 @@ QLabel, QTreeWidget, QListWidget, QGroupBox {
color: #e0e0e0;
}
-QWhatsThat {
- color: black;
-}
-
QMdiArea {
background-image: url(resources:background_artwork.png);
}
AutomationEditor {
background-color: rgb(0, 0, 0);
+ color: #e0e0e0;
+ qproperty-vertexColor: #ff77af;
+ qproperty-gridColor: #808080;
+
+ qproperty-graphColor: qlineargradient(spread:reflect,
+ x1:0, y1:0, x2:0, y2:1,
+ stop:0 rgba(153, 175, 255, 250), stop:1 rgba(153, 175, 255, 100));
+ /*#99afff;*/
+ qproperty-scaleColor: qlineargradient(spread:reflect,
+ x1:0, y1:0.5, x2:1, y2:0.5,
+ stop:0 #333, stop:1 #202020);
+ /*rgb( 32, 32, 32 );*/
}
/* text box */
@@ -43,6 +51,14 @@ QToolTip {
color: #4afd85;
}
+textFloat {
+ border-radius: 4px;
+ background: qlineargradient(spread:reflect, x1:0.5, y1:0.5, x2:0.5, y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(50, 50, 50, 220));
+ opacity: 175;
+ border: 1.0px solid rgba(0,0,0,255);
+ color: #4afd85;
+}
+
QMenu {
border:1px solid #747474;
@@ -67,13 +83,11 @@ QMenu::item:selected {
color: white;
font-weight:bold;
background-color: #747474;
- margin:3px;
}
QMenu::item:disabled {
color: #747474;
background-color: #c9c9c9;
- margin:0px;
font-size:12px;
font-weight: normal;
padding: 4px 32px 4px 20px;
@@ -97,6 +111,10 @@ QMenu::indicator:selected {
PianoRoll {
background-color: rgb(0, 0, 0);
+ qproperty-gridColor: rgb( 128, 128, 128 );
+ qproperty-noteModeColor: rgb( 255, 255, 255 );
+ qproperty-noteColor: rgb( 119, 199, 216 );
+ qproperty-barColor: #4afd85;
}
/* main toolbar oscilloscope - can have transparent bg now */
@@ -243,13 +261,22 @@ TrackContainerView QFrame{
/* autoscroll, loop, stop behaviour toggle buttons */
-nStateButton {
+nStateButton {
max-height: 26px;
max-width: 26px;
min-height: 26px;
min-width: 26px;
}
+/* track background colors */
+trackContentWidget {
+ qproperty-darkerColor: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+ stop:0 rgb( 50, 50, 50 ), stop:0.33 rgb( 20, 20, 20 ), stop:1 rgb( 15, 15, 15 ) );
+ qproperty-lighterColor: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+ stop:0 rgb( 50, 50, 50 ), stop:0.33 rgb( 40, 40, 40 ), stop:1 rgb( 30, 30, 30 ) );
+}
+
+
/* gear button in tracks */
trackOperationsWidget > QPushButton {
@@ -371,7 +398,7 @@ toolButton#playButton {
toolButton#stopButton {
border-top-right-radius: 5px 15px;
- border-bottom-right-radius: 5px 15px;
+ border-bottom-right-radius: 5px 15px;
}
/* record and record-accompany can be styled with #recordButton and #recordAccompanyButton respectively */
@@ -459,6 +486,19 @@ FxMixerView QPushButton, EffectRackView QPushButton, ControllerRackView QPushBut
font-size: 10px;
}
+FxLine {
+ background: #5b6571;
+ color: #e0e0e0;
+ qproperty-backgroundActive: qlineargradient(spread:reflect, x1:0, y1:0, x2:1, y2:0,
+ stop:0 #7b838d, stop:1 #6b7581 );
+}
+
+/* persistent peak markers for fx peak meters */
+fader {
+ qproperty-peakGreen: rgb( 74, 253, 133);
+ qproperty-peakRed: rgb( 255, 100, 100);
+}
+
timeLine {
font-size: 8px;
}
@@ -475,18 +515,30 @@ TrackContainerView QLabel
/* Patterns */
/* instrument pattern */
-patternView {
+PatternView {
color: rgb( 119, 199, 216 );
+ qproperty-fgColor: rgb( 187, 227, 236 );
+ qproperty-textColor: rgb( 255, 255, 255 );
}
/* sample track pattern */
SampleTCOView {
color: rgb( 74, 253, 133 );
+ qproperty-fgColor: rgb( 187, 227, 236 );
+ qproperty-textColor: rgb( 255, 60, 60 );
}
/* automation pattern */
AutomationPatternView {
color: #99afff;
+ qproperty-fgColor: rgb( 204, 215, 255 );
+ qproperty-textColor: rgb( 255, 255, 255 );
+}
+
+/* bb-pattern */
+bbTCOView {
+ color: rgb( 128, 182, 175 ); /* default colour for bb-tracks, used when the colour hasn't been defined by the user */
+ qproperty-textColor: rgb( 255, 255, 255 );
}
/* Plugins */
@@ -502,13 +554,24 @@ TripleOscillatorView knob {
}
-kickerInstrumentView knob {
- color: rgb(240, 147, 14);
- qproperty-outerColor: rgb(30, 35, 37);
- qproperty-innerRadius: 4;
- qproperty-outerRadius: 11.2;
- qproperty-centerPointX: 18.5;
- qproperty-centerPointY: 13.5;
+kickerInstrumentView knob#smallKnob {
+ color: #595959;
+ qproperty-outerColor: black;
+ qproperty-innerRadius: 3;
+ qproperty-outerRadius: 11.0;
+ qproperty-centerPointX: 14.5;
+ qproperty-centerPointY: 14.5;
+ qproperty-lineWidth: 2;
+}
+
+
+kickerInstrumentView knob#largeKnob {
+ color: #0c3b89;
+ qproperty-outerColor: #519fff;
+ qproperty-innerRadius: 12.0;
+ qproperty-outerRadius: 14.5;
+ qproperty-centerPointX: 17.0;
+ qproperty-centerPointY: 17.0;
qproperty-lineWidth: 3;
}
@@ -524,24 +587,29 @@ AudioFileProcessorView knob {
}
organicInstrumentView knob {
- color: rgb(205, 16, 216);
- qproperty-outerColor: rgb(23, 9, 24);
- /*qproperty-outerColor: rgb(64, 21, 67);*/
+ color: rgb(124, 207, 98);
+ qproperty-outerColor: rgb(13, 42, 4);
qproperty-innerRadius: 2;
- qproperty-outerRadius: 8.7;
+ qproperty-outerRadius: 7.5;
qproperty-centerPointX: 10.5;
qproperty-centerPointY: 10.5;
- qproperty-lineWidth: 2;
+ qproperty-lineWidth: 1.5;
}
+organicInstrumentView knob#harmKnob {
+ color: rgb(205, 98, 216);
+ qproperty-outerColor: rgb(18, 4, 18);
+}
organicInstrumentView knob#fx1Knob,
organicInstrumentView knob#volKnob {
+ color: rgb(157, 157, 157);
+ qproperty-outerColor: rgb(37, 37, 37);
qproperty-innerRadius: 4;
- qproperty-outerRadius: 11.2;
+ qproperty-outerRadius: 10.0;
qproperty-centerPointX: 18.5;
qproperty-centerPointY: 13.8;
- qproperty-lineWidth: 3;
+ qproperty-lineWidth: 2;
}
sf2InstrumentView knob {
@@ -613,17 +681,77 @@ sidInstrumentView knob {
qproperty-lineWidth: 2;
}
-/* palette information - each colour definition must be on a single line, and the line must begin with "palette:", with no leading whitespace
- * colour codes MUST be of the form #RRGGBB */
+WatsynView knob {
+ qproperty-innerRadius: 1;
+ qproperty-outerRadius: 7;
+ qproperty-centerPointX: 9.5;
+ qproperty-centerPointY: 9.5;
+ qproperty-lineWidth: 2;
+}
-palette:background {color: #5b6571}
-palette:windowtext {color: #f0f0f0}
-palette:base {color: #808080}
-palette:text {color: #e0e0e0}
-palette:button {color: #c9c9c9}
-palette:shadow {color: #000000}
-palette:buttontext {color: #000000}
-palette:brighttext {color: #4afd85}
-palette:highlight {color: #202020}
-palette:highlightedtext {color: #ffffff}
+WatsynView knob#aKnob {
+ color: #43b2ff;
+ qproperty-outerColor: #43b2ff;
+}
+
+WatsynView knob#bKnob {
+ color: #fc5431;
+ qproperty-outerColor: #fc5431;
+}
+
+WatsynView knob#mixKnob {
+ color: #43ff82;
+ qproperty-outerColor: #43ff82;
+ qproperty-outerRadius: 13;
+ qproperty-centerPointX: 15.5;
+ qproperty-centerPointY: 15.5;
+}
+
+WatsynView knob#mixenvKnob {
+ color: #43ff82;
+ qproperty-outerColor: #43ff82;
+}
+
+WatsynView knob#xtalkKnob {
+ color: #fb50fb;
+ qproperty-outerColor: #fb50fb;
+}
+
+MonstroView knob {
+ color: #ffffff;
+ qproperty-outerColor: #aaaaaa;
+ qproperty-outerRadius: 9;
+ qproperty-innerRadius: 6;
+ qproperty-centerPointX: 10;
+ qproperty-centerPointY: 10;
+ qproperty-lineWidth: 2.5;
+}
+
+NesInstrumentView knob {
+ color: #e7231b;
+ qproperty-outerColor: #fff;
+ qproperty-outerRadius: 11.0;
+ qproperty-innerRadius: 8.0;
+ qproperty-centerPointX: 14.5;
+ qproperty-centerPointY: 14.5;
+ qproperty-lineWidth: 2;
+}
+
+/* palette information */
+
+LmmsPalette {
+ qproperty-background: #5b6571;
+ qproperty-windowText: #f0f0f0;
+ qproperty-base: #808080;
+ qproperty-text: #e0e0e0;
+ qproperty-button: #c9c9c9;
+ qproperty-shadow: #000;
+ qproperty-buttonText: #000;
+ qproperty-brightText: #4afd85;
+ qproperty-highlight: #202020;
+ qproperty-highlightedText: #ffffff;
+ /* the next two are used for whatsthis dialogs */
+ qproperty-toolTipText: #000;
+ qproperty-toolTipBase: #c9c9c9;
+}
diff --git a/data/themes/default/vst_plugin_file.png b/data/themes/default/vst_plugin_file.png
new file mode 100644
index 0000000..caca1e4
Binary files /dev/null and b/data/themes/default/vst_plugin_file.png differ
diff --git a/data/themes/default/whatsthis.png b/data/themes/default/whatsthis.png
index 55cc0c9..cad033f 100644
Binary files a/data/themes/default/whatsthis.png and b/data/themes/default/whatsthis.png differ
diff --git a/data/wavetables/CMakeLists.txt b/data/wavetables/CMakeLists.txt
new file mode 100644
index 0000000..9089171
--- /dev/null
+++ b/data/wavetables/CMakeLists.txt
@@ -0,0 +1,2 @@
+FILE(GLOB WAVETABLES *.bin)
+INSTALL(FILES ${WAVETABLES} DESTINATION "${LMMS_DATA_DIR}/wavetables")
diff --git a/data/wavetables/moog.bin b/data/wavetables/moog.bin
new file mode 100644
index 0000000..4dda320
Binary files /dev/null and b/data/wavetables/moog.bin differ
diff --git a/data/wavetables/saw.bin b/data/wavetables/saw.bin
new file mode 100644
index 0000000..57b6a13
Binary files /dev/null and b/data/wavetables/saw.bin differ
diff --git a/data/wavetables/sqr.bin b/data/wavetables/sqr.bin
new file mode 100644
index 0000000..7311949
Binary files /dev/null and b/data/wavetables/sqr.bin differ
diff --git a/data/wavetables/tri.bin b/data/wavetables/tri.bin
new file mode 100644
index 0000000..c2f87ee
Binary files /dev/null and b/data/wavetables/tri.bin differ
diff --git a/include/AudioAlsa.h b/include/AudioAlsa.h
index df53475..e6d098a 100644
--- a/include/AudioAlsa.h
+++ b/include/AudioAlsa.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioDevice.h b/include/AudioDevice.h
index 9b0b3dd..4fb186d 100644
--- a/include/AudioDevice.h
+++ b/include/AudioDevice.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioDummy.h b/include/AudioDummy.h
index 44595c3..182d402 100644
--- a/include/AudioDummy.h
+++ b/include/AudioDummy.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioFileDevice.h b/include/AudioFileDevice.h
index 992c373..4fddad2 100644
--- a/include/AudioFileDevice.h
+++ b/include/AudioFileDevice.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioFileOgg.h b/include/AudioFileOgg.h
index e3be674..08b3905 100644
--- a/include/AudioFileOgg.h
+++ b/include/AudioFileOgg.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioFileWave.h b/include/AudioFileWave.h
index ee68aff..e2a7521 100644
--- a/include/AudioFileWave.h
+++ b/include/AudioFileWave.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioJack.h b/include/AudioJack.h
index 20d62cb..946dc8b 100644
--- a/include/AudioJack.h
+++ b/include/AudioJack.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioOss.h b/include/AudioOss.h
index 5a41d0f..db9712b 100644
--- a/include/AudioOss.h
+++ b/include/AudioOss.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioPort.h b/include/AudioPort.h
index 47129ae..63a9e90 100644
--- a/include/AudioPort.h
+++ b/include/AudioPort.h
@@ -1,9 +1,9 @@
/*
* AudioPort.h - base-class for objects providing sound at a port
*
- * Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -33,7 +33,7 @@
class EffectChain;
-class AudioPort
+class AudioPort : public ThreadableJob
{
public:
AudioPort( const QString & _name, bool _has_effect_chain = true );
@@ -109,6 +109,13 @@ public:
bool processEffects();
+ // ThreadableJob stuff
+ virtual void doProcessing( sampleFrame * );
+ virtual bool requiresProcessing() const
+ {
+ return true;
+ }
+
enum bufferUsages
{
diff --git a/include/AudioPortAudio.h b/include/AudioPortAudio.h
index 04b0d35..110074d 100644
--- a/include/AudioPortAudio.h
+++ b/include/AudioPortAudio.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Csaba Hruska <csaba.hruska/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioPulseAudio.h b/include/AudioPulseAudio.h
index e525484..2a3c17a 100644
--- a/include/AudioPulseAudio.h
+++ b/include/AudioPulseAudio.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioSampleRecorder.h b/include/AudioSampleRecorder.h
index 7b0a6ae..a45c6e6 100644
--- a/include/AudioSampleRecorder.h
+++ b/include/AudioSampleRecorder.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AudioSdl.h b/include/AudioSdl.h
index d5b073e..f5aac81 100644
--- a/include/AudioSdl.h
+++ b/include/AudioSdl.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AutomatableModel.h b/include/AutomatableModel.h
index f390d25..27c40ef 100644
--- a/include/AutomatableModel.h
+++ b/include/AutomatableModel.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -25,10 +25,11 @@
#ifndef AUTOMATABLE_MODEL_H
#define AUTOMATABLE_MODEL_H
-#include <math.h>
+#include "lmms_math.h"
#include "JournallingObject.h"
#include "Model.h"
+#include "MidiTime.h"
// simple way to map a property of a view to a model
@@ -60,13 +61,19 @@
class ControllerConnection;
-
class EXPORT AutomatableModel : public Model, public JournallingObject
{
Q_OBJECT
public:
typedef QVector<AutomatableModel *> AutoModelVector;
+ enum ScaleType
+ {
+ Linear,
+ Logarithmic,
+ Decibel
+ };
+
enum DataType
{
Float,
@@ -128,7 +135,6 @@ public:
float controllerValue( int frameOffset ) const;
-
template<class T>
T initValue() const
{
@@ -157,7 +163,11 @@ public:
{
return castValue<T>( m_step );
}
-
+
+ //! @brief Returns value scaled with the scale type and min/max values of this model
+ float scaledValue( float value ) const;
+ //! @brief Returns value applied with the inverse of this model's scale type
+ float inverseScaledValue( float value ) const;
void setInitValue( const float value );
@@ -175,6 +185,17 @@ public:
}
void setRange( const float min, const float max, const float step = 1 );
+ void setScaleType( ScaleType sc ) {
+ m_scaleType = sc;
+ }
+ void setScaleLogarithmic( bool setToTrue = true )
+ {
+ setScaleType( setToTrue ? Logarithmic : Linear );
+ }
+ bool isScaleLogarithmic() const
+ {
+ return m_scaleType == Logarithmic;
+ }
void setStep( const float step );
@@ -193,8 +214,14 @@ public:
void unlinkAllModels();
- /*! \brief Saves settings (value, automation links and controller connections) of AutomatableModel into
- specified DOM element using <name> as attribute/node name */
+ /**
+ * @brief Saves settings (value, automation links and controller connections) of AutomatableModel into
+ * specified DOM element using <name> as attribute/node name
+ * @param doc TODO
+ * @param element Where this option shall be saved.
+ * Depending on the model, this can be done in an attribute or in a subnode.
+ * @param name Name to store this model as.
+ */
virtual void saveSettings( QDomDocument& doc, QDomElement& element, const QString& name );
/*! \brief Loads settings (value, automation links and controller connections) of AutomatableModel from
@@ -206,27 +233,27 @@ public:
return "automatablemodel";
}
- void prepareJournalEntryFromOldVal();
-
- void addJournalEntryFromOldToCurVal();
+ QString displayValue( const float val ) const;
-
- QString displayValue( const float val ) const
+ bool hasLinkedModels() const
{
- switch( m_dataType )
- {
- case Float: return QString::number( castValue<float>( val ) );
- case Integer: return QString::number( castValue<int>( val ) );
- case Bool: return QString::number( castValue<bool>( val ) );
- }
- return "0";
+ return m_hasLinkedModels;
}
- bool hasLinkedModels() const
+ // a way to track changed values in the model and avoid using signals/slots - useful for speed-critical code.
+ // note that this method should only be called once per period since it resets the state of the variable - so if your model
+ // has to be accessed by more than one object, then this function shouldn't be used.
+ bool isValueChanged()
{
- return m_hasLinkedModels;
+ if( m_valueChanged )
+ {
+ m_valueChanged = false;
+ return true;
+ }
+ return false;
}
+ float globalAutomationValueAt( const MidiTime& time );
public slots:
virtual void reset();
@@ -236,9 +263,10 @@ public slots:
protected:
- virtual void redoStep( JournalEntry& je );
- virtual void undoStep( JournalEntry& je );
-
+ //! returns a value which is in range between min() and
+ //! max() and aligned according to the step size (step size 0.05 -> value
+ //! 0.12345 becomes 0.10 etc.). You should always call it at the end after
+ //! doing your own calculations.
float fittedValue( float value ) const;
@@ -256,8 +284,17 @@ private:
void linkModel( AutomatableModel* model );
void unlinkModel( AutomatableModel* model );
+ //! @brief Scales @value from linear to logarithmic.
+ //! Value should be within [0,1]
+ template<class T> T logToLinearScale( T value ) const;
+
+ //! rounds @a value to @a where if it is close to it
+ //! @param value will be modified to rounded value
+ template<class T> void roundAt( T &value, const T &where ) const;
+
DataType m_dataType;
+ ScaleType m_scaleType; //! scale type, linear by default
float m_value;
float m_initValue;
float m_minValue;
@@ -265,17 +302,19 @@ private:
float m_step;
float m_range;
float m_centerValue;
+
+ bool m_valueChanged;
// most objects will need this temporarily (until sampleExact is
// standard)
float m_oldValue;
- bool m_journalEntryReady;
int m_setValueDepth;
AutoModelVector m_linkedModels;
bool m_hasLinkedModels;
+ //! NULL if not appended to controller, otherwise connection info
ControllerConnection* m_controllerConnection;
diff --git a/include/AutomatableModelView.h b/include/AutomatableModelView.h
index f213db4..b6fc501 100644
--- a/include/AutomatableModelView.h
+++ b/include/AutomatableModelView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h
index 9ff61bf..a57fa1f 100644
--- a/include/AutomationEditor.h
+++ b/include/AutomationEditor.h
@@ -1,10 +1,10 @@
/*
* AutomationEditor.h - declaration of class AutomationEditor which is a window
- * where you can edit dynamic values in an easy way
+ * where you can edit dynamic values in an easy way
*
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*
*/
-#ifndef _AUTOMATION_EDITOR_H
-#define _AUTOMATION_EDITOR_H
+#ifndef AUTOMATION_EDITOR_H
+#define AUTOMATION_EDITOR_H
#include <QtCore/QMutex>
#include <QtGui/QWidget>
@@ -50,6 +50,10 @@ class toolButton;
class AutomationEditor : public QWidget, public JournallingObject
{
Q_OBJECT
+ Q_PROPERTY( QColor gridColor READ gridColor WRITE setGridColor )
+ Q_PROPERTY( QColor vertexColor READ vertexColor WRITE setVertexColor )
+ Q_PROPERTY( QBrush scaleColor READ scaleColor WRITE setScaleColor )
+ Q_PROPERTY( QBrush graphColor READ graphColor WRITE setGraphColor )
public:
void setCurrentPattern( AutomationPattern * _new_pattern );
@@ -75,6 +79,15 @@ public:
void setPauseIcon( bool pause );
+ // qproperty access methods
+ QColor gridColor() const;
+ QBrush graphColor() const;
+ QColor vertexColor() const;
+ QBrush scaleColor() const;
+ void setGridColor( const QColor & c );
+ void setGraphColor( const QBrush & c );
+ void setVertexColor( const QColor & c );
+ void setScaleColor( const QBrush & c );
public slots:
void update();
@@ -252,7 +265,10 @@ private:
void drawAutomationPoint( QPainter & p, timeMap::iterator it );
bool inBBEditor();
-
+ QColor m_gridColor;
+ QBrush m_graphColor;
+ QColor m_vertexColor;
+ QBrush m_scaleColor;
friend class engine;
diff --git a/include/AutomationPattern.h b/include/AutomationPattern.h
index 39dd0cf..7b0159d 100644
--- a/include/AutomationPattern.h
+++ b/include/AutomationPattern.h
@@ -5,7 +5,7 @@
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -27,6 +27,7 @@
#ifndef AUTOMATION_PATTERN_H
#define AUTOMATION_PATTERN_H
+#include <QtCore/QMap>
#include <QtCore/QPointer>
#include "track.h"
@@ -151,16 +152,25 @@ public:
static bool isAutomated( const AutomatableModel * _m );
+ static QVector<AutomationPattern *> patternsForModel( const AutomatableModel * _m );
static AutomationPattern * globalAutomationPattern( AutomatableModel * _m );
static void resolveAllIDs();
+ bool isRecording() const
+ {
+ return m_isRecording;
+ }
+
+ void setRecording( const bool b )
+ {
+ m_isRecording = b;
+ }
public slots:
void clear();
void openInAutomationEditor();
void objectDestroyed( jo_id_t );
-
private:
void cleanObjects();
void generateTangents();
@@ -178,6 +188,9 @@ private:
ProgressionTypes m_progressionType;
bool m_dragging;
+
+ bool m_isRecording;
+ float m_lastRecordedValue;
static const float DEFAULT_MIN_VALUE;
static const float DEFAULT_MAX_VALUE;
diff --git a/include/AutomationPatternView.h b/include/AutomationPatternView.h
index 5d8bed1..ab16ea5 100644
--- a/include/AutomationPatternView.h
+++ b/include/AutomationPatternView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -33,11 +33,15 @@ class AutomationPattern;
class AutomationPatternView : public trackContentObjectView
{
Q_OBJECT
+
+// theming qproperties
+ Q_PROPERTY( QColor fgColor READ fgColor WRITE setFgColor )
+ Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor )
+
public:
AutomationPatternView( AutomationPattern * _pat, trackView * _parent );
virtual ~AutomationPatternView();
-
public slots:
virtual void update();
@@ -46,7 +50,7 @@ protected slots:
void resetName();
void changeName();
void disconnectObject( QAction * _a );
-
+ void toggleRecording();
protected:
virtual void constructContextMenu( QMenu * );
@@ -65,9 +69,10 @@ private:
AutomationPattern * m_pat;
QPixmap m_paintPixmap;
bool m_needsUpdate;
+
+ static QPixmap * s_pat_rec;
void scaleTimemapToFit( float oldMin, float oldMax );
-
} ;
diff --git a/include/AutomationTrack.h b/include/AutomationTrack.h
index d6af755..57a1b45 100644
--- a/include/AutomationTrack.h
+++ b/include/AutomationTrack.h
@@ -5,7 +5,7 @@
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -32,6 +32,7 @@
class AutomationTrack : public track
{
+ Q_OBJECT
public:
AutomationTrack( TrackContainer* tc, bool _hidden = false );
virtual ~AutomationTrack();
diff --git a/include/BandLimitedWave.h b/include/BandLimitedWave.h
new file mode 100644
index 0000000..b66d7ea
--- /dev/null
+++ b/include/BandLimitedWave.h
@@ -0,0 +1,213 @@
+/*
+ * BandLimitedWave.h - helper functions for band-limited
+ * waveform generation
+ *
+ * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef BANDLIMITEDWAVE_H
+#define BANDLIMITEDWAVE_H
+
+#include <QString>
+#include <QDataStream>
+#include <QFile>
+
+#include "config_mgr.h"
+#include "export.h"
+#include "interpolation.h"
+#include "lmms_basics.h"
+#include "lmms_math.h"
+#include "engine.h"
+#include "Mixer.h"
+
+#define MAXLEN 11
+#define MIPMAPSIZE 2 << ( MAXLEN + 1 )
+#define MIPMAPSIZE3 3 << ( MAXLEN + 1 )
+#define MAXTBL 23
+#define MINTLEN 2 << 0
+#define MAXTLEN 3 << MAXLEN
+
+// table for table sizes
+const int TLENS[MAXTBL+1] = { 2 << 0, 3 << 0, 2 << 1, 3 << 1,
+ 2 << 2, 3 << 2, 2 << 3, 3 << 3,
+ 2 << 4, 3 << 4, 2 << 5, 3 << 5,
+ 2 << 6, 3 << 6, 2 << 7, 3 << 7,
+ 2 << 8, 3 << 8, 2 << 9, 3 << 9,
+ 2 << 10, 3 << 10, 2 << 11, 3 << 11 };
+
+typedef struct
+{
+public:
+ inline sample_t sampleAt( int table, int ph )
+ {
+ if( table % 2 == 0 )
+ { return m_data[ TLENS[ table ] + ph ]; }
+ else
+ { return m_data3[ TLENS[ table ] + ph ]; }
+ }
+ inline void setSampleAt( int table, int ph, sample_t sample )
+ {
+ if( table % 2 == 0 )
+ { m_data[ TLENS[ table ] + ph ] = sample; }
+ else
+ { m_data3[ TLENS[ table ] + ph ] = sample; }
+ }
+private:
+ sample_t m_data [ MIPMAPSIZE ];
+ sample_t m_data3 [ MIPMAPSIZE3 ];
+
+} WaveMipMap;
+
+
+QDataStream& operator<< ( QDataStream &out, WaveMipMap &waveMipMap );
+
+
+QDataStream& operator>> ( QDataStream &in, WaveMipMap &waveMipMap );
+
+
+
+class EXPORT BandLimitedWave
+{
+public:
+ enum Waveforms
+ {
+ BLSaw,
+ BLSquare,
+ BLTriangle,
+ BLMoog,
+ NumBLWaveforms
+ };
+
+ BandLimitedWave() {};
+ virtual ~BandLimitedWave() {};
+
+ /*! \brief This method converts frequency to wavelength. The oscillate function takes wavelength as argument so
+ * use this to convert your note frequency to wavelength before using it.
+ */
+ static inline float freqToLen( float f )
+ {
+ return freqToLen( f, engine::mixer()->processingSampleRate() );
+ }
+
+ /*! \brief This method converts frequency to wavelength, but you can use any custom sample rate with it.
+ */
+ static inline float freqToLen( float f, sample_rate_t sr )
+ {
+ return static_cast<float>( sr ) / f;
+ }
+
+ /*! \brief This method converts phase delta to wavelength. It assumes a phase scale of 0 to 1. */
+ static inline float pdToLen( float pd )
+ {
+ return 1.0f / pd;
+ }
+
+ /*! \brief This method provides interpolated samples of bandlimited waveforms.
+ * \param _ph The phase of the sample.
+ * \param _wavelen The wavelength (length of one cycle, ie. the inverse of frequency) of the wanted oscillation, measured in sample frames
+ * \param _wave The wanted waveform. Options currently are saw, triangle, square and moog saw.
+ */
+ static inline sample_t oscillate( float _ph, float _wavelen, Waveforms _wave )
+ {
+ // high wavelen/ low freq
+ if( _wavelen > TLENS[ MAXTBL ] )
+ {
+ const int t = MAXTBL;
+ const int tlen = TLENS[t];
+ const float ph = fraction( _ph );
+ const float lookupf = ph * static_cast<float>( tlen );
+ const int lookup = static_cast<int>( lookupf );
+ const float ip = fraction( lookupf );
+
+ const sample_t s1 = s_waveforms[ _wave ].sampleAt( t, lookup );
+ const sample_t s2 = s_waveforms[ _wave ].sampleAt( t, ( lookup + 1 ) % tlen );
+ const int lm = lookup == 0 ? tlen - 1 : lookup - 1;
+ const sample_t s0 = s_waveforms[ _wave ].sampleAt( t, lm );
+ const sample_t s3 = s_waveforms[ _wave ].sampleAt( t, ( lookup + 2 ) % tlen );
+ const sample_t sr = optimal4pInterpolate( s0, s1, s2, s3, ip );
+
+ return sr;
+ }
+ // low wavelen/ high freq
+ if( _wavelen < 3.0f )
+ {
+ const int t = 0;
+ const int tlen = TLENS[t];
+ const float ph = fraction( _ph );
+ const float lookupf = ph * static_cast<float>( tlen );
+ const int lookup = static_cast<int>( lookupf );
+ const float ip = fraction( lookupf );
+
+ const sample_t s1 = s_waveforms[ _wave ].sampleAt( t, lookup );
+ const sample_t s2 = s_waveforms[ _wave ].sampleAt( t, ( lookup + 1 ) % tlen );
+ const int lm = lookup == 0 ? tlen - 1 : lookup - 1;
+ const sample_t s0 = s_waveforms[ _wave ].sampleAt( t, lm );
+ const sample_t s3 = s_waveforms[ _wave ].sampleAt( t, ( lookup + 2 ) % tlen );
+ const sample_t sr = optimal4pInterpolate( s0, s1, s2, s3, ip );
+
+ return sr;
+ }
+
+ // get the next higher tlen
+ int t = MAXTBL - 1;
+ while( _wavelen < TLENS[t] ) { t--; }
+
+ int tlen = TLENS[t];
+ const float ph = fraction( _ph );
+ const float lookupf = ph * static_cast<float>( tlen );
+ int lookup = static_cast<int>( lookupf );
+ const float ip = fraction( lookupf );
+
+ const sample_t s1 = s_waveforms[ _wave ].sampleAt( t, lookup );
+ const sample_t s2 = s_waveforms[ _wave ].sampleAt( t, ( lookup + 1 ) % tlen );
+
+ const int lm = lookup == 0 ? tlen - 1 : lookup - 1;
+ const sample_t s0 = s_waveforms[ _wave ].sampleAt( t, lm );
+ const sample_t s3 = s_waveforms[ _wave ].sampleAt( t, ( lookup + 2 ) % tlen );
+ const sample_t sr = optimal4pInterpolate( s0, s1, s2, s3, ip );
+
+ return sr;
+
+/* lookup = lookup << 1;
+ tlen = tlen << 1;
+ t += 1;
+ const sample_t s3 = s_waveforms[ _wave ].sampleAt( t, lookup );
+ const sample_t s4 = s_waveforms[ _wave ].sampleAt( t, ( lookup + 1 ) % tlen );
+ const sample_t s34 = linearInterpolate( s3, s4, ip );
+
+ const float ip2 = ( ( tlen - _wavelen ) / tlen - 0.5 ) * 2.0;
+
+ return linearInterpolate( s12, s34, ip2 );
+ */
+ };
+
+
+ static void generateWaves();
+
+ static bool s_wavesGenerated;
+
+ static WaveMipMap s_waveforms [NumBLWaveforms];
+
+ static QString s_wavetableDir;
+};
+
+
+#endif
diff --git a/include/Clipboard.h b/include/Clipboard.h
index 58d9a58..4207ff5 100644
--- a/include/Clipboard.h
+++ b/include/Clipboard.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ComboBoxModel.h b/include/ComboBoxModel.h
index b11af88..5c3aa20 100644
--- a/include/ComboBoxModel.h
+++ b/include/ComboBoxModel.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/Controller.h b/include/Controller.h
index 5a7d5a8..ced0140 100644
--- a/include/Controller.h
+++ b/include/Controller.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008-2009 Paul Giblock <pgllama/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,8 +24,8 @@
*/
-#ifndef _CONTROLLER_H
-#define _CONTROLLER_H
+#ifndef CONTROLLER_H
+#define CONTROLLER_H
#include "engine.h"
#include "Mixer.h"
@@ -65,9 +65,7 @@ public:
inline bool isSampleExact() const
{
- return m_sampleExact ||
- engine::mixer()->currentQualitySettings().
- sampleExactControllers;
+ return m_sampleExact;
}
void setSampleExact( bool _exact )
diff --git a/include/ControllerConnection.h b/include/ControllerConnection.h
index 440960f..d29ede9 100644
--- a/include/ControllerConnection.h
+++ b/include/ControllerConnection.h
@@ -7,7 +7,7 @@
* Copyright (c) 2008 Paul Giblock <pgllama/at/gmail.com>
* Copyright (c) 2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -100,7 +100,7 @@ protected:
//virtual controllerDialog * createDialog( QWidget * _parent );
Controller * m_controller;
QString m_targetName;
- int m_controllerId;
+ int m_controllerId;
bool m_ownsController;
diff --git a/include/ControllerConnectionDialog.h b/include/ControllerConnectionDialog.h
index 9d8a6ca..28bb949 100644
--- a/include/ControllerConnectionDialog.h
+++ b/include/ControllerConnectionDialog.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ControllerDialog.h b/include/ControllerDialog.h
index 3c82ccf..eef52ff 100644
--- a/include/ControllerDialog.h
+++ b/include/ControllerDialog.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008-2009 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ControllerRackView.h b/include/ControllerRackView.h
index 60c8f07..3d41f16 100644
--- a/include/ControllerRackView.h
+++ b/include/ControllerRackView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ControllerView.h b/include/ControllerView.h
index c86b47c..dfd15b9 100644
--- a/include/ControllerView.h
+++ b/include/ControllerView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/DataFile.h b/include/DataFile.h
index 499853b..5270d94 100644
--- a/include/DataFile.h
+++ b/include/DataFile.h
@@ -4,7 +4,7 @@
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2012-2013 Paul Giblock <p/at/pgiblock.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -77,6 +77,24 @@ public:
return m_type;
}
+ // small helper class for adjusting application's locale settings
+ // when loading or saving floating point values rendered to strings
+ class LocaleHelper
+ {
+ public:
+ enum Modes
+ {
+ ModeLoad,
+ ModeSave,
+ ModeCount
+ };
+ typedef Modes Mode;
+
+ LocaleHelper( Mode mode );
+ ~LocaleHelper();
+
+ };
+
private:
static Type type( const QString& typeName );
diff --git a/include/DetuningHelper.h b/include/DetuningHelper.h
index 2d675ca..7aa1d39 100644
--- a/include/DetuningHelper.h
+++ b/include/DetuningHelper.h
@@ -4,7 +4,7 @@
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2008-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/DspEffectLibrary.h b/include/DspEffectLibrary.h
index 5231184..49b55ad 100644
--- a/include/DspEffectLibrary.h
+++ b/include/DspEffectLibrary.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,11 +23,10 @@
*/
-#ifndef _DSP_EFFECT_LIBRARY_H
-#define _DSP_EFFECT_LIBRARY_H
-
-#include <math.h>
+#ifndef DSP_EFFECT_LIBRARY_H
+#define DSP_EFFECT_LIBRARY_H
+#include "lmms_math.h"
#include "templates.h"
#include "lmms_constants.h"
#include "lmms_basics.h"
@@ -213,8 +212,7 @@ namespace DspEffectLibrary
{
// TODO: somehow remove these horrible aliases...
m_cap = ( _in + m_cap*m_frequency ) * m_gain1;
- return( /*saturate<sample_t>(*/ ( _in + m_cap*m_ratio ) *
- m_gain2/* )*/ );
+ return( ( _in + m_cap*m_ratio ) * m_gain2 );
}
void setFrequency( const sample_t _frequency )
@@ -335,10 +333,10 @@ namespace DspEffectLibrary
void nextSample( sample_t& inLeft, sample_t& inRight )
{
- const float toRad = 3.141592 / 180;
-
- inLeft += inRight * sinf( m_wideCoeff * .5 * toRad);
- inRight -= inLeft * sinf( m_wideCoeff * .5 * toRad);
+ const float toRad = F_PI / 180;
+ const sample_t tmp = inLeft;
+ inLeft += inRight * sinf( m_wideCoeff * ( .5 * toRad ) );
+ inRight -= tmp * sinf( m_wideCoeff * ( .5 * toRad ) );
}
private:
diff --git a/include/DummyEffect.h b/include/DummyEffect.h
index 33cff9a..155a98d 100644
--- a/include/DummyEffect.h
+++ b/include/DummyEffect.h
@@ -1,9 +1,9 @@
/*
* DummyEffect.h - effect used as fallback if an effect couldn't be loaded
*
- * Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,8 +22,8 @@
*
*/
-#ifndef _DUMMY_EFFECT_H
-#define _DUMMY_EFFECT_H
+#ifndef DUMMY_EFFECT_H
+#define DUMMY_EFFECT_H
#include "Effect.h"
#include "EffectControls.h"
@@ -58,15 +58,15 @@ public:
return 0;
}
- inline virtual void saveSettings( QDomDocument &, QDomElement & )
+ virtual void saveSettings( QDomDocument &, QDomElement & )
{
}
- inline virtual void loadSettings( const QDomElement & )
+ virtual void loadSettings( const QDomElement & )
{
}
- inline virtual QString nodeName() const
+ virtual QString nodeName() const
{
return "DummyControls";
}
@@ -82,17 +82,19 @@ public:
class DummyEffect : public Effect
{
public:
- inline DummyEffect( Model * _parent ) :
+ DummyEffect( Model * _parent, const QDomElement& originalPluginData ) :
Effect( NULL, _parent, NULL ),
- m_controls( this )
+ m_controls( this ),
+ m_originalPluginData( originalPluginData )
{
+ setName();
}
- inline virtual ~DummyEffect()
+ virtual ~DummyEffect()
{
}
- inline virtual EffectControls * controls()
+ virtual EffectControls * controls()
{
return &m_controls;
}
@@ -102,10 +104,38 @@ public:
return false;
}
+ const QDomElement& originalPluginData() const
+ {
+ return m_originalPluginData;
+ }
+
+
private:
DummyEffectControls m_controls;
-
+ const QDomElement m_originalPluginData;
+
+ // Parse the display name from the dom
+ virtual void setName()
+ {
+ QDomNodeList keys = originalPluginData().elementsByTagName( "key" );
+ for( int i = 0; !keys.item( i ).isNull(); ++i )
+ {
+ QDomNodeList attributes = keys.item( i ).toElement().elementsByTagName( "attribute" );
+ for( int j = 0; !attributes.item( j ).isNull(); ++j )
+ {
+ QDomElement attribute = attributes.item( j ).toElement();
+ if( attribute.hasAttribute( "value" ) )
+ {
+ QString name = tr("NOT FOUND") + " (" + attribute.attribute( "value" ) + ")";
+ setDisplayName(name);
+ return;
+ }
+
+ }
+
+ }
+ }
} ;
diff --git a/include/DummyInstrument.h b/include/DummyInstrument.h
index ee9e5d3..76000f4 100644
--- a/include/DummyInstrument.h
+++ b/include/DummyInstrument.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/DummyPlugin.h b/include/DummyPlugin.h
index d0cf0b9..550bc38 100644
--- a/include/DummyPlugin.h
+++ b/include/DummyPlugin.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/Effect.h b/include/Effect.h
index 10d3fcf..f43be1b 100644
--- a/include/Effect.h
+++ b/include/Effect.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*
*/
-#ifndef _EFFECT_H
-#define _EFFECT_H
+#ifndef EFFECT_H
+#define EFFECT_H
#include "Plugin.h"
#include "engine.h"
@@ -39,6 +39,7 @@ class EffectControls;
class EXPORT Effect : public Plugin
{
+ Q_OBJECT
public:
Effect( const Plugin::Descriptor * _desc,
Model * _parent,
@@ -118,8 +119,7 @@ public:
inline float gate() const
{
const float level = m_gateModel.value();
- return level*level * m_processors *
- engine::mixer()->framesPerPeriod();
+ return level*level * m_processors;
}
inline f_cnt_t bufferCount() const
diff --git a/include/EffectChain.h b/include/EffectChain.h
index cb2d817..6786d20 100644
--- a/include/EffectChain.h
+++ b/include/EffectChain.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/EffectControlDialog.h b/include/EffectControlDialog.h
index 65a0ff6..2f8d7ac 100644
--- a/include/EffectControlDialog.h
+++ b/include/EffectControlDialog.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/EffectControls.h b/include/EffectControls.h
index a8883b8..410bf83 100644
--- a/include/EffectControls.h
+++ b/include/EffectControls.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/EffectRackView.h b/include/EffectRackView.h
index 11b57fd..6de96c9 100644
--- a/include/EffectRackView.h
+++ b/include/EffectRackView.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn at netscape.net>
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/EffectSelectDialog.h b/include/EffectSelectDialog.h
index 52500d4..b9a4abb 100644
--- a/include/EffectSelectDialog.h
+++ b/include/EffectSelectDialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/EffectView.h b/include/EffectView.h
index 6caa06b..feae25a 100644
--- a/include/EffectView.h
+++ b/include/EffectView.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2007-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/EnvelopeAndLfoParameters.h b/include/EnvelopeAndLfoParameters.h
index 1d795bd..edc53e0 100644
--- a/include/EnvelopeAndLfoParameters.h
+++ b/include/EnvelopeAndLfoParameters.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -157,6 +157,7 @@ private:
float m_lfoAmount;
bool m_lfoAmountIsZero;
sample_t * m_lfoShapeData;
+ sample_t m_random;
bool m_bad_lfoShapeData;
SampleBuffer m_userWave;
@@ -167,6 +168,7 @@ private:
SawWave,
SquareWave,
UserDefinedWave,
+ RandomWave,
NumLfoShapes
} ;
@@ -174,7 +176,6 @@ private:
void updateLfoShapeData();
-
friend class EnvelopeAndLfoView;
friend class FlpImport;
diff --git a/include/EnvelopeAndLfoView.h b/include/EnvelopeAndLfoView.h
index 8df71b0..540d13f 100644
--- a/include/EnvelopeAndLfoView.h
+++ b/include/EnvelopeAndLfoView.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -90,7 +90,8 @@ private:
ledCheckBox * m_x100Cb;
ledCheckBox * m_controlEnvAmountCb;
-
+
+ float m_randomGraph;
} ;
#endif
diff --git a/include/FileBrowser.h b/include/FileBrowser.h
new file mode 100644
index 0000000..c112596
--- /dev/null
+++ b/include/FileBrowser.h
@@ -0,0 +1,240 @@
+/*
+ * FileBrowser.h - include file for FileBrowser
+ *
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#ifndef FILE_BROWSER_H
+#define FILE_BROWSER_H
+
+#include <QtCore/QDir>
+#include <QtCore/QMutex>
+#include <QtGui/QTreeWidget>
+
+
+#include "SideBarWidget.h"
+
+
+class QLineEdit;
+
+class FileItem;
+class InstrumentTrack;
+class FileBrowserTreeWidget;
+class PlayHandle;
+class TrackContainer;
+
+
+
+class FileBrowser : public SideBarWidget
+{
+ Q_OBJECT
+public:
+ FileBrowser( const QString & directories, const QString & filter,
+ const QString & title, const QPixmap & pm,
+ QWidget * parent, bool dirs_as_items = false );
+ virtual ~FileBrowser();
+
+
+public slots:
+ void filterItems( const QString & filter );
+ void reloadTree( void );
+
+
+private:
+ bool filterItems( QTreeWidgetItem * item, const QString & filter );
+ virtual void keyPressEvent( QKeyEvent * ke );
+
+ void addItems( const QString & path );
+
+ FileBrowserTreeWidget * m_l;
+
+ QLineEdit * m_filterEdit;
+
+ QString m_directories;
+ QString m_filter;
+
+ bool m_dirsAsItems;
+
+} ;
+
+
+
+
+class FileBrowserTreeWidget : public QTreeWidget
+{
+ Q_OBJECT
+public:
+ FileBrowserTreeWidget( QWidget * parent );
+ virtual ~FileBrowserTreeWidget();
+
+
+protected:
+ virtual void contextMenuEvent( QContextMenuEvent * e );
+ virtual void mousePressEvent( QMouseEvent * me );
+ virtual void mouseMoveEvent( QMouseEvent * me );
+ virtual void mouseReleaseEvent( QMouseEvent * me );
+
+
+private:
+ void handleFile( FileItem * fi, InstrumentTrack * it );
+ void openInNewInstrumentTrack( TrackContainer* tc );
+
+
+ bool m_mousePressed;
+ QPoint m_pressPos;
+
+ PlayHandle* m_previewPlayHandle;
+ QMutex m_pphMutex;
+
+ FileItem * m_contextMenuItem;
+
+
+private slots:
+ void activateListItem( QTreeWidgetItem * item, int column );
+ void openInNewInstrumentTrackBBE( void );
+ void openInNewInstrumentTrackSE( void );
+ void sendToActiveInstrumentTrack( void );
+ void updateDirectory( QTreeWidgetItem * item );
+
+} ;
+
+
+
+
+class Directory : public QTreeWidgetItem
+{
+public:
+ Directory( const QString & filename, const QString & path,
+ const QString & filter );
+
+ void update( void );
+
+ inline QString fullName( QString path = QString::null )
+ {
+ if( path == QString::null )
+ {
+ path = m_directories[0];
+ }
+ if( path != QString::null )
+ {
+ path += QDir::separator();
+ }
+ return( QDir::cleanPath( path + text( 0 ) ) +
+ QDir::separator() );
+ }
+
+ inline void addDirectory( const QString & dir )
+ {
+ m_directories.push_back( dir );
+ }
+
+
+private:
+ void initPixmaps( void );
+
+ bool addItems( const QString & path );
+
+
+ static QPixmap * s_folderPixmap;
+ static QPixmap * s_folderOpenedPixmap;
+ static QPixmap * s_folderLockedPixmap;
+
+ QStringList m_directories;
+ QString m_filter;
+
+} ;
+
+
+
+
+class FileItem : public QTreeWidgetItem
+{
+public:
+ enum FileTypes
+ {
+ ProjectFile,
+ PresetFile,
+ SampleFile,
+ SoundFontFile,
+ PatchFile,
+ MidiFile,
+ FlpFile,
+ VstPluginFile,
+ UnknownFile,
+ NumFileTypes
+ } ;
+
+ enum FileHandling
+ {
+ NotSupported,
+ LoadAsProject,
+ LoadAsPreset,
+ LoadByPlugin,
+ ImportAsProject
+ } ;
+
+
+ FileItem( QTreeWidget * parent, const QString & name,
+ const QString & path );
+ FileItem( const QString & name, const QString & path );
+
+ inline QString fullName( void ) const
+ {
+ return( QDir::cleanPath( m_path ) + QDir::separator() +
+ text( 0 ) );
+ }
+
+ inline FileTypes type( void ) const
+ {
+ return( m_type );
+ }
+
+ inline FileHandling handling( void ) const
+ {
+ return( m_handling );
+ }
+
+ QString extension( void );
+ static QString extension( const QString & file );
+
+
+private:
+ void initPixmaps( void );
+ void determineFileType( void );
+
+ static QPixmap * s_projectFilePixmap;
+ static QPixmap * s_presetFilePixmap;
+ static QPixmap * s_sampleFilePixmap;
+ static QPixmap * s_soundfontFilePixmap;
+ static QPixmap * s_vstPluginFilePixmap;
+ static QPixmap * s_midiFilePixmap;
+ static QPixmap * s_flpFilePixmap;
+ static QPixmap * s_unknownFilePixmap;
+
+ QString m_path;
+ FileTypes m_type;
+ FileHandling m_handling;
+
+} ;
+
+
+#endif
diff --git a/include/FileDialog.h b/include/FileDialog.h
index f4d81ea..27ed22d 100644
--- a/include/FileDialog.h
+++ b/include/FileDialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Lukas W <lukaswhl/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/FxLine.h b/include/FxLine.h
new file mode 100644
index 0000000..d540c8c
--- /dev/null
+++ b/include/FxLine.h
@@ -0,0 +1,83 @@
+/*
+ * FxLine.h - FX line widget
+ *
+ * Copyright (c) 2009 Andrew Kelley <superjoe30/at/gmail/dot/com>
+ * Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef FX_LINE_H
+#define FX_LINE_H
+
+#include <QWidget>
+#include <QLabel>
+
+#include "knob.h"
+#include "LcdWidget.h"
+#include "SendButtonIndicator.h"
+
+class FxMixerView;
+class SendButtonIndicator;
+
+class FxLine : public QWidget
+{
+ Q_OBJECT
+public:
+ Q_PROPERTY( QBrush backgroundActive READ backgroundActive WRITE setBackgroundActive )
+ FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex);
+ ~FxLine();
+
+ virtual void paintEvent( QPaintEvent * );
+ virtual void mousePressEvent( QMouseEvent * );
+ virtual void mouseDoubleClickEvent( QMouseEvent * );
+ virtual void contextMenuEvent( QContextMenuEvent * );
+
+ inline int channelIndex() { return m_channelIndex; }
+ void setChannelIndex(int index);
+
+ knob * m_sendKnob;
+ SendButtonIndicator * m_sendBtn;
+
+ QBrush backgroundActive() const;
+ void setBackgroundActive( const QBrush & c );
+
+ static const int FxLineHeight;
+
+private:
+ static void drawFxLine( QPainter* p, const FxLine *fxLine, const QString& name, bool isActive, bool sendToThis, bool receiveFromThis );
+
+ FxMixerView * m_mv;
+ LcdWidget* m_lcd;
+ int m_channelIndex;
+ QBrush m_backgroundActive;
+ static QPixmap * s_sendBgArrow;
+ static QPixmap * s_receiveBgArrow;
+
+private slots:
+ void renameChannel();
+ void removeChannel();
+ void moveChannelLeft();
+ void moveChannelRight();
+ void displayHelp();
+
+};
+
+
+#endif // FXLINE_H
diff --git a/include/FxMixer.h b/include/FxMixer.h
index 10b6b2c..cbd79c9 100644
--- a/include/FxMixer.h
+++ b/include/FxMixer.h
@@ -1,9 +1,9 @@
/*
* FxMixer.h - effect-mixer for LMMS
*
- * Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,53 +22,113 @@
*
*/
-#ifndef _FX_MIXER_H
-#define _FX_MIXER_H
+#ifndef FX_MIXER_H
+#define FX_MIXER_H
#include "Model.h"
#include "Mixer.h"
#include "EffectChain.h"
#include "JournallingObject.h"
+#include "ThreadableJob.h"
-const int NumFxChannels = 64;
+class FxRoute;
+typedef QVector<FxRoute *> FxRouteVector;
-
-struct FxChannel
+class FxChannel : public ThreadableJob
{
- FxChannel( Model * _parent );
- ~FxChannel();
-
- EffectChain m_fxChain;
- bool m_used;
- bool m_stillRunning;
- float m_peakLeft;
- float m_peakRight;
- sampleFrame * m_buffer;
- BoolModel m_muteModel;
- FloatModel m_volumeModel;
- QString m_name;
- QMutex m_lock;
-
-} ;
-
+ public:
+ FxChannel( int idx, Model * _parent );
+ virtual ~FxChannel();
+
+ EffectChain m_fxChain;
+
+ // set to true when input fed from mixToChannel or child channel
+ bool m_hasInput;
+ // set to true if any effect in the channel is enabled and running
+ bool m_stillRunning;
+
+ float m_peakLeft;
+ float m_peakRight;
+ sampleFrame * m_buffer;
+ BoolModel m_muteModel;
+ FloatModel m_volumeModel;
+ QString m_name;
+ QMutex m_lock;
+ int m_channelIndex; // what channel index are we
+ bool m_queued; // are we queued up for rendering yet?
+ bool m_muted; // are we muted? updated per period so we don't have to call m_muteModel.value() twice
+
+ // pointers to other channels that this one sends to
+ FxRouteVector m_sends;
+
+ // pointers to other channels that send to this one
+ FxRouteVector m_receives;
+
+ virtual bool requiresProcessing() const { return true; }
+
+ QAtomicInt m_dependenciesMet;
+ void incrementDeps();
+ void processed();
+
+ private:
+ virtual void doProcessing( sampleFrame * _working_buffer );
+};
+
+
+class FxRoute : public QObject
+{
+ Q_OBJECT
+ public:
+ FxRoute( FxChannel * from, FxChannel * to, float amount );
+ virtual ~FxRoute();
+
+ fx_ch_t senderIndex() const
+ {
+ return m_from->m_channelIndex;
+ }
+
+ fx_ch_t receiverIndex() const
+ {
+ return m_to->m_channelIndex;
+ }
+
+ FloatModel * amount()
+ {
+ return &m_amount;
+ }
+
+ FxChannel * sender() const
+ {
+ return m_from;
+ }
+
+ FxChannel * receiver() const
+ {
+ return m_to;
+ }
+
+ void updateName();
+
+ private:
+ FxChannel * m_from;
+ FxChannel * m_to;
+ FloatModel m_amount;
+};
-class FxMixer : public JournallingObject, public Model
+class EXPORT FxMixer : public Model, public JournallingObject
{
+ Q_OBJECT
public:
FxMixer();
virtual ~FxMixer();
void mixToChannel( const sampleFrame * _buf, fx_ch_t _ch );
- void processChannel( fx_ch_t _ch, sampleFrame * _buf = NULL );
void prepareMasterMix();
void masterMix( sampleFrame * _buf );
-
- void clear();
-
virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
virtual void loadSettings( const QDomElement & _this );
@@ -79,17 +139,62 @@ public:
FxChannel * effectChannel( int _ch )
{
- if( _ch >= 0 && _ch <= NumFxChannels )
- {
- return m_fxChannels[_ch];
- }
- return NULL;
+ return m_fxChannels[_ch];
+ }
+
+ // make the output of channel fromChannel go to the input of channel toChannel
+ // it is safe to call even if the send already exists
+ FxRoute * createChannelSend(fx_ch_t fromChannel, fx_ch_t toChannel,
+ float amount = 1.0f);
+ FxRoute * createRoute( FxChannel * from, FxChannel * to, float amount );
+
+ // delete the connection made by createChannelSend
+ void deleteChannelSend(fx_ch_t fromChannel, fx_ch_t toChannel);
+ void deleteChannelSend( FxRoute * route );
+
+ // determine if adding a send from sendFrom to
+ // sendTo would result in an infinite mixer loop.
+ bool isInfiniteLoop(fx_ch_t fromChannel, fx_ch_t toChannel);
+ bool checkInfiniteLoop( FxChannel * from, FxChannel * to );
+
+ // return the FloatModel of fromChannel sending its output to the input of
+ // toChannel. NULL if there is no send.
+ FloatModel * channelSendModel(fx_ch_t fromChannel, fx_ch_t toChannel);
+
+ // add a new channel to the Fx Mixer.
+ // returns the index of the channel that was just added
+ int createChannel();
+
+ // delete a channel from the FX mixer.
+ void deleteChannel(int index);
+
+ // delete all the mixer channels except master and remove all effects
+ void clear();
+
+ // re-arrange channels
+ void moveChannelLeft(int index);
+ void moveChannelRight(int index);
+
+ // reset a channel's name, fx, sends, etc
+ void clearChannel(fx_ch_t channelIndex);
+
+ // rename channels when moving etc. if they still have their original name
+ void validateChannelName( int index, int oldIndex );
+
+ inline fx_ch_t numChannels() const
+ {
+ return m_fxChannels.size();
}
+ FxRouteVector m_fxRoutes;
private:
- FxChannel * m_fxChannels[NumFxChannels+1]; // +1 = master
+ // the fx channels in the mixer. index 0 is always master.
+ QVector<FxChannel *> m_fxChannels;
+ // make sure we have at least num channels
+ void allocateChannelsTo(int num);
+ QMutex m_sendsMutex;
friend class MixerWorkerThread;
friend class FxMixerView;
diff --git a/include/FxMixerView.h b/include/FxMixerView.h
index dab34ca..57bfb2d 100644
--- a/include/FxMixerView.h
+++ b/include/FxMixerView.h
@@ -1,9 +1,9 @@
/*
* FxMixerView.h - effect-mixer-view for LMMS
*
- * Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,63 +22,101 @@
*
*/
-#ifndef _FX_MIXER_VIEW_H
-#define _FX_MIXER_VIEW_H
+#ifndef FX_MIXER_VIEW_H
+#define FX_MIXER_VIEW_H
#include <QtGui/QWidget>
+#include <QtGui/QHBoxLayout>
+#include <QtGui/QStackedLayout>
+#include <QtGui/QScrollArea>
+#include "FxLine.h"
#include "FxMixer.h"
#include "ModelView.h"
+#include "engine.h"
+#include "fader.h"
+#include "pixmap_button.h"
+#include "tooltip.h"
+#include "embed.h"
+#include "EffectRackView.h"
-class QStackedLayout;
class QButtonGroup;
-class fader;
class FxLine;
-class EffectRackView;
-class pixmapButton;
-
-class FxMixerView : public QWidget, public ModelView,
+class EXPORT FxMixerView : public QWidget, public ModelView,
public SerializingObjectHook
{
Q_OBJECT
public:
+ class FxChannelView
+ {
+ public:
+ FxChannelView(QWidget * _parent, FxMixerView * _mv, int _chIndex );
+
+ FxLine * m_fxLine;
+ pixmapButton * m_muteBtn;
+ fader * m_fader;
+ EffectRackView * m_rackView;
+ };
+
+
FxMixerView();
virtual ~FxMixerView();
+ virtual void keyPressEvent(QKeyEvent * e);
+
virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
virtual void loadSettings( const QDomElement & _this );
- FxLine * currentFxLine()
+ inline FxLine * currentFxLine()
{
return m_currentFxLine;
}
+
+ inline FxChannelView * channelView(int index)
+ {
+ return m_fxChannelViews[index];
+ }
+
void setCurrentFxLine( FxLine * _line );
void setCurrentFxLine( int _line );
void clear();
+ // display the send button and knob correctly
+ void updateFxLine(int index);
+
+ // notify the view that an fx channel was deleted
+ void deleteChannel(int index);
+
+ // move the channel to the left or right
+ void moveChannelLeft(int index);
+ void moveChannelRight(int index);
+
+ // make sure the display syncs up with the fx mixer.
+ // useful for loading projects
+ void refreshDisplay();
+
private slots:
void updateFaders();
-
+ void addNewChannel();
private:
- struct FxChannelView
- {
- FxLine * m_fxLine;
- EffectRackView * m_rackView;
- pixmapButton * m_muteBtn;
- fader * m_fader;
- } ;
- FxChannelView m_fxChannelViews[NumFxChannels+1];
+ QVector<FxChannelView *> m_fxChannelViews;
- QStackedLayout * m_fxRacksLayout;
- QStackedLayout * m_fxLineBanks;
- QButtonGroup * m_bankButtons;
FxLine * m_currentFxLine;
+ QScrollArea * channelArea;
+ QHBoxLayout * chLayout;
+ QWidget * m_channelAreaWidget;
+ QStackedLayout * m_racksLayout;
+ QWidget * m_racksWidget;
+
+ void updateMaxChannelSelector();
+
+ friend class FxChannelView;
} ;
#endif
diff --git a/include/ImportFilter.h b/include/ImportFilter.h
index 284dfe1..be1d348 100644
--- a/include/ImportFilter.h
+++ b/include/ImportFilter.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/InlineAutomation.h b/include/InlineAutomation.h
index 22d2aa3..5ccf446 100644
--- a/include/InlineAutomation.h
+++ b/include/InlineAutomation.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/Instrument.h b/include/Instrument.h
index 987d142..df855cd 100644
--- a/include/Instrument.h
+++ b/include/Instrument.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*
*/
-#ifndef _INSTRUMENT_H
-#define _INSTRUMENT_H
+#ifndef INSTRUMENT_H
+#define INSTRUMENT_H
#include <QtGui/QWidget>
@@ -101,7 +101,7 @@ public:
// sub-classes can re-implement this for receiving all incoming
// MIDI-events
- inline virtual bool handleMidiEvent( const MidiEvent&, const MidiTime& = MidiTime() )
+ inline virtual bool handleMidiEvent( const MidiEvent&, const MidiTime& = MidiTime(), f_cnt_t offset = 0 )
{
return true;
}
@@ -119,13 +119,13 @@ public:
virtual bool isFromTrack( const track * _track ) const;
-
-protected:
inline InstrumentTrack * instrumentTrack() const
{
return m_instrumentTrack;
}
+
+protected:
// instruments may use this to apply a soft fade out at the end of
// notes - method does this only if really less or equal
// desiredReleaseFrames() frames are left
diff --git a/include/InstrumentFunctionViews.h b/include/InstrumentFunctionViews.h
index 2a37046..0f74fa3 100644
--- a/include/InstrumentFunctionViews.h
+++ b/include/InstrumentFunctionViews.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/InstrumentFunctions.h b/include/InstrumentFunctions.h
index 3452219..4cc5a5f 100644
--- a/include/InstrumentFunctions.h
+++ b/include/InstrumentFunctions.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -166,6 +166,7 @@ public:
ArpDirDown,
ArpDirUpAndDown,
ArpDirRandom,
+ ArpDirDownAndUp,
NumArpDirections
} ;
diff --git a/include/InstrumentMidiIOView.h b/include/InstrumentMidiIOView.h
index 3edd25e..a2be6ae 100644
--- a/include/InstrumentMidiIOView.h
+++ b/include/InstrumentMidiIOView.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -38,6 +38,7 @@ class QToolButton;
class InstrumentMidiIOView : public QWidget, public ModelView
{
+ Q_OBJECT
public:
InstrumentMidiIOView( QWidget* parent );
virtual ~InstrumentMidiIOView();
diff --git a/include/InstrumentPlayHandle.h b/include/InstrumentPlayHandle.h
index cf472db..331695a 100644
--- a/include/InstrumentPlayHandle.h
+++ b/include/InstrumentPlayHandle.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,11 +22,12 @@
*
*/
-#ifndef _INSTRUMENT_PLAY_HANDLE_H
-#define _INSTRUMENT_PLAY_HANDLE_H
+#ifndef INSTRUMENT_PLAY_HANDLE_H
+#define INSTRUMENT_PLAY_HANDLE_H
#include "PlayHandle.h"
#include "Instrument.h"
+#include "NotePlayHandle.h"
class InstrumentPlayHandle : public PlayHandle
@@ -45,6 +46,32 @@ public:
virtual void play( sampleFrame * _working_buffer )
{
+ // if the instrument is midi-based, we can safely render right away
+ if( m_instrument->flags() & Instrument::IsMidiBased )
+ {
+ m_instrument->play( _working_buffer );
+ return;
+ }
+
+ // if not, we need to ensure that all our nph's have been processed first
+ ConstNotePlayHandleList nphv = NotePlayHandle::nphsOfInstrumentTrack( m_instrument->instrumentTrack(), true );
+
+ bool nphsLeft;
+ do
+ {
+ nphsLeft = false;
+ foreach( const NotePlayHandle * cnph, nphv )
+ {
+ NotePlayHandle * nph = const_cast<NotePlayHandle *>( cnph );
+ if( nph->state() != ThreadableJob::Done && ! nph->isFinished() )
+ {
+ nphsLeft = true;
+ nph->process();
+ }
+ }
+ }
+ while( nphsLeft );
+
m_instrument->play( _working_buffer );
}
diff --git a/include/InstrumentSoundShaping.h b/include/InstrumentSoundShaping.h
index a6f812f..193f810 100644
--- a/include/InstrumentSoundShaping.h
+++ b/include/InstrumentSoundShaping.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/InstrumentSoundShapingView.h b/include/InstrumentSoundShapingView.h
index ff0152d..5ce24c0 100644
--- a/include/InstrumentSoundShapingView.h
+++ b/include/InstrumentSoundShapingView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/InstrumentTrack.h b/include/InstrumentTrack.h
index 6f9a0c6..9dad6a7 100644
--- a/include/InstrumentTrack.h
+++ b/include/InstrumentTrack.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*
*/
-#ifndef _INSTRUMENT_TRACK_H
-#define _INSTRUMENT_TRACK_H
+#ifndef INSTRUMENT_TRACK_H
+#define INSTRUMENT_TRACK_H
#include "AudioPort.h"
#include "InstrumentFunctions.h"
@@ -71,10 +71,10 @@ public:
MidiEvent applyMasterKey( const MidiEvent& event );
- virtual void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime() );
- virtual void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime() );
+ virtual void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 );
+ virtual void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 );
// silence all running notes played by this track
- void silenceAllNotes();
+ void silenceAllNotes( bool removeIPH = false );
bool isSustainPedalPressed() const
{
@@ -160,6 +160,8 @@ public:
{
return &m_baseNoteModel;
}
+
+ int baseNote() const;
Piano *pianoModel()
{
diff --git a/include/InstrumentView.h b/include/InstrumentView.h
index 8c4c4c8..cd092a9 100644
--- a/include/InstrumentView.h
+++ b/include/InstrumentView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/JournallingObject.h b/include/JournallingObject.h
index df99025..07055d1 100644
--- a/include/JournallingObject.h
+++ b/include/JournallingObject.h
@@ -1,9 +1,9 @@
/*
* JournallingObject.h - declaration of class JournallingObject
*
- * Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -25,66 +25,10 @@
#ifndef _JOURNALLING_OBJECT_H
#define _JOURNALLING_OBJECT_H
-#include "lmms_basics.h"
-#include "export.h"
-#include "SerializingObject.h"
-
-#include <QtCore/QVariant>
-#include <QtCore/QVector>
#include <QtCore/QStack>
-
-typedef uint32_t t_action_id;
-
-
-class JournalEntry
-{
-public:
- JournalEntry( const t_action_id _action_id, const QVariant & _data ) :
- m_actionID( _action_id ),
- m_data( _data )
- {
- }
-
- JournalEntry() :
- m_actionID( 0 ),
- m_data( 0 )
- {
- }
-
- ~JournalEntry()
- {
- }
-
- t_action_id actionID() const
- {
- return m_actionID;
- }
-
- t_action_id & actionID()
- {
- return m_actionID;
- }
-
- const QVariant & data() const
- {
- return m_data;
- }
-
- QVariant & data()
- {
- return m_data;
- }
-
-
-private:
- t_action_id m_actionID;
- QVariant m_data;
-
-} ;
-
-
-typedef QVector<JournalEntry> JournalEntryVector;
+#include "lmms_basics.h"
+#include "SerializingObject.h"
class EXPORT JournallingObject : public SerializingObject
@@ -98,40 +42,27 @@ public:
return m_id;
}
- void undo();
- void redo();
-
- void clear()
- {
- m_journalEntries.clear();
- m_currentJournalEntry = m_journalEntries.end();
- }
-
- void clearRedoSteps()
- {
- m_journalEntries.erase( m_currentJournalEntry,
- m_journalEntries.end() );
- m_currentJournalEntry = m_journalEntries.end();
-
- }
-
- void saveJournallingState( const bool _new_state )
+ void saveJournallingState( const bool newState )
{
m_journallingStateStack.push( m_journalling );
- m_journalling = _new_state;
+ m_journalling = newState;
}
void restoreJournallingState()
{
- m_journalling = m_journallingStateStack.pop();
+ if( !isJournallingStateStackEmpty())
+ {
+ m_journalling = m_journallingStateStack.pop();
+ }
}
+ void addJournalCheckPoint();
+
virtual QDomElement saveState( QDomDocument & _doc,
- QDomElement & _parent );
+ QDomElement & _parent );
virtual void restoreState( const QDomElement & _this );
-
inline bool isJournalling() const
{
return m_journalling;
@@ -142,38 +73,25 @@ public:
m_journalling = _sr;
}
- inline bool testAndSetJournalling( const bool _sr )
+ inline bool testAndSetJournalling( const bool newState )
{
const bool oldJournalling = m_journalling;
- m_journalling = _sr;
+ m_journalling = newState;
return oldJournalling;
}
+ bool isJournallingStateStackEmpty() const
+ {
+ return m_journallingStateStack.isEmpty();
+ }
protected:
void changeID( jo_id_t _id );
- void addJournalEntry( const JournalEntry & _je );
-
- // to be implemented by sub-objects
- virtual void undoStep( JournalEntry & )
- {
- }
- virtual void redoStep( JournalEntry & )
- {
- }
-
private:
- void saveJournal( QDomDocument & _doc, QDomElement & _parent );
- void loadJournal( const QDomElement & _this );
-
-
jo_id_t m_id;
- JournalEntryVector m_journalEntries;
- JournalEntryVector::Iterator m_currentJournalEntry;
-
bool m_journalling;
QStack<bool> m_journallingStateStack;
diff --git a/include/LadspaBase.h b/include/LadspaBase.h
index 4b77083..6d6ba35 100644
--- a/include/LadspaBase.h
+++ b/include/LadspaBase.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -51,6 +51,8 @@ typedef enum BufferData
NONE
} buffer_data_t;
+//! This struct is used to hold port descriptions internally
+//! which where received from the ladspa plugin
typedef struct PortDescription
{
QString name;
@@ -64,6 +66,9 @@ typedef struct PortDescription
LADSPA_Data min;
LADSPA_Data def;
LADSPA_Data value;
+ //! This is true iff ladspa suggests logscale
+ //! Note however that the model can still decide to use a linear scale
+ bool suggests_logscale;
LADSPA_Data * buffer;
LadspaControl * control;
} port_desc_t;
diff --git a/include/LadspaControl.h b/include/LadspaControl.h
index 8180ce7..4e50379 100644
--- a/include/LadspaControl.h
+++ b/include/LadspaControl.h
@@ -4,7 +4,7 @@
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/LadspaControlView.h b/include/LadspaControlView.h
index 5bfdcb0..21db3ab 100644
--- a/include/LadspaControlView.h
+++ b/include/LadspaControlView.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/LcdSpinBox.h b/include/LcdSpinBox.h
index c95bad4..1592ef1 100644
--- a/include/LcdSpinBox.h
+++ b/include/LcdSpinBox.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/LcdWidget.h b/include/LcdWidget.h
index de90f1f..8524949 100644
--- a/include/LcdWidget.h
+++ b/include/LcdWidget.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,8 +35,8 @@ class EXPORT LcdWidget : public QWidget
{
Q_OBJECT
public:
+ LcdWidget( QWidget* parent, const QString& name = QString::null );
LcdWidget( int numDigits, QWidget* parent, const QString& name = QString::null );
-
LcdWidget( int numDigits, const QString& style, QWidget* parent, const QString& name = QString::null );
virtual ~LcdWidget();
@@ -50,6 +50,10 @@ public:
update();
}
+ Q_PROPERTY( int numDigits READ numDigits WRITE setNumDigits )
+
+ inline int numDigits() const { return m_numDigits; }
+ inline void setNumDigits( int n ) { m_numDigits = n; updateSize(); }
public slots:
virtual void setMarginWidth( int _width );
@@ -82,6 +86,8 @@ private:
int m_numDigits;
int m_marginWidth;
+ void initUi( const QString& name, const QString &style = QString("19green") ); //!< to be called by ctors
+
} ;
#endif
diff --git a/include/LfoController.h b/include/LfoController.h
index 59bea86..f551386 100644
--- a/include/LfoController.h
+++ b/include/LfoController.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/LmmsPalette.h b/include/LmmsPalette.h
new file mode 100644
index 0000000..bea5c9c
--- /dev/null
+++ b/include/LmmsPalette.h
@@ -0,0 +1,93 @@
+/*
+ * LmmsPalette.h - dummy class for fetching palette qproperties from CSS
+ *
+ *
+ * Copyright (c) 2007-2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <QtGui/QWidget>
+#include "export.h"
+
+#ifndef LMMSPALETTE_H
+#define LMMSPALETTE_H
+
+
+class EXPORT LmmsPalette : public QWidget
+{
+ Q_OBJECT
+ Q_PROPERTY( QColor background READ background WRITE setBackground )
+ Q_PROPERTY( QColor windowText READ windowText WRITE setWindowText )
+ Q_PROPERTY( QColor base READ base WRITE setBase )
+ Q_PROPERTY( QColor text READ text WRITE setText )
+ Q_PROPERTY( QColor button READ button WRITE setButton )
+ Q_PROPERTY( QColor shadow READ shadow WRITE setShadow )
+ Q_PROPERTY( QColor buttonText READ buttonText WRITE setButtonText )
+ Q_PROPERTY( QColor brightText READ brightText WRITE setBrightText )
+ Q_PROPERTY( QColor highlight READ highlight WRITE setHighlight )
+ Q_PROPERTY( QColor highlightedText READ highlightedText WRITE setHighlightedText )
+ Q_PROPERTY( QColor toolTipText READ toolTipText WRITE setToolTipText )
+ Q_PROPERTY( QColor toolTipBase READ toolTipBase WRITE setToolTipBase )
+
+public:
+ LmmsPalette( QWidget * parent, QStyle * stylearg );
+ virtual ~LmmsPalette();
+
+#define ACCESSMET( read, write ) \
+ QColor read () const; \
+ void write ( const QColor & c ); \
+
+
+ ACCESSMET( background, setBackground )
+ ACCESSMET( windowText, setWindowText )
+ ACCESSMET( base, setBase )
+ ACCESSMET( text, setText )
+ ACCESSMET( button, setButton )
+ ACCESSMET( shadow, setShadow )
+ ACCESSMET( buttonText, setButtonText )
+ ACCESSMET( brightText, setBrightText )
+ ACCESSMET( highlight, setHighlight )
+ ACCESSMET( highlightedText, setHighlightedText )
+ ACCESSMET( toolTipText, setToolTipText )
+ ACCESSMET( toolTipBase, setToolTipBase )
+
+#undef ACCESSMET
+
+ QPalette palette() const;
+
+private:
+ QColor m_background;
+ QColor m_windowText;
+ QColor m_base;
+ QColor m_text;
+ QColor m_button;
+ QColor m_shadow;
+ QColor m_buttonText;
+ QColor m_brightText;
+ QColor m_highlight;
+ QColor m_highlightedText;
+ QColor m_toolTipText;
+ QColor m_toolTipBase;
+};
+
+
+
+
+#endif
diff --git a/include/LmmsStyle.h b/include/LmmsStyle.h
index 7b74a06..599450c 100644
--- a/include/LmmsStyle.h
+++ b/include/LmmsStyle.h
@@ -3,8 +3,8 @@
* interface
*
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,12 +24,13 @@
*/
-#ifndef _LMMS_STYLE_H
-#define _LMMS_STYLE_H
+#ifndef LMMS_STYLE_H
+#define LMMS_STYLE_H
#include <QtGui/QPlastiqueStyle>
+
class LmmsStyle : public QPlastiqueStyle
{
public:
@@ -81,17 +82,19 @@ public:
const QWidget *widget = 0 ) const;
virtual int pixelMetric( PixelMetric metric,
- const QStyleOption * option = 0,
+ const QStyleOption * option = 0,
const QWidget * widget = 0 ) const;
// QSize sizeFromContents( ContentsType type, const QStyleOption* option, const QSize& size, const QWidget* widget ) const;
// QRect subControlRect( ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget ) const;
+ static QPalette * s_palette;
+
private:
QImage colorizeXpm( const char * const * xpm, const QBrush& fill ) const;
void hoverColors( bool sunken, bool hover, bool active, QColor& color, QColor& blend ) const;
QColor m_colors[ LmmsStyle::NumColorRoles ];
-} ;
+};
#endif
diff --git a/include/MainWindow.h b/include/MainWindow.h
index c621059..ddab13b 100644
--- a/include/MainWindow.h
+++ b/include/MainWindow.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -58,9 +58,20 @@ public:
void addSpacingToToolBar( int _size );
- // every function that replaces current file (e.g. creates new file,
- // opens another file...) has to call this before and may only process
- // if this function returns true
+ ///
+ /// \brief Asks whether changes made to the project are to be saved.
+ ///
+ /// Opens a dialog giving the user the choice to (a) confirm his choice
+ /// (such as opening a new file), (b) save the current project before
+ /// proceeding or (c) cancel the process.
+ ///
+ /// Every function that replaces the current file (e.g. creates new file,
+ /// opens another file...) must call this before and may only proceed if
+ /// this function returns true.
+ ///
+ /// \return true if the user allows the software to proceed, false if they
+ /// cancel the action.
+ ///
bool mayChangeProject();
diff --git a/include/MemoryHelper.h b/include/MemoryHelper.h
new file mode 100644
index 0000000..66258f7
--- /dev/null
+++ b/include/MemoryHelper.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2014 Simon Symeonidis <lethaljellybean/at/gmail/com>
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#ifndef MEMORY_HELPER_H
+#define MEMORY_HELPER_H
+
+/**
+ * Helper class to alocate aligned memory and free it.
+ */
+class MemoryHelper {
+public:
+
+ static void* alignedMalloc( int );
+
+ static void alignedFree( void* );
+
+private:
+};
+
+#endif
+
diff --git a/include/MeterDialog.h b/include/MeterDialog.h
index 698c6ce..eba7bff 100644
--- a/include/MeterDialog.h
+++ b/include/MeterDialog.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/yahoo.com>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,6 +35,7 @@ class LcdSpinBox;
class MeterDialog : public QWidget, public ModelView
{
+ Q_OBJECT
public:
MeterDialog( QWidget * _parent, bool _simple = false );
virtual ~MeterDialog();
diff --git a/include/MeterModel.h b/include/MeterModel.h
index 4f12060..3a3c27a 100644
--- a/include/MeterModel.h
+++ b/include/MeterModel.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MicroTimer.h b/include/MicroTimer.h
index 5676a46..e4d2a9a 100644
--- a/include/MicroTimer.h
+++ b/include/MicroTimer.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/Midi.h b/include/Midi.h
index 96c66ea..d998a35 100644
--- a/include/Midi.h
+++ b/include/Midi.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -129,7 +129,7 @@ const int MidiProgramCount = 128;
const int MidiMaxVelocity = 127;
const int MidiDefaultVelocity = MidiMaxVelocity / 2;
const int MidiMaxControllerValue = 127;
-const int MidiMaxNote = 127;
+const int MidiMaxKey = 127;
const int MidiMaxPanning = 127;
const int MidiMinPanning = -128;
diff --git a/include/MidiAlsaRaw.h b/include/MidiAlsaRaw.h
index 9c99435..704b9e0 100644
--- a/include/MidiAlsaRaw.h
+++ b/include/MidiAlsaRaw.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MidiAlsaSeq.h b/include/MidiAlsaSeq.h
index 70640ae..c169793 100644
--- a/include/MidiAlsaSeq.h
+++ b/include/MidiAlsaSeq.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2013 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MidiClient.h b/include/MidiClient.h
index 2888999..7208ea5 100644
--- a/include/MidiClient.h
+++ b/include/MidiClient.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MidiController.h b/include/MidiController.h
index 2271e86..c98f30e 100644
--- a/include/MidiController.h
+++ b/include/MidiController.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,8 +22,8 @@
*
*/
-#ifndef _MIDI_CONTROLLER_H
-#define _MIDI_CONTROLLER_H
+#ifndef MIDI_CONTROLLER_H
+#define MIDI_CONTROLLER_H
#include <QtGui/QWidget>
@@ -44,10 +44,10 @@ public:
virtual ~MidiController();
virtual void processInEvent( const MidiEvent & _me,
- const MidiTime & _time );
+ const MidiTime & _time, f_cnt_t offset = 0 );
virtual void processOutEvent( const MidiEvent& _me,
- const MidiTime & _time)
+ const MidiTime & _time, f_cnt_t offset = 0 )
{
// No output yet
}
diff --git a/include/MidiDummy.h b/include/MidiDummy.h
index cba725f..32eb31d 100644
--- a/include/MidiDummy.h
+++ b/include/MidiDummy.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MidiEvent.h b/include/MidiEvent.h
index c87d042..1ead0d5 100644
--- a/include/MidiEvent.h
+++ b/include/MidiEvent.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MidiEventProcessor.h b/include/MidiEventProcessor.h
index dafcfb6..9da1145 100644
--- a/include/MidiEventProcessor.h
+++ b/include/MidiEventProcessor.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,8 +22,8 @@
*
*/
-#ifndef _MIDI_EVENT_PROCESSOR_H
-#define _MIDI_EVENT_PROCESSOR_H
+#ifndef MIDI_EVENT_PROCESSOR_H
+#define MIDI_EVENT_PROCESSOR_H
#include "MidiEvent.h"
#include "MidiTime.h"
@@ -42,8 +42,8 @@ public:
}
// to be implemented by inheriting classes
- virtual void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime() ) = 0;
- virtual void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime() ) = 0;
+ virtual void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ) = 0;
+ virtual void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ) = 0;
} ;
diff --git a/include/MidiOss.h b/include/MidiOss.h
index 0790096..468a56d 100644
--- a/include/MidiOss.h
+++ b/include/MidiOss.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MidiPort.h b/include/MidiPort.h
index 8101654..16199fd 100644
--- a/include/MidiPort.h
+++ b/include/MidiPort.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MidiPortMenu.h b/include/MidiPortMenu.h
index 55e61ee..51bf530 100644
--- a/include/MidiPortMenu.h
+++ b/include/MidiPortMenu.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MidiTime.h b/include/MidiTime.h
index 9a86f3b..9d8c1ab 100644
--- a/include/MidiTime.h
+++ b/include/MidiTime.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -62,6 +62,11 @@ public:
return getTact() * s_ticksPerTact;
}
+ MidiTime toAbsoluteTact() const
+ {
+ return getTact() * s_ticksPerTact;
+ }
+
MidiTime& operator=( const MidiTime& time )
{
m_ticks = time.m_ticks;
diff --git a/include/MidiWinMM.h b/include/MidiWinMM.h
index 54b6bdf..d6f040d 100644
--- a/include/MidiWinMM.h
+++ b/include/MidiWinMM.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/MixHelpers.h b/include/MixHelpers.h
index a1ddd33..ca7c750 100644
--- a/include/MixHelpers.h
+++ b/include/MixHelpers.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -39,6 +39,8 @@ void add( sampleFrame* dst, const sampleFrame* src, int frames );
/*! \brief Add samples from src multiplied by coeffSrc to dst */
void addMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames );
+/*! \brief Same as addMultiplied, but sanitize output (strip out infs/nans) */
+void addSanitizedMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames );
/*! \brief Add samples from src multiplied by coeffSrcLeft/coeffSrcRight to dst */
void addMultipliedStereo( sampleFrame* dst, const sampleFrame* src, float coeffSrcLeft, float coeffSrcRight, int frames );
diff --git a/include/Mixer.h b/include/Mixer.h
index f35c24b..9319959 100644
--- a/include/Mixer.h
+++ b/include/Mixer.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -25,6 +25,14 @@
#ifndef _MIXER_H
#define _MIXER_H
+// denormals stripping
+#ifdef __SSE__
+#include <xmmintrin.h>
+#endif
+#ifdef __SSE3__
+#include <pmmintrin.h>
+#endif
+
#include "lmmsconfig.h"
#ifndef LMMS_USE_3RDPARTY_LIBSRC
@@ -47,6 +55,7 @@
#include "lmms_basics.h"
#include "note.h"
#include "fifo_buffer.h"
+#include "MixerProfiler.h"
class AudioDevice;
@@ -106,8 +115,6 @@ public:
Interpolation interpolation;
Oversampling oversampling;
- bool sampleExactControllers;
- bool aliasFreeOscillators;
qualitySettings( Mode _m )
{
@@ -116,31 +123,22 @@ public:
case Mode_Draft:
interpolation = Interpolation_Linear;
oversampling = Oversampling_None;
- sampleExactControllers = false;
- aliasFreeOscillators = false;
break;
case Mode_HighQuality:
interpolation =
Interpolation_SincFastest;
oversampling = Oversampling_2x;
- sampleExactControllers = true;
- aliasFreeOscillators = false;
break;
case Mode_FinalMix:
interpolation = Interpolation_SincBest;
oversampling = Oversampling_8x;
- sampleExactControllers = true;
- aliasFreeOscillators = true;
break;
}
}
- qualitySettings( Interpolation _i, Oversampling _o, bool _sec,
- bool _afo ) :
+ qualitySettings( Interpolation _i, Oversampling _o ) :
interpolation( _i ),
- oversampling( _o ),
- sampleExactControllers( _sec ),
- aliasFreeOscillators( _afo )
+ oversampling( _o )
{
}
@@ -240,7 +238,7 @@ public:
return m_playHandles;
}
- void removePlayHandles( track * _track );
+ void removePlayHandles( track * _track, bool removeIPHs = true );
bool hasNotePlayHandles();
@@ -257,9 +255,14 @@ public:
}
- inline int cpuLoad() const
+ MixerProfiler& profiler()
+ {
+ return m_profiler;
+ }
+
+ int cpuLoad() const
{
- return m_cpuLoad;
+ return m_profiler.cpuLoad();
}
const qualitySettings & currentQualitySettings() const
@@ -435,7 +438,6 @@ private:
bool m_oldBuffer[SURROUND_CHANNELS];
bool m_newBuffer[SURROUND_CHANNELS];
- int m_cpuLoad;
QVector<MixerWorkerThread *> m_workers;
int m_numWorkers;
QWaitCondition m_queueReadyWaitCond;
@@ -464,6 +466,7 @@ private:
fifo * m_fifo;
fifoWriter * m_fifoWriter;
+ MixerProfiler m_profiler;
friend class engine;
friend class MixerWorkerThread;
diff --git a/include/MixerProfiler.h b/include/MixerProfiler.h
new file mode 100644
index 0000000..ccb14ec
--- /dev/null
+++ b/include/MixerProfiler.h
@@ -0,0 +1,60 @@
+/*
+ * MixerProfiler.h - class for profiling performance of Mixer
+ *
+ * Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef MIXER_PROFILER_H
+#define MIXER_PROFILER_H
+
+#include <QFile>
+
+#include "MicroTimer.h"
+
+class MixerProfiler
+{
+public:
+ MixerProfiler();
+ ~MixerProfiler();
+
+ void startPeriod()
+ {
+ m_periodTimer.reset();
+ }
+
+ void finishPeriod( sample_rate_t sampleRate, fpp_t framesPerPeriod );
+
+ int cpuLoad() const
+ {
+ return m_cpuLoad;
+ }
+
+ void setOutputFile( const QString& outputFile );
+
+
+private:
+ MicroTimer m_periodTimer;
+ int m_cpuLoad;
+ QFile m_outputFile;
+
+};
+
+#endif
diff --git a/include/MixerWorkerThread.h b/include/MixerWorkerThread.h
new file mode 100644
index 0000000..51da6a9
--- /dev/null
+++ b/include/MixerWorkerThread.h
@@ -0,0 +1,124 @@
+/*
+ * MixerWorkerThread.h - declaration of class MixerWorkerThread
+ *
+ * Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef MIXER_WORKER_THREAD_H
+#define MIXER_WORKER_THREAD_H
+
+#include <QtCore/QAtomicPointer>
+#include <QtCore/QThread>
+
+#include "ThreadableJob.h"
+#include "Mixer.h"
+
+#ifdef __SSE__
+#include <xmmintrin.h>
+#endif
+#ifdef __SSE3__
+#include <pmmintrin.h>
+#endif
+
+class MixerWorkerThread : public QThread
+{
+public:
+ // internal representation of the job queue - all functions are thread-safe
+ class JobQueue
+ {
+ public:
+ enum OperationMode
+ {
+ Static, // no jobs added while processing queue
+ Dynamic // jobs can be added while processing queue
+ } ;
+
+ JobQueue() :
+ m_items(),
+ m_queueSize( 0 ),
+ m_itemsDone( 0 ),
+ m_opMode( Static )
+ {
+ }
+
+ void reset( OperationMode _opMode );
+
+ void addJob( ThreadableJob * _job );
+
+ void run( sampleFrame * _buffer );
+ void wait();
+
+ private:
+#define JOB_QUEUE_SIZE 1024
+ QAtomicPointer<ThreadableJob> m_items[JOB_QUEUE_SIZE];
+ QAtomicInt m_queueSize;
+ QAtomicInt m_itemsDone;
+ OperationMode m_opMode;
+
+ } ;
+
+
+ MixerWorkerThread( Mixer* mixer );
+ virtual ~MixerWorkerThread();
+
+ virtual void quit();
+
+ static void resetJobQueue( JobQueue::OperationMode _opMode =
+ JobQueue::Static )
+ {
+ globalJobQueue.reset( _opMode );
+ }
+
+ static void addJob( ThreadableJob * _job )
+ {
+ globalJobQueue.addJob( _job );
+ }
+
+ // a convenient helper function allowing to pass a container with pointers
+ // to ThreadableJob objects
+ template<typename T>
+ static void fillJobQueue( const T & _vec,
+ JobQueue::OperationMode _opMode = JobQueue::Static )
+ {
+ resetJobQueue( _opMode );
+ for( typename T::ConstIterator it = _vec.begin(); it != _vec.end(); ++it )
+ {
+ addJob( *it );
+ }
+ }
+
+ static void startAndWaitForJobs();
+
+
+private:
+ virtual void run();
+
+ static JobQueue globalJobQueue;
+ static QWaitCondition * queueReadyWaitCond;
+ static QList<MixerWorkerThread *> workerThreads;
+
+ sampleFrame * m_workingBuf;
+ volatile bool m_quit;
+
+} ;
+
+
+#endif
diff --git a/include/Model.h b/include/Model.h
index 94883c6..9f0590e 100644
--- a/include/Model.h
+++ b/include/Model.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ModelView.h b/include/ModelView.h
index 9f8cd9e..9e323a9 100644
--- a/include/ModelView.h
+++ b/include/ModelView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/NotePlayHandle.h b/include/NotePlayHandle.h
index a20aaa3..8f5f2fe 100644
--- a/include/NotePlayHandle.h
+++ b/include/NotePlayHandle.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -51,6 +51,8 @@ public:
{
OriginPattern, /*! playback of a note from a pattern */
OriginMidiInput, /*! playback of a MIDI note input event */
+ OriginNoteStacking, /*! created by note stacking instrument function */
+ OriginArpeggio, /*! created by arpeggio instrument function */
OriginCount
};
typedef Origins Origin;
@@ -60,7 +62,6 @@ public:
const f_cnt_t frames,
const note& noteToPlay,
NotePlayHandle* parent = NULL,
- const bool isPartOfArp = false,
int midiEventChannel = -1,
Origin origin = OriginPattern );
virtual ~NotePlayHandle();
@@ -93,7 +94,7 @@ public:
/*! Returns whether playback of note is finished and thus handle can be deleted */
virtual bool isFinished() const
{
- return m_released && framesLeft() <= 0;
+ return m_released && framesLeft() <= 0 && m_scheduledNoteOff < 0;
}
/*! Returns number of frames left for playback */
@@ -160,27 +161,24 @@ public:
return m_instrumentTrack;
}
- /*! Returns whether note is a top note, e.g. is not part of an arpeggio or a chord */
- bool isTopNote() const
+ /*! Returns whether note has a parent, e.g. is not part of an arpeggio or a chord */
+ bool hasParent() const
{
- return m_topNote;
+ return m_hasParent;
}
- /*! Returns whether note is part of an arpeggio playback */
- bool isPartOfArpeggio() const
+ /*! Returns origin of note */
+ Origin origin() const
{
- return m_partOfArpeggio;
+ return m_origin;
}
- /*! Sets whether note is part of an arpeggio playback */
- void setPartOfArpeggio( const bool _on )
+ /*! Returns whether note has children */
+ bool isMasterNote() const
{
- m_partOfArpeggio = _on;
+ return m_subNotes.size() > 0 || m_hadChildren;
}
- /*! Returns whether note is base note for arpeggio */
- bool isArpeggioBaseNote() const;
-
/*! Returns whether note is muted */
bool isMuted() const
{
@@ -266,13 +264,11 @@ private:
// played after release
f_cnt_t m_releaseFramesDone; // number of frames done after
// release of note
+ f_cnt_t m_scheduledNoteOff; // variable for scheduling noteoff at next period
NotePlayHandleList m_subNotes; // used for chords and arpeggios
volatile bool m_released; // indicates whether note is released
- bool m_topNote; // indicates whether note is a
- // base-note (i.e. no sub-note)
- bool m_partOfArpeggio; // indicates whether note is part of
- // an arpeggio (either base-note or
- // sub-note)
+ bool m_hasParent;
+ bool m_hadChildren;
bool m_muted; // indicates whether note is muted
track* m_bbTrack; // related BB track
diff --git a/include/Oscillator.h b/include/Oscillator.h
index cca73ab..da3e8ce 100644
--- a/include/Oscillator.h
+++ b/include/Oscillator.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/Pattern.h b/include/Pattern.h
new file mode 100644
index 0000000..33e68fa
--- /dev/null
+++ b/include/Pattern.h
@@ -0,0 +1,200 @@
+/*
+ * Pattern.h - declaration of class Pattern, which contains all information
+ * about a pattern
+ *
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef PATTERN_H
+#define PATTERN_H
+
+#include <QtCore/QVector>
+#include <QtGui/QWidget>
+#include <QtGui/QDialog>
+#include <QtCore/QThread>
+#include <QtGui/QPixmap>
+
+
+#include "note.h"
+#include "track.h"
+
+
+class QAction;
+class QProgressBar;
+class QPushButton;
+
+class InstrumentTrack;
+class SampleBuffer;
+
+
+
+class EXPORT Pattern : public trackContentObject
+{
+ Q_OBJECT
+public:
+ enum PatternTypes
+ {
+ BeatPattern,
+ MelodyPattern
+ } ;
+
+ Pattern( InstrumentTrack* instrumentTrack );
+ Pattern( const Pattern& other );
+ virtual ~Pattern();
+
+ void init();
+
+
+ virtual MidiTime length() const;
+ MidiTime beatPatternLength() const;
+
+ // note management
+ note * addNote( const note & _new_note, const bool _quant_pos = true );
+
+ void removeNote( const note * _note_to_del );
+
+ note * noteAtStep( int _step );
+
+ note * rearrangeNote( const note * _note_to_proc,
+ const bool _quant_pos = true );
+ void rearrangeAllNotes();
+ void clearNotes();
+
+ inline const NoteVector & notes() const
+ {
+ return m_notes;
+ }
+
+ void setStep( int _step, bool _enabled );
+
+ // pattern-type stuff
+ inline PatternTypes type() const
+ {
+ return m_patternType;
+ }
+ void setType( PatternTypes _new_pattern_type );
+ void checkType();
+
+
+ // settings-management
+ virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
+ virtual void loadSettings( const QDomElement & _this );
+ inline virtual QString nodeName() const
+ {
+ return "pattern";
+ }
+
+ inline InstrumentTrack * instrumentTrack() const
+ {
+ return m_instrumentTrack;
+ }
+
+ bool empty();
+
+
+ virtual trackContentObjectView * createView( trackView * _tv );
+
+
+ using Model::dataChanged;
+
+
+protected:
+ void ensureBeatNotes();
+ void updateBBTrack();
+
+
+protected slots:
+ void addSteps();
+ void removeSteps();
+ void clear();
+ void changeTimeSignature();
+
+
+private:
+ InstrumentTrack * m_instrumentTrack;
+
+ PatternTypes m_patternType;
+
+ // data-stuff
+ NoteVector m_notes;
+ int m_steps;
+
+ friend class PatternView;
+ friend class bbEditor;
+
+
+signals:
+ void destroyedPattern( Pattern* );
+
+} ;
+
+
+
+class PatternView : public trackContentObjectView
+{
+ Q_OBJECT
+
+// theming qproperties
+ Q_PROPERTY( QColor fgColor READ fgColor WRITE setFgColor )
+ Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor )
+public:
+ PatternView( Pattern* pattern, trackView* parent );
+ virtual ~PatternView();
+
+
+public slots:
+ virtual void update();
+
+
+protected slots:
+ void openInPianoRoll();
+
+ void resetName();
+ void changeName();
+
+
+protected:
+ virtual void constructContextMenu( QMenu * );
+ virtual void mouseDoubleClickEvent( QMouseEvent * _me );
+ virtual void mousePressEvent( QMouseEvent * _me );
+ virtual void paintEvent( QPaintEvent * _pe );
+ virtual void resizeEvent( QResizeEvent * _re )
+ {
+ m_needsUpdate = true;
+ trackContentObjectView::resizeEvent( _re );
+ }
+ virtual void wheelEvent( QWheelEvent * _we );
+
+
+private:
+ static QPixmap * s_stepBtnOn;
+ static QPixmap * s_stepBtnOverlay;
+ static QPixmap * s_stepBtnOff;
+ static QPixmap * s_stepBtnOffLight;
+
+ Pattern* m_pat;
+ QPixmap m_paintPixmap;
+ bool m_needsUpdate;
+} ;
+
+
+
+#endif
diff --git a/include/PeakController.h b/include/PeakController.h
index 89691aa..36ceefb 100644
--- a/include/PeakController.h
+++ b/include/PeakController.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/Piano.h b/include/Piano.h
index 8e86622..ff2e185 100644
--- a/include/Piano.h
+++ b/include/Piano.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/PianoRoll.h b/include/PianoRoll.h
index 09ef9db..8437c9a 100644
--- a/include/PianoRoll.h
+++ b/include/PianoRoll.h
@@ -5,7 +5,7 @@
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2008 Andrew Kelley <superjoe30/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -28,13 +28,14 @@
#define PIANO_ROLL_H
#include <QtGui/QWidget>
+#include <QtGui/QInputDialog>
#include "ComboBoxModel.h"
#include "SerializingObject.h"
#include "note.h"
#include "lmms_basics.h"
#include "song.h"
-
+#include "tooltip.h"
class QPainter;
class QPixmap;
@@ -45,18 +46,22 @@ class QSignalMapper;
class comboBox;
class NotePlayHandle;
-class pattern;
+class Pattern;
class timeLine;
class toolButton;
class PianoRoll : public QWidget, public SerializingObject
{
Q_OBJECT
+ Q_PROPERTY( QColor gridColor READ gridColor WRITE setGridColor )
+ Q_PROPERTY( QColor noteModeColor READ noteModeColor WRITE setNoteModeColor )
+ Q_PROPERTY( QColor noteColor READ noteColor WRITE setNoteColor )
+ Q_PROPERTY( QColor barColor READ barColor WRITE setBarColor )
public:
/*! \brief Resets settings to default when e.g. creating a new project */
void reset();
- void setCurrentPattern( pattern * _new_pattern );
+ void setCurrentPattern( Pattern* newPattern );
inline void stopRecording()
{
@@ -68,12 +73,12 @@ public:
return m_recording;
}
- inline const pattern * currentPattern() const
+ const Pattern* currentPattern() const
{
return m_pattern;
}
- inline bool validPattern() const
+ bool hasValidPattern() const
{
return m_pattern != NULL;
}
@@ -92,7 +97,16 @@ public:
}
void setPauseIcon( bool pause );
-
+
+ // qproperty acces functions
+ QColor gridColor() const;
+ void setGridColor( const QColor & _c );
+ QColor noteModeColor() const;
+ void setNoteModeColor( const QColor & _c );
+ QColor noteColor() const;
+ void setNoteColor( const QColor & _c );
+ QColor barColor() const;
+ void setBarColor( const QColor & _c );
protected:
virtual void closeEvent( QCloseEvent * _ce );
@@ -109,11 +123,13 @@ protected:
int getKey( int _y ) const;
static inline void drawNoteRect( QPainter & _p, int _x, int _y,
- int _width, note * _n );
+ int _width, note * _n, const QColor & noteCol );
void removeSelection();
void selectAll();
void getSelectedNotes( NoteVector & _selected_notes );
+ // for entering values with dblclick in the vol/pan bars
+ void enterValue( NoteVector* nv );
protected slots:
void play();
@@ -148,6 +164,8 @@ protected slots:
void changeNoteEditMode( int i );
void markSemiTone( int i );
+ void hidePattern( Pattern* pattern );
+
signals:
void currentPatternChanged();
@@ -244,6 +262,7 @@ private:
static PianoRollKeyTypes prKeyOrder[];
+ static textFloat * s_textFloat;
QWidget * m_toolBar;
@@ -275,7 +294,7 @@ private:
- pattern * m_pattern;
+ Pattern* m_pattern;
QScrollBar * m_leftRightScroll;
QScrollBar * m_topBottomScroll;
@@ -344,8 +363,16 @@ private:
void computeSelectedNotes( bool shift );
void clearSelectedNotes();
+ // did we start a mouseclick with shift pressed
+ bool m_startedWithShift;
+
friend class engine;
+ // qproperty fields
+ QColor m_gridColor;
+ QColor m_noteModeColor;
+ QColor m_noteColor;
+ QColor m_barColor;
signals:
void positionChanged( const MidiTime & );
diff --git a/include/PianoView.h b/include/PianoView.h
index 3f99fbc..ec9e077 100644
--- a/include/PianoView.h
+++ b/include/PianoView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/Pitch.h b/include/Pitch.h
index dc47985..8bb8743 100644
--- a/include/Pitch.h
+++ b/include/Pitch.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/PlayHandle.h b/include/PlayHandle.h
index f4d3257..6a78277 100644
--- a/include/PlayHandle.h
+++ b/include/PlayHandle.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -28,12 +28,13 @@
#include <QtCore/QThread>
#include <QtCore/QVector>
+#include "ThreadableJob.h"
#include "lmms_basics.h"
class track;
-class PlayHandle
+class PlayHandle : public ThreadableJob
{
public:
enum Types
@@ -72,6 +73,18 @@ public:
return m_type;
}
+ // required for ThreadableJob
+ virtual void doProcessing( sampleFrame* buffer )
+ {
+ play( buffer );
+ }
+
+ virtual bool requiresProcessing() const
+ {
+ return !isFinished();
+ }
+
+
virtual void play( sampleFrame* buffer ) = 0;
virtual bool isFinished( void ) const = 0;
diff --git a/include/Plugin.h b/include/Plugin.h
index 1deb6a6..5cfb376 100644
--- a/include/Plugin.h
+++ b/include/Plugin.h
@@ -1,9 +1,9 @@
/*
* Plugin.h - class plugin, the base-class and generic interface for all plugins
*
- * Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,18 +22,15 @@
*
*/
-#ifndef _PLUGIN_H
-#define _PLUGIN_H
+#ifndef PLUGIN_H
+#define PLUGIN_H
-#include <QtCore/QString>
#include <QtCore/QStringList>
-#include <QtCore/QList>
+#include <QtCore/QMap>
#include <QtXml/QDomDocument>
#include "JournallingObject.h"
#include "Model.h"
-#include "base64.h"
-
class QWidget;
@@ -43,8 +40,9 @@ class PluginView;
class AutomatableModel;
-class EXPORT Plugin : public JournallingObject, public Model
+class EXPORT Plugin : public Model, public JournallingObject
{
+ Q_OBJECT
public:
enum PluginTypes
{
@@ -72,12 +70,12 @@ public:
PluginTypes type;
const PixmapLoader * logo;
const char * supportedFileTypes;
- inline bool supportsFileType( const QString & _ext ) const
+
+ inline bool supportsFileType( const QString& extension ) const
{
- return QString( supportedFileTypes ).
- split( QChar( ',' ) ).
- contains( _ext );
+ return QString( supportedFileTypes ).split( QChar( ',' ) ).contains( extension );
}
+
class EXPORT SubPluginFeatures
{
public:
@@ -101,11 +99,10 @@ public:
inline bool isValid() const
{
- return desc != NULL &&
- name != QString::null;
+ return desc != NULL && name.isNull() == false;
}
- const Plugin::Descriptor * desc;
+ const Plugin::Descriptor* desc;
QString name;
AttributeMap attributes;
} ;
@@ -113,8 +110,8 @@ public:
typedef QList<Key> KeyList;
- SubPluginFeatures( Plugin::PluginTypes _type ) :
- m_type( _type )
+ SubPluginFeatures( Plugin::PluginTypes type ) :
+ m_type( type )
{
}
@@ -126,8 +123,7 @@ public:
{
}
- virtual void listSubPluginKeys( const Plugin::Descriptor *,
- KeyList & ) const
+ virtual void listSubPluginKeys( const Plugin::Descriptor *, KeyList & ) const
{
}
@@ -144,15 +140,13 @@ public:
typedef QList<Descriptor> DescriptorList;
// contructor of a plugin
- Plugin( const Descriptor * _descriptor, Model * _parent );
+ Plugin( const Descriptor* descriptor, Model* parent );
virtual ~Plugin();
// returns display-name out of descriptor
virtual QString displayName() const
{
- return Model::displayName().isEmpty() ?
- m_descriptor->displayName :
- Model::displayName();
+ return Model::displayName().isEmpty() ? m_descriptor->displayName : Model::displayName();
}
// return plugin-type
@@ -162,41 +156,40 @@ public:
}
// return plugin-descriptor for further information
- inline const Descriptor * descriptor() const
+ inline const Descriptor* descriptor() const
{
return m_descriptor;
}
// can be called if a file matching supportedFileTypes should be
// loaded/processed with the help of this plugin
- virtual void loadFile( const QString & _file );
+ virtual void loadFile( const QString& file );
// Called if external source needs to change something but we cannot
// reference the class header. Should return null if not key not found.
- virtual AutomatableModel * childModel( const QString & _modelName );
+ virtual AutomatableModel* childModel( const QString& modelName );
// returns an instance of a plugin whose name matches to given one
// if specified plugin couldn't be loaded, it creates a dummy-plugin
- static Plugin * instantiate( const QString & _plugin_name,
- Model * _parent, void * _data );
+ static Plugin * instantiate( const QString& pluginName, Model * parent, void * data );
// fills given list with descriptors of all available plugins
- static void getDescriptorsOfAvailPlugins( DescriptorList & _plugin_descs );
+ static void getDescriptorsOfAvailPlugins( DescriptorList& pluginDescriptors );
// create a view for the model
- PluginView * createView( QWidget * _parent );
+ PluginView * createView( QWidget* parent );
protected:
// create a view for the model
- virtual PluginView * instantiateView( QWidget * ) = 0;
+ virtual PluginView* instantiateView( QWidget* ) = 0;
private:
- const Descriptor * m_descriptor;
+ const Descriptor* m_descriptor;
// pointer to instantiation-function in plugin
- typedef Plugin * ( * instantiationHook )( Model *, void * );
+ typedef Plugin * ( * InstantiationHook )( Model*, void* );
} ;
diff --git a/include/PluginView.h b/include/PluginView.h
index 0f17ff2..ef3e442 100644
--- a/include/PluginView.h
+++ b/include/PluginView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/PresetPreviewPlayHandle.h b/include/PresetPreviewPlayHandle.h
index 19b3e46..673fa1f 100644
--- a/include/PresetPreviewPlayHandle.h
+++ b/include/PresetPreviewPlayHandle.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ProjectJournal.h b/include/ProjectJournal.h
index 041f750..5cb7920 100644
--- a/include/ProjectJournal.h
+++ b/include/ProjectJournal.h
@@ -1,9 +1,9 @@
/*
* ProjectJournal.h - declaration of class ProjectJournal
*
- * Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2006-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,14 +22,14 @@
*
*/
-#ifndef _PROJECT_JOURNAL_H
-#define _PROJECT_JOURNAL_H
+#ifndef PROJECT_JOURNAL_H
+#define PROJECT_JOURNAL_H
#include <QtCore/QHash>
-#include <QtCore/QVariant>
-#include <QtCore/QVector>
+#include <QtCore/QStack>
#include "lmms_basics.h"
+#include "DataFile.h"
class JournallingObject;
@@ -37,14 +37,15 @@ class JournallingObject;
class ProjectJournal
{
public:
+ static const int MAX_UNDO_STATES;
+
ProjectJournal();
virtual ~ProjectJournal();
void undo();
void redo();
- // tell history that a new journal entry was added to object with ID _id
- void journalEntryAdded( const jo_id_t _id );
+ void addJournalCheckPoint( JournallingObject *jo );
bool isJournalling() const
{
@@ -72,12 +73,8 @@ public:
reallocID( _id, NULL );
}
- // completely remove everything linked with ID _id - all global
- // journalling information about the ID get's lost
- void forgetAboutID( const jo_id_t _id );
-
void clearJournal();
-
+ void stopAllJournalling();
JournallingObject * journallingObject( const jo_id_t _id )
{
if( m_joIDs.contains( _id ) )
@@ -90,12 +87,23 @@ public:
private:
typedef QHash<jo_id_t, JournallingObject *> JoIdMap;
- typedef QVector<jo_id_t> JournalEntryVector;
+
+ struct CheckPoint
+ {
+ CheckPoint( jo_id_t initID = 0, const DataFile& initData = DataFile( DataFile::JournalData ) ) :
+ joID( initID ),
+ data( initData )
+ {
+ }
+ jo_id_t joID;
+ DataFile data;
+ } ;
+ typedef QStack<CheckPoint> CheckPointStack;
JoIdMap m_joIDs;
- JournalEntryVector m_journalEntries;
- JournalEntryVector::Iterator m_currentJournalEntry;
+ CheckPointStack m_undoCheckPoints;
+ CheckPointStack m_redoCheckPoints;
bool m_journalling;
diff --git a/include/ProjectRenderer.h b/include/ProjectRenderer.h
index afee328..f1b902f 100644
--- a/include/ProjectRenderer.h
+++ b/include/ProjectRenderer.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/RemotePlugin.h b/include/RemotePlugin.h
index 40eb786..35a8070 100644
--- a/include/RemotePlugin.h
+++ b/include/RemotePlugin.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/RmsHelper.h b/include/RmsHelper.h
new file mode 100644
index 0000000..a65c546
--- /dev/null
+++ b/include/RmsHelper.h
@@ -0,0 +1,94 @@
+/*
+ * RmsHelper.h - helper class for calculating RMS
+ *
+ * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ * Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef RMS_HELPER_H
+#define RMS_HELPER_H
+
+#include "lmms_math.h"
+
+class RmsHelper
+{
+public:
+ RmsHelper( int size ) :
+ m_buffer( NULL )
+ {
+ setSize( size );
+ }
+ virtual ~RmsHelper()
+ {
+ if( m_buffer ) delete[] m_buffer;
+ }
+
+ inline void setSize( int size )
+ {
+ if( m_buffer )
+ {
+ if( m_size < size )
+ {
+ delete m_buffer;
+ m_buffer = new float[ size ];
+ m_size = size;
+ reset();
+ }
+ else
+ {
+ m_size = size;
+ reset();
+ }
+ }
+ else
+ {
+ m_buffer = new float[ size ];
+ m_size = size;
+ reset();
+ }
+ }
+
+ inline void reset()
+ {
+ m_sizef = 1.0f / (float) m_size;
+ m_pos = 0;
+ m_sum = 0.0f;
+ memset( m_buffer, 0, m_size * sizeof( float ) );
+ }
+
+ inline float update( const float in )
+ {
+ m_sum -= m_buffer[ m_pos ];
+ m_sum += m_buffer[ m_pos ] = in * in;
+ ++m_pos %= m_size;
+ return sqrtf( m_sum * m_sizef );
+ }
+
+private:
+ float * m_buffer;
+ float m_sum;
+ unsigned int m_pos;
+ unsigned int m_size;
+ float m_sizef;
+};
+
+
+#endif
diff --git a/include/SampleBuffer.h b/include/SampleBuffer.h
index 2c0f43f..1cb5864 100644
--- a/include/SampleBuffer.h
+++ b/include/SampleBuffer.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,6 +22,7 @@
*
*/
+
#ifndef SAMPLE_BUFFER_H
#define SAMPLE_BUFFER_H
@@ -36,37 +37,64 @@
#include "lmms_basics.h"
#include "lmms_math.h"
#include "shared_object.h"
+#include "Mixer.h"
class QPainter;
+// values for buffer margins, used for various libsamplerate interpolation modes
+// the array positions correspond to the converter_type parameter values in libsamplerate
+// if there appears problems with playback on some interpolation mode, then the value for that mode
+// may need to be higher - conversely, to optimize, some may work with lower values
+const f_cnt_t MARGIN[] = { 64, 64, 64, 4, 4 };
class EXPORT SampleBuffer : public QObject, public sharedObject
{
Q_OBJECT
public:
+ enum LoopMode {
+ LoopOff = 0,
+ LoopOn,
+ LoopPingPong
+ };
class EXPORT handleState
{
public:
- handleState( bool _varying_pitch = false );
+ handleState( bool _varying_pitch = false, int interpolation_mode = SRC_LINEAR );
virtual ~handleState();
- inline const f_cnt_t frameIndex() const
+ const f_cnt_t frameIndex() const
{
return m_frameIndex;
}
- inline void setFrameIndex( f_cnt_t _index )
+ void setFrameIndex( f_cnt_t _index )
{
m_frameIndex = _index;
}
+ bool isBackwards() const
+ {
+ return m_isBackwards;
+ }
+
+ void setBackwards( bool _backwards )
+ {
+ m_isBackwards = _backwards;
+ }
+
+ int interpolationMode() const
+ {
+ return m_interpolationMode;
+ }
private:
f_cnt_t m_frameIndex;
const bool m_varyingPitch;
+ bool m_isBackwards;
SRC_STATE * m_resamplingData;
+ int m_interpolationMode;
friend class SampleBuffer;
@@ -85,7 +113,7 @@ public:
bool play( sampleFrame * _ab, handleState * _state,
const fpp_t _frames,
const float _freq,
- const bool _looped = false );
+ const LoopMode _loopmode = LoopOff );
void visualize( QPainter & _p, const QRect & _dr, const QRect & _clip, f_cnt_t _from_frame = 0, f_cnt_t _to_frame = 0 );
inline void visualize( QPainter & _p, const QRect & _dr, f_cnt_t _from_frame = 0, f_cnt_t _to_frame = 0 )
@@ -98,18 +126,49 @@ public:
return m_audioFile;
}
- f_cnt_t startFrame() const
+ inline f_cnt_t startFrame() const
{
return m_startFrame;
}
- f_cnt_t endFrame() const
+ inline f_cnt_t endFrame() const
{
return m_endFrame;
}
- void setLoopStartFrame( f_cnt_t start );
- void setLoopEndFrame( f_cnt_t end );
+ inline f_cnt_t loopStartFrame() const
+ {
+ return m_loopStartFrame;
+ }
+
+ inline f_cnt_t loopEndFrame() const
+ {
+ return m_loopEndFrame;
+ }
+
+ void setLoopStartFrame( f_cnt_t _start )
+ {
+ m_varLock.lock();
+ m_loopStartFrame = _start;
+ m_varLock.unlock();
+ }
+
+ void setLoopEndFrame( f_cnt_t _end )
+ {
+ m_varLock.lock();
+ m_loopEndFrame = _end;
+ m_varLock.unlock();
+ }
+
+ void setAllPointFrames( f_cnt_t _start, f_cnt_t _end, f_cnt_t _loopstart, f_cnt_t _loopend )
+ {
+ m_varLock.lock();
+ m_startFrame = _start;
+ m_endFrame = _end;
+ m_loopStartFrame = _loopstart;
+ m_loopEndFrame = _loopend;
+ m_varLock.unlock();
+ }
inline f_cnt_t frames() const
{
@@ -163,7 +222,7 @@ public:
QString openAudioFile() const;
QString openAndSetAudioFile();
QString openAndSetWaveformFile();
-
+
QString & toBase64( QString & _dst ) const;
@@ -185,23 +244,13 @@ public:
inline sample_t userWaveSample( const float _sample ) const
{
- // Precise implementation
-// const float frame = fraction( _sample ) * m_frames;
-// const f_cnt_t f1 = static_cast<f_cnt_t>( frame );
-// const f_cnt_t f2 = ( f1 + 1 ) % m_frames;
-// sample_t waveSample = linearInterpolate( m_data[f1][0],
-// m_data[f2][0],
-// fraction( frame ) );
-// return waveSample;
-
- // Fast implementation
const float frame = _sample * m_frames;
f_cnt_t f1 = static_cast<f_cnt_t>( frame ) % m_frames;
if( f1 < 0 )
{
f1 += m_frames;
}
- return m_data[f1][0];
+ return linearInterpolate( m_data[f1][0], m_data[ (f1 + 1) % m_frames ][0], fraction( frame ) );
}
static QString tryToMakeRelative( const QString & _file );
@@ -211,22 +260,19 @@ public:
public slots:
void setAudioFile( const QString & _audio_file );
void loadFromBase64( const QString & _data );
- void setStartFrame( f_cnt_t start );
- void setEndFrame( f_cnt_t end );
+ void setStartFrame( const f_cnt_t _s );
+ void setEndFrame( const f_cnt_t _e );
void setAmplification( float _a );
void setReversed( bool _on );
private:
- /*! Ensures that all settings are sane like end frame > start frame etc. */
- void sanitizeSettings();
-
void update( bool _keep_settings = false );
void convertIntToFloat ( int_sample_t * & _ibuf, f_cnt_t _frames, int _channels);
void directFloatWrite ( sample_t * & _fbuf, f_cnt_t _frames, int _channels);
- f_cnt_t decodeSampleSF( const char * _f, int_sample_t * & _buf,
+ f_cnt_t decodeSampleSF( const char * _f, sample_t * & _buf,
ch_cnt_t & _channels,
sample_rate_t & _sample_rate );
#ifdef LMMS_HAVE_OGGVORBIS
@@ -253,10 +299,13 @@ private:
float m_frequency;
sample_rate_t m_sampleRate;
- sampleFrame * getSampleFragment( f_cnt_t _start, f_cnt_t _frames,
- bool _looped,
- sampleFrame * * _tmp ) const;
- f_cnt_t getLoopedIndex( f_cnt_t _index ) const;
+ sampleFrame * getSampleFragment( f_cnt_t _index, f_cnt_t _frames,
+ LoopMode _loopmode,
+ sampleFrame * * _tmp,
+ bool * _backwards, f_cnt_t _loopstart, f_cnt_t _loopend,
+ f_cnt_t _end ) const;
+ f_cnt_t getLoopedIndex( f_cnt_t _index, f_cnt_t _startf, f_cnt_t _endf ) const;
+ f_cnt_t getPingPongIndex( f_cnt_t _index, f_cnt_t _startf, f_cnt_t _endf ) const;
signals:
@@ -264,4 +313,5 @@ signals:
} ;
+
#endif
diff --git a/include/SamplePlayHandle.h b/include/SamplePlayHandle.h
index a2ceae7..075bc48 100644
--- a/include/SamplePlayHandle.h
+++ b/include/SamplePlayHandle.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/SampleRecordHandle.h b/include/SampleRecordHandle.h
index 9e50699..46e0c6b 100644
--- a/include/SampleRecordHandle.h
+++ b/include/SampleRecordHandle.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Csaba Hruska <csaba.hruska/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -33,7 +33,6 @@
#include "SampleBuffer.h"
class bbTrack;
-class pattern;
class SampleTCO;
class track;
diff --git a/include/SampleTrack.h b/include/SampleTrack.h
index 2afd928..5b3da6a 100644
--- a/include/SampleTrack.h
+++ b/include/SampleTrack.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -88,6 +88,11 @@ signals:
class SampleTCOView : public trackContentObjectView
{
Q_OBJECT
+
+// theming qproperties
+ Q_PROPERTY( QColor fgColor READ fgColor WRITE setFgColor )
+ Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor )
+
public:
SampleTCOView( SampleTCO * _tco, trackView * _tv );
virtual ~SampleTCOView();
@@ -108,7 +113,6 @@ protected:
private:
SampleTCO * m_tco;
-
} ;
diff --git a/include/SendButtonIndicator.h b/include/SendButtonIndicator.h
new file mode 100644
index 0000000..8615bc3
--- /dev/null
+++ b/include/SendButtonIndicator.h
@@ -0,0 +1,33 @@
+#ifndef SENDBUTTONINDICATOR_H
+#define SENDBUTTONINDICATOR_H
+
+#include <QDebug>
+#include <QtGui/QLabel>
+#include <QtGui/QPixmap>
+
+#include "FxLine.h"
+#include "FxMixerView.h"
+
+class FxLine;
+class FxMixerView;
+
+class SendButtonIndicator : public QLabel
+{
+public:
+ SendButtonIndicator( QWidget * _parent, FxLine * _owner,
+ FxMixerView * _mv);
+
+ virtual void mousePressEvent( QMouseEvent * e );
+ void updateLightStatus();
+
+private:
+
+ FxLine * m_parent;
+ FxMixerView * m_mv;
+ static QPixmap * s_qpmOn;
+ static QPixmap * s_qpmOff;
+
+ FloatModel * getSendModel();
+};
+
+#endif // SENDBUTTONINDICATOR_H
diff --git a/include/SerializingObject.h b/include/SerializingObject.h
index 28442e2..8f7861b 100644
--- a/include/SerializingObject.h
+++ b/include/SerializingObject.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/SideBar.h b/include/SideBar.h
index 9a544b8..5f432f5 100644
--- a/include/SideBar.h
+++ b/include/SideBar.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/SideBarWidget.h b/include/SideBarWidget.h
index ff38994..6da28c2 100644
--- a/include/SideBarWidget.h
+++ b/include/SideBarWidget.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/SongEditor.h b/include/SongEditor.h
index 3c26e76..9ff9747 100644
--- a/include/SongEditor.h
+++ b/include/SongEditor.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/SweepOscillator.h b/include/SweepOscillator.h
index aa2729e..102c2a1 100644
--- a/include/SweepOscillator.h
+++ b/include/SweepOscillator.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/TempoSyncKnob.h b/include/TempoSyncKnob.h
index 964d77c..cae7367 100644
--- a/include/TempoSyncKnob.h
+++ b/include/TempoSyncKnob.h
@@ -4,7 +4,7 @@
* Copyright (c) 2005-2008 Danny McRae <khjklujn/at/yahoo.com>
* Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -38,7 +38,7 @@ class EXPORT TempoSyncKnob : public knob
{
Q_OBJECT
public:
- TempoSyncKnob( int knobNum, QWidget* parent = NULL, const QString& name = QString() );
+ TempoSyncKnob( knobTypes knobNum, QWidget* parent = NULL, const QString& name = QString() );
virtual ~TempoSyncKnob();
const QString & syncDescription();
diff --git a/include/TempoSyncKnobModel.h b/include/TempoSyncKnobModel.h
index 4c0461e..b80919d 100644
--- a/include/TempoSyncKnobModel.h
+++ b/include/TempoSyncKnobModel.h
@@ -4,7 +4,7 @@
* Copyright (c) 2005-2008 Danny McRae <khjklujn/at/yahoo.com>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ThreadableJob.h b/include/ThreadableJob.h
new file mode 100644
index 0000000..c3da4c5
--- /dev/null
+++ b/include/ThreadableJob.h
@@ -0,0 +1,89 @@
+/*
+ * ThreadableJob.h - declaration of class ThreadableJob
+ *
+ * Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef _THREADABLE_JOB_H
+#define _THREADABLE_JOB_H
+
+#include <QtCore/QAtomicInt>
+
+#include "lmms_basics.h"
+
+
+class ThreadableJob
+{
+public:
+
+ enum ProcessingState
+ {
+ Unstarted,
+ Queued,
+ InProgress,
+ Done
+ };
+
+ ThreadableJob() :
+ m_state( ThreadableJob::Unstarted )
+ {
+ }
+
+ inline ProcessingState state() const
+ {
+ return static_cast<ProcessingState>( (int) m_state );
+ }
+
+ inline void reset()
+ {
+ m_state = Unstarted;
+ }
+
+ inline void queue()
+ {
+ m_state = Queued;
+ }
+
+ inline void done()
+ {
+ m_state = Done;
+ }
+
+ void process( sampleFrame* workingBuffer = NULL )
+ {
+ if( m_state.testAndSetOrdered( Queued, InProgress ) )
+ {
+ doProcessing( workingBuffer );
+ m_state = Done;
+ }
+ }
+
+ virtual bool requiresProcessing() const = 0;
+
+
+protected:
+ virtual void doProcessing( sampleFrame* workingBuffer) = 0;
+
+ QAtomicInt m_state;
+
+} ;
+
+#endif
diff --git a/include/TimeDisplayWidget.h b/include/TimeDisplayWidget.h
index cde431d..d0453be 100644
--- a/include/TimeDisplayWidget.h
+++ b/include/TimeDisplayWidget.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Ruben Ibarra
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ToolPlugin.h b/include/ToolPlugin.h
index e680a9e..1e7d61f 100644
--- a/include/ToolPlugin.h
+++ b/include/ToolPlugin.h
@@ -5,7 +5,7 @@
* Copyright (c) 2006-2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ToolPluginView.h b/include/ToolPluginView.h
index 9b81070..cd8141c 100644
--- a/include/ToolPluginView.h
+++ b/include/ToolPluginView.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/TrackContainer.h b/include/TrackContainer.h
index 5918c59..6e33d67 100644
--- a/include/TrackContainer.h
+++ b/include/TrackContainer.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h
index 48d8c49..fe0ead9 100644
--- a/include/TrackContainerView.h
+++ b/include/TrackContainerView.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -139,9 +139,6 @@ protected:
virtual void mouseReleaseEvent( QMouseEvent * _me );
virtual void resizeEvent( QResizeEvent * );
- virtual void undoStep( JournalEntry & _je );
- virtual void redoStep( JournalEntry & _je );
-
MidiTime m_currentPosition;
diff --git a/include/VersionedSaveDialog.h b/include/VersionedSaveDialog.h
index 8041f00..22fda67 100644
--- a/include/VersionedSaveDialog.h
+++ b/include/VersionedSaveDialog.h
@@ -5,7 +5,7 @@
*
* Copyright (c) 2014 Lukas W <lukaswhl/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/VstSyncController.h b/include/VstSyncController.h
index 91c39ea..b09afb5 100644
--- a/include/VstSyncController.h
+++ b/include/VstSyncController.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2013 Mike Choi <rdavidian71/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/VstSyncData.h b/include/VstSyncData.h
index 9daa338..5ca7bd6 100644
--- a/include/VstSyncData.h
+++ b/include/VstSyncData.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2013 Mike Choi <rdavidian71/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/about_dialog.h b/include/about_dialog.h
index b2621ba..841d8b8 100644
--- a/include/about_dialog.h
+++ b/include/about_dialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/aeffectx.h b/include/aeffectx.h
index 4188bf4..8c602d9 100644
--- a/include/aeffectx.h
+++ b/include/aeffectx.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -113,16 +113,24 @@ const int effGetVstVersion = 58; // currently unused
const int kEffectMagic = CCONST( 'V', 's', 't', 'P' );
const int kVstLangEnglish = 1;
const int kVstMidiType = 1;
-const int kVstParameterUsesFloatStep = 1 << 2;
-const int kVstPpqPosValid = 1 << 9;
-const int kVstTempoValid = 1 << 10;
-const int kVstBarsValid = 1 << 11;
-const int kVstCyclePosValid = 1 << 12;
-const int kVstTimeSigValid = 1 << 13;
+
const int kVstTransportPlaying = 1 << 1;
const int kVstTransportCycleActive = 1 << 2;
const int kVstTransportChanged = 1;
+/* validity flags for a VstTimeInfo structure, this info comes from the web */
+
+const int kVstNanosValid (1 << 8);
+const int kVstPpqPosValid (1 << 9);
+const int kVstTempoValid (1 << 10);
+const int kVstBarsValid (1 << 11);
+const int kVstCyclePosValid (1 << 12);
+const int kVstTimeSigValid (1 << 13);
+const int kVstSmpteValid (1 << 14);
+const int kVstClockValid (1 << 15);
+
+
+
class RemoteVstPlugin;
@@ -180,43 +188,50 @@ public:
} ;
-
-
-// Not finished, neither really used
-class VstParameterProperties
+/* constants from http://www.rawmaterialsoftware.com/juceforum/viewtopic.php?t=3740&sid=183f74631fee71a493316735e2b9f28b */
+enum Vestige2StringConstants
{
-public:
-/* float stepFloat;
- char label[64];
- int flags;
- int minInteger;
- int maxInteger;
- int stepInteger;
- char shortLabel[8];
- int category;
- char categoryLabel[24];
- char empty[128];*/
-
- float stepFloat;
- float smallStepFloat;
- float largeStepFloat;
- char label[64];
- unsigned int flags;
- unsigned int minInteger;
- unsigned int maxInteger;
- unsigned int stepInteger;
- unsigned int largeStepInteger;
- char shortLabel[8];
- unsigned short displayIndex;
- unsigned short category;
- unsigned short numParametersInCategory;
- unsigned short reserved;
- char categoryLabel[24];
- char future[16];
-
-} ;
+ VestigeMaxNameLen = 64,
+ VestigeMaxLabelLen = 64,
+ VestigeMaxShortLabelLen = 8,
+ VestigeMaxCategLabelLen = 24,
+ VestigeMaxFileNameLen = 100
+};
+/* this struct taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
+struct VstParameterProperties
+{
+ float stepFloat; /* float step */
+ float smallStepFloat; /* small float step */
+ float largeStepFloat; /* large float step */
+ char label[VestigeMaxLabelLen]; /* parameter label */
+ int32_t flags; /* @see VstParameterFlags */
+ int32_t minInteger; /* integer minimum */
+ int32_t maxInteger; /* integer maximum */
+ int32_t stepInteger; /* integer step */
+ int32_t largeStepInteger; /* large integer step */
+ char shortLabel[VestigeMaxShortLabelLen]; /* short label, recommended: 6 + delimiter */
+ int16_t displayIndex; /* index where this parameter should be displayed (starting with 0) */
+ int16_t category; /* 0: no category, else group index + 1 */
+ int16_t numParametersInCategory; /* number of parameters in category */
+ int16_t reserved; /* zero */
+ char categoryLabel[VestigeMaxCategLabelLen]; /* category label, e.g. "Osc 1" */
+ char future[16]; /* reserved for future use */
+};
+
+
+/* this enum taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
+enum VstParameterFlags
+{
+ kVstParameterIsSwitch = 1 << 0, /* parameter is a switch (on/off) */
+ kVstParameterUsesIntegerMinMax = 1 << 1, /* minInteger, maxInteger valid */
+ kVstParameterUsesFloatStep = 1 << 2, /* stepFloat, smallStepFloat, largeStepFloat valid */
+ kVstParameterUsesIntStep = 1 << 3, /* stepInteger, largeStepInteger valid */
+ kVstParameterSupportsDisplayIndex = 1 << 4, /* displayIndex valid */
+ kVstParameterSupportsDisplayCategory = 1 << 5, /* category, etc. valid */
+ kVstParameterCanRamp = 1 << 6 /* set if parameter value can ramp up/down */
+};
class AEffect
@@ -274,7 +289,7 @@ public:
// 08
double sampleRate;
// unconfirmed 10
- char empty1[8];
+ double nanoSeconds;
// 18
double ppqPos;
// 20?
@@ -286,13 +301,15 @@ public:
// 38?
double cycleEndPos;
// 40?
- int timeSigNumerator;
+ int32_t timeSigNumerator;
// 44?
- int timeSigDenominator;
- // unconfirmed 48 4c 50
- char empty3[4 + 4 + 4];
+ int32_t timeSigDenominator;
+
+ int32_t smpteOffset;
+ int32_t smpteFrameRate;
+ int32_t samplesToNextClock;
// 54
- int flags;
+ int32_t flags;
} ;
diff --git a/include/atomic_int.h b/include/atomic_int.h
index dd8bf78..168274e 100644
--- a/include/atomic_int.h
+++ b/include/atomic_int.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/automatable_button.h b/include/automatable_button.h
index 53084cf..e0dd06b 100644
--- a/include/automatable_button.h
+++ b/include/automatable_button.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/automatable_slider.h b/include/automatable_slider.h
index 3a41a77..82b5432 100644
--- a/include/automatable_slider.h
+++ b/include/automatable_slider.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/base64.h b/include/base64.h
index ebdfe47..0b15d7f 100644
--- a/include/base64.h
+++ b/include/base64.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/basic_filters.h b/include/basic_filters.h
index e41046e..a081051 100644
--- a/include/basic_filters.h
+++ b/include/basic_filters.h
@@ -1,12 +1,12 @@
/*
* basic_filters.h - simple but powerful filter-class with most used filters
*
- * original file by ???
+ * original file by ???
* modified and enhanced by Tobias Doerffel
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -26,8 +26,8 @@
*/
-#ifndef _BASIC_FILTERS_H
-#define _BASIC_FILTERS_H
+#ifndef BASIC_FILTERS_H
+#define BASIC_FILTERS_H
#ifndef __USE_XOPEN
#define __USE_XOPEN
@@ -39,6 +39,7 @@
#include "Mixer.h"
#include "templates.h"
#include "lmms_constants.h"
+#include "interpolation.h"
//#include <iostream>
//#include <cstdlib>
@@ -127,16 +128,16 @@ public:
// reset in/out history for simple filters
m_ou1[_chnl] = m_ou2[_chnl] = m_in1[_chnl] =
m_in2[_chnl] = 0.0f;
-
+
// reset in/out history for moog-filter
m_y1[_chnl] = m_y2[_chnl] = m_y3[_chnl] = m_y4[_chnl] =
m_oldx[_chnl] = m_oldy1[_chnl] =
m_oldy2[_chnl] = m_oldy3[_chnl] = 0.0f;
-
+
// reset in/out history for RC-filters
m_rclp0[_chnl] = m_rcbp0[_chnl] = m_rchp0[_chnl] = m_rclast0[_chnl] = 0.0f;
m_rclp1[_chnl] = m_rcbp1[_chnl] = m_rchp1[_chnl] = m_rclast1[_chnl] = 0.0f;
-
+
for(int i=0; i<6; i++)
m_vflp[i][_chnl] = m_vfbp[i][_chnl] = m_vfhp[i][_chnl] = m_vflast[i][_chnl] = 0.0f;
}
@@ -186,130 +187,135 @@ public:
// (C) 1998 ... 2009 S.Fendt. Released under the GPL v2.0 or any later version.
case Lowpass_RC12:
- case Bandpass_RC12:
- case Highpass_RC12:
{
- sample_t lp, hp, bp;
-
- sample_t in;
-
- // 4-times oversampled... (even the moog-filter would benefit from this)
+ sample_t lp, bp, hp, in;
for( int n = 4; n != 0; --n )
{
in = _in0 + m_rcbp0[_chnl] * m_rcq;
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
+ in = qBound( -1.0f, in, 1.0f );
lp = in * m_rcb + m_rclp0[_chnl] * m_rca;
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
+ lp = qBound( -1.0f, lp, 1.0f );
hp = m_rcc * ( m_rchp0[_chnl] + in - m_rclast0[_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
+ hp = qBound( -1.0f, hp, 1.0f );
bp = hp * m_rcb + m_rcbp0[_chnl] * m_rca;
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
+ bp = qBound( -1.0f, bp, 1.0f );
m_rclast0[_chnl] = in;
m_rclp0[_chnl] = lp;
m_rchp0[_chnl] = hp;
m_rcbp0[_chnl] = bp;
}
+ return lp;
+ break;
+ }
+ case Highpass_RC12:
+ case Bandpass_RC12:
+ {
+ sample_t hp, bp, in;
+ for( int n = 4; n != 0; --n )
+ {
+ in = _in0 + m_rcbp0[_chnl] * m_rcq;
+ in = qBound( -1.0f, in, 1.0f );
+
+ hp = m_rcc * ( m_rchp0[_chnl] + in - m_rclast0[_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
- if( m_type == Lowpass_RC12 )
- out = lp;
- else if( m_type == Bandpass_RC12 )
- out = bp;
- else
- out = hp;
-
- return( out );
+ bp = hp * m_rcb + m_rcbp0[_chnl] * m_rca;
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_rclast0[_chnl] = in;
+ m_rchp0[_chnl] = hp;
+ m_rcbp0[_chnl] = bp;
+ }
+ return m_type == Highpass_RC12 ? hp : bp;
break;
}
case Lowpass_RC24:
- case Bandpass_RC24:
- case Highpass_RC24:
{
- sample_t lp, hp, bp;
-
- sample_t in;
-
+ sample_t lp, bp, hp, in;
for( int n = 4; n != 0; --n )
{
// first stage is as for the 12dB case...
in = _in0 + m_rcbp0[_chnl] * m_rcq;
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
+ in = qBound( -1.0f, in, 1.0f );
lp = in * m_rcb + m_rclp0[_chnl] * m_rca;
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
+ lp = qBound( -1.0f, lp, 1.0f );
hp = m_rcc * ( m_rchp0[_chnl] + in - m_rclast0[_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
+ hp = qBound( -1.0f, hp, 1.0f );
bp = hp * m_rcb + m_rcbp0[_chnl] * m_rca;
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
+ bp = qBound( -1.0f, bp, 1.0f );
m_rclast0[_chnl] = in;
m_rclp0[_chnl] = lp;
- m_rchp0[_chnl] = hp;
m_rcbp0[_chnl] = bp;
+ m_rchp0[_chnl] = hp;
// second stage gets the output of the first stage as input...
- if( m_type == Lowpass_RC24 )
- {
- in = lp + m_rcbp1[_chnl] * m_rcq;
- }
- else if( m_type == Bandpass_RC24 )
- {
- in = bp + m_rcbp1[_chnl] * m_rcq;
- }
- else
- {
- in = hp + m_rcbp1[_chnl] * m_rcq;
- }
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
+ in = lp + m_rcbp1[_chnl] * m_rcq;
+ in = qBound( -1.0f, in, 1.0f );
lp = in * m_rcb + m_rclp1[_chnl] * m_rca;
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
+ lp = qBound( -1.0f, lp, 1.0f );
hp = m_rcc * ( m_rchp1[_chnl] + in - m_rclast1[_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
+ hp = qBound( -1.0f, hp, 1.0f );
bp = hp * m_rcb + m_rcbp1[_chnl] * m_rca;
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
+ bp = qBound( -1.0f, bp, 1.0f );
m_rclast1[_chnl] = in;
m_rclp1[_chnl] = lp;
- m_rchp1[_chnl] = hp;
m_rcbp1[_chnl] = bp;
+ m_rchp1[_chnl] = hp;
}
-
- // output is second stage-lowpass...
- if( m_type == Lowpass_RC24 )
- {
- out = lp;
- }
- else if( m_type == Bandpass_RC24 )
- {
- out = bp;
- }
- else
+ return lp;
+ break;
+ }
+ case Highpass_RC24:
+ case Bandpass_RC24:
+ {
+ sample_t hp, bp, in;
+ for( int n = 4; n != 0; --n )
{
- out = hp;
+ // first stage is as for the 12dB case...
+ in = _in0 + m_rcbp0[_chnl] * m_rcq;
+ in = qBound( -1.0f, in, 1.0f );
+
+ hp = m_rcc * ( m_rchp0[_chnl] + in - m_rclast0[_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
+
+ bp = hp * m_rcb + m_rcbp0[_chnl] * m_rca;
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_rclast0[_chnl] = in;
+ m_rchp0[_chnl] = hp;
+ m_rcbp0[_chnl] = bp;
+
+ // second stage gets the output of the first stage as input...
+ in = m_type == Highpass_RC24
+ ? hp + m_rcbp1[_chnl] * m_rcq
+ : bp + m_rcbp1[_chnl] * m_rcq;
+
+ in = qBound( -1.0f, in, 1.0f );
+
+ hp = m_rcc * ( m_rchp1[_chnl] + in - m_rclast1[_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
+
+ bp = hp * m_rcb + m_rcbp1[_chnl] * m_rca;
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_rclast1[_chnl] = in;
+ m_rchp1[_chnl] = hp;
+ m_rcbp1[_chnl] = bp;
}
-
- return out;
+ return m_type == Highpass_RC24 ? hp : bp;
break;
}
@@ -317,146 +323,122 @@ public:
{
sample_t lp, hp, bp, in;
- out = 0;
- for(int o=0; o<4; o++)
- {
- // first formant
- in = _in0 + m_vfbp[0][_chnl] * m_vfq;
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
-
- lp = in * m_vfb[0] + m_vflp[0][_chnl] * m_vfa[0];
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
-
- hp = m_vfc[0] * ( m_vfhp[0][_chnl] + in - m_vflast[0][_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
-
- bp = hp * m_vfb[0] + m_vfbp[0][_chnl] * m_vfa[0];
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
-
- m_vflast[0][_chnl] = in;
- m_vflp[0][_chnl] = lp;
- m_vfhp[0][_chnl] = hp;
- m_vfbp[0][_chnl] = bp;
-
- in = bp + m_vfbp[2][_chnl] * m_vfq;
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
-
- lp = in * m_vfb[0] + m_vflp[2][_chnl] * m_vfa[0];
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
-
- hp = m_vfc[0] * ( m_vfhp[2][_chnl] + in - m_vflast[2][_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
-
- bp = hp * m_vfb[0] + m_vfbp[2][_chnl] * m_vfa[0];
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
-
- m_vflast[2][_chnl] = in;
- m_vflp[2][_chnl] = lp;
- m_vfhp[2][_chnl] = hp;
- m_vfbp[2][_chnl] = bp;
-
- in = bp + m_vfbp[4][_chnl] * m_vfq;
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
-
- lp = in * m_vfb[0] + m_vflp[4][_chnl] * m_vfa[0];
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
-
- hp = m_vfc[0] * ( m_vfhp[4][_chnl] + in - m_vflast[4][_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
-
- bp = hp * m_vfb[0] + m_vfbp[4][_chnl] * m_vfa[0];
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
-
- m_vflast[4][_chnl] = in;
- m_vflp[4][_chnl] = lp;
- m_vfhp[4][_chnl] = hp;
- m_vfbp[4][_chnl] = bp;
-
- out += bp;
-
- // second formant
- in = _in0 + m_vfbp[0][_chnl] * m_vfq;
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
-
- lp = in * m_vfb[1] + m_vflp[1][_chnl] * m_vfa[1];
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
-
- hp = m_vfc[1] * ( m_vfhp[1][_chnl] + in - m_vflast[1][_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
-
- bp = hp * m_vfb[1] + m_vfbp[1][_chnl] * m_vfa[1];
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
-
- m_vflast[1][_chnl] = in;
- m_vflp[1][_chnl] = lp;
- m_vfhp[1][_chnl] = hp;
- m_vfbp[1][_chnl] = bp;
-
- in = bp + m_vfbp[3][_chnl] * m_vfq;
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
-
- lp = in * m_vfb[1] + m_vflp[3][_chnl] * m_vfa[1];
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
-
- hp = m_vfc[1] * ( m_vfhp[3][_chnl] + in - m_vflast[3][_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
-
- bp = hp * m_vfb[1] + m_vfbp[3][_chnl] * m_vfa[1];
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
-
- m_vflast[3][_chnl] = in;
- m_vflp[3][_chnl] = lp;
- m_vfhp[3][_chnl] = hp;
- m_vfbp[3][_chnl] = bp;
-
- in = bp + m_vfbp[5][_chnl] * m_vfq;
- in = (in > +1.f) ? +1.f : in;
- in = (in < -1.f) ? -1.f : in;
-
- lp = in * m_vfb[1] + m_vflp[5][_chnl] * m_vfa[1];
- lp = (lp > +1.f) ? +1.f : lp;
- lp = (lp < -1.f) ? -1.f : lp;
-
- hp = m_vfc[1] * ( m_vfhp[5][_chnl] + in - m_vflast[5][_chnl] );
- hp = (hp > +1.f) ? +1.f : hp;
- hp = (hp < -1.f) ? -1.f : hp;
-
- bp = hp * m_vfb[1] + m_vfbp[5][_chnl] * m_vfa[1];
- bp = (bp > +1.f) ? +1.f : bp;
- bp = (bp < -1.f) ? -1.f : bp;
-
- m_vflast[5][_chnl] = in;
- m_vflp[5][_chnl] = lp;
- m_vfhp[5][_chnl] = hp;
- m_vfbp[5][_chnl] = bp;
-
- out += bp;
- }
-
+ out = 0;
+ for(int o=0; o<4; o++)
+ {
+ // first formant
+ in = _in0 + m_vfbp[0][_chnl] * m_vfq;
+ in = qBound( -1.0f, in, 1.0f );
+
+ lp = in * m_vfb[0] + m_vflp[0][_chnl] * m_vfa[0];
+ lp = qBound( -1.0f, lp, 1.0f );
+
+ hp = m_vfc[0] * ( m_vfhp[0][_chnl] + in - m_vflast[0][_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
+
+ bp = hp * m_vfb[0] + m_vfbp[0][_chnl] * m_vfa[0];
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_vflast[0][_chnl] = in;
+ m_vflp[0][_chnl] = lp;
+ m_vfhp[0][_chnl] = hp;
+ m_vfbp[0][_chnl] = bp;
+
+ in = bp + m_vfbp[2][_chnl] * m_vfq;
+ in = qBound( -1.0f, in, 1.0f );
+
+ lp = in * m_vfb[0] + m_vflp[2][_chnl] * m_vfa[0];
+ lp = qBound( -1.0f, lp, 1.0f );
+
+ hp = m_vfc[0] * ( m_vfhp[2][_chnl] + in - m_vflast[2][_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
+
+ bp = hp * m_vfb[0] + m_vfbp[2][_chnl] * m_vfa[0];
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_vflast[2][_chnl] = in;
+ m_vflp[2][_chnl] = lp;
+ m_vfhp[2][_chnl] = hp;
+ m_vfbp[2][_chnl] = bp;
+
+ in = bp + m_vfbp[4][_chnl] * m_vfq;
+ in = qBound( -1.0f, in, 1.0f );
+
+ lp = in * m_vfb[0] + m_vflp[4][_chnl] * m_vfa[0];
+ lp = qBound( -1.0f, lp, 1.0f );
+
+ hp = m_vfc[0] * ( m_vfhp[4][_chnl] + in - m_vflast[4][_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
+
+ bp = hp * m_vfb[0] + m_vfbp[4][_chnl] * m_vfa[0];
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_vflast[4][_chnl] = in;
+ m_vflp[4][_chnl] = lp;
+ m_vfhp[4][_chnl] = hp;
+ m_vfbp[4][_chnl] = bp;
+
+ out += bp;
+
+ // second formant
+ in = _in0 + m_vfbp[0][_chnl] * m_vfq;
+ in = qBound( -1.0f, in, 1.0f );
+
+ lp = in * m_vfb[1] + m_vflp[1][_chnl] * m_vfa[1];
+ lp = qBound( -1.0f, lp, 1.0f );
+
+ hp = m_vfc[1] * ( m_vfhp[1][_chnl] + in - m_vflast[1][_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
+
+ bp = hp * m_vfb[1] + m_vfbp[1][_chnl] * m_vfa[1];
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_vflast[1][_chnl] = in;
+ m_vflp[1][_chnl] = lp;
+ m_vfhp[1][_chnl] = hp;
+ m_vfbp[1][_chnl] = bp;
+
+ in = bp + m_vfbp[3][_chnl] * m_vfq;
+ in = qBound( -1.0f, in, 1.0f );
+
+ lp = in * m_vfb[1] + m_vflp[3][_chnl] * m_vfa[1];
+ lp = qBound( -1.0f, lp, 1.0f );
+
+ hp = m_vfc[1] * ( m_vfhp[3][_chnl] + in - m_vflast[3][_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
+
+ bp = hp * m_vfb[1] + m_vfbp[3][_chnl] * m_vfa[1];
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_vflast[3][_chnl] = in;
+ m_vflp[3][_chnl] = lp;
+ m_vfhp[3][_chnl] = hp;
+ m_vfbp[3][_chnl] = bp;
+
+ in = bp + m_vfbp[5][_chnl] * m_vfq;
+ in = qBound( -1.0f, in, 1.0f );
+
+ lp = in * m_vfb[1] + m_vflp[5][_chnl] * m_vfa[1];
+ lp = qBound( -1.0f, lp, 1.0f );
+
+ hp = m_vfc[1] * ( m_vfhp[5][_chnl] + in - m_vflast[5][_chnl] );
+ hp = qBound( -1.0f, hp, 1.0f );
+
+ bp = hp * m_vfb[1] + m_vfbp[5][_chnl] * m_vfa[1];
+ bp = qBound( -1.0f, bp, 1.0f );
+
+ m_vflast[5][_chnl] = in;
+ m_vflp[5][_chnl] = lp;
+ m_vfhp[5][_chnl] = hp;
+ m_vfbp[5][_chnl] = bp;
+
+ out += bp;
+ }
+
return( out/2.0f );
break;
}
-
+
default:
// filter
out = m_b0a0*_in0 +
@@ -488,9 +470,6 @@ public:
/*, const bool _q_is_bandwidth = false*/ )
{
// temp coef vars
- _freq = qBound(minFreq(), _freq, 20000.0f); // limit freq and q for not getting
- // bad noise out of the filter...
-
_q = qMax( _q, minQ() );
if( m_type == Lowpass_RC12 ||
@@ -500,41 +479,39 @@ public:
m_type == Bandpass_RC24 ||
m_type == Highpass_RC24 )
{
- if( _freq < 50.f )
- {
- _freq = 50.f;
- }
-
+ _freq = qBound( 50.0f, _freq, 20000.0f );
+
m_rca = 1.0f - (1.0f/(m_sampleRate*4)) / ( (1.0f/(_freq*2.0f*M_PI)) + (1.0f/(m_sampleRate*4)) );
m_rcb = 1.0f - m_rca;
m_rcc = (1.0f/(_freq*2.0f*M_PI)) / ( (1.0f/(_freq*2.0f*M_PI)) + (1.0f/(m_sampleRate*4)) );
-
+
// Stretch Q/resonance, as self-oscillation reliably starts at a q of ~2.5 - ~2.6
- m_rcq = _q/4.f;
+ m_rcq = _q * 0.25f;
+ return;
}
if( m_type == Formantfilter )
{
+ _freq = qBound( minFreq(), _freq, 20000.0f ); // limit freq and q for not getting bad noise out of the filter...
+
// formats for a, e, i, o, u, a
- const float _f[5][2] = { { 1000, 1400 }, { 500, 2300 },
+ static const float _f[5][2] = { { 1000, 1400 }, { 500, 2300 },
{ 320, 3200 },
{ 500, 1000 },
{ 320, 800 } };
+ static const float freqRatio = 4.0f / 14000.0f;
// Stretch Q/resonance
- m_vfq = _q/4.f;
+ m_vfq = _q * 0.25f;
// frequency in lmms ranges from 1Hz to 14000Hz
- const int vowel = (int)( floor( _freq/14000.f * 4.f ) );
- const float fract = ( _freq/14000.f * 4.f ) -
- (float)vowel;
+ const float vowelf = _freq * freqRatio;
+ const int vowel = static_cast<int>( vowelf );
+ const float fract = vowelf - vowel;
- // interpolate between formant frequencies
- const float f0 = _f[vowel+0][0] * ( 1.0f - fract ) +
- _f[vowel+1][0] * ( fract );
-
- const float f1 = _f[vowel+0][1] * ( 1.0f - fract ) +
- _f[vowel+1][1] * ( fract );
+ // interpolate between formant frequencies
+ const float f0 = linearInterpolate( _f[vowel+0][0], _f[vowel+1][0], fract );
+ const float f1 = linearInterpolate( _f[vowel+0][1], _f[vowel+1][1], fract );
m_vfa[0] = 1.0f - (1.0f/(m_sampleRate*4)) /
( (1.0f/(f0*2.0f*M_PI)) +
@@ -551,10 +528,13 @@ public:
m_vfc[1] = (1.0f/(f1*2.0f*M_PI)) /
( (1.0f/(f1*2.0f*M_PI)) +
(1.0f/(m_sampleRate*4)) );
+ return;
}
-
+
if( m_type == Moog )
{
+ _freq = qBound( minFreq(), _freq, 20000.0f );
+
// [ 0 - 0.5 ]
const float f = _freq / m_sampleRate;
// (Empirical tunning)
@@ -572,6 +552,7 @@ public:
}
// other filters
+ _freq = qBound( minFreq(), _freq, 20000.0f );
const float omega = F_2PI * _freq / m_sampleRate;
const float tsin = sinf( omega );
const float tcos = cosf( omega );
@@ -647,7 +628,7 @@ private:
// coeffs for formant-filters
float m_vfa[4], m_vfb[4], m_vfc[4], m_vfq;
-
+
typedef sample_t frame[CHANNELS];
// in/out history
@@ -655,14 +636,14 @@ private:
// in/out history for moog-filter
frame m_y1, m_y2, m_y3, m_y4, m_oldx, m_oldy1, m_oldy2, m_oldy3;
-
+
// in/out history for RC-type-filters
frame m_rcbp0, m_rclp0, m_rchp0, m_rclast0;
frame m_rcbp1, m_rclp1, m_rchp1, m_rclast1;
// in/out history for Formant-filters
frame m_vfbp[6], m_vflp[6], m_vfhp[6], m_vflast[6];
-
+
FilterTypes m_type;
bool m_doubleFilter;
diff --git a/include/bb_editor.h b/include/bb_editor.h
index c1ebd96..993633b 100644
--- a/include/bb_editor.h
+++ b/include/bb_editor.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*/
-#ifndef _BB_EDITOR_H
-#define _BB_EDITOR_H
+#ifndef BB_EDITOR_H
+#define BB_EDITOR_H
#include "TrackContainerView.h"
@@ -45,6 +45,8 @@ public:
{
return( true );
}
+
+ virtual void dropEvent( QDropEvent * _de );
void removeBBView( int _bb );
diff --git a/include/bb_track.h b/include/bb_track.h
index d951ea9..ab2cf8c 100644
--- a/include/bb_track.h
+++ b/include/bb_track.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -39,7 +39,7 @@ class TrackContainer;
class bbTCO : public trackContentObject
{
public:
- bbTCO( track * _track, unsigned int _color = 0 );
+ bbTCO( track * _track );
virtual ~bbTCO();
virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
@@ -49,19 +49,33 @@ public:
return( "bbtco" );
}
- inline unsigned int color() const
+ unsigned int color() const
{
- return( m_color );
+ return( m_color.rgb() );
}
- inline static unsigned int defaultColor()
+
+ QColor colorObj() const
{
- return qRgb( 128, 182, 175 );
+ return m_color;
}
+ void setColor( const QColor & c )
+ {
+ m_color = QColor( c );
+ }
+
+ void setUseStyleColor( bool b )
+ {
+ m_useStyleColor = b;
+ }
+
+ int bbTrackIndex();
+
virtual trackContentObjectView * createView( trackView * _tv );
private:
- unsigned int m_color;
+ QColor m_color;
+ bool m_useStyleColor;
friend class bbTCOView;
@@ -89,6 +103,7 @@ protected slots:
void resetName();
void changeName();
void changeColor();
+ void resetColor();
protected:
@@ -122,9 +137,13 @@ public:
virtual void loadTrackSpecificSettings( const QDomElement & _this );
static bbTrack * findBBTrack( int _bb_num );
- static int numOfBBTrack( track * _track );
static void swapBBTracks( track * _track1, track * _track2 );
+ int index()
+ {
+ return s_infoMap[this];
+ }
+
bool automationDisabled( track * _track )
{
return( m_disabledTracks.contains( _track ) );
@@ -138,6 +157,26 @@ public:
m_disabledTracks.removeAll( _track );
}
+ static void setLastTCOColor( const QColor & c )
+ {
+ if( ! s_lastTCOColor )
+ {
+ s_lastTCOColor = new QColor( c );
+ }
+ else
+ {
+ *s_lastTCOColor = QColor( c );
+ }
+ }
+
+ static void clearLastTCOColor()
+ {
+ if( s_lastTCOColor )
+ {
+ delete s_lastTCOColor;
+ }
+ s_lastTCOColor = NULL;
+ }
protected:
inline virtual QString nodeName() const
@@ -152,6 +191,7 @@ private:
typedef QMap<bbTrack *, int> infoMap;
static infoMap s_infoMap;
+ static QColor * s_lastTCOColor;
friend class bbTrackView;
diff --git a/include/bb_track_container.h b/include/bb_track_container.h
index 3ad0b91..e879e2f 100644
--- a/include/bb_track_container.h
+++ b/include/bb_track_container.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/caption_menu.h b/include/caption_menu.h
index e6bce5f..8d69e87 100644
--- a/include/caption_menu.h
+++ b/include/caption_menu.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -38,6 +38,12 @@ public:
captionMenu( const QString & _title, QWidget * _parent = 0 );
virtual ~captionMenu();
+ ///
+ /// \brief Adds a "Help" action displaying the Menu's parent's WhatsThis
+ /// text when selected.
+ ///
+ void addHelpAction();
+
} ;
diff --git a/include/combobox.h b/include/combobox.h
index 76bb361..c68a231 100644
--- a/include/combobox.h
+++ b/include/combobox.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/config_mgr.h b/include/config_mgr.h
index ec3babf..4858886 100644
--- a/include/config_mgr.h
+++ b/include/config_mgr.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/cpuload_widget.h b/include/cpuload_widget.h
index 096307c..270963d 100644
--- a/include/cpuload_widget.h
+++ b/include/cpuload_widget.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/custom_events.h b/include/custom_events.h
index 0050a79..2dfbd77 100644
--- a/include/custom_events.h
+++ b/include/custom_events.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/debug.h b/include/debug.h
index 64b1a88..d0f206c 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/drumsynth.h b/include/drumsynth.h
index ebbc26a..6423253 100644
--- a/include/drumsynth.h
+++ b/include/drumsynth.h
@@ -4,7 +4,7 @@
* Copyright (c) 1998-2000 Paul Kellett (mda-vst.com)
* Copyright (c) 2007 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/embed.h b/include/embed.h
index 3aa9c8a..c6d9d48 100644
--- a/include/embed.h
+++ b/include/embed.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/endian_handling.h b/include/endian_handling.h
index 0181426..361c24a 100644
--- a/include/endian_handling.h
+++ b/include/endian_handling.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/engine.h b/include/engine.h
index a4fc34c..0b21fe7 100644
--- a/include/engine.h
+++ b/include/engine.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/export.h b/include/export.h
index 4249754..2df84ef 100644
--- a/include/export.h
+++ b/include/export.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/export_project_dialog.h b/include/export_project_dialog.h
index 5b906e0..0a772d8 100644
--- a/include/export_project_dialog.h
+++ b/include/export_project_dialog.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2012 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/fade_button.h b/include/fade_button.h
index 861595e..74cc379 100644
--- a/include/fade_button.h
+++ b/include/fade_button.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/fader.h b/include/fader.h
index 02bc475..5532dbb 100644
--- a/include/fader.h
+++ b/include/fader.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2012 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -45,8 +45,8 @@
*/
-#ifndef _FADER_H
-#define _FADER_H
+#ifndef FADER_H
+#define FADER_H
#include <QtCore/QTime>
#include <QtGui/QWidget>
@@ -61,6 +61,8 @@ class fader : public QWidget, public FloatModelView
{
Q_OBJECT
public:
+ Q_PROPERTY( QColor peakGreen READ peakGreen WRITE setPeakGreen )
+ Q_PROPERTY( QColor peakRed READ peakRed WRITE setPeakRed )
fader( FloatModel * _model, const QString & _name, QWidget * _parent );
virtual ~fader();
@@ -70,6 +72,10 @@ public:
void setPeak_R( float fPeak );
float getPeak_R() { return m_fPeakValue_R; }
+ QColor peakGreen() const;
+ QColor peakRed() const;
+ void setPeakGreen( const QColor & c );
+ void setPeakRed( const QColor & c );
private:
virtual void contextMenuEvent( QContextMenuEvent * _me );
@@ -85,7 +91,7 @@ private:
float fRange = m_model->maxValue() - m_model->minValue();
float realVal = m_model->value() - m_model->minValue();
- return height() - ( ( height() - m_knob.height() ) * ( realVal / fRange ) );
+ return height() - ( ( height() - ( *s_knob ).height() ) * ( realVal / fRange ) );
}
FloatModel * m_model;
@@ -103,9 +109,9 @@ private:
QTime m_lastPeakTime_L;
QTime m_lastPeakTime_R;
- QPixmap m_back;
- QPixmap m_leds;
- QPixmap m_knob;
+ static QPixmap * s_back;
+ static QPixmap * s_leds;
+ static QPixmap * s_knob;
int m_moveStartPoint;
float m_startValue;
@@ -113,6 +119,8 @@ private:
static textFloat * s_textFloat;
void updateTextFloat();
+ QColor m_peakGreen;
+ QColor m_peakRed;
} ;
diff --git a/include/fft_helpers.h b/include/fft_helpers.h
index 44fe7b7..e70e485 100644
--- a/include/fft_helpers.h
+++ b/include/fft_helpers.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2012 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/fifo_buffer.h b/include/fifo_buffer.h
index 3942d34..2f56d90 100644
--- a/include/fifo_buffer.h
+++ b/include/fifo_buffer.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/file_browser.h b/include/file_browser.h
deleted file mode 100644
index d3aa501..0000000
--- a/include/file_browser.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * file_browser.h - include file for fileBrowser
- *
- * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-
-#ifndef _FILE_BROWSER_H
-#define _FILE_BROWSER_H
-
-#include <QtCore/QDir>
-#include <QtCore/QMutex>
-#include <QtGui/QTreeWidget>
-
-
-#include "SideBarWidget.h"
-
-
-class QLineEdit;
-
-class fileItem;
-class InstrumentTrack;
-class fileBrowserTreeWidget;
-class PlayHandle;
-class TrackContainer;
-
-
-
-class fileBrowser : public SideBarWidget
-{
- Q_OBJECT
-public:
- fileBrowser( const QString & _directories, const QString & _filter,
- const QString & _title, const QPixmap & _pm,
- QWidget * _parent, bool _dirs_as_items = false );
- virtual ~fileBrowser();
-
-
-public slots:
- void filterItems( const QString & _filter );
- void reloadTree( void );
-
-
-private:
- bool filterItems( QTreeWidgetItem * _item, const QString & _filter );
- virtual void keyPressEvent( QKeyEvent * _ke );
-
- void addItems( const QString & _path );
-
- fileBrowserTreeWidget * m_l;
-
- QLineEdit * m_filterEdit;
-
- QString m_directories;
- QString m_filter;
-
- bool m_dirsAsItems;
-
-} ;
-
-
-
-
-class fileBrowserTreeWidget : public QTreeWidget
-{
- Q_OBJECT
-public:
- fileBrowserTreeWidget( QWidget * _parent );
- virtual ~fileBrowserTreeWidget();
-
-
-protected:
- virtual void contextMenuEvent( QContextMenuEvent * _e );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseMoveEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
-
-
-private:
- void handleFile( fileItem * _fi, InstrumentTrack * _it );
- void openInNewInstrumentTrack( TrackContainer* tc );
-
-
- bool m_mousePressed;
- QPoint m_pressPos;
-
- PlayHandle* m_previewPlayHandle;
- QMutex m_pphMutex;
-
- fileItem * m_contextMenuItem;
-
-
-private slots:
- void activateListItem( QTreeWidgetItem * _item, int _column );
- void openInNewInstrumentTrackBBE( void );
- void openInNewInstrumentTrackSE( void );
- void sendToActiveInstrumentTrack( void );
- void updateDirectory( QTreeWidgetItem * _item );
-
-} ;
-
-
-
-
-class directory : public QTreeWidgetItem
-{
-public:
- directory( const QString & _filename, const QString & _path,
- const QString & _filter );
-
- void update( void );
-
- inline QString fullName( QString _path = QString::null )
- {
- if( _path == QString::null )
- {
- _path = m_directories[0];
- }
- if( _path != QString::null )
- {
- _path += QDir::separator();
- }
- return( QDir::cleanPath( _path + text( 0 ) ) +
- QDir::separator() );
- }
-
- inline void addDirectory( const QString & _dir )
- {
- m_directories.push_back( _dir );
- }
-
-
-private:
- void initPixmaps( void );
-
- bool addItems( const QString & _path );
-
-
- static QPixmap * s_folderPixmap;
- static QPixmap * s_folderOpenedPixmap;
- static QPixmap * s_folderLockedPixmap;
-
- QStringList m_directories;
- QString m_filter;
-
-} ;
-
-
-
-
-class fileItem : public QTreeWidgetItem
-{
-public:
- enum FileTypes
- {
- ProjectFile,
- PresetFile,
- SampleFile,
- SoundFontFile,
- PatchFile,
- MidiFile,
- FlpFile,
- VstPluginFile,
- UnknownFile,
- NumFileTypes
- } ;
-
- enum FileHandling
- {
- NotSupported,
- LoadAsProject,
- LoadAsPreset,
- LoadByPlugin,
- ImportAsProject
- } ;
-
-
- fileItem( QTreeWidget * _parent, const QString & _name,
- const QString & _path );
- fileItem( const QString & _name, const QString & _path );
-
- inline QString fullName( void ) const
- {
- return( QDir::cleanPath( m_path ) + QDir::separator() +
- text( 0 ) );
- }
-
- inline FileTypes type( void ) const
- {
- return( m_type );
- }
-
- inline FileHandling handling( void ) const
- {
- return( m_handling );
- }
-
- QString extension( void );
- static QString extension( const QString & _file );
-
-
-private:
- void initPixmaps( void );
- void determineFileType( void );
-
- static QPixmap * s_projectFilePixmap;
- static QPixmap * s_presetFilePixmap;
- static QPixmap * s_sampleFilePixmap;
- static QPixmap * s_midiFilePixmap;
- static QPixmap * s_flpFilePixmap;
- static QPixmap * s_unknownFilePixmap;
-
- QString m_path;
- FileTypes m_type;
- FileHandling m_handling;
-
-} ;
-
-
-#endif
diff --git a/include/graph.h b/include/graph.h
index b2041c6..a11a95b 100644
--- a/include/graph.h
+++ b/include/graph.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Andreas Brandmaier <andy/at/brandmaier/dot/de>
* 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -150,7 +150,7 @@ public slots:
void setLength( int _size );
- void setSampleAt( int _samplePos, float _value );
+ void setSampleAt( int x, float val );
void setSamples( const float * _value );
void setWaveToSine();
@@ -172,6 +172,7 @@ signals:
void rangeChanged();
private:
+ void drawSampleAt( int x, float val );
QVector<float> m_samples;
float m_minValue;
diff --git a/include/group_box.h b/include/group_box.h
index ef08b56..746365c 100644
--- a/include/group_box.h
+++ b/include/group_box.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/gui_templates.h b/include/gui_templates.h
index 8045e26..c42d372 100644
--- a/include/gui_templates.h
+++ b/include/gui_templates.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/interpolation.h b/include/interpolation.h
index 4ff5827..cbe274d 100644
--- a/include/interpolation.h
+++ b/include/interpolation.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*/
-#ifndef _INTERPOLATION_H
-#define _INTERPOLATION_H
+#ifndef INTERPOLATION_H
+#define INTERPOLATION_H
#ifndef __USE_XOPEN
#define __USE_XOPEN
@@ -32,6 +32,7 @@
#include <math.h>
#include "lmms_constants.h"
+#include "lmms_math.h"
inline float hermiteInterpolate( float x0, float x1, float x2, float x3,
float frac_pos )
@@ -79,16 +80,61 @@ inline float cubicInterpolate( float v0, float v1, float v2, float v3, float x )
inline float cosinusInterpolate( float v0, float v1, float x )
{
- float f = cosf( x * ( F_PI_2 ) );
- return( v0*f + v1*( 1.0f-f ) );
+ const float f = ( 1.0f - cosf( x * F_PI ) ) * 0.5f;
+ return fastFmaf( f, v1-v0, v0 );
}
-
inline float linearInterpolate( float v0, float v1, float x )
{
- return( v0*( 1.0f-x ) + v1*x );
+ return fastFmaf( x, v1-v0, v0 );
+}
+
+
+inline float optimalInterpolate( float v0, float v1, float x )
+{
+ const float z = x - 0.5f;
+ const float even = v1 + v0;
+ const float odd = v1 - v0;
+
+ const float c0 = even * 0.50037842517188658;
+ const float c1 = odd * 1.00621089801788210;
+ const float c2 = even * -0.004541102062639801;
+ const float c3 = odd * -1.57015627178718420;
+
+ return ( ( c3*z + c2 ) * z + c1 ) * z + c0;
+}
+
+
+inline float optimal4pInterpolate( float v0, float v1, float v2, float v3, float x )
+{
+ const float z = x - 0.5f;
+ const float even1 = v2 + v1;
+ const float odd1 = v2 - v1;
+ const float even2 = v3 + v0;
+ const float odd2 = v3 - v0;
+
+ const float c0 = even1 * 0.45868970870461956 + even2 * 0.04131401926395584;
+ const float c1 = odd1 * 0.48068024766578432 + odd2 * 0.17577925564495955;
+ const float c2 = even1 * -0.246185007019907091 + even2 * 0.24614027139700284;
+ const float c3 = odd1 * -0.36030925263849456 + odd2 * 0.10174985775982505;
+
+ return ( ( c3*z + c2 ) * z + c1 ) * z + c0;
}
+
+inline float lagrangeInterpolate( float v0, float v1, float v2, float v3, float x )
+{
+ const float c0 = v1;
+ const float c1 = v2 - v0 * ( 1.0f / 3.0f ) - v1 * 0.5f - v3 * ( 1.0f / 6.0f );
+ const float c2 = 0.5f * (v0 + v2) - v1;
+ const float c3 = ( 1.0f/6.0f ) * ( v3 - v0 ) + 0.5f * ( v1 - v2 );
+ return ( ( c3*x + c2 ) * x + c1 ) * x + c0;
+}
+
+
+
+
+
#endif
diff --git a/include/knob.h b/include/knob.h
index 8114122..ca7be5a 100644
--- a/include/knob.h
+++ b/include/knob.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -46,6 +46,8 @@ enum knobTypes
class EXPORT knob : public QWidget, public FloatModelView
{
Q_OBJECT
+ Q_ENUMS( knobTypes )
+
Q_PROPERTY(float innerRadius READ innerRadius WRITE setInnerRadius)
Q_PROPERTY(float outerRadius READ outerRadius WRITE setOuterRadius)
@@ -57,11 +59,19 @@ class EXPORT knob : public QWidget, public FloatModelView
// Unfortunately, the gradient syntax doesn't create our gradient
// correctly so we need to do this:
Q_PROPERTY(QColor outerColor READ outerColor WRITE setOuterColor)
+ Q_PROPERTY(QColor lineColor READ lineColor WRITE setlineColor)
+ Q_PROPERTY(QColor arcColor READ arcColor WRITE setarcColor)
mapPropertyFromModel(bool,isVolumeKnob,setVolumeKnob,m_volumeKnob);
mapPropertyFromModel(float,volumeRatio,setVolumeRatio,m_volumeRatio);
+ Q_PROPERTY(knobTypes knobNum READ knobNum WRITE setknobNum)
+
+ void initUi( const QString & _name ); //!< to be called by ctors
+ void onKnobNumUpdated(); //!< to be called when you updated @a m_knobNum
+
public:
- knob( int _knob_num, QWidget * _parent = NULL, const QString & _name = QString() );
+ knob( knobTypes _knob_num, QWidget * _parent = NULL, const QString & _name = QString() );
+ knob( QWidget * _parent = NULL, const QString & _name = QString() ); //!< default ctor
virtual ~knob();
// TODO: remove
@@ -82,6 +92,9 @@ public:
float outerRadius() const;
void setOuterRadius( float _r );
+ knobTypes knobNum() const;
+ void setknobNum( knobTypes _k );
+
QPointF centerPoint() const;
float centerPointX() const;
void setCenterPointX( float _c );
@@ -93,6 +106,10 @@ public:
QColor outerColor() const;
void setOuterColor( const QColor & _c );
+ QColor lineColor() const;
+ void setlineColor( const QColor & _c );
+ QColor arcColor() const;
+ void setarcColor( const QColor & _c );
signals:
@@ -119,7 +136,7 @@ private slots:
virtual void enterValue();
void displayHelp();
void friendlyUpdate();
-
+ void toggleScale();
private:
QString displayValue() const;
@@ -146,7 +163,6 @@ private:
static textFloat * s_textFloat;
- int m_knobNum;
QString m_label;
QPixmap * m_knobPixmap;
@@ -167,7 +183,11 @@ private:
float m_innerRadius;
float m_outerRadius;
float m_lineWidth;
- QColor * m_outerColor;
+ QColor m_outerColor;
+ QColor m_lineColor; //!< unused yet
+ QColor m_arcColor; //!< unused yet
+
+ knobTypes m_knobNum;
} ;
diff --git a/include/ladspa_2_lmms.h b/include/ladspa_2_lmms.h
index b85fabe..e5b4a28 100644
--- a/include/ladspa_2_lmms.h
+++ b/include/ladspa_2_lmms.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2008 Danny McRae <khjklujn at netscape.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/ladspa_manager.h b/include/ladspa_manager.h
index b534a2d..5d8e436 100644
--- a/include/ladspa_manager.h
+++ b/include/ladspa_manager.h
@@ -5,7 +5,7 @@
*
* Copyright (c) 2005-2008 Danny McRae <khjklujn at netscape.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/led_checkbox.h b/include/led_checkbox.h
index edb9e40..687ee7c 100644
--- a/include/led_checkbox.h
+++ b/include/led_checkbox.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -47,6 +47,10 @@ public:
ledCheckBox( const QString & _txt, QWidget * _parent,
const QString & _name = QString::null,
LedColors _color = Yellow );
+ ledCheckBox( QWidget * _parent,
+ const QString & _name = QString::null,
+ LedColors _color = Yellow );
+
virtual ~ledCheckBox();
@@ -55,6 +59,9 @@ public:
return( m_text );
}
+ void setText( const QString& s );
+
+ Q_PROPERTY( QString text READ text WRITE setText )
protected:
virtual void paintEvent( QPaintEvent * _pe );
@@ -66,6 +73,9 @@ private:
QString m_text;
+ void initUi( LedColors _color ); //!< to be called by ctors
+ void onTextUpdated(); //!< to be called when you updated @a m_text
+
} ;
#endif
diff --git a/include/lmms_basics.h b/include/lmms_basics.h
index 2805bb4..daeeb82 100644
--- a/include/lmms_basics.h
+++ b/include/lmms_basics.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/lmms_constants.h b/include/lmms_constants.h
index 190d963..629db88 100644
--- a/include/lmms_constants.h
+++ b/include/lmms_constants.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006 Danny McRae <khjklujn/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,12 +22,18 @@
*
*/
-#ifndef _LMMS_CONSTANTS_H
-#define _LMMS_CONSTANTS_H
+#ifndef LMMS_CONSTANTS_H
+#define LMMS_CONSTANTS_H
-const float F_PI = 3.1415926535f;
-const float F_2PI = 2*F_PI;
-const float F_PI_2 = F_PI*0.5;
+const double D_PI = 3.14159265358979323846;
+const double D_2PI = D_PI * 2.0;
+const double D_PI_2 = D_PI * 0.5;
+const double D_E = 2.71828182845904523536;
+
+const float F_PI = (float) D_PI;
+const float F_2PI = (float) D_2PI;
+const float F_PI_2 = (float) D_PI_2;
+const float F_E = (float) D_E;
-#endif
+#endif
diff --git a/include/lmms_math.h b/include/lmms_math.h
index 57454ac..3d23abc 100644
--- a/include/lmms_math.h
+++ b/include/lmms_math.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,13 +23,39 @@
*/
-#ifndef _LMMS_MATH_H
-#define _LMMS_MATH_H
+#ifndef LMMS_MATH_H
+#define LMMS_MATH_H
+#include <stdint.h>
+#include "lmms_constants.h"
+#include "lmmsconfig.h"
+#include <QtCore/QtGlobal>
-#ifdef __INTEL_COMPILER
+#include <cmath>
+using namespace std;
+
+#if defined (LMMS_BUILD_WIN32) || defined (LMMS_BUILD_APPLE)
+#ifndef isnanf
+#define isnanf(x) isnan(x)
+#endif
+#ifndef isinff
+#define isinff(x) isinf(x)
+#endif
+#ifndef _isnanf
+#define _isnanf(x) isnan(x)
+#endif
+#ifndef _isinff
+#define _isinff(x) isinf(x)
+#endif
+#ifndef exp10
+#define exp10(x) pow( 10, x )
+#endif
+#ifndef exp10f
+#define exp10f(x) powf( 10, x )
+#endif
+#endif
-#include <math.h>
+#ifdef __INTEL_COMPILER
static inline float absFraction( const float _x )
{
@@ -104,7 +130,120 @@ static inline int fast_rand()
return( (unsigned)( next / 65536 ) % 32768 );
}
+//! @brief Takes advantage of fmal() function if present in hardware
+static inline long double fastFmal( long double a, long double b, long double c ) {
+#ifdef FP_FAST_FMAL
+ #ifdef __clang__
+ return fma( a, b, c );
+ #else
+ return fmal( a, b, c );
+ #endif
+#else
+ return a * b + c;
+#endif
+}
+
+//! @brief Takes advantage of fmaf() function if present in hardware
+static inline float fastFmaf( float a, float b, float c ) {
+#ifdef FP_FAST_FMAF
+ #ifdef __clang__
+ return fma( a, b, c );
+ #else
+ return fmaf( a, b, c );
+ #endif
+#else
+ return a * b + c;
+#endif
+}
+
+//! @brief Takes advantage of fma() function if present in hardware
+static inline double fastFma( double a, double b, double c ) {
+#ifdef FP_FAST_FMA
+ return fma( a, b, c );
+#else
+ return a * b + c;
+#endif
+}
+
+// source: http://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/
+static inline double fastPow( double a, double b )
+{
+ union
+ {
+ double d;
+ int32_t x[2];
+ } u = { a };
+ u.x[1] = static_cast<int32_t>( b * ( u.x[1] - 1072632447 ) + 1072632447 );
+ u.x[0] = 0;
+ return u.d;
+}
+
+// sinc function
+static inline double sinc( double _x )
+{
+ return _x == 0.0 ? 1.0 : sin( F_PI * _x ) / ( F_PI * _x );
+}
+
+
+//! @brief Exponential function that deals with negative bases
+static inline float signedPowf( float v, float e )
+{
+ return v < 0
+ ? powf( -v, e ) * -1.0f
+ : powf( v, e );
+}
+
+
+//! @brief Scales @value from linear to logarithmic.
+//! Value should be within [0,1]
+static inline float logToLinearScale( float min, float max, float value )
+{
+ if( min < 0 )
+ {
+ const float mmax = qMax( qAbs( min ), qAbs( max ) );
+ const float val = value * ( max - min ) + min;
+ return signedPowf( val / mmax, F_E ) * mmax;
+ }
+ return powf( value, F_E ) * ( max - min ) + min;
+}
+
+//! @brief Scales value from logarithmic to linear. Value should be in min-max range.
+static inline float linearToLogScale( float min, float max, float value )
+{
+ static const float EXP = 1.0f / F_E;
+ const float val = ( value - min ) / ( max - min );
+ if( min < 0 )
+ {
+ const float mmax = qMax( qAbs( min ), qAbs( max ) );
+ return signedPowf( value / mmax, EXP ) * mmax;
+ }
+ return powf( val, EXP ) * ( max - min ) + min;
+}
+
+
+
+
+//! @brief Converts linear amplitude (0-1.0) to dBV scale.
+//! @param amp Linear amplitude, where 1.0 = 0dBV.
+//! @return Amplitude in dBV. -inf for 0 amplitude.
+static inline float ampToDbv( float amp )
+{
+ return amp == 0.0f
+ ? -INFINITY
+ : log10f( amp ) * 20.0f;
+}
+
+
+//! @brief Converts dBV-scale to linear amplitude with 0dBV = 1.0
+//! @param dbv The dBV value to convert: all infinites are treated as -inf and result in 0
+//! @return Linear amplitude
+static inline float dbvToAmp( float dbv )
+{
+ return isinff( dbv )
+ ? 0.0f
+ : exp10f( dbv * 0.05f );
+}
#endif
diff --git a/include/mmp.h b/include/mmp.h
deleted file mode 100644
index d76a8f5..0000000
--- a/include/mmp.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * mmp.h - class for reading and writing multimedia-project-files
- *
- * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- * Copyright (c) 2012-2013 Paul Giblock <p/at/pgiblock.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-
-#ifndef _MMP_H
-#define _MMP_H
-
-#include <QtXml/QDomDocument>
-#include <QTextStream>
-
-#include "export.h"
-#include "lmms_basics.h"
-
-
-class EXPORT multimediaProject : public QDomDocument
-{
-public:
- enum ProjectTypes
- {
- UnknownType,
- SongProject,
- SongProjectTemplate,
- InstrumentTrackSettings,
- DragNDropData,
- ClipboardData,
- JournalData,
- EffectSettings,
- VideoProject, // might come later...
- BurnProject, // might come later...
- Playlist, // might come later...
- NumProjectTypes
- } ;
-
-
- multimediaProject( const QString & _fileName );
- multimediaProject( const QByteArray & _data );
- multimediaProject( ProjectTypes _project_type );
- virtual ~multimediaProject();
-
- QString nameWithExtension( const QString & _fn ) const;
-
- void write( QTextStream & _strm );
- bool writeFile( const QString & _fn );
-
- inline QDomElement & content()
- {
- return( m_content );
- }
- inline QDomElement & head()
- {
- return( m_head );
- }
-
- inline ProjectTypes type() const
- {
- return( m_type );
- }
-
-
-private:
- static ProjectTypes type( const QString & _type_name );
- static QString typeName( ProjectTypes _project_type );
-
- void cleanMetaNodes( QDomElement _de );
-
- void upgrade();
-
- void loadData( const QByteArray & _data, const QString & _sourceFile );
-
-
- struct EXPORT typeDescStruct
- {
- ProjectTypes m_type;
- QString m_name;
- } ;
- static typeDescStruct s_types[NumProjectTypes];
-
- QDomElement m_content;
- QDomElement m_head;
- ProjectTypes m_type;
-
-} ;
-
-
-const int MMP_MAJOR_VERSION = 1;
-const int MMP_MINOR_VERSION = 0;
-const QString MMP_VERSION_STRING = QString::number( MMP_MAJOR_VERSION ) + "." + QString::number( MMP_MINOR_VERSION );
-
-
-#endif
-
diff --git a/include/moc_AudioAlsa.cxx_parameters b/include/moc_AudioAlsa.cxx_parameters
deleted file mode 100644
index f82e1b3..0000000
--- a/include/moc_AudioAlsa.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioAlsa.cxx
-/home/lukas/src/lmms/include/AudioAlsa.h
diff --git a/include/moc_AudioDevice.cxx_parameters b/include/moc_AudioDevice.cxx_parameters
deleted file mode 100644
index 1451615..0000000
--- a/include/moc_AudioDevice.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioDevice.cxx
-/home/lukas/src/lmms/include/AudioDevice.h
diff --git a/include/moc_AudioDummy.cxx_parameters b/include/moc_AudioDummy.cxx_parameters
deleted file mode 100644
index 01c0483..0000000
--- a/include/moc_AudioDummy.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioDummy.cxx
-/home/lukas/src/lmms/include/AudioDummy.h
diff --git a/include/moc_AudioFileDevice.cxx_parameters b/include/moc_AudioFileDevice.cxx_parameters
deleted file mode 100644
index 6dfac10..0000000
--- a/include/moc_AudioFileDevice.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioFileDevice.cxx
-/home/lukas/src/lmms/include/AudioFileDevice.h
diff --git a/include/moc_AudioFileOgg.cxx_parameters b/include/moc_AudioFileOgg.cxx_parameters
deleted file mode 100644
index 2051a4c..0000000
--- a/include/moc_AudioFileOgg.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioFileOgg.cxx
-/home/lukas/src/lmms/include/AudioFileOgg.h
diff --git a/include/moc_AudioFileWave.cxx_parameters b/include/moc_AudioFileWave.cxx_parameters
deleted file mode 100644
index bb6a777..0000000
--- a/include/moc_AudioFileWave.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioFileWave.cxx
-/home/lukas/src/lmms/include/AudioFileWave.h
diff --git a/include/moc_AudioJack.cxx_parameters b/include/moc_AudioJack.cxx_parameters
deleted file mode 100644
index d97034a..0000000
--- a/include/moc_AudioJack.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioJack.cxx
-/home/lukas/src/lmms/include/AudioJack.h
diff --git a/include/moc_AudioOss.cxx_parameters b/include/moc_AudioOss.cxx_parameters
deleted file mode 100644
index db850ed..0000000
--- a/include/moc_AudioOss.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioOss.cxx
-/home/lukas/src/lmms/include/AudioOss.h
diff --git a/include/moc_AudioPort.cxx_parameters b/include/moc_AudioPort.cxx_parameters
deleted file mode 100644
index 7c82642..0000000
--- a/include/moc_AudioPort.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioPort.cxx
-/home/lukas/src/lmms/include/AudioPort.h
diff --git a/include/moc_AudioPortAudio.cxx_parameters b/include/moc_AudioPortAudio.cxx_parameters
deleted file mode 100644
index 8ed7378..0000000
--- a/include/moc_AudioPortAudio.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioPortAudio.cxx
-/home/lukas/src/lmms/include/AudioPortAudio.h
diff --git a/include/moc_AudioPulseAudio.cxx_parameters b/include/moc_AudioPulseAudio.cxx_parameters
deleted file mode 100644
index 015b633..0000000
--- a/include/moc_AudioPulseAudio.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioPulseAudio.cxx
-/home/lukas/src/lmms/include/AudioPulseAudio.h
diff --git a/include/moc_AudioSampleRecorder.cxx_parameters b/include/moc_AudioSampleRecorder.cxx_parameters
deleted file mode 100644
index f66bb40..0000000
--- a/include/moc_AudioSampleRecorder.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioSampleRecorder.cxx
-/home/lukas/src/lmms/include/AudioSampleRecorder.h
diff --git a/include/moc_AudioSdl.cxx_parameters b/include/moc_AudioSdl.cxx_parameters
deleted file mode 100644
index b7a3cd8..0000000
--- a/include/moc_AudioSdl.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AudioSdl.cxx
-/home/lukas/src/lmms/include/AudioSdl.h
diff --git a/include/moc_AutomatableModel.cxx_parameters b/include/moc_AutomatableModel.cxx_parameters
deleted file mode 100644
index dc22ebc..0000000
--- a/include/moc_AutomatableModel.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AutomatableModel.cxx
-/home/lukas/src/lmms/include/AutomatableModel.h
diff --git a/include/moc_AutomatableModelView.cxx_parameters b/include/moc_AutomatableModelView.cxx_parameters
deleted file mode 100644
index d21f898..0000000
--- a/include/moc_AutomatableModelView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AutomatableModelView.cxx
-/home/lukas/src/lmms/include/AutomatableModelView.h
diff --git a/include/moc_AutomationEditor.cxx_parameters b/include/moc_AutomationEditor.cxx_parameters
deleted file mode 100644
index 8293599..0000000
--- a/include/moc_AutomationEditor.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AutomationEditor.cxx
-/home/lukas/src/lmms/include/AutomationEditor.h
diff --git a/include/moc_AutomationPattern.cxx_parameters b/include/moc_AutomationPattern.cxx_parameters
deleted file mode 100644
index 93c28d9..0000000
--- a/include/moc_AutomationPattern.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AutomationPattern.cxx
-/home/lukas/src/lmms/include/AutomationPattern.h
diff --git a/include/moc_AutomationPatternView.cxx_parameters b/include/moc_AutomationPatternView.cxx_parameters
deleted file mode 100644
index 28c1dee..0000000
--- a/include/moc_AutomationPatternView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AutomationPatternView.cxx
-/home/lukas/src/lmms/include/AutomationPatternView.h
diff --git a/include/moc_AutomationTrack.cxx_parameters b/include/moc_AutomationTrack.cxx_parameters
deleted file mode 100644
index eaf8e8a..0000000
--- a/include/moc_AutomationTrack.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_AutomationTrack.cxx
-/home/lukas/src/lmms/include/AutomationTrack.h
diff --git a/include/moc_Clipboard.cxx_parameters b/include/moc_Clipboard.cxx_parameters
deleted file mode 100644
index d0957dd..0000000
--- a/include/moc_Clipboard.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Clipboard.cxx
-/home/lukas/src/lmms/include/Clipboard.h
diff --git a/include/moc_ComboBoxModel.cxx_parameters b/include/moc_ComboBoxModel.cxx_parameters
deleted file mode 100644
index de7d3a0..0000000
--- a/include/moc_ComboBoxModel.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ComboBoxModel.cxx
-/home/lukas/src/lmms/include/ComboBoxModel.h
diff --git a/include/moc_Controller.cxx_parameters b/include/moc_Controller.cxx_parameters
deleted file mode 100644
index 1462241..0000000
--- a/include/moc_Controller.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Controller.cxx
-/home/lukas/src/lmms/include/Controller.h
diff --git a/include/moc_ControllerConnection.cxx_parameters b/include/moc_ControllerConnection.cxx_parameters
deleted file mode 100644
index d66486f..0000000
--- a/include/moc_ControllerConnection.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ControllerConnection.cxx
-/home/lukas/src/lmms/include/ControllerConnection.h
diff --git a/include/moc_ControllerConnectionDialog.cxx_parameters b/include/moc_ControllerConnectionDialog.cxx_parameters
deleted file mode 100644
index 7921bae..0000000
--- a/include/moc_ControllerConnectionDialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ControllerConnectionDialog.cxx
-/home/lukas/src/lmms/include/ControllerConnectionDialog.h
diff --git a/include/moc_ControllerDialog.cxx_parameters b/include/moc_ControllerDialog.cxx_parameters
deleted file mode 100644
index 000a676..0000000
--- a/include/moc_ControllerDialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ControllerDialog.cxx
-/home/lukas/src/lmms/include/ControllerDialog.h
diff --git a/include/moc_ControllerRackView.cxx_parameters b/include/moc_ControllerRackView.cxx_parameters
deleted file mode 100644
index 6196b1f..0000000
--- a/include/moc_ControllerRackView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ControllerRackView.cxx
-/home/lukas/src/lmms/include/ControllerRackView.h
diff --git a/include/moc_ControllerView.cxx_parameters b/include/moc_ControllerView.cxx_parameters
deleted file mode 100644
index e8c6ab1..0000000
--- a/include/moc_ControllerView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ControllerView.cxx
-/home/lukas/src/lmms/include/ControllerView.h
diff --git a/include/moc_DataFile.cxx_parameters b/include/moc_DataFile.cxx_parameters
deleted file mode 100644
index 0538c38..0000000
--- a/include/moc_DataFile.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_DataFile.cxx
-/home/lukas/src/lmms/include/DataFile.h
diff --git a/include/moc_DetuningHelper.cxx_parameters b/include/moc_DetuningHelper.cxx_parameters
deleted file mode 100644
index 395d6f4..0000000
--- a/include/moc_DetuningHelper.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_DetuningHelper.cxx
-/home/lukas/src/lmms/include/DetuningHelper.h
diff --git a/include/moc_DspEffectLibrary.cxx_parameters b/include/moc_DspEffectLibrary.cxx_parameters
deleted file mode 100644
index ea6aaa5..0000000
--- a/include/moc_DspEffectLibrary.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_DspEffectLibrary.cxx
-/home/lukas/src/lmms/include/DspEffectLibrary.h
diff --git a/include/moc_DummyEffect.cxx_parameters b/include/moc_DummyEffect.cxx_parameters
deleted file mode 100644
index 8188629..0000000
--- a/include/moc_DummyEffect.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_DummyEffect.cxx
-/home/lukas/src/lmms/include/DummyEffect.h
diff --git a/include/moc_DummyInstrument.cxx_parameters b/include/moc_DummyInstrument.cxx_parameters
deleted file mode 100644
index 7f6696c..0000000
--- a/include/moc_DummyInstrument.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_DummyInstrument.cxx
-/home/lukas/src/lmms/include/DummyInstrument.h
diff --git a/include/moc_DummyPlugin.cxx_parameters b/include/moc_DummyPlugin.cxx_parameters
deleted file mode 100644
index 7459b4a..0000000
--- a/include/moc_DummyPlugin.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_DummyPlugin.cxx
-/home/lukas/src/lmms/include/DummyPlugin.h
diff --git a/include/moc_Effect.cxx_parameters b/include/moc_Effect.cxx_parameters
deleted file mode 100644
index 95ff8a3..0000000
--- a/include/moc_Effect.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Effect.cxx
-/home/lukas/src/lmms/include/Effect.h
diff --git a/include/moc_EffectChain.cxx_parameters b/include/moc_EffectChain.cxx_parameters
deleted file mode 100644
index 89e6438..0000000
--- a/include/moc_EffectChain.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_EffectChain.cxx
-/home/lukas/src/lmms/include/EffectChain.h
diff --git a/include/moc_EffectControlDialog.cxx_parameters b/include/moc_EffectControlDialog.cxx_parameters
deleted file mode 100644
index 8098bbd..0000000
--- a/include/moc_EffectControlDialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_EffectControlDialog.cxx
-/home/lukas/src/lmms/include/EffectControlDialog.h
diff --git a/include/moc_EffectControls.cxx_parameters b/include/moc_EffectControls.cxx_parameters
deleted file mode 100644
index 77b20bd..0000000
--- a/include/moc_EffectControls.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_EffectControls.cxx
-/home/lukas/src/lmms/include/EffectControls.h
diff --git a/include/moc_EffectRackView.cxx_parameters b/include/moc_EffectRackView.cxx_parameters
deleted file mode 100644
index e62b5f3..0000000
--- a/include/moc_EffectRackView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_EffectRackView.cxx
-/home/lukas/src/lmms/include/EffectRackView.h
diff --git a/include/moc_EffectSelectDialog.cxx_parameters b/include/moc_EffectSelectDialog.cxx_parameters
deleted file mode 100644
index 2ca774d..0000000
--- a/include/moc_EffectSelectDialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_EffectSelectDialog.cxx
-/home/lukas/src/lmms/include/EffectSelectDialog.h
diff --git a/include/moc_EffectView.cxx_parameters b/include/moc_EffectView.cxx_parameters
deleted file mode 100644
index e615211..0000000
--- a/include/moc_EffectView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_EffectView.cxx
-/home/lukas/src/lmms/include/EffectView.h
diff --git a/include/moc_EnvelopeAndLfoParameters.cxx_parameters b/include/moc_EnvelopeAndLfoParameters.cxx_parameters
deleted file mode 100644
index 16d5f63..0000000
--- a/include/moc_EnvelopeAndLfoParameters.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_EnvelopeAndLfoParameters.cxx
-/home/lukas/src/lmms/include/EnvelopeAndLfoParameters.h
diff --git a/include/moc_EnvelopeAndLfoView.cxx_parameters b/include/moc_EnvelopeAndLfoView.cxx_parameters
deleted file mode 100644
index 437f0cc..0000000
--- a/include/moc_EnvelopeAndLfoView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_EnvelopeAndLfoView.cxx
-/home/lukas/src/lmms/include/EnvelopeAndLfoView.h
diff --git a/include/moc_FileDialog.cxx_parameters b/include/moc_FileDialog.cxx_parameters
deleted file mode 100644
index ff75d97..0000000
--- a/include/moc_FileDialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_FileDialog.cxx
-/home/lukas/src/lmms/include/FileDialog.h
diff --git a/include/moc_FxMixer.cxx_parameters b/include/moc_FxMixer.cxx_parameters
deleted file mode 100644
index e386b97..0000000
--- a/include/moc_FxMixer.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_FxMixer.cxx
-/home/lukas/src/lmms/include/FxMixer.h
diff --git a/include/moc_FxMixerView.cxx_parameters b/include/moc_FxMixerView.cxx_parameters
deleted file mode 100644
index d14ff88..0000000
--- a/include/moc_FxMixerView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_FxMixerView.cxx
-/home/lukas/src/lmms/include/FxMixerView.h
diff --git a/include/moc_ImportFilter.cxx_parameters b/include/moc_ImportFilter.cxx_parameters
deleted file mode 100644
index 270a152..0000000
--- a/include/moc_ImportFilter.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ImportFilter.cxx
-/home/lukas/src/lmms/include/ImportFilter.h
diff --git a/include/moc_InlineAutomation.cxx_parameters b/include/moc_InlineAutomation.cxx_parameters
deleted file mode 100644
index f658c87..0000000
--- a/include/moc_InlineAutomation.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InlineAutomation.cxx
-/home/lukas/src/lmms/include/InlineAutomation.h
diff --git a/include/moc_Instrument.cxx_parameters b/include/moc_Instrument.cxx_parameters
deleted file mode 100644
index 4441915..0000000
--- a/include/moc_Instrument.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Instrument.cxx
-/home/lukas/src/lmms/include/Instrument.h
diff --git a/include/moc_InstrumentFunctionViews.cxx_parameters b/include/moc_InstrumentFunctionViews.cxx_parameters
deleted file mode 100644
index 4f49a9b..0000000
--- a/include/moc_InstrumentFunctionViews.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InstrumentFunctionViews.cxx
-/home/lukas/src/lmms/include/InstrumentFunctionViews.h
diff --git a/include/moc_InstrumentFunctions.cxx_parameters b/include/moc_InstrumentFunctions.cxx_parameters
deleted file mode 100644
index 65f2911..0000000
--- a/include/moc_InstrumentFunctions.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InstrumentFunctions.cxx
-/home/lukas/src/lmms/include/InstrumentFunctions.h
diff --git a/include/moc_InstrumentMidiIOView.cxx_parameters b/include/moc_InstrumentMidiIOView.cxx_parameters
deleted file mode 100644
index 4852022..0000000
--- a/include/moc_InstrumentMidiIOView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InstrumentMidiIOView.cxx
-/home/lukas/src/lmms/include/InstrumentMidiIOView.h
diff --git a/include/moc_InstrumentPlayHandle.cxx_parameters b/include/moc_InstrumentPlayHandle.cxx_parameters
deleted file mode 100644
index 96e237c..0000000
--- a/include/moc_InstrumentPlayHandle.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InstrumentPlayHandle.cxx
-/home/lukas/src/lmms/include/InstrumentPlayHandle.h
diff --git a/include/moc_InstrumentSoundShaping.cxx_parameters b/include/moc_InstrumentSoundShaping.cxx_parameters
deleted file mode 100644
index 70b6a45..0000000
--- a/include/moc_InstrumentSoundShaping.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InstrumentSoundShaping.cxx
-/home/lukas/src/lmms/include/InstrumentSoundShaping.h
diff --git a/include/moc_InstrumentSoundShapingView.cxx_parameters b/include/moc_InstrumentSoundShapingView.cxx_parameters
deleted file mode 100644
index 07cb8ef..0000000
--- a/include/moc_InstrumentSoundShapingView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InstrumentSoundShapingView.cxx
-/home/lukas/src/lmms/include/InstrumentSoundShapingView.h
diff --git a/include/moc_InstrumentTrack.cxx_parameters b/include/moc_InstrumentTrack.cxx_parameters
deleted file mode 100644
index 4ae82af..0000000
--- a/include/moc_InstrumentTrack.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InstrumentTrack.cxx
-/home/lukas/src/lmms/include/InstrumentTrack.h
diff --git a/include/moc_InstrumentView.cxx_parameters b/include/moc_InstrumentView.cxx_parameters
deleted file mode 100644
index 9bec7c4..0000000
--- a/include/moc_InstrumentView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_InstrumentView.cxx
-/home/lukas/src/lmms/include/InstrumentView.h
diff --git a/include/moc_JournallingObject.cxx_parameters b/include/moc_JournallingObject.cxx_parameters
deleted file mode 100644
index 3b8c704..0000000
--- a/include/moc_JournallingObject.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_JournallingObject.cxx
-/home/lukas/src/lmms/include/JournallingObject.h
diff --git a/include/moc_LadspaBase.cxx_parameters b/include/moc_LadspaBase.cxx_parameters
deleted file mode 100644
index ec35c5d..0000000
--- a/include/moc_LadspaBase.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_LadspaBase.cxx
-/home/lukas/src/lmms/include/LadspaBase.h
diff --git a/include/moc_LadspaControl.cxx_parameters b/include/moc_LadspaControl.cxx_parameters
deleted file mode 100644
index c2e9199..0000000
--- a/include/moc_LadspaControl.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_LadspaControl.cxx
-/home/lukas/src/lmms/include/LadspaControl.h
diff --git a/include/moc_LadspaControlView.cxx_parameters b/include/moc_LadspaControlView.cxx_parameters
deleted file mode 100644
index acb9a28..0000000
--- a/include/moc_LadspaControlView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_LadspaControlView.cxx
-/home/lukas/src/lmms/include/LadspaControlView.h
diff --git a/include/moc_LcdSpinBox.cxx_parameters b/include/moc_LcdSpinBox.cxx_parameters
deleted file mode 100644
index e42e5c7..0000000
--- a/include/moc_LcdSpinBox.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_LcdSpinBox.cxx
-/home/lukas/src/lmms/include/LcdSpinBox.h
diff --git a/include/moc_LcdWidget.cxx_parameters b/include/moc_LcdWidget.cxx_parameters
deleted file mode 100644
index 21f23e4..0000000
--- a/include/moc_LcdWidget.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_LcdWidget.cxx
-/home/lukas/src/lmms/include/LcdWidget.h
diff --git a/include/moc_LfoController.cxx_parameters b/include/moc_LfoController.cxx_parameters
deleted file mode 100644
index 64e3420..0000000
--- a/include/moc_LfoController.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_LfoController.cxx
-/home/lukas/src/lmms/include/LfoController.h
diff --git a/include/moc_LmmsStyle.cxx_parameters b/include/moc_LmmsStyle.cxx_parameters
deleted file mode 100644
index cfeab8f..0000000
--- a/include/moc_LmmsStyle.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_LmmsStyle.cxx
-/home/lukas/src/lmms/include/LmmsStyle.h
diff --git a/include/moc_MainWindow.cxx_parameters b/include/moc_MainWindow.cxx_parameters
deleted file mode 100644
index d939d91..0000000
--- a/include/moc_MainWindow.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MainWindow.cxx
-/home/lukas/src/lmms/include/MainWindow.h
diff --git a/include/moc_MeterDialog.cxx_parameters b/include/moc_MeterDialog.cxx_parameters
deleted file mode 100644
index 55247ad..0000000
--- a/include/moc_MeterDialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MeterDialog.cxx
-/home/lukas/src/lmms/include/MeterDialog.h
diff --git a/include/moc_MeterModel.cxx_parameters b/include/moc_MeterModel.cxx_parameters
deleted file mode 100644
index 2e47add..0000000
--- a/include/moc_MeterModel.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MeterModel.cxx
-/home/lukas/src/lmms/include/MeterModel.h
diff --git a/include/moc_MicroTimer.cxx_parameters b/include/moc_MicroTimer.cxx_parameters
deleted file mode 100644
index d4044f0..0000000
--- a/include/moc_MicroTimer.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MicroTimer.cxx
-/home/lukas/src/lmms/include/MicroTimer.h
diff --git a/include/moc_Midi.cxx_parameters b/include/moc_Midi.cxx_parameters
deleted file mode 100644
index 71a47d7..0000000
--- a/include/moc_Midi.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Midi.cxx
-/home/lukas/src/lmms/include/Midi.h
diff --git a/include/moc_MidiAlsaRaw.cxx_parameters b/include/moc_MidiAlsaRaw.cxx_parameters
deleted file mode 100644
index 7d78a7e..0000000
--- a/include/moc_MidiAlsaRaw.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiAlsaRaw.cxx
-/home/lukas/src/lmms/include/MidiAlsaRaw.h
diff --git a/include/moc_MidiAlsaSeq.cxx_parameters b/include/moc_MidiAlsaSeq.cxx_parameters
deleted file mode 100644
index 44422fa..0000000
--- a/include/moc_MidiAlsaSeq.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiAlsaSeq.cxx
-/home/lukas/src/lmms/include/MidiAlsaSeq.h
diff --git a/include/moc_MidiClient.cxx_parameters b/include/moc_MidiClient.cxx_parameters
deleted file mode 100644
index 86e1985..0000000
--- a/include/moc_MidiClient.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiClient.cxx
-/home/lukas/src/lmms/include/MidiClient.h
diff --git a/include/moc_MidiController.cxx_parameters b/include/moc_MidiController.cxx_parameters
deleted file mode 100644
index 70e7b5f..0000000
--- a/include/moc_MidiController.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiController.cxx
-/home/lukas/src/lmms/include/MidiController.h
diff --git a/include/moc_MidiDummy.cxx_parameters b/include/moc_MidiDummy.cxx_parameters
deleted file mode 100644
index 2abb5e7..0000000
--- a/include/moc_MidiDummy.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiDummy.cxx
-/home/lukas/src/lmms/include/MidiDummy.h
diff --git a/include/moc_MidiEvent.cxx_parameters b/include/moc_MidiEvent.cxx_parameters
deleted file mode 100644
index 124d3d9..0000000
--- a/include/moc_MidiEvent.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiEvent.cxx
-/home/lukas/src/lmms/include/MidiEvent.h
diff --git a/include/moc_MidiEventProcessor.cxx_parameters b/include/moc_MidiEventProcessor.cxx_parameters
deleted file mode 100644
index c3445fb..0000000
--- a/include/moc_MidiEventProcessor.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiEventProcessor.cxx
-/home/lukas/src/lmms/include/MidiEventProcessor.h
diff --git a/include/moc_MidiOss.cxx_parameters b/include/moc_MidiOss.cxx_parameters
deleted file mode 100644
index ba3e3a4..0000000
--- a/include/moc_MidiOss.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiOss.cxx
-/home/lukas/src/lmms/include/MidiOss.h
diff --git a/include/moc_MidiPort.cxx_parameters b/include/moc_MidiPort.cxx_parameters
deleted file mode 100644
index 08820f2..0000000
--- a/include/moc_MidiPort.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiPort.cxx
-/home/lukas/src/lmms/include/MidiPort.h
diff --git a/include/moc_MidiPortMenu.cxx_parameters b/include/moc_MidiPortMenu.cxx_parameters
deleted file mode 100644
index 1285a90..0000000
--- a/include/moc_MidiPortMenu.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiPortMenu.cxx
-/home/lukas/src/lmms/include/MidiPortMenu.h
diff --git a/include/moc_MidiTime.cxx_parameters b/include/moc_MidiTime.cxx_parameters
deleted file mode 100644
index b00c97e..0000000
--- a/include/moc_MidiTime.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiTime.cxx
-/home/lukas/src/lmms/include/MidiTime.h
diff --git a/include/moc_MidiWinMM.cxx_parameters b/include/moc_MidiWinMM.cxx_parameters
deleted file mode 100644
index fb07805..0000000
--- a/include/moc_MidiWinMM.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MidiWinMM.cxx
-/home/lukas/src/lmms/include/MidiWinMM.h
diff --git a/include/moc_MixHelpers.cxx_parameters b/include/moc_MixHelpers.cxx_parameters
deleted file mode 100644
index 0d7b1bb..0000000
--- a/include/moc_MixHelpers.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_MixHelpers.cxx
-/home/lukas/src/lmms/include/MixHelpers.h
diff --git a/include/moc_Mixer.cxx_parameters b/include/moc_Mixer.cxx_parameters
deleted file mode 100644
index c0b7d9e..0000000
--- a/include/moc_Mixer.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Mixer.cxx
-/home/lukas/src/lmms/include/Mixer.h
diff --git a/include/moc_Model.cxx_parameters b/include/moc_Model.cxx_parameters
deleted file mode 100644
index 590e567..0000000
--- a/include/moc_Model.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Model.cxx
-/home/lukas/src/lmms/include/Model.h
diff --git a/include/moc_ModelView.cxx_parameters b/include/moc_ModelView.cxx_parameters
deleted file mode 100644
index 3d1d269..0000000
--- a/include/moc_ModelView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ModelView.cxx
-/home/lukas/src/lmms/include/ModelView.h
diff --git a/include/moc_NotePlayHandle.cxx_parameters b/include/moc_NotePlayHandle.cxx_parameters
deleted file mode 100644
index 70b3f66..0000000
--- a/include/moc_NotePlayHandle.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_NotePlayHandle.cxx
-/home/lukas/src/lmms/include/NotePlayHandle.h
diff --git a/include/moc_Oscillator.cxx_parameters b/include/moc_Oscillator.cxx_parameters
deleted file mode 100644
index 6588576..0000000
--- a/include/moc_Oscillator.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Oscillator.cxx
-/home/lukas/src/lmms/include/Oscillator.h
diff --git a/include/moc_PeakController.cxx_parameters b/include/moc_PeakController.cxx_parameters
deleted file mode 100644
index 28a419d..0000000
--- a/include/moc_PeakController.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_PeakController.cxx
-/home/lukas/src/lmms/include/PeakController.h
diff --git a/include/moc_Piano.cxx_parameters b/include/moc_Piano.cxx_parameters
deleted file mode 100644
index 1b5b586..0000000
--- a/include/moc_Piano.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Piano.cxx
-/home/lukas/src/lmms/include/Piano.h
diff --git a/include/moc_PianoRoll.cxx_parameters b/include/moc_PianoRoll.cxx_parameters
deleted file mode 100644
index 0f50546..0000000
--- a/include/moc_PianoRoll.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_PianoRoll.cxx
-/home/lukas/src/lmms/include/PianoRoll.h
diff --git a/include/moc_PianoView.cxx_parameters b/include/moc_PianoView.cxx_parameters
deleted file mode 100644
index 6f6f87b..0000000
--- a/include/moc_PianoView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_PianoView.cxx
-/home/lukas/src/lmms/include/PianoView.h
diff --git a/include/moc_Pitch.cxx_parameters b/include/moc_Pitch.cxx_parameters
deleted file mode 100644
index 7002f20..0000000
--- a/include/moc_Pitch.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Pitch.cxx
-/home/lukas/src/lmms/include/Pitch.h
diff --git a/include/moc_PlayHandle.cxx_parameters b/include/moc_PlayHandle.cxx_parameters
deleted file mode 100644
index ce32296..0000000
--- a/include/moc_PlayHandle.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_PlayHandle.cxx
-/home/lukas/src/lmms/include/PlayHandle.h
diff --git a/include/moc_Plugin.cxx_parameters b/include/moc_Plugin.cxx_parameters
deleted file mode 100644
index e05ba8d..0000000
--- a/include/moc_Plugin.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_Plugin.cxx
-/home/lukas/src/lmms/include/Plugin.h
diff --git a/include/moc_PluginView.cxx_parameters b/include/moc_PluginView.cxx_parameters
deleted file mode 100644
index 734fedc..0000000
--- a/include/moc_PluginView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_PluginView.cxx
-/home/lukas/src/lmms/include/PluginView.h
diff --git a/include/moc_PresetPreviewPlayHandle.cxx_parameters b/include/moc_PresetPreviewPlayHandle.cxx_parameters
deleted file mode 100644
index 13baba6..0000000
--- a/include/moc_PresetPreviewPlayHandle.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_PresetPreviewPlayHandle.cxx
-/home/lukas/src/lmms/include/PresetPreviewPlayHandle.h
diff --git a/include/moc_ProjectJournal.cxx_parameters b/include/moc_ProjectJournal.cxx_parameters
deleted file mode 100644
index ab4844f..0000000
--- a/include/moc_ProjectJournal.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ProjectJournal.cxx
-/home/lukas/src/lmms/include/ProjectJournal.h
diff --git a/include/moc_ProjectRenderer.cxx_parameters b/include/moc_ProjectRenderer.cxx_parameters
deleted file mode 100644
index dd29fe9..0000000
--- a/include/moc_ProjectRenderer.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ProjectRenderer.cxx
-/home/lukas/src/lmms/include/ProjectRenderer.h
diff --git a/include/moc_RemotePlugin.cxx_parameters b/include/moc_RemotePlugin.cxx_parameters
deleted file mode 100644
index 219f850..0000000
--- a/include/moc_RemotePlugin.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_RemotePlugin.cxx
-/home/lukas/src/lmms/include/RemotePlugin.h
diff --git a/include/moc_SampleBuffer.cxx_parameters b/include/moc_SampleBuffer.cxx_parameters
deleted file mode 100644
index acef343..0000000
--- a/include/moc_SampleBuffer.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SampleBuffer.cxx
-/home/lukas/src/lmms/include/SampleBuffer.h
diff --git a/include/moc_SamplePlayHandle.cxx_parameters b/include/moc_SamplePlayHandle.cxx_parameters
deleted file mode 100644
index 3dbdb53..0000000
--- a/include/moc_SamplePlayHandle.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SamplePlayHandle.cxx
-/home/lukas/src/lmms/include/SamplePlayHandle.h
diff --git a/include/moc_SampleRecordHandle.cxx_parameters b/include/moc_SampleRecordHandle.cxx_parameters
deleted file mode 100644
index 079ff9f..0000000
--- a/include/moc_SampleRecordHandle.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SampleRecordHandle.cxx
-/home/lukas/src/lmms/include/SampleRecordHandle.h
diff --git a/include/moc_SampleTrack.cxx_parameters b/include/moc_SampleTrack.cxx_parameters
deleted file mode 100644
index 9783fd2..0000000
--- a/include/moc_SampleTrack.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SampleTrack.cxx
-/home/lukas/src/lmms/include/SampleTrack.h
diff --git a/include/moc_SerializingObject.cxx_parameters b/include/moc_SerializingObject.cxx_parameters
deleted file mode 100644
index 0f7b9b7..0000000
--- a/include/moc_SerializingObject.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SerializingObject.cxx
-/home/lukas/src/lmms/include/SerializingObject.h
diff --git a/include/moc_SideBar.cxx_parameters b/include/moc_SideBar.cxx_parameters
deleted file mode 100644
index e835959..0000000
--- a/include/moc_SideBar.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SideBar.cxx
-/home/lukas/src/lmms/include/SideBar.h
diff --git a/include/moc_SideBarWidget.cxx_parameters b/include/moc_SideBarWidget.cxx_parameters
deleted file mode 100644
index 03e1b63..0000000
--- a/include/moc_SideBarWidget.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SideBarWidget.cxx
-/home/lukas/src/lmms/include/SideBarWidget.h
diff --git a/include/moc_SongEditor.cxx_parameters b/include/moc_SongEditor.cxx_parameters
deleted file mode 100644
index af2a980..0000000
--- a/include/moc_SongEditor.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SongEditor.cxx
-/home/lukas/src/lmms/include/SongEditor.h
diff --git a/include/moc_SweepOscillator.cxx_parameters b/include/moc_SweepOscillator.cxx_parameters
deleted file mode 100644
index 4527f49..0000000
--- a/include/moc_SweepOscillator.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_SweepOscillator.cxx
-/home/lukas/src/lmms/include/SweepOscillator.h
diff --git a/include/moc_TempoSyncKnob.cxx_parameters b/include/moc_TempoSyncKnob.cxx_parameters
deleted file mode 100644
index 8b08291..0000000
--- a/include/moc_TempoSyncKnob.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_TempoSyncKnob.cxx
-/home/lukas/src/lmms/include/TempoSyncKnob.h
diff --git a/include/moc_TempoSyncKnobModel.cxx_parameters b/include/moc_TempoSyncKnobModel.cxx_parameters
deleted file mode 100644
index dafff61..0000000
--- a/include/moc_TempoSyncKnobModel.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_TempoSyncKnobModel.cxx
-/home/lukas/src/lmms/include/TempoSyncKnobModel.h
diff --git a/include/moc_TimeDisplayWidget.cxx_parameters b/include/moc_TimeDisplayWidget.cxx_parameters
deleted file mode 100644
index 5a67f6f..0000000
--- a/include/moc_TimeDisplayWidget.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_TimeDisplayWidget.cxx
-/home/lukas/src/lmms/include/TimeDisplayWidget.h
diff --git a/include/moc_ToolPlugin.cxx_parameters b/include/moc_ToolPlugin.cxx_parameters
deleted file mode 100644
index 31b6f1f..0000000
--- a/include/moc_ToolPlugin.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ToolPlugin.cxx
-/home/lukas/src/lmms/include/ToolPlugin.h
diff --git a/include/moc_ToolPluginView.cxx_parameters b/include/moc_ToolPluginView.cxx_parameters
deleted file mode 100644
index 79cc4d2..0000000
--- a/include/moc_ToolPluginView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ToolPluginView.cxx
-/home/lukas/src/lmms/include/ToolPluginView.h
diff --git a/include/moc_TrackContainer.cxx_parameters b/include/moc_TrackContainer.cxx_parameters
deleted file mode 100644
index 319277d..0000000
--- a/include/moc_TrackContainer.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_TrackContainer.cxx
-/home/lukas/src/lmms/include/TrackContainer.h
diff --git a/include/moc_TrackContainerView.cxx_parameters b/include/moc_TrackContainerView.cxx_parameters
deleted file mode 100644
index b732ee8..0000000
--- a/include/moc_TrackContainerView.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_TrackContainerView.cxx
-/home/lukas/src/lmms/include/TrackContainerView.h
diff --git a/include/moc_VersionedSaveDialog.cxx_parameters b/include/moc_VersionedSaveDialog.cxx_parameters
deleted file mode 100644
index 24d4d82..0000000
--- a/include/moc_VersionedSaveDialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_VersionedSaveDialog.cxx
-/home/lukas/src/lmms/include/VersionedSaveDialog.h
diff --git a/include/moc_VstSyncController.cxx_parameters b/include/moc_VstSyncController.cxx_parameters
deleted file mode 100644
index 20f255d..0000000
--- a/include/moc_VstSyncController.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_VstSyncController.cxx
-/home/lukas/src/lmms/include/VstSyncController.h
diff --git a/include/moc_VstSyncData.cxx_parameters b/include/moc_VstSyncData.cxx_parameters
deleted file mode 100644
index 6c090d3..0000000
--- a/include/moc_VstSyncData.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_VstSyncData.cxx
-/home/lukas/src/lmms/include/VstSyncData.h
diff --git a/include/moc_about_dialog.cxx_parameters b/include/moc_about_dialog.cxx_parameters
deleted file mode 100644
index 0f6e794..0000000
--- a/include/moc_about_dialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_about_dialog.cxx
-/home/lukas/src/lmms/include/about_dialog.h
diff --git a/include/moc_aeffectx.cxx_parameters b/include/moc_aeffectx.cxx_parameters
deleted file mode 100644
index f52ba3b..0000000
--- a/include/moc_aeffectx.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_aeffectx.cxx
-/home/lukas/src/lmms/include/aeffectx.h
diff --git a/include/moc_atomic_int.cxx_parameters b/include/moc_atomic_int.cxx_parameters
deleted file mode 100644
index 1187092..0000000
--- a/include/moc_atomic_int.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_atomic_int.cxx
-/home/lukas/src/lmms/include/atomic_int.h
diff --git a/include/moc_automatable_button.cxx_parameters b/include/moc_automatable_button.cxx_parameters
deleted file mode 100644
index 92c1f4e..0000000
--- a/include/moc_automatable_button.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_automatable_button.cxx
-/home/lukas/src/lmms/include/automatable_button.h
diff --git a/include/moc_automatable_slider.cxx_parameters b/include/moc_automatable_slider.cxx_parameters
deleted file mode 100644
index 6254584..0000000
--- a/include/moc_automatable_slider.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_automatable_slider.cxx
-/home/lukas/src/lmms/include/automatable_slider.h
diff --git a/include/moc_base64.cxx_parameters b/include/moc_base64.cxx_parameters
deleted file mode 100644
index 112bac3..0000000
--- a/include/moc_base64.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_base64.cxx
-/home/lukas/src/lmms/include/base64.h
diff --git a/include/moc_basic_filters.cxx_parameters b/include/moc_basic_filters.cxx_parameters
deleted file mode 100644
index a653a55..0000000
--- a/include/moc_basic_filters.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_basic_filters.cxx
-/home/lukas/src/lmms/include/basic_filters.h
diff --git a/include/moc_bb_editor.cxx_parameters b/include/moc_bb_editor.cxx_parameters
deleted file mode 100644
index ca7be2e..0000000
--- a/include/moc_bb_editor.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_bb_editor.cxx
-/home/lukas/src/lmms/include/bb_editor.h
diff --git a/include/moc_bb_track.cxx_parameters b/include/moc_bb_track.cxx_parameters
deleted file mode 100644
index 6f83608..0000000
--- a/include/moc_bb_track.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_bb_track.cxx
-/home/lukas/src/lmms/include/bb_track.h
diff --git a/include/moc_bb_track_container.cxx_parameters b/include/moc_bb_track_container.cxx_parameters
deleted file mode 100644
index e917325..0000000
--- a/include/moc_bb_track_container.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_bb_track_container.cxx
-/home/lukas/src/lmms/include/bb_track_container.h
diff --git a/include/moc_caption_menu.cxx_parameters b/include/moc_caption_menu.cxx_parameters
deleted file mode 100644
index 264bcc1..0000000
--- a/include/moc_caption_menu.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_caption_menu.cxx
-/home/lukas/src/lmms/include/caption_menu.h
diff --git a/include/moc_combobox.cxx_parameters b/include/moc_combobox.cxx_parameters
deleted file mode 100644
index 5a62067..0000000
--- a/include/moc_combobox.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_combobox.cxx
-/home/lukas/src/lmms/include/combobox.h
diff --git a/include/moc_config_mgr.cxx_parameters b/include/moc_config_mgr.cxx_parameters
deleted file mode 100644
index c66cb18..0000000
--- a/include/moc_config_mgr.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_config_mgr.cxx
-/home/lukas/src/lmms/include/config_mgr.h
diff --git a/include/moc_cpuload_widget.cxx_parameters b/include/moc_cpuload_widget.cxx_parameters
deleted file mode 100644
index 981242e..0000000
--- a/include/moc_cpuload_widget.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_cpuload_widget.cxx
-/home/lukas/src/lmms/include/cpuload_widget.h
diff --git a/include/moc_custom_events.cxx_parameters b/include/moc_custom_events.cxx_parameters
deleted file mode 100644
index e4932ad..0000000
--- a/include/moc_custom_events.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_custom_events.cxx
-/home/lukas/src/lmms/include/custom_events.h
diff --git a/include/moc_debug.cxx_parameters b/include/moc_debug.cxx_parameters
deleted file mode 100644
index d2fdbb7..0000000
--- a/include/moc_debug.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_debug.cxx
-/home/lukas/src/lmms/include/debug.h
diff --git a/include/moc_drumsynth.cxx_parameters b/include/moc_drumsynth.cxx_parameters
deleted file mode 100644
index d367544..0000000
--- a/include/moc_drumsynth.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_drumsynth.cxx
-/home/lukas/src/lmms/include/drumsynth.h
diff --git a/include/moc_embed.cxx_parameters b/include/moc_embed.cxx_parameters
deleted file mode 100644
index b9118b8..0000000
--- a/include/moc_embed.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_embed.cxx
-/home/lukas/src/lmms/include/embed.h
diff --git a/include/moc_endian_handling.cxx_parameters b/include/moc_endian_handling.cxx_parameters
deleted file mode 100644
index 7c767fb..0000000
--- a/include/moc_endian_handling.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_endian_handling.cxx
-/home/lukas/src/lmms/include/endian_handling.h
diff --git a/include/moc_engine.cxx_parameters b/include/moc_engine.cxx_parameters
deleted file mode 100644
index 76ed7e0..0000000
--- a/include/moc_engine.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_engine.cxx
-/home/lukas/src/lmms/include/engine.h
diff --git a/include/moc_export.cxx_parameters b/include/moc_export.cxx_parameters
deleted file mode 100644
index f465461..0000000
--- a/include/moc_export.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_export.cxx
-/home/lukas/src/lmms/include/export.h
diff --git a/include/moc_export_project_dialog.cxx_parameters b/include/moc_export_project_dialog.cxx_parameters
deleted file mode 100644
index f4e763f..0000000
--- a/include/moc_export_project_dialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_export_project_dialog.cxx
-/home/lukas/src/lmms/include/export_project_dialog.h
diff --git a/include/moc_fade_button.cxx_parameters b/include/moc_fade_button.cxx_parameters
deleted file mode 100644
index 8442a46..0000000
--- a/include/moc_fade_button.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_fade_button.cxx
-/home/lukas/src/lmms/include/fade_button.h
diff --git a/include/moc_fader.cxx_parameters b/include/moc_fader.cxx_parameters
deleted file mode 100644
index 5df217c..0000000
--- a/include/moc_fader.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_fader.cxx
-/home/lukas/src/lmms/include/fader.h
diff --git a/include/moc_fft_helpers.cxx_parameters b/include/moc_fft_helpers.cxx_parameters
deleted file mode 100644
index da27889..0000000
--- a/include/moc_fft_helpers.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_fft_helpers.cxx
-/home/lukas/src/lmms/include/fft_helpers.h
diff --git a/include/moc_fifo_buffer.cxx_parameters b/include/moc_fifo_buffer.cxx_parameters
deleted file mode 100644
index 327c726..0000000
--- a/include/moc_fifo_buffer.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_fifo_buffer.cxx
-/home/lukas/src/lmms/include/fifo_buffer.h
diff --git a/include/moc_file_browser.cxx_parameters b/include/moc_file_browser.cxx_parameters
deleted file mode 100644
index 98a8b71..0000000
--- a/include/moc_file_browser.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_file_browser.cxx
-/home/lukas/src/lmms/include/file_browser.h
diff --git a/include/moc_graph.cxx_parameters b/include/moc_graph.cxx_parameters
deleted file mode 100644
index 868b224..0000000
--- a/include/moc_graph.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_graph.cxx
-/home/lukas/src/lmms/include/graph.h
diff --git a/include/moc_group_box.cxx_parameters b/include/moc_group_box.cxx_parameters
deleted file mode 100644
index 19510d7..0000000
--- a/include/moc_group_box.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_group_box.cxx
-/home/lukas/src/lmms/include/group_box.h
diff --git a/include/moc_gui_templates.cxx_parameters b/include/moc_gui_templates.cxx_parameters
deleted file mode 100644
index a2394af..0000000
--- a/include/moc_gui_templates.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_gui_templates.cxx
-/home/lukas/src/lmms/include/gui_templates.h
diff --git a/include/moc_interpolation.cxx_parameters b/include/moc_interpolation.cxx_parameters
deleted file mode 100644
index aab66fb..0000000
--- a/include/moc_interpolation.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_interpolation.cxx
-/home/lukas/src/lmms/include/interpolation.h
diff --git a/include/moc_knob.cxx_parameters b/include/moc_knob.cxx_parameters
deleted file mode 100644
index 8710687..0000000
--- a/include/moc_knob.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_knob.cxx
-/home/lukas/src/lmms/include/knob.h
diff --git a/include/moc_ladspa.cxx_parameters b/include/moc_ladspa.cxx_parameters
deleted file mode 100644
index 16b2ce9..0000000
--- a/include/moc_ladspa.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ladspa.cxx
-/home/lukas/src/lmms/include/ladspa.h
diff --git a/include/moc_ladspa_2_lmms.cxx_parameters b/include/moc_ladspa_2_lmms.cxx_parameters
deleted file mode 100644
index 65273cb..0000000
--- a/include/moc_ladspa_2_lmms.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ladspa_2_lmms.cxx
-/home/lukas/src/lmms/include/ladspa_2_lmms.h
diff --git a/include/moc_ladspa_manager.cxx_parameters b/include/moc_ladspa_manager.cxx_parameters
deleted file mode 100644
index 8910a2d..0000000
--- a/include/moc_ladspa_manager.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_ladspa_manager.cxx
-/home/lukas/src/lmms/include/ladspa_manager.h
diff --git a/include/moc_led_checkbox.cxx_parameters b/include/moc_led_checkbox.cxx_parameters
deleted file mode 100644
index de9e044..0000000
--- a/include/moc_led_checkbox.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_led_checkbox.cxx
-/home/lukas/src/lmms/include/led_checkbox.h
diff --git a/include/moc_lmms_basics.cxx_parameters b/include/moc_lmms_basics.cxx_parameters
deleted file mode 100644
index 696f645..0000000
--- a/include/moc_lmms_basics.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_lmms_basics.cxx
-/home/lukas/src/lmms/include/lmms_basics.h
diff --git a/include/moc_lmms_constants.cxx_parameters b/include/moc_lmms_constants.cxx_parameters
deleted file mode 100644
index fca63e0..0000000
--- a/include/moc_lmms_constants.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_lmms_constants.cxx
-/home/lukas/src/lmms/include/lmms_constants.h
diff --git a/include/moc_lmms_math.cxx_parameters b/include/moc_lmms_math.cxx_parameters
deleted file mode 100644
index 8d96b5b..0000000
--- a/include/moc_lmms_math.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_lmms_math.cxx
-/home/lukas/src/lmms/include/lmms_math.h
diff --git a/include/moc_mmp.cxx_parameters b/include/moc_mmp.cxx_parameters
deleted file mode 100644
index 05d5712..0000000
--- a/include/moc_mmp.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_mmp.cxx
-/home/lukas/src/lmms/include/mmp.h
diff --git a/include/moc_note.cxx_parameters b/include/moc_note.cxx_parameters
deleted file mode 100644
index 7161dac..0000000
--- a/include/moc_note.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_note.cxx
-/home/lukas/src/lmms/include/note.h
diff --git a/include/moc_nstate_button.cxx_parameters b/include/moc_nstate_button.cxx_parameters
deleted file mode 100644
index facc5c5..0000000
--- a/include/moc_nstate_button.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_nstate_button.cxx
-/home/lukas/src/lmms/include/nstate_button.h
diff --git a/include/moc_panning.cxx_parameters b/include/moc_panning.cxx_parameters
deleted file mode 100644
index d8a6ee3..0000000
--- a/include/moc_panning.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_panning.cxx
-/home/lukas/src/lmms/include/panning.h
diff --git a/include/moc_panning_constants.cxx_parameters b/include/moc_panning_constants.cxx_parameters
deleted file mode 100644
index 81329b7..0000000
--- a/include/moc_panning_constants.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_panning_constants.cxx
-/home/lukas/src/lmms/include/panning_constants.h
diff --git a/include/moc_pattern.cxx_parameters b/include/moc_pattern.cxx_parameters
deleted file mode 100644
index e967f18..0000000
--- a/include/moc_pattern.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_pattern.cxx
-/home/lukas/src/lmms/include/pattern.h
diff --git a/include/moc_pixmap_button.cxx_parameters b/include/moc_pixmap_button.cxx_parameters
deleted file mode 100644
index c2d28c2..0000000
--- a/include/moc_pixmap_button.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_pixmap_button.cxx
-/home/lukas/src/lmms/include/pixmap_button.h
diff --git a/include/moc_plugin_browser.cxx_parameters b/include/moc_plugin_browser.cxx_parameters
deleted file mode 100644
index 4a29a5b..0000000
--- a/include/moc_plugin_browser.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_plugin_browser.cxx
-/home/lukas/src/lmms/include/plugin_browser.h
diff --git a/include/moc_project_notes.cxx_parameters b/include/moc_project_notes.cxx_parameters
deleted file mode 100644
index a0e6eb1..0000000
--- a/include/moc_project_notes.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_project_notes.cxx
-/home/lukas/src/lmms/include/project_notes.h
diff --git a/include/moc_project_version.cxx_parameters b/include/moc_project_version.cxx_parameters
deleted file mode 100644
index 583a88a..0000000
--- a/include/moc_project_version.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_project_version.cxx
-/home/lukas/src/lmms/include/project_version.h
diff --git a/include/moc_rename_dialog.cxx_parameters b/include/moc_rename_dialog.cxx_parameters
deleted file mode 100644
index 0cd2922..0000000
--- a/include/moc_rename_dialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_rename_dialog.cxx
-/home/lukas/src/lmms/include/rename_dialog.h
diff --git a/include/moc_rubberband.cxx_parameters b/include/moc_rubberband.cxx_parameters
deleted file mode 100644
index 0137d9f..0000000
--- a/include/moc_rubberband.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_rubberband.cxx
-/home/lukas/src/lmms/include/rubberband.h
diff --git a/include/moc_setup_dialog.cxx_parameters b/include/moc_setup_dialog.cxx_parameters
deleted file mode 100644
index f437f70..0000000
--- a/include/moc_setup_dialog.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_setup_dialog.cxx
-/home/lukas/src/lmms/include/setup_dialog.h
diff --git a/include/moc_shared_object.cxx_parameters b/include/moc_shared_object.cxx_parameters
deleted file mode 100644
index 4ae9741..0000000
--- a/include/moc_shared_object.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_shared_object.cxx
-/home/lukas/src/lmms/include/shared_object.h
diff --git a/include/moc_song.cxx_parameters b/include/moc_song.cxx_parameters
deleted file mode 100644
index a0844bf..0000000
--- a/include/moc_song.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_song.cxx
-/home/lukas/src/lmms/include/song.h
diff --git a/include/moc_string_pair_drag.cxx_parameters b/include/moc_string_pair_drag.cxx_parameters
deleted file mode 100644
index 3c1f9ba..0000000
--- a/include/moc_string_pair_drag.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_string_pair_drag.cxx
-/home/lukas/src/lmms/include/string_pair_drag.h
diff --git a/include/moc_tab_bar.cxx_parameters b/include/moc_tab_bar.cxx_parameters
deleted file mode 100644
index 0c750b8..0000000
--- a/include/moc_tab_bar.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_tab_bar.cxx
-/home/lukas/src/lmms/include/tab_bar.h
diff --git a/include/moc_tab_button.cxx_parameters b/include/moc_tab_button.cxx_parameters
deleted file mode 100644
index afb1528..0000000
--- a/include/moc_tab_button.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_tab_button.cxx
-/home/lukas/src/lmms/include/tab_button.h
diff --git a/include/moc_tab_widget.cxx_parameters b/include/moc_tab_widget.cxx_parameters
deleted file mode 100644
index 8aab06d..0000000
--- a/include/moc_tab_widget.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_tab_widget.cxx
-/home/lukas/src/lmms/include/tab_widget.h
diff --git a/include/moc_templates.cxx_parameters b/include/moc_templates.cxx_parameters
deleted file mode 100644
index cf68a0f..0000000
--- a/include/moc_templates.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_templates.cxx
-/home/lukas/src/lmms/include/templates.h
diff --git a/include/moc_text_float.cxx_parameters b/include/moc_text_float.cxx_parameters
deleted file mode 100644
index 0dd0788..0000000
--- a/include/moc_text_float.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_text_float.cxx
-/home/lukas/src/lmms/include/text_float.h
diff --git a/include/moc_timeline.cxx_parameters b/include/moc_timeline.cxx_parameters
deleted file mode 100644
index 17db76c..0000000
--- a/include/moc_timeline.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_timeline.cxx
-/home/lukas/src/lmms/include/timeline.h
diff --git a/include/moc_tool_button.cxx_parameters b/include/moc_tool_button.cxx_parameters
deleted file mode 100644
index 1b956e1..0000000
--- a/include/moc_tool_button.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_tool_button.cxx
-/home/lukas/src/lmms/include/tool_button.h
diff --git a/include/moc_tooltip.cxx_parameters b/include/moc_tooltip.cxx_parameters
deleted file mode 100644
index bcea1da..0000000
--- a/include/moc_tooltip.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_tooltip.cxx
-/home/lukas/src/lmms/include/tooltip.h
diff --git a/include/moc_track.cxx_parameters b/include/moc_track.cxx_parameters
deleted file mode 100644
index 1b0d3f2..0000000
--- a/include/moc_track.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_track.cxx
-/home/lukas/src/lmms/include/track.h
diff --git a/include/moc_track_label_button.cxx_parameters b/include/moc_track_label_button.cxx_parameters
deleted file mode 100644
index 6850b55..0000000
--- a/include/moc_track_label_button.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_track_label_button.cxx
-/home/lukas/src/lmms/include/track_label_button.h
diff --git a/include/moc_transformable_auto_model.cxx_parameters b/include/moc_transformable_auto_model.cxx_parameters
deleted file mode 100644
index ab55c25..0000000
--- a/include/moc_transformable_auto_model.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_transformable_auto_model.cxx
-/home/lukas/src/lmms/include/transformable_auto_model.h
diff --git a/include/moc_update_event.cxx_parameters b/include/moc_update_event.cxx_parameters
deleted file mode 100644
index aab6e89..0000000
--- a/include/moc_update_event.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_update_event.cxx
-/home/lukas/src/lmms/include/update_event.h
diff --git a/include/moc_versioninfo.cxx_parameters b/include/moc_versioninfo.cxx_parameters
deleted file mode 100644
index e5ce0ec..0000000
--- a/include/moc_versioninfo.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_versioninfo.cxx
-/home/lukas/src/lmms/include/versioninfo.h
diff --git a/include/moc_visualization_widget.cxx_parameters b/include/moc_visualization_widget.cxx_parameters
deleted file mode 100644
index c05cc79..0000000
--- a/include/moc_visualization_widget.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_visualization_widget.cxx
-/home/lukas/src/lmms/include/visualization_widget.h
diff --git a/include/moc_volume.cxx_parameters b/include/moc_volume.cxx_parameters
deleted file mode 100644
index a6e3dee..0000000
--- a/include/moc_volume.cxx_parameters
+++ /dev/null
@@ -1,12 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--nw
--o
-/home/lukas/src/lmms/include/moc_volume.cxx
-/home/lukas/src/lmms/include/volume.h
diff --git a/include/note.h b/include/note.h
index 924ae7b..b591ee7 100644
--- a/include/note.h
+++ b/include/note.h
@@ -2,9 +2,9 @@
* note.h - declaration of class note which contains all informations about a
* note + definitions of several constants and enums
*
- * Copyright (c) 2004-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -213,21 +213,8 @@ protected:
QDomElement & _parent );
virtual void loadSettings( const QDomElement & _this );
-/* virtual void undoStep( JournalEntry & _je );
- virtual void redoStep( JournalEntry & _je );*/
-
private:
-/* enum Actions
- {
- ChangeKey,
- ChangeVolume,
- ChangePanning,
- ChangeLength,
- ChangePosition
- } ;*/
-
-
// for piano roll editing
bool m_selected;
int m_oldKey;
diff --git a/include/nstate_button.h b/include/nstate_button.h
index b866653..168f4b2 100644
--- a/include/nstate_button.h
+++ b/include/nstate_button.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/panning.h b/include/panning.h
index 60188e3..00a6641 100644
--- a/include/panning.h
+++ b/include/panning.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/panning_constants.h b/include/panning_constants.h
index 7bb58c7..d510587 100644
--- a/include/panning_constants.h
+++ b/include/panning_constants.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/pattern.h b/include/pattern.h
deleted file mode 100644
index c3985ff..0000000
--- a/include/pattern.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * pattern.h - declaration of class pattern, which contains all informations
- * about a pattern
- *
- * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-#ifndef PATTERN_H
-#define PATTERN_H
-
-#include <QtCore/QVector>
-#include <QtGui/QWidget>
-#include <QtGui/QDialog>
-#include <QtCore/QThread>
-#include <QtGui/QPixmap>
-
-
-#include "note.h"
-#include "track.h"
-
-
-class QAction;
-class QProgressBar;
-class QPushButton;
-
-class InstrumentTrack;
-class SampleBuffer;
-
-
-
-class EXPORT pattern : public trackContentObject
-{
- Q_OBJECT
-public:
- enum PatternTypes
- {
- BeatPattern,
- MelodyPattern
- } ;
-
- pattern( InstrumentTrack * _instrument_track );
- pattern( const pattern & _pat_to_copy );
- virtual ~pattern();
-
- void init();
-
-
- virtual MidiTime length() const;
- MidiTime beatPatternLength() const;
-
- // note management
- note * addNote( const note & _new_note, const bool _quant_pos = true );
-
- void removeNote( const note * _note_to_del );
-
- note * noteAtStep( int _step );
-
- note * rearrangeNote( const note * _note_to_proc,
- const bool _quant_pos = true );
- void rearrangeAllNotes();
- void clearNotes();
-
- inline const NoteVector & notes() const
- {
- return m_notes;
- }
-
- void setStep( int _step, bool _enabled );
-
- // pattern-type stuff
- inline PatternTypes type() const
- {
- return m_patternType;
- }
- void setType( PatternTypes _new_pattern_type );
- void checkType();
-
-
- // settings-management
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
- inline virtual QString nodeName() const
- {
- return "pattern";
- }
-
- inline InstrumentTrack * instrumentTrack() const
- {
- return m_instrumentTrack;
- }
-
- bool empty();
-
-
- virtual trackContentObjectView * createView( trackView * _tv );
-
-
- using Model::dataChanged;
-
-
-protected:
- void ensureBeatNotes();
- void updateBBTrack();
-
-
-protected slots:
- void addSteps();
- void removeSteps();
- void clear();
- void changeTimeSignature();
-
-
-private:
- InstrumentTrack * m_instrumentTrack;
-
- PatternTypes m_patternType;
-
- // data-stuff
- NoteVector m_notes;
- int m_steps;
-
- friend class patternView;
- friend class bbEditor;
-
-} ;
-
-
-
-class patternView : public trackContentObjectView
-{
- Q_OBJECT
-public:
- patternView( pattern * _pattern, trackView * _parent );
- virtual ~patternView();
-
-
-public slots:
- virtual void update();
-
-
-protected slots:
- void openInPianoRoll();
-
- void resetName();
- void changeName();
-
-
-protected:
- virtual void constructContextMenu( QMenu * );
- virtual void mouseDoubleClickEvent( QMouseEvent * _me );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void resizeEvent( QResizeEvent * _re )
- {
- m_needsUpdate = true;
- trackContentObjectView::resizeEvent( _re );
- }
- virtual void wheelEvent( QWheelEvent * _we );
-
-
-private:
- static QPixmap * s_stepBtnOn;
- static QPixmap * s_stepBtnOverlay;
- static QPixmap * s_stepBtnOff;
- static QPixmap * s_stepBtnOffLight;
-
- pattern * m_pat;
- QPixmap m_paintPixmap;
- bool m_needsUpdate;
-
-} ;
-
-
-
-#endif
diff --git a/include/pixmap_button.h b/include/pixmap_button.h
index d15c4b9..c2a8245 100644
--- a/include/pixmap_button.h
+++ b/include/pixmap_button.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/plugin_browser.h b/include/plugin_browser.h
index b0473b7..00fd8ab 100644
--- a/include/plugin_browser.h
+++ b/include/plugin_browser.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,30 +35,40 @@
class trackContainer;
-class pluginBrowser : public SideBarWidget
+class PluginBrowser : public SideBarWidget
{
Q_OBJECT
public:
- pluginBrowser( QWidget * _parent );
- virtual ~pluginBrowser();
+ PluginBrowser( QWidget * _parent );
+ virtual ~PluginBrowser();
private:
- Plugin::DescriptorList m_pluginDescriptors;
-
QWidget * m_view;
+};
+
-} ;
+
+
+class PluginDescList : public QWidget
+{
+ Q_OBJECT
+public:
+ PluginDescList(QWidget* parent);
+
+private:
+ Plugin::DescriptorList m_pluginDescriptors;
+};
-class pluginDescWidget : public QWidget
+class PluginDescWidget : public QWidget
{
Q_OBJECT
public:
- pluginDescWidget( const Plugin::Descriptor & _pd, QWidget * _parent );
- virtual ~pluginDescWidget();
+ PluginDescWidget( const Plugin::Descriptor & _pd, QWidget * _parent );
+ virtual ~PluginDescWidget();
protected:
@@ -81,7 +91,7 @@ private:
bool m_mouseOver;
int m_targetHeight;
-} ;
+};
#endif
diff --git a/include/project_notes.h b/include/project_notes.h
index 8765070..3ee087f 100644
--- a/include/project_notes.h
+++ b/include/project_notes.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2007 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/project_version.h b/include/project_version.h
index 575d1a6..37fac5b 100644
--- a/include/project_version.h
+++ b/include/project_version.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/rename_dialog.h b/include/rename_dialog.h
index 0cc78fe..ee9a13d 100644
--- a/include/rename_dialog.h
+++ b/include/rename_dialog.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2005 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/rubberband.h b/include/rubberband.h
index 2e4d303..72f3908 100644
--- a/include/rubberband.h
+++ b/include/rubberband.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/setup_dialog.h b/include/setup_dialog.h
index 53c2be0..049313e 100644
--- a/include/setup_dialog.h
+++ b/include/setup_dialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/shared_object.h b/include/shared_object.h
index a0d4615..66e7364 100644
--- a/include/shared_object.h
+++ b/include/shared_object.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/song.h b/include/song.h
index dc58a8d..173d5d0 100644
--- a/include/song.h
+++ b/include/song.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,7 +35,7 @@
#include "VstSyncController.h"
class AutomationTrack;
-class pattern;
+class Pattern;
class timeLine;
@@ -259,7 +259,7 @@ public slots:
void playAndRecord();
void playTrack( track * _trackToPlay );
void playBB();
- void playPattern( pattern * _patternToPlay, bool _loop = true );
+ void playPattern( Pattern* patternToPlay, bool _loop = true );
void togglePause();
void stop();
@@ -344,7 +344,7 @@ private:
tact_t m_length;
track * m_trackToPlay;
- pattern * m_patternToPlay;
+ Pattern* m_patternToPlay;
bool m_loopPattern;
double m_elapsedMilliSeconds;
diff --git a/include/string_pair_drag.h b/include/string_pair_drag.h
index 46b546a..a5160b9 100644
--- a/include/string_pair_drag.h
+++ b/include/string_pair_drag.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2007 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/tab_bar.h b/include/tab_bar.h
index dd60410..22d1da7 100644
--- a/include/tab_bar.h
+++ b/include/tab_bar.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/tab_button.h b/include/tab_button.h
index 87c0aed..a761f8f 100644
--- a/include/tab_button.h
+++ b/include/tab_button.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2007 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/tab_widget.h b/include/tab_widget.h
index 40d7abf..50e71fe 100644
--- a/include/tab_widget.h
+++ b/include/tab_widget.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -66,7 +66,7 @@ private:
widgetStack m_widgets;
int m_activeTab;
QString m_caption;
-
+ quint8 m_tabheight;
} ;
#endif
diff --git a/include/templates.h b/include/templates.h
index 3c6a917..3d4eb94 100644
--- a/include/templates.h
+++ b/include/templates.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/text_float.h b/include/text_float.h
index b631ca8..ca54507 100644
--- a/include/text_float.h
+++ b/include/text_float.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*/
-#ifndef _TEXT_FLOAT
-#define _TEXT_FLOAT
+#ifndef TEXT_FLOAT_H
+#define TEXT_FLOAT_H
#include <QtGui/QWidget>
#include <QtGui/QPixmap>
@@ -34,6 +34,7 @@
class EXPORT textFloat : public QWidget
{
+ Q_OBJECT
public:
textFloat();
virtual ~textFloat()
@@ -76,7 +77,6 @@ private:
QString m_text;
QPixmap m_pixmap;
-} ;
-
+};
#endif
diff --git a/include/timeline.h b/include/timeline.h
index ff46618..78399e0 100644
--- a/include/timeline.h
+++ b/include/timeline.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -149,7 +149,8 @@ protected:
private:
static QPixmap * s_timeLinePixmap;
static QPixmap * s_posMarkerPixmap;
- static QPixmap * s_loopPointPixmap;
+ static QPixmap * s_loopPointBeginPixmap;
+ static QPixmap * s_loopPointEndPixmap;
static QPixmap * s_loopPointDisabledPixmap;
AutoScrollStates m_autoScroll;
diff --git a/include/tool_button.h b/include/tool_button.h
index 3a908f9..03f6de0 100644
--- a/include/tool_button.h
+++ b/include/tool_button.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/tooltip.h b/include/tooltip.h
index b889381..caa0973 100644
--- a/include/tooltip.h
+++ b/include/tooltip.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/track.h b/include/track.h
index b5a4b3e..404873a 100644
--- a/include/track.h
+++ b/include/track.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -29,6 +29,7 @@
#include <QtCore/QVector>
#include <QtCore/QList>
#include <QtGui/QWidget>
+#include <QColor>
#include "lmms_basics.h"
#include "MidiTime.h"
@@ -129,11 +130,6 @@ public slots:
void toggleMute();
-protected:
- virtual void undoStep( JournalEntry & _je );
- virtual void redoStep( JournalEntry & _je );
-
-
signals:
void lengthChanged();
void positionChanged();
@@ -167,6 +163,11 @@ private:
class trackContentObjectView : public selectableObject, public ModelView
{
Q_OBJECT
+
+// theming qproperties
+ Q_PROPERTY( QColor fgColor READ fgColor WRITE setFgColor )
+ Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor )
+
public:
trackContentObjectView( trackContentObject * _tco, trackView * _tv );
virtual ~trackContentObjectView();
@@ -177,7 +178,11 @@ public:
{
return m_tco;
}
-
+// qproperty access func
+ QColor fgColor() const;
+ QColor textColor() const;
+ void setFgColor( const QColor & _c );
+ void setTextColor( const QColor & _c );
public slots:
virtual bool close();
@@ -232,6 +237,9 @@ private:
MidiTime m_oldTime;// used for undo/redo while mouse-button is pressed
+// qproperty fields
+ QColor m_fgColor;
+ QColor m_textColor;
} ;
@@ -241,6 +249,11 @@ private:
class trackContentWidget : public QWidget, public JournallingObject
{
Q_OBJECT
+
+ // qproperties for track background gradients
+ Q_PROPERTY( QBrush darkerColor READ darkerColor WRITE setDarkerColor )
+ Q_PROPERTY( QBrush lighterColor READ lighterColor WRITE setLighterColor )
+
public:
trackContentWidget( trackView * _parent );
virtual ~trackContentWidget();
@@ -260,6 +273,14 @@ public:
MidiTime endPosition( const MidiTime & _pos_start );
+ // qproperty access methods
+
+ QBrush darkerColor() const;
+ QBrush lighterColor() const;
+
+ void setDarkerColor( const QBrush & _c );
+ void setLighterColor( const QBrush & _c );
+
public slots:
void update();
void changePosition( const MidiTime & _new_pos = MidiTime( -1 ) );
@@ -288,17 +309,8 @@ protected:
Q_UNUSED(element)
}
- virtual void undoStep( JournalEntry & _je );
- virtual void redoStep( JournalEntry & _je );
-
private:
- enum Actions
- {
- AddTrackContentObject,
- RemoveTrackContentObject
- } ;
-
track * getTrack();
MidiTime getPosition( int _mouse_x );
@@ -309,6 +321,9 @@ private:
QPixmap m_background;
+ // qproperty fields
+ QBrush m_darkerColor;
+ QBrush m_lighterColor;
} ;
@@ -332,7 +347,9 @@ private slots:
void cloneTrack();
void removeTrack();
void updateMenu();
-
+ void recordingOn();
+ void recordingOff();
+ void clearTrack();
private:
static QPixmap * s_grip;
@@ -415,6 +432,7 @@ public:
trackContentObject * addTCO( trackContentObject * _tco );
void removeTCO( trackContentObject * _tco );
// -------------------------------------------------------
+ void deleteTCOs();
int numOfTCOs();
trackContentObject * getTCO( int _tco_num );
@@ -550,8 +568,6 @@ public slots:
protected:
virtual void modelChanged();
- virtual void undoStep( JournalEntry & _je );
- virtual void redoStep( JournalEntry & _je );
virtual void saveSettings( QDomDocument& doc, QDomElement& element )
{
diff --git a/include/track_label_button.h b/include/track_label_button.h
index 5638cf5..c99df88 100644
--- a/include/track_label_button.h
+++ b/include/track_label_button.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/transformable_auto_model.h b/include/transformable_auto_model.h
index 85a64a7..d03aa13 100644
--- a/include/transformable_auto_model.h
+++ b/include/transformable_auto_model.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/update_event.h b/include/update_event.h
index fd2deff..03451d5 100644
--- a/include/update_event.h
+++ b/include/update_event.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/include/visualization_widget.h b/include/visualization_widget.h
index 8b8c3fd..f40b3b5 100644
--- a/include/visualization_widget.h
+++ b/include/visualization_widget.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of"the GNU General Public
diff --git a/include/volume.h b/include/volume.h
index 383dc24..424227f 100644
--- a/include/volume.h
+++ b/include/volume.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/lmms.rc.in b/lmms.rc.in
index a3ea7e6..23445a4 100644
--- a/lmms.rc.in
+++ b/lmms.rc.in
@@ -2,7 +2,7 @@ lmmsicon ICON data/lmms.ico
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,3,0
+ FILEVERSION 1,0,93,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
diff --git a/lmms.spec.in b/lmms.spec.in
index 15acdc8..ac80b2c 100644
--- a/lmms.spec.in
+++ b/lmms.spec.in
@@ -13,7 +13,7 @@
%define with_sf 1%{nil}
# Build by setting these defines on the command line, for example:
-# rpmbuild --define 'disttag .EL' --define 'repotag .fc6'
+# rpmbuild --define 'disttag .EL' --define 'repotag .fc6'
%{!?desktop_vendor: %{expand: %%define desktop_vendor rpmfarm}}
# This can be changed at build time:
# rpmbuild --define 'desktop_vendor RPMfarm'
@@ -26,11 +26,11 @@ Release: %{release}
Summary: powerful sequencer-, synthesizer- and sample-studio for Linux
Summary(de): Leistungsfaehiges Sequenzer-, Synthesizer- und Sample-Studio fuer Linux
License: GPL
-URL: http://lmms.sourceforge.net/
+URL: http://lmms.io/
Group: Applications/Multimedia
Provides: lmms = %{version}-%{release}
BuildRequires: gcc gcc-c++ libstdc++-devel autoconf automake libtool make
-BuildRequires: alsa-lib-devel
+BuildRequires: alsa-lib-devel
BuildRequires: qt-devel > 3.0
# ------------- BuildRequires:
%if %{with_vorbis}
@@ -40,7 +40,7 @@ BuildRequires: libvorbis libvorbis-devel
BuildRequires: SDL SDL-devel SDL_sound
%endif
%if %{with_sr}
-BuildRequires: libsamplerate libsamplerate-devel
+BuildRequires: libsamplerate libsamplerate-devel
%endif
%if %{with_sf}
BuildRequires: libsndfile libsndfile-devel
@@ -57,7 +57,7 @@ Requires: qt >= 3.0 alsa-lib
Requires: libsamplerate
%endif
%if %{with_sf}
-Requires: libsndfile
+Requires: libsndfile
%endif
%if %{with_jack}
Requires: jack-audio-connection-kit
@@ -116,13 +116,13 @@ Group: Applications/Multimedia
Provides: lmms-data = %{version}-%{release}
%description data
-This package contains platform-independent data and resources for Linux
-MultiMedia Studio (LMMS), e.g. samples, presets and demo-projects.
+This package contains platform-independent data and resources for LMMS, e.g.
+samples, presets and demo-projects.
%description data -l de
-Dieses Paket beinhaltet plattform-unabhaengige Daten und Resourcen fuer Linux
-MultiMedia Studio (LMMS), wie z.B. Samples, Presets und Demo-Projekte.
+Dieses Paket beinhaltet plattform-unabhaengige Daten und Resourcen fuer LMMS,
+wie z.B. Samples, Presets und Demo-Projekte.
%prep
@@ -156,7 +156,7 @@ MultiMedia Studio (LMMS), wie z.B. Samples, Presets und Demo-Projekte.
# Create a desktop menu entry
%{__cat} > %{name}.desktop << EOF
[Desktop Entry]
-Name=Linux MultiMedia Studio
+Name=LMMS
Comment=Powerful sequencer-, synthesizer- and sample-studio for Linux
Exec=lmms
Icon=%{_datadir}/%{name}/themes/default/icon.png
diff --git a/plugins/Amplifier/Amplifier.cpp b/plugins/Amplifier/Amplifier.cpp
index 380fde0..e26caec 100644
--- a/plugins/Amplifier/Amplifier.cpp
+++ b/plugins/Amplifier/Amplifier.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -77,30 +77,30 @@ bool AmplifierEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames )
for( fpp_t f = 0; f < frames; ++f )
{
// qDebug( "offset %d, value %f", f, m_ampControls.m_volumeModel.value( f ) );
-
+ outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
+
sample_t s[2] = { buf[f][0], buf[f][1] };
// convert vol/pan values to left/right values
- const float left1 = m_ampControls.m_volumeModel.value( f ) *
- ( m_ampControls.m_panModel.value( f ) <= 0
+ const float left1 = m_ampControls.m_volumeModel.value() *
+ ( m_ampControls.m_panModel.value() <= 0
? 1.0
: 1.0 - m_ampControls.m_panModel.value( f ) / 100.0 );
- const float right1 = m_ampControls.m_volumeModel.value( f ) *
- ( m_ampControls.m_panModel.value( f ) >= 0
+ const float right1 = m_ampControls.m_volumeModel.value() *
+ ( m_ampControls.m_panModel.value() >= 0
? 1.0
- : 1.0 + m_ampControls.m_panModel.value( f ) / 100.0 );
+ : 1.0 + m_ampControls.m_panModel.value() / 100.0 );
// first stage amplification
s[0] *= ( left1 / 100.0 );
s[1] *= ( right1 / 100.0 );
// second stage amplification
- s[0] *= ( m_ampControls.m_leftModel.value( f ) / 100.0 );
- s[1] *= ( m_ampControls.m_rightModel.value( f ) / 100.0 );
+ s[0] *= ( m_ampControls.m_leftModel.value() / 100.0 );
+ s[1] *= ( m_ampControls.m_rightModel.value() / 100.0 );
buf[f][0] = d * buf[f][0] + w * s[0];
buf[f][1] = d * buf[f][1] + w * s[1];
- outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
}
checkGate( outSum / frames );
diff --git a/plugins/Amplifier/Amplifier.h b/plugins/Amplifier/Amplifier.h
index e9a78e9..07fa90b 100644
--- a/plugins/Amplifier/Amplifier.h
+++ b/plugins/Amplifier/Amplifier.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/Amplifier/AmplifierControlDialog.cpp b/plugins/Amplifier/AmplifierControlDialog.cpp
index 7526017..861116e 100644
--- a/plugins/Amplifier/AmplifierControlDialog.cpp
+++ b/plugins/Amplifier/AmplifierControlDialog.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -67,3 +67,5 @@ AmplifierControlDialog::AmplifierControlDialog( AmplifierControls* controls ) :
rightKnob->setLabel( tr( "RIGHT" ) );
rightKnob->setHintText( tr( "Right gain:" ) + " ", "%" );
}
+
+#include "moc_AmplifierControlDialog.cxx"
diff --git a/plugins/Amplifier/AmplifierControlDialog.h b/plugins/Amplifier/AmplifierControlDialog.h
index 41409c6..f9ee9e6 100644
--- a/plugins/Amplifier/AmplifierControlDialog.h
+++ b/plugins/Amplifier/AmplifierControlDialog.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -34,6 +34,7 @@ class AmplifierControls;
class AmplifierControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
AmplifierControlDialog( AmplifierControls* controls );
virtual ~AmplifierControlDialog()
diff --git a/plugins/Amplifier/AmplifierControls.cpp b/plugins/Amplifier/AmplifierControls.cpp
index f06876e..39e8454 100644
--- a/plugins/Amplifier/AmplifierControls.cpp
+++ b/plugins/Amplifier/AmplifierControls.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -40,10 +40,10 @@ AmplifierControls::AmplifierControls( AmplifierEffect* effect ) :
m_leftModel( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Left gain" ) ),
m_rightModel( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Right gain" ) )
{
- connect( &m_volumeModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) );
+/* connect( &m_volumeModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) );
connect( &m_panModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) );
connect( &m_leftModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) );
- connect( &m_rightModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) );
+ connect( &m_rightModel, SIGNAL( dataChanged() ), this, SLOT( changeControl() ) );*/
}
@@ -51,7 +51,7 @@ AmplifierControls::AmplifierControls( AmplifierEffect* effect ) :
void AmplifierControls::changeControl()
{
- engine::getSong()->setModified();
+// engine::getSong()->setModified();
}
diff --git a/plugins/Amplifier/AmplifierControls.h b/plugins/Amplifier/AmplifierControls.h
index 2640c8a..d1b9865 100644
--- a/plugins/Amplifier/AmplifierControls.h
+++ b/plugins/Amplifier/AmplifierControls.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/Amplifier/CMakeLists.txt b/plugins/Amplifier/CMakeLists.txt
index 8d9ac96..06ed116 100644
--- a/plugins/Amplifier/CMakeLists.txt
+++ b/plugins/Amplifier/CMakeLists.txt
@@ -1,3 +1,3 @@
INCLUDE(BuildPlugin)
-BUILD_PLUGIN(amplifier Amplifier.cpp AmplifierControls.cpp AmplifierControlDialog.cpp MOCFILES AmplifierControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(amplifier Amplifier.cpp AmplifierControls.cpp AmplifierControlDialog.cpp MOCFILES AmplifierControls.h AmplifierControlDialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/Amplifier/moc_AmplifierControls.cxx_parameters b/plugins/Amplifier/moc_AmplifierControls.cxx_parameters
deleted file mode 100644
index 565ea1f..0000000
--- a/plugins/Amplifier/moc_AmplifierControls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/Amplifier
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=amplifier
--o
-/home/lukas/src/lmms/plugins/Amplifier/moc_AmplifierControls.cxx
-/home/lukas/src/lmms/plugins/Amplifier/AmplifierControls.h
diff --git a/plugins/BassBooster/BassBooster.cpp b/plugins/BassBooster/BassBooster.cpp
index 9e20508..e502241 100644
--- a/plugins/BassBooster/BassBooster.cpp
+++ b/plugins/BassBooster/BassBooster.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -49,9 +49,13 @@ Plugin::Descriptor PLUGIN_EXPORT bassbooster_plugin_descriptor =
BassBoosterEffect::BassBoosterEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ) :
Effect( &bassbooster_plugin_descriptor, parent, key ),
+ m_frequencyChangeNeeded( false ),
m_bbFX( DspEffectLibrary::FastBassBoost( 70.0f, 1.0f, 2.8f ) ),
m_bbControls( this )
{
+ changeFrequency();
+ changeGain();
+ changeRatio();
}
@@ -70,19 +74,27 @@ bool BassBoosterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
{
return( false );
}
+ // check out changed controls
+ if( m_frequencyChangeNeeded || m_bbControls.m_freqModel.isValueChanged() )
+ {
+ changeFrequency();
+ m_frequencyChangeNeeded = false;
+ }
+ if( m_bbControls.m_gainModel.isValueChanged() ) { changeGain(); }
+ if( m_bbControls.m_ratioModel.isValueChanged() ) { changeRatio(); }
double outSum = 0.0;
const float d = dryLevel();
const float w = wetLevel();
for( fpp_t f = 0; f < frames; ++f )
{
+ outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
+
sample_t s[2] = { buf[f][0], buf[f][1] };
m_bbFX.nextSample( s[0], s[1] );
buf[f][0] = d * buf[f][0] + w * s[0];
buf[f][1] = d * buf[f][1] + w * s[1];
-
- outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
}
checkGate( outSum / frames );
@@ -91,6 +103,32 @@ bool BassBoosterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
}
+inline void BassBoosterEffect::changeFrequency()
+{
+ const sample_t fac = engine::mixer()->processingSampleRate() / 44100.0f;
+
+ m_bbFX.leftFX().setFrequency( m_bbControls.m_freqModel.value() * fac );
+ m_bbFX.rightFX().setFrequency( m_bbControls.m_freqModel.value() * fac );
+}
+
+
+
+
+inline void BassBoosterEffect::changeGain()
+{
+ m_bbFX.leftFX().setGain( m_bbControls.m_gainModel.value() );
+ m_bbFX.rightFX().setGain( m_bbControls.m_gainModel.value() );
+}
+
+
+
+
+inline void BassBoosterEffect::changeRatio()
+{
+ m_bbFX.leftFX().setRatio( m_bbControls.m_ratioModel.value() );
+ m_bbFX.rightFX().setRatio( m_bbControls.m_ratioModel.value() );
+}
+
diff --git a/plugins/BassBooster/BassBooster.h b/plugins/BassBooster/BassBooster.h
index 9a2b5fa..160328e 100644
--- a/plugins/BassBooster/BassBooster.h
+++ b/plugins/BassBooster/BassBooster.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*/
-#ifndef _BASS_BOOSTER_H
-#define _BASS_BOOSTER_H
+#ifndef BASS_BOOSTER_H
+#define BASS_BOOSTER_H
#include "Effect.h"
#include "DspEffectLibrary.h"
@@ -44,6 +44,13 @@ public:
}
+protected:
+ void changeFrequency();
+ void changeGain();
+ void changeRatio();
+
+ bool m_frequencyChangeNeeded;
+
private:
DspEffectLibrary::MonoToStereoAdaptor<DspEffectLibrary::FastBassBoost> m_bbFX;
diff --git a/plugins/BassBooster/BassBoosterControlDialog.cpp b/plugins/BassBooster/BassBoosterControlDialog.cpp
index dbbded1..04f4387 100644
--- a/plugins/BassBooster/BassBoosterControlDialog.cpp
+++ b/plugins/BassBooster/BassBoosterControlDialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -67,4 +67,4 @@ BassBoosterControlDialog::BassBoosterControlDialog( BassBoosterControls* control
setLayout( tl );
}
-
+#include "moc_BassBoosterControlDialog.cxx"
diff --git a/plugins/BassBooster/BassBoosterControlDialog.h b/plugins/BassBooster/BassBoosterControlDialog.h
index 6f61d04..218ec7c 100644
--- a/plugins/BassBooster/BassBoosterControlDialog.h
+++ b/plugins/BassBooster/BassBoosterControlDialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -33,6 +33,7 @@ class BassBoosterControls;
class BassBoosterControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
BassBoosterControlDialog( BassBoosterControls* controls );
virtual ~BassBoosterControlDialog()
diff --git a/plugins/BassBooster/BassBoosterControls.cpp b/plugins/BassBooster/BassBoosterControls.cpp
index 321d6dd..ce03e7d 100644
--- a/plugins/BassBooster/BassBoosterControls.cpp
+++ b/plugins/BassBooster/BassBoosterControls.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -37,48 +37,17 @@ BassBoosterControls::BassBoosterControls( BassBoosterEffect* effect ) :
m_gainModel( 1.0f, 0.1f, 5.0f, 0.05f, this, tr( "Gain" ) ),
m_ratioModel( 2.0f, 0.1f, 10.0f, 0.1f, this, tr( "Ratio" ) )
{
- connect( &m_freqModel, SIGNAL( dataChanged() ), this, SLOT( changeFrequency() ) );
- connect( &m_gainModel, SIGNAL( dataChanged() ), this, SLOT( changeGain() ) );
- connect( &m_ratioModel, SIGNAL( dataChanged() ), this, SLOT( changeRatio() ) );
connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeFrequency() ) );
-
- changeFrequency();
- changeGain();
- changeRatio();
}
-
-
void BassBoosterControls::changeFrequency()
{
- const sample_t fac = engine::mixer()->processingSampleRate() / 44100.0f;
-
- m_effect->m_bbFX.leftFX().setFrequency( m_freqModel.value() * fac );
- m_effect->m_bbFX.rightFX().setFrequency( m_freqModel.value() * fac );
+ m_effect->m_frequencyChangeNeeded = true;
}
-
-void BassBoosterControls::changeGain()
-{
- m_effect->m_bbFX.leftFX().setGain( m_gainModel.value() );
- m_effect->m_bbFX.rightFX().setGain( m_gainModel.value() );
-}
-
-
-
-
-void BassBoosterControls::changeRatio()
-{
- m_effect->m_bbFX.leftFX().setRatio( m_ratioModel.value() );
- m_effect->m_bbFX.rightFX().setRatio( m_ratioModel.value() );
-}
-
-
-
-
void BassBoosterControls::loadSettings( const QDomElement& _this )
{
m_freqModel.loadSettings( _this, "freq" );
diff --git a/plugins/BassBooster/BassBoosterControls.h b/plugins/BassBooster/BassBoosterControls.h
index 393223e..5df888b 100644
--- a/plugins/BassBooster/BassBoosterControls.h
+++ b/plugins/BassBooster/BassBoosterControls.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,8 +22,8 @@
*
*/
-#ifndef _BASSBOOSTER_CONTROLS_H
-#define _BASSBOOSTER_CONTROLS_H
+#ifndef BASSBOOSTER_CONTROLS_H
+#define BASSBOOSTER_CONTROLS_H
#include "EffectControls.h"
#include "BassBoosterControlDialog.h"
@@ -62,9 +62,6 @@ public:
private slots:
void changeFrequency();
- void changeGain();
- void changeRatio();
-
private:
BassBoosterEffect* m_effect;
@@ -73,7 +70,7 @@ private:
FloatModel m_ratioModel;
friend class BassBoosterControlDialog;
-
+ friend class BassBoosterEffect;
} ;
#endif
diff --git a/plugins/BassBooster/CMakeLists.txt b/plugins/BassBooster/CMakeLists.txt
index 426078c..2f07032 100644
--- a/plugins/BassBooster/CMakeLists.txt
+++ b/plugins/BassBooster/CMakeLists.txt
@@ -1,3 +1,3 @@
INCLUDE(BuildPlugin)
-BUILD_PLUGIN(bassbooster BassBooster.cpp BassBoosterControls.cpp BassBoosterControlDialog.cpp MOCFILES BassBoosterControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(bassbooster BassBooster.cpp BassBoosterControls.cpp BassBoosterControlDialog.cpp MOCFILES BassBoosterControls.h BassBoosterControlDialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/BassBooster/moc_BassBoosterControls.cxx_parameters b/plugins/BassBooster/moc_BassBoosterControls.cxx_parameters
deleted file mode 100644
index 515b910..0000000
--- a/plugins/BassBooster/moc_BassBoosterControls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/BassBooster
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=bassbooster
--o
-/home/lukas/src/lmms/plugins/BassBooster/moc_BassBoosterControls.cxx
-/home/lukas/src/lmms/plugins/BassBooster/BassBoosterControls.h
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index 075c94f..1ba5867 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -2,6 +2,10 @@ ADD_SUBDIRECTORY(Amplifier)
ADD_SUBDIRECTORY(audio_file_processor)
ADD_SUBDIRECTORY(BassBooster)
ADD_SUBDIRECTORY(bit_invader)
+ADD_SUBDIRECTORY(carlabase)
+ADD_SUBDIRECTORY(carlapatchbay)
+ADD_SUBDIRECTORY(carlarack)
+ADD_SUBDIRECTORY(delay)
ADD_SUBDIRECTORY(DualFilter)
ADD_SUBDIRECTORY(dynamics_processor)
ADD_SUBDIRECTORY(flp_import)
@@ -11,13 +15,17 @@ ADD_SUBDIRECTORY(ladspa_browser)
ADD_SUBDIRECTORY(LadspaEffect)
ADD_SUBDIRECTORY(lb302)
#ADD_SUBDIRECTORY(lb303)
-ADD_SUBDIRECTORY(midi_import)
+ADD_SUBDIRECTORY(MidiImport)
+ADD_SUBDIRECTORY(monstro)
+ADD_SUBDIRECTORY(nes)
ADD_SUBDIRECTORY(opl2)
ADD_SUBDIRECTORY(organic)
ADD_SUBDIRECTORY(papu)
ADD_SUBDIRECTORY(patman)
ADD_SUBDIRECTORY(peak_controller_effect)
-ADD_SUBDIRECTORY(sf2_player)
+IF(NOT LMMS_BUILD_APPLE)
+ ADD_SUBDIRECTORY(sf2_player)
+ENDIF()
ADD_SUBDIRECTORY(sfxr)
ADD_SUBDIRECTORY(sid)
ADD_SUBDIRECTORY(SpectrumAnalyzer)
@@ -28,6 +36,7 @@ ADD_SUBDIRECTORY(triple_oscillator)
ADD_SUBDIRECTORY(vestige)
ADD_SUBDIRECTORY(vst_base)
ADD_SUBDIRECTORY(VstEffect)
+ADD_SUBDIRECTORY(watsyn)
ADD_SUBDIRECTORY(waveshaper)
ADD_SUBDIRECTORY(vibed)
ADD_SUBDIRECTORY(zynaddsubfx)
diff --git a/plugins/DualFilter/CMakeLists.txt b/plugins/DualFilter/CMakeLists.txt
index f6c964c..748cbcd 100644
--- a/plugins/DualFilter/CMakeLists.txt
+++ b/plugins/DualFilter/CMakeLists.txt
@@ -1,3 +1,3 @@
INCLUDE(BuildPlugin)
-BUILD_PLUGIN(dualfilter DualFilter.cpp DualFilterControls.cpp DualFilterControlDialog.cpp MOCFILES DualFilterControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(dualfilter DualFilter.cpp DualFilterControls.cpp DualFilterControlDialog.cpp MOCFILES DualFilterControls.h DualFilterControlDialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/DualFilter/DualFilter.cpp b/plugins/DualFilter/DualFilter.cpp
index de6932a..9e42e97 100644
--- a/plugins/DualFilter/DualFilter.cpp
+++ b/plugins/DualFilter/DualFilter.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -55,7 +55,7 @@ DualFilterEffect::DualFilterEffect( Model* parent, const Descriptor::SubPluginFe
{
m_filter1 = new basicFilters<2>( engine::mixer()->processingSampleRate() );
m_filter2 = new basicFilters<2>( engine::mixer()->processingSampleRate() );
-
+
// ensure filters get updated
m_filter1changed = true;
m_filter2changed = true;
@@ -84,25 +84,41 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
const float d = dryLevel();
const float w = wetLevel();
- m_filter1->setFilterType( m_dfControls.m_filter1Model.value() );
- m_filter2->setFilterType( m_dfControls.m_filter2Model.value() );
-
+ if( m_dfControls.m_filter1Model.isValueChanged() || m_filter1changed )
+ {
+ m_filter1->setFilterType( m_dfControls.m_filter1Model.value() );
+ m_filter1changed = true;
+ }
+ if( m_dfControls.m_filter2Model.isValueChanged() || m_filter2changed )
+ {
+ m_filter2->setFilterType( m_dfControls.m_filter2Model.value() );
+ m_filter2changed = true;
+ }
+
const bool enabled1 = m_dfControls.m_enabled1Model.value();
const bool enabled2 = m_dfControls.m_enabled2Model.value();
- // recalculate only when necessary
- if( enabled1 && m_filter1changed )
+ // recalculate only when necessary: either cut/res is changed, or the changed-flag is set (filter type or samplerate changed)
+ if( ( enabled1 && ( m_dfControls.m_cut1Model.isValueChanged() ||
+ m_dfControls.m_res1Model.isValueChanged() ) ) || m_filter1changed )
{
m_filter1->calcFilterCoeffs( m_dfControls.m_cut1Model.value(), m_dfControls.m_res1Model.value() );
m_filter1changed = false;
}
- if( enabled2 && m_filter2changed )
+ if( ( enabled2 && ( m_dfControls.m_cut2Model.isValueChanged() ||
+ m_dfControls.m_res2Model.isValueChanged() ) ) || m_filter2changed )
{
m_filter2->calcFilterCoeffs( m_dfControls.m_cut2Model.value(), m_dfControls.m_res2Model.value() );
m_filter2changed = false;
}
-
+ // get mix amounts for wet signals of both filters
+ const float mix2 = ( ( m_dfControls.m_mixModel.value() + 1.0f ) * 0.5f );
+ const float mix1 = 1.0f - mix2;
+
+ const float gain1 = m_dfControls.m_gain1Model.value() * 0.01f;
+ const float gain2 = m_dfControls.m_gain2Model.value() * 0.01f;
+
// buffer processing loop
for( fpp_t f = 0; f < frames; ++f )
{
@@ -110,10 +126,6 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
sample_t s1[2] = { buf[f][0], buf[f][1] }; // filter 1
sample_t s2[2] = { buf[f][0], buf[f][1] }; // filter 2
- // get mix amounts for wet signals of both filters
- const float mix1 = 1.0f - ( ( m_dfControls.m_mixModel.value( f ) + 1.0f ) / 2.0f );
- const float mix2 = ( ( m_dfControls.m_mixModel.value( f ) + 1.0f ) / 2.0f );
-
// update filter 1
if( enabled1 )
{
@@ -121,8 +133,8 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
s1[1] = m_filter1->update( s1[1], 1 );
// apply gain
- s1[0] *= ( m_dfControls.m_gain1Model.value( f ) / 100.0f );
- s1[1] *= ( m_dfControls.m_gain1Model.value( f ) / 100.0f );
+ s1[0] *= gain1;
+ s1[1] *= gain1;
// apply mix
s[0] += ( s1[0] * mix1 );
@@ -136,18 +148,18 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
s2[1] = m_filter2->update( s2[1], 1 );
//apply gain
- s2[0] *= ( m_dfControls.m_gain2Model.value( f ) / 100.0f );
- s2[1] *= ( m_dfControls.m_gain2Model.value( f ) / 100.0f );
+ s2[0] *= gain2;
+ s2[1] *= gain2;
// apply mix
s[0] += ( s2[0] * mix2 );
s[1] += ( s2[1] * mix2 );
}
+ outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
// do another mix with dry signal
buf[f][0] = d * buf[f][0] + w * s[0];
buf[f][1] = d * buf[f][1] + w * s[1];
- outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
}
checkGate( outSum / frames );
diff --git a/plugins/DualFilter/DualFilter.h b/plugins/DualFilter/DualFilter.h
index d0bdd2a..c1baae7 100644
--- a/plugins/DualFilter/DualFilter.h
+++ b/plugins/DualFilter/DualFilter.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/DualFilter/DualFilterControlDialog.cpp b/plugins/DualFilter/DualFilterControlDialog.cpp
index ca7c3d3..7f97b4f 100644
--- a/plugins/DualFilter/DualFilterControlDialog.cpp
+++ b/plugins/DualFilter/DualFilterControlDialog.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -84,3 +84,5 @@ DualFilterControlDialog::DualFilterControlDialog( DualFilterControls* controls )
m_filter2ComboBox->setFont( pointSize<8>( m_filter2ComboBox->font() ) );
m_filter2ComboBox->setModel( &controls->m_filter2Model );
}
+
+#include "moc_DualFilterControlDialog.cxx"
diff --git a/plugins/DualFilter/DualFilterControlDialog.h b/plugins/DualFilter/DualFilterControlDialog.h
index 8145a6b..aef0ad4 100644
--- a/plugins/DualFilter/DualFilterControlDialog.h
+++ b/plugins/DualFilter/DualFilterControlDialog.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -34,6 +34,7 @@ class DualFilterControls;
class DualFilterControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
DualFilterControlDialog( DualFilterControls* controls );
virtual ~DualFilterControlDialog()
diff --git a/plugins/DualFilter/DualFilterControls.cpp b/plugins/DualFilter/DualFilterControls.cpp
index 06ead0b..df295c3 100644
--- a/plugins/DualFilter/DualFilterControls.cpp
+++ b/plugins/DualFilter/DualFilterControls.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -39,7 +39,7 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) :
m_enabled1Model( true, this, tr( "Filter 1 enabled" ) ),
m_filter1Model( this, tr( "Filter 1 type" ) ),
- m_cut1Model( 7000.0f, 1.0f, 14000.0f, 1.0f, this, tr( "Cutoff 1 frequency" ) ),
+ m_cut1Model( 7000.0f, 1.0f, 20000.0f, 1.0f, this, tr( "Cutoff 1 frequency" ) ),
m_res1Model( 0.5, basicFilters<0>::minQ(), 10.0, 0.01, this, tr( "Q/Resonance 1" ) ),
m_gain1Model( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Gain 1" ) ),
@@ -47,18 +47,10 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) :
m_enabled2Model( true, this, tr( "Filter 2 enabled" ) ),
m_filter2Model( this, tr( "Filter 2 type" ) ),
- m_cut2Model( 7000.0f, 1.0f, 14000.0f, 1.0f, this, tr( "Cutoff 2 frequency" ) ),
+ m_cut2Model( 7000.0f, 1.0f, 20000.0f, 1.0f, this, tr( "Cutoff 2 frequency" ) ),
m_res2Model( 0.5, basicFilters<0>::minQ(), 10.0, 0.01, this, tr( "Q/Resonance 2" ) ),
m_gain2Model( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Gain 2" ) )
{
- connect( &m_filter1Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter1() ) );
- connect( &m_cut1Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter1() ) );
- connect( &m_res1Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter1() ) );
-
- connect( &m_filter2Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter2() ) );
- connect( &m_cut2Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter2() ) );
- connect( &m_res2Model, SIGNAL( dataChanged() ), this, SLOT( updateFilter2() ) );
-
m_filter1Model.addItem( tr( "LowPass" ), new PixmapLoader( "filter_lp" ) );
m_filter1Model.addItem( tr( "HiPass" ), new PixmapLoader( "filter_hp" ) );
m_filter1Model.addItem( tr( "BandPass csg" ), new PixmapLoader( "filter_bp" ) );
@@ -96,17 +88,6 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) :
-void DualFilterControls::updateFilter1()
-{
- m_effect->m_filter1changed = true;
-}
-
-void DualFilterControls::updateFilter2()
-{
- m_effect->m_filter2changed = true;
-}
-
-
void DualFilterControls::updateFilters()
{
// swap filters to new ones
@@ -118,8 +99,8 @@ void DualFilterControls::updateFilters()
// flag filters as needing recalculation
- updateFilter1();
- updateFilter2();
+ m_effect->m_filter1changed = true;
+ m_effect->m_filter2changed = true;
}
diff --git a/plugins/DualFilter/DualFilterControls.h b/plugins/DualFilter/DualFilterControls.h
index 8f02eb0..65953ba 100644
--- a/plugins/DualFilter/DualFilterControls.h
+++ b/plugins/DualFilter/DualFilterControls.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -62,8 +62,6 @@ public:
private slots:
- void updateFilter1();
- void updateFilter2();
void updateFilters();
private:
diff --git a/plugins/DualFilter/moc_DualFilterControls.cxx_parameters b/plugins/DualFilter/moc_DualFilterControls.cxx_parameters
deleted file mode 100644
index 2477188..0000000
--- a/plugins/DualFilter/moc_DualFilterControls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/DualFilter
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=dualfilter
--o
-/home/lukas/src/lmms/plugins/DualFilter/moc_DualFilterControls.cxx
-/home/lukas/src/lmms/plugins/DualFilter/DualFilterControls.h
diff --git a/plugins/HydrogenImport/HydrogenImport.cpp b/plugins/HydrogenImport/HydrogenImport.cpp
index 1c33d42..81b4e89 100644
--- a/plugins/HydrogenImport/HydrogenImport.cpp
+++ b/plugins/HydrogenImport/HydrogenImport.cpp
@@ -13,7 +13,7 @@
#include "Instrument.h"
#include "InstrumentTrack.h"
#include "note.h"
-#include "pattern.h"
+#include "Pattern.h"
#include "track.h"
#include "bb_track.h"
#include "bb_track_container.h"
@@ -270,7 +270,7 @@ bool HydrogenImport::readSong()
QString instrId = LocalFileMng::readXmlString( noteNode, "instrument", 0,false, false );
int i = pattern_count - 1 + nbb;
pattern_id[sName] = pattern_count - 1;
- pattern *p = dynamic_cast<pattern *>( drum_track[instrId]->getTCO( i ) );
+ Pattern*p = dynamic_cast<Pattern*>( drum_track[instrId]->getTCO( i ) );
note n;
n.setPos( nPosition );
if ( (nPosition + 48) <= nSize )
diff --git a/plugins/LadspaEffect/LadspaControlDialog.cpp b/plugins/LadspaEffect/LadspaControlDialog.cpp
index d217574..efe6272 100644
--- a/plugins/LadspaEffect/LadspaControlDialog.cpp
+++ b/plugins/LadspaEffect/LadspaControlDialog.cpp
@@ -5,7 +5,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/LadspaEffect/LadspaControlDialog.h b/plugins/LadspaEffect/LadspaControlDialog.h
index 204c7ce..87f9689 100644
--- a/plugins/LadspaEffect/LadspaControlDialog.h
+++ b/plugins/LadspaEffect/LadspaControlDialog.h
@@ -5,7 +5,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,8 +24,8 @@
*
*/
-#ifndef _LADSPA_CONTROL_DIALOG_H
-#define _LADSPA_CONTROL_DIALOG_H
+#ifndef LADSPA_CONTROL_DIALOG_H
+#define LADSPA_CONTROL_DIALOG_H
#include "EffectControlDialog.h"
diff --git a/plugins/LadspaEffect/LadspaControls.cpp b/plugins/LadspaEffect/LadspaControls.cpp
index f7b16d5..107fbff 100644
--- a/plugins/LadspaEffect/LadspaControls.cpp
+++ b/plugins/LadspaEffect/LadspaControls.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/LadspaEffect/LadspaControls.h b/plugins/LadspaEffect/LadspaControls.h
index a606f3a..ef9fbdd 100644
--- a/plugins/LadspaEffect/LadspaControls.h
+++ b/plugins/LadspaEffect/LadspaControls.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,8 +22,8 @@
*
*/
-#ifndef _LADSPA_CONTROLS_H
-#define _LADSPA_CONTROLS_H
+#ifndef LADSPA_CONTROLS_H
+#define LADSPA_CONTROLS_H
#include "EffectControls.h"
#include "LadspaControl.h"
diff --git a/plugins/LadspaEffect/LadspaEffect.cpp b/plugins/LadspaEffect/LadspaEffect.cpp
index 2bd082f..3011012 100644
--- a/plugins/LadspaEffect/LadspaEffect.cpp
+++ b/plugins/LadspaEffect/LadspaEffect.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -305,12 +305,12 @@ void LadspaEffect::pluginInstantiation()
// Determine the port's category.
if( manager->isPortAudio( m_key, port ) )
{
- // Nasty manual memory management--was having difficulty
- // with some prepackaged plugins that were segfaulting
- // during cleanup. It was easier to troubleshoot with the
- // memory management all taking place in one file.
+ // Nasty manual memory management--was having difficulty
+ // with some prepackaged plugins that were segfaulting
+ // during cleanup. It was easier to troubleshoot with the
+ // memory management all taking place in one file.
p->buffer =
- new LADSPA_Data[engine::mixer()->framesPerPeriod()];
+ new LADSPA_Data[engine::mixer()->framesPerPeriod()];
if( p->name.toUpper().contains( "IN" ) &&
manager->isPortInput( m_key, port ) )
@@ -430,6 +430,7 @@ void LadspaEffect::pluginInstantiation()
p->value = p->def;
+ p->suggests_logscale = manager->isLogarithmic( m_key, port );
ports.append( p );
diff --git a/plugins/LadspaEffect/LadspaEffect.h b/plugins/LadspaEffect/LadspaEffect.h
index 52adc0f..b5fb3f5 100644
--- a/plugins/LadspaEffect/LadspaEffect.h
+++ b/plugins/LadspaEffect/LadspaEffect.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/LadspaEffect/LadspaSubPluginFeatures.cpp b/plugins/LadspaEffect/LadspaSubPluginFeatures.cpp
index a51a213..3c48470 100644
--- a/plugins/LadspaEffect/LadspaSubPluginFeatures.cpp
+++ b/plugins/LadspaEffect/LadspaSubPluginFeatures.cpp
@@ -6,7 +6,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -158,7 +158,7 @@ void LadspaSubPluginFeatures::listSubPluginKeys(
ladspa_key_t LadspaSubPluginFeatures::subPluginKeyToLadspaKey(
const Key * _key )
{
- QString file = _key->attributes["file"].toLower();
+ QString file = _key->attributes["file"];
return( ladspa_key_t( file.remove( QRegExp( "\\.so$" ) ).
remove( QRegExp( "\\.dll$" ) ) +
#ifdef LMMS_BUILD_WIN32
diff --git a/plugins/LadspaEffect/LadspaSubPluginFeatures.h b/plugins/LadspaEffect/LadspaSubPluginFeatures.h
index 05729e6..88a3baa 100644
--- a/plugins/LadspaEffect/LadspaSubPluginFeatures.h
+++ b/plugins/LadspaEffect/LadspaSubPluginFeatures.h
@@ -6,7 +6,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/LadspaEffect/calf/CMakeLists.txt b/plugins/LadspaEffect/calf/CMakeLists.txt
index db6dea7..d685f53 100644
--- a/plugins/LadspaEffect/calf/CMakeLists.txt
+++ b/plugins/LadspaEffect/calf/CMakeLists.txt
@@ -7,9 +7,9 @@ INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include"
INSTALL(TARGETS calf LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa")
SET_TARGET_PROPERTIES(calf PROPERTIES PREFIX "")
SET(INLINE_FLAGS "")
-IF(NOT LMMS_BUILD_APPLE)
+IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
SET(INLINE_FLAGS "-finline-functions-called-once -finline-limit=80")
-ENDIF(NOT LMMS_BUILD_APPLE)
+ENDIF()
SET_TARGET_PROPERTIES(calf PROPERTIES COMPILE_FLAGS "-O2 -finline-functions ${INLINE_FLAGS}")
IF(LMMS_BUILD_WIN32)
diff --git a/plugins/LadspaEffect/calf/src/audio_fx.cpp b/plugins/LadspaEffect/calf/src/audio_fx.cpp
index a5695be..f42ccc0 100644
--- a/plugins/LadspaEffect/calf/src/audio_fx.cpp
+++ b/plugins/LadspaEffect/calf/src/audio_fx.cpp
@@ -567,6 +567,22 @@ lookahead_limiter::lookahead_limiter() {
asc_coeff = 1.f;
}
+lookahead_limiter::~lookahead_limiter()
+{
+ if( buffer != NULL)
+ {
+ free(buffer);
+ }
+ if( nextpos != NULL)
+ {
+ free(nextpos);
+ }
+ if( nextdelta != NULL)
+ {
+ free(nextdelta);
+ }
+}
+
void lookahead_limiter::activate()
{
is_active = true;
diff --git a/plugins/LadspaEffect/calf/src/calf/audio_fx.h b/plugins/LadspaEffect/calf/src/calf/audio_fx.h
index f718802..1799de9 100644
--- a/plugins/LadspaEffect/calf/src/calf/audio_fx.h
+++ b/plugins/LadspaEffect/calf/src/calf/audio_fx.h
@@ -608,6 +608,7 @@ public:
void reset_asc();
bool get_asc();
lookahead_limiter();
+ ~lookahead_limiter();
void set_multi(bool set);
void process(float &left, float &right, float *multi_buffer);
void set_sample_rate(uint32_t sr);
diff --git a/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h b/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h
index d94ebce..daf7ae2 100644
--- a/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h
+++ b/plugins/LadspaEffect/calf/src/calf/ladspa_wrap.h
@@ -47,6 +47,7 @@ struct ladspa_instance: public plugin_ctl_iface
#endif
ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate);
+ virtual ~ladspa_instance();
virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); }
virtual float get_param_value(int param_no);
virtual void set_param_value(int param_no, float value);
diff --git a/plugins/LadspaEffect/calf/src/calf/modules.h b/plugins/LadspaEffect/calf/src/calf/modules.h
index fb9ba77..8cde47f 100644
--- a/plugins/LadspaEffect/calf/src/calf/modules.h
+++ b/plugins/LadspaEffect/calf/src/calf/modules.h
@@ -263,6 +263,7 @@ class mono_audio_module:
}
public:
mono_audio_module();
+ ~mono_audio_module();
void params_changed();
void activate();
void set_sample_rate(uint32_t sr);
@@ -291,6 +292,7 @@ class stereo_audio_module:
}
public:
stereo_audio_module();
+ ~stereo_audio_module();
void params_changed();
void activate();
void set_sample_rate(uint32_t sr);
diff --git a/plugins/LadspaEffect/calf/src/calf/modules_limit.h b/plugins/LadspaEffect/calf/src/calf/modules_limit.h
index d5d4b9a..850aff8 100644
--- a/plugins/LadspaEffect/calf/src/calf/modules_limit.h
+++ b/plugins/LadspaEffect/calf/src/calf/modules_limit.h
@@ -84,6 +84,7 @@ public:
uint32_t srate;
bool is_active;
multibandlimiter_audio_module();
+ ~multibandlimiter_audio_module();
void activate();
void deactivate();
void params_changed();
diff --git a/plugins/LadspaEffect/calf/src/modules.cpp b/plugins/LadspaEffect/calf/src/modules.cpp
index ba06f02..98b4b8d 100644
--- a/plugins/LadspaEffect/calf/src/modules.cpp
+++ b/plugins/LadspaEffect/calf/src/modules.cpp
@@ -460,6 +460,14 @@ stereo_audio_module::stereo_audio_module() {
meter_outR = 0.f;
}
+stereo_audio_module::~stereo_audio_module()
+{
+ if( buffer != NULL )
+ {
+ free(buffer);
+ }
+}
+
void stereo_audio_module::activate() {
active = true;
}
@@ -686,6 +694,14 @@ mono_audio_module::mono_audio_module() {
meter_outR = 0.f;
}
+mono_audio_module::~mono_audio_module()
+{
+ if( buffer != NULL )
+ {
+ free(buffer);
+ }
+}
+
void mono_audio_module::activate() {
active = true;
}
diff --git a/plugins/LadspaEffect/calf/src/modules_limit.cpp b/plugins/LadspaEffect/calf/src/modules_limit.cpp
index f7fb6fc..3930078 100644
--- a/plugins/LadspaEffect/calf/src/modules_limit.cpp
+++ b/plugins/LadspaEffect/calf/src/modules_limit.cpp
@@ -252,6 +252,14 @@ multibandlimiter_audio_module::multibandlimiter_audio_module()
asc_old = true;
}
+multibandlimiter_audio_module::~multibandlimiter_audio_module()
+{
+ if( buffer != NULL)
+ {
+ free(buffer);
+ }
+}
+
void multibandlimiter_audio_module::activate()
{
is_active = true;
diff --git a/plugins/LadspaEffect/calf/src/plugin.cpp b/plugins/LadspaEffect/calf/src/plugin.cpp
index 7b651de..0cc02a8 100644
--- a/plugins/LadspaEffect/calf/src/plugin.cpp
+++ b/plugins/LadspaEffect/calf/src/plugin.cpp
@@ -54,6 +54,11 @@ ladspa_instance::ladspa_instance(audio_module_iface *_module, ladspa_plugin_meta
module->post_instantiate();
}
+ladspa_instance::~ladspa_instance()
+{
+ delete module;
+}
+
float ladspa_instance::get_param_value(int param_no)
{
// XXXKF hack
diff --git a/plugins/LadspaEffect/caps/SweepVF.cc b/plugins/LadspaEffect/caps/SweepVF.cc
index 95921c2..f97c220 100644
--- a/plugins/LadspaEffect/caps/SweepVF.cc
+++ b/plugins/LadspaEffect/caps/SweepVF.cc
@@ -28,6 +28,8 @@
02111-1307, USA or point your web browser to http://www.gnu.org.
*/
+#include <algorithm>
+
#include "basics.h"
#include "SweepVF.h"
@@ -85,7 +87,7 @@ SweepVFI::one_cycle (int frames)
modulation *= scale * f;
svf.set_f_Q (max (.001, f + modulation), Q);
- int n = min (frames, BLOCK_SIZE);
+ int n = std::min<int> (frames, BLOCK_SIZE);
for (int i = 0; i < n; ++i)
F (d, i, svf.process (s[i] + normal), adding_gain);
@@ -231,7 +233,7 @@ SweepVFII::one_cycle (int frames)
svf.set_f_Q (max (.001, f + modulation1), q);
- int n = min (frames, BLOCK_SIZE);
+ int n = std::min<int> (frames, BLOCK_SIZE);
for (int i = 0; i < n; ++i)
F (d, i, svf.process (s[i] + normal), adding_gain);
@@ -385,7 +387,7 @@ AutoWah::one_cycle (int frames)
m *= scale * .08;
svf.set_f_Q (max (.001, f + m), Q);
- int n = min (frames, BLOCK_SIZE);
+ int n = std::min<int> (frames, BLOCK_SIZE);
for (int i = 0; i < n; ++i)
{
diff --git a/plugins/LadspaEffect/caps/dsp/ToneStack.h b/plugins/LadspaEffect/caps/dsp/ToneStack.h
index ef85d20..4d06008 100644
--- a/plugins/LadspaEffect/caps/dsp/ToneStack.h
+++ b/plugins/LadspaEffect/caps/dsp/ToneStack.h
@@ -69,10 +69,7 @@ class ToneStack
// digital coefficients
double dcoef_a[Order + 1];
double dcoef_b[Order + 1];
- double af[Order + 1];
- double bf[Order + 1];
- double fs;
TDFII<Order> filter;
public:
@@ -209,10 +206,6 @@ class ToneStackLT
// digital coefficients
double *kcoef;
double *vcoef;
- double af [Order + 1];
- double bf [Order + 1];
-
- double fs;
LatFilt<Order> filter;
public:
diff --git a/plugins/LadspaEffect/cmt/src/lofi.cpp b/plugins/LadspaEffect/cmt/src/lofi.cpp
index d4572f9..67be800 100644
--- a/plugins/LadspaEffect/cmt/src/lofi.cpp
+++ b/plugins/LadspaEffect/cmt/src/lofi.cpp
@@ -277,8 +277,6 @@ class LoFi : public CMT_PluginInstance {
BandwidthLimit *bandwidth_l;
BandwidthLimit *bandwidth_r;
- int last_trigger;
-
public:
LoFi(const LADSPA_Descriptor *,
unsigned long s_rate)
diff --git a/plugins/LadspaEffect/cmt/src/pink_full.cpp b/plugins/LadspaEffect/cmt/src/pink_full.cpp
index 1c4de16..59c9290 100644
--- a/plugins/LadspaEffect/cmt/src/pink_full.cpp
+++ b/plugins/LadspaEffect/cmt/src/pink_full.cpp
@@ -49,14 +49,13 @@ namespace pink_full {
Voss-McCartney algorithm described at www.firstpr.com.au/dsp/pink-noise/ */
class Plugin : public CMT_PluginInstance {
private:
- LADSPA_Data sample_rate;
PinkNoise noise_source;
public:
Plugin(const LADSPA_Descriptor *,
unsigned long s_rate) :
- CMT_PluginInstance(n_ports),
- sample_rate(s_rate) {
+ CMT_PluginInstance(n_ports)
+ {
}
~Plugin() {
diff --git a/plugins/LadspaEffect/moc_LadspaControlDialog.cxx_parameters b/plugins/LadspaEffect/moc_LadspaControlDialog.cxx_parameters
deleted file mode 100644
index a74609e..0000000
--- a/plugins/LadspaEffect/moc_LadspaControlDialog.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/LadspaEffect
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=ladspaeffect
--o
-/home/lukas/src/lmms/plugins/LadspaEffect/moc_LadspaControlDialog.cxx
-/home/lukas/src/lmms/plugins/LadspaEffect/LadspaControlDialog.h
diff --git a/plugins/LadspaEffect/moc_LadspaControls.cxx_parameters b/plugins/LadspaEffect/moc_LadspaControls.cxx_parameters
deleted file mode 100644
index 6c108bf..0000000
--- a/plugins/LadspaEffect/moc_LadspaControls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/LadspaEffect
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=ladspaeffect
--o
-/home/lukas/src/lmms/plugins/LadspaEffect/moc_LadspaControls.cxx
-/home/lukas/src/lmms/plugins/LadspaEffect/LadspaControls.h
diff --git a/plugins/LadspaEffect/moc_LadspaEffect.cxx_parameters b/plugins/LadspaEffect/moc_LadspaEffect.cxx_parameters
deleted file mode 100644
index 91658d1..0000000
--- a/plugins/LadspaEffect/moc_LadspaEffect.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/LadspaEffect
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=ladspaeffect
--o
-/home/lukas/src/lmms/plugins/LadspaEffect/moc_LadspaEffect.cxx
-/home/lukas/src/lmms/plugins/LadspaEffect/LadspaEffect.h
diff --git a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c
index 967edf6..a9c764e 100644
--- a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c
+++ b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c
@@ -350,7 +350,7 @@ static void runAddingBodeShifterCV(LADSPA_Handle instance, unsigned long sample_
/* Perform the Hilbert FIR convolution
* (probably FFT would be faster) */
hilb = 0.0f;
- for (i = 0; i <= NZEROS/2; i++) {
+ for (i = 0; i < NZEROS/2; i++) {
hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]);
}
diff --git a/plugins/LadspaEffect/swh/dj_eq_1901.c b/plugins/LadspaEffect/swh/dj_eq_1901.c
index a4baa96..65205c1 100644
--- a/plugins/LadspaEffect/swh/dj_eq_1901.c
+++ b/plugins/LadspaEffect/swh/dj_eq_1901.c
@@ -116,6 +116,8 @@ static void activateDj_eq_mono(LADSPA_Handle instance) {
}
static void cleanupDj_eq_mono(LADSPA_Handle instance) {
+ Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance;
+ free(plugin_data->filters);
free(instance);
}
@@ -283,6 +285,8 @@ static void activateDj_eq(LADSPA_Handle instance) {
}
static void cleanupDj_eq(LADSPA_Handle instance) {
+ Dj_eq *plugin_data = (Dj_eq *)instance;
+ free(plugin_data->filters);
free(instance);
}
diff --git a/plugins/LadspaEffect/swh/fad_delay_1192.c b/plugins/LadspaEffect/swh/fad_delay_1192.c
index 9d4ec77..422e769 100644
--- a/plugins/LadspaEffect/swh/fad_delay_1192.c
+++ b/plugins/LadspaEffect/swh/fad_delay_1192.c
@@ -86,7 +86,6 @@ static void activateFadDelay(LADSPA_Handle instance) {
phase = 0;
last_phase = 0;
last_in = 0.0f;
- sample_rate = sample_rate;
plugin_data->buffer = buffer;
plugin_data->buffer_mask = buffer_mask;
plugin_data->buffer_size = buffer_size;
diff --git a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c
index 8589caf..eecd72e 100644
--- a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c
+++ b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c
@@ -137,6 +137,7 @@ static void cleanupFastLookaheadLimiter(LADSPA_Handle instance) {
#line 188 "fast_lookahead_limiter_1913.xml"
FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance;
free(plugin_data->buffer);
+ free(plugin_data->chunks);
free(instance);
}
diff --git a/plugins/LadspaEffect/swh/gsm/gsm_create.c b/plugins/LadspaEffect/swh/gsm/gsm_create.c
index cadaff6..f99eb91 100644
--- a/plugins/LadspaEffect/swh/gsm/gsm_create.c
+++ b/plugins/LadspaEffect/swh/gsm/gsm_create.c
@@ -4,7 +4,6 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-static char const ident[] = "$Header: /home/cvs/giga/ladspa-swh/gsm/gsm_create.c,v 1.1 2001/06/10 21:36:51 swh Exp $";
#include "config.h"
diff --git a/plugins/LadspaEffect/swh/gsm_1215.c b/plugins/LadspaEffect/swh/gsm_1215.c
index 55c0f26..8cef93b 100644
--- a/plugins/LadspaEffect/swh/gsm_1215.c
+++ b/plugins/LadspaEffect/swh/gsm_1215.c
@@ -224,7 +224,6 @@ static void runGsm(LADSPA_Handle instance, unsigned long sample_count) {
int count = plugin_data->count;
LADSPA_Data * dry = plugin_data->dry;
gsm_signal * dst = plugin_data->dst;
- float fs = plugin_data->fs;
gsm handle = plugin_data->handle;
int resamp = plugin_data->resamp;
float rsf = plugin_data->rsf;
@@ -238,8 +237,6 @@ static void runGsm(LADSPA_Handle instance, unsigned long sample_count) {
int error_rate = f_round(error);
int num_passes = f_round(passes);
- fs = fs; // So gcc doesn't think it's unused
-
for (pos = 0; pos < sample_count; pos++) {
// oversample into buffer down to aprox 8kHz, 13bit
@@ -322,7 +319,6 @@ static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) {
int count = plugin_data->count;
LADSPA_Data * dry = plugin_data->dry;
gsm_signal * dst = plugin_data->dst;
- float fs = plugin_data->fs;
gsm handle = plugin_data->handle;
int resamp = plugin_data->resamp;
float rsf = plugin_data->rsf;
@@ -336,8 +332,6 @@ static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) {
int error_rate = f_round(error);
int num_passes = f_round(passes);
- fs = fs; // So gcc doesn't think it's unused
-
for (pos = 0; pos < sample_count; pos++) {
// oversample into buffer down to aprox 8kHz, 13bit
diff --git a/plugins/LadspaEffect/swh/hermes_filter_1200.c b/plugins/LadspaEffect/swh/hermes_filter_1200.c
index d313d37..bf3bbba 100644
--- a/plugins/LadspaEffect/swh/hermes_filter_1200.c
+++ b/plugins/LadspaEffect/swh/hermes_filter_1200.c
@@ -817,7 +817,6 @@ static void runHermesFilter(LADSPA_Handle instance, unsigned long sample_count)
float lfo2_phase = plugin_data->lfo2_phase;
blo_h_osc * osc1_d = plugin_data->osc1_d;
blo_h_osc * osc2_d = plugin_data->osc2_d;
- blo_h_tables * tables = plugin_data->tables;
sv_filter * xover_b1_data = plugin_data->xover_b1_data;
sv_filter * xover_b2_data = plugin_data->xover_b2_data;
@@ -927,8 +926,6 @@ static void runHermesFilter(LADSPA_Handle instance, unsigned long sample_count)
dela_fb[1] = dela2_fb;
dela_fb[2] = dela3_fb;
- tables = tables; // To shut up gcc
-
for (pos = 0; pos < sample_count; pos++) {
count++; // Count of number of samples processed
@@ -1204,7 +1201,6 @@ static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_c
float lfo2_phase = plugin_data->lfo2_phase;
blo_h_osc * osc1_d = plugin_data->osc1_d;
blo_h_osc * osc2_d = plugin_data->osc2_d;
- blo_h_tables * tables = plugin_data->tables;
sv_filter * xover_b1_data = plugin_data->xover_b1_data;
sv_filter * xover_b2_data = plugin_data->xover_b2_data;
@@ -1314,8 +1310,6 @@ static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_c
dela_fb[1] = dela2_fb;
dela_fb[2] = dela3_fb;
- tables = tables; // To shut up gcc
-
for (pos = 0; pos < sample_count; pos++) {
count++; // Count of number of samples processed
diff --git a/plugins/LadspaEffect/swh/imp_1199.c b/plugins/LadspaEffect/swh/imp_1199.c
index ec1b350..d172a92 100644
--- a/plugins/LadspaEffect/swh/imp_1199.c
+++ b/plugins/LadspaEffect/swh/imp_1199.c
@@ -74,7 +74,11 @@ static fftw_real *real_in, *real_out, *comp_in, *comp_out;
unsigned int fft_length[IMPULSES];
+#ifdef __clang__
+void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out)
+#else
inline void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out)
+#endif
{
fftw_real impulse_time[MAX_FFT_LENGTH];
#ifdef FFTW3
@@ -198,6 +202,11 @@ static void cleanupImp(LADSPA_Handle instance) {
local_free(plugin_data->op);
local_free(plugin_data->overlap);
local_free(plugin_data->opc);
+ unsigned int i;
+ for (i=0; i<IMPULSES; i++) {
+ local_free(plugin_data->impulse_freq[i]);
+ }
+ local_free(plugin_data->impulse_freq);
free(instance);
}
diff --git a/plugins/LadspaEffect/swh/ladspa-util.c b/plugins/LadspaEffect/swh/ladspa-util.c
index 57ce5bf..431ba95 100644
--- a/plugins/LadspaEffect/swh/ladspa-util.c
+++ b/plugins/LadspaEffect/swh/ladspa-util.c
@@ -4,7 +4,7 @@
the stack and crap like that.
*/
-static const float _truncate_half = 0.5f;
+//static const float _truncate_half = 0.5f;
int truncate(float flt) {
int i;
diff --git a/plugins/LadspaEffect/swh/pitch_scale_1193.c b/plugins/LadspaEffect/swh/pitch_scale_1193.c
index ce3f811..88cf24c 100644
--- a/plugins/LadspaEffect/swh/pitch_scale_1193.c
+++ b/plugins/LadspaEffect/swh/pitch_scale_1193.c
@@ -79,7 +79,6 @@ static void activatePitchScale(LADSPA_Handle instance) {
memset(buffers->gAnaFreq, 0, FRAME_LENGTH*sizeof(float));
memset(buffers->gAnaMagn, 0, FRAME_LENGTH*sizeof(float));
buffers->gRover = 0;
- sample_rate = sample_rate;
/* do one run to make sure the plans are set up */
pitch_scale(buffers, 1.0, FRAME_LENGTH, 4, FRAME_LENGTH, sample_rate, buffers->gInFIFO, buffers->gOutFIFO, 0, 0.0f);
diff --git a/plugins/LadspaEffect/swh/ringmod_1188.c b/plugins/LadspaEffect/swh/ringmod_1188.c
index 393ad86..591dc96 100644
--- a/plugins/LadspaEffect/swh/ringmod_1188.c
+++ b/plugins/LadspaEffect/swh/ringmod_1188.c
@@ -207,8 +207,6 @@ static void activateRingmod_1i1o1l(LADSPA_Handle instance) {
static void cleanupRingmod_1i1o1l(LADSPA_Handle instance) {
#line 93 "ringmod_1188.xml"
- Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance;
- plugin_data = plugin_data;
if (--refcount == 0) {
free(sin_tbl);
free(tri_tbl);
diff --git a/plugins/LadspaEffect/swh/step_muxer_1212.c b/plugins/LadspaEffect/swh/step_muxer_1212.c
index 9c27b84..99c4ecf 100644
--- a/plugins/LadspaEffect/swh/step_muxer_1212.c
+++ b/plugins/LadspaEffect/swh/step_muxer_1212.c
@@ -100,7 +100,6 @@ static void activateStepMuxer(LADSPA_Handle instance) {
}
current_ch = 0;
last_clock = 0.0f;
- sample_rate = sample_rate;
plugin_data->ch_gain = ch_gain;
plugin_data->ch_state = ch_state;
plugin_data->current_ch = current_ch;
diff --git a/plugins/LadspaEffect/swh/surround_encoder_1401.c b/plugins/LadspaEffect/swh/surround_encoder_1401.c
index d4b6ace..100a03e 100644
--- a/plugins/LadspaEffect/swh/surround_encoder_1401.c
+++ b/plugins/LadspaEffect/swh/surround_encoder_1401.c
@@ -228,7 +228,7 @@ static void runSurroundEncoder(LADSPA_Handle instance, unsigned long sample_coun
for (pos = 0; pos < sample_count; pos++) {
delay[dptr] = s[pos];
hilb = 0.0f;
- for (i = 0; i <= NZEROS/2; i++) {
+ for (i = 0; i < NZEROS/2; i++) {
hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]);
}
dptr = (dptr + 1) & (D_SIZE - 1);
@@ -296,7 +296,7 @@ static void runAddingSurroundEncoder(LADSPA_Handle instance, unsigned long sampl
for (pos = 0; pos < sample_count; pos++) {
delay[dptr] = s[pos];
hilb = 0.0f;
- for (i = 0; i <= NZEROS/2; i++) {
+ for (i = 0; i < NZEROS/2; i++) {
hilb += (xcoeffs[i] * delay[(dptr - i*2) & (D_SIZE - 1)]);
}
dptr = (dptr + 1) & (D_SIZE - 1);
diff --git a/plugins/LadspaEffect/swh/tape_delay_1211.c b/plugins/LadspaEffect/swh/tape_delay_1211.c
index 0b680cc..6d78239 100644
--- a/plugins/LadspaEffect/swh/tape_delay_1211.c
+++ b/plugins/LadspaEffect/swh/tape_delay_1211.c
@@ -116,7 +116,6 @@ static void activateTapeDelay(LADSPA_Handle instance) {
last_in = 0.0f;
last2_in = 0.0f;
last3_in = 0.0f;
- sample_rate = sample_rate;
z0 = 0.0f;
z1 = 0.0f;
z2 = 0.0f;
diff --git a/plugins/LadspaEffect/swh/transient_1206.c b/plugins/LadspaEffect/swh/transient_1206.c
index 782593e..3c59153 100644
--- a/plugins/LadspaEffect/swh/transient_1206.c
+++ b/plugins/LadspaEffect/swh/transient_1206.c
@@ -97,7 +97,6 @@ static void activateTransient(LADSPA_Handle instance) {
medi_track = 0.1;
slow_track = 0.1;
count = 0;
- sample_rate = sample_rate;
plugin_data->buffer = buffer;
plugin_data->buffer_pos = buffer_pos;
plugin_data->count = count;
diff --git a/plugins/LadspaEffect/swh/vynil_1905.c b/plugins/LadspaEffect/swh/vynil_1905.c
index 187aa0f..c6aa448 100644
--- a/plugins/LadspaEffect/swh/vynil_1905.c
+++ b/plugins/LadspaEffect/swh/vynil_1905.c
@@ -163,6 +163,7 @@ static void cleanupVynil(LADSPA_Handle instance) {
free(plugin_data->buffer_m);
free(plugin_data->buffer_s);
free(plugin_data->click_buffer);
+ free(plugin_data->highp);
free(plugin_data->lowp_m);
free(plugin_data->lowp_s);
free(plugin_data->noise_filt);
diff --git a/plugins/LadspaEffect/tap/tap_eq.c b/plugins/LadspaEffect/tap/tap_eq.c
index daf9463..4cc0eb9 100644
--- a/plugins/LadspaEffect/tap/tap_eq.c
+++ b/plugins/LadspaEffect/tap/tap_eq.c
@@ -145,7 +145,8 @@ activate_eq(LADSPA_Handle instance) {
static
void
cleanup_eq(LADSPA_Handle instance) {
-
+ eq *plugin_data = (eq *)instance;
+ free(plugin_data->filters);
free(instance);
}
diff --git a/plugins/LadspaEffect/tap/tap_eqbw.c b/plugins/LadspaEffect/tap/tap_eqbw.c
index fd9d15d..3d6b39f 100644
--- a/plugins/LadspaEffect/tap/tap_eqbw.c
+++ b/plugins/LadspaEffect/tap/tap_eqbw.c
@@ -167,7 +167,8 @@ activate_eq(LADSPA_Handle instance) {
static
void
cleanup_eq(LADSPA_Handle instance) {
-
+ eq *plugin_data = (eq *)instance;
+ free(plugin_data->filters);
free(instance);
}
diff --git a/plugins/MidiImport/CMakeLists.txt b/plugins/MidiImport/CMakeLists.txt
new file mode 100644
index 0000000..9fd6b68
--- /dev/null
+++ b/plugins/MidiImport/CMakeLists.txt
@@ -0,0 +1,8 @@
+INCLUDE(BuildPlugin)
+
+BUILD_PLUGIN(midiimport MidiImport.cpp MidiImport.h
+ portsmf/allegro.cpp portsmf/allegro.h portsmf/allegrosmfwr.cpp
+ portsmf/allegrord.cpp portsmf/allegrowr.cpp portsmf/allegrosmfrd.cpp
+ portsmf/mfmidi.cpp portsmf/mfmidi.h portsmf/strparse.cpp
+ portsmf/strparse.h portsmf/algrd_internal.h portsmf/algsmfrd_internal.h
+ portsmf/trace.h MOCFILES MidiImport.h)
diff --git a/plugins/MidiImport/MidiImport.cpp b/plugins/MidiImport/MidiImport.cpp
new file mode 100644
index 0000000..36c54a4
--- /dev/null
+++ b/plugins/MidiImport/MidiImport.cpp
@@ -0,0 +1,572 @@
+/*
+ * MidiImport.cpp - support for importing MIDI files
+ *
+ * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#include <QtXml/QDomDocument>
+#include <QtCore/QDir>
+#include <QtGui/QApplication>
+#include <QtGui/QMessageBox>
+#include <QtGui/QProgressDialog>
+
+#include "MidiImport.h"
+#include "TrackContainer.h"
+#include "InstrumentTrack.h"
+#include "AutomationTrack.h"
+#include "AutomationPattern.h"
+#include "config_mgr.h"
+#include "Pattern.h"
+#include "Instrument.h"
+#include "MainWindow.h"
+#include "MidiTime.h"
+#include "debug.h"
+#include "embed.h"
+#include "song.h"
+
+#include "portsmf/allegro.h"
+
+#define makeID(_c0, _c1, _c2, _c3) \
+ ( 0 | \
+ ( ( _c0 ) | ( ( _c1 ) << 8 ) | ( ( _c2 ) << 16 ) | ( ( _c3 ) << 24 ) ) )
+
+
+
+extern "C"
+{
+
+Plugin::Descriptor PLUGIN_EXPORT midiimport_plugin_descriptor =
+{
+ STRINGIFY( PLUGIN_NAME ),
+ "MIDI Import",
+ QT_TRANSLATE_NOOP( "pluginBrowser",
+ "Filter for importing MIDI-files into LMMS" ),
+ "Tobias Doerffel <tobydox/at/users/dot/sf/dot/net>",
+ 0x0100,
+ Plugin::ImportFilter,
+ NULL,
+ NULL,
+ NULL
+} ;
+
+}
+
+
+MidiImport::MidiImport( const QString & _file ) :
+ ImportFilter( _file, &midiimport_plugin_descriptor ),
+ m_events(),
+ m_timingDivision( 0 )
+{
+}
+
+
+
+
+MidiImport::~MidiImport()
+{
+}
+
+
+
+
+bool MidiImport::tryImport( TrackContainer* tc )
+{
+ if( openFile() == false )
+ {
+ return false;
+ }
+
+#ifdef LMMS_HAVE_FLUIDSYNTH
+ if( engine::hasGUI() &&
+ configManager::inst()->defaultSoundfont().isEmpty() )
+ {
+ QMessageBox::information( engine::mainWindow(),
+ tr( "Setup incomplete" ),
+ tr( "You do not have set up a default soundfont in "
+ "the settings dialog (Edit->Settings). "
+ "Therefore no sound will be played back after "
+ "importing this MIDI file. You should download "
+ "a General MIDI soundfont, specify it in "
+ "settings dialog and try again." ) );
+ }
+#else
+ if( engine::hasGUI() )
+ {
+ QMessageBox::information( engine::mainWindow(),
+ tr( "Setup incomplete" ),
+ tr( "You did not compile LMMS with support for "
+ "SoundFont2 player, which is used to add default "
+ "sound to imported MIDI files. "
+ "Therefore no sound will be played back after "
+ "importing this MIDI file." ) );
+ }
+#endif
+
+ switch( readID() )
+ {
+ case makeID( 'M', 'T', 'h', 'd' ):
+ printf( "MidiImport::tryImport(): found MThd\n");
+ return readSMF( tc );
+
+ case makeID( 'R', 'I', 'F', 'F' ):
+ printf( "MidiImport::tryImport(): found RIFF\n");
+ return readRIFF( tc );
+
+ default:
+ printf( "MidiImport::tryImport(): not a Standard MIDI "
+ "file\n" );
+ return false;
+ }
+}
+
+
+
+
+class smfMidiCC
+{
+
+public:
+ smfMidiCC() :
+ at( NULL ),
+ ap( NULL ),
+ lastPos( 0 )
+ { }
+
+ AutomationTrack * at;
+ AutomationPattern * ap;
+ MidiTime lastPos;
+
+ smfMidiCC & create( TrackContainer* tc )
+ {
+ if( !at )
+ {
+ at = dynamic_cast<AutomationTrack *>( track::create( track::AutomationTrack, tc ) );
+ }
+ return *this;
+ }
+
+
+ void clear()
+ {
+ at = NULL;
+ ap = NULL;
+ lastPos = 0;
+ }
+
+
+ smfMidiCC & putValue( MidiTime time, AutomatableModel * objModel, float value )
+ {
+ if( !ap || time > lastPos + DefaultTicksPerTact )
+ {
+ MidiTime pPos = MidiTime( time.getTact(), 0 );
+ ap = dynamic_cast<AutomationPattern*>(
+ at->createTCO(0) );
+ ap->movePosition( pPos );
+ }
+ ap->addObject( objModel );
+
+ lastPos = time;
+ time = time - ap->startPosition();
+ ap->putValue( time, value, false );
+ ap->changeLength( MidiTime( time.getTact() + 1, 0 ) );
+
+ return *this;
+ }
+};
+
+
+
+class smfMidiChannel
+{
+
+public:
+ smfMidiChannel() :
+ it( NULL ),
+ p( NULL ),
+ it_inst( NULL ),
+ isSF2( false ),
+ hasNotes( false ),
+ lastEnd( 0 )
+ { }
+
+ InstrumentTrack * it;
+ Pattern* p;
+ Instrument * it_inst;
+ bool isSF2;
+ bool hasNotes;
+ MidiTime lastEnd;
+
+ smfMidiChannel * create( TrackContainer* tc )
+ {
+ if( !it ) {
+ it = dynamic_cast<InstrumentTrack *>( track::create( track::InstrumentTrack, tc ) );
+
+#ifdef LMMS_HAVE_FLUIDSYNTH
+ it_inst = it->loadInstrument( "sf2player" );
+
+ if( it_inst )
+ {
+ isSF2 = true;
+ it_inst->loadFile( configManager::inst()->defaultSoundfont() );
+ it_inst->childModel( "bank" )->setValue( 0 );
+ it_inst->childModel( "patch" )->setValue( 0 );
+ }
+ else
+ {
+ it_inst = it->loadInstrument( "patman" );
+ }
+#else
+ it_inst = it->loadInstrument( "patman" );
+#endif
+
+ lastEnd = 0;
+ }
+ return this;
+ }
+
+
+ void addNote( note & n )
+ {
+ if( !p || n.pos() > lastEnd + DefaultTicksPerTact )
+ {
+ MidiTime pPos = MidiTime( n.pos().getTact(), 0 );
+ p = dynamic_cast<Pattern*>( it->createTCO( 0 ) );
+ p->movePosition( pPos );
+ }
+ hasNotes = true;
+ lastEnd = n.pos() + n.length();
+ n.setPos( n.pos( p->startPosition() ) );
+ p->addNote( n, false );
+ }
+
+};
+
+
+bool MidiImport::readSMF( TrackContainer* tc )
+{
+ QString filename = file().fileName();
+ closeFile();
+
+ const int preTrackSteps = 2;
+ QProgressDialog pd( TrackContainer::tr( "Importing MIDI-file..." ),
+ TrackContainer::tr( "Cancel" ), 0, preTrackSteps, engine::mainWindow() );
+ pd.setWindowTitle( TrackContainer::tr( "Please wait..." ) );
+ pd.setWindowModality(Qt::WindowModal);
+ pd.setMinimumDuration( 0 );
+
+ pd.setValue( 0 );
+
+ Alg_seq_ptr seq = new Alg_seq(filename.toLocal8Bit(), true);
+ seq->convert_to_beats();
+
+ pd.setMaximum( seq->tracks() + preTrackSteps );
+ pd.setValue( 1 );
+
+ // 128 CC + Pitch Bend
+ smfMidiCC ccs[129];
+ smfMidiChannel chs[256];
+
+ MeterModel & timeSigMM = engine::getSong()->getTimeSigModel();
+ AutomationPattern * timeSigNumeratorPat =
+ AutomationPattern::globalAutomationPattern( &timeSigMM.numeratorModel() );
+ AutomationPattern * timeSigDenominatorPat =
+ AutomationPattern::globalAutomationPattern( &timeSigMM.denominatorModel() );
+
+ // TODO: adjust these to Time.Sig changes
+ double beatsPerTact = 4;
+ double ticksPerBeat = DefaultTicksPerTact / beatsPerTact;
+
+ // Time-sig changes
+ Alg_time_sigs * timeSigs = &seq->time_sig;
+ for( int s = 0; s < timeSigs->length(); ++s )
+ {
+ Alg_time_sig timeSig = (*timeSigs)[s];
+ // Initial timeSig, set song-default value
+ if(/* timeSig.beat == 0*/ true )
+ {
+ // TODO set song-global default value
+ printf("Another timesig at %f\n", timeSig.beat);
+ timeSigNumeratorPat->putValue( timeSig.beat*ticksPerBeat, timeSig.num );
+ timeSigDenominatorPat->putValue( timeSig.beat*ticksPerBeat, timeSig.den );
+ }
+ else
+ {
+ }
+
+ }
+
+ pd.setValue( 2 );
+
+ // Tempo stuff
+ AutomationPattern * tap = tc->tempoAutomationPattern();
+ if( tap )
+ {
+ tap->clear();
+ Alg_time_map * timeMap = seq->get_time_map();
+ Alg_beats & beats = timeMap->beats;
+ for( int i = 0; i < beats.len - 1; i++ )
+ {
+ Alg_beat_ptr b = &(beats[i]);
+ double tempo = ( beats[i + 1].beat - b->beat ) /
+ ( beats[i + 1].time - beats[i].time );
+ tap->putValue( b->beat * ticksPerBeat, tempo * 60.0 );
+ }
+ if( timeMap->last_tempo_flag )
+ {
+ Alg_beat_ptr b = &( beats[beats.len - 1] );
+ tap->putValue( b->beat * ticksPerBeat, timeMap->last_tempo * 60.0 );
+ }
+ }
+
+ // Song events
+ for( int e = 0; e < seq->length(); ++e )
+ {
+ Alg_event_ptr evt = (*seq)[e];
+
+ if( evt->is_update() )
+ {
+ printf("Unhandled SONG update: %d %f %s\n",
+ evt->get_type_code(), evt->time, evt->get_attribute() );
+ }
+ }
+
+ // Tracks
+ for( int t = 0; t < seq->tracks(); ++t )
+ {
+ Alg_track_ptr trk = seq->track( t );
+ pd.setValue( t + preTrackSteps );
+
+ for( int c = 0; c < 129; c++ )
+ {
+ ccs[c].clear();
+ }
+
+ // Now look at events
+ for( int e = 0; e < trk->length(); ++e )
+ {
+ Alg_event_ptr evt = (*trk)[e];
+
+ if( evt->chan == -1 )
+ {
+ printf("MISSING GLOBAL THINGY\n");
+ printf(" %d %d %f %s\n", (int) evt->chan,
+ evt->get_type_code(), evt->time,
+ evt->get_attribute() );
+ // Global stuff
+ }
+ else if( evt->is_note() && evt->chan < 256 )
+ {
+ smfMidiChannel * ch = chs[evt->chan].create( tc );
+ Alg_note_ptr noteEvt = dynamic_cast<Alg_note_ptr>( evt );
+
+ note n( noteEvt->get_duration() * ticksPerBeat,
+ noteEvt->get_start_time() * ticksPerBeat,
+ noteEvt->get_identifier() - 12,
+ noteEvt->get_loud());
+ ch->addNote( n );
+
+ }
+
+ else if( evt->is_update() )
+ {
+ smfMidiChannel * ch = chs[evt->chan].create( tc );
+
+ double time = evt->time*ticksPerBeat;
+ QString update( evt->get_attribute() );
+
+ if( update == "programi" )
+ {
+ long prog = evt->get_integer_value();
+ if( ch->isSF2 )
+ {
+ ch->it_inst->childModel( "bank" )->setValue( 0 );
+ ch->it_inst->childModel( "patch" )->setValue( prog );
+ }
+ else {
+ const QString num = QString::number( prog );
+ const QString filter = QString().fill( '0', 3 - num.length() ) + num + "*.pat";
+ const QString dir = "/usr/share/midi/"
+ "freepats/Tone_000/";
+ const QStringList files = QDir( dir ).
+ entryList( QStringList( filter ) );
+ if( ch->it_inst && !files.empty() )
+ {
+ ch->it_inst->loadFile( dir+files.front() );
+ }
+ }
+ }
+ else if( update == "tracknames" )
+ {
+ QString trackName( evt->get_string_value() );
+ ch->it->setName( trackName );
+ //ch.p->setName( trackName );
+ }
+
+ else if( update.startsWith( "control" ) || update == "bendr" )
+ {
+ int ccid = update.mid( 7, update.length()-8 ).toInt();
+ if( update == "bendr" )
+ {
+ ccid = 128;
+ }
+ if( ccid <= 128 )
+ {
+ double cc = evt->get_real_value();
+ AutomatableModel * objModel = NULL;
+
+ switch( ccid )
+ {
+ case 0:
+ if( ch->isSF2 && ch->it_inst )
+ {
+ objModel = ch->it_inst->childModel( "bank" );
+ printf("BANK SELECT %f %d\n", cc, (int)(cc*127.0));
+ cc *= 127.0f;
+ }
+ break;
+
+ case 7:
+ objModel = ch->it->volumeModel();
+ cc *= 100.0f;
+ break;
+
+ case 10:
+ objModel = ch->it->panningModel();
+ cc = cc * 200.f - 100.0f;
+ break;
+
+ case 128:
+ objModel = ch->it->pitchModel();
+ cc = cc * 100.0f;
+ break;
+ }
+
+ if( objModel )
+ {
+ if( time == 0 && objModel )
+ {
+ objModel->setInitValue( cc );
+ }
+ else
+ {
+ ccs[ccid].create( tc );
+ ccs[ccid].putValue( time, objModel, cc );
+ }
+ }
+ }
+ }
+ else {
+ printf("Unhandled update: %d %d %f %s\n", (int) evt->chan,
+ evt->get_type_code(), evt->time, evt->get_attribute() );
+ }
+ }
+ }
+ }
+
+ delete seq;
+
+
+ for( int c=0; c < 256; ++c )
+ {
+ if( !chs[c].hasNotes && chs[c].it )
+ {
+ printf(" Should remove empty track\n");
+ // must delete trackView first - but where is it?
+ //tc->removeTrack( chs[c].it );
+ //it->deleteLater();
+ }
+ }
+
+ return true;
+}
+
+
+
+
+bool MidiImport::readRIFF( TrackContainer* tc )
+{
+ // skip file length
+ skip( 4 );
+
+ // check file type ("RMID" = RIFF MIDI)
+ if( readID() != makeID( 'R', 'M', 'I', 'D' ) )
+ {
+invalid_format:
+ qWarning( "MidiImport::readRIFF(): invalid file format" );
+ return false;
+ }
+
+ // search for "data" chunk
+ while( 1 )
+ {
+ const int id = readID();
+ const int len = read32LE();
+ if( file().atEnd() )
+ {
+data_not_found:
+ qWarning( "MidiImport::readRIFF(): data chunk not found" );
+ return false;
+ }
+ if( id == makeID( 'd', 'a', 't', 'a' ) )
+ {
+ break;
+ }
+ if( len < 0 )
+ {
+ goto data_not_found;
+ }
+ skip( ( len + 1 ) & ~1 );
+ }
+
+ // the "data" chunk must contain data in SMF format
+ if( readID() != makeID( 'M', 'T', 'h', 'd' ) )
+ {
+ goto invalid_format;
+ }
+ return readSMF( tc );
+}
+
+
+
+
+void MidiImport::error()
+{
+ printf( "MidiImport::readTrack(): invalid MIDI data (offset %#x)\n",
+ (unsigned int) file().pos() );
+}
+
+
+
+extern "C"
+{
+
+// necessary for getting instance out of shared lib
+Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data )
+{
+ return new MidiImport( QString::fromUtf8(
+ static_cast<const char *>( _data ) ) );
+}
+
+
+}
+
+#include "moc_MidiImport.cxx"
diff --git a/plugins/MidiImport/MidiImport.h b/plugins/MidiImport/MidiImport.h
new file mode 100644
index 0000000..1dfb57e
--- /dev/null
+++ b/plugins/MidiImport/MidiImport.h
@@ -0,0 +1,128 @@
+/*
+ * MidiImport.h - support for importing MIDI-files
+ *
+ * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef _MIDI_IMPORT_H
+#define _MIDI_IMPORT_H
+
+#include <QtCore/QString>
+#include <QtCore/QPair>
+#include <QtCore/QVector>
+
+#include "MidiEvent.h"
+#include "ImportFilter.h"
+
+
+class MidiImport : public ImportFilter
+{
+ Q_OBJECT
+public:
+ MidiImport( const QString & _file );
+ virtual ~MidiImport();
+
+ virtual PluginView * instantiateView( QWidget * )
+ {
+ return( NULL );
+ }
+
+
+private:
+ virtual bool tryImport( TrackContainer* tc );
+
+ bool readSMF( TrackContainer* tc );
+ bool readRIFF( TrackContainer* tc );
+ bool readTrack( int _track_end, QString & _track_name );
+
+ void error( void );
+
+
+ inline int readInt( int _bytes )
+ {
+ int c, value = 0;
+ do
+ {
+ c = readByte();
+ if( c == -1 )
+ {
+ return( -1 );
+ }
+ value = ( value << 8 ) | c;
+ } while( --_bytes );
+ return( value );
+ }
+ inline int read32LE()
+ {
+ int value = readByte();
+ value |= readByte() << 8;
+ value |= readByte() << 16;
+ value |= readByte() << 24;
+ return value;
+ }
+ inline int readVar()
+ {
+ int c = readByte();
+ int value = c & 0x7f;
+ if( c & 0x80 )
+ {
+ c = readByte();
+ value = ( value << 7 ) | ( c & 0x7f );
+ if( c & 0x80 )
+ {
+ c = readByte();
+ value = ( value << 7 ) | ( c & 0x7f );
+ if( c & 0x80 )
+ {
+ c = readByte();
+ value = ( value << 7 ) | c;
+ if( c & 0x80 )
+ {
+ return -1;
+ }
+ }
+ }
+ }
+ return( !file().atEnd() ? value : -1 );
+ }
+
+ inline int readID()
+ {
+ return read32LE();
+ }
+ inline void skip( int _bytes )
+ {
+ while( _bytes > 0 )
+ {
+ readByte();
+ --_bytes;
+ }
+ }
+
+
+ typedef QVector<QPair<int, MidiEvent> > EventVector;
+ EventVector m_events;
+ int m_timingDivision;
+
+} ;
+
+
+#endif
diff --git a/plugins/midi_import/portsmf/README.txt b/plugins/MidiImport/portsmf/README.txt
similarity index 100%
rename from plugins/midi_import/portsmf/README.txt
rename to plugins/MidiImport/portsmf/README.txt
diff --git a/plugins/midi_import/portsmf/algrd_internal.h b/plugins/MidiImport/portsmf/algrd_internal.h
similarity index 100%
rename from plugins/midi_import/portsmf/algrd_internal.h
rename to plugins/MidiImport/portsmf/algrd_internal.h
diff --git a/plugins/midi_import/portsmf/algsmfrd_internal.h b/plugins/MidiImport/portsmf/algsmfrd_internal.h
similarity index 100%
rename from plugins/midi_import/portsmf/algsmfrd_internal.h
rename to plugins/MidiImport/portsmf/algsmfrd_internal.h
diff --git a/plugins/midi_import/portsmf/allegro.cpp b/plugins/MidiImport/portsmf/allegro.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/allegro.cpp
rename to plugins/MidiImport/portsmf/allegro.cpp
diff --git a/plugins/midi_import/portsmf/allegro.h b/plugins/MidiImport/portsmf/allegro.h
similarity index 100%
rename from plugins/midi_import/portsmf/allegro.h
rename to plugins/MidiImport/portsmf/allegro.h
diff --git a/plugins/midi_import/portsmf/allegrord.cpp b/plugins/MidiImport/portsmf/allegrord.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/allegrord.cpp
rename to plugins/MidiImport/portsmf/allegrord.cpp
diff --git a/plugins/midi_import/portsmf/allegroserial.cpp b/plugins/MidiImport/portsmf/allegroserial.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/allegroserial.cpp
rename to plugins/MidiImport/portsmf/allegroserial.cpp
diff --git a/plugins/midi_import/portsmf/allegrosmfrd.cpp b/plugins/MidiImport/portsmf/allegrosmfrd.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/allegrosmfrd.cpp
rename to plugins/MidiImport/portsmf/allegrosmfrd.cpp
diff --git a/plugins/midi_import/portsmf/allegrosmfwr.cpp b/plugins/MidiImport/portsmf/allegrosmfwr.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/allegrosmfwr.cpp
rename to plugins/MidiImport/portsmf/allegrosmfwr.cpp
diff --git a/plugins/midi_import/portsmf/allegrowr.cpp b/plugins/MidiImport/portsmf/allegrowr.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/allegrowr.cpp
rename to plugins/MidiImport/portsmf/allegrowr.cpp
diff --git a/plugins/midi_import/portsmf/license.txt b/plugins/MidiImport/portsmf/license.txt
similarity index 100%
rename from plugins/midi_import/portsmf/license.txt
rename to plugins/MidiImport/portsmf/license.txt
diff --git a/plugins/midi_import/portsmf/mfmidi.cpp b/plugins/MidiImport/portsmf/mfmidi.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/mfmidi.cpp
rename to plugins/MidiImport/portsmf/mfmidi.cpp
diff --git a/plugins/midi_import/portsmf/mfmidi.h b/plugins/MidiImport/portsmf/mfmidi.h
similarity index 100%
rename from plugins/midi_import/portsmf/mfmidi.h
rename to plugins/MidiImport/portsmf/mfmidi.h
diff --git a/plugins/midi_import/portsmf/strparse.cpp b/plugins/MidiImport/portsmf/strparse.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/strparse.cpp
rename to plugins/MidiImport/portsmf/strparse.cpp
diff --git a/plugins/midi_import/portsmf/strparse.h b/plugins/MidiImport/portsmf/strparse.h
similarity index 100%
rename from plugins/midi_import/portsmf/strparse.h
rename to plugins/MidiImport/portsmf/strparse.h
diff --git a/plugins/midi_import/portsmf/trace.cpp b/plugins/MidiImport/portsmf/trace.cpp
similarity index 100%
rename from plugins/midi_import/portsmf/trace.cpp
rename to plugins/MidiImport/portsmf/trace.cpp
diff --git a/plugins/midi_import/portsmf/trace.h b/plugins/MidiImport/portsmf/trace.h
similarity index 100%
rename from plugins/midi_import/portsmf/trace.h
rename to plugins/MidiImport/portsmf/trace.h
diff --git a/plugins/SpectrumAnalyzer/CMakeLists.txt b/plugins/SpectrumAnalyzer/CMakeLists.txt
index 506ca34..2f56fe2 100644
--- a/plugins/SpectrumAnalyzer/CMakeLists.txt
+++ b/plugins/SpectrumAnalyzer/CMakeLists.txt
@@ -2,4 +2,4 @@ INCLUDE(BuildPlugin)
INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS})
LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS})
LINK_LIBRARIES(${FFTW3F_LIBRARIES})
-BUILD_PLUGIN(spectrumanalyzer SpectrumAnalyzer.cpp SpectrumAnalyzerControls.cpp SpectrumAnalyzerControlDialog.cpp SpectrumAnalyzer.h SpectrumAnalyzerControls.h SpectrumAnalyzerControlDialog.h MOCFILES SpectrumAnalyzerControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(spectrumanalyzer SpectrumAnalyzer.cpp SpectrumAnalyzerControls.cpp SpectrumAnalyzerControlDialog.cpp SpectrumAnalyzer.h SpectrumAnalyzerControls.h SpectrumAnalyzerControlDialog.h MOCFILES SpectrumAnalyzerControlDialog.h SpectrumAnalyzerControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp b/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp
index 7878ca7..ce95fba 100644
--- a/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp
+++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzer.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzer.h b/plugins/SpectrumAnalyzer/SpectrumAnalyzer.h
index 3026002..2cde2ec 100644
--- a/plugins/SpectrumAnalyzer/SpectrumAnalyzer.h
+++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzer.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp
index 9854d4c..9121c0e 100644
--- a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp
+++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -190,5 +190,5 @@ void SpectrumAnalyzerControlDialog::paintEvent( QPaintEvent * )
}
-
+#include "moc_SpectrumAnalyzerControlDialog.cxx"
diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.h b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.h
index 175193c..fd94049 100644
--- a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.h
+++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -33,6 +33,7 @@ class SpectrumAnalyzerControls;
class SpectrumAnalyzerControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
SpectrumAnalyzerControlDialog( SpectrumAnalyzerControls* controls );
virtual ~SpectrumAnalyzerControlDialog()
diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.cpp b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.cpp
index e9088df..5b950b7 100644
--- a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.cpp
+++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.h b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.h
index 322b6af..24c0fae 100644
--- a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.h
+++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/SpectrumAnalyzer/moc_SpectrumAnalyzerControls.cxx_parameters b/plugins/SpectrumAnalyzer/moc_SpectrumAnalyzerControls.cxx_parameters
deleted file mode 100644
index d3656ac..0000000
--- a/plugins/SpectrumAnalyzer/moc_SpectrumAnalyzerControls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/SpectrumAnalyzer
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=spectrumanalyzer
--o
-/home/lukas/src/lmms/plugins/SpectrumAnalyzer/moc_SpectrumAnalyzerControls.cxx
-/home/lukas/src/lmms/plugins/SpectrumAnalyzer/SpectrumAnalyzerControls.h
diff --git a/plugins/VstEffect/CMakeLists.txt b/plugins/VstEffect/CMakeLists.txt
index 5187505..9b26239 100644
--- a/plugins/VstEffect/CMakeLists.txt
+++ b/plugins/VstEffect/CMakeLists.txt
@@ -3,7 +3,7 @@ INCLUDE(BuildPlugin)
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../vst_base")
LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/../vst_base")
LINK_LIBRARIES(vstbase)
-BUILD_PLUGIN(vsteffect VstEffect.cpp VstEffectControls.cpp VstEffectControlDialog.cpp VstSubPluginFeatures.cpp VstEffect.h VstEffectControls.h VstEffectControlDialog.h VstSubPluginFeatures.h MOCFILES VstEffectControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(vsteffect VstEffect.cpp VstEffectControls.cpp VstEffectControlDialog.cpp VstSubPluginFeatures.cpp VstEffect.h VstEffectControls.h VstEffectControlDialog.h VstSubPluginFeatures.h MOCFILES VstEffectControlDialog.h VstEffectControls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
SET_TARGET_PROPERTIES(vsteffect PROPERTIES COMPILE_FLAGS "-Wno-attributes")
ENDIF(LMMS_SUPPORT_VST)
diff --git a/plugins/VstEffect/VstEffect.cpp b/plugins/VstEffect/VstEffect.cpp
index 072aa3a..fdee343 100644
--- a/plugins/VstEffect/VstEffect.cpp
+++ b/plugins/VstEffect/VstEffect.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/VstEffect/VstEffect.h b/plugins/VstEffect/VstEffect.h
index 4c11bbb..b896a46 100644
--- a/plugins/VstEffect/VstEffect.h
+++ b/plugins/VstEffect/VstEffect.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/VstEffect/VstEffectControlDialog.cpp b/plugins/VstEffect/VstEffectControlDialog.cpp
index 2261f24..2f3d3cc 100644
--- a/plugins/VstEffect/VstEffectControlDialog.cpp
+++ b/plugins/VstEffect/VstEffectControlDialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2011 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -264,4 +264,4 @@ VstEffectControlDialog::~VstEffectControlDialog()
//delete m_pluginWidget;
}
-
+#include "moc_VstEffectControlDialog.cxx"
diff --git a/plugins/VstEffect/VstEffectControlDialog.h b/plugins/VstEffect/VstEffectControlDialog.h
index 0912c90..40e22ed 100644
--- a/plugins/VstEffect/VstEffectControlDialog.h
+++ b/plugins/VstEffect/VstEffectControlDialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -42,6 +42,7 @@ class pixmapButton;
class VstEffectControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
VstEffectControlDialog( VstEffectControls * _controls );
virtual ~VstEffectControlDialog();
diff --git a/plugins/VstEffect/VstEffectControls.cpp b/plugins/VstEffect/VstEffectControls.cpp
index 1d0803e..975bdf3 100644
--- a/plugins/VstEffect/VstEffectControls.cpp
+++ b/plugins/VstEffect/VstEffectControls.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/VstEffect/VstEffectControls.h b/plugins/VstEffect/VstEffectControls.h
index bc33a20..5be6ac8 100644
--- a/plugins/VstEffect/VstEffectControls.h
+++ b/plugins/VstEffect/VstEffectControls.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2011 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/VstEffect/VstSubPluginFeatures.cpp b/plugins/VstEffect/VstSubPluginFeatures.cpp
index 9052827..80cd7ca 100644
--- a/plugins/VstEffect/VstSubPluginFeatures.cpp
+++ b/plugins/VstEffect/VstSubPluginFeatures.cpp
@@ -5,7 +5,7 @@
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/VstEffect/VstSubPluginFeatures.h b/plugins/VstEffect/VstSubPluginFeatures.h
index 6285612..51fdc05 100644
--- a/plugins/VstEffect/VstSubPluginFeatures.h
+++ b/plugins/VstEffect/VstSubPluginFeatures.h
@@ -5,7 +5,7 @@
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/VstEffect/moc_VstEffectControls.cxx_parameters b/plugins/VstEffect/moc_VstEffectControls.cxx_parameters
deleted file mode 100644
index 91ec7f0..0000000
--- a/plugins/VstEffect/moc_VstEffectControls.cxx_parameters
+++ /dev/null
@@ -1,17 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/VstEffect/../vst_base
--I/home/lukas/src/lmms/plugins/VstEffect
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=vsteffect
--o
-/home/lukas/src/lmms/plugins/VstEffect/moc_VstEffectControls.cxx
-/home/lukas/src/lmms/plugins/VstEffect/VstEffectControls.h
diff --git a/plugins/audio_file_processor/artwork.png b/plugins/audio_file_processor/artwork.png
index 4b0bbe4..f1dd96b 100644
Binary files a/plugins/audio_file_processor/artwork.png and b/plugins/audio_file_processor/artwork.png differ
diff --git a/plugins/audio_file_processor/audio_file_processor.cpp b/plugins/audio_file_processor/audio_file_processor.cpp
index ff8ffdd..74a9354 100644
--- a/plugins/audio_file_processor/audio_file_processor.cpp
+++ b/plugins/audio_file_processor/audio_file_processor.cpp
@@ -2,8 +2,8 @@
* audio_file_processor.cpp - instrument for using audio-files
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -29,6 +29,7 @@
#include <QtCore/QFileInfo>
#include <QtGui/QDropEvent>
+#include <samplerate.h>
#include "audio_file_processor.h"
#include "engine.h"
@@ -72,23 +73,36 @@ audioFileProcessor::audioFileProcessor( InstrumentTrack * _instrument_track ) :
Instrument( _instrument_track, &audiofileprocessor_plugin_descriptor ),
m_sampleBuffer(),
m_ampModel( 100, 0, 500, 1, this, tr( "Amplify" ) ),
- m_startPointModel( 0, 0, 1, 0.0000001f, this, tr( "Start of sample") ),
+ m_startPointModel( 0, 0, 1, 0.0000001f, this, tr( "Start of sample" ) ),
m_endPointModel( 1, 0, 1, 0.0000001f, this, tr( "End of sample" ) ),
+ m_loopPointModel( 0, 0, 1, 0.0000001f, this, tr( "Loopback point" ) ),
m_reverseModel( false, this, tr( "Reverse sample" ) ),
- m_loopModel( false, this, tr( "Loop") ),
+ m_loopModel( 0, 0, 2, this, tr( "Loop mode" ) ),
m_stutterModel( false, this, tr( "Stutter" ) ),
- m_nextPlayStartPoint( 0 )
+ m_interpolationModel( this, tr( "Interpolation mode" ) ),
+ m_nextPlayStartPoint( 0 ),
+ m_nextPlayBackwards( false )
{
connect( &m_reverseModel, SIGNAL( dataChanged() ),
this, SLOT( reverseModelChanged() ) );
connect( &m_ampModel, SIGNAL( dataChanged() ),
this, SLOT( ampModelChanged() ) );
connect( &m_startPointModel, SIGNAL( dataChanged() ),
- this, SLOT( loopPointChanged() ) );
+ this, SLOT( startPointChanged() ) );
connect( &m_endPointModel, SIGNAL( dataChanged() ),
+ this, SLOT( endPointChanged() ) );
+ connect( &m_loopPointModel, SIGNAL( dataChanged() ),
this, SLOT( loopPointChanged() ) );
connect( &m_stutterModel, SIGNAL( dataChanged() ),
this, SLOT( stutterModelChanged() ) );
+
+//interpolation modes
+ m_interpolationModel.addItem( tr( "None" ) );
+ m_interpolationModel.addItem( tr( "Linear" ) );
+ m_interpolationModel.addItem( tr( "Sinc" ) );
+ m_interpolationModel.setValue( 1 );
+
+ pointChanged();
}
@@ -112,6 +126,7 @@ void audioFileProcessor::playNote( NotePlayHandle * _n,
if( m_stutterModel.value() == true && _n->frequency() < 20.0 )
{
m_nextPlayStartPoint = m_sampleBuffer.startFrame();
+ m_nextPlayBackwards = false;
return;
}
@@ -122,29 +137,49 @@ void audioFileProcessor::playNote( NotePlayHandle * _n,
// Restart playing the note if in stutter mode, not in loop mode,
// and we're at the end of the sample.
m_nextPlayStartPoint = m_sampleBuffer.startFrame();
+ m_nextPlayBackwards = false;
+ }
+ // set interpolation mode for libsamplerate
+ int srcmode = SRC_LINEAR;
+ switch( m_interpolationModel.value() )
+ {
+ case 0:
+ srcmode = SRC_ZERO_ORDER_HOLD;
+ break;
+ case 1:
+ srcmode = SRC_LINEAR;
+ break;
+ case 2:
+ srcmode = SRC_SINC_MEDIUM_QUALITY;
+ break;
}
- _n->m_pluginData = new handleState( _n->hasDetuningInfo() );
- ((handleState *)_n->m_pluginData)->setFrameIndex(m_nextPlayStartPoint);
+ _n->m_pluginData = new handleState( _n->hasDetuningInfo(), srcmode );
+ ((handleState *)_n->m_pluginData)->setFrameIndex( m_nextPlayStartPoint );
+ ((handleState *)_n->m_pluginData)->setBackwards( m_nextPlayBackwards );
+
+// debug code
+/* qDebug( "frames %d", m_sampleBuffer.frames() );
+ qDebug( "startframe %d", m_sampleBuffer.startFrame() );
+ qDebug( "nextPlayStartPoint %d", m_nextPlayStartPoint );*/
}
- if( m_sampleBuffer.play( _working_buffer,
- (handleState *)_n->m_pluginData,
- frames, _n->frequency(),
- m_loopModel.value() ) == TRUE )
+ if( ! _n->isFinished() )
{
- applyRelease( _working_buffer, _n );
- instrumentTrack()->processAudioBuffer( _working_buffer,
- frames,_n );
- int framesPosition;
- if( m_stutterModel.value() == true )
+ if( m_sampleBuffer.play( _working_buffer,
+ (handleState *)_n->m_pluginData,
+ frames, _n->frequency(),
+ static_cast<SampleBuffer::LoopMode>( m_loopModel.value() ) ) )
{
- framesPosition = m_nextPlayStartPoint;
+ applyRelease( _working_buffer, _n );
+ instrumentTrack()->processAudioBuffer( _working_buffer,
+ frames,_n );
+
+ emit isPlaying( ((handleState *)_n->m_pluginData)->frameIndex() );
}
else
{
- framesPosition = _n->totalFramesPlayed() * _n->frequency() / m_sampleBuffer.frequency();
+ emit isPlaying( 0 );
}
- emit isPlaying( framesPosition );
}
else
{
@@ -153,6 +188,7 @@ void audioFileProcessor::playNote( NotePlayHandle * _n,
if( m_stutterModel.value() == true )
{
m_nextPlayStartPoint = ((handleState *)_n->m_pluginData)->frameIndex();
+ m_nextPlayBackwards = ((handleState *)_n->m_pluginData)->isBackwards();
}
}
@@ -182,7 +218,9 @@ void audioFileProcessor::saveSettings( QDomDocument & _doc,
m_ampModel.saveSettings( _doc, _this, "amp" );
m_startPointModel.saveSettings( _doc, _this, "sframe" );
m_endPointModel.saveSettings( _doc, _this, "eframe" );
+ m_loopPointModel.saveSettings( _doc, _this, "lframe" );
m_stutterModel.saveSettings( _doc, _this, "stutter" );
+ m_interpolationModel.saveSettings( _doc, _this, "interp" );
}
@@ -199,14 +237,36 @@ void audioFileProcessor::loadSettings( const QDomElement & _this )
{
m_sampleBuffer.loadFromBase64( _this.attribute( "srcdata" ) );
}
- m_reverseModel.loadSettings( _this, "reversed" );
+
m_loopModel.loadSettings( _this, "looped" );
m_ampModel.loadSettings( _this, "amp" );
- m_startPointModel.loadSettings( _this, "sframe" );
m_endPointModel.loadSettings( _this, "eframe" );
+
+ // compat code for not having a separate loopback point
+ if( _this.hasAttribute( "lframe" ) )
+ {
+ m_loopPointModel.loadSettings( _this, "lframe" );
+ m_startPointModel.loadSettings( _this, "sframe" );
+ }
+ else
+ {
+ m_loopPointModel.loadSettings( _this, "sframe" );
+ m_startPointModel.setValue( m_loopPointModel.value() );
+ }
+
+ m_reverseModel.loadSettings( _this, "reversed" );
+
m_stutterModel.loadSettings( _this, "stutter" );
+ if( _this.hasAttribute( "interp" ) )
+ {
+ m_interpolationModel.loadSettings( _this, "interp" );
+ }
+ else
+ {
+ m_interpolationModel.setValue( 1 ); //linear by default
+ }
- loopPointChanged();
+ pointChanged();
}
@@ -239,6 +299,7 @@ int audioFileProcessor::getBeatLen( NotePlayHandle * _n ) const
+
PluginView * audioFileProcessor::instantiateView( QWidget * _parent )
{
return new AudioFileProcessorView( this, _parent );
@@ -271,6 +332,8 @@ void audioFileProcessor::setAudioFile( const QString & _audio_file,
void audioFileProcessor::reverseModelChanged( void )
{
m_sampleBuffer.setReversed( m_reverseModel.value() );
+ m_nextPlayStartPoint = m_sampleBuffer.startFrame();
+ m_nextPlayBackwards = false;
}
@@ -285,40 +348,90 @@ void audioFileProcessor::ampModelChanged( void )
void audioFileProcessor::stutterModelChanged()
{
m_nextPlayStartPoint = m_sampleBuffer.startFrame();
+ m_nextPlayBackwards = false;
}
-
-
-void audioFileProcessor::loopPointChanged( void )
+void audioFileProcessor::startPointChanged( void )
{
- //check if start is over end and swap values if so
+ // check if start is over end and swap values if so
if( m_startPointModel.value() > m_endPointModel.value() )
{
float tmp = m_endPointModel.value();
m_endPointModel.setValue( m_startPointModel.value() );
m_startPointModel.setValue( tmp );
}
-
- //check if start & end overlap and nudge end up if so
+
+ // nudge loop point with end
+ if( m_loopPointModel.value() >= m_endPointModel.value() )
+ {
+ m_loopPointModel.setValue( qMax( m_endPointModel.value() - 0.001f, 0.0f ) );
+ }
+
+ // nudge loop point with start
+ if( m_loopPointModel.value() < m_startPointModel.value() )
+ {
+ m_loopPointModel.setValue( m_startPointModel.value() );
+ }
+
+ // check if start & end overlap and nudge end up if so
if( m_startPointModel.value() == m_endPointModel.value() )
{
m_endPointModel.setValue( qMin( m_endPointModel.value() + 0.001f, 1.0f ) );
}
- const f_cnt_t f_start = static_cast<f_cnt_t>( m_startPointModel.value() *
- ( m_sampleBuffer.frames()-1 ) );
- const f_cnt_t f_end = static_cast<f_cnt_t>( m_endPointModel.value() *
- ( m_sampleBuffer.frames()-1 ) );
+ pointChanged();
+
+}
+
+void audioFileProcessor::endPointChanged( void )
+{
+ // same as start, for now
+ startPointChanged();
+
+}
+
+void audioFileProcessor::loopPointChanged( void )
+{
+
+ // check that loop point is between start-end points and not overlapping with endpoint
+ // ...and move start/end points ahead if loop point is moved over them
+ if( m_loopPointModel.value() >= m_endPointModel.value() )
+ {
+ m_endPointModel.setValue( m_loopPointModel.value() + 0.001f );
+ if( m_endPointModel.value() == 1.0f )
+ {
+ m_loopPointModel.setValue( 1.0f - 0.001f );
+ }
+ }
+
+ // nudge start point with loop
+ if( m_loopPointModel.value() < m_startPointModel.value() )
+ {
+ m_startPointModel.setValue( m_loopPointModel.value() );
+ }
+
+ pointChanged();
+}
+
+void audioFileProcessor::pointChanged( void )
+{
+ const f_cnt_t f_start = static_cast<f_cnt_t>( m_startPointModel.value() * ( m_sampleBuffer.frames()-1 ) );
+ const f_cnt_t f_end = static_cast<f_cnt_t>( m_endPointModel.value() * ( m_sampleBuffer.frames()-1 ) );
+ const f_cnt_t f_loop = static_cast<f_cnt_t>( m_loopPointModel.value() * ( m_sampleBuffer.frames()-1 ) );
+
m_nextPlayStartPoint = f_start;
- m_sampleBuffer.setStartFrame( f_start );
- m_sampleBuffer.setEndFrame( f_end );
+ m_nextPlayBackwards = false;
+
+ m_sampleBuffer.setAllPointFrames( f_start, f_end, f_loop, f_end );
emit dataChanged();
}
+
+
QPixmap * AudioFileProcessorView::s_artwork = NULL;
@@ -346,13 +459,13 @@ AudioFileProcessorView::AudioFileProcessorView( Instrument * _instrument,
m_openAudioFileButton->setWhatsThis(
tr( "Click here, if you want to open another audio-file. "
"A dialog will appear where you can select your file. "
- "Settings like looping-mode, start and end-points, "
+ "Settings like looping-mode, start and end-points, "
"amplify-value, and so on are not reset. So, it may not "
"sound like the original sample.") );
m_reverseButton = new pixmapButton( this );
m_reverseButton->setCheckable( TRUE );
- m_reverseButton->move( 174, 124 );
+ m_reverseButton->move( 164, 105 );
m_reverseButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap(
"reverse_on" ) );
m_reverseButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap(
@@ -363,25 +476,54 @@ AudioFileProcessorView::AudioFileProcessorView( Instrument * _instrument,
"This is useful for cool effects, e.g. a reversed "
"crash." ) );
- m_loopButton = new pixmapButton( this );
- m_loopButton->setCheckable( TRUE );
- m_loopButton->move( 200, 124 );
- m_loopButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap(
- "loop_on" ) );
- m_loopButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap(
- "loop_off" ) );
- toolTip::add( m_loopButton,
- tr( "Loop sample at start- and end-point" ) );
- m_loopButton->setWhatsThis(
- tr( "Here you can set, whether looping-mode is enabled. If "
- "enabled, AudioFileProcessor loops between start and "
- "end-points of a sample until the whole note is played. "
- "This is useful for things like string and choir "
- "samples." ) );
+// loop button group
+
+ pixmapButton * m_loopOffButton = new pixmapButton( this );
+ m_loopOffButton->setCheckable( TRUE );
+ m_loopOffButton->move( 190, 105 );
+ m_loopOffButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap(
+ "loop_off_on" ) );
+ m_loopOffButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap(
+ "loop_off_off" ) );
+ toolTip::add( m_loopOffButton, tr( "Disable loop" ) );
+ m_loopOffButton->setWhatsThis(
+ tr( "This button disables looping. "
+ "The sample plays only once from start to end. " ) );
+
+
+ pixmapButton * m_loopOnButton = new pixmapButton( this );
+ m_loopOnButton->setCheckable( TRUE );
+ m_loopOnButton->move( 190, 124 );
+ m_loopOnButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap(
+ "loop_on_on" ) );
+ m_loopOnButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap(
+ "loop_on_off" ) );
+ toolTip::add( m_loopOnButton, tr( "Enable loop" ) );
+ m_loopOnButton->setWhatsThis(
+ tr( "This button enables forwards-looping. "
+ "The sample loops between the end point and the loop point." ) );
+
+ pixmapButton * m_loopPingPongButton = new pixmapButton( this );
+ m_loopPingPongButton->setCheckable( TRUE );
+ m_loopPingPongButton->move( 216, 124 );
+ m_loopPingPongButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap(
+ "loop_pingpong_on" ) );
+ m_loopPingPongButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap(
+ "loop_pingpong_off" ) );
+ toolTip::add( m_loopPingPongButton, tr( "Enable loop" ) );
+ m_loopPingPongButton->setWhatsThis(
+ tr( "This button enables ping-pong-looping. "
+ "The sample loops backwards and forwards between the end point "
+ "and the loop point." ) );
+
+ m_loopGroup = new automatableButtonGroup( this );
+ m_loopGroup->addButton( m_loopOffButton );
+ m_loopGroup->addButton( m_loopOnButton );
+ m_loopGroup->addButton( m_loopPingPongButton );
m_stutterButton = new pixmapButton( this );
m_stutterButton->setCheckable( true );
- m_stutterButton->move( 226, 124 );
+ m_stutterButton->move( 164, 124 );
m_stutterButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap(
"stutter_on" ) );
m_stutterButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap(
@@ -398,8 +540,7 @@ AudioFileProcessorView::AudioFileProcessorView( Instrument * _instrument,
m_ampKnob = new knob( knobBright_26, this );
m_ampKnob->setVolumeKnob( TRUE );
- m_ampKnob->move( 17, 108 );
- m_ampKnob->setFixedSize( 37, 47 );
+ m_ampKnob->move( 5, 108 );
m_ampKnob->setHintText( tr( "Amplify:" )+" ", "%" );
m_ampKnob->setWhatsThis(
tr( "With this knob you can set the amplify ratio. When you "
@@ -408,31 +549,34 @@ AudioFileProcessorView::AudioFileProcessorView( Instrument * _instrument,
"actual sample-file isn't touched!)" ) );
m_startKnob = new AudioFileProcessorWaveView::knob( this );
- m_startKnob->move( 68, 108 );
+ m_startKnob->move( 45, 108 );
m_startKnob->setHintText( tr( "Startpoint:" )+" ", "" );
m_startKnob->setWhatsThis(
tr( "With this knob you can set the point where "
- "AudioFileProcessor should begin playing your sample. "
- "If you enable looping-mode, this is the point to "
- "which AudioFileProcessor returns if a note is longer "
- "than the sample between the start and end-points." ) );
+ "AudioFileProcessor should begin playing your sample. " ) );
m_endKnob = new AudioFileProcessorWaveView::knob( this );
- m_endKnob->move( 119, 108 );
+ m_endKnob->move( 125, 108 );
m_endKnob->setHintText( tr( "Endpoint:" )+" ", "" );
m_endKnob->setWhatsThis(
tr( "With this knob you can set the point where "
- "AudioFileProcessor should stop playing your sample. "
- "If you enable looping-mode, this is the point where "
- "AudioFileProcessor returns if a note is longer than "
- "the sample between the start and end-points." ) );
+ "AudioFileProcessor should stop playing your sample. " ) );
- m_waveView = new AudioFileProcessorWaveView( this, 245, 75, castModel<audioFileProcessor>()->m_sampleBuffer );
- m_waveView->move( 2, 172 );
- m_waveView->setKnobs(
- dynamic_cast<AudioFileProcessorWaveView::knob *>( m_startKnob ),
- dynamic_cast<AudioFileProcessorWaveView::knob *>( m_endKnob )
- );
+ m_loopKnob = new AudioFileProcessorWaveView::knob( this );
+ m_loopKnob->move( 85, 108 );
+ m_loopKnob->setHintText( tr( "Loopback point:" )+" ", "" );
+ m_loopKnob->setWhatsThis(
+ tr( "With this knob you can set the point where "
+ "the loop starts. " ) );
+
+// interpolation selector
+ m_interpBox = new comboBox( this );
+ m_interpBox->setGeometry( 142, 62, 82, 22 );
+ m_interpBox->setFont( pointSize<8>( m_interpBox->font() ) );
+
+// wavegraph
+ m_waveView = 0;
+ newWaveView();
connect( castModel<audioFileProcessor>(), SIGNAL( isPlaying( f_cnt_t ) ),
m_waveView, SLOT( isPlaying( f_cnt_t ) ) );
@@ -481,6 +625,25 @@ void AudioFileProcessorView::dragEnterEvent( QDragEnterEvent * _dee )
+void AudioFileProcessorView::newWaveView()
+{
+ if ( m_waveView )
+ {
+ delete m_waveView;
+ m_waveView = 0;
+ }
+ m_waveView = new AudioFileProcessorWaveView( this, 245, 75, castModel<audioFileProcessor>()->m_sampleBuffer );
+ m_waveView->move( 2, 172 );
+ m_waveView->setKnobs(
+ dynamic_cast<AudioFileProcessorWaveView::knob *>( m_startKnob ),
+ dynamic_cast<AudioFileProcessorWaveView::knob *>( m_endKnob ),
+ dynamic_cast<AudioFileProcessorWaveView::knob *>( m_loopKnob ) );
+ m_waveView->show();
+}
+
+
+
+
void AudioFileProcessorView::dropEvent( QDropEvent * _de )
{
QString type = stringPairDrag::decodeKey( _de );
@@ -489,6 +652,7 @@ void AudioFileProcessorView::dropEvent( QDropEvent * _de )
{
castModel<audioFileProcessor>()->setAudioFile( value );
_de->accept();
+ newWaveView();
return;
}
else if( type == QString( "tco_%1" ).arg( track::SampleTrack ) )
@@ -542,6 +706,7 @@ void AudioFileProcessorView::paintEvent( QPaintEvent * )
void AudioFileProcessorView::sampleUpdated( void )
{
+ newWaveView();
m_waveView->update();
update();
}
@@ -558,6 +723,7 @@ void AudioFileProcessorView::openAudioFile( void )
{
castModel<audioFileProcessor>()->setAudioFile( af );
engine::getSong()->setModified();
+ newWaveView();
}
}
@@ -572,9 +738,11 @@ void AudioFileProcessorView::modelChanged( void )
m_ampKnob->setModel( &a->m_ampModel );
m_startKnob->setModel( &a->m_startPointModel );
m_endKnob->setModel( &a->m_endPointModel );
+ m_loopKnob->setModel( &a->m_loopPointModel );
m_reverseButton->setModel( &a->m_reverseModel );
- m_loopButton->setModel( &a->m_loopModel );
+ m_loopGroup->setModel( &a->m_loopModel );
m_stutterButton->setModel( &a->m_stutterModel );
+ m_interpBox->setModel( &a->m_interpolationModel );
sampleUpdated();
}
@@ -589,8 +757,10 @@ AudioFileProcessorWaveView::AudioFileProcessorWaveView( QWidget * _parent, int _
m_to( m_sampleBuffer.frames() ),
m_last_from( 0 ),
m_last_to( 0 ),
+ m_last_amp( 0 ),
m_startKnob( 0 ),
m_endKnob( 0 ),
+ m_loopKnob( 0 ),
m_isDragging( false ),
m_reversed( false ),
m_framesPlayed( 0 ),
@@ -606,23 +776,16 @@ AudioFileProcessorWaveView::AudioFileProcessorWaveView( QWidget * _parent, int _
m_to = qMin( m_sampleBuffer.endFrame() + marging, m_sampleBuffer.frames() );
}
+ m_graph.fill( Qt::transparent );
update();
}
-void AudioFileProcessorWaveView::isPlaying( f_cnt_t _frames_played )
+void AudioFileProcessorWaveView::isPlaying( f_cnt_t _current_frame )
{
- const f_cnt_t nb_frames = m_sampleBuffer.endFrame() - m_sampleBuffer.startFrame();
- if( nb_frames < 1 )
- {
- m_framesPlayed = 0;
- }
- else
- {
- m_framesPlayed = _frames_played % nb_frames;
- }
+ m_framesPlayed = _current_frame;
update();
}
@@ -653,13 +816,19 @@ void AudioFileProcessorWaveView::mousePressEvent( QMouseEvent * _me )
m_isDragging = true;
m_draggingLastPoint = _me->pos();
- if( isCloseTo( _me->x(), m_startFrameX ) )
- {
- m_draggingType = sample_start;
- }
- else if( isCloseTo( _me->x(), m_endFrameX ) )
+ const int x = _me->x();
+
+ const int start_dist = qAbs( m_startFrameX - x );
+ const int end_dist = qAbs( m_endFrameX - x );
+ const int loop_dist = qAbs( m_loopFrameX - x );
+
+ draggingType dt = sample_loop; int md = loop_dist;
+ if( start_dist < loop_dist ) { dt = sample_start; md = start_dist; }
+ else if( end_dist < loop_dist ) { dt = sample_end; md = end_dist; }
+
+ if( md < 4 )
{
- m_draggingType = sample_end;
+ m_draggingType = dt;
}
else
{
@@ -691,7 +860,8 @@ void AudioFileProcessorWaveView::mouseMoveEvent( QMouseEvent * _me )
QApplication::overrideCursor()->shape() == Qt::SizeHorCursor;
if( isCloseTo( _me->x(), m_startFrameX ) ||
- isCloseTo( _me->x(), m_endFrameX ) )
+ isCloseTo( _me->x(), m_endFrameX ) ||
+ isCloseTo( _me->x(), m_loopFrameX ) )
{
if( ! is_size_cursor )
{
@@ -714,6 +884,10 @@ void AudioFileProcessorWaveView::mouseMoveEvent( QMouseEvent * _me )
case sample_end:
slideSamplePointByPx( end, step );
break;
+ case sample_loop:
+ slideSamplePointByPx( loop, step );
+ break;
+ case wave:
default:
if( qAbs( _me->y() - m_draggingLastPoint.y() )
< 2 * qAbs( _me->x() - m_draggingLastPoint.x() ) )
@@ -748,14 +922,25 @@ void AudioFileProcessorWaveView::paintEvent( QPaintEvent * _pe )
p.drawPixmap( s_padding, s_padding, m_graph );
- p.setPen( QColor( 0xFF, 0xFF, 0xFF ) );
const QRect graph_rect( s_padding, s_padding, width() - 2 * s_padding, height() - 2 * s_padding );
const f_cnt_t frames = m_to - m_from;
m_startFrameX = graph_rect.x() + ( m_sampleBuffer.startFrame() - m_from ) *
double( graph_rect.width() ) / frames;
m_endFrameX = graph_rect.x() + ( m_sampleBuffer.endFrame() - m_from ) *
double( graph_rect.width() ) / frames;
+ m_loopFrameX = graph_rect.x() + ( m_sampleBuffer.loopStartFrame() - m_from ) *
+ double( graph_rect.width() ) / frames;
+ const int played_width_px = ( m_framesPlayed - m_from ) *
+ double( graph_rect.width() ) / frames;
+ // loop point line
+ p.setPen( QColor( 0x7F, 0xFF, 0xFF ) ); //TODO: put into a qproperty
+ p.drawLine( m_loopFrameX, graph_rect.y(),
+ m_loopFrameX,
+ graph_rect.height() + graph_rect.y() );
+
+ // start/end lines
+ p.setPen( QColor( 0xFF, 0xFF, 0xFF ) ); //TODO: put into a qproperty
p.drawLine( m_startFrameX, graph_rect.y(),
m_startFrameX,
graph_rect.height() + graph_rect.y() );
@@ -763,6 +948,7 @@ void AudioFileProcessorWaveView::paintEvent( QPaintEvent * _pe )
m_endFrameX,
graph_rect.height() + graph_rect.y() );
+
if( m_endFrameX - m_startFrameX > 2 )
{
p.fillRect(
@@ -770,31 +956,36 @@ void AudioFileProcessorWaveView::paintEvent( QPaintEvent * _pe )
graph_rect.y(),
m_endFrameX - m_startFrameX - 1,
graph_rect.height() + graph_rect.y(),
- QColor( 95, 195, 255, 70 )
+ QColor( 95, 175, 255, 50 ) //TODO: put into a qproperty
+ );
+ if( m_endFrameX - m_loopFrameX > 2 )
+ p.fillRect(
+ m_loopFrameX + 1,
+ graph_rect.y(),
+ m_endFrameX - m_loopFrameX - 1,
+ graph_rect.height() + graph_rect.y(),
+ QColor( 95, 205, 255, 65 ) //TODO: put into a qproperty
);
if( m_framesPlayed && m_animation)
{
- const int played_width_px = m_framesPlayed
- / double( m_sampleBuffer.endFrame() - m_sampleBuffer.startFrame() )
- * ( m_endFrameX - m_startFrameX );
- QLinearGradient g( m_startFrameX + 1, 0, m_startFrameX + 1 + played_width_px, 0 );
- const QColor c( 0, 120, 255, 180 );
+ QLinearGradient g( m_startFrameX, 0, played_width_px, 0 );
+ const QColor c( 0, 120, 255, 180 ); //TODO: put into a qproperty
g.setColorAt( 0, Qt::transparent );
g.setColorAt( 0.8, c );
g.setColorAt( 1, c );
p.fillRect(
m_startFrameX + 1,
graph_rect.y(),
- played_width_px,
+ played_width_px - ( m_startFrameX + 1 ),
graph_rect.height() + graph_rect.y(),
g
);
- p.setPen( QColor( 255, 255, 255 ) );
+ p.setPen( QColor( 255, 255, 255 ) ); //TODO: put into a qproperty
p.drawLine(
- m_startFrameX + 1 + played_width_px,
+ played_width_px,
graph_rect.y(),
- m_startFrameX + 1 + played_width_px,
+ played_width_px,
graph_rect.height() + graph_rect.y()
);
m_framesPlayed = 0;
@@ -859,17 +1050,19 @@ void AudioFileProcessorWaveView::updateGraph()
{
reverse();
}
- else if( m_last_from == m_from && m_last_to == m_to )
+ else if( m_last_from == m_from && m_last_to == m_to && m_sampleBuffer.amplification() == m_last_amp )
{
return;
}
m_last_from = m_from;
m_last_to = m_to;
+ m_last_amp = m_sampleBuffer.amplification();
m_graph.fill( Qt::transparent );
QPainter p( &m_graph );
p.setPen( QColor( 255, 255, 255 ) );
+
m_sampleBuffer.visualize(
p,
QRect( 0, 0, m_graph.width(), m_graph.height() ),
@@ -949,16 +1142,19 @@ void AudioFileProcessorWaveView::slide( int _px )
-void AudioFileProcessorWaveView::setKnobs( knob * _start, knob * _end )
+void AudioFileProcessorWaveView::setKnobs( knob * _start, knob * _end, knob * _loop )
{
m_startKnob = _start;
m_endKnob = _end;
+ m_loopKnob = _loop;
m_startKnob->setWaveView( this );
m_startKnob->setRelatedKnob( m_endKnob );
m_endKnob->setWaveView( this );
m_endKnob->setRelatedKnob( m_startKnob );
+
+ m_loopKnob->setWaveView( this );
}
@@ -977,20 +1173,33 @@ void AudioFileProcessorWaveView::slideSamplePointByPx( knobType _point, int _px
void AudioFileProcessorWaveView::slideSamplePointByFrames( knobType _point, f_cnt_t _frames, bool _slide_to )
{
- knob * a_knob = _point == start ? m_startKnob : m_endKnob;
- if( ! a_knob )
+ knob * a_knob = m_startKnob;
+ switch( _point )
{
- return;
+ case end:
+ a_knob = m_endKnob;
+ break;
+ case loop:
+ a_knob = m_loopKnob;
+ break;
+ case start:
+ break;
}
-
- const double v = double( _frames ) / m_sampleBuffer.frames();
- if( _slide_to )
+ if( a_knob == NULL )
{
- a_knob->slideTo( v );
+ return;
}
else
{
- a_knob->slideBy( v );
+ const double v = static_cast<double>( _frames ) / m_sampleBuffer.frames();
+ if( _slide_to )
+ {
+ a_knob->slideTo( v );
+ }
+ else
+ {
+ a_knob->slideBy( v );
+ }
}
}
@@ -1003,13 +1212,16 @@ void AudioFileProcessorWaveView::slideSampleByFrames( f_cnt_t _frames )
{
return;
}
- const double v = double( _frames ) / m_sampleBuffer.frames();
- if(m_startKnob) {
+ const double v = static_cast<double>( _frames ) / m_sampleBuffer.frames();
+ if( m_startKnob ) {
m_startKnob->slideBy( v, false );
}
- if(m_endKnob) {
+ if( m_endKnob ) {
m_endKnob->slideBy( v, false );
}
+ if( m_loopKnob ) {
+ m_loopKnob->slideBy( v, false );
+ }
}
@@ -1065,7 +1277,7 @@ bool AudioFileProcessorWaveView::knob::checkBound( double _v ) const
{
return true;
}
-
+
if( ( m_relatedKnob->model()->value() - _v > 0 ) !=
( m_relatedKnob->model()->value() - model()->value() >= 0 ) )
return false;
diff --git a/plugins/audio_file_processor/audio_file_processor.h b/plugins/audio_file_processor/audio_file_processor.h
index b1d21c2..6ec9bc0 100644
--- a/plugins/audio_file_processor/audio_file_processor.h
+++ b/plugins/audio_file_processor/audio_file_processor.h
@@ -3,8 +3,8 @@
* (instrument-plugin for using audio-files)
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,8 +24,8 @@
*/
-#ifndef _AUDIO_FILE_PROCESSOR_H
-#define _AUDIO_FILE_PROCESSOR_H
+#ifndef AUDIO_FILE_PROCESSOR_H
+#define AUDIO_FILE_PROCESSOR_H
#include <QtGui/QPixmap>
@@ -34,7 +34,8 @@
#include "SampleBuffer.h"
#include "knob.h"
#include "pixmap_button.h"
-
+#include "automatable_button.h"
+#include "combobox.h"
class audioFileProcessor : public Instrument
@@ -44,7 +45,7 @@ public:
audioFileProcessor( InstrumentTrack * _instrument_track );
virtual ~audioFileProcessor();
- virtual void playNote( NotePlayHandle * _n,
+ virtual void playNote( NotePlayHandle * _n,
sampleFrame * _working_buffer );
virtual void deleteNotePluginData( NotePlayHandle * _n );
@@ -74,26 +75,32 @@ private slots:
void reverseModelChanged();
void ampModelChanged();
void loopPointChanged();
+ void startPointChanged();
+ void endPointChanged();
+ void pointChanged();
void stutterModelChanged();
signals:
- void isPlaying( f_cnt_t _frames_played );
+ void isPlaying( f_cnt_t _current_frame );
private:
typedef SampleBuffer::handleState handleState;
SampleBuffer m_sampleBuffer;
-
+
FloatModel m_ampModel;
FloatModel m_startPointModel;
FloatModel m_endPointModel;
+ FloatModel m_loopPointModel;
BoolModel m_reverseModel;
- BoolModel m_loopModel;
+ IntModel m_loopModel;
BoolModel m_stutterModel;
+ ComboBoxModel m_interpolationModel;
f_cnt_t m_nextPlayStartPoint;
+ bool m_nextPlayBackwards;
friend class AudioFileProcessorView;
@@ -111,7 +118,7 @@ public:
AudioFileProcessorView( Instrument * _instrument, QWidget * _parent );
virtual ~AudioFileProcessorView();
-
+ void newWaveView();
protected slots:
void sampleUpdated();
void openAudioFile();
@@ -132,10 +139,13 @@ private:
knob * m_ampKnob;
knob * m_startKnob;
knob * m_endKnob;
+ knob * m_loopKnob;
+
pixmapButton * m_openAudioFileButton;
pixmapButton * m_reverseButton;
- pixmapButton * m_loopButton;
+ automatableButtonGroup * m_loopGroup;
pixmapButton * m_stutterButton;
+ comboBox * m_interpBox;
} ;
@@ -159,6 +169,7 @@ public:
{
start,
end,
+ loop
} ;
class knob : public ::knob
@@ -211,7 +222,7 @@ public slots:
QWidget::update();
}
- void isPlaying( f_cnt_t _frames_played );
+ void isPlaying( f_cnt_t _current_frame );
private:
@@ -222,6 +233,7 @@ private:
wave,
sample_start,
sample_end,
+ sample_loop
} ;
SampleBuffer& m_sampleBuffer;
@@ -230,10 +242,13 @@ private:
f_cnt_t m_to;
f_cnt_t m_last_from;
f_cnt_t m_last_to;
+ float m_last_amp;
knob * m_startKnob;
knob * m_endKnob;
+ knob * m_loopKnob;
f_cnt_t m_startFrameX;
f_cnt_t m_endFrameX;
+ f_cnt_t m_loopFrameX;
bool m_isDragging;
QPoint m_draggingLastPoint;
draggingType m_draggingType;
@@ -243,7 +258,7 @@ private:
public:
AudioFileProcessorWaveView( QWidget * _parent, int _w, int _h, SampleBuffer& buf );
- void setKnobs( knob * _start, knob * _end );
+ void setKnobs( knob * _start, knob * _end, knob * _loop );
private:
@@ -263,7 +278,7 @@ private:
static bool isCloseTo( int _a, int _b )
{
- return qAbs( _a - _b ) < 3;
+ return qAbs( _a - _b ) < 4;
}
} ;
diff --git a/plugins/audio_file_processor/loop_off_off.png b/plugins/audio_file_processor/loop_off_off.png
new file mode 100644
index 0000000..645f75e
Binary files /dev/null and b/plugins/audio_file_processor/loop_off_off.png differ
diff --git a/plugins/audio_file_processor/loop_off_on.png b/plugins/audio_file_processor/loop_off_on.png
new file mode 100644
index 0000000..210d7bc
Binary files /dev/null and b/plugins/audio_file_processor/loop_off_on.png differ
diff --git a/plugins/audio_file_processor/loop_off.png b/plugins/audio_file_processor/loop_on_off.png
similarity index 100%
rename from plugins/audio_file_processor/loop_off.png
rename to plugins/audio_file_processor/loop_on_off.png
diff --git a/plugins/audio_file_processor/loop_on.png b/plugins/audio_file_processor/loop_on_on.png
similarity index 100%
rename from plugins/audio_file_processor/loop_on.png
rename to plugins/audio_file_processor/loop_on_on.png
diff --git a/plugins/audio_file_processor/loop_pingpong_off.png b/plugins/audio_file_processor/loop_pingpong_off.png
new file mode 100644
index 0000000..4308ca3
Binary files /dev/null and b/plugins/audio_file_processor/loop_pingpong_off.png differ
diff --git a/plugins/audio_file_processor/loop_pingpong_on.png b/plugins/audio_file_processor/loop_pingpong_on.png
new file mode 100644
index 0000000..ddd6913
Binary files /dev/null and b/plugins/audio_file_processor/loop_pingpong_on.png differ
diff --git a/plugins/audio_file_processor/moc_audio_file_processor.cxx_parameters b/plugins/audio_file_processor/moc_audio_file_processor.cxx_parameters
deleted file mode 100644
index be43091..0000000
--- a/plugins/audio_file_processor/moc_audio_file_processor.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/audio_file_processor
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=audiofileprocessor
--o
-/home/lukas/src/lmms/plugins/audio_file_processor/moc_audio_file_processor.cxx
-/home/lukas/src/lmms/plugins/audio_file_processor/audio_file_processor.h
diff --git a/plugins/bit_invader/bit_invader.cpp b/plugins/bit_invader/bit_invader.cpp
index 852115a..718d7dd 100644
--- a/plugins/bit_invader/bit_invader.cpp
+++ b/plugins/bit_invader/bit_invader.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Andreas Brandmaier <andy/at/brandmaier/dot/de>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -26,6 +26,7 @@
#include <QtXml/QDomElement>
#include "bit_invader.h"
+#include "base64.h"
#include "engine.h"
#include "graph.h"
#include "InstrumentTrack.h"
@@ -37,6 +38,7 @@
#include "templates.h"
#include "tooltip.h"
#include "song.h"
+#include "interpolation.h"
#include "embed.cpp"
@@ -108,9 +110,9 @@ sample_t bSynth::nextStringSample()
}
// Nachkommaanteil
- float frac = sample_realindex - static_cast<int>(sample_realindex);
+ const float frac = fraction( sample_realindex );
- sample = sample_shape[a]*(1-frac) + sample_shape[b]*(frac);
+ sample = linearInterpolate( sample_shape[a], sample_shape[b], frac );
} else {
// No interpolation
diff --git a/plugins/bit_invader/bit_invader.h b/plugins/bit_invader/bit_invader.h
index 9aa8c8d..e7fff61 100644
--- a/plugins/bit_invader/bit_invader.h
+++ b/plugins/bit_invader/bit_invader.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2008 Andreas Brandmaier <andy/at/brandmaier/dot/de>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/bit_invader/moc_bit_invader.cxx_parameters b/plugins/bit_invader/moc_bit_invader.cxx_parameters
deleted file mode 100644
index 33e4aa0..0000000
--- a/plugins/bit_invader/moc_bit_invader.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/bit_invader
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=bitinvader
--o
-/home/lukas/src/lmms/plugins/bit_invader/moc_bit_invader.cxx
-/home/lukas/src/lmms/plugins/bit_invader/bit_invader.h
diff --git a/plugins/carlabase/CMakeLists.txt b/plugins/carlabase/CMakeLists.txt
new file mode 100644
index 0000000..ca6ab5f
--- /dev/null
+++ b/plugins/carlabase/CMakeLists.txt
@@ -0,0 +1,12 @@
+if(LMMS_HAVE_CARLA)
+ INCLUDE(BuildPlugin)
+ INCLUDE_DIRECTORIES(${CARLA_INCLUDE_DIRS})
+ LINK_DIRECTORIES(${CARLA_LIBRARY_DIRS})
+ LINK_LIBRARIES(${CARLA_LIBRARIES})
+ BUILD_PLUGIN(carlabase carla.cpp carla.h MOCFILES carla.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+ SET_TARGET_PROPERTIES(carlabase
+ PROPERTIES SKIP_BUILD_RPATH TRUE
+ BUILD_WITH_INSTALL_RPATH TRUE
+ INSTALL_RPATH_USE_LINK_PATH TRUE
+ INSTALL_RPATH "${CARLA_RPATH}")
+endif(LMMS_HAVE_CARLA)
diff --git a/plugins/carlabase/artwork-patchbay.png b/plugins/carlabase/artwork-patchbay.png
new file mode 100644
index 0000000..4c6011c
Binary files /dev/null and b/plugins/carlabase/artwork-patchbay.png differ
diff --git a/plugins/carlabase/artwork-rack.png b/plugins/carlabase/artwork-rack.png
new file mode 100644
index 0000000..1a5b48a
Binary files /dev/null and b/plugins/carlabase/artwork-rack.png differ
diff --git a/plugins/carlabase/carla.cpp b/plugins/carlabase/carla.cpp
new file mode 100644
index 0000000..db14178
--- /dev/null
+++ b/plugins/carlabase/carla.cpp
@@ -0,0 +1,530 @@
+/*
+ * carla.cpp - Carla for LMMS
+ *
+ * Copyright (C) 2014 Filipe Coelho <falktx at falktx.com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "carla.h"
+
+#define REAL_BUILD // FIXME this shouldn't be needed
+#include "CarlaHost.h"
+
+#include "engine.h"
+#include "song.h"
+#include "gui_templates.h"
+#include "InstrumentPlayHandle.h"
+#include "InstrumentTrack.h"
+
+#include <QApplication>
+#include <QFileDialog>
+#include <QPushButton>
+#include <QTimerEvent>
+#include <QVBoxLayout>
+
+#include <cstring>
+
+#include "embed.cpp"
+
+// this doesn't seem to be defined anywhere
+static const double ticksPerBeat = 48.0;
+
+/*
+ * Current TODO items:
+ * - get plugin instance name (to use in external window title)
+ * - offline mode change callback
+ * - midi output
+ *
+ * All other items are to be done in Carla itself.
+ */
+
+// -----------------------------------------------------------------------
+
+#define handlePtr ((CarlaInstrument*)handle)
+
+static uint32_t host_get_buffer_size(NativeHostHandle handle)
+{
+ return handlePtr->handleGetBufferSize();
+}
+
+static double host_get_sample_rate(NativeHostHandle handle)
+{
+ return handlePtr->handleGetSampleRate();
+}
+
+static bool host_is_offline(NativeHostHandle handle)
+{
+ return handlePtr->handleIsOffline();
+}
+
+static const NativeTimeInfo* host_get_time_info(NativeHostHandle handle)
+{
+ return handlePtr->handleGetTimeInfo();
+}
+
+static bool host_write_midi_event(NativeHostHandle, const NativeMidiEvent*)
+{
+ return false; // unsupported?
+}
+
+static void host_ui_parameter_changed(NativeHostHandle handle, uint32_t index, float value)
+{
+ handlePtr->handleUiParameterChanged(index, value);
+}
+
+static void host_ui_custom_data_changed(NativeHostHandle handle, const char* key, const char* value)
+{
+ // unused
+}
+
+static void host_ui_closed(NativeHostHandle handle)
+{
+ handlePtr->handleUiClosed();
+}
+
+static intptr_t host_dispatcher(NativeHostHandle handle, NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt)
+{
+ return handlePtr->handleDispatcher(opcode, index, value, ptr, opt);
+}
+
+#undef handlePtr
+
+// -----------------------------------------------------------------------
+
+static const char* host_ui_open_file(NativeHostHandle, bool isDir, const char* title, const char* filter)
+{
+ static QByteArray retStr;
+ const QFileDialog::Options options(isDir ? QFileDialog::ShowDirsOnly : 0x0);
+
+ retStr = QFileDialog::getOpenFileName(QApplication::activeWindow(), title, "", filter, NULL, options).toUtf8();
+
+ return retStr.isEmpty() ? NULL : retStr.constData();
+}
+
+static const char* host_ui_save_file(NativeHostHandle, bool isDir, const char* title, const char* filter)
+{
+ static QByteArray retStr;
+ const QFileDialog::Options options(isDir ? QFileDialog::ShowDirsOnly : 0x0);
+
+ retStr = QFileDialog::getSaveFileName(QApplication::activeWindow(), title, "", filter, NULL, options).toUtf8();
+
+ return retStr.isEmpty() ? NULL : retStr.constData();
+}
+
+// -----------------------------------------------------------------------
+
+CARLA_EXPORT
+const NativePluginDescriptor* carla_get_native_patchbay_plugin();
+
+CARLA_EXPORT
+const NativePluginDescriptor* carla_get_native_rack_plugin();
+
+// -----------------------------------------------------------------------
+
+CarlaInstrument::CarlaInstrument(InstrumentTrack* const instrumentTrack, const Descriptor* const descriptor, const bool isPatchbay)
+ : Instrument(instrumentTrack, descriptor),
+ kIsPatchbay(isPatchbay),
+ fHandle(NULL),
+ fDescriptor(isPatchbay ? carla_get_native_patchbay_plugin() : carla_get_native_rack_plugin()),
+ fMidiEventCount(0)
+{
+ fHost.handle = this;
+ fHost.uiName = NULL;
+ fHost.uiParentId = 0;
+
+ // figure out prefix from dll filename
+ QString dllName(carla_get_library_filename());
+
+#if defined(CARLA_OS_LINUX)
+ fHost.resourceDir = strdup(QString(dllName.split("/lib/carla")[0] + "/share/carla/resources/").toUtf8().constData());
+#else
+ fHost.resourceDir = NULL;
+#endif
+
+ fHost.get_buffer_size = host_get_buffer_size;
+ fHost.get_sample_rate = host_get_sample_rate;
+ fHost.is_offline = host_is_offline;
+ fHost.get_time_info = host_get_time_info;
+ fHost.write_midi_event = host_write_midi_event;
+ fHost.ui_parameter_changed = host_ui_parameter_changed;
+ fHost.ui_custom_data_changed = host_ui_custom_data_changed;
+ fHost.ui_closed = host_ui_closed;
+ fHost.ui_open_file = host_ui_open_file;
+ fHost.ui_save_file = host_ui_save_file;
+ fHost.dispatcher = host_dispatcher;
+
+ std::memset(&fTimeInfo, 0, sizeof(NativeTimeInfo));
+ fTimeInfo.bbt.valid = true; // always valid
+
+ fHandle = fDescriptor->instantiate(&fHost);
+ Q_ASSERT(fHandle != NULL);
+
+ if (fHandle != NULL && fDescriptor->activate != NULL)
+ fDescriptor->activate(fHandle);
+
+ // we need a play-handle which cares for calling play()
+ InstrumentPlayHandle * iph = new InstrumentPlayHandle( this );
+ engine::mixer()->addPlayHandle( iph );
+
+ connect(engine::mixer(), SIGNAL(sampleRateChanged()), this, SLOT(sampleRateChanged()));
+}
+
+CarlaInstrument::~CarlaInstrument()
+{
+ engine::mixer()->removePlayHandles( instrumentTrack() );
+
+ if (fHost.resourceDir != NULL)
+ {
+ std::free((char*)fHost.resourceDir);
+ fHost.resourceDir = NULL;
+ }
+
+ if (fHost.uiName != NULL)
+ {
+ std::free((char*)fHost.uiName);
+ fHost.uiName = NULL;
+ }
+
+ if (fHandle == NULL)
+ return;
+
+ if (fDescriptor->deactivate != NULL)
+ fDescriptor->deactivate(fHandle);
+
+ if (fDescriptor->cleanup != NULL)
+ fDescriptor->cleanup(fHandle);
+
+ fHandle = NULL;
+}
+
+// -------------------------------------------------------------------
+
+uint32_t CarlaInstrument::handleGetBufferSize() const
+{
+ return engine::mixer()->framesPerPeriod();
+}
+
+double CarlaInstrument::handleGetSampleRate() const
+{
+ return engine::mixer()->processingSampleRate();
+}
+
+bool CarlaInstrument::handleIsOffline() const
+{
+ return false; // TODO
+}
+
+const NativeTimeInfo* CarlaInstrument::handleGetTimeInfo() const
+{
+ return &fTimeInfo;
+}
+
+void CarlaInstrument::handleUiParameterChanged(const uint32_t /*index*/, const float /*value*/) const
+{
+}
+
+void CarlaInstrument::handleUiClosed()
+{
+ emit uiClosed();
+}
+
+intptr_t CarlaInstrument::handleDispatcher(const NativeHostDispatcherOpcode opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt)
+{
+ intptr_t ret = 0;
+
+ switch (opcode)
+ {
+ case NATIVE_HOST_OPCODE_NULL:
+ break;
+ case NATIVE_HOST_OPCODE_UPDATE_PARAMETER:
+ case NATIVE_HOST_OPCODE_UPDATE_MIDI_PROGRAM:
+ case NATIVE_HOST_OPCODE_RELOAD_PARAMETERS:
+ case NATIVE_HOST_OPCODE_RELOAD_MIDI_PROGRAMS:
+ case NATIVE_HOST_OPCODE_RELOAD_ALL:
+ // nothing
+ break;
+ case NATIVE_HOST_OPCODE_UI_UNAVAILABLE:
+ handleUiClosed();
+ break;
+ }
+
+ return ret;
+
+ // unused for now
+ (void)index; (void)value; (void)ptr; (void)opt;
+}
+
+// -------------------------------------------------------------------
+
+Instrument::Flags CarlaInstrument::flags() const
+{
+ return IsSingleStreamed|IsMidiBased|IsNotBendable;
+}
+
+QString CarlaInstrument::nodeName() const
+{
+ return descriptor()->name;
+}
+
+void CarlaInstrument::saveSettings(QDomDocument& doc, QDomElement& parent)
+{
+ if (fHandle == NULL || fDescriptor->get_state == NULL)
+ return;
+
+ char* const state = fDescriptor->get_state(fHandle);
+
+ if (state == NULL)
+ return;
+
+ QDomDocument carlaDoc("carla");
+
+ if (carlaDoc.setContent(QString(state)))
+ {
+ QDomNode n = doc.importNode(carlaDoc.documentElement(), true);
+ parent.appendChild(n);
+ }
+
+ std::free(state);
+}
+
+void CarlaInstrument::loadSettings(const QDomElement& elem)
+{
+ if (fHandle == NULL || fDescriptor->set_state == NULL)
+ return;
+
+ QDomDocument carlaDoc("carla");
+ carlaDoc.appendChild(carlaDoc.importNode(elem.firstChildElement(), true ));
+
+ fDescriptor->set_state(fHandle, carlaDoc.toString(0).toUtf8().constData());
+}
+
+void CarlaInstrument::play(sampleFrame* workingBuffer)
+{
+ const uint bufsize = engine::mixer()->framesPerPeriod();
+
+ std::memset(workingBuffer, 0, sizeof(sample_t)*bufsize*DEFAULT_CHANNELS);
+
+ if (fHandle == NULL)
+ {
+ instrumentTrack()->processAudioBuffer(workingBuffer, bufsize, NULL);
+ return;
+ }
+
+ // set time info
+ song* const s = engine::getSong();
+ fTimeInfo.playing = s->isPlaying();
+ fTimeInfo.frame = s->getPlayPos(s->playMode()).frames(engine::framesPerTick());
+ fTimeInfo.usecs = s->getMilliseconds()*1000;
+ fTimeInfo.bbt.bar = s->getTacts() + 1;
+ fTimeInfo.bbt.beat = s->getBeat() + 1;
+ fTimeInfo.bbt.tick = s->getBeatTicks();
+ fTimeInfo.bbt.barStartTick = ticksPerBeat*s->getTimeSigModel().getNumerator()*s->getTacts();
+ fTimeInfo.bbt.beatsPerBar = s->getTimeSigModel().getNumerator();
+ fTimeInfo.bbt.beatType = s->getTimeSigModel().getDenominator();
+ fTimeInfo.bbt.ticksPerBeat = ticksPerBeat;
+ fTimeInfo.bbt.beatsPerMinute = s->getTempo();
+
+ float buf1[bufsize];
+ float buf2[bufsize];
+ float* rBuf[] = { buf1, buf2 };
+ std::memset(buf1, 0, sizeof(float)*bufsize);
+ std::memset(buf2, 0, sizeof(float)*bufsize);
+
+ {
+ const QMutexLocker ml(&fMutex);
+ fDescriptor->process(fHandle, rBuf, rBuf, bufsize, fMidiEvents, fMidiEventCount);
+ fMidiEventCount = 0;
+ }
+
+ for (uint i=0; i < bufsize; ++i)
+ {
+ workingBuffer[i][0] = buf1[i];
+ workingBuffer[i][1] = buf2[i];
+ }
+
+ instrumentTrack()->processAudioBuffer(workingBuffer, bufsize, NULL);
+}
+
+bool CarlaInstrument::handleMidiEvent(const MidiEvent& event, const MidiTime&, f_cnt_t offset)
+{
+ const QMutexLocker ml(&fMutex);
+
+ if (fMidiEventCount >= kMaxMidiEvents)
+ return false;
+
+ NativeMidiEvent& nEvent(fMidiEvents[fMidiEventCount++]);
+ std::memset(&nEvent, 0, sizeof(NativeMidiEvent));
+
+ nEvent.port = 0;
+ nEvent.time = offset;
+ nEvent.data[0] = event.type() | (event.channel() & 0x0F);
+
+ switch (event.type())
+ {
+ case MidiNoteOn:
+ if (event.velocity() > 0)
+ {
+ if (event.key() < 0 || event.key() > MidiMaxKey)
+ break;
+
+ nEvent.data[1] = event.key();
+ nEvent.data[2] = event.velocity();
+ nEvent.size = 3;
+ break;
+ }
+ else
+ {
+ nEvent.data[0] = MidiNoteOff | (event.channel() & 0x0F);
+ // nobreak
+ }
+
+ case MidiNoteOff:
+ if (event.key() < 0 || event.key() > MidiMaxKey)
+ break;
+
+ nEvent.data[1] = event.key();
+ nEvent.data[2] = event.velocity();
+ nEvent.size = 3;
+ break;
+
+ case MidiKeyPressure:
+ nEvent.data[1] = event.key();
+ nEvent.data[2] = event.velocity();
+ nEvent.size = 3;
+ break;
+
+ case MidiControlChange:
+ nEvent.data[1] = event.controllerNumber();
+ nEvent.data[2] = event.controllerValue();
+ nEvent.size = 3;
+ break;
+
+ case MidiProgramChange:
+ nEvent.data[1] = event.program();
+ nEvent.size = 2;
+ break;
+
+ case MidiChannelPressure:
+ nEvent.data[1] = event.channelPressure();
+ nEvent.size = 2;
+ break;
+
+ case MidiPitchBend:
+ nEvent.data[1] = event.pitchBend() & 0x7f;
+ nEvent.data[2] = event.pitchBend() >> 7;
+ nEvent.size = 3;
+ break;
+
+ default:
+ // unhandled
+ --fMidiEventCount;
+ break;
+ }
+
+ return true;
+}
+
+PluginView* CarlaInstrument::instantiateView(QWidget* parent)
+{
+ if (QWidget* const window = parent->window())
+ fHost.uiParentId = window->winId();
+ else
+ fHost.uiParentId = 0;
+
+ std::free((char*)fHost.uiName);
+
+ // TODO - get plugin instance name
+ //fHost.uiName = strdup(parent->windowTitle().toUtf8().constData());
+ fHost.uiName = strdup(kIsPatchbay ? "CarlaPatchbay-LMMS" : "CarlaRack-LMMS");
+
+ return new CarlaInstrumentView(this, parent);
+}
+
+void CarlaInstrument::sampleRateChanged()
+{
+ fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_SAMPLE_RATE_CHANGED, 0, 0, nullptr, handleGetSampleRate());
+}
+
+// -------------------------------------------------------------------
+
+CarlaInstrumentView::CarlaInstrumentView(CarlaInstrument* const instrument, QWidget* const parent)
+ : InstrumentView(instrument, parent),
+ fHandle(instrument->fHandle),
+ fDescriptor(instrument->fDescriptor),
+ fTimerId(fHandle != NULL && fDescriptor->ui_idle != NULL ? startTimer(30) : 0)
+{
+ setAutoFillBackground(true);
+
+ QPalette pal;
+ pal.setBrush(backgroundRole(), instrument->kIsPatchbay ? PLUGIN_NAME::getIconPixmap("artwork-patchbay") : PLUGIN_NAME::getIconPixmap("artwork-rack"));
+ setPalette(pal);
+
+ QVBoxLayout * l = new QVBoxLayout( this );
+ l->setContentsMargins( 20, 180, 10, 10 );
+ l->setSpacing( 10 );
+
+ m_toggleUIButton = new QPushButton( tr( "Show GUI" ), this );
+ m_toggleUIButton->setCheckable( true );
+ m_toggleUIButton->setChecked( false );
+ m_toggleUIButton->setIcon( embed::getIconPixmap( "zoom" ) );
+ m_toggleUIButton->setFont( pointSize<8>( m_toggleUIButton->font() ) );
+ connect( m_toggleUIButton, SIGNAL( clicked(bool) ), this, SLOT( toggleUI( bool ) ) );
+
+ m_toggleUIButton->setWhatsThis(
+ tr( "Click here to show or hide the graphical user interface (GUI) of Carla." ) );
+
+ l->addWidget( m_toggleUIButton );
+ l->addStretch();
+
+ connect(instrument, SIGNAL(uiClosed()), this, SLOT(uiClosed()));
+}
+
+CarlaInstrumentView::~CarlaInstrumentView()
+{
+ if (m_toggleUIButton->isChecked())
+ toggleUI(false);
+}
+
+void CarlaInstrumentView::toggleUI(bool visible)
+{
+ if (fHandle != NULL && fDescriptor->ui_show != NULL)
+ fDescriptor->ui_show(fHandle, visible);
+}
+
+void CarlaInstrumentView::uiClosed()
+{
+ m_toggleUIButton->setChecked(false);
+}
+
+void CarlaInstrumentView::modelChanged()
+{
+}
+
+void CarlaInstrumentView::timerEvent(QTimerEvent* event)
+{
+ if (event->timerId() == fTimerId)
+ fDescriptor->ui_idle(fHandle);
+
+ InstrumentView::timerEvent(event);
+}
+
+// -------------------------------------------------------------------
+
+#include "moc_carla.cxx"
diff --git a/plugins/carlabase/carla.h b/plugins/carlabase/carla.h
new file mode 100644
index 0000000..b757d09
--- /dev/null
+++ b/plugins/carlabase/carla.h
@@ -0,0 +1,109 @@
+/*
+ * carla.h - Carla for LMMS
+ *
+ * Copyright (C) 2014 Filipe Coelho <falktx at falktx.com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef CARLA_H
+#define CARLA_H
+
+#include "CarlaNative.h"
+
+#include "Instrument.h"
+#include "InstrumentView.h"
+
+class QPushButton;
+
+class PLUGIN_EXPORT CarlaInstrument : public Instrument
+{
+ Q_OBJECT
+
+public:
+ static const uint32_t kMaxMidiEvents = 512;
+
+ CarlaInstrument(InstrumentTrack* const instrumentTrack, const Descriptor* const descriptor, const bool isPatchbay);
+ virtual ~CarlaInstrument();
+
+ // CarlaNative functions
+ uint32_t handleGetBufferSize() const;
+ double handleGetSampleRate() const;
+ bool handleIsOffline() const;
+ const NativeTimeInfo* handleGetTimeInfo() const;
+ void handleUiParameterChanged(const uint32_t index, const float value) const;
+ void handleUiClosed();
+ intptr_t handleDispatcher(const NativeHostDispatcherOpcode opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt);
+
+ // LMMS functions
+ virtual Flags flags() const;
+ virtual QString nodeName() const;
+ virtual void saveSettings(QDomDocument& doc, QDomElement& parent);
+ virtual void loadSettings(const QDomElement& elem);
+ virtual void play(sampleFrame* workingBuffer);
+ virtual bool handleMidiEvent(const MidiEvent& event, const MidiTime& time, f_cnt_t offset);
+ virtual PluginView* instantiateView(QWidget* parent);
+
+signals:
+ void uiClosed();
+
+private slots:
+ void sampleRateChanged();
+
+private:
+ const bool kIsPatchbay;
+
+ NativePluginHandle fHandle;
+ NativeHostDescriptor fHost;
+ const NativePluginDescriptor* fDescriptor;
+
+ uint32_t fMidiEventCount;
+ NativeMidiEvent fMidiEvents[kMaxMidiEvents];
+ NativeTimeInfo fTimeInfo;
+
+ // this is only needed because note-offs are being sent during play
+ QMutex fMutex;
+
+ friend class CarlaInstrumentView;
+};
+
+class CarlaInstrumentView : public InstrumentView
+{
+ Q_OBJECT
+
+public:
+ CarlaInstrumentView(CarlaInstrument* const instrument, QWidget* const parent);
+ virtual ~CarlaInstrumentView();
+
+private slots:
+ void toggleUI(bool);
+ void uiClosed();
+
+private:
+ virtual void modelChanged();
+ virtual void timerEvent(QTimerEvent*);
+
+ NativePluginHandle fHandle;
+ const NativePluginDescriptor* fDescriptor;
+ int fTimerId;
+
+ QPushButton * m_toggleUIButton;
+};
+
+#endif
diff --git a/plugins/carlapatchbay/CMakeLists.txt b/plugins/carlapatchbay/CMakeLists.txt
new file mode 100644
index 0000000..878415e
--- /dev/null
+++ b/plugins/carlapatchbay/CMakeLists.txt
@@ -0,0 +1,8 @@
+if(LMMS_HAVE_CARLA)
+ ADD_DEFINITIONS(-DCARLA_PLUGIN_PATCHBAY -DCARLA_PLUGIN_SYNTH)
+ INCLUDE(BuildPlugin)
+ INCLUDE_DIRECTORIES(${CARLA_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/../carlabase")
+ LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/../carlabase")
+ LINK_LIBRARIES(carlabase)
+ BUILD_PLUGIN(carlapatchbay carlapatchbay.cpp EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+endif(LMMS_HAVE_CARLA)
diff --git a/plugins/carlapatchbay/carlapatchbay.cpp b/plugins/carlapatchbay/carlapatchbay.cpp
new file mode 100644
index 0000000..e405905
--- /dev/null
+++ b/plugins/carlapatchbay/carlapatchbay.cpp
@@ -0,0 +1,51 @@
+/*
+ * carlapatchbay.cpp - Carla for LMMS (Patchbay)
+ *
+ * Copyright (C) 2014 Filipe Coelho <falktx at falktx.com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "carla.h"
+
+#include "embed.cpp"
+
+extern "C"
+{
+
+Plugin::Descriptor PLUGIN_EXPORT carlapatchbay_plugin_descriptor =
+{
+ STRINGIFY( PLUGIN_NAME ),
+ "Carla Patchbay",
+ QT_TRANSLATE_NOOP( "pluginBrowser",
+ "Carla Patchbay Instrument" ),
+ "falkTX <falktx/at/falktx.com>",
+ 0x0195,
+ Plugin::Instrument,
+ new PluginPixmapLoader( "logo" ),
+ NULL,
+ NULL
+} ;
+
+Plugin* PLUGIN_EXPORT lmms_plugin_main(Model*, void* data)
+{
+ return new CarlaInstrument(static_cast<InstrumentTrack*>(data), &carlapatchbay_plugin_descriptor, true);
+}
+
+}
diff --git a/plugins/carlapatchbay/logo.png b/plugins/carlapatchbay/logo.png
new file mode 100644
index 0000000..353d5d7
Binary files /dev/null and b/plugins/carlapatchbay/logo.png differ
diff --git a/plugins/carlarack/CMakeLists.txt b/plugins/carlarack/CMakeLists.txt
new file mode 100644
index 0000000..2655fa8
--- /dev/null
+++ b/plugins/carlarack/CMakeLists.txt
@@ -0,0 +1,8 @@
+if(LMMS_HAVE_CARLA)
+ ADD_DEFINITIONS(-DCARLA_PLUGIN_RACK -DCARLA_PLUGIN_SYNTH)
+ INCLUDE(BuildPlugin)
+ INCLUDE_DIRECTORIES(${CARLA_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/../carlabase")
+ LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/../carlabase")
+ LINK_LIBRARIES(carlabase)
+ BUILD_PLUGIN(carlarack carlarack.cpp EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+endif(LMMS_HAVE_CARLA)
diff --git a/plugins/carlarack/carlarack.cpp b/plugins/carlarack/carlarack.cpp
new file mode 100644
index 0000000..c48b3f9
--- /dev/null
+++ b/plugins/carlarack/carlarack.cpp
@@ -0,0 +1,51 @@
+/*
+ * carlarack.cpp - Carla for LMMS (Rack)
+ *
+ * Copyright (C) 2014 Filipe Coelho <falktx at falktx.com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "carla.h"
+
+#include "embed.cpp"
+
+extern "C"
+{
+
+Plugin::Descriptor PLUGIN_EXPORT carlarack_plugin_descriptor =
+{
+ STRINGIFY( PLUGIN_NAME ),
+ "Carla Rack",
+ QT_TRANSLATE_NOOP( "pluginBrowser",
+ "Carla Rack Instrument" ),
+ "falkTX <falktx/at/falktx.com>",
+ 0x0195,
+ Plugin::Instrument,
+ new PluginPixmapLoader( "logo" ),
+ NULL,
+ NULL
+} ;
+
+Plugin* PLUGIN_EXPORT lmms_plugin_main(Model*, void* data)
+{
+ return new CarlaInstrument(static_cast<InstrumentTrack*>(data), &carlarack_plugin_descriptor, false);
+}
+
+}
diff --git a/plugins/carlarack/logo.png b/plugins/carlarack/logo.png
new file mode 100644
index 0000000..353d5d7
Binary files /dev/null and b/plugins/carlarack/logo.png differ
diff --git a/plugins/delay/CMakeLists.txt b/plugins/delay/CMakeLists.txt
new file mode 100644
index 0000000..0663b94
--- /dev/null
+++ b/plugins/delay/CMakeLists.txt
@@ -0,0 +1,3 @@
+INCLUDE(BuildPlugin)
+
+BUILD_PLUGIN(delay delayeffect.cpp delaycontrols.cpp delaycontrolsdialog.cpp lfo.cpp stereodelay.cpp MOCFILES delaycontrols.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/delay/artwork.png b/plugins/delay/artwork.png
new file mode 100644
index 0000000..459c1c5
Binary files /dev/null and b/plugins/delay/artwork.png differ
diff --git a/plugins/delay/delaycontrols.cpp b/plugins/delay/delaycontrols.cpp
new file mode 100644
index 0000000..72f43f3
--- /dev/null
+++ b/plugins/delay/delaycontrols.cpp
@@ -0,0 +1,70 @@
+/*
+ * delaycontrols.cpp - definition of DelayControls class.
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <QtXml/QDomElement>
+
+#include "delaycontrols.h"
+#include "delayeffect.h"
+#include "engine.h"
+#include "song.h"
+
+DelayControls::DelayControls( DelayEffect* effect ):
+ EffectControls( effect ),
+ m_effect ( effect ),
+ m_delayTimeModel( 0.5, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Delay Samples" )) ,
+ m_feedbackModel(0.0f,0.0f,1.0f,0.01f,this,tr( "Feedback" ) ),
+ m_lfoTimeModel(2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Lfo Frequency" ) ),
+ m_lfoAmountModel(0.0, 0.0, 2.0, 0.0001, 2000.0, this, tr ( "Lfo Amount" ) )
+{
+ connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeSampleRate() ) );
+}
+
+
+
+
+void DelayControls::loadSettings( const QDomElement &_this )
+{
+ m_delayTimeModel.loadSettings(_this, "DelayTimeSamples" );
+ m_feedbackModel.loadSettings( _this, "FeebackAmount" );
+ m_lfoTimeModel.loadSettings( _this , "LfoFrequency");
+ m_lfoAmountModel.loadSettings( _this, "LfoAmount");
+}
+
+
+
+
+void DelayControls::saveSettings( QDomDocument& doc, QDomElement& _this )
+{
+ m_delayTimeModel.saveSettings( doc, _this, "DelayTimeSamples" );
+ m_feedbackModel.saveSettings( doc, _this ,"FeebackAmount" );
+ m_lfoTimeModel.saveSettings( doc, _this, "LfoFrequency" );
+ m_lfoAmountModel.saveSettings( doc, _this ,"LfoAmount" );
+}
+
+
+
+void DelayControls::changeSampleRate()
+{
+ m_effect->changeSampleRate();
+}
diff --git a/plugins/delay/delaycontrols.h b/plugins/delay/delaycontrols.h
new file mode 100644
index 0000000..9b682b5
--- /dev/null
+++ b/plugins/delay/delaycontrols.h
@@ -0,0 +1,72 @@
+/*
+ * delaycontrols.h - declaration of DelayControl class.
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef DELAYCONTROLS_H
+#define DELAYCONTROLS_H
+
+#include "EffectControls.h"
+#include "knob.h"
+#include "delaycontrolsdialog.h"
+
+
+
+class DelayEffect;
+
+class DelayControls : public EffectControls
+{
+ Q_OBJECT
+public:
+ DelayControls( DelayEffect* effect );
+ virtual ~DelayControls()
+ {
+ }
+ virtual void saveSettings( QDomDocument& doc, QDomElement& parent );
+ virtual void loadSettings( const QDomElement& _this );
+ inline virtual QString nodeName() const
+ {
+ return "Delay";
+ }
+ virtual int controlCount(){
+ return 4;
+ }
+ virtual EffectControlDialog* createView()
+ {
+ return new DelayControlsDialog( this );
+ }
+
+private slots:
+ void changeSampleRate();
+
+private:
+ DelayEffect* m_effect;
+ TempoSyncKnobModel m_delayTimeModel;
+ FloatModel m_feedbackModel;
+ TempoSyncKnobModel m_lfoTimeModel;
+ TempoSyncKnobModel m_lfoAmountModel;
+
+ friend class DelayControlsDialog;
+ friend class DelayEffect;
+};
+
+#endif // DELAYCONTROLS_H
diff --git a/plugins/delay/delaycontrolsdialog.cpp b/plugins/delay/delaycontrolsdialog.cpp
new file mode 100644
index 0000000..67d817c
--- /dev/null
+++ b/plugins/delay/delaycontrolsdialog.cpp
@@ -0,0 +1,74 @@
+/*
+ * delaycontrolsdialog.cpp - definition of DelayControlsDialog class.
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "delaycontrolsdialog.h"
+#include "delaycontrols.h"
+#include "embed.h"
+#include "TempoSyncKnob.h"
+
+
+
+
+DelayControlsDialog::DelayControlsDialog( DelayControls *controls ) :
+ EffectControlDialog( controls )
+{
+ setAutoFillBackground( true );
+ QPalette pal;
+ pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) );
+ setPalette( pal );
+ setFixedSize( 200, 75 );
+
+ TempoSyncKnob* sampleDelayKnob = new TempoSyncKnob( knobBright_26, this );
+ sampleDelayKnob->move( 20,10 );
+ sampleDelayKnob->setVolumeKnob( false );
+ sampleDelayKnob->setModel( &controls->m_delayTimeModel );
+ sampleDelayKnob->setLabel( tr( "Delay" ) );
+ sampleDelayKnob->setHintText( tr( "Delay Time" ) + " ", " s" );
+
+ knob * feedbackKnob = new knob( knobBright_26, this );
+ feedbackKnob->move( 63,10 );
+ feedbackKnob->setVolumeKnob( true) ;
+ feedbackKnob->setModel( &controls->m_feedbackModel);
+ feedbackKnob->setLabel( tr( "Regen" ) );
+ feedbackKnob->setHintText( tr ( "Feedback Amount" ) + " " , "" );
+
+ TempoSyncKnob * lfoFreqKnob = new TempoSyncKnob( knobBright_26, this );
+ lfoFreqKnob->move( 106,10 );
+ lfoFreqKnob->setVolumeKnob( false );
+ lfoFreqKnob->setModel( &controls->m_lfoTimeModel );
+ lfoFreqKnob->setLabel( tr( "Rate" ) );
+ lfoFreqKnob->setHintText( tr ( "Lfo") + " ", " s" );
+
+ TempoSyncKnob * lfoAmtKnob = new TempoSyncKnob( knobBright_26, this );
+ lfoAmtKnob->move( 150,10 );
+ lfoAmtKnob->setVolumeKnob( false );
+ lfoAmtKnob->setModel( &controls->m_lfoAmountModel );
+ lfoAmtKnob->setLabel( tr( "Lfo" ) );
+ lfoAmtKnob->setHintText( tr ( "Lfo Amt" ) + " " , " s" );
+
+
+}
+
+
+#include "moc_delaycontrols.cxx"
diff --git a/plugins/delay/delaycontrolsdialog.h b/plugins/delay/delaycontrolsdialog.h
new file mode 100644
index 0000000..9afe1d7
--- /dev/null
+++ b/plugins/delay/delaycontrolsdialog.h
@@ -0,0 +1,41 @@
+/*
+ * delaycontrolsdialog.h - declaration of DelayControlsDialog class.
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef DELAYCONTROLSDIALOG_H
+#define DELAYCONTROLSDIALOG_H
+
+#include "EffectControlDialog.h"
+
+class DelayControls;
+
+class DelayControlsDialog : public EffectControlDialog
+{
+public:
+ DelayControlsDialog( DelayControls* controls );
+ virtual ~DelayControlsDialog()
+ {
+ }
+};
+
+#endif // DELAYCONTROLSDIALOG_H
diff --git a/plugins/delay/delayeffect.cpp b/plugins/delay/delayeffect.cpp
new file mode 100644
index 0000000..0e73f23
--- /dev/null
+++ b/plugins/delay/delayeffect.cpp
@@ -0,0 +1,124 @@
+/*
+ * delayeffect.cpp - definition of the DelayEffect class. The Delay Plugin
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "delayeffect.h"
+#include "engine.h"
+#include "embed.cpp"
+
+
+extern "C"
+{
+
+Plugin::Descriptor PLUGIN_EXPORT delay_plugin_descriptor =
+{
+ STRINGIFY( PLUGIN_NAME ),
+ "Delay",
+ QT_TRANSLATE_NOOP( "pluginBrowser", "A native delay plugin" ),
+ "Dave French <contact/dot/dave/dot/french3/at/googlemail/dot/com>",
+ 0x0100,
+ Plugin::Effect,
+ new PluginPixmapLoader( "logo" ),
+ NULL,
+ NULL
+} ;
+
+
+
+
+DelayEffect::DelayEffect( Model* parent, const Plugin::Descriptor::SubPluginFeatures::Key* key ) :
+ Effect( &delay_plugin_descriptor, parent, key ),
+ m_delayControls( this )
+{
+ m_delay = 0;
+ m_delay = new StereoDelay( 20, engine::mixer()->processingSampleRate() );
+ m_lfo = new Lfo( engine::mixer()->processingSampleRate() );
+}
+
+
+
+
+DelayEffect::~DelayEffect()
+{
+ if( m_delay )
+ {
+ delete m_delay;
+ }
+ if( m_lfo )
+ {
+ delete m_lfo;
+ }
+}
+
+
+
+
+bool DelayEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames )
+{
+ if( !isEnabled() || !isRunning () )
+ {
+ return( false );
+ }
+ double outSum = 0.0;
+ const float d = dryLevel();
+ const float w = wetLevel();
+ const float length = m_delayControls.m_delayTimeModel.value() * engine::mixer()->processingSampleRate();
+ const float amplitude = m_delayControls.m_lfoAmountModel.value() * engine::mixer()->processingSampleRate();
+ m_lfo->setFrequency( 1.0 / m_delayControls.m_lfoTimeModel.value() );
+ m_delay->setFeedback( m_delayControls.m_feedbackModel.value() );
+ sample_t dryS[2];
+ for( fpp_t f = 0; f < frames; ++f )
+ {
+ dryS[0] = buf[f][0];
+ dryS[1] = buf[f][1];
+ m_delay->setLength( ( float )length + ( amplitude * ( float )m_lfo->tick() ) );
+ m_delay->tick( buf[f] );
+
+ buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] );
+ buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] );
+ outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
+ }
+ checkGate( outSum / frames );
+ return isRunning();
+}
+
+void DelayEffect::changeSampleRate()
+{
+ m_lfo->setSampleRate( engine::mixer()->processingSampleRate() );
+ m_delay->setSampleRate( engine::mixer()->processingSampleRate() );
+}
+
+
+
+
+extern "C"
+{
+
+//needed for getting plugin out of shared lib
+Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data )
+{
+ return new DelayEffect( parent , static_cast<const Plugin::Descriptor::SubPluginFeatures::Key *>( data ) );
+}
+
+}}
+
diff --git a/plugins/delay/delayeffect.h b/plugins/delay/delayeffect.h
new file mode 100644
index 0000000..21aa31b
--- /dev/null
+++ b/plugins/delay/delayeffect.h
@@ -0,0 +1,51 @@
+/*
+ * delayeffect.h - declaration of DelayEffect class, the Delay plugin
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef DELAYEFFECT_H
+#define DELAYEFFECT_H
+
+#include "Effect.h"
+#include "delaycontrols.h"
+#include "lfo.h"
+#include "stereodelay.h"
+
+class DelayEffect : public Effect
+{
+public:
+ DelayEffect(Model* parent , const Descriptor::SubPluginFeatures::Key* key );
+ virtual ~DelayEffect();
+ virtual bool processAudioBuffer( sampleFrame* buf, const fpp_t frames );
+ virtual EffectControls* controls()
+ {
+ return &m_delayControls;
+ }
+ void changeSampleRate();
+
+private:
+ DelayControls m_delayControls;
+ StereoDelay* m_delay;
+ Lfo* m_lfo;
+};
+
+#endif // DELAYEFFECT_H
diff --git a/plugins/delay/lfo.cpp b/plugins/delay/lfo.cpp
new file mode 100644
index 0000000..8936bd1
--- /dev/null
+++ b/plugins/delay/lfo.cpp
@@ -0,0 +1,46 @@
+/*
+ * lfo.cpp - defination of Lfo class.
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "lfo.h"
+#include "lmms_math.h"
+
+
+
+
+Lfo::Lfo( int samplerate )
+{
+ m_samplerate = samplerate;
+ m_twoPiOverSr = F_2PI / samplerate;
+}
+
+
+
+
+float Lfo::tick()
+{
+ float output = sinf( m_phase );
+ m_phase += m_increment;
+
+ return output;
+}
diff --git a/plugins/delay/lfo.h b/plugins/delay/lfo.h
new file mode 100644
index 0000000..3c30772
--- /dev/null
+++ b/plugins/delay/lfo.h
@@ -0,0 +1,79 @@
+/*
+ * lfo.h - declaration of Lfo class, a simple sine lfo
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef LFO_H
+#define LFO_H
+
+#include "lmms_math.h"
+
+class Lfo
+{
+public:
+ Lfo( int samplerate );
+ ~Lfo()
+ {
+ }
+
+
+
+
+ inline void setFrequency( double frequency )
+ {
+ if( frequency < 0 || frequency > ( m_samplerate / 2.0 ) || frequency == m_frequency )
+ {
+ return;
+ }
+ m_frequency = frequency;
+ m_increment = m_frequency * m_twoPiOverSr;
+
+ if( m_phase >= F_2PI )
+ {
+ m_phase -= F_2PI;
+ }
+ }
+
+
+
+
+ inline void setSampleRate ( int samplerate )
+ {
+ m_samplerate = samplerate;
+ m_twoPiOverSr = F_2PI / samplerate;
+ m_increment = m_frequency * m_twoPiOverSr;
+ }
+
+
+
+
+ float tick();
+
+private:
+ double m_frequency;
+ double m_phase;
+ double m_increment;
+ double m_twoPiOverSr;
+ int m_samplerate;
+};
+
+#endif // LFO_H
diff --git a/plugins/delay/logo.png b/plugins/delay/logo.png
new file mode 100644
index 0000000..89e9f36
Binary files /dev/null and b/plugins/delay/logo.png differ
diff --git a/plugins/delay/stereodelay.cpp b/plugins/delay/stereodelay.cpp
new file mode 100644
index 0000000..27fe026
--- /dev/null
+++ b/plugins/delay/stereodelay.cpp
@@ -0,0 +1,103 @@
+/*
+ * stereodelay.cpp - defination of StereoDelay class.
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "stereodelay.h"
+#include <cstdlib>
+#include "lmms_basics.h"
+#include "interpolation.h"
+#include "lmms_math.h"
+
+
+StereoDelay::StereoDelay( int maxTime, int sampleRate )
+{
+ m_buffer = 0;
+ m_maxTime = maxTime;
+ m_maxLength = maxTime * sampleRate;
+ m_length = m_maxLength;
+
+ m_index = 0;
+ m_feedback = 0.0f;
+ setSampleRate( sampleRate );
+}
+
+
+
+
+StereoDelay::~StereoDelay()
+{
+ if( m_buffer )
+ {
+ delete m_buffer;
+ }
+}
+
+
+
+
+void StereoDelay::tick( sampleFrame frame )
+{
+ m_buffer[m_index][0] = frame[0];
+ m_buffer[m_index][1] = frame[1];
+
+ int readIndex = m_index - ( int )m_length - 1;
+ if( readIndex < 0 )
+ {
+ readIndex += m_maxLength;
+ }
+ float fract = 1.0f - fraction( m_length );
+ frame[0] = linearInterpolate( m_buffer[readIndex][0] ,
+ m_buffer[( readIndex+1) % m_maxLength][0], fract );
+ frame[1] = linearInterpolate( m_buffer[readIndex][1] ,
+ m_buffer[( readIndex+1) % m_maxLength][1], fract );
+
+ m_buffer[m_index][0] += frame[0] * m_feedback;
+ m_buffer[m_index][1] += frame[1] * m_feedback;
+
+ m_index = ( m_index + 1) % m_maxLength;
+}
+
+
+
+
+void StereoDelay::setSampleRate( int sampleRate )
+{
+ if( m_buffer )
+ {
+ delete m_buffer;
+ }
+
+ int bufferSize = ( int )( sampleRate * m_maxTime );
+ m_buffer = new sampleFrame[bufferSize];
+ for( int i = 0 ; i < bufferSize ; i++)
+ {
+ m_buffer[i][0] = 0.0;
+ m_buffer[i][1] = 0.0;
+ }
+}
+
+
+
+
+
+
diff --git a/plugins/delay/stereodelay.h b/plugins/delay/stereodelay.h
new file mode 100644
index 0000000..6485b28
--- /dev/null
+++ b/plugins/delay/stereodelay.h
@@ -0,0 +1,60 @@
+/*
+ * stereodelay.h - declaration of StereoDelay class.
+ *
+ * Copyright (c) 2014 David French <dave/dot/french3/at/googlemail/dot/com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef STEREODELAY_H
+#define STEREODELAY_H
+
+#include "lmms_basics.h"
+
+class StereoDelay
+{
+public:
+ StereoDelay( int maxLength, int sampleRate );
+ ~StereoDelay();
+ inline void setLength( float length )
+ {
+ if( length <= m_maxLength && length >= 0 )
+ {
+ m_length = length;
+ }
+ }
+
+ inline void setFeedback( float feedback )
+ {
+ m_feedback = feedback;
+ }
+
+ void tick( sampleFrame frame );
+ void setSampleRate( int sampleRate );
+
+private:
+ sampleFrame* m_buffer;
+ int m_maxLength;
+ float m_length;
+ int m_index;
+ float m_feedback;
+ float m_maxTime;
+};
+
+#endif // STEREODELAY_H
diff --git a/plugins/dynamics_processor/CMakeLists.txt b/plugins/dynamics_processor/CMakeLists.txt
index 700dc0a..fcfd8e2 100644
--- a/plugins/dynamics_processor/CMakeLists.txt
+++ b/plugins/dynamics_processor/CMakeLists.txt
@@ -1,3 +1,3 @@
INCLUDE(BuildPlugin)
-BUILD_PLUGIN(dynamicsprocessor dynamics_processor.cpp dynamics_processor_controls.cpp dynamics_processor_control_dialog.cpp MOCFILES dynamics_processor_controls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(dynamicsprocessor dynamics_processor.cpp dynamics_processor_controls.cpp dynamics_processor_control_dialog.cpp MOCFILES dynamics_processor_controls.h dynamics_processor_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/dynamics_processor/dynamics_processor.cpp b/plugins/dynamics_processor/dynamics_processor.cpp
index c9bd731..6dcd357 100644
--- a/plugins/dynamics_processor/dynamics_processor.cpp
+++ b/plugins/dynamics_processor/dynamics_processor.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -25,17 +25,10 @@
#include "dynamics_processor.h"
-#include <math.h>
-#include "embed.cpp"
+#include "lmms_math.h"
+#include "interpolation.h"
-#if defined (LMMS_BUILD_WIN32) || defined (LMMS_BUILD_APPLE)
-#ifndef isnanf
-#define isnanf(x) isnan(x)
-#endif
-#ifndef isinff
-#define isinff(x) isinf(x)
-#endif
-#endif
+#include "embed.cpp"
extern "C"
{
@@ -56,15 +49,19 @@ Plugin::Descriptor PLUGIN_EXPORT dynamicsprocessor_plugin_descriptor =
}
-
+const float DYN_NOISE_FLOOR = 0.00001f; // -100dBV noise floor
+const double DNF_LOG = 5.0;
dynProcEffect::dynProcEffect( Model * _parent,
const Descriptor::SubPluginFeatures::Key * _key ) :
Effect( &dynamicsprocessor_plugin_descriptor, _parent, _key ),
m_dpControls( this )
{
- currentPeak[0] = 0.0f;
- currentPeak[1] = 0.0f;
+ m_currentPeak[0] = m_currentPeak[1] = DYN_NOISE_FLOOR;
+ m_rms[0] = new RmsHelper( 64 * engine::mixer()->processingSampleRate() / 44100 );
+ m_rms[1] = new RmsHelper( 64 * engine::mixer()->processingSampleRate() / 44100 );
+ calcAttack();
+ calcRelease();
}
@@ -72,9 +69,20 @@ dynProcEffect::dynProcEffect( Model * _parent,
dynProcEffect::~dynProcEffect()
{
+ delete m_rms[0];
+ delete m_rms[1];
}
+inline void dynProcEffect::calcAttack()
+{
+ m_attCoeff = exp10( ( DNF_LOG / ( m_dpControls.m_attackModel.value() * 0.001 ) ) / engine::mixer()->processingSampleRate() );
+}
+
+inline void dynProcEffect::calcRelease()
+{
+ m_relCoeff = exp10( ( -DNF_LOG / ( m_dpControls.m_releaseModel.value() * 0.001 ) ) / engine::mixer()->processingSampleRate() );
+}
bool dynProcEffect::processAudioBuffer( sampleFrame * _buf,
@@ -83,142 +91,133 @@ bool dynProcEffect::processAudioBuffer( sampleFrame * _buf,
if( !isEnabled() || !isRunning () )
{
//apparently we can't keep running after the decay value runs out so we'll just set the peaks to zero
- currentPeak[0] = 0.0f;
- currentPeak[1] = 0.0f;
+ m_currentPeak[0] = m_currentPeak[1] = DYN_NOISE_FLOOR;
return( false );
-
-/* if( currentPeak[0] == 0.0f && currentPeak[1] == 0.0f ) return( false );
- else
- {
- if( currentPeak[0] != 0.0f )
- {
- currentPeak[0] = qMax ( currentPeak[0] -
- (( 1.0f / ( m_dpControls.m_releaseModel.value() / 1000.0f ) ) / engine::mixer()->processingSampleRate()), 0.0f );
- }
- if( currentPeak[1] != 0.0f )
- {
- currentPeak[1] = qMax ( currentPeak[1] -
- (( 1.0f / ( m_dpControls.m_releaseModel.value() / 1000.0f ) ) / engine::mixer()->processingSampleRate()), 0.0f );
- }
-
- return( true );
- } */
}
+ //qDebug( "%f %f", m_currentPeak[0], m_currentPeak[1] );
// variables for effect
int i = 0;
- float lookup;
- float frac;
+
float sm_peak[2] = { 0.0f, 0.0f };
float gain;
double out_sum = 0.0;
const float d = dryLevel();
const float w = wetLevel();
-
-// debug code
-// qDebug( "peaks %f %f", currentPeak[0], currentPeak[1] );
- float att_tmp = ( 1.0f / ( m_dpControls.m_attackModel.value() / 1000.0f ) ) / engine::mixer()->processingSampleRate();
- float rel_tmp = ( 1.0f / ( m_dpControls.m_releaseModel.value() / 1000.0f ) ) / engine::mixer()->processingSampleRate();
+ const int stereoMode = m_dpControls.m_stereomodeModel.value();
+ const float inputGain = m_dpControls.m_inputModel.value();
+ const float outputGain = m_dpControls.m_outputModel.value();
+ const float * samples = m_dpControls.m_wavegraphModel.samples();
+
+// debug code
+// qDebug( "peaks %f %f", m_currentPeak[0], m_currentPeak[1] );
+
+ if( m_needsUpdate )
+ {
+ m_rms[0]->setSize( 64 * engine::mixer()->processingSampleRate() / 44100 );
+ m_rms[1]->setSize( 64 * engine::mixer()->processingSampleRate() / 44100 );
+ calcAttack();
+ calcRelease();
+ m_needsUpdate = false;
+ }
+ else
+ {
+ if( m_dpControls.m_attackModel.isValueChanged() )
+ {
+ calcAttack();
+ }
+ if( m_dpControls.m_releaseModel.isValueChanged() )
+ {
+ calcRelease();
+ }
+ }
+
for( fpp_t f = 0; f < _frames; ++f )
{
- sample_t s[2] = { _buf[f][0], _buf[f][1] };
+ double s[2] = { _buf[f][0], _buf[f][1] };
-// check for nan/inf because they may cause errors?
- if( isnanf( s[0] ) ) s[0] = 0.0f;
- if( isnanf( s[1] ) ) s[1] = 0.0f;
- if( isinff( s[0] ) ) s[0] = 0.0f;
- if( isinff( s[1] ) ) s[1] = 0.0f;
-
+// apply input gain
+ s[0] *= inputGain;
+ s[1] *= inputGain;
// update peak values
for ( i=0; i <= 1; i++ )
{
- if( qAbs( s[i] ) > currentPeak[i] )
+ const double t = m_rms[i]->update( s[i] );
+ if( t > m_currentPeak[i] )
{
- currentPeak[i] = qMin ( currentPeak[i] + att_tmp, qAbs( s[i] ) );
+ m_currentPeak[i] = qMin( m_currentPeak[i] * m_attCoeff, t );
}
- else
- if( qAbs( s[i] ) < currentPeak[i] )
+ else
+ if( t < m_currentPeak[i] )
{
- currentPeak[i] = qMax ( currentPeak[i] - rel_tmp, qAbs( s[i] ) );
+ m_currentPeak[i] = qMax( m_currentPeak[i] * m_relCoeff, t );
}
-
- currentPeak[i] = qBound( 0.0f, currentPeak[i], 1.0f );
-
+
+ m_currentPeak[i] = qBound( DYN_NOISE_FLOOR, m_currentPeak[i], 10.0f );
}
// account for stereo mode
- switch( m_dpControls.m_stereomodeModel.value() )
+ switch( stereoMode )
{
case dynProcControls::SM_Maximum:
{
- sm_peak[0] = qMax( currentPeak[0], currentPeak[1] );
- sm_peak[1] = qMax( currentPeak[0], currentPeak[1] );
+ sm_peak[0] = sm_peak[1] = qMax( m_currentPeak[0], m_currentPeak[1] );
break;
}
case dynProcControls::SM_Average:
{
- sm_peak[0] = ( currentPeak[0] + currentPeak[1] ) / 2;
- sm_peak[1] = ( currentPeak[0] + currentPeak[1] ) / 2;
+ sm_peak[0] = sm_peak[1] = ( m_currentPeak[0] + m_currentPeak[1] ) * 0.5;
break;
}
case dynProcControls::SM_Unlinked:
{
- sm_peak[0] = currentPeak[0];
- sm_peak[1] = currentPeak[1];
+ sm_peak[0] = m_currentPeak[0];
+ sm_peak[1] = m_currentPeak[1];
break;
}
}
-// apply input gain
- s[0] *= m_dpControls.m_inputModel.value();
- s[1] *= m_dpControls.m_inputModel.value();
-
-
// start effect
for ( i=0; i <= 1; i++ )
{
- if( sm_peak[i] != 0 )
- {
- lookup = sm_peak[i] * 200.0f;
+ const int lookup = static_cast<int>( sm_peak[i] * 200.0f );
+ const float frac = fraction( sm_peak[i] * 200.0f );
+ if( sm_peak[i] > DYN_NOISE_FLOOR )
+ {
if ( lookup < 1 )
{
- frac = lookup - truncf(lookup);
- gain = frac * m_dpControls.m_wavegraphModel.samples()[0];
+ gain = frac * samples[0];
}
else
if ( lookup < 200 )
{
- frac = lookup - truncf(lookup);
- gain =
- (( (1.0f-frac) * m_dpControls.m_wavegraphModel.samples()[ (int)truncf(lookup) - 1 ] ) +
- ( frac * m_dpControls.m_wavegraphModel.samples()[ (int)truncf(lookup) ] ));
+ gain = linearInterpolate( samples[ lookup - 1 ],
+ samples[ lookup ], frac );
}
else
{
- gain = m_dpControls.m_wavegraphModel.samples()[199];
+ gain = samples[199];
};
-
- s[i] *= ( gain / sm_peak[i] );
+
+ s[i] *= gain;
+ s[i] /= sm_peak[i];
}
- else { s[i] = 0.0f; }
-
}
// apply output gain
- s[0] *= m_dpControls.m_outputModel.value();
- s[1] *= m_dpControls.m_outputModel.value();
+ s[0] *= outputGain;
+ s[1] *= outputGain;
+ out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1];
// mix wet/dry signals
_buf[f][0] = d * _buf[f][0] + w * s[0];
_buf[f][1] = d * _buf[f][1] + w * s[1];
-
- out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1];
}
checkGate( out_sum / _frames );
diff --git a/plugins/dynamics_processor/dynamics_processor.h b/plugins/dynamics_processor/dynamics_processor.h
index 364a2a3..cf9d585 100644
--- a/plugins/dynamics_processor/dynamics_processor.h
+++ b/plugins/dynamics_processor/dynamics_processor.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,12 +24,12 @@
*/
-#ifndef _DYNPROC_H
-#define _DYNPROC_H
+#ifndef DYNPROC_H
+#define DYNPROC_H
#include "Effect.h"
#include "dynamics_processor_controls.h"
-
+#include "RmsHelper.h"
class dynProcEffect : public Effect
@@ -48,11 +48,19 @@ public:
private:
+ void calcAttack();
+ void calcRelease();
dynProcControls m_dpControls;
// this member array is needed for peak detection
- float currentPeak[2];
+ float m_currentPeak[2];
+ double m_attCoeff;
+ double m_relCoeff;
+
+ bool m_needsUpdate;
+
+ RmsHelper * m_rms [2];
friend class dynProcControls;
diff --git a/plugins/dynamics_processor/dynamics_processor_control_dialog.cpp b/plugins/dynamics_processor/dynamics_processor_control_dialog.cpp
index e92e8e6..9b08392 100644
--- a/plugins/dynamics_processor/dynamics_processor_control_dialog.cpp
+++ b/plugins/dynamics_processor/dynamics_processor_control_dialog.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -152,3 +152,5 @@ dynProcControlDialog::dynProcControlDialog(
connect( subOneButton, SIGNAL( clicked() ),
_controls, SLOT( subOneClicked() ) );
}
+
+#include "moc_dynamics_processor_control_dialog.cxx"
diff --git a/plugins/dynamics_processor/dynamics_processor_control_dialog.h b/plugins/dynamics_processor/dynamics_processor_control_dialog.h
index 23770de..9504766 100644
--- a/plugins/dynamics_processor/dynamics_processor_control_dialog.h
+++ b/plugins/dynamics_processor/dynamics_processor_control_dialog.h
@@ -4,7 +4,7 @@
* * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*
*/
-#ifndef _DYNPROC_CONTROL_DIALOG_H
-#define _DYNPROC_CONTROL_DIALOG_H
+#ifndef DYNPROC_CONTROL_DIALOG_H
+#define DYNPROC_CONTROL_DIALOG_H
#include "EffectControlDialog.h"
@@ -34,6 +34,7 @@ class dynProcControls;
class dynProcControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
dynProcControlDialog( dynProcControls * _controls );
virtual ~dynProcControlDialog()
diff --git a/plugins/dynamics_processor/dynamics_processor_controls.cpp b/plugins/dynamics_processor/dynamics_processor_controls.cpp
index 6d0a346..313038a 100644
--- a/plugins/dynamics_processor/dynamics_processor_controls.cpp
+++ b/plugins/dynamics_processor/dynamics_processor_controls.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -28,6 +28,7 @@
#include "dynamics_processor_controls.h"
#include "dynamics_processor.h"
+#include "base64.h"
#include "graph.h"
#include "engine.h"
#include "song.h"
@@ -45,36 +46,21 @@ dynProcControls::dynProcControls( dynProcEffect * _eff ) :
m_wavegraphModel( 0.0f, 1.0f, 200, this ),
m_stereomodeModel( 0, 0, 2, this, tr( "Stereo mode" ) )
{
- connect( &m_inputModel, SIGNAL( dataChanged() ),
- this, SLOT( changeControl() ) );
-
- connect( &m_outputModel, SIGNAL( dataChanged() ),
- this, SLOT( changeControl() ) );
-
- connect( &m_attackModel, SIGNAL( dataChanged() ),
- this, SLOT( changeControl() ) );
-
- connect( &m_releaseModel, SIGNAL( dataChanged() ),
- this, SLOT( changeControl() ) );
-
- connect( &m_stereomodeModel, SIGNAL( dataChanged() ),
- this, SLOT( changeControl() ) );
-
connect( &m_wavegraphModel, SIGNAL( samplesChanged( int, int ) ),
this, SLOT( samplesChanged( int, int ) ) );
-
+ connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( sampleRateChanged() ) );
setDefaultShape();
}
-
-void dynProcControls::changeControl()
+void dynProcControls::sampleRateChanged()
{
- engine::getSong()->setModified();
+ m_effect->m_needsUpdate = true;
}
+
void dynProcControls::samplesChanged( int _begin, int _end)
{
engine::getSong()->setModified();
diff --git a/plugins/dynamics_processor/dynamics_processor_controls.h b/plugins/dynamics_processor/dynamics_processor_controls.h
index 70ec989..39e8aca 100644
--- a/plugins/dynamics_processor/dynamics_processor_controls.h
+++ b/plugins/dynamics_processor/dynamics_processor_controls.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*
*/
-#ifndef _WAVESHAPER_CONTROLS_H
-#define _WAVESHAPER_CONTROLS_H
+#ifndef DYNPROC_CONTROLS_H
+#define DYNPROC_CONTROLS_H
#include "EffectControls.h"
#include "dynamics_processor_control_dialog.h"
@@ -71,8 +71,8 @@ public:
private slots:
- void changeControl();
void samplesChanged( int, int );
+ void sampleRateChanged();
void resetClicked();
void smoothClicked();
diff --git a/plugins/dynamics_processor/moc_dynamics_processor_controls.cxx_parameters b/plugins/dynamics_processor/moc_dynamics_processor_controls.cxx_parameters
deleted file mode 100644
index ff1bc7e..0000000
--- a/plugins/dynamics_processor/moc_dynamics_processor_controls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/dynamics_processor
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=dynamicsprocessor
--o
-/home/lukas/src/lmms/plugins/dynamics_processor/moc_dynamics_processor_controls.cxx
-/home/lukas/src/lmms/plugins/dynamics_processor/dynamics_processor_controls.h
diff --git a/plugins/flp_import/FlpImport.cpp b/plugins/flp_import/FlpImport.cpp
index e69ebd0..7182197 100644
--- a/plugins/flp_import/FlpImport.cpp
+++ b/plugins/flp_import/FlpImport.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -27,6 +27,7 @@
#include <QtGui/QProgressDialog>
#include <QtCore/QDir>
#include <QtCore/QBuffer>
+#include <QtCore/QDebug>
#include "FlpImport.h"
#include "NotePlayHandle.h"
@@ -40,13 +41,14 @@
#include "Effect.h"
#include "engine.h"
#include "FxMixer.h"
+#include "FxMixerView.h"
#include "group_box.h"
#include "Instrument.h"
#include "InstrumentTrack.h"
#include "EnvelopeAndLfoParameters.h"
#include "knob.h"
#include "Oscillator.h"
-#include "pattern.h"
+#include "Pattern.h"
#include "Piano.h"
#include "ProjectJournal.h"
#include "project_notes.h"
@@ -96,7 +98,7 @@ extern QString outstring;
}
-
+const int NumFLFxChannels = 64;
static void dump_mem( const void * buffer, uint n_bytes )
{
@@ -537,7 +539,7 @@ struct FL_Project
int currentPattern;
int activeEditPattern;
- FL_EffectChannel effectChannels[NumFxChannels+1];
+ FL_EffectChannel effectChannels[NumFLFxChannels+1];
int currentEffectChannel;
QString projectNotes;
@@ -887,7 +889,7 @@ bool FlpImport::tryImport( TrackContainer* tc )
break;
case FLP_EffectChannelMuted:
-if( p.currentEffectChannel <= NumFxChannels )
+if( p.currentEffectChannel <= NumFLFxChannels )
{
p.effectChannels[p.currentEffectChannel].isMuted =
( data & 0x08 ) > 0 ? false : true;
@@ -1125,7 +1127,7 @@ if( p.currentEffectChannel <= NumFxChannels )
case FLP_Text_EffectChanName:
++p.currentEffectChannel;
- if( p.currentEffectChannel <= NumFxChannels )
+ if( p.currentEffectChannel <= NumFLFxChannels )
{
p.effectChannels[p.currentEffectChannel].name = text;
}
@@ -1348,7 +1350,7 @@ if( p.currentEffectChannel <= NumFxChannels )
const int param = pi[i*3+1] & 0xffff;
const int ch = ( pi[i*3+1] >> 22 )
& 0x7f;
- if( ch < 0 || ch > NumFxChannels )
+ if( ch < 0 || ch > NumFLFxChannels )
{
continue;
}
@@ -1409,9 +1411,15 @@ else
// now create a project from FL_Project data structure
-
engine::getSong()->clearProject();
+ // configure the mixer
+ for( int i=0; i<NumFLFxChannels; ++i )
+ {
+ engine::fxMixer()->createChannel();
+ }
+ engine::fxMixerView()->refreshDisplay();
+
// set global parameters
engine::getSong()->setMasterVolume( p.mainVolume );
engine::getSong()->setMasterPitch( p.mainPitch );
@@ -1534,8 +1542,7 @@ else
{
const int pat = *jt / 256;
const int pos = *jt % 256;
- pattern * p =
- dynamic_cast<pattern *>( t->getTCO( pat ) );
+ Pattern* p = dynamic_cast<Pattern*>( t->getTCO( pat ) );
if( p == NULL )
{
continue;
@@ -1559,7 +1566,7 @@ else
{
continue;
}
- pattern * p = dynamic_cast<pattern *>( t->getTCO( pat ) );
+ Pattern* p = dynamic_cast<Pattern*>( t->getTCO( pat ) );
if( p != NULL )
{
p->addNote( jt->second, false );
@@ -1648,7 +1655,7 @@ p->putValue( jt->pos, value, false );
}
}
- for( int fx_ch = 0; fx_ch <= NumFxChannels ; ++fx_ch )
+ for( int fx_ch = 0; fx_ch <= NumFLFxChannels ; ++fx_ch )
{
FxChannel * ch = engine::fxMixer()->effectChannel( fx_ch );
if( !ch )
@@ -1708,7 +1715,7 @@ p->putValue( jt->pos, value, false );
break;
}
if( effName.isEmpty() || it->fxChannel < 0 ||
- it->fxChannel > NumFxChannels )
+ it->fxChannel > NumFLFxChannels )
{
continue;
}
diff --git a/plugins/flp_import/FlpImport.h b/plugins/flp_import/FlpImport.h
index b965810..5a27826 100644
--- a/plugins/flp_import/FlpImport.h
+++ b/plugins/flp_import/FlpImport.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/flp_import/unrtf.cpp b/plugins/flp_import/unrtf.cpp
index 7f3edaa..bc7bced 100644
--- a/plugins/flp_import/unrtf.cpp
+++ b/plugins/flp_import/unrtf.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/kicker/KickerOsc.h b/plugins/kicker/KickerOsc.h
new file mode 100644
index 0000000..a2b20ae
--- /dev/null
+++ b/plugins/kicker/KickerOsc.h
@@ -0,0 +1,108 @@
+/*
+ * KickerOsc.h - alternative sweeping oscillator
+ *
+ * Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2014 Hannu Haahti <grejppi/at/gmail.com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef KICKER_OSC_H
+#define KICKER_OSC_H
+
+#include "DspEffectLibrary.h"
+#include "Oscillator.h"
+
+#include "lmms_math.h"
+#include "interpolation.h"
+
+
+template<class FX = DspEffectLibrary::StereoBypass>
+class KickerOsc
+{
+public:
+ KickerOsc( const FX & fx, const float start, const float end, const float noise, const float offset,
+ const float slope, const float env, const float diststart, const float distend, const float length ) :
+ m_phase( offset ),
+ m_startFreq( start ),
+ m_endFreq( end ),
+ m_noise( noise ),
+ m_slope( slope ),
+ m_env( env ),
+ m_distStart( diststart ),
+ m_distEnd( distend ),
+ m_hasDistEnv( diststart != distend ),
+ m_length( length ),
+ m_FX( fx ),
+ m_counter( 0 ),
+ m_freq( start )
+ {
+ }
+
+ virtual ~KickerOsc()
+ {
+ }
+
+ void update( sampleFrame* buf, const fpp_t frames, const float sampleRate )
+ {
+ for( fpp_t frame = 0; frame < frames; ++frame )
+ {
+ const double gain = ( 1 - fastPow( ( m_counter < m_length ) ? m_counter / m_length : 1, m_env ) );
+ const sample_t s = ( Oscillator::sinSample( m_phase ) * ( 1 - m_noise ) ) + ( Oscillator::noiseSample( 0 ) * gain * gain * m_noise );
+ buf[frame][0] = s * gain;
+ buf[frame][1] = s * gain;
+
+ // update distortion envelope if necessary
+ if( m_hasDistEnv && m_counter < m_length )
+ {
+ float thres = linearInterpolate( m_distStart, m_distEnd, m_counter / m_length );
+ m_FX.leftFX().setThreshold( thres );
+ m_FX.rightFX().setThreshold( thres );
+ }
+
+ m_FX.nextSample( buf[frame][0], buf[frame][1] );
+ m_phase += m_freq / sampleRate;
+
+ const double change = ( m_counter < m_length ) ? ( ( m_startFreq - m_endFreq ) * ( 1 - fastPow( m_counter / m_length, m_slope ) ) ) : 0;
+ m_freq = m_endFreq + change;
+ ++m_counter;
+ }
+ }
+
+
+private:
+ float m_phase;
+ const float m_startFreq;
+ const float m_endFreq;
+ const float m_noise;
+ const float m_slope;
+ const float m_env;
+ const float m_distStart;
+ const float m_distEnd;
+ const bool m_hasDistEnv;
+ const float m_length;
+ FX m_FX;
+
+ unsigned long m_counter;
+ double m_freq;
+
+};
+
+
+#endif
diff --git a/plugins/kicker/artwork.png b/plugins/kicker/artwork.png
index 12a5650..f6a5894 100644
Binary files a/plugins/kicker/artwork.png and b/plugins/kicker/artwork.png differ
diff --git a/plugins/kicker/kicker.cpp b/plugins/kicker/kicker.cpp
index c04f69e..ecf9c61 100644
--- a/plugins/kicker/kicker.cpp
+++ b/plugins/kicker/kicker.cpp
@@ -1,9 +1,10 @@
/*
- * kicker.cpp - bassdrum-synthesizer
+ * kicker.cpp - drum synthesizer
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * Copyright (c) 2014 Hannu Haahti <grejppi/at/gmail.com>
+ *
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -31,7 +32,7 @@
#include "InstrumentTrack.h"
#include "knob.h"
#include "NotePlayHandle.h"
-#include "SweepOscillator.h"
+#include "KickerOsc.h"
#include "embed.cpp"
@@ -44,7 +45,7 @@ Plugin::Descriptor PLUGIN_EXPORT kicker_plugin_descriptor =
STRINGIFY( PLUGIN_NAME ),
"Kicker",
QT_TRANSLATE_NOOP( "pluginBrowser",
- "Versatile kick- & bassdrum-synthesizer" ),
+ "Versatile drum synthesizer" ),
"Tobias Doerffel <tobydox/at/users.sf.net>",
0x0100,
Plugin::Instrument,
@@ -60,9 +61,17 @@ kickerInstrument::kickerInstrument( InstrumentTrack * _instrument_track ) :
Instrument( _instrument_track, &kicker_plugin_descriptor ),
m_startFreqModel( 150.0f, 5.0f, 1000.0f, 1.0f, this, tr( "Start frequency" ) ),
m_endFreqModel( 40.0f, 5.0f, 1000.0f, 1.0f, this, tr( "End frequency" ) ),
- m_decayModel( 120.0f, 5.0f, 1000.0f, 1.0f, this, tr( "Decay" ) ),
- m_distModel( 0.8f, 0.0f, 100.0f, 0.1f, this, tr( "Distortion" ) ),
- m_gainModel( 1.0f, 0.1f, 5.0f, 0.05f, this, tr( "Gain" ) )
+ m_decayModel( 440.0f, 5.0f, 5000.0f, 1.0f, 5000.0f, this, tr( "Length" ) ),
+ m_distModel( 0.8f, 0.0f, 100.0f, 0.1f, this, tr( "Distortion Start" ) ),
+ m_distEndModel( 0.8f, 0.0f, 100.0f, 0.1f, this, tr( "Distortion End" ) ),
+ m_gainModel( 1.0f, 0.1f, 5.0f, 0.05f, this, tr( "Gain" ) ),
+ m_envModel( 0.163f, 0.01f, 1.0f, 0.001f, this, tr( "Envelope Slope" ) ),
+ m_noiseModel( 0.0f, 0.0f, 1.0f, 0.01f, this, tr( "Noise" ) ),
+ m_clickModel( 0.4f, 0.0f, 1.0f, 0.05f, this, tr( "Click" ) ),
+ m_slopeModel( 0.06f, 0.001f, 1.0f, 0.001f, this, tr( "Frequency Slope" ) ),
+ m_startNoteModel( true, this, tr( "Start from note" ) ),
+ m_endNoteModel( false, this, tr( "End to note" ) ),
+ m_versionModel( 0, 0, KICKER_PRESET_VERSION, this, "" )
{
}
@@ -83,7 +92,15 @@ void kickerInstrument::saveSettings( QDomDocument & _doc,
m_endFreqModel.saveSettings( _doc, _this, "endfreq" );
m_decayModel.saveSettings( _doc, _this, "decay" );
m_distModel.saveSettings( _doc, _this, "dist" );
+ m_distEndModel.saveSettings( _doc, _this, "distend" );
m_gainModel.saveSettings( _doc, _this, "gain" );
+ m_envModel.saveSettings( _doc, _this, "env" );
+ m_noiseModel.saveSettings( _doc, _this, "noise" );
+ m_clickModel.saveSettings( _doc, _this, "click" );
+ m_slopeModel.saveSettings( _doc, _this, "slope" );
+ m_startNoteModel.saveSettings( _doc, _this, "startnote" );
+ m_endNoteModel.saveSettings( _doc, _this, "endnote" );
+ m_versionModel.saveSettings( _doc, _this, "version" );
}
@@ -91,11 +108,42 @@ void kickerInstrument::saveSettings( QDomDocument & _doc,
void kickerInstrument::loadSettings( const QDomElement & _this )
{
+ m_versionModel.loadSettings( _this, "version" );
+
m_startFreqModel.loadSettings( _this, "startfreq" );
m_endFreqModel.loadSettings( _this, "endfreq" );
m_decayModel.loadSettings( _this, "decay" );
m_distModel.loadSettings( _this, "dist" );
+ if( _this.hasAttribute( "distend" ) )
+ {
+ m_distEndModel.loadSettings( _this, "distend" );
+ }
+ else
+ {
+ m_distEndModel.setValue( m_distModel.value() );
+ }
m_gainModel.loadSettings( _this, "gain" );
+ m_envModel.loadSettings( _this, "env" );
+ m_noiseModel.loadSettings( _this, "noise" );
+ m_clickModel.loadSettings( _this, "click" );
+ m_slopeModel.loadSettings( _this, "slope" );
+ m_startNoteModel.loadSettings( _this, "startnote" );
+ if( m_versionModel.value() < 1 )
+ {
+ m_startNoteModel.setValue( false );
+ }
+ m_endNoteModel.loadSettings( _this, "endnote" );
+
+ // Try to maintain backwards compatibility
+ if( !_this.hasAttribute( "version" ) )
+ {
+
+ m_decayModel.setValue( m_decayModel.value() * 1.33f );
+ m_envModel.setValue( 1.0f );
+ m_slopeModel.setValue( 1.0f );
+ m_clickModel.setValue( 0.0f );
+ }
+ m_versionModel.setValue( KICKER_PRESET_VERSION );
}
@@ -108,53 +156,49 @@ QString kickerInstrument::nodeName() const
-//typedef DspEffectLibrary::foldbackDistortion<> DistFX;
typedef DspEffectLibrary::Distortion DistFX;
-typedef SweepOscillator<DspEffectLibrary::MonoToStereoAdaptor<DistFX> > SweepOsc;
+typedef KickerOsc<DspEffectLibrary::MonoToStereoAdaptor<DistFX> > SweepOsc;
void kickerInstrument::playNote( NotePlayHandle * _n,
sampleFrame * _working_buffer )
{
const float decfr = m_decayModel.value() *
- engine::mixer()->processingSampleRate() / 1000.0f;
+ engine::mixer()->processingSampleRate() / 1000.0f;
const f_cnt_t tfp = _n->totalFramesPlayed();
if ( tfp == 0 )
{
_n->m_pluginData = new SweepOsc(
DistFX( m_distModel.value(),
- m_gainModel.value() ) );
+ m_gainModel.value() ),
+ m_startNoteModel.value() ? _n->frequency() : m_startFreqModel.value(),
+ m_endNoteModel.value() ? _n->frequency() : m_endFreqModel.value(),
+ m_noiseModel.value() * m_noiseModel.value(),
+ m_clickModel.value() * 0.25f,
+ m_slopeModel.value(),
+ m_envModel.value(),
+ m_distModel.value(),
+ m_distEndModel.value(),
+ decfr );
}
else if( tfp > decfr && !_n->isReleased() )
{
_n->noteOff();
}
- //const float freq = instrumentTrack()->frequency( _n ) / 2;
- const float fdiff = m_endFreqModel.value() - m_startFreqModel.value();
-/* const fpp_t frames = _n->isReleased() ?
- tMax( tMin<f_cnt_t>( desiredReleaseFrames() -
- _n->releaseFramesDone(),
- engine::mixer()->framesPerAudioBuffer() ), 0 )
- :
- engine::mixer()->framesPerAudioBuffer();*/
const fpp_t frames = _n->framesLeftForCurrentPeriod();
- const float f1 = m_startFreqModel.value() + tfp * fdiff / decfr;
- const float f2 = m_startFreqModel.value() + (frames+tfp-1)*fdiff/decfr;
-
SweepOsc * so = static_cast<SweepOsc *>( _n->m_pluginData );
- so->update( _working_buffer, frames, f1, f2,
- engine::mixer()->processingSampleRate() );
+ so->update( _working_buffer, frames, engine::mixer()->processingSampleRate() );
if( _n->isReleased() )
{
- const float rfd = _n->releaseFramesDone();
- const float drf = desiredReleaseFrames();
+ const float done = _n->releaseFramesDone();
+ const float desired = desiredReleaseFrames();
for( fpp_t f = 0; f < frames; ++f )
{
- const float fac = 1.0f - ( rfd+f ) / drf;
+ const float fac = ( done+f < desired ) ? ( 1.0f - ( ( done+f ) / desired ) ) : 0;
_working_buffer[f][0] *= fac;
_working_buffer[f][1] *= fac;
}
@@ -188,7 +232,32 @@ public:
kickerKnob( QWidget * _parent ) :
knob( knobStyled, _parent )
{
- setFixedSize( 37, 47 );
+ setFixedSize( 29, 29 );
+ setObjectName( "smallKnob" );
+ }
+};
+
+
+class kickerEnvKnob : public TempoSyncKnob
+{
+public:
+ kickerEnvKnob( QWidget * _parent ) :
+ TempoSyncKnob( knobStyled, _parent )
+ {
+ setFixedSize( 29, 29 );
+ setObjectName( "smallKnob" );
+ }
+};
+
+
+class kickerLargeKnob : public knob
+{
+public:
+ kickerLargeKnob( QWidget * _parent ) :
+ knob( knobStyled, _parent )
+ {
+ setFixedSize( 34, 34 );
+ setObjectName( "largeKnob" );
}
};
@@ -199,30 +268,66 @@ kickerInstrumentView::kickerInstrumentView( Instrument * _instrument,
QWidget * _parent ) :
InstrumentView( _instrument, _parent )
{
- m_startFreqKnob = new kickerKnob( this );
+ const int ROW1 = 14;
+ const int ROW2 = ROW1 + 56;
+ const int ROW3 = ROW2 + 56;
+ const int LED_ROW = 63;
+ const int COL1 = 14;
+ const int COL2 = COL1 + 56;
+ const int COL3 = COL2 + 56;
+ const int COL4 = COL3 + 41;
+ const int COL5 = COL4 + 41;
+ const int END_COL = COL1 + 48;
+
+ m_startFreqKnob = new kickerLargeKnob( this );
m_startFreqKnob->setHintText( tr( "Start frequency:" ) + " ", "Hz" );
- m_startFreqKnob->move( 12, 124 );
+ m_startFreqKnob->move( COL1, ROW1 );
- m_endFreqKnob = new kickerKnob( this );
+ m_endFreqKnob = new kickerLargeKnob( this );
m_endFreqKnob->setHintText( tr( "End frequency:" ) + " ", "Hz" );
- m_endFreqKnob->move( 59, 124 );
+ m_endFreqKnob->move( END_COL, ROW1 );
- m_decayKnob = new kickerKnob( this );
- m_decayKnob->setHintText( tr( "Decay:" ) + " ", "ms" );
- m_decayKnob->move( 107, 124 );
-
- m_distKnob = new kickerKnob( this );
- m_distKnob->setHintText( tr( "Distortion:" ) + " ", "" );
- m_distKnob->move( 155, 124 );
+ m_slopeKnob = new kickerKnob( this );
+ m_slopeKnob->setHintText( tr( "Frequency Slope:" ) + " ", "" );
+ m_slopeKnob->move( COL3, ROW1 );
m_gainKnob = new kickerKnob( this );
m_gainKnob->setHintText( tr( "Gain:" ) + " ", "" );
- m_gainKnob->move( 203, 124 );
+ m_gainKnob->move( COL1, ROW3 );
+
+ m_decayKnob = new kickerEnvKnob( this );
+ m_decayKnob->setHintText( tr( "Envelope Length:" ) + " ", "ms" );
+ m_decayKnob->move( COL2, ROW3 );
+
+ m_envKnob = new kickerKnob( this );
+ m_envKnob->setHintText( tr( "Envelope Slope:" ) + " ", "" );
+ m_envKnob->move( COL3, ROW3 );
+
+ m_clickKnob = new kickerKnob( this );
+ m_clickKnob->setHintText( tr( "Click:" ) + " ", "" );
+ m_clickKnob->move( COL5, ROW1 );
+
+ m_noiseKnob = new kickerKnob( this );
+ m_noiseKnob->setHintText( tr( "Noise:" ) + " ", "" );
+ m_noiseKnob->move( COL5, ROW3 );
+
+ m_distKnob = new kickerKnob( this );
+ m_distKnob->setHintText( tr( "Distortion Start:" ) + " ", "" );
+ m_distKnob->move( COL4, ROW2 );
+
+ m_distEndKnob = new kickerKnob( this );
+ m_distEndKnob->setHintText( tr( "Distortion End:" ) + " ", "" );
+ m_distEndKnob->move( COL5, ROW2 );
+
+ m_startNoteToggle = new ledCheckBox( "", this, "", ledCheckBox::Green );
+ m_startNoteToggle->move( COL1 + 8, LED_ROW );
+
+ m_endNoteToggle = new ledCheckBox( "", this, "", ledCheckBox::Green );
+ m_endNoteToggle->move( END_COL + 8, LED_ROW );
setAutoFillBackground( true );
QPalette pal;
- pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap(
- "artwork" ) );
+ pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) );
setPalette( pal );
}
@@ -243,7 +348,14 @@ void kickerInstrumentView::modelChanged()
m_endFreqKnob->setModel( &k->m_endFreqModel );
m_decayKnob->setModel( &k->m_decayModel );
m_distKnob->setModel( &k->m_distModel );
+ m_distEndKnob->setModel( &k->m_distEndModel );
m_gainKnob->setModel( &k->m_gainModel );
+ m_envKnob->setModel( &k->m_envModel );
+ m_noiseKnob->setModel( &k->m_noiseModel );
+ m_clickKnob->setModel( &k->m_clickModel );
+ m_slopeKnob->setModel( &k->m_slopeModel );
+ m_startNoteToggle->setModel( &k->m_startNoteModel );
+ m_endNoteToggle->setModel( &k->m_endNoteModel );
}
diff --git a/plugins/kicker/kicker.h b/plugins/kicker/kicker.h
index f6633b0..edf0b7d 100644
--- a/plugins/kicker/kicker.h
+++ b/plugins/kicker/kicker.h
@@ -1,9 +1,10 @@
/*
- * kicker.h - bassdrum-synthesizer
+ * kicker.h - drum synthesizer
+ * Copyright (c) 2014 Hannu Haahti <grejppi/at/gmail.com>
*
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,13 +24,18 @@
*/
-#ifndef _KICKER_H
-#define _KICKER_H
+#ifndef KICKER_H
+#define KICKER_H
#include <QtCore/QObject>
#include "Instrument.h"
#include "InstrumentView.h"
#include "knob.h"
+#include "led_checkbox.h"
+#include "TempoSyncKnob.h"
+
+
+#define KICKER_PRESET_VERSION 1
class kickerInstrumentView;
@@ -38,6 +44,7 @@ class NotePlayHandle;
class kickerInstrument : public Instrument
{
+ Q_OBJECT
public:
kickerInstrument( InstrumentTrack * _instrument_track );
virtual ~kickerInstrument();
@@ -46,12 +53,16 @@ public:
sampleFrame * _working_buffer );
virtual void deleteNotePluginData( NotePlayHandle * _n );
-
virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
virtual void loadSettings( const QDomElement & _this );
virtual QString nodeName() const;
+ virtual Flags flags() const
+ {
+ return IsNotBendable;
+ }
+
virtual f_cnt_t desiredReleaseFrames() const
{
return( 512 );
@@ -63,9 +74,19 @@ public:
private:
FloatModel m_startFreqModel;
FloatModel m_endFreqModel;
- FloatModel m_decayModel;
+ TempoSyncKnobModel m_decayModel;
FloatModel m_distModel;
+ FloatModel m_distEndModel;
FloatModel m_gainModel;
+ FloatModel m_envModel;
+ FloatModel m_noiseModel;
+ FloatModel m_clickModel;
+ FloatModel m_slopeModel;
+
+ BoolModel m_startNoteModel;
+ BoolModel m_endNoteModel;
+
+ IntModel m_versionModel;
friend class kickerInstrumentView;
@@ -87,7 +108,15 @@ private:
knob * m_endFreqKnob;
knob * m_decayKnob;
knob * m_distKnob;
+ knob * m_distEndKnob;
knob * m_gainKnob;
+ knob * m_envKnob;
+ knob * m_noiseKnob;
+ knob * m_clickKnob;
+ knob * m_slopeKnob;
+
+ ledCheckBox * m_startNoteToggle;
+ ledCheckBox * m_endNoteToggle;
} ;
diff --git a/plugins/kicker/moc_kicker.cxx_parameters b/plugins/kicker/moc_kicker.cxx_parameters
deleted file mode 100644
index abc6916..0000000
--- a/plugins/kicker/moc_kicker.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/kicker
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=kicker
--o
-/home/lukas/src/lmms/plugins/kicker/moc_kicker.cxx
-/home/lukas/src/lmms/plugins/kicker/kicker.h
diff --git a/plugins/ladspa_browser/ladspa_browser.cpp b/plugins/ladspa_browser/ladspa_browser.cpp
index 442edfd..4f55222 100644
--- a/plugins/ladspa_browser/ladspa_browser.cpp
+++ b/plugins/ladspa_browser/ladspa_browser.cpp
@@ -5,7 +5,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/ladspa_browser/ladspa_browser.h b/plugins/ladspa_browser/ladspa_browser.h
index b105862..c036b6a 100644
--- a/plugins/ladspa_browser/ladspa_browser.h
+++ b/plugins/ladspa_browser/ladspa_browser.h
@@ -5,7 +5,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/ladspa_browser/ladspa_description.cpp b/plugins/ladspa_browser/ladspa_description.cpp
index 19070ad..4260d81 100644
--- a/plugins/ladspa_browser/ladspa_description.cpp
+++ b/plugins/ladspa_browser/ladspa_description.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/ladspa_browser/ladspa_description.h b/plugins/ladspa_browser/ladspa_description.h
index ce1164f..3c23cbc 100644
--- a/plugins/ladspa_browser/ladspa_description.h
+++ b/plugins/ladspa_browser/ladspa_description.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/ladspa_browser/ladspa_port_dialog.cpp b/plugins/ladspa_browser/ladspa_port_dialog.cpp
index 3a3370d..30c586f 100644
--- a/plugins/ladspa_browser/ladspa_port_dialog.cpp
+++ b/plugins/ladspa_browser/ladspa_port_dialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/ladspa_browser/ladspa_port_dialog.h b/plugins/ladspa_browser/ladspa_port_dialog.h
index c249ef9..f1f962b 100644
--- a/plugins/ladspa_browser/ladspa_port_dialog.h
+++ b/plugins/ladspa_browser/ladspa_port_dialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/ladspa_browser/moc_ladspa_browser.cxx_parameters b/plugins/ladspa_browser/moc_ladspa_browser.cxx_parameters
deleted file mode 100644
index 3ddc323..0000000
--- a/plugins/ladspa_browser/moc_ladspa_browser.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/ladspa_browser
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=ladspabrowser
--o
-/home/lukas/src/lmms/plugins/ladspa_browser/moc_ladspa_browser.cxx
-/home/lukas/src/lmms/plugins/ladspa_browser/ladspa_browser.h
diff --git a/plugins/ladspa_browser/moc_ladspa_description.cxx_parameters b/plugins/ladspa_browser/moc_ladspa_description.cxx_parameters
deleted file mode 100644
index 9848c25..0000000
--- a/plugins/ladspa_browser/moc_ladspa_description.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/ladspa_browser
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=ladspabrowser
--o
-/home/lukas/src/lmms/plugins/ladspa_browser/moc_ladspa_description.cxx
-/home/lukas/src/lmms/plugins/ladspa_browser/ladspa_description.h
diff --git a/plugins/ladspa_browser/moc_ladspa_port_dialog.cxx_parameters b/plugins/ladspa_browser/moc_ladspa_port_dialog.cxx_parameters
deleted file mode 100644
index 0c904d1..0000000
--- a/plugins/ladspa_browser/moc_ladspa_port_dialog.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/ladspa_browser
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=ladspabrowser
--o
-/home/lukas/src/lmms/plugins/ladspa_browser/moc_ladspa_port_dialog.cxx
-/home/lukas/src/lmms/plugins/ladspa_browser/ladspa_port_dialog.h
diff --git a/plugins/lb302/artwork.png b/plugins/lb302/artwork.png
index 36f4b87..b610a57 100644
Binary files a/plugins/lb302/artwork.png and b/plugins/lb302/artwork.png differ
diff --git a/plugins/lb302/lb302.cpp b/plugins/lb302/lb302.cpp
index 28628a2..d73bcb9 100644
--- a/plugins/lb302/lb302.cpp
+++ b/plugins/lb302/lb302.cpp
@@ -1,14 +1,14 @@
/*
- * lb302.cpp - implementation of class lb302 which is a bass synth attempting
+ * lb302.cpp - implementation of class lb302 which is a bass synth attempting
* to emulate the Roland TB303 bass synth
*
* Copyright (c) 2006-2008 Paul Giblock <pgib/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* lb302FilterIIR2 is based on the gsyn filter code by Andy Sloane.
- *
- * lb302Filter3Pole is based on the TB303 instrument written by
+ *
+ * lb302Filter3Pole is based on the TB303 instrument written by
* Josep M Comajuncosas for the CSounds library
*
* This program is free software; you can redistribute it and/or
@@ -39,6 +39,7 @@
#include "pixmap_button.h"
#include "templates.h"
#include "tooltip.h"
+#include "BandLimitedWave.h"
#include "embed.cpp"
#include "moc_lb302.cxx"
@@ -49,10 +50,10 @@
//
// New config
//
-#define LB_24_IGNORE_ENVELOPE
-#define LB_FILTERED
+#define LB_24_IGNORE_ENVELOPE
+#define LB_FILTERED
//#define LB_DECAY
-//#define LB_24_RES_TRICK
+//#define LB_24_RES_TRICK
#define LB_DIST_RATIO 4.0
#define LB_24_VOL_ADJUST 3.0
@@ -143,7 +144,7 @@ lb302FilterIIR2::lb302FilterIIR2(lb302FilterKnobState* p_fs) :
{
m_dist = new DspEffectLibrary::Distortion( 1.0, 1.0f);
-
+
};
@@ -183,7 +184,7 @@ float lb302FilterIIR2::process(const float& samp)
vcf_d2 = vcf_d1;
vcf_d1 = ret;
- if(fs->dist > 0)
+ if(fs->dist > 0)
ret=m_dist->nextSample(ret);
// output = IIR2 + dry
@@ -200,7 +201,7 @@ lb302Filter3Pole::lb302Filter3Pole(lb302FilterKnobState *p_fs) :
ay1(0),
ay2(0),
aout(0),
- lastin(0)
+ lastin(0)
{
};
@@ -225,7 +226,7 @@ void lb302Filter3Pole::envRecalc()
w = vcf_e0 + vcf_c0;
k = (fs->cutoff > 0.975)?0.975:fs->cutoff;
kfco = 50.f + (k)*((2300.f-1600.f*(fs->envmod))+(w) *
- (700.f+1500.f*(k)+(1500.f+(k)*(engine::mixer()->processingSampleRate()/2.f-6000.f)) *
+ (700.f+1500.f*(k)+(1500.f+(k)*(engine::mixer()->processingSampleRate()/2.f-6000.f)) *
(fs->envmod)) );
//+iacc*(.3+.7*kfco*kenvmod)*kaccent*kaccurve*2000
@@ -249,7 +250,7 @@ void lb302Filter3Pole::envRecalc()
}
-float lb302Filter3Pole::process(const float& samp)
+float lb302Filter3Pole::process(const float& samp)
{
float ax1 = lastin;
float ay11 = ay1;
@@ -274,12 +275,12 @@ lb302Synth::lb302Synth( InstrumentTrack * _instrumentTrack ) :
vcf_mod_knob( 0.1f, 0.0f, 1.0f, 0.005f, this, tr( "VCF Envelope Mod" ) ),
vcf_dec_knob( 0.1f, 0.0f, 1.0f, 0.005f, this, tr( "VCF Envelope Decay" ) ),
dist_knob( 0.0f, 0.0f, 1.0f, 0.01f, this, tr( "Distortion" ) ),
- wave_shape( 0.0f, 0.0f, 7.0f, this, tr( "Waveform" ) ),
+ wave_shape( 8.0f, 0.0f, 11.0f, this, tr( "Waveform" ) ),
slide_dec_knob( 0.6f, 0.0f, 1.0f, 0.005f, this, tr( "Slide Decay" ) ),
slideToggle( false, this, tr( "Slide" ) ),
accentToggle( false, this, tr( "Accent" ) ),
deadToggle( false, this, tr( "Dead" ) ),
- db24Toggle( false, this, tr( "24dB/oct Filter" ) )
+ db24Toggle( false, this, tr( "24dB/oct Filter" ) )
{
@@ -330,7 +331,7 @@ lb302Synth::lb302Synth( InstrumentTrack * _instrumentTrack ) :
vca_attack = 1.0 - 0.96406088;
vca_decay = 0.99897516;
- vco_shape = SAWTOOTH;
+ vco_shape = BL_SAWTOOTH;
// Experimenting with a0 between original (0.5) and 1.0
vca_a0 = 0.5;
@@ -342,15 +343,13 @@ lb302Synth::lb302Synth( InstrumentTrack * _instrumentTrack ) :
db24Toggled();
sample_cnt = 0;
- release_frame = 1<<24;
+ release_frame = 0;
catch_frame = 0;
catch_decay = 0;
last_offset = 0;
- new_freq = -1;
- current_freq = -1;
- delete_freq = -1;
+ new_freq = false;
filterChanged();
@@ -425,7 +424,7 @@ void lb302Synth::filterChanged()
void lb302Synth::db24Toggled()
{
vcf = vcfs[db24Toggle.value()];
- // These recalcFilter calls might suck
+ // These recalcFilter calls might suck
recalcFilter();
}
@@ -465,41 +464,41 @@ inline float GET_INC(float freq) {
int lb302Synth::process(sampleFrame *outbuf, const int size)
{
+ const float sampleRatio = 44100.f / engine::mixer()->processingSampleRate();
float w;
float samp;
// Hold on to the current VCF, and use it throughout this period
lb302Filter *filter = vcf;
- if( delete_freq == current_freq ) {
- // Normal release
- delete_freq = -1;
+ if( release_frame == 0 || ! m_playingNote )
+ {
vca_mode = 1;
}
- if( new_freq > 0.0f ) {
+ if( new_freq )
+ {
//printf(" playing new note..\n");
lb302Note note;
note.vco_inc = GET_INC( true_freq );
- //printf("GET_INC %f %f %d\n", note.vco_inc, new_freq, vca_mode );
- ///**vco_detune*//engine::mixer()->processingSampleRate(); // TODO: Use actual sampling rate.
- //printf("VCO_INC = %f\n", note.vco_inc);
note.dead = deadToggle.value();
initNote(¬e);
- //printf("%f %f, ", vco_inc, vco_c);
-
- current_freq = new_freq;
- new_freq = -1.0f;
- //printf("GOT_INC %f %f %d\n\n", note.vco_inc, new_freq, vca_mode );
- }
+ new_freq = false;
+ }
+
-
// TODO: NORMAL RELEASE
// vca_mode = 1;
- for(int i=0;i<size;i++) {
+ for( int i=0; i<size; i++ )
+ {
+ // start decay if we're past release
+ if( i >= release_frame )
+ {
+ vca_mode = 1;
+ }
// update vcf
if(vcf_envpos >= ENVINC) {
@@ -508,9 +507,9 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
vcf_envpos = 0;
if (vco_slide) {
- vco_inc=vco_slidebase-vco_slide;
+ vco_inc = vco_slidebase - vco_slide;
// Calculate coeff from dec_knob on knob change.
- vco_slide*= 0.9+(slide_dec_knob.value()*0.0999); // TODO: Adjust for Hz and ENVINC
+ vco_slide -= vco_slide * ( 0.1f - slide_dec_knob.value() * 0.0999f ) * sampleRatio; // TODO: Adjust for ENVINC
}
}
@@ -523,17 +522,10 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
// update vco
vco_c += vco_inc;
-
+
if(vco_c > 0.5)
vco_c -= 1.0;
- /*LB303
- if (catch_decay > 0) {
- if (catch_decay < decay_frames) {
- catch_decay++;
- }
- }*/
-
switch(int(rint(wave_shape.value()))) {
case 0: vco_shape = SAWTOOTH; break;
case 1: vco_shape = TRIANGLE; break;
@@ -543,6 +535,10 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
case 5: vco_shape = SINE; break;
case 6: vco_shape = EXPONENTIAL; break;
case 7: vco_shape = WHITE_NOISE; break;
+ case 8: vco_shape = BL_SAWTOOTH; break;
+ case 9: vco_shape = BL_SQUARE; break;
+ case 10: vco_shape = BL_TRIANGLE; break;
+ case 11: vco_shape = BL_MOOG; break;
default: vco_shape = SAWTOOTH; break;
}
@@ -568,7 +564,7 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
break;
case MOOG: // Maybe the fall should be exponential/sinsoidal instead of quadric.
- // [-0.5, 0]: Rise, [0,0.25]: Slope down, [0.25,0.5]: Low
+ // [-0.5, 0]: Rise, [0,0.25]: Slope down, [0.25,0.5]: Low
vco_k = (vco_c*2.0)+0.5;
if (vco_k>1.0) {
vco_k = -0.5 ;
@@ -577,7 +573,7 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
w = 2.0*(vco_k-0.5)-1.0;
vco_k = 0.5 - sqrtf(1.0-(w*w));
}
- vco_k *= 2.0; // MOOG wave gets filtered away
+ vco_k *= 2.0; // MOOG wave gets filtered away
break;
case SINE:
@@ -592,6 +588,22 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
case WHITE_NOISE:
vco_k = 0.5 * Oscillator::noiseSample( vco_c );
break;
+
+ case BL_SAWTOOTH:
+ vco_k = BandLimitedWave::oscillate( vco_c + 0.5f, BandLimitedWave::pdToLen( vco_inc ), BandLimitedWave::BLSaw ) * 0.5f;
+ break;
+
+ case BL_SQUARE:
+ vco_k = BandLimitedWave::oscillate( vco_c + 0.5f, BandLimitedWave::pdToLen( vco_inc ), BandLimitedWave::BLSquare ) * 0.5f;
+ break;
+
+ case BL_TRIANGLE:
+ vco_k = BandLimitedWave::oscillate( vco_c + 0.5f, BandLimitedWave::pdToLen( vco_inc ), BandLimitedWave::BLTriangle ) * 0.5f;
+ break;
+
+ case BL_MOOG:
+ vco_k = BandLimitedWave::oscillate( vco_c + 0.5f, BandLimitedWave::pdToLen( vco_inc ), BandLimitedWave::BLMoog );
+ break;
}
//vca_a = 0.5;
@@ -600,8 +612,8 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
//samp = vcf->process(vco_k)*2.0*vca_a;
//samp = vcf->process(vco_k)*2.0;
samp = filter->process(vco_k) * vca_a;
- //printf("%f %d\n", vco_c, sample_cnt);
-
+ //printf("%f %d\n", vco_c, sample_cnt);
+
//samp = vco_k * vca_a;
@@ -609,7 +621,7 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
{
// vca_a = 0;
}
-
+
#else
//samp = vco_k*vca_a;
#endif
@@ -619,21 +631,15 @@ int lb302Synth::process(sampleFrame *outbuf, const int size)
*/
//LB302 samp *= (float)(decay_frames - catch_decay)/(float)decay_frames;
- for(int c=0; c<DEFAULT_CHANNELS; c++) {
- outbuf[i][c]=samp;
- }
-
-
- /*LB303
- if((int)i>=release_frame) {
- vca_mode=1;
+ for( int c = 0; c < DEFAULT_CHANNELS; c++ )
+ {
+ outbuf[i][c] = samp;
}
- */
// Handle Envelope
if(vca_mode==0) {
vca_a+=(vca_a0-vca_a)*vca_attack;
- if(sample_cnt>=0.5*engine::mixer()->processingSampleRate())
+ if(sample_cnt>=0.5*engine::mixer()->processingSampleRate())
vca_mode = 2;
}
else if(vca_mode == 1) {
@@ -661,7 +667,7 @@ void lb302Synth::initNote( lb302Note *n)
catch_decay = 0;
vco_inc = n->vco_inc;
-
+
// Always reset vca on non-dead notes, and
// Only reset vca on decaying(decayed) and never-played
if(n->dead == 0 || (vca_mode==1 || vca_mode==3)) {
@@ -675,18 +681,7 @@ void lb302Synth::initNote( lb302Note *n)
vca_mode = 2;
}
- // Initiate Slide
- // TODO: Break out into function, should be called again on detuneChanged
- if (vco_slideinc) {
- //printf(" sliding\n");
- vco_slide = vco_inc-vco_slideinc; // Slide amount
- vco_slidebase = vco_inc; // The REAL frequency
- vco_slideinc = 0; // reset from-note
- }
- else {
- vco_slide = 0;
- }
- // End break-out
+ initSlide();
// Slide-from note, save inc for next note
if (slideToggle.value()) {
@@ -695,62 +690,81 @@ void lb302Synth::initNote( lb302Note *n)
recalcFilter();
-
+
if(n->dead ==0){
// Swap next two blocks??
vcf->playNote();
// Ensure envelope is recalculated
vcf_envpos = ENVINC;
- // Double Check
+ // Double Check
//vca_mode = 0;
//vca_a = 0.0;
}
}
-void lb302Synth::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer )
+void lb302Synth::initSlide()
{
- //fpp_t framesPerPeriod = engine::mixer()->framesPerPeriod();
+ // Initiate Slide
+ if (vco_slideinc) {
+ //printf(" sliding\n");
+ vco_slide = vco_inc-vco_slideinc; // Slide amount
+ vco_slidebase = vco_inc; // The REAL frequency
+ vco_slideinc = 0; // reset from-note
+ }
+ else {
+ vco_slide = 0;
+ }
+}
- if( _n->isArpeggioBaseNote() )
+
+void lb302Synth::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer )
+{
+ if( _n->isMasterNote() || ( _n->hasParent() && _n->isReleased() ) )
{
return;
}
- // Currently have release/decay disabled
- // Start the release decay if this is the first release period.
- //if (_n->released() && catch_decay == 0)
- // catch_decay = 1;
-
- bool decay_note = false;
-
- release_frame = _n->framesLeft() - desiredReleaseFrames();
-
-
- //LB303 if ( _n->totalFramesPlayed() <= 0 ) {
- // This code is obsolete, hence the "if false"
+ // sort notes: new notes to the end
+ m_notesMutex.lock();
+ if( _n->totalFramesPlayed() == 0 )
+ {
+ m_notes.append( _n );
+ }
+ else
+ {
+ m_notes.prepend( _n );
+ }
+ m_notesMutex.unlock();
+
+ release_frame = qMax( release_frame, _n->framesLeft() + _n->offset() );
+}
- // Existing note. Allow it to decay.
- if(deadToggle.value() == 0 && decay_note) {
- /* lb302Note note;
- note.vco_inc = _n->frequency()*vco_detune/engine::mixer()->processingSampleRate(); // TODO: Use actual sampling rate.
- note.dead = deadToggle.value();
- initNote(¬e);
- vca_mode=0;
- */
- }
+void lb302Synth::processNote( NotePlayHandle * _n )
+{
/// Start a new note.
- else if( _n->totalFramesPlayed() == 0 ) {
- new_freq = _n->unpitchedFrequency();
- true_freq = _n->frequency();
+ if( _n->m_pluginData != this )
+ {
+ m_playingNote = _n;
+ new_freq = true;
_n->m_pluginData = this;
}
+
+ if( ! m_playingNote && ! _n->isReleased() && release_frame > 0 )
+ {
+ m_playingNote = _n;
+ if ( slideToggle.value() )
+ {
+ vco_slideinc = GET_INC( _n->frequency() );
+ }
+ }
// Check for slide
- if( _n->unpitchedFrequency() == current_freq ) {
+ if( m_playingNote == _n )
+ {
true_freq = _n->frequency();
if( slideToggle.value() ) {
@@ -760,22 +774,24 @@ void lb302Synth::playNote( NotePlayHandle * _n, sampleFrame * _working_buffer )
vco_inc = GET_INC( true_freq );
}
}
-
- //LB303 }
-
-
}
void lb302Synth::play( sampleFrame * _working_buffer )
{
- //printf(".");
+ m_notesMutex.lock();
+ while( ! m_notes.isEmpty() )
+ {
+ processNote( m_notes.takeFirst() );
+ };
+ m_notesMutex.unlock();
+
const fpp_t frames = engine::mixer()->framesPerPeriod();
- process( _working_buffer, frames);
- instrumentTrack()->processAudioBuffer( _working_buffer, frames,
- NULL );
+ process( _working_buffer, frames );
+ instrumentTrack()->processAudioBuffer( _working_buffer, frames, NULL );
+// release_frame = 0; //removed for issue # 1432
}
@@ -783,9 +799,9 @@ void lb302Synth::play( sampleFrame * _working_buffer )
void lb302Synth::deleteNotePluginData( NotePlayHandle * _n )
{
//printf("GONE\n");
- if( _n->unpitchedFrequency() == current_freq )
+ if( m_playingNote == _n )
{
- delete_freq = current_freq;
+ m_playingNote = NULL;
}
}
@@ -823,15 +839,15 @@ lb302SynthView::lb302SynthView( Instrument * _instrument, QWidget * _parent ) :
m_slideToggle = new ledCheckBox( "", this );
m_slideToggle->move( 10, 180 );
- m_accentToggle = new ledCheckBox( "", this );
+/* m_accentToggle = new ledCheckBox( "", this );
m_accentToggle->move( 10, 200 );
- m_accentToggle->setDisabled(true);
+ m_accentToggle->setDisabled(true);*/ // accent removed pending real implementation - no need for non-functional buttons
m_deadToggle = new ledCheckBox( "", this );
- m_deadToggle->move( 10, 220 );
+ m_deadToggle->move( 10, 200 );
m_db24Toggle = new ledCheckBox( "", this );
- m_db24Toggle->setWhatsThis(
+ m_db24Toggle->setWhatsThis(
tr( "303-es-que, 24dB/octave, 3 pole filter" ) );
m_db24Toggle->move( 10, 150);
@@ -888,8 +904,8 @@ lb302SynthView::lb302SynthView( Instrument * _instrument, QWidget * _parent ) :
"round_square_wave_inactive" ) );
toolTip::add( roundSqrWaveBtn,
tr( "Click here for a square-wave with a rounded end." ) );
-
- pixmapButton * moogWaveBtn =
+
+ pixmapButton * moogWaveBtn =
new pixmapButton( this, tr( "Moog wave" ) );
moogWaveBtn->move( waveBtnX+(16*4), waveBtnY );
moogWaveBtn->setActiveGraphic(
@@ -929,6 +945,47 @@ lb302SynthView::lb302SynthView( Instrument * _instrument, QWidget * _parent ) :
toolTip::add( whiteNoiseWaveBtn,
tr( "Click here for white-noise." ) );
+ pixmapButton * blSawWaveBtn =
+ new pixmapButton( this, tr( "Bandlimited saw wave" ) );
+ blSawWaveBtn->move( waveBtnX+(16*9)-8, waveBtnY );
+ blSawWaveBtn->setActiveGraphic(
+ embed::getIconPixmap( "saw_wave_active" ) );
+ blSawWaveBtn->setInactiveGraphic(
+ embed::getIconPixmap( "saw_wave_inactive" ) );
+ toolTip::add( blSawWaveBtn,
+ tr( "Click here for bandlimited saw wave." ) );
+
+ pixmapButton * blSquareWaveBtn =
+ new pixmapButton( this, tr( "Bandlimited square wave" ) );
+ blSquareWaveBtn->move( waveBtnX+(16*10)-8, waveBtnY );
+ blSquareWaveBtn->setActiveGraphic(
+ embed::getIconPixmap( "square_wave_active" ) );
+ blSquareWaveBtn->setInactiveGraphic(
+ embed::getIconPixmap( "square_wave_inactive" ) );
+ toolTip::add( blSquareWaveBtn,
+ tr( "Click here for bandlimited square wave." ) );
+
+ pixmapButton * blTriangleWaveBtn =
+ new pixmapButton( this, tr( "Bandlimited triangle wave" ) );
+ blTriangleWaveBtn->move( waveBtnX+(16*11)-8, waveBtnY );
+ blTriangleWaveBtn->setActiveGraphic(
+ embed::getIconPixmap( "triangle_wave_active" ) );
+ blTriangleWaveBtn->setInactiveGraphic(
+ embed::getIconPixmap( "triangle_wave_inactive" ) );
+ toolTip::add( blTriangleWaveBtn,
+ tr( "Click here for bandlimited triangle wave." ) );
+
+ pixmapButton * blMoogWaveBtn =
+ new pixmapButton( this, tr( "Bandlimited moog saw wave" ) );
+ blMoogWaveBtn->move( waveBtnX+(16*12)-8, waveBtnY );
+ blMoogWaveBtn->setActiveGraphic(
+ embed::getIconPixmap( "moog_saw_wave_active" ) );
+ blMoogWaveBtn->setInactiveGraphic(
+ embed::getIconPixmap( "moog_saw_wave_inactive" ) );
+ toolTip::add( blMoogWaveBtn,
+ tr( "Click here for bandlimited moog saw wave." ) );
+
+
m_waveBtnGrp = new automatableButtonGroup( this );
m_waveBtnGrp->addButton( sawWaveBtn );
m_waveBtnGrp->addButton( triangleWaveBtn );
@@ -938,6 +995,10 @@ lb302SynthView::lb302SynthView( Instrument * _instrument, QWidget * _parent ) :
m_waveBtnGrp->addButton( sinWaveBtn );
m_waveBtnGrp->addButton( exponentialWaveBtn );
m_waveBtnGrp->addButton( whiteNoiseWaveBtn );
+ m_waveBtnGrp->addButton( blSawWaveBtn );
+ m_waveBtnGrp->addButton( blSquareWaveBtn );
+ m_waveBtnGrp->addButton( blTriangleWaveBtn );
+ m_waveBtnGrp->addButton( blMoogWaveBtn );
setAutoFillBackground( true );
QPalette pal;
@@ -955,7 +1016,7 @@ lb302SynthView::~lb302SynthView()
void lb302SynthView::modelChanged()
{
lb302Synth * syn = castModel<lb302Synth>();
-
+
m_vcfCutKnob->setModel( &syn->vcf_cut_knob );
m_vcfResKnob->setModel( &syn->vcf_res_knob );
m_vcfDecKnob->setModel( &syn->vcf_dec_knob );
@@ -964,9 +1025,9 @@ void lb302SynthView::modelChanged()
m_distKnob->setModel( &syn->dist_knob );
m_waveBtnGrp->setModel( &syn->wave_shape );
-
+
m_slideToggle->setModel( &syn->slideToggle );
- m_accentToggle->setModel( &syn->accentToggle );
+ /*m_accentToggle->setModel( &syn->accentToggle );*/
m_deadToggle->setModel( &syn->deadToggle );
m_db24Toggle->setModel( &syn->db24Toggle );
}
diff --git a/plugins/lb302/lb302.h b/plugins/lb302/lb302.h
index b909b27..6352151 100644
--- a/plugins/lb302/lb302.h
+++ b/plugins/lb302/lb302.h
@@ -3,12 +3,12 @@
* emulate the Roland TB303 bass synth
*
* Copyright (c) 2006-2008 Paul Giblock <pgib/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* lb302FilterIIR2 is based on the gsyn filter code by Andy Sloane.
- *
- * lb302Filter3Pole is based on the TB303 instrument written by
+ *
+ * lb302Filter3Pole is based on the TB303 instrument written by
* Josep M Comajuncosas for the CSounds library
*
* This program is free software; you can redistribute it and/or
@@ -29,8 +29,8 @@
*/
-#ifndef _LB302_H_
-#define _LB302_H_
+#ifndef LB302_H_
+#define LB302_H_
#include "DspEffectLibrary.h"
#include "Instrument.h"
@@ -38,6 +38,8 @@
#include "led_checkbox.h"
#include "knob.h"
#include "Mixer.h"
+#include "NotePlayHandle.h"
+#include <QMutex>
static const int NUM_FILTERS = 2;
@@ -67,12 +69,12 @@ class lb302Filter
virtual void playNote();
protected:
- lb302FilterKnobState *fs;
+ lb302FilterKnobState *fs;
// Filter Decay
float vcf_c0; // c0=e1 on retrigger; c0*=ed every sample; cutoff=e0+c0
float vcf_e0, // e0 and e1 for interpolation
- vcf_e1;
+ vcf_e1;
float vcf_rescoeff; // Resonance coefficient [0.30,9.54]
};
@@ -87,13 +89,13 @@ class lb302FilterIIR2 : public lb302Filter
virtual float process(const float& samp);
protected:
- float vcf_d1, // d1 and d2 are added back into the sample with
+ float vcf_d1, // d1 and d2 are added back into the sample with
vcf_d2; // vcf_a and b as coefficients. IIR2 resonance
// loop.
// IIR2 Coefficients for mixing dry and delay.
- float vcf_a, // Mixing coefficients for the final sound.
- vcf_b, //
+ float vcf_a, // Mixing coefficients for the final sound.
+ vcf_b, //
vcf_c;
DspEffectLibrary::Distortion * m_dist;
@@ -111,15 +113,15 @@ class lb302Filter3Pole : public lb302Filter
virtual float process(const float& samp);
protected:
- float kfcn,
- kp,
- kp1,
- kp1h,
+ float kfcn,
+ kp,
+ kp1,
+ kp1h,
kres;
- float ay1,
- ay2,
- aout,
- lastin,
+ float ay1,
+ ay2,
+ aout,
+ lastin,
value;
};
@@ -164,9 +166,10 @@ public:
virtual PluginView * instantiateView( QWidget * _parent );
private:
+ void processNote( NotePlayHandle * n );
void initNote(lb302Note *note);
-
+ void initSlide();
private:
FloatModel vcf_cut_knob;
@@ -179,7 +182,7 @@ private:
FloatModel dist_knob;
IntModel wave_shape;
FloatModel slide_dec_knob;
-
+
BoolModel slideToggle;
BoolModel accentToggle;
BoolModel deadToggle;
@@ -200,7 +203,8 @@ private:
vco_slideinc, //* Slide base to use in next node. Nonzero=slide next note
vco_slidebase; //* The base vco_inc while sliding.
- enum vco_shape_t { SAWTOOTH, SQUARE, TRIANGLE, MOOG, ROUND_SQUARE, SINE, EXPONENTIAL, WHITE_NOISE };
+ enum vco_shape_t { SAWTOOTH, SQUARE, TRIANGLE, MOOG, ROUND_SQUARE, SINE, EXPONENTIAL, WHITE_NOISE,
+ BL_SAWTOOTH, BL_SQUARE, BL_TRIANGLE, BL_MOOG };
vco_shape_t vco_shape;
// Filters (just keep both loaded and switch)
@@ -215,9 +219,9 @@ private:
// More States
int vcf_envpos; // Update counter. Updates when >= ENVINC
- float vca_attack, // Amp attack
+ float vca_attack, // Amp attack
vca_decay, // Amp decay
- vca_a0, // Initial amplifier coefficient
+ vca_a0, // Initial amplifier coefficient
vca_a; // Amplifier coefficient.
// Envelope State
@@ -231,9 +235,7 @@ private:
int catch_frame;
int catch_decay;
- float new_freq;
- float current_freq;
- float delete_freq;
+ bool new_freq;
float true_freq;
void recalcFilter();
@@ -242,11 +244,15 @@ private:
friend class lb302SynthView;
+ NotePlayHandle * m_playingNote;
+ NotePlayHandleList m_notes;
+ QMutex m_notesMutex;
} ;
class lb302SynthView : public InstrumentView
{
+ Q_OBJECT
public:
lb302SynthView( Instrument * _instrument,
QWidget * _parent );
@@ -254,7 +260,7 @@ public:
private:
virtual void modelChanged();
-
+
knob * m_vcfCutKnob;
knob * m_vcfResKnob;
knob * m_vcfDecKnob;
@@ -263,9 +269,9 @@ private:
knob * m_distKnob;
knob * m_slideDecKnob;
automatableButtonGroup * m_waveBtnGrp;
-
+
ledCheckBox * m_slideToggle;
- ledCheckBox * m_accentToggle;
+ /*ledCheckBox * m_accentToggle;*/ // removed pending accent implementation
ledCheckBox * m_deadToggle;
ledCheckBox * m_db24Toggle;
diff --git a/plugins/lb302/moc_lb302.cxx_parameters b/plugins/lb302/moc_lb302.cxx_parameters
deleted file mode 100644
index 6bcd6c1..0000000
--- a/plugins/lb302/moc_lb302.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/lb302
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=lb302
--o
-/home/lukas/src/lmms/plugins/lb302/moc_lb302.cxx
-/home/lukas/src/lmms/plugins/lb302/lb302.h
diff --git a/plugins/lb303/lb303.cpp b/plugins/lb303/lb303.cpp
index 6e00992..b766360 100644
--- a/plugins/lb303/lb303.cpp
+++ b/plugins/lb303/lb303.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2008 Paul Giblock <pgib/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* lb303FilterIIR2 is based on the gsyn filter code by Andy Sloane.
*
diff --git a/plugins/lb303/lb303.h b/plugins/lb303/lb303.h
index 903775c..be780cd 100644
--- a/plugins/lb303/lb303.h
+++ b/plugins/lb303/lb303.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2008 Paul Giblock <pgib/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* lb303FilterIIR2 is based on the gsyn filter code by Andy Sloane.
*
@@ -241,6 +241,7 @@ private:
class lb303SynthView : public InstrumentView
{
+ Q_OBJECT
public:
lb303SynthView( Instrument * _instrument,
QWidget * _parent );
diff --git a/plugins/midi_import/CMakeLists.txt b/plugins/midi_import/CMakeLists.txt
deleted file mode 100644
index 1255f08..0000000
--- a/plugins/midi_import/CMakeLists.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-INCLUDE(BuildPlugin)
-
-BUILD_PLUGIN(midiimport MidiImport.cpp MidiImport.h
- portsmf/allegro.cpp portsmf/allegro.h portsmf/allegrosmfwr.cpp
- portsmf/allegrord.cpp portsmf/allegrowr.cpp portsmf/allegrosmfrd.cpp
- portsmf/mfmidi.cpp portsmf/mfmidi.h portsmf/strparse.cpp
- portsmf/strparse.h portsmf/algrd_internal.h portsmf/algsmfrd_internal.h
- portsmf/trace.h)
diff --git a/plugins/midi_import/MidiImport.cpp b/plugins/midi_import/MidiImport.cpp
deleted file mode 100644
index 0444ce5..0000000
--- a/plugins/midi_import/MidiImport.cpp
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- * MidiImport.cpp - support for importing MIDI files
- *
- * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-
-#include <QtXml/QDomDocument>
-#include <QtCore/QDir>
-#include <QtGui/QApplication>
-#include <QtGui/QMessageBox>
-#include <QtGui/QProgressDialog>
-
-#include "MidiImport.h"
-#include "TrackContainer.h"
-#include "InstrumentTrack.h"
-#include "AutomationTrack.h"
-#include "AutomationPattern.h"
-#include "config_mgr.h"
-#include "pattern.h"
-#include "Instrument.h"
-#include "MainWindow.h"
-#include "MidiTime.h"
-#include "debug.h"
-#include "embed.h"
-#include "song.h"
-
-#include "portsmf/allegro.h"
-
-#define makeID(_c0, _c1, _c2, _c3) \
- ( 0 | \
- ( ( _c0 ) | ( ( _c1 ) << 8 ) | ( ( _c2 ) << 16 ) | ( ( _c3 ) << 24 ) ) )
-
-
-
-extern "C"
-{
-
-Plugin::Descriptor PLUGIN_EXPORT midiimport_plugin_descriptor =
-{
- STRINGIFY( PLUGIN_NAME ),
- "MIDI Import",
- QT_TRANSLATE_NOOP( "pluginBrowser",
- "Filter for importing MIDI-files into LMMS" ),
- "Tobias Doerffel <tobydox/at/users/dot/sf/dot/net>",
- 0x0100,
- Plugin::ImportFilter,
- NULL,
- NULL,
- NULL
-} ;
-
-}
-
-
-MidiImport::MidiImport( const QString & _file ) :
- ImportFilter( _file, &midiimport_plugin_descriptor ),
- m_events(),
- m_timingDivision( 0 )
-{
-}
-
-
-
-
-MidiImport::~MidiImport()
-{
-}
-
-
-
-
-bool MidiImport::tryImport( TrackContainer* tc )
-{
- if( openFile() == false )
- {
- return false;
- }
-
-#ifdef LMMS_HAVE_FLUIDSYNTH
- if( engine::hasGUI() &&
- configManager::inst()->defaultSoundfont().isEmpty() )
- {
- QMessageBox::information( engine::mainWindow(),
- tr( "Setup incomplete" ),
- tr( "You do not have set up a default soundfont in "
- "the settings dialog (Edit->Settings). "
- "Therefore no sound will be played back after "
- "importing this MIDI file. You should download "
- "a General MIDI soundfont, specify it in "
- "settings dialog and try again." ) );
- }
-#else
- if( engine::hasGUI() )
- {
- QMessageBox::information( engine::mainWindow(),
- tr( "Setup incomplete" ),
- tr( "You did not compile LMMS with support for "
- "SoundFont2 player, which is used to add default "
- "sound to imported MIDI files. "
- "Therefore no sound will be played back after "
- "importing this MIDI file." ) );
- }
-#endif
-
- switch( readID() )
- {
- case makeID( 'M', 'T', 'h', 'd' ):
- printf( "MidiImport::tryImport(): found MThd\n");
- return readSMF( tc );
-
- case makeID( 'R', 'I', 'F', 'F' ):
- printf( "MidiImport::tryImport(): found RIFF\n");
- return readRIFF( tc );
-
- default:
- printf( "MidiImport::tryImport(): not a Standard MIDI "
- "file\n" );
- return false;
- }
-}
-
-
-
-
-class smfMidiCC
-{
-
-public:
- smfMidiCC() :
- at( NULL ),
- ap( NULL ),
- lastPos( 0 )
- { }
-
- AutomationTrack * at;
- AutomationPattern * ap;
- MidiTime lastPos;
-
- smfMidiCC & create( TrackContainer* tc )
- {
- if( !at )
- {
- at = dynamic_cast<AutomationTrack *>( track::create( track::AutomationTrack, tc ) );
- }
- return *this;
- }
-
-
- void clear()
- {
- at = NULL;
- ap = NULL;
- lastPos = 0;
- }
-
-
- smfMidiCC & putValue( MidiTime time, AutomatableModel * objModel, float value )
- {
- if( !ap || time > lastPos + DefaultTicksPerTact )
- {
- MidiTime pPos = MidiTime( time.getTact(), 0 );
- ap = dynamic_cast<AutomationPattern*>(
- at->createTCO(0) );
- ap->movePosition( pPos );
- }
- ap->addObject( objModel );
-
- lastPos = time;
- time = time - ap->startPosition();
- ap->putValue( time, value, false );
- ap->changeLength( MidiTime( time.getTact() + 1, 0 ) );
-
- return *this;
- }
-};
-
-
-
-class smfMidiChannel
-{
-
-public:
- smfMidiChannel() :
- it( NULL ),
- p( NULL ),
- it_inst( NULL ),
- isSF2( false ),
- hasNotes( false ),
- lastEnd( 0 )
- { }
-
- InstrumentTrack * it;
- pattern * p;
- Instrument * it_inst;
- bool isSF2;
- bool hasNotes;
- MidiTime lastEnd;
-
- smfMidiChannel * create( TrackContainer* tc )
- {
- if( !it ) {
- it = dynamic_cast<InstrumentTrack *>( track::create( track::InstrumentTrack, tc ) );
-
-#ifdef LMMS_HAVE_FLUIDSYNTH
- it_inst = it->loadInstrument( "sf2player" );
-
- if( it_inst )
- {
- isSF2 = true;
- it_inst->loadFile( configManager::inst()->defaultSoundfont() );
- it_inst->childModel( "bank" )->setValue( 0 );
- it_inst->childModel( "patch" )->setValue( 0 );
- }
- else
- {
- it_inst = it->loadInstrument( "patman" );
- }
-#else
- it_inst = it->loadInstrument( "patman" );
-#endif
-
- lastEnd = 0;
- }
- return this;
- }
-
-
- void addNote( note & n )
- {
- if( !p || n.pos() > lastEnd + DefaultTicksPerTact )
- {
- MidiTime pPos = MidiTime( n.pos().getTact(), 0 );
- p = dynamic_cast<pattern *>( it->createTCO( 0 ) );
- p->movePosition( pPos );
- }
- hasNotes = true;
- lastEnd = n.pos() + n.length();
- n.setPos( n.pos( p->startPosition() ) );
- p->addNote( n, false );
- }
-
-};
-
-
-bool MidiImport::readSMF( TrackContainer* tc )
-{
- QString filename = file().fileName();
- closeFile();
-
- const int preTrackSteps = 2;
- QProgressDialog pd( TrackContainer::tr( "Importing MIDI-file..." ),
- TrackContainer::tr( "Cancel" ), 0, preTrackSteps, engine::mainWindow() );
- pd.setWindowTitle( TrackContainer::tr( "Please wait..." ) );
- pd.setWindowModality(Qt::WindowModal);
- pd.setMinimumDuration( 0 );
-
- pd.setValue( 0 );
-
- Alg_seq_ptr seq = new Alg_seq(filename.toLocal8Bit(), true);
- seq->convert_to_beats();
-
- pd.setMaximum( seq->tracks() + preTrackSteps );
- pd.setValue( 1 );
-
- // 128 CC + Pitch Bend
- smfMidiCC ccs[129];
- smfMidiChannel chs[256];
-
- MeterModel & timeSigMM = engine::getSong()->getTimeSigModel();
- AutomationPattern * timeSigNumeratorPat =
- AutomationPattern::globalAutomationPattern( &timeSigMM.numeratorModel() );
- AutomationPattern * timeSigDenominatorPat =
- AutomationPattern::globalAutomationPattern( &timeSigMM.denominatorModel() );
-
- // TODO: adjust these to Time.Sig changes
- double beatsPerTact = 4;
- double ticksPerBeat = DefaultTicksPerTact / beatsPerTact;
-
- // Time-sig changes
- Alg_time_sigs * timeSigs = &seq->time_sig;
- for( int s = 0; s < timeSigs->length(); ++s )
- {
- Alg_time_sig timeSig = (*timeSigs)[s];
- // Initial timeSig, set song-default value
- if(/* timeSig.beat == 0*/ true )
- {
- // TODO set song-global default value
- printf("Another timesig at %f\n", timeSig.beat);
- timeSigNumeratorPat->putValue( timeSig.beat*ticksPerBeat, timeSig.num );
- timeSigDenominatorPat->putValue( timeSig.beat*ticksPerBeat, timeSig.den );
- }
- else
- {
- }
-
- }
-
- pd.setValue( 2 );
-
- // Tempo stuff
- AutomationPattern * tap = tc->tempoAutomationPattern();
- if( tap )
- {
- tap->clear();
- Alg_time_map * timeMap = seq->get_time_map();
- Alg_beats & beats = timeMap->beats;
- for( int i = 0; i < beats.len - 1; i++ )
- {
- Alg_beat_ptr b = &(beats[i]);
- double tempo = ( beats[i + 1].beat - b->beat ) /
- ( beats[i + 1].time - beats[i].time );
- tap->putValue( b->beat * ticksPerBeat, tempo * 60.0 );
- }
- if( timeMap->last_tempo_flag )
- {
- Alg_beat_ptr b = &( beats[beats.len - 1] );
- tap->putValue( b->beat * ticksPerBeat, timeMap->last_tempo * 60.0 );
- }
- }
-
- // Song events
- for( int e = 0; e < seq->length(); ++e )
- {
- Alg_event_ptr evt = (*seq)[e];
-
- if( evt->is_update() )
- {
- printf("Unhandled SONG update: %d %f %s\n",
- evt->get_type_code(), evt->time, evt->get_attribute() );
- }
- }
-
- // Tracks
- for( int t = 0; t < seq->tracks(); ++t )
- {
- Alg_track_ptr trk = seq->track( t );
- pd.setValue( t + preTrackSteps );
-
- for( int c = 0; c < 129; c++ )
- {
- ccs[c].clear();
- }
-
- // Now look at events
- for( int e = 0; e < trk->length(); ++e )
- {
- Alg_event_ptr evt = (*trk)[e];
-
- if( evt->chan == -1 )
- {
- printf("MISSING GLOBAL THINGY\n");
- printf(" %d %d %f %s\n", (int) evt->chan,
- evt->get_type_code(), evt->time,
- evt->get_attribute() );
- // Global stuff
- }
- else if( evt->is_note() && evt->chan < 256 )
- {
- smfMidiChannel * ch = chs[evt->chan].create( tc );
- Alg_note_ptr noteEvt = dynamic_cast<Alg_note_ptr>( evt );
-
- note n( noteEvt->get_duration() * ticksPerBeat,
- noteEvt->get_start_time() * ticksPerBeat,
- noteEvt->get_identifier() - 12,
- noteEvt->get_loud());
- ch->addNote( n );
-
- }
-
- else if( evt->is_update() )
- {
- smfMidiChannel * ch = chs[evt->chan].create( tc );
-
- double time = evt->time*ticksPerBeat;
- QString update( evt->get_attribute() );
-
- if( update == "programi" )
- {
- long prog = evt->get_integer_value();
- if( ch->isSF2 )
- {
- ch->it_inst->childModel( "bank" )->setValue( 0 );
- ch->it_inst->childModel( "patch" )->setValue( prog );
- }
- else {
- const QString num = QString::number( prog );
- const QString filter = QString().fill( '0', 3 - num.length() ) + num + "*.pat";
- const QString dir = "/usr/share/midi/"
- "freepats/Tone_000/";
- const QStringList files = QDir( dir ).
- entryList( QStringList( filter ) );
- if( ch->it_inst && !files.empty() )
- {
- ch->it_inst->loadFile( dir+files.front() );
- }
- }
- }
- else if( update == "tracknames" )
- {
- QString trackName( evt->get_string_value() );
- ch->it->setName( trackName );
- //ch.p->setName( trackName );
- }
-
- else if( update.startsWith( "control" ) || update == "bendr" )
- {
- int ccid = update.mid( 7, update.length()-8 ).toInt();
- if( update == "bendr" )
- {
- ccid = 128;
- }
- if( ccid <= 128 )
- {
- double cc = evt->get_real_value();
- AutomatableModel * objModel = NULL;
-
- switch( ccid )
- {
- case 0:
- if( ch->isSF2 && ch->it_inst )
- {
- objModel = ch->it_inst->childModel( "bank" );
- printf("BANK SELECT %f %d\n", cc, (int)(cc*127.0));
- cc *= 127.0f;
- }
- break;
-
- case 7:
- objModel = ch->it->volumeModel();
- cc *= 100.0f;
- break;
-
- case 10:
- objModel = ch->it->panningModel();
- cc = cc * 200.f - 100.0f;
- break;
-
- case 128:
- objModel = ch->it->pitchModel();
- cc = cc * 100.0f;
- break;
- }
-
- if( objModel )
- {
- if( time == 0 && objModel )
- {
- objModel->setInitValue( cc );
- }
- else
- {
- ccs[ccid].create( tc );
- ccs[ccid].putValue( time, objModel, cc );
- }
- }
- }
- }
- else {
- printf("Unhandled update: %d %d %f %s\n", (int) evt->chan,
- evt->get_type_code(), evt->time, evt->get_attribute() );
- }
- }
- }
- }
-
- delete seq;
-
-
- for( int c=0; c < 256; ++c )
- {
- if( !chs[c].hasNotes && chs[c].it )
- {
- printf(" Should remove empty track\n");
- // must delete trackView first - but where is it?
- //tc->removeTrack( chs[c].it );
- //it->deleteLater();
- }
- }
-
- return true;
-}
-
-
-
-
-bool MidiImport::readRIFF( TrackContainer* tc )
-{
- // skip file length
- skip( 4 );
-
- // check file type ("RMID" = RIFF MIDI)
- if( readID() != makeID( 'R', 'M', 'I', 'D' ) )
- {
-invalid_format:
- qWarning( "MidiImport::readRIFF(): invalid file format" );
- return false;
- }
-
- // search for "data" chunk
- while( 1 )
- {
- const int id = readID();
- const int len = read32LE();
- if( file().atEnd() )
- {
-data_not_found:
- qWarning( "MidiImport::readRIFF(): data chunk not found" );
- return false;
- }
- if( id == makeID( 'd', 'a', 't', 'a' ) )
- {
- break;
- }
- if( len < 0 )
- {
- goto data_not_found;
- }
- skip( ( len + 1 ) & ~1 );
- }
-
- // the "data" chunk must contain data in SMF format
- if( readID() != makeID( 'M', 'T', 'h', 'd' ) )
- {
- goto invalid_format;
- }
- return readSMF( tc );
-}
-
-
-
-
-void MidiImport::error()
-{
- printf( "MidiImport::readTrack(): invalid MIDI data (offset %#x)\n",
- (unsigned int) file().pos() );
-}
-
-
-
-extern "C"
-{
-
-// necessary for getting instance out of shared lib
-Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data )
-{
- return new MidiImport( QString::fromUtf8(
- static_cast<const char *>( _data ) ) );
-}
-
-
-}
-
diff --git a/plugins/midi_import/MidiImport.h b/plugins/midi_import/MidiImport.h
deleted file mode 100644
index 66b8393..0000000
--- a/plugins/midi_import/MidiImport.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * MidiImport.h - support for importing MIDI-files
- *
- * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-#ifndef _MIDI_IMPORT_H
-#define _MIDI_IMPORT_H
-
-#include <QtCore/QString>
-#include <QtCore/QPair>
-#include <QtCore/QVector>
-
-#include "MidiEvent.h"
-#include "ImportFilter.h"
-
-
-class MidiImport : public ImportFilter
-{
-public:
- MidiImport( const QString & _file );
- virtual ~MidiImport();
-
- virtual PluginView * instantiateView( QWidget * )
- {
- return( NULL );
- }
-
-
-private:
- virtual bool tryImport( TrackContainer* tc );
-
- bool readSMF( TrackContainer* tc );
- bool readRIFF( TrackContainer* tc );
- bool readTrack( int _track_end, QString & _track_name );
-
- void error( void );
-
-
- inline int readInt( int _bytes )
- {
- int c, value = 0;
- do
- {
- c = readByte();
- if( c == -1 )
- {
- return( -1 );
- }
- value = ( value << 8 ) | c;
- } while( --_bytes );
- return( value );
- }
- inline int read32LE()
- {
- int value = readByte();
- value |= readByte() << 8;
- value |= readByte() << 16;
- value |= readByte() << 24;
- return value;
- }
- inline int readVar()
- {
- int c = readByte();
- int value = c & 0x7f;
- if( c & 0x80 )
- {
- c = readByte();
- value = ( value << 7 ) | ( c & 0x7f );
- if( c & 0x80 )
- {
- c = readByte();
- value = ( value << 7 ) | ( c & 0x7f );
- if( c & 0x80 )
- {
- c = readByte();
- value = ( value << 7 ) | c;
- if( c & 0x80 )
- {
- return -1;
- }
- }
- }
- }
- return( !file().atEnd() ? value : -1 );
- }
-
- inline int readID()
- {
- return read32LE();
- }
- inline void skip( int _bytes )
- {
- while( _bytes > 0 )
- {
- readByte();
- --_bytes;
- }
- }
-
-
- typedef QVector<QPair<int, MidiEvent> > EventVector;
- EventVector m_events;
- int m_timingDivision;
-
-} ;
-
-
-#endif
diff --git a/plugins/monstro/CMakeLists.txt b/plugins/monstro/CMakeLists.txt
new file mode 100644
index 0000000..6a9195b
--- /dev/null
+++ b/plugins/monstro/CMakeLists.txt
@@ -0,0 +1,3 @@
+INCLUDE(BuildPlugin)
+
+BUILD_PLUGIN(monstro Monstro.cpp Monstro.h MOCFILES Monstro.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/monstro/Monstro.cpp b/plugins/monstro/Monstro.cpp
new file mode 100644
index 0000000..d93af44
--- /dev/null
+++ b/plugins/monstro/Monstro.cpp
@@ -0,0 +1,1975 @@
+/*
+ * Monstro.cpp - a monstrous semi-modular 3-osc synth with modulation matrix
+ *
+ * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#include <QtXml/QDomElement>
+
+#include "Monstro.h"
+#include "engine.h"
+#include "InstrumentTrack.h"
+#include "templates.h"
+#include "gui_templates.h"
+#include "tooltip.h"
+#include "song.h"
+#include "lmms_math.h"
+#include "interpolation.h"
+
+#include "embed.cpp"
+
+
+extern "C"
+{
+
+Plugin::Descriptor PLUGIN_EXPORT monstro_plugin_descriptor =
+{
+ STRINGIFY( PLUGIN_NAME ),
+ "Monstro",
+ QT_TRANSLATE_NOOP( "pluginBrowser",
+ "Monstrous 3-oscillator synth with modulation matrix" ),
+ "Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>",
+ 0x0100,
+ Plugin::Instrument,
+ new PluginPixmapLoader( "logo" ),
+ NULL,
+ NULL
+} ;
+
+}
+
+
+
+
+MonstroSynth::MonstroSynth( MonstroInstrument * _i, NotePlayHandle * _nph ) :
+ m_parent( _i ),
+ m_nph( _nph )
+{
+ m_osc1l_phase = 0.0f;
+ m_osc1r_phase = 0.0f;
+ m_osc2l_phase = 0.0f;
+ m_osc2r_phase = 0.0f;
+ m_osc3l_phase = 0.0f;
+ m_osc3r_phase = 0.0f;
+
+ m_ph2l_last = 0.0f;
+ m_ph2r_last = 0.0f;
+ m_ph3l_last = 0.0f;
+ m_ph3r_last = 0.0f;
+
+ m_env_phase[0] = 0.0f;
+ m_env_phase[1] = 0.0f;
+ m_lfo_phase[0] = 0.0f;
+ m_lfo_phase[1] = 0.0f;
+
+ m_lfo_next[0] = Oscillator::noiseSample( 0.0f );
+ m_lfo_next[1] = Oscillator::noiseSample( 0.0f );
+
+ m_osc1l_last = 0.0f;
+ m_osc1r_last = 0.0f;
+
+ m_l_last = 0.0f;
+ m_r_last = 0.0f;
+
+ m_invert2l = false;
+ m_invert2r = false;
+ m_invert3l = false;
+ m_invert3r = false;
+
+ m_counter2l = 0;
+ m_counter2r = 0;
+ m_counter3l = 0;
+ m_counter3r = 0;
+}
+
+
+MonstroSynth::~MonstroSynth()
+{
+}
+
+
+void MonstroSynth::renderOutput( fpp_t _frames, sampleFrame * _buf )
+{
+ float modtmp; // temp variable for freq modulation
+// macros for modulating with env/lfos
+#define modulatefreq( car, mod ) \
+ modtmp = 0.0f; \
+ if( mod##_e1 != 0.0f ) modtmp += env[0][f] * mod##_e1; \
+ if( mod##_e2 != 0.0f ) modtmp += env[1][f] * mod##_e2; \
+ if( mod##_l1 != 0.0f ) modtmp += lfo[0][f] * mod##_l1; \
+ if( mod##_l2 != 0.0f ) modtmp += lfo[1][f] * mod##_l2; \
+ car = qBound( MIN_FREQ, car * powf( 2.0f, modtmp ), MAX_FREQ );
+
+#define modulateabs( car, mod ) \
+ if( mod##_e1 != 0.0f ) car += env[0][f] * mod##_e1; \
+ if( mod##_e2 != 0.0f ) car += env[1][f] * mod##_e2; \
+ if( mod##_l1 != 0.0f ) car += lfo[0][f] * mod##_l1; \
+ if( mod##_l2 != 0.0f ) car += lfo[1][f] * mod##_l2;
+
+#define modulatephs( car, mod ) \
+ if( mod##_e1 != 0.0f ) car += env[0][f] * mod##_e1; \
+ if( mod##_e2 != 0.0f ) car += env[1][f] * mod##_e2; \
+ if( mod##_l1 != 0.0f ) car += lfo[0][f] * mod##_l1; \
+ if( mod##_l2 != 0.0f ) car += lfo[1][f] * mod##_l2;
+
+#define modulatevol( car, mod ) \
+ if( mod##_e1 > 0.0f ) car *= ( 1.0f - mod##_e1 + mod##_e1 * env[0][f] ); \
+ if( mod##_e1 < 0.0f ) car *= ( 1.0f + mod##_e1 * env[0][f] ); \
+ if( mod##_e2 > 0.0f ) car *= ( 1.0f - mod##_e2 + mod##_e2 * env[1][f] ); \
+ if( mod##_e2 < 0.0f ) car *= ( 1.0f + mod##_e2 * env[1][f] ); \
+ if( mod##_l1 != 0.0f ) car *= ( 1.0f + mod##_l1 * lfo[0][f] ); \
+ if( mod##_l2 != 0.0f ) car *= ( 1.0f + mod##_l2 * lfo[1][f] ); \
+ car = qBound( -MODCLIP, car, MODCLIP );
+
+
+
+ ////////////////////
+ // //
+ // MODULATORS //
+ // //
+ ////////////////////
+
+ // LFO phase offsets
+ const float lfo1_po = m_parent->m_lfo1Phs.value() / 360.0f;
+ const float lfo2_po = m_parent->m_lfo2Phs.value() / 360.0f;
+
+ // remove cruft from phase counters to prevent overflow, add phase offset
+ m_lfo_phase[0] = absFraction( m_lfo_phase[0] + lfo1_po );
+ m_lfo_phase[1] = absFraction( m_lfo_phase[1] + lfo2_po );
+
+ // LFO rates and increment
+ m_lfo_rate[0] = ( m_parent->m_lfo1Rate.value() * 0.001f * m_parent->m_samplerate );
+ m_lfo_rate[1] = ( m_parent->m_lfo2Rate.value() * 0.001f * m_parent->m_samplerate );
+ m_lfo_inc[0] = 1.0f / m_lfo_rate[0];
+ m_lfo_inc[1] = 1.0f / m_lfo_rate[1];
+
+ m_env_sus[0] = m_parent-> m_env1Sus.value();
+ m_env_sus[1] = m_parent-> m_env2Sus.value();
+
+ m_lfovalue[0] = m_parent->m_lfo1Wave.value();
+ m_lfovalue[1] = m_parent->m_lfo2Wave.value();
+ m_lfoatt[0] = m_parent->m_lfo1_att;
+ m_lfoatt[1] = m_parent->m_lfo2_att;
+
+ m_env_pre[0] = m_parent->m_env1_pre;
+ m_env_att[0] = m_parent->m_env1_att;
+ m_env_hold[0] = m_parent->m_env1_hold;
+ m_env_dec[0] = m_parent->m_env1_dec;
+ m_env_rel[0] = m_parent->m_env1_rel;
+ m_env_pre[1] = m_parent->m_env2_pre;
+ m_env_att[1] = m_parent->m_env2_att;
+ m_env_hold[1] = m_parent->m_env2_hold;
+ m_env_dec[1] = m_parent->m_env2_dec;
+ m_env_rel[1] = m_parent->m_env2_rel;
+
+
+ // get updated osc1 values
+ // get pulse width
+ const float pw = ( m_parent->m_osc1Pw.value() * 0.01f );
+ const float o1pw_e1 = ( m_parent->m_pw1env1.value() );
+ const float o1pw_e2 = ( m_parent->m_pw1env2.value() );
+ const float o1pw_l1 = ( m_parent->m_pw1lfo1.value() * 0.5f );
+ const float o1pw_l2 = ( m_parent->m_pw1lfo2.value() * 0.5f );
+ const bool o1pw_mod = o1pw_e1 != 0.0f || o1pw_e2 != 0.0f || o1pw_l1 != 0.0f || o1pw_l2 != 0.0f;
+
+ // get phases
+ const float o1lpo = m_parent->m_osc1l_po;
+ const float o1rpo = m_parent->m_osc1r_po;
+ const float o1p_e1 = ( m_parent->m_phs1env1.value() );
+ const float o1p_e2 = ( m_parent->m_phs1env2.value() );
+ const float o1p_l1 = ( m_parent->m_phs1lfo1.value() * 0.5f );
+ const float o1p_l2 = ( m_parent->m_phs1lfo2.value() * 0.5f );
+ const bool o1p_mod = o1p_e1 != 0.0f || o1p_e2 != 0.0f || o1p_l1 != 0.0f || o1p_l2 != 0.0f;
+
+ // get pitch
+ const float o1lfb = ( m_parent->m_osc1l_freq * m_nph->frequency() );
+ const float o1rfb = ( m_parent->m_osc1r_freq * m_nph->frequency() );
+ const float o1f_e1 = ( m_parent->m_pit1env1.value() * 2.0f );
+ const float o1f_e2 = ( m_parent->m_pit1env2.value() * 2.0f );
+ const float o1f_l1 = ( m_parent->m_pit1lfo1.value() );
+ const float o1f_l2 = ( m_parent->m_pit1lfo2.value() );
+ const bool o1f_mod = o1f_e1 != 0.0f || o1f_e2 != 0.0f || o1f_l1 != 0.0f || o1f_l2 != 0.0f;
+
+ // get volumes
+ const float o1lv = m_parent->m_osc1l_vol;
+ const float o1rv = m_parent->m_osc1r_vol;
+ const float o1v_e1 = ( m_parent->m_vol1env1.value() );
+ const float o1v_e2 = ( m_parent->m_vol1env2.value() );
+ const float o1v_l1 = ( m_parent->m_vol1lfo1.value() );
+ const float o1v_l2 = ( m_parent->m_vol1lfo2.value() );
+ const bool o1v_mod = o1v_e1 != 0.0f || o1v_e2 != 0.0f || o1v_l1 != 0.0f || o1v_l2 != 0.0f;
+
+ // update osc2
+ // get waveform
+ const int o2w = m_parent->m_osc2Wave.value();
+
+ // get phases
+ const float o2lpo = m_parent->m_osc2l_po;
+ const float o2rpo = m_parent->m_osc2r_po;
+ const float o2p_e1 = ( m_parent->m_phs2env1.value() );
+ const float o2p_e2 = ( m_parent->m_phs2env2.value() );
+ const float o2p_l1 = ( m_parent->m_phs2lfo1.value() * 0.5f );
+ const float o2p_l2 = ( m_parent->m_phs2lfo2.value() * 0.5f );
+ const bool o2p_mod = o2p_e1 != 0.0f || o2p_e2 != 0.0f || o2p_l1 != 0.0f || o2p_l2 != 0.0f;
+
+ // get pitch
+ const float o2lfb = ( m_parent->m_osc2l_freq * m_nph->frequency() );
+ const float o2rfb = ( m_parent->m_osc2r_freq * m_nph->frequency() );
+ const float o2f_e1 = ( m_parent->m_pit2env1.value() * 2.0f );
+ const float o2f_e2 = ( m_parent->m_pit2env2.value() * 2.0f );
+ const float o2f_l1 = ( m_parent->m_pit2lfo1.value() );
+ const float o2f_l2 = ( m_parent->m_pit2lfo2.value() );
+ const bool o2f_mod = o2f_e1 != 0.0f || o2f_e2 != 0.0f || o2f_l1 != 0.0f || o2f_l2 != 0.0f;
+
+ // get volumes
+ const float o2lv = m_parent->m_osc2l_vol;
+ const float o2rv = m_parent->m_osc2r_vol;
+ const float o2v_e1 = ( m_parent->m_vol2env1.value() );
+ const float o2v_e2 = ( m_parent->m_vol2env2.value() );
+ const float o2v_l1 = ( m_parent->m_vol2lfo1.value() );
+ const float o2v_l2 = ( m_parent->m_vol2lfo2.value() );
+ const bool o2v_mod = o2v_e1 != 0.0f || o2v_e2 != 0.0f || o2v_l1 != 0.0f || o2v_l2 != 0.0f;
+
+
+ // update osc3
+ // get waveforms
+ const int o3w1 = m_parent->m_osc3Wave1.value();
+ const int o3w2 = m_parent->m_osc3Wave2.value();
+
+ // get phases
+ const float o3lpo = m_parent->m_osc3l_po;
+ const float o3rpo = m_parent->m_osc3r_po;
+ const float o3p_e1 = ( m_parent->m_phs3env1.value() );
+ const float o3p_e2 = ( m_parent->m_phs3env2.value() );
+ const float o3p_l1 = ( m_parent->m_phs3lfo1.value() * 0.5f );
+ const float o3p_l2 = ( m_parent->m_phs3lfo2.value() * 0.5f );
+ const bool o3p_mod = o3p_e1 != 0.0f || o3p_e2 != 0.0f || o3p_l1 != 0.0f || o3p_l2 != 0.0f;
+
+ // get pitch modulators
+ const float o3fb = ( m_parent->m_osc3_freq * m_nph->frequency() );
+ const float o3f_e1 = ( m_parent->m_pit3env1.value() * 2.0f );
+ const float o3f_e2 = ( m_parent->m_pit3env2.value() * 2.0f );
+ const float o3f_l1 = ( m_parent->m_pit3lfo1.value() );
+ const float o3f_l2 = ( m_parent->m_pit3lfo2.value() );
+ const bool o3f_mod = o3f_e1 != 0.0f || o3f_e2 != 0.0f || o3f_l1 != 0.0f || o3f_l2 != 0.0f;
+
+ // get volumes
+ const float o3lv = m_parent->m_osc3l_vol;
+ const float o3rv = m_parent->m_osc3r_vol;
+ const float o3v_e1 = ( m_parent->m_vol3env1.value() );
+ const float o3v_e2 = ( m_parent->m_vol3env2.value() );
+ const float o3v_l1 = ( m_parent->m_vol3lfo1.value() );
+ const float o3v_l2 = ( m_parent->m_vol3lfo2.value() );
+ const bool o3v_mod = o3v_e1 != 0.0f || o3v_e2 != 0.0f || o3v_l1 != 0.0f || o3v_l2 != 0.0f;
+
+ // get sub
+ const float o3sub = ( m_parent->m_osc3Sub.value() + 100.0f ) / 200.0f;
+ const float o3s_e1 = ( m_parent->m_sub3env1.value() );
+ const float o3s_e2 = ( m_parent->m_sub3env2.value() );
+ const float o3s_l1 = ( m_parent->m_sub3lfo1.value() * 0.5f );
+ const float o3s_l2 = ( m_parent->m_sub3lfo2.value() * 0.5f );
+ const bool o3s_mod = o3s_e1 != 0.0f || o3s_e2 != 0.0f || o3s_l1 != 0.0f || o3s_l2 != 0.0f;
+
+
+ //o2-o3 modulation
+
+ const int omod = m_parent->m_o23Mod.value();
+
+ // sync information
+
+ const bool o1ssr = m_parent->m_osc1SSR.value();
+ const bool o1ssf = m_parent->m_osc1SSF.value();
+ const bool o2sync = m_parent->m_osc2SyncH.value();
+ const bool o3sync = m_parent->m_osc3SyncH.value();
+ const bool o2syncr = m_parent->m_osc2SyncR.value();
+ const bool o3syncr = m_parent->m_osc3SyncR.value();
+
+ ///////////////////////////
+ // //
+ // start buffer loop //
+ // //
+ ///////////////////////////
+
+ // declare working variables for for loop
+
+ // phase manipulation vars - these can be reused by all oscs
+ float leftph;
+ float rightph;
+ float pd_l;
+ float pd_r;
+ float len_l;
+ float len_r;
+
+ // osc1 vars
+ float o1l_f;
+ float o1r_f;
+ float o1l_p = m_osc1l_phase + o1lpo; // we add phase offset here so we don't have to do it every frame
+ float o1r_p = m_osc1r_phase + o1rpo; // then substract it again after loop...
+ float o1_pw;
+
+ // osc2 vars
+ float o2l_f;
+ float o2r_f;
+ float o2l_p = m_osc2l_phase + o2lpo;
+ float o2r_p = m_osc2r_phase + o2rpo;
+
+ // osc3 vars
+ float o3l_f;
+ float o3r_f;
+ float o3l_p = m_osc3l_phase + o3lpo;
+ float o3r_p = m_osc3r_phase + o3rpo;
+ float sub;
+
+ // modulators
+ float lfo[2][ m_parent->m_fpp ];
+ float env[2][ m_parent->m_fpp ];
+
+ // render modulators: envelopes, lfos
+ updateModulators( &env[0][0], &env[1][0], &lfo[0][0], &lfo[1][0], _frames );
+
+ // begin for loop
+ for( f_cnt_t f = 0; f < _frames; ++f )
+ {
+/* // debug code
+ if( f % 10 == 0 ) {
+ qDebug( "env1 %f -- env1 phase %f", m_env1_buf[f], m_env1_phase );
+ qDebug( "env1 pre %f att %f dec %f rel %f ", m_parent->m_env1_pre, m_parent->m_env1_att,
+ m_parent->m_env1_dec, m_parent->m_env1_rel );
+ }*/
+
+
+ /////////////////////////////
+ // //
+ // OSC 1 //
+ // //
+ /////////////////////////////
+
+ // calc and mod frequencies
+ o1l_f = o1lfb;
+ o1r_f = o1rfb;
+ if( o1f_mod )
+ {
+ modulatefreq( o1l_f, o1f )
+ modulatefreq( o1r_f, o1f )
+ }
+ // calc and modulate pulse
+ o1_pw = pw;
+ if( o1pw_mod )
+ {
+ modulateabs( o1_pw, o1pw )
+ o1_pw = qBound( PW_MIN, o1_pw, PW_MAX );
+ }
+
+ // calc and modulate phase
+ leftph = o1l_p;
+ rightph = o1r_p;
+ if( o1p_mod )
+ {
+ modulatephs( leftph, o1p )
+ modulatephs( rightph, o1p )
+ }
+
+ // pulse wave osc
+ sample_t O1L = ( absFraction( leftph ) < o1_pw ) ? 1.0f : -1.0f;
+ sample_t O1R = ( absFraction( rightph ) < o1_pw ) ? 1.0f : -1.0f;
+
+ // check for rise/fall, and sync if appropriate
+ // sync on rise
+ if( o1ssr )
+ {
+ // hard sync
+ if( o2sync )
+ {
+ if( O1L > m_osc1l_last ) { o2l_p = o2lpo; m_counter2l = m_parent->m_counterMax; }
+ if( O1R > m_osc1r_last ) { o2r_p = o2rpo; m_counter2r = m_parent->m_counterMax; }
+ }
+ if( o3sync )
+ {
+ if( O1L > m_osc1l_last ) { o3l_p = o3lpo; m_counter3l = m_parent->m_counterMax; }
+ if( O1R > m_osc1r_last ) { o3r_p = o3rpo; m_counter3r = m_parent->m_counterMax; }
+ }
+ // reverse sync
+ if( o2syncr )
+ {
+ if( O1L > m_osc1l_last ) { m_invert2l = !m_invert2l; m_counter2l = m_parent->m_counterMax; }
+ if( O1R > m_osc1r_last ) { m_invert2r = !m_invert2r; m_counter2r = m_parent->m_counterMax; }
+ }
+ if( o3syncr )
+ {
+ if( O1L > m_osc1l_last ) { m_invert3l = !m_invert3l; m_counter3l = m_parent->m_counterMax; }
+ if( O1R > m_osc1r_last ) { m_invert3r = !m_invert3r; m_counter3r = m_parent->m_counterMax; }
+ }
+ }
+ // sync on fall
+ if( o1ssf )
+ {
+ // hard sync
+ if( o2sync )
+ {
+ if( O1L < m_osc1l_last ) { o2l_p = o2lpo; m_counter2l = m_parent->m_counterMax; }
+ if( O1R < m_osc1r_last ) { o2r_p = o2rpo; m_counter2r = m_parent->m_counterMax; }
+ }
+ if( o3sync )
+ {
+ if( O1L < m_osc1l_last ) { o3l_p = o3lpo; m_counter3l = m_parent->m_counterMax; }
+ if( O1R < m_osc1r_last ) { o3r_p = o3rpo; m_counter3r = m_parent->m_counterMax; }
+ }
+ // reverse sync
+ if( o2syncr )
+ {
+ if( O1L < m_osc1l_last ) { m_invert2l = !m_invert2l; m_counter2l = m_parent->m_counterMax; }
+ if( O1R < m_osc1r_last ) { m_invert2r = !m_invert2r; m_counter2r = m_parent->m_counterMax; }
+ }
+ if( o3syncr )
+ {
+ if( O1L < m_osc1l_last ) { m_invert3l = !m_invert3l; m_counter3l = m_parent->m_counterMax; }
+ if( O1R < m_osc1r_last ) { m_invert3r = !m_invert3r; m_counter3r = m_parent->m_counterMax; }
+ }
+ }
+
+ // update last before signal is touched
+ // also do a very simple amp delta cap
+ const sample_t tmpl = m_osc1l_last;
+ const sample_t tmpr = m_osc1r_last;
+
+ m_osc1l_last = O1L;
+ m_osc1r_last = O1R;
+
+ if( tmpl != O1L ) O1L = 0.0f;
+ if( tmpr != O1R ) O1R = 0.0f;
+
+ // modulate volume
+ O1L *= o1lv;
+ O1R *= o1rv;
+ if( o1v_mod )
+ {
+ modulatevol( O1L, o1v )
+ modulatevol( O1R, o1v )
+ }
+
+ // update osc1 phase working variable
+ o1l_p += 1.0f / ( static_cast<float>( m_parent->m_samplerate ) / o1l_f );
+ o1r_p += 1.0f / ( static_cast<float>( m_parent->m_samplerate ) / o1r_f );
+
+ /////////////////////////////
+ // //
+ // OSC 2 //
+ // //
+ /////////////////////////////
+
+ // calc and mod frequencies
+ o2l_f = o2lfb;
+ o2r_f = o2rfb;
+ if( o2f_mod )
+ {
+ modulatefreq( o2l_f, o2f )
+ modulatefreq( o2r_f, o2f )
+ }
+
+ // calc and modulate phase
+ leftph = o2l_p;
+ rightph = o2r_p;
+ if( o2p_mod )
+ {
+ modulatephs( leftph, o2p )
+ modulatephs( rightph, o2p )
+ }
+ leftph = absFraction( leftph );
+ rightph = absFraction( rightph );
+
+ // phase delta
+ pd_l = qAbs( leftph - m_ph2l_last );
+ if( pd_l > 0.5 ) pd_l = 1.0 - pd_l;
+ pd_r = qAbs( rightph - m_ph2r_last );
+ if( pd_r > 0.5 ) pd_r = 1.0 - pd_r;
+
+ // multi-wave DC Oscillator
+ len_l = BandLimitedWave::pdToLen( pd_l );
+ len_r = BandLimitedWave::pdToLen( pd_r );
+ if( m_counter2l > 0 ) { len_l /= m_counter2l; m_counter2l--; }
+ if( m_counter2r > 0 ) { len_r /= m_counter2r; m_counter2r--; }
+ sample_t O2L = oscillate( o2w, leftph, len_l );
+ sample_t O2R = oscillate( o2w, rightph, len_r );
+
+ // modulate volume
+ O2L *= o2lv;
+ O2R *= o2rv;
+ if( o2v_mod )
+ {
+ modulatevol( O2L, o2v )
+ modulatevol( O2R, o2v )
+ }
+
+ // reverse sync - invert waveforms when needed
+ if( m_invert2l ) O2L *= -1.0;
+ if( m_invert2r ) O2R *= -1.0;
+
+ // update osc2 phases
+ m_ph2l_last = leftph;
+ m_ph2r_last = rightph;
+ o2l_p += 1.0f / ( static_cast<float>( m_parent->m_samplerate ) / o2l_f );
+ o2r_p += 1.0f / ( static_cast<float>( m_parent->m_samplerate ) / o2r_f );
+
+ /////////////////////////////
+ // //
+ // OSC 3 //
+ // //
+ /////////////////////////////
+
+ // calc and mod frequencies
+ o3l_f = o3fb;
+ o3r_f = o3fb;
+ if( o3f_mod )
+ {
+ modulatefreq( o3l_f, o3f )
+ modulatefreq( o3r_f, o3f )
+ }
+ // calc and modulate phase
+ leftph = o3l_p;
+ rightph = o3r_p;
+ if( o3p_mod )
+ {
+ modulatephs( leftph, o3p )
+ modulatephs( rightph, o3p )
+ }
+
+ // o2 modulation?
+ if( omod == MOD_PM )
+ {
+ leftph += O2L * 0.5f;
+ rightph += O2R * 0.5f;
+ }
+ leftph = absFraction( leftph );
+ rightph = absFraction( rightph );
+
+ // phase delta
+ pd_l = qAbs( leftph - m_ph3l_last );
+ if( pd_l > 0.5 ) pd_l = 1.0 - pd_l;
+ pd_r = qAbs( rightph - m_ph3r_last );
+ if( pd_r > 0.5 ) pd_r = 1.0 - pd_r;
+
+ // multi-wave DC Oscillator
+ len_l = BandLimitedWave::pdToLen( pd_l );
+ len_r = BandLimitedWave::pdToLen( pd_r );
+ if( m_counter3l > 0 ) { len_l /= m_counter3l; m_counter3l--; }
+ if( m_counter3r > 0 ) { len_r /= m_counter3r; m_counter3r--; }
+ // sub-osc 1
+ sample_t O3AL = oscillate( o3w1, leftph, len_l );
+ sample_t O3AR = oscillate( o3w1, rightph, len_r );
+
+ // multi-wave DC Oscillator, sub-osc 2
+ sample_t O3BL = oscillate( o3w2, leftph, len_l );
+ sample_t O3BR = oscillate( o3w2, rightph, len_r );
+
+ // calc and modulate sub
+ sub = o3sub;
+ if( o3s_mod )
+ {
+ modulateabs( sub, o3s )
+ sub = qBound( 0.0f, sub, 1.0f );
+ }
+
+ sample_t O3L = linearInterpolate( O3AL, O3BL, sub );
+ sample_t O3R = linearInterpolate( O3AR, O3BR, sub );
+
+ // modulate volume
+ O3L *= o3lv;
+ O3R *= o3rv;
+ if( o3v_mod )
+ {
+ modulatevol( O3L, o3v )
+ modulatevol( O3R, o3v )
+ }
+ // o2 modulation?
+ if( omod == MOD_AM )
+ {
+ O3L = qBound( -MODCLIP, O3L * qMax( 0.0f, 1.0f + O2L ), MODCLIP );
+ O3R = qBound( -MODCLIP, O3R * qMax( 0.0f, 1.0f + O2R ), MODCLIP );
+ }
+
+ // reverse sync - invert waveforms when needed
+ if( m_invert3l ) O3L *= -1.0;
+ if( m_invert3r ) O3R *= -1.0;
+
+ // update osc3 phases
+ m_ph3l_last = leftph;
+ m_ph3r_last = rightph;
+ len_l = 1.0f / ( static_cast<float>( m_parent->m_samplerate ) / o3l_f );
+ len_r = 1.0f / ( static_cast<float>( m_parent->m_samplerate ) / o3r_f );
+ // handle FM as PM
+ if( omod == MOD_FM )
+ {
+ len_l += O2L * m_parent->m_fmCorrection;
+ len_r += O2R * m_parent->m_fmCorrection;
+ }
+ o3l_p += len_l;
+ o3r_p += len_r;
+
+ // integrator - very simple filter
+ sample_t L = O1L + O3L + ( omod == MOD_MIX ? O2L : 0.0f );
+ sample_t R = O1R + O3R + ( omod == MOD_MIX ? O2R : 0.0f );
+
+ _buf[f][0] = linearInterpolate( L, m_l_last, m_parent->m_integrator );
+ _buf[f][1] = linearInterpolate( R, m_r_last, m_parent->m_integrator );
+
+ m_l_last = L;
+ m_r_last = R;
+ }
+
+ // update phases
+ m_osc1l_phase = absFraction( o1l_p - o1lpo );
+ m_osc1r_phase = absFraction( o1r_p - o1rpo );
+ m_osc2l_phase = absFraction( o2l_p - o2lpo );
+ m_osc2r_phase = absFraction( o2r_p - o2rpo );
+ m_osc3l_phase = absFraction( o3l_p - o3lpo );
+ m_osc3r_phase = absFraction( o3r_p - o3rpo );
+
+ m_lfo_phase[0] = absFraction( m_lfo_phase[0] - lfo1_po );
+ m_lfo_phase[1] = absFraction( m_lfo_phase[1] - lfo2_po );
+}
+
+
+inline void MonstroSynth::updateModulators( float * env1, float * env2, float * lfo1, float * lfo2, int frames )
+{
+ // frames played before
+ const f_cnt_t tfp = m_nph->totalFramesPlayed();
+
+ float * lfo [2];
+ float * env [2];
+ lfo[0] = lfo1;
+ lfo[1] = lfo2;
+ env[0] = env1;
+ env[1] = env2;
+
+ for( int i = 0; i < 2; ++i )
+ {
+ switch( m_lfovalue[i] )
+ {
+ case WAVE_SINE:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = Oscillator::sinSample( m_lfo_phase[i] );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_TRI:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = Oscillator::triangleSample( m_lfo_phase[i] );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_SAW:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = Oscillator::sawSample( m_lfo_phase[i] );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_RAMP:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = Oscillator::sawSample( m_lfo_phase[i] ) * -1.0f;
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_SQR:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = Oscillator::squareSample( m_lfo_phase[i] );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_SQRSOFT:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = oscillate( WAVE_SQRSOFT, m_lfo_phase[i], 0 );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_MOOG:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = Oscillator::moogSawSample( m_lfo_phase[i] );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_SINABS:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = oscillate( WAVE_SINABS, m_lfo_phase[i], 0 );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_EXP:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ lfo[i][f] = Oscillator::expSample( m_lfo_phase[i] );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_RANDOM:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ if( ( tfp + f ) % static_cast<int>( m_lfo_rate[i] ) == 0 ) m_lfo_last[i] = Oscillator::noiseSample( 0.0f );
+ lfo[i][f] = m_lfo_last[i];
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ case WAVE_RANDOM_SMOOTH:
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ const f_cnt_t tm = ( tfp + f ) % static_cast<int>( m_lfo_rate[i] );
+ if( tm == 0 )
+ {
+ m_lfo_last[i] = m_lfo_next[i];
+ m_lfo_next[i] = Oscillator::noiseSample( 0.0f );
+ }
+ lfo[i][f] = cosinusInterpolate( m_lfo_last[i], m_lfo_next[i], static_cast<float>( tm ) / m_lfo_rate[i] );
+ m_lfo_phase[i] += m_lfo_inc[i];
+ }
+ break;
+ }
+
+ // attack
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ if( tfp + f < m_lfoatt[i] ) lfo[i][f] *= ( static_cast<sample_t>( tfp ) / m_lfoatt[i] );
+ }
+
+
+
+ /////////////////////////////////////////////
+ // //
+ // //
+ // envelopes //
+ // //
+ // //
+ /////////////////////////////////////////////
+
+ for( f_cnt_t f = 0; f < frames; ++f )
+ {
+ if( m_env_phase[i] < 4.0f && m_nph->isReleased() && f >= m_nph->framesBeforeRelease() )
+ {
+ if( m_env_phase[i] < 1.0f ) m_env_phase[i] = 5.0f;
+ else if( m_env_phase[i] < 2.0f ) m_env_phase[i] = 5.0f - fraction( m_env_phase[i] );
+ else if( m_env_phase[i] < 3.0f ) m_env_phase[i] = 4.0f;
+ else m_env_phase[i] = 4.0f + fraction( m_env_phase[i] );
+ }
+
+ // process envelope
+ if( m_env_phase[i] < 1.0f ) // pre-delay phase
+ {
+ env[i][f] = 0.0f;
+ m_env_phase[i] = qMin( 1.0f, m_env_phase[i] + m_env_pre[i] );
+ }
+ else if( m_env_phase[i] < 2.0f ) // attack phase
+ {
+ env[i][f] = calcSlope( i, fraction( m_env_phase[i] ) );
+ m_env_phase[i] = qMin( 2.0f, m_env_phase[i] + m_env_att[i] );
+ }
+ else if( m_env_phase[i] < 3.0f ) // hold phase
+ {
+ env[i][f] = 1.0f;
+ m_env_phase[i] = qMin( 3.0f, m_env_phase[i] + m_env_hold[i] );
+ }
+ else if( m_env_phase[i] < 4.0f ) // decay phase
+ {
+ const sample_t s = calcSlope( i, 1.0f - fraction( m_env_phase[i] ) );
+ if( s <= m_env_sus[i] )
+ {
+ env[i][f] = m_env_sus[i];
+ }
+ else
+ {
+ env[i][f] = s;
+ m_env_phase[i] = qMin( 4.0f - m_env_sus[i], m_env_phase[i] + m_env_dec[i] );
+ if( m_env_phase[i] == 4.0f ) m_env_phase[i] = 5.0f; // jump over release if sustain is zero - fix for clicking
+ }
+ }
+ else if( m_env_phase[i] < 5.0f ) // release phase
+ {
+ env[i][f] = calcSlope( i, 1.0f - fraction( m_env_phase[i] ) );
+ m_env_phase[i] += m_env_rel[i];
+ }
+ else env[i][f] = 0.0f;
+ }
+ }
+}
+
+
+inline sample_t MonstroSynth::calcSlope( int slope, sample_t s )
+{
+ if( m_parent->m_slope[slope] == 1.0f ) return s;
+ if( s == 0.0f ) return s;
+ return fastPow( s, m_parent->m_slope[slope] );
+}
+
+
+MonstroInstrument::MonstroInstrument( InstrumentTrack * _instrument_track ) :
+ Instrument( _instrument_track, &monstro_plugin_descriptor ),
+
+ m_osc1Vol( 33.0, 0.0, 200.0, 0.1, this, tr( "Osc 1 Volume" ) ),
+ m_osc1Pan( 0.0, -100.0, 100.0, 0.1, this, tr( "Osc 1 Panning" ) ),
+ m_osc1Crs( 0.0, -24.0, 24.0, 1.0, this, tr( "Osc 1 Coarse detune" ) ),
+ m_osc1Ftl( 0.0, -100.0, 100.0, 1.0, this, tr( "Osc 1 Fine detune left" ) ),
+ m_osc1Ftr( 0.0, -100.0, 100.0, 1.0, this, tr( "Osc 1 Fine detune right" ) ),
+ m_osc1Spo( 0.0, -180.0, 180.0, 0.1, this, tr( "Osc 1 Stereo phase offset" ) ),
+ m_osc1Pw( 50.0, PW_MIN, PW_MAX, 0.01, this, tr( "Osc 1 Pulse width" ) ),
+ m_osc1SSR( false, this, tr( "Osc 1 Sync send on rise" ) ),
+ m_osc1SSF( false, this, tr( "Osc 1 Sync send on fall" ) ),
+
+ m_osc2Vol( 33.0, 0.0, 200.0, 0.1, this, tr( "Osc 2 Volume" ) ),
+ m_osc2Pan( 0.0, -100.0, 100.0, 0.1, this, tr( "Osc 2 Panning" ) ),
+ m_osc2Crs( 0.0, -24.0, 24.0, 1.0, this, tr( "Osc 2 Coarse detune" ) ),
+ m_osc2Ftl( 0.0, -100.0, 100.0, 1.0, this, tr( "Osc 2 Fine detune left" ) ),
+ m_osc2Ftr( 0.0, -100.0, 100.0, 1.0, this, tr( "Osc 2 Fine detune right" ) ),
+ m_osc2Spo( 0.0, -180.0, 180.0, 0.1, this, tr( "Osc 2 Stereo phase offset" ) ),
+ m_osc2Wave( this, tr( "Osc 2 Waveform" ) ),
+ m_osc2SyncH( false, this, tr( "Osc 2 Sync Hard" ) ),
+ m_osc2SyncR( false, this, tr( "Osc 2 Sync Reverse" ) ),
+
+ m_osc3Vol( 33.0, 0.0, 200.0, 0.1, this, tr( "Osc 3 Volume" ) ),
+ m_osc3Pan( 0.0, -100.0, 100.0, 0.1, this, tr( "Osc 3 Panning" ) ),
+ m_osc3Crs( 0.0, -24.0, 24.0, 1.0, this, tr( "Osc 3 Coarse detune" ) ),
+ m_osc3Spo( 0.0, -180.0, 180.0, 0.1, this, tr( "Osc 3 Stereo phase offset" ) ),
+ m_osc3Sub( 0.0, -100.0, 100.0, 0.1, this, tr( "Osc 3 Sub-oscillator mix" ) ),
+ m_osc3Wave1( this, tr( "Osc 3 Waveform 1" ) ),
+ m_osc3Wave2( this, tr( "Osc 3 Waveform 2" ) ),
+ m_osc3SyncH( false, this, tr( "Osc 3 Sync Hard" ) ),
+ m_osc3SyncR( false, this, tr( "Osc 3 Sync Reverse" ) ),
+
+ m_lfo1Wave( this, tr( "LFO 1 Waveform" ) ),
+ m_lfo1Att( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "LFO 1 Attack" ) ),
+ m_lfo1Rate( 1.0f, 0.1, 10000.0, 0.1, 10000.0f, this, tr( "LFO 1 Rate" ) ),
+ m_lfo1Phs( 0.0, -180.0, 180.0, 0.1, this, tr( "LFO 1 Phase" ) ),
+
+ m_lfo2Wave( this, tr( "LFO 2 Waveform" ) ),
+ m_lfo2Att( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "LFO 2 Attack" ) ),
+ m_lfo2Rate( 1.0f, 0.1, 10000.0, 0.1, 10000.0f, this, tr( "LFO 2 Rate" ) ),
+ m_lfo2Phs( 0.0, -180.0, 180.0, 0.1, this, tr( "LFO 2 Phase" ) ),
+
+ m_env1Pre( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "Env 1 Pre-delay" ) ),
+ m_env1Att( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "Env 1 Attack" ) ),
+ m_env1Hold( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 1 Hold" ) ),
+ m_env1Dec( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 1 Decay" ) ),
+ m_env1Sus( 1.0f, 0.0f, 1.0f, 0.001f, this, tr( "Env 1 Sustain" ) ),
+ m_env1Rel( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 1 Release" ) ),
+ m_env1Slope( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Env 1 Slope" ) ),
+
+ m_env2Pre( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "Env 2 Pre-delay" ) ),
+ m_env2Att( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "Env 2 Attack" ) ),
+ m_env2Hold( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 2 Hold" ) ),
+ m_env2Dec( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 2 Decay" ) ),
+ m_env2Sus( 1.0f, 0.0f, 1.0f, 0.001f, this, tr( "Env 2 Sustain" ) ),
+ m_env2Rel( 0.0f, 0.0f, 4000.0f, 1.0f, 4000.0f, this, tr( "Env 2 Release" ) ),
+ m_env2Slope( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Env 2 Slope" ) ),
+
+ m_o23Mod( 0, 0, NUM_MODS - 1, this, tr( "Osc2-3 modulation" ) ),
+
+ m_selectedView( 0, 0, 1, this, tr( "Selected view" ) ),
+
+ m_vol1env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol1-Env1" ) ),
+ m_vol1env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol1-Env2" ) ),
+ m_vol1lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol1-LFO1" ) ),
+ m_vol1lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol1-LFO2" ) ),
+
+ m_vol2env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol2-Env1" ) ),
+ m_vol2env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol2-Env2" ) ),
+ m_vol2lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol2-LFO1" ) ),
+ m_vol2lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol2-LFO2" ) ),
+
+ m_vol3env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol3-Env1" ) ),
+ m_vol3env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol3-Env2" ) ),
+ m_vol3lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol3-LFO1" ) ),
+ m_vol3lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Vol3-LFO2" ) ),
+
+ m_phs1env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs1-Env1" ) ),
+ m_phs1env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs1-Env2" ) ),
+ m_phs1lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs1-LFO1" ) ),
+ m_phs1lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs1-LFO2" ) ),
+
+ m_phs2env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs2-Env1" ) ),
+ m_phs2env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs2-Env2" ) ),
+ m_phs2lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs2-LFO1" ) ),
+ m_phs2lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs2-LFO2" ) ),
+
+ m_phs3env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs3-Env1" ) ),
+ m_phs3env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs3-Env2" ) ),
+ m_phs3lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs3-LFO1" ) ),
+ m_phs3lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Phs3-LFO2" ) ),
+
+ m_pit1env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit1-Env1" ) ),
+ m_pit1env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit1-Env2" ) ),
+ m_pit1lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit1-LFO1" ) ),
+ m_pit1lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit1-LFO2" ) ),
+
+ m_pit2env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit2-Env1" ) ),
+ m_pit2env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit2-Env2" ) ),
+ m_pit2lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit2-LFO1" ) ),
+ m_pit2lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit2-LFO2" ) ),
+
+ m_pit3env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit3-Env1" ) ),
+ m_pit3env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit3-Env2" ) ),
+ m_pit3lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit3-LFO1" ) ),
+ m_pit3lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Pit3-LFO2" ) ),
+
+ m_pw1env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "PW1-Env1" ) ),
+ m_pw1env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "PW1-Env2" ) ),
+ m_pw1lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "PW1-LFO1" ) ),
+ m_pw1lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "PW1-LFO2" ) ),
+
+ m_sub3env1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Sub3-Env1" ) ),
+ m_sub3env2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Sub3-Env2" ) ),
+ m_sub3lfo1( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Sub3-LFO1" ) ),
+ m_sub3lfo2( 0.0f, -1.0f, 1.0f, 0.001f, this, tr( "Sub3-LFO2" ) )
+
+{
+
+// setup waveboxes
+ setwavemodel( m_osc2Wave )
+ setwavemodel( m_osc3Wave1 )
+ setwavemodel( m_osc3Wave2 )
+ setlfowavemodel( m_lfo1Wave )
+ setlfowavemodel( m_lfo2Wave )
+
+// make connections:
+
+// updateVolumes
+
+ connect( &m_osc1Vol, SIGNAL( dataChanged() ), this, SLOT( updateVolume1() ) );
+ connect( &m_osc1Pan, SIGNAL( dataChanged() ), this, SLOT( updateVolume1() ) );
+ connect( &m_osc2Vol, SIGNAL( dataChanged() ), this, SLOT( updateVolume2() ) );
+ connect( &m_osc2Pan, SIGNAL( dataChanged() ), this, SLOT( updateVolume2() ) );
+ connect( &m_osc3Vol, SIGNAL( dataChanged() ), this, SLOT( updateVolume3() ) );
+ connect( &m_osc3Pan, SIGNAL( dataChanged() ), this, SLOT( updateVolume3() ) );
+
+// updateFreq
+
+ connect( &m_osc1Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq1() ) );
+ connect( &m_osc2Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq2() ) );
+ connect( &m_osc3Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq3() ) );
+
+ connect( &m_osc1Ftl, SIGNAL( dataChanged() ), this, SLOT( updateFreq1() ) );
+ connect( &m_osc2Ftl, SIGNAL( dataChanged() ), this, SLOT( updateFreq2() ) );
+
+ connect( &m_osc1Ftr, SIGNAL( dataChanged() ), this, SLOT( updateFreq1() ) );
+ connect( &m_osc2Ftr, SIGNAL( dataChanged() ), this, SLOT( updateFreq2() ) );
+
+// updatePO
+ connect( &m_osc1Spo, SIGNAL( dataChanged() ), this, SLOT( updatePO1() ) );
+ connect( &m_osc2Spo, SIGNAL( dataChanged() ), this, SLOT( updatePO2() ) );
+ connect( &m_osc3Spo, SIGNAL( dataChanged() ), this, SLOT( updatePO3() ) );
+
+// updateEnvelope1
+
+ connect( &m_env1Pre, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) );
+ connect( &m_env1Att, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) );
+ connect( &m_env1Hold, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) );
+ connect( &m_env1Dec, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) );
+ connect( &m_env1Rel, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope1() ) );
+ connect( &m_env1Slope, SIGNAL( dataChanged() ), this, SLOT( updateSlope1() ) );
+
+// updateEnvelope2
+
+ connect( &m_env2Pre, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) );
+ connect( &m_env2Att, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) );
+ connect( &m_env2Hold, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) );
+ connect( &m_env2Dec, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) );
+ connect( &m_env2Rel, SIGNAL( dataChanged() ), this, SLOT( updateEnvelope2() ) );
+ connect( &m_env2Slope, SIGNAL( dataChanged() ), this, SLOT( updateSlope2() ) );
+
+// updateLFOAtts
+
+ connect( &m_lfo1Att, SIGNAL( dataChanged() ), this, SLOT( updateLFOAtts() ) );
+ connect( &m_lfo2Att, SIGNAL( dataChanged() ), this, SLOT( updateLFOAtts() ) );
+
+// updateSampleRate
+
+ connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( updateSamplerate() ) );
+
+ m_fpp = engine::mixer()->framesPerPeriod();
+
+ updateSamplerate();
+ updateVolume1();
+ updateVolume2();
+ updateVolume3();
+ updateFreq1();
+ updateFreq2();
+ updateFreq3();
+ updatePO1();
+ updatePO2();
+ updatePO3();
+ updateSlope1();
+ updateSlope2();
+}
+
+
+MonstroInstrument::~MonstroInstrument()
+{
+}
+
+
+void MonstroInstrument::playNote( NotePlayHandle * _n,
+ sampleFrame * _working_buffer )
+{
+ if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL )
+ {
+ _n->m_pluginData = new MonstroSynth( this, _n );
+ }
+
+ const fpp_t frames = _n->framesLeftForCurrentPeriod();
+
+ MonstroSynth * ms = static_cast<MonstroSynth *>( _n->m_pluginData );
+
+ ms->renderOutput( frames, _working_buffer );
+
+ //applyRelease( _working_buffer, _n ); // we have our own release
+
+ instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n );
+}
+
+void MonstroInstrument::deleteNotePluginData( NotePlayHandle * _n )
+{
+ delete static_cast<MonstroSynth *>( _n->m_pluginData );
+}
+
+
+void MonstroInstrument::saveSettings( QDomDocument & _doc,
+ QDomElement & _this )
+{
+ m_osc1Vol.saveSettings( _doc, _this, "o1vol" );
+ m_osc1Pan.saveSettings( _doc, _this, "o1pan" );
+ m_osc1Crs.saveSettings( _doc, _this, "o1crs" );
+ m_osc1Ftl.saveSettings( _doc, _this, "o1ftl" );
+ m_osc1Ftr.saveSettings( _doc, _this, "o1ftr" );
+ m_osc1Spo.saveSettings( _doc, _this, "o1spo" );
+ m_osc1Pw.saveSettings( _doc, _this, "o1pw" );
+ m_osc1SSR.saveSettings( _doc, _this, "o1ssr" );
+ m_osc1SSF.saveSettings( _doc, _this, "o1ssf" );
+
+ m_osc2Vol.saveSettings( _doc, _this, "o2vol" );
+ m_osc2Pan.saveSettings( _doc, _this, "o2pan" );
+ m_osc2Crs.saveSettings( _doc, _this, "o2crs" );
+ m_osc2Ftl.saveSettings( _doc, _this, "o2ftl" );
+ m_osc2Ftr.saveSettings( _doc, _this, "o2ftr" );
+ m_osc2Spo.saveSettings( _doc, _this, "o2spo" );
+ m_osc2Wave.saveSettings( _doc, _this, "o2wav" );
+ m_osc2SyncH.saveSettings( _doc, _this, "o2syn" );
+ m_osc2SyncR.saveSettings( _doc, _this, "o2synr" );
+
+ m_osc3Vol.saveSettings( _doc, _this, "o3vol" );
+ m_osc3Pan.saveSettings( _doc, _this, "o3pan" );
+ m_osc3Crs.saveSettings( _doc, _this, "o3crs" );
+ m_osc3Spo.saveSettings( _doc, _this, "o3spo" );
+ m_osc3Sub.saveSettings( _doc, _this, "o3sub" );
+ m_osc3Wave1.saveSettings( _doc, _this, "o3wav1" );
+ m_osc3Wave2.saveSettings( _doc, _this, "o3wav2" );
+ m_osc3SyncH.saveSettings( _doc, _this, "o3syn" );
+ m_osc3SyncR.saveSettings( _doc, _this, "o3synr" );
+
+ m_lfo1Wave.saveSettings( _doc, _this, "l1wav" );
+ m_lfo1Att.saveSettings( _doc, _this, "l1att" );
+ m_lfo1Rate.saveSettings( _doc, _this, "l1rat" );
+ m_lfo1Phs.saveSettings( _doc, _this, "l1phs" );
+
+ m_lfo2Wave.saveSettings( _doc, _this, "l2wav" );
+ m_lfo2Att.saveSettings( _doc, _this, "l2att" );
+ m_lfo2Rate.saveSettings( _doc, _this, "l2rat" );
+ m_lfo2Phs.saveSettings( _doc, _this, "l2phs" );
+
+ m_env1Pre.saveSettings( _doc, _this, "e1pre" );
+ m_env1Att.saveSettings( _doc, _this, "e1att" );
+ m_env1Hold.saveSettings( _doc, _this, "e1hol" );
+ m_env1Dec.saveSettings( _doc, _this, "e1dec" );
+ m_env1Sus.saveSettings( _doc, _this, "e1sus" );
+ m_env1Rel.saveSettings( _doc, _this, "e1rel" );
+ m_env1Slope.saveSettings( _doc, _this, "e1slo" );
+
+ m_env2Pre.saveSettings( _doc, _this, "e2pre" );
+ m_env2Att.saveSettings( _doc, _this, "e2att" );
+ m_env2Hold.saveSettings( _doc, _this, "e2hol" );
+ m_env2Dec.saveSettings( _doc, _this, "e2dec" );
+ m_env2Sus.saveSettings( _doc, _this, "e2sus" );
+ m_env2Rel.saveSettings( _doc, _this, "e2rel" );
+ m_env2Slope.saveSettings( _doc, _this, "e2slo" );
+
+ m_o23Mod.saveSettings( _doc, _this, "o23mo" );
+
+ m_vol1env1.saveSettings( _doc, _this, "v1e1" );
+ m_vol1env2.saveSettings( _doc, _this, "v1e2" );
+ m_vol1lfo1.saveSettings( _doc, _this, "v1l1" );
+ m_vol1lfo2.saveSettings( _doc, _this, "v1l2" );
+
+ m_vol2env1.saveSettings( _doc, _this, "v2e1" );
+ m_vol2env2.saveSettings( _doc, _this, "v2e2" );
+ m_vol2lfo1.saveSettings( _doc, _this, "v2l1" );
+ m_vol2lfo2.saveSettings( _doc, _this, "v2l2" );
+
+ m_vol3env1.saveSettings( _doc, _this, "v3e1" );
+ m_vol3env2.saveSettings( _doc, _this, "v3e2" );
+ m_vol3lfo1.saveSettings( _doc, _this, "v3l1" );
+ m_vol3lfo2.saveSettings( _doc, _this, "v3l2" );
+
+ m_phs1env1.saveSettings( _doc, _this, "p1e1" );
+ m_phs1env2.saveSettings( _doc, _this, "p1e2" );
+ m_phs1lfo1.saveSettings( _doc, _this, "p1l1" );
+ m_phs1lfo2.saveSettings( _doc, _this, "p1l2" );
+
+ m_phs2env1.saveSettings( _doc, _this, "p2e1" );
+ m_phs2env2.saveSettings( _doc, _this, "p2e2" );
+ m_phs2lfo1.saveSettings( _doc, _this, "p2l1" );
+ m_phs2lfo2.saveSettings( _doc, _this, "p2l2" );
+
+ m_phs3env1.saveSettings( _doc, _this, "p3e1" );
+ m_phs3env2.saveSettings( _doc, _this, "p3e2" );
+ m_phs3lfo1.saveSettings( _doc, _this, "p3l1" );
+ m_phs3lfo2.saveSettings( _doc, _this, "p3l2" );
+
+ m_pit1env1.saveSettings( _doc, _this, "f1e1" );
+ m_pit1env2.saveSettings( _doc, _this, "f1e2" );
+ m_pit1lfo1.saveSettings( _doc, _this, "f1l1" );
+ m_pit1lfo2.saveSettings( _doc, _this, "f1l2" );
+
+ m_pit2env1.saveSettings( _doc, _this, "f2e1" );
+ m_pit2env2.saveSettings( _doc, _this, "f2e2" );
+ m_pit2lfo1.saveSettings( _doc, _this, "f2l1" );
+ m_pit2lfo2.saveSettings( _doc, _this, "f2l2" );
+
+ m_pit3env1.saveSettings( _doc, _this, "f3e1" );
+ m_pit3env2.saveSettings( _doc, _this, "f3e2" );
+ m_pit3lfo1.saveSettings( _doc, _this, "f3l1" );
+ m_pit3lfo2.saveSettings( _doc, _this, "f3l2" );
+
+ m_pw1env1.saveSettings( _doc, _this, "w1e1" );
+ m_pw1env2.saveSettings( _doc, _this, "w1e2" );
+ m_pw1lfo1.saveSettings( _doc, _this, "w1l1" );
+ m_pw1lfo2.saveSettings( _doc, _this, "w1l2" );
+
+ m_sub3env1.saveSettings( _doc, _this, "s3e1" );
+ m_sub3env2.saveSettings( _doc, _this, "s3e2" );
+ m_sub3lfo1.saveSettings( _doc, _this, "s3l1" );
+ m_sub3lfo2.saveSettings( _doc, _this, "s3l2" );
+
+}
+
+void MonstroInstrument::loadSettings( const QDomElement & _this )
+{
+ m_osc1Vol.loadSettings( _this, "o1vol" );
+ m_osc1Pan.loadSettings( _this, "o1pan" );
+ m_osc1Crs.loadSettings( _this, "o1crs" );
+ m_osc1Ftl.loadSettings( _this, "o1ftl" );
+ m_osc1Ftr.loadSettings( _this, "o1ftr" );
+ m_osc1Spo.loadSettings( _this, "o1spo" );
+ m_osc1Pw.loadSettings( _this, "o1pw" );
+ m_osc1SSR.loadSettings( _this, "o1ssr" );
+ m_osc1SSF.loadSettings( _this, "o1ssf" );
+
+ m_osc2Vol.loadSettings( _this, "o2vol" );
+ m_osc2Pan.loadSettings( _this, "o2pan" );
+ m_osc2Crs.loadSettings( _this, "o2crs" );
+ m_osc2Ftl.loadSettings( _this, "o2ftl" );
+ m_osc2Ftr.loadSettings( _this, "o2ftr" );
+ m_osc2Spo.loadSettings( _this, "o2spo" );
+ m_osc2Wave.loadSettings( _this, "o2wav" );
+ m_osc2SyncH.loadSettings( _this, "o2syn" );
+ m_osc2SyncR.loadSettings( _this, "o2synr" );
+
+ m_osc3Vol.loadSettings( _this, "o3vol" );
+ m_osc3Pan.loadSettings( _this, "o3pan" );
+ m_osc3Crs.loadSettings( _this, "o3crs" );
+ m_osc3Spo.loadSettings( _this, "o3spo" );
+ m_osc3Sub.loadSettings( _this, "o3sub" );
+ m_osc3Wave1.loadSettings( _this, "o3wav1" );
+ m_osc3Wave2.loadSettings( _this, "o3wav2" );
+ m_osc3SyncH.loadSettings( _this, "o3syn" );
+ m_osc3SyncR.loadSettings( _this, "o3synr" );
+
+ m_lfo1Wave.loadSettings( _this, "l1wav" );
+ m_lfo1Att.loadSettings( _this, "l1att" );
+ m_lfo1Rate.loadSettings( _this, "l1rat" );
+ m_lfo1Phs.loadSettings( _this, "l1phs" );
+
+ m_lfo2Wave.loadSettings( _this, "l2wav" );
+ m_lfo2Att.loadSettings( _this, "l2att" );
+ m_lfo2Rate.loadSettings( _this, "l2rat" );
+ m_lfo2Phs.loadSettings( _this, "l2phs" );
+
+ m_env1Pre.loadSettings( _this, "e1pre" );
+ m_env1Att.loadSettings( _this, "e1att" );
+ m_env1Hold.loadSettings( _this, "e1hol" );
+ m_env1Dec.loadSettings( _this, "e1dec" );
+ m_env1Sus.loadSettings( _this, "e1sus" );
+ m_env1Rel.loadSettings( _this, "e1rel" );
+ m_env1Slope.loadSettings( _this, "e1slo" );
+
+ m_env2Pre.loadSettings( _this, "e2pre" );
+ m_env2Att.loadSettings( _this, "e2att" );
+ m_env2Hold.loadSettings( _this, "e2hol" );
+ m_env2Dec.loadSettings( _this, "e2dec" );
+ m_env2Sus.loadSettings( _this, "e2sus" );
+ m_env2Rel.loadSettings( _this, "e2rel" );
+ m_env2Slope.loadSettings( _this, "e2slo" );
+
+ m_o23Mod.loadSettings( _this, "o23mo" );
+
+ m_vol1env1.loadSettings( _this, "v1e1" );
+ m_vol1env2.loadSettings( _this, "v1e2" );
+ m_vol1lfo1.loadSettings( _this, "v1l1" );
+ m_vol1lfo2.loadSettings( _this, "v1l2" );
+
+ m_vol2env1.loadSettings( _this, "v2e1" );
+ m_vol2env2.loadSettings( _this, "v2e2" );
+ m_vol2lfo1.loadSettings( _this, "v2l1" );
+ m_vol2lfo2.loadSettings( _this, "v2l2" );
+
+ m_vol3env1.loadSettings( _this, "v3e1" );
+ m_vol3env2.loadSettings( _this, "v3e2" );
+ m_vol3lfo1.loadSettings( _this, "v3l1" );
+ m_vol3lfo2.loadSettings( _this, "v3l2" );
+
+ m_phs1env1.loadSettings( _this, "p1e1" );
+ m_phs1env2.loadSettings( _this, "p1e2" );
+ m_phs1lfo1.loadSettings( _this, "p1l1" );
+ m_phs1lfo2.loadSettings( _this, "p1l2" );
+
+ m_phs2env1.loadSettings( _this, "p2e1" );
+ m_phs2env2.loadSettings( _this, "p2e2" );
+ m_phs2lfo1.loadSettings( _this, "p2l1" );
+ m_phs2lfo2.loadSettings( _this, "p2l2" );
+
+ m_phs3env1.loadSettings( _this, "p3e1" );
+ m_phs3env2.loadSettings( _this, "p3e2" );
+ m_phs3lfo1.loadSettings( _this, "p3l1" );
+ m_phs3lfo2.loadSettings( _this, "p3l2" );
+
+ m_pit1env1.loadSettings( _this, "f1e1" );
+ m_pit1env2.loadSettings( _this, "f1e2" );
+ m_pit1lfo1.loadSettings( _this, "f1l1" );
+ m_pit1lfo2.loadSettings( _this, "f1l2" );
+
+ m_pit2env1.loadSettings( _this, "f2e1" );
+ m_pit2env2.loadSettings( _this, "f2e2" );
+ m_pit2lfo1.loadSettings( _this, "f2l1" );
+ m_pit2lfo2.loadSettings( _this, "f2l2" );
+
+ m_pit3env1.loadSettings( _this, "f3e1" );
+ m_pit3env2.loadSettings( _this, "f3e2" );
+ m_pit3lfo1.loadSettings( _this, "f3l1" );
+ m_pit3lfo2.loadSettings( _this, "f3l2" );
+
+ m_pw1env1.loadSettings( _this, "w1e1" );
+ m_pw1env2.loadSettings( _this, "w1e2" );
+ m_pw1lfo1.loadSettings( _this, "w1l1" );
+ m_pw1lfo2.loadSettings( _this, "w1l2" );
+
+ m_sub3env1.loadSettings( _this, "s3e1" );
+ m_sub3env2.loadSettings( _this, "s3e2" );
+ m_sub3lfo1.loadSettings( _this, "s3l1" );
+ m_sub3lfo2.loadSettings( _this, "s3l2" );
+
+}
+
+
+QString MonstroInstrument::nodeName() const
+{
+ return monstro_plugin_descriptor.name;
+}
+
+
+f_cnt_t MonstroInstrument::desiredReleaseFrames() const
+{
+ return qMax( 64, qMax( m_env1_relF, m_env2_relF ) );
+}
+
+
+PluginView * MonstroInstrument::instantiateView( QWidget * _parent )
+{
+ return( new MonstroView( this, _parent ) );
+}
+
+
+void MonstroInstrument::updateVolume1()
+{
+ m_osc1l_vol = leftCh( m_osc1Vol.value(), m_osc1Pan.value() );
+ m_osc1r_vol = rightCh( m_osc1Vol.value(), m_osc1Pan.value() );
+}
+
+
+void MonstroInstrument::updateVolume2()
+{
+ m_osc2l_vol = leftCh( m_osc2Vol.value(), m_osc2Pan.value() );
+ m_osc2r_vol = rightCh( m_osc2Vol.value(), m_osc2Pan.value() );
+}
+
+
+void MonstroInstrument::updateVolume3()
+{
+ m_osc3l_vol = leftCh( m_osc3Vol.value(), m_osc3Pan.value() );
+ m_osc3r_vol = rightCh( m_osc3Vol.value(), m_osc3Pan.value() );
+}
+
+
+void MonstroInstrument::updateFreq1()
+{
+ m_osc1l_freq = powf( 2.0f, m_osc1Crs.value() / 12.0f ) *
+ powf( 2.0f, m_osc1Ftl.value() / 1200.0f );
+ m_osc1r_freq = powf( 2.0f, m_osc1Crs.value() / 12.0f ) *
+ powf( 2.0f, m_osc1Ftr.value() / 1200.0f );
+}
+
+
+void MonstroInstrument::updateFreq2()
+{
+ m_osc2l_freq = powf( 2.0f, m_osc2Crs.value() / 12.0f ) *
+ powf( 2.0f, m_osc2Ftl.value() / 1200.0f );
+ m_osc2r_freq = powf( 2.0f, m_osc2Crs.value() / 12.0f ) *
+ powf( 2.0f, m_osc2Ftr.value() / 1200.0f );
+}
+
+
+void MonstroInstrument::updateFreq3()
+{
+ m_osc3_freq = powf( 2.0f, m_osc3Crs.value() / 12.0f );
+}
+
+
+void MonstroInstrument::updatePO1()
+{
+ m_osc1l_po = m_osc1Spo.value() / 720.0f;
+ m_osc1r_po = ( m_osc1Spo.value() * -1.0 ) / 720.0f;
+}
+
+
+void MonstroInstrument::updatePO2()
+{
+ m_osc2l_po = m_osc2Spo.value() / 720.0f;
+ m_osc2r_po = ( m_osc2Spo.value() * -1.0 ) / 720.0f;
+}
+
+
+void MonstroInstrument::updatePO3()
+{
+ m_osc3l_po = m_osc3Spo.value() / 720.0f;
+ m_osc3r_po = ( m_osc3Spo.value() * -1.0 ) / 720.0f;
+}
+
+
+void MonstroInstrument::updateEnvelope1()
+{
+ if( m_env1Pre.value() == 0.0f ) m_env1_pre = 1.0;
+ else m_env1_pre = 1.0f / ( m_env1Pre.value() / 1000.0f ) / m_samplerate;
+ if( m_env1Att.value() == 0.0f ) m_env1_att = 1.0;
+ else m_env1_att = 1.0f / ( m_env1Att.value() / 1000.0f ) / m_samplerate;
+ if( m_env1Hold.value() == 0.0f ) m_env1_hold = 1.0;
+ else m_env1_hold = 1.0f / ( m_env1Hold.value() / 1000.0f ) / m_samplerate;
+ if( m_env1Dec.value() == 0.0f ) m_env1_dec = 1.0;
+ else m_env1_dec = 1.0f / ( m_env1Dec.value() / 1000.0f ) / m_samplerate;
+ if( m_env1Rel.value() == 0.0f ) m_env1_rel = 1.0;
+ else m_env1_rel = 1.0f / ( m_env1Rel.value() / 1000.0f ) / m_samplerate;
+
+ m_env1_len = ( m_env1Pre.value() + m_env1Att.value() + m_env1Hold.value() + m_env1Dec.value() ) * m_samplerate / 1000.0f;
+ m_env1_relF = m_env1Rel.value() * m_samplerate / 1000.0f;
+}
+void MonstroInstrument::updateEnvelope2()
+{
+ if( m_env2Pre.value() == 0.0f ) m_env2_pre = 1.0;
+ else m_env2_pre = 1.0f / ( m_env2Pre.value() / 1000.0f ) / m_samplerate;
+ if( m_env2Att.value() == 0.0f ) m_env2_att = 1.0;
+ else m_env2_att = 1.0f / ( m_env2Att.value() / 1000.0f ) / m_samplerate;
+ if( m_env2Hold.value() == 0.0f ) m_env2_hold = 1.0;
+ else m_env2_hold = 1.0f / ( m_env2Hold.value() / 1000.0f ) / m_samplerate;
+ if( m_env2Dec.value() == 0.0f ) m_env2_dec = 1.0;
+ else m_env2_dec = 1.0f / ( m_env2Dec.value() / 1000.0f ) / m_samplerate;
+ if( m_env2Rel.value() == 0.0f ) m_env2_rel = 1.0;
+ else m_env2_rel = 1.0f / ( m_env2Rel.value() / 1000.0f ) / m_samplerate;
+
+ m_env2_len = ( m_env2Pre.value() + m_env2Att.value() + m_env2Hold.value() + m_env2Dec.value() ) * m_samplerate / 1000.0f;
+ m_env2_relF = m_env2Rel.value() * m_samplerate / 1000.0f;
+}
+
+
+void MonstroInstrument::updateLFOAtts()
+{
+ m_lfo1_att = m_lfo1Att.value() * m_samplerate / 1000.0f;
+ m_lfo2_att = m_lfo2Att.value() * m_samplerate / 1000.0f;
+}
+
+
+void MonstroInstrument::updateSamplerate()
+{
+ m_samplerate = engine::mixer()->processingSampleRate();
+
+ m_integrator = 0.5f - ( 0.5f - INTEGRATOR ) * 44100.0f / m_samplerate;
+ m_fmCorrection = 44100.f / m_samplerate * FM_AMOUNT;
+ m_counterMax = ( m_samplerate * 5 ) / 44100;
+
+ updateEnvelope1();
+ updateEnvelope2();
+ updateLFOAtts();
+}
+
+
+void MonstroInstrument::updateSlope1()
+{
+ const float slope = m_env1Slope.value();
+ m_slope[0] = exp10f( slope * -1.0f );
+}
+
+
+void MonstroInstrument::updateSlope2()
+{
+ const float slope = m_env2Slope.value();
+ m_slope[1] = exp10f( slope * -1.0f );
+}
+
+
+MonstroView::MonstroView( Instrument * _instrument,
+ QWidget * _parent ) :
+ InstrumentView( _instrument, _parent )
+{
+ m_operatorsView = setupOperatorsView( this );
+ setWidgetBackground( m_operatorsView, "artwork_op" );
+ m_operatorsView->show();
+ m_operatorsView->move( 0, 0 );
+
+ m_matrixView = setupMatrixView( this );
+ setWidgetBackground( m_matrixView, "artwork_mat" );
+ m_matrixView->hide();
+ m_matrixView->move( 0, 0 );
+
+// "tab buttons"
+
+ pixmapButton * m_opViewButton = new pixmapButton( this, NULL );
+ m_opViewButton -> move( 0,0 );
+ m_opViewButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "opview_active" ) );
+ m_opViewButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "opview_inactive" ) );
+ toolTip::add( m_opViewButton, tr( "Operators view" ) );
+ m_opViewButton -> setWhatsThis( tr( "The Operators view contains all the operators. These include both audible "
+ "operators (oscillators) and inaudible operators, or modulators: "
+ "Low-frequency oscillators and Envelopes. \n\n"
+ "Knobs and other widgets in the Operators view have their own what's this -texts, "
+ "so you can get more specific help for them that way. " ) );
+
+ pixmapButton * m_matViewButton = new pixmapButton( this, NULL );
+ m_matViewButton -> move( 125,0 );
+ m_matViewButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "matview_active" ) );
+ m_matViewButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "matview_inactive" ) );
+ toolTip::add( m_matViewButton, tr( "Matrix view" ) );
+ m_matViewButton -> setWhatsThis( tr( "The Matrix view contains the modulation matrix. Here you can define "
+ "the modulation relationships between the various operators: Each "
+ "audible operator (oscillators 1-3) has 3-4 properties that can be "
+ "modulated by any of the modulators. Using more modulations consumes "
+ "more CPU power. \n\n"
+ "The view is divided to modulation targets, grouped by the target oscillator. "
+ "Available targets are volume, pitch, phase, pulse width and sub-osc ratio. "
+ "Note: some targets are specific to one oscillator only. \n\n"
+ "Each modulation target has 4 knobs, one for each modulator. By default "
+ "the knobs are at 0, which means no modulation. Turning a knob to 1 causes "
+ "that modulator to affect the modulation target as much as possible. Turning "
+ "it to -1 does the same, but the modulation is inversed. " ) );
+
+ m_selectedViewGroup = new automatableButtonGroup( this );
+ m_selectedViewGroup -> addButton( m_opViewButton );
+ m_selectedViewGroup -> addButton( m_matViewButton );
+
+ connect( m_opViewButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) );
+ connect( m_matViewButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) );
+}
+
+
+MonstroView::~MonstroView()
+{
+}
+
+
+void MonstroView::updateLayout()
+{
+ switch( m_selectedViewGroup->model()->value() )
+ {
+ case OPVIEW:
+ m_operatorsView->show();
+ m_matrixView->hide();
+ break;
+ case MATVIEW:
+ m_operatorsView->hide();
+ m_matrixView->show();
+ break;
+ }
+}
+
+
+void MonstroView::modelChanged()
+{
+ MonstroInstrument * m = castModel<MonstroInstrument>();
+
+ m_osc1VolKnob-> setModel( &m-> m_osc1Vol );
+ m_osc1PanKnob-> setModel( &m-> m_osc1Pan );
+ m_osc1CrsKnob-> setModel( &m-> m_osc1Crs );
+ m_osc1FtlKnob-> setModel( &m-> m_osc1Ftl );
+ m_osc1FtrKnob-> setModel( &m-> m_osc1Ftr );
+ m_osc1SpoKnob-> setModel( &m-> m_osc1Spo );
+ m_osc1PwKnob-> setModel( &m-> m_osc1Pw );
+ m_osc1SSRButton-> setModel( &m-> m_osc1SSR );
+ m_osc1SSFButton-> setModel( &m-> m_osc1SSF );
+
+ m_osc2VolKnob-> setModel( &m-> m_osc2Vol );
+ m_osc2PanKnob-> setModel( &m-> m_osc2Pan );
+ m_osc2CrsKnob-> setModel( &m-> m_osc2Crs );
+ m_osc2FtlKnob-> setModel( &m-> m_osc2Ftl );
+ m_osc2FtrKnob-> setModel( &m-> m_osc2Ftr );
+ m_osc2SpoKnob-> setModel( &m-> m_osc2Spo );
+ m_osc2WaveBox-> setModel( &m-> m_osc2Wave );
+ m_osc2SyncHButton-> setModel( &m-> m_osc2SyncH );
+ m_osc2SyncRButton-> setModel( &m-> m_osc2SyncR );
+
+ m_osc3VolKnob-> setModel( &m-> m_osc3Vol );
+ m_osc3PanKnob-> setModel( &m-> m_osc3Pan );
+ m_osc3CrsKnob-> setModel( &m-> m_osc3Crs );
+ m_osc3SpoKnob-> setModel( &m-> m_osc3Spo );
+ m_osc3SubKnob-> setModel( &m-> m_osc3Sub );
+ m_osc3Wave1Box-> setModel( &m-> m_osc3Wave1 );
+ m_osc3Wave2Box-> setModel( &m-> m_osc3Wave2 );
+ m_osc3SyncHButton-> setModel( &m-> m_osc3SyncH );
+ m_osc3SyncRButton-> setModel( &m-> m_osc3SyncR );
+
+ m_lfo1WaveBox-> setModel( &m-> m_lfo1Wave );
+ m_lfo1AttKnob-> setModel( &m-> m_lfo1Att );
+ m_lfo1RateKnob-> setModel( &m-> m_lfo1Rate );
+ m_lfo1PhsKnob-> setModel( &m-> m_lfo1Phs );
+
+ m_lfo2WaveBox-> setModel( &m-> m_lfo2Wave );
+ m_lfo2AttKnob-> setModel( &m-> m_lfo2Att );
+ m_lfo2RateKnob-> setModel( &m-> m_lfo2Rate );
+ m_lfo2PhsKnob-> setModel( &m-> m_lfo2Phs );
+
+ m_env1PreKnob-> setModel( &m-> m_env1Pre );
+ m_env1AttKnob-> setModel( &m-> m_env1Att );
+ m_env1HoldKnob-> setModel( &m-> m_env1Hold );
+ m_env1DecKnob-> setModel( &m-> m_env1Dec );
+ m_env1SusKnob-> setModel( &m-> m_env1Sus );
+ m_env1RelKnob-> setModel( &m-> m_env1Rel );
+ m_env1SlopeKnob-> setModel( &m-> m_env1Slope );
+
+ m_env2PreKnob-> setModel( &m-> m_env2Pre );
+ m_env2AttKnob-> setModel( &m-> m_env2Att );
+ m_env2HoldKnob-> setModel( &m-> m_env2Hold );
+ m_env2DecKnob-> setModel( &m-> m_env2Dec );
+ m_env2SusKnob-> setModel( &m-> m_env2Sus );
+ m_env2RelKnob-> setModel( &m-> m_env2Rel );
+ m_env2SlopeKnob-> setModel( &m-> m_env2Slope );
+
+ m_o23ModGroup-> setModel( &m-> m_o23Mod );
+ m_selectedViewGroup-> setModel( &m-> m_selectedView );
+
+ m_vol1env1Knob-> setModel( &m-> m_vol1env1 );
+ m_vol1env2Knob-> setModel( &m-> m_vol1env2 );
+ m_vol1lfo1Knob-> setModel( &m-> m_vol1lfo1 );
+ m_vol1lfo2Knob-> setModel( &m-> m_vol1lfo2 );
+
+ m_vol2env1Knob-> setModel( &m-> m_vol2env1 );
+ m_vol2env2Knob-> setModel( &m-> m_vol2env2 );
+ m_vol2lfo1Knob-> setModel( &m-> m_vol2lfo1 );
+ m_vol2lfo2Knob-> setModel( &m-> m_vol2lfo2 );
+
+ m_vol3env1Knob-> setModel( &m-> m_vol3env1 );
+ m_vol3env2Knob-> setModel( &m-> m_vol3env2 );
+ m_vol3lfo1Knob-> setModel( &m-> m_vol3lfo1 );
+ m_vol3lfo2Knob-> setModel( &m-> m_vol3lfo2 );
+
+ m_phs1env1Knob-> setModel( &m-> m_phs1env1 );
+ m_phs1env2Knob-> setModel( &m-> m_phs1env2 );
+ m_phs1lfo1Knob-> setModel( &m-> m_phs1lfo1 );
+ m_phs1lfo2Knob-> setModel( &m-> m_phs1lfo2 );
+
+ m_phs2env1Knob-> setModel( &m-> m_phs2env1 );
+ m_phs2env2Knob-> setModel( &m-> m_phs2env2 );
+ m_phs2lfo1Knob-> setModel( &m-> m_phs2lfo1 );
+ m_phs2lfo2Knob-> setModel( &m-> m_phs2lfo2 );
+
+ m_phs3env1Knob-> setModel( &m-> m_phs3env1 );
+ m_phs3env2Knob-> setModel( &m-> m_phs3env2 );
+ m_phs3lfo1Knob-> setModel( &m-> m_phs3lfo1 );
+ m_phs3lfo2Knob-> setModel( &m-> m_phs3lfo2 );
+
+ m_pit1env1Knob-> setModel( &m-> m_pit1env1 );
+ m_pit1env2Knob-> setModel( &m-> m_pit1env2 );
+ m_pit1lfo1Knob-> setModel( &m-> m_pit1lfo1 );
+ m_pit1lfo2Knob-> setModel( &m-> m_pit1lfo2 );
+
+ m_pit2env1Knob-> setModel( &m-> m_pit2env1 );
+ m_pit2env2Knob-> setModel( &m-> m_pit2env2 );
+ m_pit2lfo1Knob-> setModel( &m-> m_pit2lfo1 );
+ m_pit2lfo2Knob-> setModel( &m-> m_pit2lfo2 );
+
+ m_pit3env1Knob-> setModel( &m-> m_pit3env1 );
+ m_pit3env2Knob-> setModel( &m-> m_pit3env2 );
+ m_pit3lfo1Knob-> setModel( &m-> m_pit3lfo1 );
+ m_pit3lfo2Knob-> setModel( &m-> m_pit3lfo2 );
+
+ m_pw1env1Knob-> setModel( &m-> m_pw1env1 );
+ m_pw1env2Knob-> setModel( &m-> m_pw1env2 );
+ m_pw1lfo1Knob-> setModel( &m-> m_pw1lfo1 );
+ m_pw1lfo2Knob-> setModel( &m-> m_pw1lfo2 );
+
+ m_sub3env1Knob-> setModel( &m-> m_sub3env1 );
+ m_sub3env2Knob-> setModel( &m-> m_sub3env2 );
+ m_sub3lfo1Knob-> setModel( &m-> m_sub3lfo1 );
+ m_sub3lfo2Knob-> setModel( &m-> m_sub3lfo2 );
+
+}
+
+
+void MonstroView::setWidgetBackground( QWidget * _widget, const QString & _pic )
+{
+ _widget->setAutoFillBackground( true );
+ QPalette pal;
+ pal.setBrush( _widget->backgroundRole(),
+ PLUGIN_NAME::getIconPixmap( _pic.toAscii().constData() ) );
+ _widget->setPalette( pal );
+}
+
+
+QWidget * MonstroView::setupOperatorsView( QWidget * _parent )
+{
+ // operators view
+
+ QWidget * view = new QWidget( _parent );
+ view-> setFixedSize( 250, 250 );
+
+ makeknob( m_osc1VolKnob, KNOBCOL1, O1ROW, "Volume", "%", "osc1Knob" )
+ makeknob( m_osc1PanKnob, KNOBCOL2, O1ROW, "Panning", "", "osc1Knob" )
+ makeknob( m_osc1CrsKnob, KNOBCOL3, O1ROW, "Coarse detune", " semitones", "osc1Knob" )
+ makeknob( m_osc1FtlKnob, KNOBCOL4, O1ROW, "Finetune left", " cents", "osc1Knob" )
+ makeknob( m_osc1FtrKnob, KNOBCOL5, O1ROW, "Finetune right", " cents", "osc1Knob" )
+ makeknob( m_osc1SpoKnob, KNOBCOL6, O1ROW, "Stereo phase offset", " deg", "osc1Knob" )
+ makeknob( m_osc1PwKnob, KNOBCOL7, O1ROW, "Pulse width", "%", "osc1Knob" )
+
+ m_osc1VolKnob -> setVolumeKnob( true );
+
+ maketinyled( m_osc1SSRButton, 230, 34, "Send sync on pulse rise" )
+ maketinyled( m_osc1SSFButton, 230, 44, "Send sync on pulse fall" )
+
+ makeknob( m_osc2VolKnob, KNOBCOL1, O2ROW, "Volume", "%", "osc2Knob" )
+ makeknob( m_osc2PanKnob, KNOBCOL2, O2ROW, "Panning", "", "osc2Knob" )
+ makeknob( m_osc2CrsKnob, KNOBCOL3, O2ROW, "Coarse detune", " semitones", "osc2Knob" )
+ makeknob( m_osc2FtlKnob, KNOBCOL4, O2ROW, "Finetune left", " cents", "osc2Knob" )
+ makeknob( m_osc2FtrKnob, KNOBCOL5, O2ROW, "Finetune right", " cents", "osc2Knob" )
+ makeknob( m_osc2SpoKnob, KNOBCOL6, O2ROW, "Stereo phase offset", " deg", "osc2Knob" )
+
+ m_osc2VolKnob -> setVolumeKnob( true );
+
+ m_osc2WaveBox = new comboBox( view );
+ m_osc2WaveBox -> setGeometry( 204, O2ROW + 7, 42, 22 );
+ m_osc2WaveBox->setFont( pointSize<8>( m_osc2WaveBox->font() ) );
+
+ maketinyled( m_osc2SyncHButton, 212, O2ROW - 3, "Hard sync oscillator 2" )
+ maketinyled( m_osc2SyncRButton, 191, O2ROW - 3, "Reverse sync oscillator 2" )
+
+ makeknob( m_osc3VolKnob, KNOBCOL1, O3ROW, "Volume", "%", "osc3Knob" )
+ makeknob( m_osc3PanKnob, KNOBCOL2, O3ROW, "Panning", "", "osc3Knob" )
+ makeknob( m_osc3CrsKnob, KNOBCOL3, O3ROW, "Coarse detune", " semitones", "osc3Knob" )
+ makeknob( m_osc3SpoKnob, KNOBCOL4, O3ROW, "Stereo phase offset", " deg", "osc3Knob" )
+ makeknob( m_osc3SubKnob, KNOBCOL5, O3ROW, "Sub-osc mix", "", "osc3Knob" )
+
+ m_osc3Wave1Box = new comboBox( view );
+ m_osc3Wave1Box -> setGeometry( 160, O3ROW + 7, 42, 22 );
+ m_osc3Wave1Box->setFont( pointSize<8>( m_osc3Wave1Box->font() ) );
+
+ m_osc3Wave2Box = new comboBox( view );
+ m_osc3Wave2Box -> setGeometry( 204, O3ROW + 7, 42, 22 );
+ m_osc3Wave2Box->setFont( pointSize<8>( m_osc3Wave2Box->font() ) );
+
+ maketinyled( m_osc3SyncHButton, 212, O3ROW - 3, "Hard sync oscillator 3" )
+ maketinyled( m_osc3SyncRButton, 191, O3ROW - 3, "Reverse sync oscillator 3" )
+
+ m_lfo1WaveBox = new comboBox( view );
+ m_lfo1WaveBox -> setGeometry( 2, LFOROW + 7, 42, 22 );
+ m_lfo1WaveBox->setFont( pointSize<8>( m_lfo1WaveBox->font() ) );
+
+ maketsknob( m_lfo1AttKnob, LFOCOL1, LFOROW, "Attack", " ms", "lfoKnob" )
+ maketsknob( m_lfo1RateKnob, LFOCOL2, LFOROW, "Rate", " ms", "lfoKnob" )
+ makeknob( m_lfo1PhsKnob, LFOCOL3, LFOROW, "Phase", " deg", "lfoKnob" )
+
+ m_lfo2WaveBox = new comboBox( view );
+ m_lfo2WaveBox -> setGeometry( 127, LFOROW + 7, 42, 22 );
+ m_lfo2WaveBox->setFont( pointSize<8>( m_lfo2WaveBox->font() ) );
+
+ maketsknob( m_lfo2AttKnob, LFOCOL4, LFOROW, "Attack", " ms", "lfoKnob" )
+ maketsknob( m_lfo2RateKnob, LFOCOL5, LFOROW, "Rate", " ms", "lfoKnob" )
+ makeknob( m_lfo2PhsKnob, LFOCOL6, LFOROW, "Phase", " deg", "lfoKnob" )
+
+ maketsknob( m_env1PreKnob, KNOBCOL1, E1ROW, "Pre-delay", " ms", "envKnob" )
+ maketsknob( m_env1AttKnob, KNOBCOL2, E1ROW, "Attack", " ms", "envKnob" )
+ maketsknob( m_env1HoldKnob, KNOBCOL3, E1ROW, "Hold", " ms", "envKnob" )
+ maketsknob( m_env1DecKnob, KNOBCOL4, E1ROW, "Decay", " ms", "envKnob" )
+ makeknob( m_env1SusKnob, KNOBCOL5, E1ROW, "Sustain", "", "envKnob" )
+ maketsknob( m_env1RelKnob, KNOBCOL6, E1ROW, "Release", " ms", "envKnob" )
+ makeknob( m_env1SlopeKnob, KNOBCOL7, E1ROW, "Slope", "", "envKnob" )
+
+ maketsknob( m_env2PreKnob, KNOBCOL1, E2ROW, "Pre-delay", " ms", "envKnob" )
+ maketsknob( m_env2AttKnob, KNOBCOL2, E2ROW, "Attack", " ms", "envKnob" )
+ maketsknob( m_env2HoldKnob, KNOBCOL3, E2ROW, "Hold", " ms", "envKnob" )
+ maketsknob( m_env2DecKnob, KNOBCOL4, E2ROW, "Decay", " ms", "envKnob" )
+ makeknob( m_env2SusKnob, KNOBCOL5, E2ROW, "Sustain", "", "envKnob" )
+ maketsknob( m_env2RelKnob, KNOBCOL6, E2ROW, "Release", " ms", "envKnob" )
+ makeknob( m_env2SlopeKnob, KNOBCOL7, E2ROW, "Slope", "", "envKnob" )
+
+ // mod selector
+ pixmapButton * m_mixButton = new pixmapButton( view, NULL );
+ m_mixButton -> move( 225, 185 );
+ m_mixButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_active" ) );
+ m_mixButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_inactive" ) );
+ toolTip::add( m_mixButton, tr( "Mix Osc2 with Osc3" ) );
+
+ pixmapButton * m_amButton = new pixmapButton( view, NULL );
+ m_amButton -> move( 225, 185 + 15 );
+ m_amButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "am_active" ) );
+ m_amButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "am_inactive" ) );
+ toolTip::add( m_amButton, tr( "Modulate amplitude of Osc3 with Osc2" ) );
+
+ pixmapButton * m_fmButton = new pixmapButton( view, NULL );
+ m_fmButton -> move( 225, 185 + 15*2 );
+ m_fmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_active" ) );
+ m_fmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_inactive" ) );
+ toolTip::add( m_fmButton, tr( "Modulate frequency of Osc3 with Osc2" ) );
+
+ pixmapButton * m_pmButton = new pixmapButton( view, NULL );
+ m_pmButton -> move( 225, 185 + 15*3 );
+ m_pmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_active" ) );
+ m_pmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_inactive" ) );
+ toolTip::add( m_pmButton, tr( "Modulate phase of Osc3 with Osc2" ) );
+
+ m_o23ModGroup = new automatableButtonGroup( view );
+ m_o23ModGroup-> addButton( m_mixButton );
+ m_o23ModGroup-> addButton( m_amButton );
+ m_o23ModGroup-> addButton( m_fmButton );
+ m_o23ModGroup-> addButton( m_pmButton );
+
+
+
+////////////////////////////////////
+// //
+// whatsthis-information strings //
+// //
+////////////////////////////////////
+
+ m_osc1CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 1 in semitone steps. " ) );
+ m_osc2CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 2 in semitone steps. " ) );
+ m_osc3CrsKnob -> setWhatsThis( tr( "The CRS knob changes the tuning of oscillator 3 in semitone steps. " ) );
+ m_osc1FtlKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right "
+ "channels respectively. These can add stereo-detuning to the oscillator "
+ "which widens the stereo image and causes an illusion of space. " ) );
+ m_osc1FtrKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right "
+ "channels respectively. These can add stereo-detuning to the oscillator "
+ "which widens the stereo image and causes an illusion of space. " ) );
+ m_osc2FtlKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right "
+ "channels respectively. These can add stereo-detuning to the oscillator "
+ "which widens the stereo image and causes an illusion of space. " ) );
+ m_osc2FtrKnob -> setWhatsThis( tr( "FTL and FTR change the finetuning of the oscillator for left and right "
+ "channels respectively. These can add stereo-detuning to the oscillator "
+ "which widens the stereo image and causes an illusion of space. " ) );
+ m_osc1SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right "
+ "channels. Higher difference creates a wider stereo image. " ) );
+ m_osc2SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right "
+ "channels. Higher difference creates a wider stereo image. " ) );
+ m_osc3SpoKnob -> setWhatsThis( tr( "The SPO knob modifies the difference in phase between left and right "
+ "channels. Higher difference creates a wider stereo image. " ) );
+ m_osc1PwKnob -> setWhatsThis( tr( "The PW knob controls the pulse width, also known as duty cycle, "
+ "of oscillator 1. Oscillator 1 is a digital pulse wave oscillator, "
+ "it doesn't produce bandlimited output, which means that you can "
+ "use it as an audible oscillator but it will cause aliasing. You can "
+ "also use it as an inaudible source of a sync signal, which can be "
+ "used to synchronize oscillators 2 and 3. " ) );
+ m_osc1SSRButton -> setWhatsThis( tr( "Send Sync on Rise: When enabled, the Sync signal is sent every time "
+ "the state of oscillator 1 changes from low to high, ie. when the amplitude "
+ "changes from -1 to 1. "
+ "Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, "
+ "but its volume has no effect on them. Sync signals are sent independently "
+ "for both left and right channels. " ) );
+ m_osc1SSFButton -> setWhatsThis( tr( "Send Sync on Fall: When enabled, the Sync signal is sent every time "
+ "the state of oscillator 1 changes from high to low, ie. when the amplitude "
+ "changes from 1 to -1. "
+ "Oscillator 1's pitch, phase and pulse width may affect the timing of syncs, "
+ "but its volume has no effect on them. Sync signals are sent independently "
+ "for both left and right channels. " ) );
+ m_osc2SyncHButton -> setWhatsThis( tr( "Hard sync: Every time the oscillator receives a sync signal from oscillator 1, "
+ "its phase is reset to 0 + whatever its phase offset is. " ) );
+ m_osc3SyncHButton -> setWhatsThis( tr( "Hard sync: Every time the oscillator receives a sync signal from oscillator 1, "
+ "its phase is reset to 0 + whatever its phase offset is. " ) );
+ m_osc2SyncRButton -> setWhatsThis( tr( "Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, "
+ "the amplitude of the oscillator gets inverted. " ) );
+ m_osc3SyncRButton -> setWhatsThis( tr( "Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, "
+ "the amplitude of the oscillator gets inverted. " ) );
+ m_osc2WaveBox -> setWhatsThis( tr( "Choose waveform for oscillator 2. " ) );
+ m_osc3Wave1Box -> setWhatsThis( tr( "Choose waveform for oscillator 3's first sub-osc. "
+ "Oscillator 3 can smoothly interpolate between two different waveforms. " ) );
+ m_osc3Wave2Box -> setWhatsThis( tr( "Choose waveform for oscillator 3's second sub-osc. "
+ "Oscillator 3 can smoothly interpolate between two different waveforms. " ) );
+ m_osc3SubKnob -> setWhatsThis( tr( "The SUB knob changes the mixing ratio of the two sub-oscs of oscillator 3. "
+ "Each sub-osc can be set to produce a different waveform, and oscillator 3 "
+ "can smoothly interpolate between them. All incoming modulations to oscillator 3 are applied "
+ "to both sub-oscs/waveforms in the exact same way. " ) );
+ m_mixButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by "
+ "the output of oscillator 2. \n\n"
+ "Mix mode means no modulation: the outputs of the oscillators are simply mixed together. " ) );
+ m_amButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by "
+ "the output of oscillator 2. \n\n"
+ "AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulated by oscillator 2. " ) );
+ m_fmButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by "
+ "the output of oscillator 2. \n\n"
+ "FM means frequency modulation: Oscillator 3's frequency (pitch) is modulated by oscillator 2. "
+ "The frequency modulation is implemented as phase modulation, which gives a more stable overall pitch "
+ "than \"pure\" frequency modulation. " ) );
+ m_pmButton -> setWhatsThis( tr( "In addition to dedicated modulators, Monstro allows oscillator 3 to be modulated by "
+ "the output of oscillator 2. \n\n"
+ "PM means phase modulation: Oscillator 3's phase is modulated by oscillator 2. "
+ "It differs from frequency modulation in that the phase changes are not cumulative. " ) );
+ m_lfo1WaveBox -> setWhatsThis( tr( "Select the waveform for LFO 1. \n"
+ "\"Random\" and \"Random smooth\" are special waveforms: "
+ "they produce random output, where the rate of the LFO controls how often "
+ "the state of the LFO changes. The smooth version interpolates between these "
+ "states with cosine interpolation. These random modes can be used to give "
+ "\"life\" to your presets - add some of that analog unpredictability... " ) );
+ m_lfo2WaveBox -> setWhatsThis( tr( "Select the waveform for LFO 2. \n"
+ "\"Random\" and \"Random smooth\" are special waveforms: "
+ "they produce random output, where the rate of the LFO controls how often "
+ "the state of the LFO changes. The smooth version interpolates between these "
+ "states with cosine interpolation. These random modes can be used to give "
+ "\"life\" to your presets - add some of that analog unpredictability... " ) );
+ m_lfo1AttKnob -> setWhatsThis( tr( "Attack causes the LFO to come on gradually from the start of the note. " ) );
+ m_lfo2AttKnob -> setWhatsThis( tr( "Attack causes the LFO to come on gradually from the start of the note. " ) );
+ m_lfo1RateKnob -> setWhatsThis( tr( "Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. " ) );
+ m_lfo2RateKnob -> setWhatsThis( tr( "Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. " ) );
+ m_lfo1PhsKnob -> setWhatsThis( tr( "PHS controls the phase offset of the LFO. " ) );
+ m_lfo2PhsKnob -> setWhatsThis( tr( "PHS controls the phase offset of the LFO. " ) );
+
+ m_env1PreKnob -> setWhatsThis( tr( "PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. " ) );
+ m_env2PreKnob -> setWhatsThis( tr( "PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. " ) );
+ m_env1AttKnob -> setWhatsThis( tr( "ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. "
+ "A value of 0 means instant. " ) );
+ m_env2AttKnob -> setWhatsThis( tr( "ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. "
+ "A value of 0 means instant. " ) );
+ m_env1HoldKnob -> setWhatsThis( tr( "HOLD controls how long the envelope stays at peak after the attack phase. " ) );
+ m_env2HoldKnob -> setWhatsThis( tr( "HOLD controls how long the envelope stays at peak after the attack phase. " ) );
+ m_env1DecKnob -> setWhatsThis( tr( "DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds "
+ "it would take to go from peak to zero. The actual decay may be shorter if sustain is used. ") );
+ m_env2DecKnob -> setWhatsThis( tr( "DEC, or decay, controls how fast the envelope falls off from its peak, measured in milliseconds "
+ "it would take to go from peak to zero. The actual decay may be shorter if sustain is used. ") );
+ m_env1SusKnob -> setWhatsThis( tr( "SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level "
+ "as long as the note is held. " ) );
+ m_env2SusKnob -> setWhatsThis( tr( "SUS, or sustain, controls the sustain level of the envelope. The decay phase will not go below this level "
+ "as long as the note is held. " ) );
+ m_env1RelKnob -> setWhatsThis( tr( "REL, or release, controls how long the release is for the note, measured in how long it would take to "
+ "fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. ") );
+ m_env2RelKnob -> setWhatsThis( tr( "REL, or release, controls how long the release is for the note, measured in how long it would take to "
+ "fall from peak to zero. Actual release may be shorter, depending on at what phase the note is released. ") );
+ m_env1SlopeKnob -> setWhatsThis( tr( "The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. "
+ "Negative values create curves that start slowly, peak quickly and fall of slowly again. "
+ "Positive values create curves that start and end quickly, and stay longer near the peaks. " ) );
+ m_env2SlopeKnob -> setWhatsThis( tr( "The slope knob controls the curve or shape of the envelope. A value of 0 creates straight rises and falls. "
+ "Negative values create curves that start slowly, peak quickly and fall of slowly again. "
+ "Positive values create curves that start and end quickly, and stay longer near the peaks. " ) );
+ return( view );
+}
+
+
+QWidget * MonstroView::setupMatrixView( QWidget * _parent )
+{
+ // matrix view
+
+ QWidget * view = new QWidget( _parent );
+ view-> setFixedSize( 250, 250 );
+
+ makeknob( m_vol1env1Knob, MATCOL1, MATROW1, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol1env2Knob, MATCOL2, MATROW1, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol1lfo1Knob, MATCOL3, MATROW1, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol1lfo2Knob, MATCOL4, MATROW1, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_vol2env1Knob, MATCOL1, MATROW3, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol2env2Knob, MATCOL2, MATROW3, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol2lfo1Knob, MATCOL3, MATROW3, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol2lfo2Knob, MATCOL4, MATROW3, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_vol3env1Knob, MATCOL1, MATROW5, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol3env2Knob, MATCOL2, MATROW5, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol3lfo1Knob, MATCOL3, MATROW5, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_vol3lfo2Knob, MATCOL4, MATROW5, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_phs1env1Knob, MATCOL1, MATROW2, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs1env2Knob, MATCOL2, MATROW2, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs1lfo1Knob, MATCOL3, MATROW2, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs1lfo2Knob, MATCOL4, MATROW2, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_phs2env1Knob, MATCOL1, MATROW4, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs2env2Knob, MATCOL2, MATROW4, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs2lfo1Knob, MATCOL3, MATROW4, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs2lfo2Knob, MATCOL4, MATROW4, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_phs3env1Knob, MATCOL1, MATROW6, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs3env2Knob, MATCOL2, MATROW6, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs3lfo1Knob, MATCOL3, MATROW6, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_phs3lfo2Knob, MATCOL4, MATROW6, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_pit1env1Knob, MATCOL5, MATROW1, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit1env2Knob, MATCOL6, MATROW1, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit1lfo1Knob, MATCOL7, MATROW1, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit1lfo2Knob, MATCOL8, MATROW1, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_pit2env1Knob, MATCOL5, MATROW3, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit2env2Knob, MATCOL6, MATROW3, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit2lfo1Knob, MATCOL7, MATROW3, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit2lfo2Knob, MATCOL8, MATROW3, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_pit3env1Knob, MATCOL5, MATROW5, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit3env2Knob, MATCOL6, MATROW5, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit3lfo1Knob, MATCOL7, MATROW5, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pit3lfo2Knob, MATCOL8, MATROW5, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_pw1env1Knob, MATCOL5, MATROW2, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pw1env2Knob, MATCOL6, MATROW2, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pw1lfo1Knob, MATCOL7, MATROW2, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_pw1lfo2Knob, MATCOL8, MATROW2, "Modulation amount", "", "matrixKnob" )
+
+ makeknob( m_sub3env1Knob, MATCOL5, MATROW6, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_sub3env2Knob, MATCOL6, MATROW6, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_sub3lfo1Knob, MATCOL7, MATROW6, "Modulation amount", "", "matrixKnob" )
+ makeknob( m_sub3lfo2Knob, MATCOL8, MATROW6, "Modulation amount", "", "matrixKnob" )
+
+ return( view );
+}
+
+extern "C"
+{
+
+// necessary for getting instance out of shared lib
+Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data )
+{
+ return new MonstroInstrument( static_cast<InstrumentTrack *>( _data ) );
+}
+
+
+}
+
+
+
+#include "moc_Monstro.cxx"
diff --git a/plugins/monstro/Monstro.h b/plugins/monstro/Monstro.h
new file mode 100644
index 0000000..197efb9
--- /dev/null
+++ b/plugins/monstro/Monstro.h
@@ -0,0 +1,717 @@
+/*
+ * Monstro.h - a semi-modular 3-osc synth with modulation matrix
+ *
+ * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#ifndef MONSTRO_H
+#define MONSTRO_H
+
+
+#include "Instrument.h"
+#include "InstrumentView.h"
+#include "AutomatableModel.h"
+#include "automatable_button.h"
+#include "TempoSyncKnob.h"
+#include "NotePlayHandle.h"
+#include "pixmap_button.h"
+#include "combobox.h"
+#include "Oscillator.h"
+#include "lmms_math.h"
+#include "BandLimitedWave.h"
+
+//
+// UI Macros
+//
+
+#define makeknob( name, x, y, hint, unit, oname ) \
+ name = new knob( knobStyled, view ); \
+ name ->move( x, y ); \
+ name ->setHintText( tr( hint ) + " ", unit ); \
+ name ->setObjectName( oname ); \
+ name ->setFixedSize( 20, 20 );
+
+#define maketsknob( name, x, y, hint, unit, oname ) \
+ name = new TempoSyncKnob( knobStyled, view ); \
+ name ->move( x, y ); \
+ name ->setHintText( tr( hint ) + " ", unit ); \
+ name ->setObjectName( oname ); \
+ name ->setFixedSize( 20, 20 );
+
+#define maketinyled( name, x, y, ttip ) \
+ name = new pixmapButton( view, NULL ); \
+ name -> setCheckable( true ); \
+ name -> move( x, y ); \
+ name -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "tinyled_on" ) ); \
+ name -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "tinyled_off" ) ); \
+ toolTip::add( name, tr( ttip ) );
+
+// UI constants
+const int O1ROW = 22;
+const int O2ROW = 22 + 39;
+const int O3ROW = 22 + 39 * 2;
+const int LFOROW = 22 + 39 * 3;
+const int E1ROW = 22 + 39 * 4;
+const int E2ROW = 22 + 39 * 5;
+
+const int KNOBCOL1 = 16;
+const int KNOBCOL2 = 16 + 30;
+const int KNOBCOL3 = 16 + 30 * 2;
+const int KNOBCOL4 = 16 + 30 * 3;
+const int KNOBCOL5 = 16 + 30 * 4;
+const int KNOBCOL6 = 16 + 30 * 5;
+const int KNOBCOL7 = 16 + 30 * 6;
+
+const int LFOCOL1 = KNOBCOL2;
+const int LFOCOL2 = KNOBCOL2 + 26;
+const int LFOCOL3 = KNOBCOL2 + 26*2;
+const int LFOCOL4 = 171;
+const int LFOCOL5 = 171 + 26;
+const int LFOCOL6 = 171 + 26*2;
+
+const int MATCOL1 = 32;
+const int MATCOL2 = 32 + 25;
+const int MATCOL3 = 32 + 25*2;
+const int MATCOL4 = 32 + 25*3;
+const int MATCOL5 = 149;
+const int MATCOL6 = 149 + 25;
+const int MATCOL7 = 149 + 25*2;
+const int MATCOL8 = 149 + 25*3;
+
+const int MATROW1 = 22;
+const int MATROW2 = 22 + 39;
+const int MATROW3 = 22 + 39*2;
+const int MATROW4 = 22 + 39*3;
+const int MATROW5 = 22 + 39*4;
+const int MATROW6 = 22 + 39*5;
+
+const int OPVIEW = 0;
+const int MATVIEW = 1;
+
+// waveform enumerators
+const int WAVE_SINE = 0;
+const int WAVE_TRI = 1;
+const int WAVE_SAW = 2;
+const int WAVE_RAMP = 3;
+const int WAVE_SQR = 4;
+const int WAVE_MOOG = 5;
+
+const int WAVE_SQRSOFT = 6;
+const int WAVE_SINABS = 7;
+const int WAVE_EXP = 8;
+const int WAVE_NOISE = 9;
+
+const int WAVE_TRI_D = 10;
+const int WAVE_SAW_D = 11;
+const int WAVE_RAMP_D = 12;
+const int WAVE_SQR_D = 13;
+const int WAVE_MOOG_D = 14;
+
+const int NUM_WAVES = 15;
+
+// lfo-specific enumerators
+const int WAVE_RANDOM = 9;
+const int WAVE_RANDOM_SMOOTH = 10;
+const int NUM_LFO_WAVES = 11;
+
+// modulation enumerators
+const int MOD_MIX = 0;
+const int MOD_AM = 1;
+const int MOD_FM = 2;
+const int MOD_PM = 3;
+const int NUM_MODS = 4;
+
+const float MODCLIP = 2.0;
+
+const float MIN_FREQ = 18.0f;
+const float MAX_FREQ = 48000.0f;
+
+const float INTEGRATOR = 3.0f / 7.0f;
+
+const float FM_AMOUNT = 0.25f;
+
+const float PW_MIN = 0.25f;
+const float PW_MAX = 100.0f - PW_MIN;
+
+class MonstroInstrument;
+class MonstroView;
+
+
+class MonstroSynth
+{
+public:
+ MonstroSynth( MonstroInstrument * _i, NotePlayHandle * _nph );
+ virtual ~MonstroSynth();
+
+ void renderOutput( fpp_t _frames, sampleFrame * _buf );
+
+private:
+
+ MonstroInstrument * m_parent;
+ NotePlayHandle * m_nph;
+
+ inline void updateModulators( float * env1, float * env2, float * lfo1, float * lfo2, int frames );
+
+ // linear interpolation
+/* inline sample_t interpolate( sample_t s1, sample_t s2, float x )
+ {
+ return s1 + ( s2 - s1 ) * x;
+ }*/ // using interpolation.h from now on
+
+ inline sample_t calcSlope( int slope, sample_t s );
+
+ // checks for lower bound for phase, upper bound is already checked by oscillator-functions in both
+ // oscillator.h and bandlimitedwave.h so we save some cpu by only checking lower bound
+ inline float lowBoundCheck( float ph )
+ {
+ return ph < 0.0f ? ph - ( static_cast<int>( ph ) - 1.0f ) : ph;
+ }
+
+ inline sample_t oscillate( int _wave, const float _ph, float _wavelen )
+ {
+ switch( _wave )
+ {
+ case WAVE_SINE:
+ return Oscillator::sinSample( _ph );
+ break;
+ case WAVE_TRI:
+ //return Oscillator::triangleSample( _ph );
+ return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLTriangle );
+ break;
+ case WAVE_SAW:
+ //return Oscillator::sawSample( _ph );
+ return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLSaw );
+ break;
+ case WAVE_RAMP:
+ //return Oscillator::sawSample( _ph ) * -1.0;
+ return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLSaw ) * -1.0;
+ break;
+ case WAVE_SQR:
+ //return Oscillator::squareSample( _ph );
+ return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLSquare );
+ break;
+ case WAVE_SQRSOFT:
+ {
+ const float ph = fraction( _ph );
+ if( ph < 0.1 ) return Oscillator::sinSample( ph * 5 + 0.75 );
+ else if( ph < 0.5 ) return 1.0f;
+ else if( ph < 0.6 ) return Oscillator::sinSample( ph * 5 + 0.75 );
+ else return -1.0f;
+ break;
+ }
+ case WAVE_MOOG:
+ //return Oscillator::moogSawSample( _ph );
+ return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::BLMoog );
+ break;
+ case WAVE_SINABS:
+ return qAbs( Oscillator::sinSample( _ph ) );
+ break;
+ case WAVE_EXP:
+ return Oscillator::expSample( _ph );
+ break;
+ case WAVE_NOISE:
+ return Oscillator::noiseSample( _ph );
+ break;
+
+ case WAVE_TRI_D:
+ return Oscillator::triangleSample( _ph );
+ break;
+ case WAVE_SAW_D:
+ return Oscillator::sawSample( _ph );
+ break;
+ case WAVE_RAMP_D:
+ return Oscillator::sawSample( _ph ) * -1.0;
+ break;
+ case WAVE_SQR_D:
+ return Oscillator::squareSample( _ph );
+ break;
+ case WAVE_MOOG_D:
+ return Oscillator::moogSawSample( _ph );
+ break;
+
+ }
+ return 0.0;
+ }
+
+
+ float m_osc1l_phase;
+ float m_osc1r_phase;
+ float m_osc2l_phase;
+ float m_osc2r_phase;
+ float m_osc3l_phase;
+ float m_osc3r_phase;
+
+ sample_t m_env_phase [2];
+ float m_lfo_phase [2];
+ sample_t m_lfo_last [2];
+ sample_t m_lfo_next [2];
+ float m_lfo_inc [2];
+ float m_lfo_rate [2];
+ float m_env_sus [2];
+
+ int m_lfovalue[2];
+ int m_lfoatt[2];
+ float m_env_pre[2];
+ float m_env_att[2];
+ float m_env_hold[2];
+ float m_env_dec[2];
+ float m_env_rel[2];
+
+ sample_t m_osc1l_last;
+ sample_t m_osc1r_last;
+
+ sample_t m_l_last;
+ sample_t m_r_last;
+
+ float m_ph2l_last;
+ float m_ph2r_last;
+
+ float m_ph3l_last;
+ float m_ph3r_last;
+
+ bool m_invert2l;
+ bool m_invert3l;
+ bool m_invert2r;
+ bool m_invert3r;
+
+ int m_counter2l;
+ int m_counter2r;
+ int m_counter3l;
+ int m_counter3r;
+};
+
+class MonstroInstrument : public Instrument
+{
+ Q_OBJECT
+
+#define setwavemodel( name ) \
+ name .addItem( tr( "Sine wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sin" ) ) ); \
+ name .addItem( tr( "Bandlimited Triangle wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "tri" ) ) ); \
+ name .addItem( tr( "Bandlimited Saw wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "saw" ) ) ); \
+ name .addItem( tr( "Bandlimited Ramp wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "ramp" ) ) ); \
+ name .addItem( tr( "Bandlimited Square wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sqr" ) ) ); \
+ name .addItem( tr( "Bandlimited Moog saw wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "moog" ) ) ); \
+ name .addItem( tr( "Soft square wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sqrsoft" ) ) ); \
+ name .addItem( tr( "Absolute sine wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sinabs" ) ) ); \
+ name .addItem( tr( "Exponential wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "exp" ) ) ); \
+ name .addItem( tr( "White noise" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "noise" ) ) ); \
+ name .addItem( tr( "Digital Triangle wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "tri" ) ) ); \
+ name .addItem( tr( "Digital Saw wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "saw" ) ) ); \
+ name .addItem( tr( "Digital Ramp wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "ramp" ) ) ); \
+ name .addItem( tr( "Digital Square wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sqr" ) ) ); \
+ name .addItem( tr( "Digital Moog saw wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "moog" ) ) );
+
+
+#define setlfowavemodel( name ) \
+ name .addItem( tr( "Sine wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sin" ) ) ); \
+ name .addItem( tr( "Triangle wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "tri" ) ) ); \
+ name .addItem( tr( "Saw wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "saw" ) ) ); \
+ name .addItem( tr( "Ramp wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "ramp" ) ) ); \
+ name .addItem( tr( "Square wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sqr" ) ) ); \
+ name .addItem( tr( "Moog saw wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "moog" ) ) ); \
+ name .addItem( tr( "Soft square wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sqrsoft" ) ) ); \
+ name .addItem( tr( "Abs. sine wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "sinabs" ) ) ); \
+ name .addItem( tr( "Exponential wave" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "exp" ) ) ); \
+ name .addItem( tr( "Random" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "rand" ) ) ); \
+ name .addItem( tr( "Random smooth" ), static_cast<PixmapLoader*>( new PluginPixmapLoader( "rand" ) ) );
+
+public:
+ MonstroInstrument( InstrumentTrack * _instrument_track );
+ virtual ~MonstroInstrument();
+
+ virtual void playNote( NotePlayHandle * _n,
+ sampleFrame * _working_buffer );
+ virtual void deleteNotePluginData( NotePlayHandle * _n );
+
+ virtual void saveSettings( QDomDocument & _doc,
+ QDomElement & _this );
+ virtual void loadSettings( const QDomElement & _this );
+
+ virtual QString nodeName() const;
+
+ virtual f_cnt_t desiredReleaseFrames() const;
+
+ virtual PluginView * instantiateView( QWidget * _parent );
+
+public slots:
+ void updateVolume1();
+ void updateVolume2();
+ void updateVolume3();
+ void updateFreq1();
+ void updateFreq2();
+ void updateFreq3();
+ void updatePO1();
+ void updatePO2();
+ void updatePO3();
+ void updateEnvelope1();
+ void updateEnvelope2();
+ void updateLFOAtts();
+ void updateSamplerate();
+ void updateSlope1();
+ void updateSlope2();
+
+protected:
+ float m_osc1l_vol;
+ float m_osc1r_vol;
+ float m_osc2l_vol;
+ float m_osc2r_vol;
+ float m_osc3l_vol;
+ float m_osc3r_vol;
+
+ float m_osc1l_freq;
+ float m_osc1r_freq;
+ float m_osc2l_freq;
+ float m_osc2r_freq;
+ float m_osc3_freq;
+
+ float m_osc1l_po;
+ float m_osc1r_po;
+ float m_osc2l_po;
+ float m_osc2r_po;
+ float m_osc3l_po;
+ float m_osc3r_po;
+
+ float m_env1_pre;
+ float m_env1_att;
+ float m_env1_hold;
+ float m_env1_dec;
+ float m_env1_rel;
+
+ float m_env2_pre;
+ float m_env2_att;
+ float m_env2_hold;
+ float m_env2_dec;
+ float m_env2_rel;
+
+ f_cnt_t m_env1_len;
+ f_cnt_t m_env2_len;
+
+ f_cnt_t m_env1_relF;
+ f_cnt_t m_env2_relF;
+
+ float m_slope [2];
+
+ f_cnt_t m_lfo1_att;
+ f_cnt_t m_lfo2_att;
+
+ sample_rate_t m_samplerate;
+ fpp_t m_fpp;
+
+ float m_integrator;
+ float m_fmCorrection;
+ int m_counterMax;
+
+private:
+ inline float leftCh( float _vol, float _pan )
+ {
+ return ( _pan <= 0 ? 1.0 : 1.0 - ( _pan / 100.0 ) ) * _vol / 100.0;
+ }
+
+ inline float rightCh( float _vol, float _pan )
+ {
+ return ( _pan >= 0 ? 1.0 : 1.0 + ( _pan / 100.0 ) ) * _vol / 100.0;
+ }
+
+//////////////////////////////////////
+// models of //
+// operator view knobs //
+// //
+//////////////////////////////////////
+
+ FloatModel m_osc1Vol;
+ FloatModel m_osc1Pan;
+ FloatModel m_osc1Crs;
+ FloatModel m_osc1Ftl;
+ FloatModel m_osc1Ftr;
+ FloatModel m_osc1Spo;
+ FloatModel m_osc1Pw;
+ BoolModel m_osc1SSR;
+ BoolModel m_osc1SSF;
+
+ FloatModel m_osc2Vol;
+ FloatModel m_osc2Pan;
+ FloatModel m_osc2Crs;
+ FloatModel m_osc2Ftl;
+ FloatModel m_osc2Ftr;
+ FloatModel m_osc2Spo;
+ ComboBoxModel m_osc2Wave;
+ BoolModel m_osc2SyncH;
+ BoolModel m_osc2SyncR;
+
+ FloatModel m_osc3Vol;
+ FloatModel m_osc3Pan;
+ FloatModel m_osc3Crs;
+ FloatModel m_osc3Spo;
+ FloatModel m_osc3Sub;
+ ComboBoxModel m_osc3Wave1;
+ ComboBoxModel m_osc3Wave2;
+ BoolModel m_osc3SyncH;
+ BoolModel m_osc3SyncR;
+
+ ComboBoxModel m_lfo1Wave;
+ TempoSyncKnobModel m_lfo1Att;
+ TempoSyncKnobModel m_lfo1Rate;
+ FloatModel m_lfo1Phs;
+
+ ComboBoxModel m_lfo2Wave;
+ TempoSyncKnobModel m_lfo2Att;
+ TempoSyncKnobModel m_lfo2Rate;
+ FloatModel m_lfo2Phs;
+
+ TempoSyncKnobModel m_env1Pre;
+ TempoSyncKnobModel m_env1Att;
+ TempoSyncKnobModel m_env1Hold;
+ TempoSyncKnobModel m_env1Dec;
+ FloatModel m_env1Sus;
+ TempoSyncKnobModel m_env1Rel;
+ FloatModel m_env1Slope;
+
+ TempoSyncKnobModel m_env2Pre;
+ TempoSyncKnobModel m_env2Att;
+ TempoSyncKnobModel m_env2Hold;
+ TempoSyncKnobModel m_env2Dec;
+ FloatModel m_env2Sus;
+ TempoSyncKnobModel m_env2Rel;
+ FloatModel m_env2Slope;
+
+ IntModel m_o23Mod;
+
+ IntModel m_selectedView;
+
+//////////////////////////////////////
+// models of //
+// modulation matrix view knobs //
+// //
+//////////////////////////////////////
+
+ FloatModel m_vol1env1;
+ FloatModel m_vol1env2;
+ FloatModel m_vol1lfo1;
+ FloatModel m_vol1lfo2;
+
+ FloatModel m_vol2env1;
+ FloatModel m_vol2env2;
+ FloatModel m_vol2lfo1;
+ FloatModel m_vol2lfo2;
+
+ FloatModel m_vol3env1;
+ FloatModel m_vol3env2;
+ FloatModel m_vol3lfo1;
+ FloatModel m_vol3lfo2;
+
+ FloatModel m_phs1env1;
+ FloatModel m_phs1env2;
+ FloatModel m_phs1lfo1;
+ FloatModel m_phs1lfo2;
+
+ FloatModel m_phs2env1;
+ FloatModel m_phs2env2;
+ FloatModel m_phs2lfo1;
+ FloatModel m_phs2lfo2;
+
+ FloatModel m_phs3env1;
+ FloatModel m_phs3env2;
+ FloatModel m_phs3lfo1;
+ FloatModel m_phs3lfo2;
+
+ FloatModel m_pit1env1;
+ FloatModel m_pit1env2;
+ FloatModel m_pit1lfo1;
+ FloatModel m_pit1lfo2;
+
+ FloatModel m_pit2env1;
+ FloatModel m_pit2env2;
+ FloatModel m_pit2lfo1;
+ FloatModel m_pit2lfo2;
+
+ FloatModel m_pit3env1;
+ FloatModel m_pit3env2;
+ FloatModel m_pit3lfo1;
+ FloatModel m_pit3lfo2;
+
+ FloatModel m_pw1env1;
+ FloatModel m_pw1env2;
+ FloatModel m_pw1lfo1;
+ FloatModel m_pw1lfo2;
+
+ FloatModel m_sub3env1;
+ FloatModel m_sub3env2;
+ FloatModel m_sub3lfo1;
+ FloatModel m_sub3lfo2;
+
+ friend class MonstroSynth;
+ friend class MonstroView;
+
+};
+
+class MonstroView : public InstrumentView
+{
+ Q_OBJECT
+public:
+ MonstroView( Instrument * _instrument,
+ QWidget * _parent );
+ virtual ~MonstroView();
+
+protected slots:
+ void updateLayout();
+
+private:
+ virtual void modelChanged();
+
+ void setWidgetBackground( QWidget * _widget, const QString & _pic );
+ QWidget * setupOperatorsView( QWidget * _parent );
+ QWidget * setupMatrixView( QWidget * _parent );
+
+//////////////////////////////////////
+// //
+// operator view knobs //
+// //
+//////////////////////////////////////
+
+ knob * m_osc1VolKnob;
+ knob * m_osc1PanKnob;
+ knob * m_osc1CrsKnob;
+ knob * m_osc1FtlKnob;
+ knob * m_osc1FtrKnob;
+ knob * m_osc1SpoKnob;
+ knob * m_osc1PwKnob;
+ pixmapButton * m_osc1SSRButton;
+ pixmapButton * m_osc1SSFButton;
+
+ knob * m_osc2VolKnob;
+ knob * m_osc2PanKnob;
+ knob * m_osc2CrsKnob;
+ knob * m_osc2FtlKnob;
+ knob * m_osc2FtrKnob;
+ knob * m_osc2SpoKnob;
+ comboBox * m_osc2WaveBox;
+ pixmapButton * m_osc2SyncHButton;
+ pixmapButton * m_osc2SyncRButton;
+
+ knob * m_osc3VolKnob;
+ knob * m_osc3PanKnob;
+ knob * m_osc3CrsKnob;
+ knob * m_osc3SpoKnob;
+ knob * m_osc3SubKnob;
+ comboBox * m_osc3Wave1Box;
+ comboBox * m_osc3Wave2Box;
+ pixmapButton * m_osc3SyncHButton;
+ pixmapButton * m_osc3SyncRButton;
+
+ comboBox * m_lfo1WaveBox;
+ TempoSyncKnob * m_lfo1AttKnob;
+ TempoSyncKnob * m_lfo1RateKnob;
+ knob * m_lfo1PhsKnob;
+
+ comboBox * m_lfo2WaveBox;
+ TempoSyncKnob * m_lfo2AttKnob;
+ TempoSyncKnob * m_lfo2RateKnob;
+ knob * m_lfo2PhsKnob;
+
+ TempoSyncKnob * m_env1PreKnob;
+ TempoSyncKnob * m_env1AttKnob;
+ TempoSyncKnob * m_env1HoldKnob;
+ TempoSyncKnob * m_env1DecKnob;
+ knob * m_env1SusKnob;
+ TempoSyncKnob * m_env1RelKnob;
+ knob * m_env1SlopeKnob;
+
+ TempoSyncKnob * m_env2PreKnob;
+ TempoSyncKnob * m_env2AttKnob;
+ TempoSyncKnob * m_env2HoldKnob;
+ TempoSyncKnob * m_env2DecKnob;
+ knob * m_env2SusKnob;
+ TempoSyncKnob * m_env2RelKnob;
+ knob * m_env2SlopeKnob;
+
+ automatableButtonGroup * m_o23ModGroup;
+
+ automatableButtonGroup * m_selectedViewGroup;
+
+ QWidget * m_operatorsView;
+ QWidget * m_matrixView;
+
+/////////////////////////////////
+// //
+// matrix view knobs //
+// //
+/////////////////////////////////
+
+ knob * m_vol1env1Knob;
+ knob * m_vol1env2Knob;
+ knob * m_vol1lfo1Knob;
+ knob * m_vol1lfo2Knob;
+
+ knob * m_vol2env1Knob;
+ knob * m_vol2env2Knob;
+ knob * m_vol2lfo1Knob;
+ knob * m_vol2lfo2Knob;
+
+ knob * m_vol3env1Knob;
+ knob * m_vol3env2Knob;
+ knob * m_vol3lfo1Knob;
+ knob * m_vol3lfo2Knob;
+
+ knob * m_phs1env1Knob;
+ knob * m_phs1env2Knob;
+ knob * m_phs1lfo1Knob;
+ knob * m_phs1lfo2Knob;
+
+ knob * m_phs2env1Knob;
+ knob * m_phs2env2Knob;
+ knob * m_phs2lfo1Knob;
+ knob * m_phs2lfo2Knob;
+
+ knob * m_phs3env1Knob;
+ knob * m_phs3env2Knob;
+ knob * m_phs3lfo1Knob;
+ knob * m_phs3lfo2Knob;
+
+ knob * m_pit1env1Knob;
+ knob * m_pit1env2Knob;
+ knob * m_pit1lfo1Knob;
+ knob * m_pit1lfo2Knob;
+
+ knob * m_pit2env1Knob;
+ knob * m_pit2env2Knob;
+ knob * m_pit2lfo1Knob;
+ knob * m_pit2lfo2Knob;
+
+ knob * m_pit3env1Knob;
+ knob * m_pit3env2Knob;
+ knob * m_pit3lfo1Knob;
+ knob * m_pit3lfo2Knob;
+
+ knob * m_pw1env1Knob;
+ knob * m_pw1env2Knob;
+ knob * m_pw1lfo1Knob;
+ knob * m_pw1lfo2Knob;
+
+ knob * m_sub3env1Knob;
+ knob * m_sub3env2Knob;
+ knob * m_sub3lfo1Knob;
+ knob * m_sub3lfo2Knob;
+
+};
+
+
+#endif
diff --git a/plugins/monstro/am_active.png b/plugins/monstro/am_active.png
new file mode 100644
index 0000000..785ac4f
Binary files /dev/null and b/plugins/monstro/am_active.png differ
diff --git a/plugins/monstro/am_inactive.png b/plugins/monstro/am_inactive.png
new file mode 100644
index 0000000..4b17719
Binary files /dev/null and b/plugins/monstro/am_inactive.png differ
diff --git a/plugins/monstro/artwork_mat.png b/plugins/monstro/artwork_mat.png
new file mode 100644
index 0000000..2f783c6
Binary files /dev/null and b/plugins/monstro/artwork_mat.png differ
diff --git a/plugins/monstro/artwork_op.png b/plugins/monstro/artwork_op.png
new file mode 100644
index 0000000..b68bba6
Binary files /dev/null and b/plugins/monstro/artwork_op.png differ
diff --git a/plugins/monstro/exp.png b/plugins/monstro/exp.png
new file mode 100644
index 0000000..9fe6348
Binary files /dev/null and b/plugins/monstro/exp.png differ
diff --git a/plugins/monstro/fm_active.png b/plugins/monstro/fm_active.png
new file mode 100644
index 0000000..cd4ee85
Binary files /dev/null and b/plugins/monstro/fm_active.png differ
diff --git a/plugins/monstro/fm_inactive.png b/plugins/monstro/fm_inactive.png
new file mode 100644
index 0000000..a96128b
Binary files /dev/null and b/plugins/monstro/fm_inactive.png differ
diff --git a/plugins/monstro/logo.png b/plugins/monstro/logo.png
new file mode 100644
index 0000000..435febc
Binary files /dev/null and b/plugins/monstro/logo.png differ
diff --git a/plugins/monstro/matview_active.png b/plugins/monstro/matview_active.png
new file mode 100644
index 0000000..c9697dc
Binary files /dev/null and b/plugins/monstro/matview_active.png differ
diff --git a/plugins/monstro/matview_inactive.png b/plugins/monstro/matview_inactive.png
new file mode 100644
index 0000000..3cba41b
Binary files /dev/null and b/plugins/monstro/matview_inactive.png differ
diff --git a/plugins/monstro/mix_active.png b/plugins/monstro/mix_active.png
new file mode 100644
index 0000000..a355b29
Binary files /dev/null and b/plugins/monstro/mix_active.png differ
diff --git a/plugins/monstro/mix_inactive.png b/plugins/monstro/mix_inactive.png
new file mode 100644
index 0000000..5896ca3
Binary files /dev/null and b/plugins/monstro/mix_inactive.png differ
diff --git a/plugins/monstro/moog.png b/plugins/monstro/moog.png
new file mode 100644
index 0000000..6d90059
Binary files /dev/null and b/plugins/monstro/moog.png differ
diff --git a/plugins/monstro/noise.png b/plugins/monstro/noise.png
new file mode 100644
index 0000000..6d3853f
Binary files /dev/null and b/plugins/monstro/noise.png differ
diff --git a/plugins/monstro/opview_active.png b/plugins/monstro/opview_active.png
new file mode 100644
index 0000000..d993b11
Binary files /dev/null and b/plugins/monstro/opview_active.png differ
diff --git a/plugins/monstro/opview_inactive.png b/plugins/monstro/opview_inactive.png
new file mode 100644
index 0000000..dc5a0a4
Binary files /dev/null and b/plugins/monstro/opview_inactive.png differ
diff --git a/plugins/monstro/pm_active.png b/plugins/monstro/pm_active.png
new file mode 100644
index 0000000..b62cd9d
Binary files /dev/null and b/plugins/monstro/pm_active.png differ
diff --git a/plugins/monstro/pm_inactive.png b/plugins/monstro/pm_inactive.png
new file mode 100644
index 0000000..c09cdb3
Binary files /dev/null and b/plugins/monstro/pm_inactive.png differ
diff --git a/plugins/monstro/ramp.png b/plugins/monstro/ramp.png
new file mode 100644
index 0000000..dbd423e
Binary files /dev/null and b/plugins/monstro/ramp.png differ
diff --git a/plugins/monstro/rand.png b/plugins/monstro/rand.png
new file mode 100644
index 0000000..96c4a49
Binary files /dev/null and b/plugins/monstro/rand.png differ
diff --git a/plugins/monstro/saw.png b/plugins/monstro/saw.png
new file mode 100644
index 0000000..56c077f
Binary files /dev/null and b/plugins/monstro/saw.png differ
diff --git a/plugins/monstro/sin.png b/plugins/monstro/sin.png
new file mode 100644
index 0000000..acabd5a
Binary files /dev/null and b/plugins/monstro/sin.png differ
diff --git a/plugins/monstro/sinabs.png b/plugins/monstro/sinabs.png
new file mode 100644
index 0000000..2216224
Binary files /dev/null and b/plugins/monstro/sinabs.png differ
diff --git a/plugins/monstro/sqr.png b/plugins/monstro/sqr.png
new file mode 100644
index 0000000..83d5e48
Binary files /dev/null and b/plugins/monstro/sqr.png differ
diff --git a/plugins/monstro/sqrsoft.png b/plugins/monstro/sqrsoft.png
new file mode 100644
index 0000000..2e5626d
Binary files /dev/null and b/plugins/monstro/sqrsoft.png differ
diff --git a/plugins/monstro/tinyled_off.png b/plugins/monstro/tinyled_off.png
new file mode 100644
index 0000000..882ac32
Binary files /dev/null and b/plugins/monstro/tinyled_off.png differ
diff --git a/plugins/monstro/tinyled_on.png b/plugins/monstro/tinyled_on.png
new file mode 100644
index 0000000..3b1d97d
Binary files /dev/null and b/plugins/monstro/tinyled_on.png differ
diff --git a/plugins/monstro/tri.png b/plugins/monstro/tri.png
new file mode 100644
index 0000000..9e1ab81
Binary files /dev/null and b/plugins/monstro/tri.png differ
diff --git a/plugins/nes/CMakeLists.txt b/plugins/nes/CMakeLists.txt
new file mode 100644
index 0000000..b864f61
--- /dev/null
+++ b/plugins/nes/CMakeLists.txt
@@ -0,0 +1,3 @@
+INCLUDE(BuildPlugin)
+
+BUILD_PLUGIN(nes Nes.cpp Nes.h MOCFILES Nes.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/nes/Nes.cpp b/plugins/nes/Nes.cpp
new file mode 100644
index 0000000..84f08c6
--- /dev/null
+++ b/plugins/nes/Nes.cpp
@@ -0,0 +1,928 @@
+/* Nes.cpp - A NES instrument plugin for LMMS
+ *
+ * Copyright (c) 2014 Vesa Kivimäki
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#include <QtXml/QDomElement>
+
+#include "Nes.h"
+#include "engine.h"
+#include "InstrumentTrack.h"
+#include "templates.h"
+#include "tooltip.h"
+#include "song.h"
+#include "lmms_math.h"
+#include "interpolation.h"
+#include "Oscillator.h"
+
+#include "embed.cpp"
+
+extern "C"
+{
+
+Plugin::Descriptor PLUGIN_EXPORT nes_plugin_descriptor =
+{
+ STRINGIFY( PLUGIN_NAME ),
+ "Nescaline",
+ QT_TRANSLATE_NOOP( "pluginBrowser",
+ "A NES-like synthesizer" ),
+ "Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>",
+ 0x0100,
+ Plugin::Instrument,
+ new PluginPixmapLoader( "logo" ),
+ NULL,
+ NULL
+} ;
+
+}
+
+
+NesObject::NesObject( NesInstrument * nes, const sample_rate_t samplerate, NotePlayHandle * nph ) :
+ m_parent( nes ),
+ m_samplerate( samplerate ),
+ m_nph( nph )
+{
+ m_pitchUpdateCounter = 0;
+ m_pitchUpdateFreq = wavelength( 60.0f );
+
+ m_LFSR = LFSR_INIT;
+
+ m_ch1Counter = 0;
+ m_ch2Counter = 0;
+ m_ch3Counter = 0;
+ m_ch4Counter = 0;
+
+ m_ch1EnvCounter = 0;
+ m_ch2EnvCounter = 0;
+ m_ch4EnvCounter = 0;
+
+ m_ch1EnvValue = 15;
+ m_ch2EnvValue = 15;
+ m_ch4EnvValue = 15;
+
+ m_ch1SweepCounter = 0;
+ m_ch2SweepCounter = 0;
+ m_ch4SweepCounter = 0;
+
+ m_12Last = 0.0f;
+ m_34Last = 0.0f;
+
+ m_maxWlen = wavelength( MIN_FREQ );
+
+ m_nsf = NES_SIMPLE_FILTER * ( m_samplerate / 44100.0 );
+
+ m_lastNoteFreq = 0;
+ m_lastNoiseFreq = -1.0f; // value that is always different than noisefreq so it gets updated at start
+
+ m_vibratoPhase = 0;
+
+ updatePitch();
+}
+
+
+NesObject::~NesObject()
+{
+}
+
+
+void NesObject::renderOutput( sampleFrame * buf, fpp_t frames )
+{
+ ////////////////////////////////
+ // //
+ // variables for processing //
+ // //
+ ////////////////////////////////
+
+ bool ch1Enabled = m_parent->m_ch1Enabled.value();
+ bool ch2Enabled = m_parent->m_ch2Enabled.value();
+ bool ch3Enabled = m_parent->m_ch3Enabled.value();
+ bool ch4Enabled = m_parent->m_ch4Enabled.value();
+
+ float ch1DutyCycle = DUTY_CYCLE[ m_parent->m_ch1DutyCycle.value() ];
+ int ch1EnvLen = wavelength( floorf( 240.0 / ( m_parent->m_ch1EnvLen.value() + 1 ) ) );
+ bool ch1EnvLoop = m_parent->m_ch1EnvLooped.value();
+
+ float ch2DutyCycle = DUTY_CYCLE[ m_parent->m_ch2DutyCycle.value() ];
+ int ch2EnvLen = wavelength( floorf( 240.0 / ( m_parent->m_ch2EnvLen.value() + 1 ) ) );
+ bool ch2EnvLoop = m_parent->m_ch2EnvLooped.value();
+
+ int ch4EnvLen = wavelength( floorf( 240.0 / ( m_parent->m_ch4EnvLen.value() + 1 ) ) );
+ bool ch4EnvLoop = m_parent->m_ch4EnvLooped.value();
+
+ // processing variables for operators
+ int ch1;
+ int ch2;
+ int ch3;
+ int ch4;
+
+ // levels for generators (used for dc offset compensation)
+ int ch1Level;
+ int ch2Level;
+ int ch3Level;
+ int ch4Level;
+
+ int ch1SweepRate = wavelength( floorf( 120.0 / ( m_parent->m_ch1SweepRate.value() + 1 ) ) );
+ int ch2SweepRate = wavelength( floorf( 120.0 / ( m_parent->m_ch2SweepRate.value() + 1 ) ) );
+ int ch4SweepRate = wavelength( floorf( 60.0f / ( 8.0f - qAbs( m_parent->m_ch4Sweep.value() ) ) ) );
+
+ int ch1Sweep = static_cast<int>( m_parent->m_ch1SweepAmt.value() * -1.0 );
+ int ch2Sweep = static_cast<int>( m_parent->m_ch2SweepAmt.value() * -1.0 );
+
+ int ch4Sweep = 0;
+ if( m_parent->m_ch4Sweep.value() != 0.0f )
+ {
+ ch4Sweep = m_parent->m_ch4Sweep.value() > 0.0f
+ ? -1
+ : 1;
+ }
+
+ // the amounts are inverted so we correct them here
+ if( ch1Sweep > 0 )
+ {
+ ch1Sweep = 8 - ch1Sweep;
+ }
+ if( ch1Sweep < 0 )
+ {
+ ch1Sweep = -8 - ch1Sweep;
+ }
+
+ if( ch2Sweep > 0 )
+ {
+ ch2Sweep = 8 - ch2Sweep;
+ }
+ if( ch2Sweep < 0 )
+ {
+ ch2Sweep = -8 - ch2Sweep;
+ }
+
+
+ // start framebuffer loop
+
+ for( f_cnt_t f = 0; f < frames; f++ )
+ {
+ ////////////////////////////////
+ // //
+ // pitch update //
+ // //
+ ////////////////////////////////
+
+ m_pitchUpdateCounter++;
+ if( m_pitchUpdateCounter >= m_pitchUpdateFreq )
+ {
+ updatePitch();
+ m_pitchUpdateCounter = 0;
+ }
+
+
+ ////////////////////////////////
+ // //
+ // channel 1 //
+ // //
+ ////////////////////////////////
+
+ // render pulse wave
+ if( m_wlen1 <= m_maxWlen && m_wlen1 >= MIN_WLEN && ch1Enabled )
+ {
+ ch1Level = m_parent->m_ch1EnvEnabled.value()
+ ? static_cast<int>( ( m_parent->m_ch1Volume.value() * m_ch1EnvValue ) / 15.0 )
+ : static_cast<int>( m_parent->m_ch1Volume.value() );
+ ch1 = m_ch1Counter > m_wlen1 * ch1DutyCycle
+ ? 0
+ : ch1Level;
+ }
+ else ch1 = ch1Level = 0;
+
+ // update sweep
+ m_ch1SweepCounter++;
+ if( m_ch1SweepCounter >= ch1SweepRate )
+ {
+ m_ch1SweepCounter = 0;
+ if( m_parent->m_ch1SweepEnabled.value() && m_wlen1 <= m_maxWlen && m_wlen1 >= MIN_WLEN )
+ {
+ // check if the sweep goes up or down
+ if( ch1Sweep > 0 )
+ {
+ m_wlen1 += m_wlen1 >> qAbs( ch1Sweep );
+ }
+ if( ch1Sweep < 0 )
+ {
+ m_wlen1 -= m_wlen1 >> qAbs( ch1Sweep );
+ m_wlen1--; // additional minus 1 for ch1 only
+ }
+ }
+ }
+
+ // update framecounters
+ m_ch1Counter++;
+ m_ch1Counter = m_wlen1 ? m_ch1Counter % m_wlen1 : 0;
+
+ m_ch1EnvCounter++;
+ if( m_ch1EnvCounter >= ch1EnvLen )
+ {
+ m_ch1EnvCounter = 0;
+ m_ch1EnvValue--;
+ if( m_ch1EnvValue < 0 )
+ {
+ m_ch1EnvValue = ch1EnvLoop ? 15 : 0;
+ }
+ }
+
+
+ ////////////////////////////////
+ // //
+ // channel 2 //
+ // //
+ ////////////////////////////////
+
+ // render pulse wave
+ if( m_wlen2 <= m_maxWlen && m_wlen2 >= MIN_WLEN && ch2Enabled )
+ {
+ ch2Level = m_parent->m_ch2EnvEnabled.value()
+ ? static_cast<int>( ( m_parent->m_ch2Volume.value() * m_ch2EnvValue ) / 15.0 )
+ : static_cast<int>( m_parent->m_ch2Volume.value() );
+ ch2 = m_ch2Counter > m_wlen2 * ch2DutyCycle
+ ? 0
+ : ch2Level;
+ }
+ else ch2 = ch2Level = 0;
+
+ // update sweep
+ m_ch2SweepCounter++;
+ if( m_ch2SweepCounter >= ch2SweepRate )
+ {
+ m_ch2SweepCounter = 0;
+ if( m_parent->m_ch2SweepEnabled.value() && m_wlen2 <= m_maxWlen && m_wlen2 >= MIN_WLEN )
+ {
+ // check if the sweep goes up or down
+ if( ch2Sweep > 0 )
+ {
+ m_wlen2 += m_wlen2 >> qAbs( ch2Sweep );
+ }
+ if( ch2Sweep < 0 )
+ {
+ m_wlen2 -= m_wlen2 >> qAbs( ch2Sweep );
+ }
+ }
+ }
+
+ // update framecounters
+ m_ch2Counter++;
+ m_ch2Counter = m_wlen2 ? m_ch2Counter % m_wlen2 : 0;
+
+ m_ch2EnvCounter++;
+ if( m_ch2EnvCounter >= ch2EnvLen )
+ {
+ m_ch2EnvCounter = 0;
+ m_ch2EnvValue--;
+ if( m_ch2EnvValue < 0 )
+ {
+ m_ch2EnvValue = ch2EnvLoop
+ ? 15
+ : 0;
+ }
+ }
+
+
+ ////////////////////////////////
+ // //
+ // channel 3 //
+ // //
+ ////////////////////////////////
+
+ // make sure we don't overflow
+ m_ch3Counter = m_wlen3 ? m_ch3Counter % m_wlen3 : 0;
+
+ // render triangle wave
+ if( m_wlen3 <= m_maxWlen && ch3Enabled )
+ {
+ ch3Level = static_cast<int>( m_parent->m_ch3Volume.value() );
+ ch3 = m_wlen3 ? TRIANGLE_WAVETABLE[ ( m_ch3Counter * 32 ) / m_wlen3 ] : 0;
+ ch3 = ( ch3 * ch3Level ) / 15;
+ }
+ else ch3 = ch3Level = 0;
+
+ m_ch3Counter++;
+
+
+ ////////////////////////////////
+ // //
+ // channel 4 //
+ // //
+ ////////////////////////////////
+
+ // render pseudo noise
+ if( ch4Enabled )
+ {
+ ch4Level = m_parent->m_ch4EnvEnabled.value()
+ ? ( static_cast<int>( m_parent->m_ch4Volume.value() ) * m_ch4EnvValue ) / 15
+ : static_cast<int>( m_parent->m_ch4Volume.value() );
+ ch4 = LFSR()
+ ? ch4Level
+ : 0;
+ }
+ else ch4 = ch4Level = 0;
+
+ // update framecounters
+ m_ch4Counter++;
+ if( m_ch4Counter >= m_wlen4 )
+ {
+ m_ch4Counter = 0;
+ updateLFSR( m_parent->m_ch4NoiseMode.value() );
+ }
+ m_ch4EnvCounter++;
+ if( m_ch4EnvCounter >= ch4EnvLen )
+ {
+ m_ch4EnvCounter = 0;
+ m_ch4EnvValue--;
+ if( m_ch4EnvValue < 0 )
+ {
+ m_ch4EnvValue = ch4EnvLoop
+ ? 15
+ : 0;
+ }
+ }
+
+ m_ch4SweepCounter++;
+ if( m_ch4SweepCounter >= ch4SweepRate )
+ {
+ m_ch4SweepCounter = 0;
+ if( ch4Sweep != 0 )
+ {
+ int freqN = nearestNoiseFreq( static_cast<float>( m_samplerate ) / m_wlen4 );
+ freqN = qBound( 0, freqN + ch4Sweep, 15 );
+ m_wlen4 = wavelength( NOISE_FREQS[ freqN ] );
+
+ if( m_wlen4 == 0 && ch4Sweep == 1 ) // a workaround for sweep getting stuck on 0 wavelength
+ {
+ while( m_wlen4 == 0 )
+ {
+ m_wlen4 = wavelength( NOISE_FREQS[ ++freqN ] );
+ }
+ }
+ }
+ }
+
+
+ ////////////////////////////////
+ // //
+ // final stage - mixing //
+ // //
+ ////////////////////////////////
+
+ float pin1 = static_cast<float>( ch1 + ch2 );
+ // add dithering noise
+ pin1 *= 1.0 + ( Oscillator::noiseSample( 0.0f ) * DITHER_AMP );
+ pin1 = pin1 / 30.0f;
+
+ pin1 = signedPow( pin1, NES_DIST );
+
+ pin1 = pin1 * 2.0f - 1.0f;
+
+ // simple first order iir filter, to simulate the frequency response falloff in nes analog audio output
+ pin1 = linearInterpolate( pin1, m_12Last, m_nsf );
+ m_12Last = pin1;
+
+ // compensate DC offset
+ pin1 += 1.0f - signedPow( static_cast<float>( ch1Level + ch2Level ) / 30.0f, NES_DIST );
+
+ pin1 *= NES_MIXING_12;
+
+
+ float pin2 = static_cast<float>( ch3 + ch4 );
+ // add dithering noise
+ pin2 *= 1.0 + ( Oscillator::noiseSample( 0.0f ) * DITHER_AMP );
+ pin2 = pin2 / 30.0f;
+
+ pin2 = signedPow( pin2, NES_DIST );
+
+ pin2 = pin2 * 2.0f - 1.0f;
+
+ // simple first order iir filter, to simulate the frequency response falloff in nes analog audio output
+ pin2 = linearInterpolate( pin2, m_34Last, m_nsf );
+ m_34Last = pin2;
+
+ // compensate DC offset
+ pin2 += 1.0f - signedPow( static_cast<float>( ch3Level + ch4Level ) / 30.0f, NES_DIST );
+
+ pin2 *= NES_MIXING_34;
+
+ const float mixdown = ( pin1 + pin2 ) * NES_MIXING_ALL * m_parent->m_masterVol.value();
+
+ buf[f][0] = mixdown;
+ buf[f][1] = mixdown;
+
+ } // end framebuffer loop
+
+}
+
+
+void NesObject::updateVibrato( float * freq )
+{
+ float vibratoAmt = floorf( m_parent->m_vibrato.value() ) / 15.0f;
+ m_vibratoPhase++;
+ m_vibratoPhase %= 32;
+ float vibratoRatio = 1.0f + ( static_cast<float>( TRIANGLE_WAVETABLE[ m_vibratoPhase ] ) * 0.02f * vibratoAmt );
+ *freq *= vibratoRatio;
+}
+
+
+void NesObject::updatePitch()
+{
+ float freq = m_nph->frequency();
+ // if vibrato is active, update vibrato
+ if( m_parent->m_vibrato.value() > 0 )
+ {
+ updateVibrato( &freq );
+ }
+ // check if frequency has changed, if so, update wavelengths of ch1-3
+ if( freq != m_lastNoteFreq )
+ {
+ m_wlen1 = wavelength( freq * m_parent->m_freq1 );
+ m_wlen2 = wavelength( freq * m_parent->m_freq2 );
+ m_wlen3 = wavelength( freq * m_parent->m_freq3 );
+ }
+ // noise channel can use either note freq or preset freqs
+ if( m_parent->m_ch4NoiseFreqMode.value() && freq != m_lastNoteFreq )
+ {
+ float f = freq * 2.0f;
+ if( m_parent->m_ch4NoiseQuantize.value() ) // note freq can be quantized to the preset freqs
+ {
+ f = NOISE_FREQS[ nearestNoiseFreq( f ) ];
+ }
+ m_wlen4 = wavelength( f );
+ }
+ if( ! m_parent->m_ch4NoiseFreqMode.value() && m_lastNoiseFreq != m_parent->m_ch4NoiseFreq.value() )
+ {
+ m_wlen4 = wavelength( NOISE_FREQS[ 15 - static_cast<int>( m_parent->m_ch4NoiseFreq.value() ) ] );
+ m_lastNoiseFreq = m_parent->m_ch4NoiseFreq.value();
+ }
+
+ m_lastNoteFreq = freq;
+}
+
+
+
+
+NesInstrument::NesInstrument( InstrumentTrack * instrumentTrack ) :
+ Instrument( instrumentTrack, &nes_plugin_descriptor ),
+ m_ch1Enabled( true, this ),
+ m_ch1Crs( 0.f, -24.f, 24.f, 1.f, this, tr( "Channel 1 Coarse detune" ) ),
+ m_ch1Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 1 Volume" ) ),
+
+ m_ch1EnvEnabled( false, this ),
+ m_ch1EnvLooped( false, this ),
+ m_ch1EnvLen( 0.f, 0.f, 15.f, 1.f, this, tr( "Channel 1 Envelope length" ) ),
+
+ m_ch1DutyCycle( 0, 0, 3, this, tr( "Channel 1 Duty cycle" ) ),
+
+ m_ch1SweepEnabled( false, this ),
+ m_ch1SweepAmt( 0.f, -7.f, 7.f, 1.f, this, tr( "Channel 1 Sweep amount" ) ),
+ m_ch1SweepRate( 0.f, 0.f, 7.f, 1.f, this, tr( "Channel 1 Sweep rate" ) ),
+
+ m_ch2Enabled( true, this ),
+ m_ch2Crs( 0.f, -24.f, 24.f, 1.f, this, tr( "Channel 2 Coarse detune" ) ),
+ m_ch2Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 2 Volume" ) ),
+
+ m_ch2EnvEnabled( false, this ),
+ m_ch2EnvLooped( false, this ),
+ m_ch2EnvLen( 0.f, 0.f, 15.f, 1.f, this, tr( "Channel 2 Envelope length" ) ),
+
+ m_ch2DutyCycle( 2, 0, 3, this, tr( "Channel 2 Duty cycle" ) ),
+
+ m_ch2SweepEnabled( false, this ),
+ m_ch2SweepAmt( 0.f, -7.f, 7.f, 1.f, this, tr( "Channel 2 Sweep amount" ) ),
+ m_ch2SweepRate( 0.f, 0.f, 7.f, 1.f, this, tr( "Channel 2 Sweep rate" ) ),
+
+ //channel 3
+ m_ch3Enabled( true, this ),
+ m_ch3Crs( 0.f, -24.f, 24.f, 1.f, this, tr( "Channel 3 Coarse detune" ) ),
+ m_ch3Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 3 Volume" ) ),
+
+ //channel 4
+ m_ch4Enabled( true, this ),
+ m_ch4Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 4 Volume" ) ),
+
+ m_ch4EnvEnabled( false, this ),
+ m_ch4EnvLooped( false, this ),
+ m_ch4EnvLen( 0.f, 0.f, 15.f, 1.f, this, tr( "Channel 4 Envelope length" ) ),
+
+ m_ch4NoiseMode( false, this ),
+ m_ch4NoiseFreqMode( false, this ),
+ m_ch4NoiseFreq( 0.f, 0.f, 15.f, 1.f, this, tr( "Channel 4 Noise frequency" ) ),
+
+ m_ch4Sweep( 0.f, -7.f, 7.f, 1.f, this, tr( "Channel 4 Noise frequency sweep" ) ),
+ m_ch4NoiseQuantize( true, this ),
+
+ //master
+ m_masterVol( 1.0f, 0.0f, 2.0f, 0.01f, this, tr( "Master volume" ) ),
+ m_vibrato( 0.0f, 0.0f, 15.0f, 1.0f, this, tr( "Vibrato" ) )
+{
+ connect( &m_ch1Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq1() ) );
+ connect( &m_ch2Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq2() ) );
+ connect( &m_ch3Crs, SIGNAL( dataChanged() ), this, SLOT( updateFreq3() ) );
+
+ updateFreq1();
+ updateFreq2();
+ updateFreq3();
+}
+
+
+
+NesInstrument::~NesInstrument()
+{
+}
+
+
+void NesInstrument::playNote( NotePlayHandle * n, sampleFrame * workingBuffer )
+{
+ if ( n->totalFramesPlayed() == 0 || n->m_pluginData == NULL )
+ {
+ NesObject * nes = new NesObject( this, engine::mixer()->processingSampleRate(), n );
+ n->m_pluginData = nes;
+ }
+
+ const fpp_t frames = n->framesLeftForCurrentPeriod();
+
+ NesObject * nes = static_cast<NesObject *>( n->m_pluginData );
+
+ nes->renderOutput( workingBuffer, frames );
+
+ applyRelease( workingBuffer, n );
+
+ instrumentTrack()->processAudioBuffer( workingBuffer, frames, n );
+}
+
+
+void NesInstrument::deleteNotePluginData( NotePlayHandle * n )
+{
+ delete static_cast<NesObject *>( n->m_pluginData );
+}
+
+
+void NesInstrument::saveSettings( QDomDocument & doc, QDomElement & element )
+{
+ m_ch1Enabled.saveSettings( doc, element, "on1" );
+ m_ch1Crs.saveSettings( doc, element, "crs1" );
+ m_ch1Volume.saveSettings( doc, element, "vol1" );
+
+ m_ch1EnvEnabled.saveSettings( doc, element, "envon1" );
+ m_ch1EnvLooped.saveSettings( doc, element, "envloop1" );
+ m_ch1EnvLen.saveSettings( doc, element, "envlen1" );
+
+ m_ch1DutyCycle.saveSettings( doc, element, "dc1" );
+
+ m_ch1SweepEnabled.saveSettings( doc, element, "sweep1" );
+ m_ch1SweepAmt.saveSettings( doc, element, "swamt1" );
+ m_ch1SweepRate.saveSettings( doc, element, "swrate1" );
+
+ // channel 2
+ m_ch2Enabled.saveSettings( doc, element, "on2" );
+ m_ch2Crs.saveSettings( doc, element, "crs2" );
+ m_ch2Volume.saveSettings( doc, element, "vol2" );
+
+ m_ch2EnvEnabled.saveSettings( doc, element, "envon2" );
+ m_ch2EnvLooped.saveSettings( doc, element, "envloop2" );
+ m_ch2EnvLen.saveSettings( doc, element, "envlen2" );
+
+ m_ch2DutyCycle.saveSettings( doc, element, "dc2" );
+
+ m_ch2SweepEnabled.saveSettings( doc, element, "sweep2" );
+ m_ch2SweepAmt.saveSettings( doc, element, "swamt2" );
+ m_ch2SweepRate.saveSettings( doc, element, "swrate2" );
+
+ //channel 3
+ m_ch3Enabled.saveSettings( doc, element, "on3" );
+ m_ch3Crs.saveSettings( doc, element, "crs3" );
+ m_ch3Volume.saveSettings( doc, element, "vol3" );
+
+ //channel 4
+ m_ch4Enabled.saveSettings( doc, element, "on4" );
+ m_ch4Volume.saveSettings( doc, element, "vol4" );
+
+ m_ch4EnvEnabled.saveSettings( doc, element, "envon4" );
+ m_ch4EnvLooped.saveSettings( doc, element, "envloop4" );
+ m_ch4EnvLen.saveSettings( doc, element, "envlen4" );
+
+ m_ch4NoiseMode.saveSettings( doc, element, "nmode4" );
+ m_ch4NoiseFreqMode.saveSettings( doc, element, "nfrqmode4" );
+ m_ch4NoiseFreq.saveSettings( doc, element, "nfreq4" );
+
+ m_ch4NoiseQuantize.saveSettings( doc, element, "nq4" );
+ m_ch4Sweep.saveSettings( doc, element, "nswp4" );
+
+ //master
+ m_masterVol.saveSettings( doc, element, "vol" );
+ m_vibrato.saveSettings( doc, element, "vibr" );
+}
+
+
+void NesInstrument::loadSettings( const QDomElement & element )
+{
+ m_ch1Enabled.loadSettings( element, "on1" );
+ m_ch1Crs.loadSettings( element, "crs1" );
+ m_ch1Volume.loadSettings( element, "vol1" );
+
+ m_ch1EnvEnabled.loadSettings( element, "envon1" );
+ m_ch1EnvLooped.loadSettings( element, "envloop1" );
+ m_ch1EnvLen.loadSettings( element, "envlen1" );
+
+ m_ch1DutyCycle.loadSettings( element, "dc1" );
+
+ m_ch1SweepEnabled.loadSettings( element, "sweep1" );
+ m_ch1SweepAmt.loadSettings( element, "swamt1" );
+ m_ch1SweepRate.loadSettings( element, "swrate1" );
+
+ // channel 2
+ m_ch2Enabled.loadSettings( element, "on2" );
+ m_ch2Crs.loadSettings( element, "crs2" );
+ m_ch2Volume.loadSettings( element, "vol2" );
+
+ m_ch2EnvEnabled.loadSettings( element, "envon2" );
+ m_ch2EnvLooped.loadSettings( element, "envloop2" );
+ m_ch2EnvLen.loadSettings( element, "envlen2" );
+
+ m_ch2DutyCycle.loadSettings( element, "dc2" );
+
+ m_ch2SweepEnabled.loadSettings( element, "sweep2" );
+ m_ch2SweepAmt.loadSettings( element, "swamt2" );
+ m_ch2SweepRate.loadSettings( element, "swrate2" );
+
+ //channel 3
+ m_ch3Enabled.loadSettings( element, "on3" );
+ m_ch3Crs.loadSettings( element, "crs3" );
+ m_ch3Volume.loadSettings( element, "vol3" );
+
+ //channel 4
+ m_ch4Enabled.loadSettings( element, "on4" );
+ m_ch4Volume.loadSettings( element, "vol4" );
+
+ m_ch4EnvEnabled.loadSettings( element, "envon4" );
+ m_ch4EnvLooped.loadSettings( element, "envloop4" );
+ m_ch4EnvLen.loadSettings( element, "envlen4" );
+
+ m_ch4NoiseMode.loadSettings( element, "nmode4" );
+ m_ch4NoiseFreqMode.loadSettings( element, "nfrqmode4" );
+ m_ch4NoiseFreq.loadSettings( element, "nfreq4" );
+
+ m_ch4NoiseQuantize.loadSettings( element, "nq4" );
+ m_ch4Sweep.loadSettings( element, "nswp4" );
+
+ //master
+ m_masterVol.loadSettings( element, "vol" );
+ m_vibrato.loadSettings( element, "vibr" );
+}
+
+
+QString NesInstrument::nodeName() const
+{
+ return( nes_plugin_descriptor.name );
+}
+
+
+PluginView * NesInstrument::instantiateView( QWidget * parent )
+{
+ return( new NesInstrumentView( this, parent ) );
+}
+
+
+
+void NesInstrument::updateFreq1()
+{
+ m_freq1 = powf( 2, m_ch1Crs.value() / 12.0f );
+}
+
+
+void NesInstrument::updateFreq2()
+{
+ m_freq2 = powf( 2, m_ch2Crs.value() / 12.0f );
+}
+
+
+void NesInstrument::updateFreq3()
+{
+ m_freq3 = powf( 2, m_ch3Crs.value() / 12.0f );
+}
+
+
+
+
+QPixmap * NesInstrumentView::s_artwork = NULL;
+
+
+NesInstrumentView::NesInstrumentView( Instrument * instrument, QWidget * parent ) :
+ InstrumentView( instrument, parent )
+{
+ setAutoFillBackground( true );
+ QPalette pal;
+
+ if( s_artwork == NULL )
+ {
+ s_artwork = new QPixmap( PLUGIN_NAME::getIconPixmap( "artwork" ) );
+ }
+
+ pal.setBrush( backgroundRole(), *s_artwork );
+ setPalette( pal );
+
+ const int KNOB_Y1 = 24;
+ const int KNOB_Y2 = 81;
+ const int KNOB_Y3 = 138;
+ const int KNOB_Y4 = 195;
+
+ const int KNOB_X1 = 12;
+ const int KNOB_X2 = 46;
+ const int KNOB_X3 = 84;
+ const int KNOB_X4 = 117;
+ const int KNOB_X5 = 151;
+ const int KNOB_X6 = 172;
+ const int KNOB_X7 = 206;
+
+ // channel 1
+
+ makeknob( m_ch1VolumeKnob, KNOB_X1, KNOB_Y1, "Volume", "", "" )
+ makeknob( m_ch1CrsKnob, KNOB_X2, KNOB_Y1, "Coarse detune", "", "" )
+ makeknob( m_ch1EnvLenKnob, KNOB_X3, KNOB_Y1, "Envelope length", "", "" )
+
+ makenesled( m_ch1EnabledBtn, KNOB_X1, KNOB_Y1 - 12, "Enable channel 1" )
+ makenesled( m_ch1EnvEnabledBtn, KNOB_X3, KNOB_Y1 - 12, "Enable envelope 1" )
+ makenesled( m_ch1EnvLoopedBtn, 129, KNOB_Y1 - 12, "Enable envelope 1 loop" )
+
+ makenesled( m_ch1SweepEnabledBtn, KNOB_X6, KNOB_Y1 - 12, "Enable sweep 1" )
+ makeknob( m_ch1SweepAmtKnob, KNOB_X6, KNOB_Y1, "Sweep amount", "", "" )
+ makeknob( m_ch1SweepRateKnob, KNOB_X7, KNOB_Y1, "Sweep rate", "", "" )
+
+ int dcx = 117;
+ makedcled( ch1_dc1, dcx, 42, "12.5% Duty cycle", "nesdc1_on" )
+ dcx += 13;
+ makedcled( ch1_dc2, dcx, 42, "25% Duty cycle", "nesdc2_on" )
+ dcx += 13;
+ makedcled( ch1_dc3, dcx, 42, "50% Duty cycle", "nesdc3_on" )
+ dcx += 13;
+ makedcled( ch1_dc4, dcx, 42, "75% Duty cycle", "nesdc4_on" )
+
+ m_ch1DutyCycleGrp = new automatableButtonGroup( this );
+ m_ch1DutyCycleGrp -> addButton( ch1_dc1 );
+ m_ch1DutyCycleGrp -> addButton( ch1_dc2 );
+ m_ch1DutyCycleGrp -> addButton( ch1_dc3 );
+ m_ch1DutyCycleGrp -> addButton( ch1_dc4 );
+
+
+
+ // channel 2
+
+ makeknob( m_ch2VolumeKnob, KNOB_X1, KNOB_Y2, "Volume", "", "" )
+ makeknob( m_ch2CrsKnob, KNOB_X2, KNOB_Y2, "Coarse detune", "", "" )
+ makeknob( m_ch2EnvLenKnob, KNOB_X3, KNOB_Y2, "Envelope length", "", "" )
+
+ makenesled( m_ch2EnabledBtn, KNOB_X1, KNOB_Y2 - 12, "Enable channel 2" )
+ makenesled( m_ch2EnvEnabledBtn, KNOB_X3, KNOB_Y2 - 12, "Enable envelope 2" )
+ makenesled( m_ch2EnvLoopedBtn, 129, KNOB_Y2 - 12, "Enable envelope 2 loop" )
+
+ makenesled( m_ch2SweepEnabledBtn, KNOB_X6, KNOB_Y2 - 12, "Enable sweep 2" )
+ makeknob( m_ch2SweepAmtKnob, KNOB_X6, KNOB_Y2, "Sweep amount", "", "" )
+ makeknob( m_ch2SweepRateKnob, KNOB_X7, KNOB_Y2, "Sweep rate", "", "" )
+
+ dcx = 117;
+ makedcled( ch2_dc1, dcx, 99, "12.5% Duty cycle", "nesdc1_on" )
+ dcx += 13;
+ makedcled( ch2_dc2, dcx, 99, "25% Duty cycle", "nesdc2_on" )
+ dcx += 13;
+ makedcled( ch2_dc3, dcx, 99, "50% Duty cycle", "nesdc3_on" )
+ dcx += 13;
+ makedcled( ch2_dc4, dcx, 99, "75% Duty cycle", "nesdc4_on" )
+
+ m_ch2DutyCycleGrp = new automatableButtonGroup( this );
+ m_ch2DutyCycleGrp -> addButton( ch2_dc1 );
+ m_ch2DutyCycleGrp -> addButton( ch2_dc2 );
+ m_ch2DutyCycleGrp -> addButton( ch2_dc3 );
+ m_ch2DutyCycleGrp -> addButton( ch2_dc4 );
+
+
+
+ //channel 3
+ makenesled( m_ch3EnabledBtn, KNOB_X1, KNOB_Y3 - 12, "Enable channel 3" )
+ makeknob( m_ch3VolumeKnob, KNOB_X1, KNOB_Y3, "Volume", "", "" )
+ makeknob( m_ch3CrsKnob, KNOB_X2, KNOB_Y3, "Coarse detune", "", "" )
+
+
+ //channel 4
+ makeknob( m_ch4VolumeKnob, KNOB_X1, KNOB_Y4, "Volume", "", "" )
+ makeknob( m_ch4NoiseFreqKnob, KNOB_X2, KNOB_Y4, "Noise Frequency", "", "" )
+ makeknob( m_ch4EnvLenKnob, KNOB_X3, KNOB_Y4, "Envelope length", "", "" )
+ makeknob( m_ch4SweepKnob, KNOB_X4, KNOB_Y4, "Frequency sweep", "", "" )
+
+ makenesled( m_ch4EnabledBtn, KNOB_X1, KNOB_Y4 - 12, "Enable channel 4" )
+ makenesled( m_ch4EnvEnabledBtn, KNOB_X3, KNOB_Y4 - 12, "Enable envelope 4" )
+ makenesled( m_ch4EnvLoopedBtn, 129, KNOB_Y4 - 12, "Enable envelope 4 loop" )
+
+ makenesled( m_ch4NoiseQuantizeBtn, 162, KNOB_Y4 - 12, "Quantize noise frequency when using note frequency" )
+
+ makenesled( m_ch4NoiseFreqModeBtn, 148, 203, "Use note frequency for noise" )
+ makenesled( m_ch4NoiseModeBtn, 148, 224, "Noise mode" )
+
+
+ //master
+ makeknob( m_masterVolKnob, KNOB_X4, KNOB_Y3, "Master Volume", "", "" )
+ makeknob( m_vibratoKnob, KNOB_X5, KNOB_Y3, "Vibrato", "", "" )
+
+}
+
+
+
+NesInstrumentView::~NesInstrumentView()
+{
+}
+
+
+void NesInstrumentView::modelChanged()
+{
+ NesInstrument * nes = castModel<NesInstrument>();
+
+ m_ch1EnabledBtn->setModel( &nes->m_ch1Enabled );
+ m_ch1CrsKnob->setModel( &nes->m_ch1Crs );
+ m_ch1VolumeKnob->setModel( &nes->m_ch1Volume );
+
+ m_ch1EnvEnabledBtn->setModel( &nes->m_ch1EnvEnabled );
+ m_ch1EnvLoopedBtn->setModel( &nes->m_ch1EnvLooped );
+ m_ch1EnvLenKnob->setModel( &nes->m_ch1EnvLen );
+
+ m_ch1DutyCycleGrp->setModel( &nes->m_ch1DutyCycle );
+
+ m_ch1SweepEnabledBtn->setModel( &nes->m_ch1SweepEnabled );
+ m_ch1SweepAmtKnob->setModel( &nes->m_ch1SweepAmt );
+ m_ch1SweepRateKnob->setModel( &nes->m_ch1SweepRate );
+
+ // channel 2
+ m_ch2EnabledBtn->setModel( &nes->m_ch2Enabled );
+ m_ch2CrsKnob->setModel( &nes->m_ch2Crs );
+ m_ch2VolumeKnob->setModel( &nes->m_ch2Volume );
+
+ m_ch2EnvEnabledBtn->setModel( &nes->m_ch2EnvEnabled );
+ m_ch2EnvLoopedBtn->setModel( &nes->m_ch2EnvLooped );
+ m_ch2EnvLenKnob->setModel( &nes->m_ch2EnvLen );
+
+ m_ch2DutyCycleGrp->setModel( &nes->m_ch2DutyCycle );
+
+ m_ch2SweepEnabledBtn->setModel( &nes->m_ch2SweepEnabled );
+ m_ch2SweepAmtKnob->setModel( &nes->m_ch2SweepAmt );
+ m_ch2SweepRateKnob->setModel( &nes->m_ch2SweepRate );
+
+ //channel 3
+ m_ch3EnabledBtn->setModel( &nes->m_ch3Enabled );
+ m_ch3CrsKnob->setModel( &nes->m_ch3Crs );
+ m_ch3VolumeKnob->setModel( &nes->m_ch3Volume );
+
+ //channel 4
+ m_ch4EnabledBtn->setModel( &nes->m_ch4Enabled );
+ m_ch4VolumeKnob->setModel( &nes->m_ch4Volume );
+
+ m_ch4EnvEnabledBtn->setModel( &nes->m_ch4EnvEnabled );
+ m_ch4EnvLoopedBtn->setModel( &nes->m_ch4EnvLooped );
+ m_ch4EnvLenKnob->setModel( &nes->m_ch4EnvLen );
+
+ m_ch4NoiseModeBtn->setModel( &nes->m_ch4NoiseMode );
+ m_ch4NoiseFreqModeBtn->setModel( &nes->m_ch4NoiseFreqMode );
+ m_ch4NoiseFreqKnob->setModel( &nes->m_ch4NoiseFreq );
+
+ m_ch4SweepKnob->setModel( &nes->m_ch4Sweep );
+ m_ch4NoiseQuantizeBtn->setModel( &nes->m_ch4NoiseQuantize );
+
+ //master
+ m_masterVolKnob->setModel( &nes->m_masterVol );
+ m_vibratoKnob->setModel( &nes->m_vibrato );
+}
+
+
+extern "C"
+{
+
+// necessary for getting instance out of shared lib
+Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data )
+{
+ return( new NesInstrument( static_cast<InstrumentTrack *>( _data ) ) );
+}
+
+
+}
+
+
+#include "moc_Nes.cxx"
diff --git a/plugins/nes/Nes.h b/plugins/nes/Nes.h
new file mode 100644
index 0000000..da32164
--- /dev/null
+++ b/plugins/nes/Nes.h
@@ -0,0 +1,361 @@
+/* Nes.h - A NES instrument plugin for LMMS
+ *
+ * Copyright (c) 2014 Vesa Kivimäki
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef NES_H
+#define NES_H
+
+#include "Instrument.h"
+#include "InstrumentView.h"
+#include "AutomatableModel.h"
+#include "automatable_button.h"
+#include "TempoSyncKnob.h"
+#include "NotePlayHandle.h"
+#include "pixmap_button.h"
+
+
+#define makeknob( name, x, y, hint, unit, oname ) \
+ name = new knob( knobStyled, this ); \
+ name ->move( x, y ); \
+ name ->setHintText( tr( hint ) + " ", unit ); \
+ name ->setObjectName( oname ); \
+ name ->setFixedSize( 29, 29 );
+
+#define makenesled( name, x, y, ttip ) \
+ name = new pixmapButton( this, NULL ); \
+ name -> setCheckable( true ); \
+ name -> move( x, y ); \
+ name -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "nesled_on" ) ); \
+ name -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "nesled_off" ) ); \
+ toolTip::add( name, tr( ttip ) );
+
+#define makedcled( name, x, y, ttip, active ) \
+ pixmapButton * name = new pixmapButton( this, NULL ); \
+ name -> move( x, y ); \
+ name -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( active ) ); \
+ name -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "nesdc_off" ) ); \
+ toolTip::add( name, tr( ttip ) );
+
+const float NES_SIMPLE_FILTER = 1.0 / 20.0; // simulate nes analog audio output
+const float NFB = 895000.0f;
+const float NOISE_FREQS[16] =
+ { NFB/5, NFB/9, NFB/17, NFB/33, NFB/65, NFB/97, NFB/129, NFB/161, NFB/193, NFB/255, NFB/381, NFB/509, NFB/763, NFB/1017, NFB/2035, NFB/4069 };
+const uint16_t LFSR_INIT = 1;
+const float DUTY_CYCLE[4] = { 0.125, 0.25, 0.5, 0.75 };
+const float DITHER_AMP = 1.0 / 60.0;
+const float MIN_FREQ = 10.0;
+const int TRIANGLE_WAVETABLE[32] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
+
+const float NES_DIST = 0.9f; // simulate the slight nonlinear distortion in nes audio output
+
+const float NES_MIXING_12 = 1.0 / 20.0;
+const float NES_MIXING_34 = 1.0 / 12.0;
+const float NES_MIXING_ALL = 1.0 / ( NES_MIXING_12 + NES_MIXING_34 ); // constants to simulate the hardwired mixing values for nes channels
+
+const int MIN_WLEN = 4;
+
+
+class NesInstrument;
+
+class NesObject
+{
+public:
+ NesObject( NesInstrument * nes, const sample_rate_t samplerate, NotePlayHandle * nph );
+ virtual ~NesObject();
+
+ void renderOutput( sampleFrame * buf, fpp_t frames );
+ void updateVibrato( float * freq );
+ void updatePitch();
+
+ void updateLFSR( bool mode )
+ {
+ uint16_t LFSRx;
+ if( mode )
+ {
+ LFSRx = m_LFSR & ( 1 << 8 ); // get bit 13
+ LFSRx <<= 6; // shit to left so it overlaps with bit 14
+ }
+ else
+ {
+ LFSRx = m_LFSR & ( 1 << 13 ); // get bit 13
+ LFSRx <<= 1; // shit to left so it overlaps with bit 14
+ }
+ m_LFSR ^= LFSRx; // xor bit 14 with bit 8/13 depending on mode
+ m_LFSR <<= 1; // shift bit 14 to bit 15
+
+ // cycle bit 14 to 0
+ if( m_LFSR & ( 1 << 15 ) ) // if bit 15 is set
+ {
+ m_LFSR++; // set bit 0 - we know it to be 0 because of the left shift so we can just inc here
+ }
+ }
+
+ inline bool LFSR() // returns true if bit 14 is set
+ {
+ if( m_LFSR & ( 1 << 14 ) )
+ {
+ return true;
+ }
+ return false;
+ }
+
+ inline int wavelength( float freq )
+ {
+ return static_cast<int>( m_samplerate / freq );
+ }
+
+ inline float signedPow( float f, float e )
+ {
+ return f < 0
+ ? powf( qAbs( f ), e ) * -1.0f
+ : powf( f, e );
+ }
+
+ inline int nearestNoiseFreq( float f )
+ {
+ int n = 15;
+ for( int i = 15; i >= 0; i-- )
+ {
+ if( f >= NOISE_FREQS[ i ] )
+ {
+ n = i;
+ }
+ }
+ return n;
+ }
+
+private:
+ NesInstrument * m_parent;
+ const sample_rate_t m_samplerate;
+ NotePlayHandle * m_nph;
+
+ int m_pitchUpdateCounter;
+ int m_pitchUpdateFreq;
+
+ int m_ch1Counter;
+ int m_ch2Counter;
+ int m_ch3Counter;
+ int m_ch4Counter;
+
+ int m_ch1EnvCounter;
+ int m_ch2EnvCounter;
+ int m_ch4EnvCounter;
+
+ int m_ch1EnvValue;
+ int m_ch2EnvValue;
+ int m_ch4EnvValue;
+
+ int m_ch1SweepCounter;
+ int m_ch2SweepCounter;
+ int m_ch4SweepCounter;
+
+ uint16_t m_LFSR;
+
+ float m_12Last;
+ float m_34Last;
+
+ float m_lastNoteFreq;
+ float m_lastNoiseFreq;
+
+ int m_maxWlen;
+
+ float m_nsf;
+
+// wavelengths
+ int m_wlen1;
+ int m_wlen2;
+ int m_wlen3;
+ int m_wlen4;
+
+// vibrato
+ int m_vibratoPhase;
+};
+
+
+class NesInstrument : public Instrument
+{
+ Q_OBJECT
+public:
+ NesInstrument( InstrumentTrack * instrumentTrack );
+ virtual ~NesInstrument();
+
+ virtual void playNote( NotePlayHandle * n,
+ sampleFrame * workingBuffer );
+ virtual void deleteNotePluginData( NotePlayHandle * n );
+
+
+ virtual void saveSettings( QDomDocument & doc,
+ QDomElement & element );
+ virtual void loadSettings( const QDomElement & element );
+
+ virtual QString nodeName() const;
+
+ virtual f_cnt_t desiredReleaseFrames() const
+ {
+ return( 8 );
+ }
+
+ virtual PluginView * instantiateView( QWidget * parent );
+
+public slots:
+ void updateFreq1();
+ void updateFreq2();
+ void updateFreq3();
+
+protected:
+ //freq helpers
+ float m_freq1;
+ float m_freq2;
+ float m_freq3;
+
+private:
+ // channel 1
+ BoolModel m_ch1Enabled;
+ FloatModel m_ch1Crs;
+ FloatModel m_ch1Volume;
+
+ BoolModel m_ch1EnvEnabled;
+ BoolModel m_ch1EnvLooped;
+ FloatModel m_ch1EnvLen;
+
+ IntModel m_ch1DutyCycle;
+
+ BoolModel m_ch1SweepEnabled;
+ FloatModel m_ch1SweepAmt;
+ FloatModel m_ch1SweepRate;
+
+ // channel 2
+ BoolModel m_ch2Enabled;
+ FloatModel m_ch2Crs;
+ FloatModel m_ch2Volume;
+
+ BoolModel m_ch2EnvEnabled;
+ BoolModel m_ch2EnvLooped;
+ FloatModel m_ch2EnvLen;
+
+ IntModel m_ch2DutyCycle;
+
+ BoolModel m_ch2SweepEnabled;
+ FloatModel m_ch2SweepAmt;
+ FloatModel m_ch2SweepRate;
+
+ //channel 3
+ BoolModel m_ch3Enabled;
+ FloatModel m_ch3Crs;
+ FloatModel m_ch3Volume;
+
+ //channel 4
+ BoolModel m_ch4Enabled;
+ FloatModel m_ch4Volume;
+
+ BoolModel m_ch4EnvEnabled;
+ BoolModel m_ch4EnvLooped;
+ FloatModel m_ch4EnvLen;
+
+ BoolModel m_ch4NoiseMode;
+ BoolModel m_ch4NoiseFreqMode;
+ FloatModel m_ch4NoiseFreq;
+
+ FloatModel m_ch4Sweep;
+ BoolModel m_ch4NoiseQuantize;
+
+ //master
+ FloatModel m_masterVol;
+ FloatModel m_vibrato;
+
+
+ friend class NesObject;
+ friend class NesInstrumentView;
+};
+
+
+class NesInstrumentView : public InstrumentView
+{
+ Q_OBJECT
+public:
+ NesInstrumentView( Instrument * instrument,
+ QWidget * parent );
+ virtual ~NesInstrumentView();
+
+private:
+ virtual void modelChanged();
+
+ // channel 1
+ pixmapButton * m_ch1EnabledBtn;
+ knob * m_ch1CrsKnob;
+ knob * m_ch1VolumeKnob;
+
+ pixmapButton * m_ch1EnvEnabledBtn;
+ pixmapButton * m_ch1EnvLoopedBtn;
+ knob * m_ch1EnvLenKnob;
+
+ automatableButtonGroup * m_ch1DutyCycleGrp;
+
+ pixmapButton * m_ch1SweepEnabledBtn;
+ knob * m_ch1SweepAmtKnob;
+ knob * m_ch1SweepRateKnob;
+
+ // channel 2
+ pixmapButton * m_ch2EnabledBtn;
+ knob * m_ch2CrsKnob;
+ knob * m_ch2VolumeKnob;
+
+ pixmapButton * m_ch2EnvEnabledBtn;
+ pixmapButton * m_ch2EnvLoopedBtn;
+ knob * m_ch2EnvLenKnob;
+
+ automatableButtonGroup * m_ch2DutyCycleGrp;
+
+ pixmapButton * m_ch2SweepEnabledBtn;
+ knob * m_ch2SweepAmtKnob;
+ knob * m_ch2SweepRateKnob;
+
+ //channel 3
+ pixmapButton * m_ch3EnabledBtn;
+ knob * m_ch3CrsKnob;
+ knob * m_ch3VolumeKnob;
+
+ //channel 4
+ pixmapButton * m_ch4EnabledBtn;
+ knob * m_ch4VolumeKnob;
+
+ pixmapButton * m_ch4EnvEnabledBtn;
+ pixmapButton * m_ch4EnvLoopedBtn;
+ knob * m_ch4EnvLenKnob;
+
+ pixmapButton * m_ch4NoiseModeBtn;
+ pixmapButton * m_ch4NoiseFreqModeBtn;
+ knob * m_ch4NoiseFreqKnob;
+
+ knob * m_ch4SweepKnob;
+ pixmapButton * m_ch4NoiseQuantizeBtn;
+
+ //master
+ knob * m_masterVolKnob;
+ knob * m_vibratoKnob;
+
+ static QPixmap * s_artwork;
+};
+
+#endif
diff --git a/plugins/nes/artwork.png b/plugins/nes/artwork.png
new file mode 100644
index 0000000..e78ca6f
Binary files /dev/null and b/plugins/nes/artwork.png differ
diff --git a/plugins/nes/logo.png b/plugins/nes/logo.png
new file mode 100644
index 0000000..44211ca
Binary files /dev/null and b/plugins/nes/logo.png differ
diff --git a/plugins/nes/nesdc1_on.png b/plugins/nes/nesdc1_on.png
new file mode 100644
index 0000000..9edc330
Binary files /dev/null and b/plugins/nes/nesdc1_on.png differ
diff --git a/plugins/nes/nesdc2_on.png b/plugins/nes/nesdc2_on.png
new file mode 100644
index 0000000..6dbb38c
Binary files /dev/null and b/plugins/nes/nesdc2_on.png differ
diff --git a/plugins/nes/nesdc3_on.png b/plugins/nes/nesdc3_on.png
new file mode 100644
index 0000000..f8eccbe
Binary files /dev/null and b/plugins/nes/nesdc3_on.png differ
diff --git a/plugins/nes/nesdc4_on.png b/plugins/nes/nesdc4_on.png
new file mode 100644
index 0000000..8f75901
Binary files /dev/null and b/plugins/nes/nesdc4_on.png differ
diff --git a/plugins/nes/nesdc_off.png b/plugins/nes/nesdc_off.png
new file mode 100644
index 0000000..7da254d
Binary files /dev/null and b/plugins/nes/nesdc_off.png differ
diff --git a/plugins/nes/nesled_off.png b/plugins/nes/nesled_off.png
new file mode 100644
index 0000000..2fe4d0b
Binary files /dev/null and b/plugins/nes/nesled_off.png differ
diff --git a/plugins/nes/nesled_on.png b/plugins/nes/nesled_on.png
new file mode 100644
index 0000000..34f83a2
Binary files /dev/null and b/plugins/nes/nesled_on.png differ
diff --git a/plugins/opl2/logo.png.orig b/plugins/opl2/logo.png.orig
deleted file mode 100644
index a5b8256..0000000
Binary files a/plugins/opl2/logo.png.orig and /dev/null differ
diff --git a/plugins/opl2/moc_opl2instrument.cxx_parameters b/plugins/opl2/moc_opl2instrument.cxx_parameters
deleted file mode 100644
index 278ab7d..0000000
--- a/plugins/opl2/moc_opl2instrument.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/opl2
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=OPL2
--o
-/home/lukas/src/lmms/plugins/opl2/moc_opl2instrument.cxx
-/home/lukas/src/lmms/plugins/opl2/opl2instrument.h
diff --git a/plugins/opl2/opl2instrument.cpp b/plugins/opl2/opl2instrument.cpp
index 4704f01..88166ab 100644
--- a/plugins/opl2/opl2instrument.cpp
+++ b/plugins/opl2/opl2instrument.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Raine M. Ekman <raine/at/iki/fi>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -283,7 +283,7 @@ int opl2instrument::pushVoice(int v) {
return i;
}
-bool opl2instrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time )
+bool opl2instrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset )
{
emulatorMutex.lock();
int key, vel, voice, tmp_pb;
@@ -497,7 +497,7 @@ void opl2instrument::loadPatch(unsigned char inst[14]) {
void opl2instrument::tuneEqual(int center, float Hz) {
float tmp;
for(int n=0; n<128; ++n) {
- tmp = Hz*pow( 2, ( n - center ) / 12.0 + pitchbend / 1200.0 );
+ tmp = Hz*pow( 2.0, ( n - center ) * ( 1.0 / 12.0 ) + pitchbend * ( 1.0 / 1200.0 ) );
fnums[n] = Hz2fnum( tmp );
}
}
@@ -505,7 +505,7 @@ void opl2instrument::tuneEqual(int center, float Hz) {
// Find suitable F number in lowest possible block
int opl2instrument::Hz2fnum(float Hz) {
for(int block=0; block<8; ++block) {
- unsigned int fnum = Hz * pow(2, 20-block) / 49716;
+ unsigned int fnum = Hz * pow( 2.0, 20.0 - (double)block ) * ( 1.0 / 49716.0 );
if(fnum<1023) {
return fnum + (block << 10);
}
diff --git a/plugins/opl2/opl2instrument.h b/plugins/opl2/opl2instrument.h
index e953578..c837f1e 100644
--- a/plugins/opl2/opl2instrument.h
+++ b/plugins/opl2/opl2instrument.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2013 Raine M. Ekman <raine/at/iki/fi>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -53,7 +53,7 @@ public:
return IsSingleStreamed | IsMidiBased;
}
- virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time );
+ virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset = 0 );
virtual void play( sampleFrame * _working_buffer );
void saveSettings( QDomDocument & _doc, QDomElement & _this );
diff --git a/plugins/organic/artwork.png b/plugins/organic/artwork.png
index 07c6df1..472e9c2 100644
Binary files a/plugins/organic/artwork.png and b/plugins/organic/artwork.png differ
diff --git a/plugins/organic/logo.png b/plugins/organic/logo.png
index 65478f7..887865d 100644
Binary files a/plugins/organic/logo.png and b/plugins/organic/logo.png differ
diff --git a/plugins/organic/moc_organic.cxx_parameters b/plugins/organic/moc_organic.cxx_parameters
deleted file mode 100644
index 359f050..0000000
--- a/plugins/organic/moc_organic.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/organic
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=organic
--o
-/home/lukas/src/lmms/plugins/organic/moc_organic.cxx
-/home/lukas/src/lmms/plugins/organic/organic.h
diff --git a/plugins/organic/organic.cpp b/plugins/organic/organic.cpp
index a67f4a0..453d706 100644
--- a/plugins/organic/organic.cpp
+++ b/plugins/organic/organic.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Andreas Brandmaier <andy/at/brandmaier/dot/de>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -42,6 +42,8 @@
#include "embed.cpp"
+
+
extern "C"
{
@@ -62,7 +64,7 @@ Plugin::Descriptor PLUGIN_EXPORT organic_plugin_descriptor =
}
QPixmap * organicInstrumentView::s_artwork = NULL;
-
+float * organicInstrument::s_harmonics = NULL;
/***********************************************************************
*
@@ -75,7 +77,7 @@ QPixmap * organicInstrumentView::s_artwork = NULL;
organicInstrument::organicInstrument( InstrumentTrack * _instrument_track ) :
Instrument( _instrument_track, &organic_plugin_descriptor ),
- m_modulationAlgo( Oscillator::SignalMix ),
+ m_modulationAlgo( Oscillator::SignalMix, Oscillator::SignalMix, Oscillator::SignalMix),
m_fx1Model( 0.0f, 0.0f, 0.99f, 0.01f , this, tr( "Distortion" ) ),
m_volModel( 100.0f, 0.0f, 200.0f, 1.0f, this, tr( "Volume" ) )
{
@@ -90,6 +92,8 @@ organicInstrument::organicInstrument( InstrumentTrack * _instrument_track ) :
// Connect events
connect( &m_osc[i]->m_oscModel, SIGNAL( dataChanged() ),
m_osc[i], SLOT ( oscButtonChanged() ) );
+ connect( &m_osc[i]->m_harmModel, SIGNAL( dataChanged() ),
+ m_osc[i], SLOT( updateDetuning() ) );
connect( &m_osc[i]->m_volModel, SIGNAL( dataChanged() ),
m_osc[i], SLOT( updateVolume() ) );
connect( &m_osc[i]->m_panModel, SIGNAL( dataChanged() ),
@@ -101,14 +105,37 @@ organicInstrument::organicInstrument( InstrumentTrack * _instrument_track ) :
}
- m_osc[0]->m_harmonic = log2f( 0.5f ); // one octave below
+/* m_osc[0]->m_harmonic = log2f( 0.5f ); // one octave below
m_osc[1]->m_harmonic = log2f( 0.75f ); // a fifth below
m_osc[2]->m_harmonic = log2f( 1.0f ); // base freq
m_osc[3]->m_harmonic = log2f( 2.0f ); // first overtone
m_osc[4]->m_harmonic = log2f( 3.0f ); // second overtone
m_osc[5]->m_harmonic = log2f( 4.0f ); // .
m_osc[6]->m_harmonic = log2f( 5.0f ); // .
- m_osc[7]->m_harmonic = log2f( 6.0f ); // .
+ m_osc[7]->m_harmonic = log2f( 6.0f ); // .*/
+
+ if( s_harmonics == NULL )
+ {
+ s_harmonics = new float[ NUM_HARMONICS ];
+ s_harmonics[0] = log2f( 0.5f );
+ s_harmonics[1] = log2f( 0.75f );
+ s_harmonics[2] = log2f( 1.0f );
+ s_harmonics[3] = log2f( 2.0f );
+ s_harmonics[4] = log2f( 3.0f );
+ s_harmonics[5] = log2f( 4.0f );
+ s_harmonics[6] = log2f( 5.0f );
+ s_harmonics[7] = log2f( 6.0f );
+ s_harmonics[8] = log2f( 7.0f );
+ s_harmonics[9] = log2f( 8.0f );
+ s_harmonics[10] = log2f( 9.0f );
+ s_harmonics[11] = log2f( 10.0f );
+ s_harmonics[12] = log2f( 11.0f );
+ s_harmonics[13] = log2f( 12.0f );
+ s_harmonics[14] = log2f( 13.0f );
+ s_harmonics[15] = log2f( 14.0f );
+ s_harmonics[16] = log2f( 15.0f );
+ s_harmonics[17] = log2f( 16.0f );
+ }
for (int i=0; i < m_numOscillators; i++) {
m_osc[i]->updateVolume();
@@ -117,8 +144,7 @@ organicInstrument::organicInstrument( InstrumentTrack * _instrument_track ) :
connect( engine::mixer(), SIGNAL( sampleRateChanged() ),
- this, SLOT( updateAllDetuning() ) );
-
+ this, SLOT( updateAllDetuning() ) );
}
@@ -143,9 +169,9 @@ void organicInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this )
QString is = QString::number( i );
m_osc[i]->m_volModel.saveSettings( _doc, _this, "vol" + is );
m_osc[i]->m_panModel.saveSettings( _doc, _this, "pan" + is );
- _this.setAttribute( "harmonic" + is, QString::number(
- powf( 2.0f, m_osc[i]->m_harmonic ) ) );
- m_osc[i]->m_detuneModel.saveSettings( _doc, _this, "detune"
+ m_osc[i]->m_harmModel.saveSettings( _doc, _this, "newharmonic" + is );
+
+ m_osc[i]->m_detuneModel.saveSettings( _doc, _this, "newdetune"
+ is );
m_osc[i]->m_oscModel.saveSettings( _doc, _this, "wavetype"
+ is );
@@ -164,9 +190,25 @@ void organicInstrument::loadSettings( const QDomElement & _this )
{
QString is = QString::number( i );
m_osc[i]->m_volModel.loadSettings( _this, "vol" + is );
- m_osc[i]->m_detuneModel.loadSettings( _this, "detune" + is );
+ if( _this.hasAttribute( "detune" + is ) )
+ {
+ m_osc[i]->m_detuneModel.setValue( _this.attribute( "detune" ).toInt() * 12 );
+ }
+ else
+ {
+ m_osc[i]->m_detuneModel.loadSettings( _this, "newdetune" + is );
+ }
m_osc[i]->m_panModel.loadSettings( _this, "pan" + is );
m_osc[i]->m_oscModel.loadSettings( _this, "wavetype" + is );
+
+ if( _this.hasAttribute( "newharmonic" + is ) )
+ {
+ m_osc[i]->m_harmModel.loadSettings( _this, "newharmonic" + is );
+ }
+ else
+ {
+ m_osc[i]->m_harmModel.setValue( static_cast<float>( i ) );
+ }
}
m_volModel.loadSettings( _this, "vol" );
@@ -375,7 +417,8 @@ public:
organicInstrumentView::organicInstrumentView( Instrument * _instrument,
QWidget * _parent ) :
- InstrumentView( _instrument, _parent )
+ InstrumentView( _instrument, _parent ),
+ m_oscKnobs( NULL )
{
organicInstrument * oi = castModel<organicInstrument>();
@@ -391,6 +434,7 @@ organicInstrumentView::organicInstrumentView( Instrument * _instrument,
m_fx1Knob->setFixedSize( 37, 47 );
m_fx1Knob->setHintText( tr( "Distortion:" ) + " ", QString() );
m_fx1Knob->setObjectName( "fx1Knob" );
+ m_fx1Knob->setWhatsThis( tr( "The distortion knob adds distortion to the output of the instrument. " ) );
// setup volume-knob
m_volKnob = new organicKnob( this );
@@ -399,6 +443,8 @@ organicInstrumentView::organicInstrumentView( Instrument * _instrument,
m_volKnob->setFixedSize( 37, 47 );
m_volKnob->setHintText( tr( "Volume:" ) + " ", "%" );
m_volKnob->setObjectName( "volKnob" );
+ m_volKnob->setWhatsThis( tr( "The volume knob controls the volume of the output of the instrument. "
+ "It is cumulative with the instrument window's volume control. " ) );
// randomise
m_randBtn = new pixmapButton( this, tr( "Randomise" ) );
@@ -407,7 +453,9 @@ organicInstrumentView::organicInstrumentView( Instrument * _instrument,
"randomise_pressed" ) );
m_randBtn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap(
"randomise" ) );
-
+ m_randBtn->setWhatsThis( tr( "The randomize button randomizes all knobs except the harmonics,"
+ "main volume and distortion knobs. ") );
+
connect( m_randBtn, SIGNAL ( clicked() ),
oi, SLOT( randomiseSettings() ) );
@@ -430,26 +478,40 @@ organicInstrumentView::~organicInstrumentView()
void organicInstrumentView::modelChanged()
{
organicInstrument * oi = castModel<organicInstrument>();
- const float y=91.3;
- const float rowHeight = 26.52f;
- const float x=53.4;
- const float colWidth = 23.829f; // 54.4 77.2 220.2
+
+ const float y=91.0f;
+ const float rowHeight = 26.0f;
+ const float x=53.0f;
+ const float colWidth = 24.0f;
m_numOscillators = oi->m_numOscillators;
m_fx1Knob->setModel( &oi->m_fx1Model );
m_volKnob->setModel( &oi->m_volModel );
- // TODO: Delete existing oscKnobs if they exist
+ if( m_oscKnobs != NULL )
+ {
+ delete[] m_oscKnobs;
+ }
m_oscKnobs = new OscillatorKnobs[ m_numOscillators ];
// Create knobs, now that we know how many to make
for( int i = 0; i < m_numOscillators; ++i )
{
+ // setup harmonic knob
+ knob * harmKnob = new organicKnob( this );
+ harmKnob->move( x + i * colWidth, y - rowHeight );
+ harmKnob->setObjectName( "harmKnob" );
+ connect( &oi->m_osc[i]->m_harmModel, SIGNAL( dataChanged() ),
+ this, SLOT( updateKnobHint() ) );
+
// setup waveform-knob
knob * oscKnob = new organicKnob( this );
oscKnob->move( x + i * colWidth, y );
+ connect( &oi->m_osc[i]->m_oscModel, SIGNAL( dataChanged() ),
+ this, SLOT( updateKnobHint() ) );
+
oscKnob->setHintText( tr( "Osc %1 waveform:" ).arg( i + 1 ) + " ", QString() );
// setup volume-knob
@@ -466,25 +528,38 @@ void organicInstrumentView::modelChanged()
panKnob->setHintText( tr("Osc %1 panning:").arg(
i + 1 ) + " ", "" );
- // setup knob for left fine-detuning
+ // setup knob for fine-detuning
knob * detuneKnob = new organicKnob( this );
detuneKnob->move( x + i * colWidth, y + rowHeight*3 );
- detuneKnob->setHintText( tr( "Osc %1 fine detuning "
- "left:" ).arg( i + 1 )
+ detuneKnob->setHintText( tr( "Osc %1 stereo detuning" ).arg( i + 1 )
+ " ", " " +
tr( "cents" ) );
- m_oscKnobs[i] = OscillatorKnobs( volKnob, oscKnob, panKnob, detuneKnob );
+ m_oscKnobs[i] = OscillatorKnobs( harmKnob, volKnob, oscKnob, panKnob, detuneKnob );
// Attach to models
- m_oscKnobs[i].m_volKnob->setModel(
- &oi->m_osc[i]->m_volModel );
- m_oscKnobs[i].m_oscKnob->setModel(
- &oi->m_osc[i]->m_oscModel );
- m_oscKnobs[i].m_panKnob->setModel(
- &oi->m_osc[i]->m_panModel );
- m_oscKnobs[i].m_detuneKnob->setModel(
- &oi->m_osc[i]->m_detuneModel );
+ m_oscKnobs[i].m_harmKnob->setModel( &oi->m_osc[i]->m_harmModel );
+ m_oscKnobs[i].m_volKnob->setModel( &oi->m_osc[i]->m_volModel );
+ m_oscKnobs[i].m_oscKnob->setModel( &oi->m_osc[i]->m_oscModel );
+ m_oscKnobs[i].m_panKnob->setModel( &oi->m_osc[i]->m_panModel );
+ m_oscKnobs[i].m_detuneKnob->setModel( &oi->m_osc[i]->m_detuneModel );
+ }
+ updateKnobHint();
+}
+
+
+void organicInstrumentView::updateKnobHint()
+{
+ organicInstrument * oi = castModel<organicInstrument>();
+ for( int i = 0; i < m_numOscillators; ++i )
+ {
+ const float harm = oi->m_osc[i]->m_harmModel.value();
+ const float wave = oi->m_osc[i]->m_oscModel.value();
+
+ m_oscKnobs[i].m_harmKnob->setHintText( tr( "Osc %1 harmonic:" ) + " ", " (" +
+ HARMONIC_NAMES[ static_cast<int>( harm ) ] + ")" );
+ m_oscKnobs[i].m_oscKnob->setHintText( tr( "Osc %1 waveform:" ) + " ", " (" +
+ WAVEFORM_NAMES[ static_cast<int>( wave ) ] + ")" );
}
}
@@ -496,11 +571,13 @@ OscillatorObject::OscillatorObject( Model * _parent, int _index ) :
m_waveShape( Oscillator::SineWave, 0, Oscillator::NumWaveShapes-1, this ),
m_oscModel( 0.0f, 0.0f, 5.0f, 1.0f,
this, tr( "Osc %1 waveform" ).arg( _index + 1 ) ),
+ m_harmModel( static_cast<float>( _index ), 0.0f, 17.0f, 1.0f,
+ this, tr( "Osc %1 harmonic" ).arg( _index + 1 ) ),
m_volModel( 100.0f, 0.0f, 100.0f, 1.0f,
this, tr( "Osc %1 volume" ).arg( _index + 1 ) ),
m_panModel( DefaultPanning, PanningLeft, PanningRight, 1.0f,
this, tr( "Osc %1 panning" ).arg( _index + 1 ) ),
- m_detuneModel( 0.0f, -100.0f, 100.0f, 1.0f,
+ m_detuneModel( 0.0f, -1200.0f, 1200.0f, 1.0f,
this, tr( "Osc %1 fine detuning left" ).arg( _index + 1 ) )
{
}
@@ -548,11 +625,11 @@ void OscillatorObject::updateVolume()
void OscillatorObject::updateDetuning()
{
- m_detuningLeft = powf( 2.0f, m_harmonic
- + (float)m_detuneModel.value() / 100.0f ) /
+ m_detuningLeft = powf( 2.0f, organicInstrument::s_harmonics[ static_cast<int>( m_harmModel.value() ) ]
+ + (float)m_detuneModel.value() * CENT ) /
engine::mixer()->processingSampleRate();
- m_detuningRight = powf( 2.0f, m_harmonic
- - (float)m_detuneModel.value() / 100.0f ) /
+ m_detuningRight = powf( 2.0f, organicInstrument::s_harmonics[ static_cast<int>( m_harmModel.value() ) ]
+ - (float)m_detuneModel.value() * CENT ) /
engine::mixer()->processingSampleRate();
}
diff --git a/plugins/organic/organic.h b/plugins/organic/organic.h
index 926dce1..92bd79c 100644
--- a/plugins/organic/organic.h
+++ b/plugins/organic/organic.h
@@ -2,8 +2,8 @@
* organic.h - additive synthesizer for organ-like sounds
*
* Copyright (c) 2006-2008 Andreas Brandmaier <andy/at/brandmaier/dot/de>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,10 @@
*/
-#ifndef _ORGANIC_H
-#define _ORGANIC_H
+#ifndef ORGANIC_H
+#define ORGANIC_H
+
+#include <QString>
#include "Instrument.h"
#include "InstrumentView.h"
@@ -37,6 +39,38 @@ class knob;
class NotePlayHandle;
class pixmapButton;
+const int NUM_HARMONICS = 18;
+const QString HARMONIC_NAMES[NUM_HARMONICS] = {
+ "Octave below",
+ "Fifth below",
+ "Fundamental",
+ "2nd harmonic",
+ "3rd harmonic",
+ "4th harmonic",
+ "5th harmonic",
+ "6th harmonic",
+ "7th harmonic",
+ "8th harmonic",
+ "9th harmonic",
+ "10th harmonic",
+ "11th harmonic",
+ "12th harmonic",
+ "13th harmonic",
+ "14th harmonic",
+ "15th harmonic",
+ "16th harmonic"
+ };
+
+const QString WAVEFORM_NAMES[6] = {
+ "Sine wave",
+ "Triangle wave",
+ "Saw wave",
+ "Square wave",
+ "Moog saw wave",
+ "Exponential wave"
+ };
+
+const float CENT = 1.0f / 1200.0f;
class OscillatorObject : public Model
{
@@ -45,11 +79,11 @@ private:
int m_numOscillators;
IntModel m_waveShape;
FloatModel m_oscModel;
+ FloatModel m_harmModel;
FloatModel m_volModel;
FloatModel m_panModel;
FloatModel m_detuneModel;
- float m_harmonic;
float m_volumeLeft;
float m_volumeRight;
// normalized detuning -> x/sampleRate
@@ -90,9 +124,10 @@ public:
virtual void loadSettings( const QDomElement & _this );
virtual QString nodeName() const;
-
+
int intRand( int min, int max );
+ static float * s_harmonics;
public slots:
void randomiseSettings();
@@ -101,17 +136,17 @@ public slots:
private:
float inline waveshape(float in, float amount);
-
+
// fast atan, fast rather than accurate
inline float fastatan( float x )
{
return (x / (1.0 + 0.28 * (x * x)));
}
-
+
int m_numOscillators;
-
+
OscillatorObject ** m_osc;
-
+
struct oscPtr
{
Oscillator * oscLeft;
@@ -125,6 +160,7 @@ private:
virtual PluginView * instantiateView( QWidget * _parent );
+
private slots:
void updateAllDetuning();
@@ -144,10 +180,13 @@ private:
struct OscillatorKnobs
{
- OscillatorKnobs( knob * v,
+ OscillatorKnobs(
+ knob * h,
+ knob * v,
knob * o,
knob * p,
knob * dt ) :
+ m_harmKnob( h ),
m_volKnob( v ),
m_oscKnob( o ),
m_panKnob( p ),
@@ -157,7 +196,8 @@ private:
OscillatorKnobs()
{
}
-
+
+ knob * m_harmKnob;
knob * m_volKnob;
knob * m_oscKnob;
knob * m_panKnob;
@@ -171,8 +211,11 @@ private:
pixmapButton * m_randBtn;
int m_numOscillators;
-
+
static QPixmap * s_artwork;
+
+protected slots:
+ void updateKnobHint();
};
diff --git a/plugins/organic/randomise.png b/plugins/organic/randomise.png
index 85518ee..155d2f1 100644
Binary files a/plugins/organic/randomise.png and b/plugins/organic/randomise.png differ
diff --git a/plugins/organic/randomise_pressed.png b/plugins/organic/randomise_pressed.png
index 00d866d..20486f4 100644
Binary files a/plugins/organic/randomise_pressed.png and b/plugins/organic/randomise_pressed.png differ
diff --git a/plugins/papu/moc_papu_instrument.cxx_parameters b/plugins/papu/moc_papu_instrument.cxx_parameters
deleted file mode 100644
index 6b44146..0000000
--- a/plugins/papu/moc_papu_instrument.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/papu
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=papu
--o
-/home/lukas/src/lmms/plugins/papu/moc_papu_instrument.cxx
-/home/lukas/src/lmms/plugins/papu/papu_instrument.h
diff --git a/plugins/papu/papu_instrument.cpp b/plugins/papu/papu_instrument.cpp
index 510042a..8a3d387 100644
--- a/plugins/papu/papu_instrument.cpp
+++ b/plugins/papu/papu_instrument.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Attila Herman <attila589/at/gmail.com>
* Csaba Hruska <csaba.hruska/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -29,6 +29,7 @@
#include "Basic_Gb_Apu.h"
#include "papu_instrument.h"
+#include "base64.h"
#include "InstrumentTrack.h"
#include "knob.h"
#include "NotePlayHandle.h"
@@ -359,11 +360,11 @@ void papuInstrument::playNote( NotePlayHandle * _n,
//PRNG Frequency = (1048576 Hz / (ratio + 1)) / 2 ^ (shiftclockfreq + 1)
char sopt=0;
char ropt=1;
- float fopt = 524288.0 / ( ropt * pow( 2, sopt+1 ) );
+ float fopt = 524288.0 / ( ropt * pow( 2.0, sopt + 1.0 ) );
float f;
for ( char s=0; s<16; s++ )
for ( char r=0; r<8; r++ ) {
- f = 524288.0 / ( r * pow( 2, s+1 ) );
+ f = 524288.0 / ( r * pow( 2.0, s + 1.0 ) );
if( fabs( freq-fopt ) > fabs( freq-f ) ) {
fopt = f;
ropt = r;
diff --git a/plugins/papu/papu_instrument.h b/plugins/papu/papu_instrument.h
index dad2d0b..48f8140 100644
--- a/plugins/papu/papu_instrument.h
+++ b/plugins/papu/papu_instrument.h
@@ -4,7 +4,7 @@
* Copyright (c) 2008 <Attila Herman <attila589/at/gmail.com>
* Csaba Hruska <csaba.hruska/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/patman/moc_patman.cxx_parameters b/plugins/patman/moc_patman.cxx_parameters
deleted file mode 100644
index 55d1130..0000000
--- a/plugins/patman/moc_patman.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/patman
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=patman
--o
-/home/lukas/src/lmms/plugins/patman/moc_patman.cxx
-/home/lukas/src/lmms/plugins/patman/patman.h
diff --git a/plugins/patman/patman.cpp b/plugins/patman/patman.cpp
index f5f2433..446b02b 100644
--- a/plugins/patman/patman.cpp
+++ b/plugins/patman/patman.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2007-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -149,7 +149,7 @@ void patmanInstrument::playNote( NotePlayHandle * _n,
hdata->sample->frequency();
if( hdata->sample->play( _working_buffer, hdata->state, frames,
- play_freq, m_loopedModel.value() ) )
+ play_freq, m_loopedModel.value() ? SampleBuffer::LoopOn : SampleBuffer::LoopOff ) )
{
applyRelease( _working_buffer, _n );
instrumentTrack()->processAudioBuffer( _working_buffer,
diff --git a/plugins/patman/patman.h b/plugins/patman/patman.h
index e974040..3568663 100644
--- a/plugins/patman/patman.h
+++ b/plugins/patman/patman.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/peak_controller_effect/CMakeLists.txt b/plugins/peak_controller_effect/CMakeLists.txt
index 6904d07..b55fde5 100644
--- a/plugins/peak_controller_effect/CMakeLists.txt
+++ b/plugins/peak_controller_effect/CMakeLists.txt
@@ -1,3 +1,3 @@
INCLUDE(BuildPlugin)
-BUILD_PLUGIN(peakcontrollereffect peak_controller_effect.cpp peak_controller_effect_controls.cpp peak_controller_effect_control_dialog.cpp peak_controller_effect.h peak_controller_effect_controls.h peak_controller_effect_control_dialog.h MOCFILES peak_controller_effect_controls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(peakcontrollereffect peak_controller_effect.cpp peak_controller_effect_controls.cpp peak_controller_effect_control_dialog.cpp peak_controller_effect.h peak_controller_effect_controls.h peak_controller_effect_control_dialog.h MOCFILES peak_controller_effect_controls.h peak_controller_effect_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/peak_controller_effect/moc_peak_controller_effect_controls.cxx_parameters b/plugins/peak_controller_effect/moc_peak_controller_effect_controls.cxx_parameters
deleted file mode 100644
index e6c2a20..0000000
--- a/plugins/peak_controller_effect/moc_peak_controller_effect_controls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/peak_controller_effect
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=peakcontrollereffect
--o
-/home/lukas/src/lmms/plugins/peak_controller_effect/moc_peak_controller_effect_controls.cxx
-/home/lukas/src/lmms/plugins/peak_controller_effect/peak_controller_effect_controls.h
diff --git a/plugins/peak_controller_effect/peak_controller_effect.cpp b/plugins/peak_controller_effect/peak_controller_effect.cpp
index 0d82382..282b322 100644
--- a/plugins/peak_controller_effect/peak_controller_effect.cpp
+++ b/plugins/peak_controller_effect/peak_controller_effect.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/peak_controller_effect/peak_controller_effect.h b/plugins/peak_controller_effect/peak_controller_effect.h
index acbe58e..d661e2b 100644
--- a/plugins/peak_controller_effect/peak_controller_effect.h
+++ b/plugins/peak_controller_effect/peak_controller_effect.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp b/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp
index 596a17d..740b489 100644
--- a/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp
+++ b/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -99,3 +99,4 @@ PeakControllerEffectControlDialog::PeakControllerEffectControlDialog(
setLayout( tl );
}
+#include "moc_peak_controller_effect_control_dialog.cxx"
diff --git a/plugins/peak_controller_effect/peak_controller_effect_control_dialog.h b/plugins/peak_controller_effect/peak_controller_effect_control_dialog.h
index eca00ba..e9b4ba6 100644
--- a/plugins/peak_controller_effect/peak_controller_effect_control_dialog.h
+++ b/plugins/peak_controller_effect/peak_controller_effect_control_dialog.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,6 +35,7 @@ class ledCheckBox;
class PeakControllerEffectControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
PeakControllerEffectControlDialog(
PeakControllerEffectControls * _controls );
diff --git a/plugins/peak_controller_effect/peak_controller_effect_controls.cpp b/plugins/peak_controller_effect/peak_controller_effect_controls.cpp
index 836b72b..61e1350 100644
--- a/plugins/peak_controller_effect/peak_controller_effect_controls.cpp
+++ b/plugins/peak_controller_effect/peak_controller_effect_controls.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
* Copyright (c) 2009-2011 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/peak_controller_effect/peak_controller_effect_controls.h b/plugins/peak_controller_effect/peak_controller_effect_controls.h
index d42c6a9..6f9cca9 100644
--- a/plugins/peak_controller_effect/peak_controller_effect_controls.h
+++ b/plugins/peak_controller_effect/peak_controller_effect_controls.h
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/sf2_player/moc_patches_dialog.cxx_parameters b/plugins/sf2_player/moc_patches_dialog.cxx_parameters
deleted file mode 100644
index e54e57e..0000000
--- a/plugins/sf2_player/moc_patches_dialog.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/sf2_player
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=sf2player
--o
-/home/lukas/src/lmms/plugins/sf2_player/moc_patches_dialog.cxx
-/home/lukas/src/lmms/plugins/sf2_player/patches_dialog.h
diff --git a/plugins/sf2_player/moc_sf2_player.cxx_parameters b/plugins/sf2_player/moc_sf2_player.cxx_parameters
deleted file mode 100644
index 834b4b0..0000000
--- a/plugins/sf2_player/moc_sf2_player.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/sf2_player
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=sf2player
--o
-/home/lukas/src/lmms/plugins/sf2_player/moc_sf2_player.cxx
-/home/lukas/src/lmms/plugins/sf2_player/sf2_player.h
diff --git a/plugins/sf2_player/patches_dialog.cpp b/plugins/sf2_player/patches_dialog.cpp
index ac259c5..37de24e 100644
--- a/plugins/sf2_player/patches_dialog.cpp
+++ b/plugins/sf2_player/patches_dialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/sf2_player/patches_dialog.h b/plugins/sf2_player/patches_dialog.h
index deaf491..f8d9686 100644
--- a/plugins/sf2_player/patches_dialog.h
+++ b/plugins/sf2_player/patches_dialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/sf2_player/sf2_player.cpp b/plugins/sf2_player/sf2_player.cpp
index 9e7c6c0..ff168ed 100644
--- a/plugins/sf2_player/sf2_player.cpp
+++ b/plugins/sf2_player/sf2_player.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
* Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -109,7 +109,7 @@ sf2Instrument::sf2Instrument( InstrumentTrack * _instrument_track ) :
m_settings = new_fluid_settings();
- fluid_settings_setint( m_settings, (char *) "audio.period-size", engine::mixer()->framesPerPeriod() );
+ //fluid_settings_setint( m_settings, (char *) "audio.period-size", engine::mixer()->framesPerPeriod() );
// This is just our starting instance of synth. It is recreated
// everytime we load a new soundfont.
@@ -352,9 +352,9 @@ void sf2Instrument::openFile( const QString & _sf2File, bool updateTrackName )
delete[] sf2Ascii;
- if( updateTrackName )
+ if( updateTrackName || instrumentTrack()->displayName() == displayName() )
{
- instrumentTrack()->setName( QFileInfo( _sf2File ).baseName() );
+ instrumentTrack()->setName( QFileInfo( _sf2File ).baseName() );
}
}
@@ -519,6 +519,8 @@ void sf2Instrument::updateSampleRate()
}
updateReverb();
updateChorus();
+ updateReverbOn();
+ updateChorusOn();
}
@@ -626,8 +628,6 @@ void sf2Instrument::playNote( NotePlayHandle * _n, sampleFrame * )
-// Could we get iph-based instruments support sample-exact models by using a
-// frame-length of 1 while rendering?
void sf2Instrument::play( sampleFrame * _working_buffer )
{
const fpp_t frames = engine::mixer()->framesPerPeriod();
diff --git a/plugins/sf2_player/sf2_player.h b/plugins/sf2_player/sf2_player.h
index 06fc90f..5763338 100644
--- a/plugins/sf2_player/sf2_player.h
+++ b/plugins/sf2_player/sf2_player.h
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
* Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -79,7 +79,7 @@ public:
virtual Flags flags() const
{
- return IsSingleStreamed | IsMidiBased;
+ return IsSingleStreamed;
}
virtual PluginView * instantiateView( QWidget * _parent );
diff --git a/plugins/sfxr/moc_sfxr.cxx_parameters b/plugins/sfxr/moc_sfxr.cxx_parameters
deleted file mode 100644
index dc912e5..0000000
--- a/plugins/sfxr/moc_sfxr.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/sfxr
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=sfxr
--o
-/home/lukas/src/lmms/plugins/sfxr/moc_sfxr.cxx
-/home/lukas/src/lmms/plugins/sfxr/sfxr.h
diff --git a/plugins/sfxr/sfxr.cpp b/plugins/sfxr/sfxr.cpp
index 5380983..7c2f35b 100644
--- a/plugins/sfxr/sfxr.cpp
+++ b/plugins/sfxr/sfxr.cpp
@@ -5,7 +5,7 @@
*
* Copyright (c) 2014 Wong Cho Ching
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/sfxr/sfxr.h b/plugins/sfxr/sfxr.h
index 535b13e..c2da90c 100644
--- a/plugins/sfxr/sfxr.h
+++ b/plugins/sfxr/sfxr.h
@@ -5,7 +5,7 @@
*
* Copyright (c) 2014 Wong Cho Ching
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/sid/moc_sid_instrument.cxx_parameters b/plugins/sid/moc_sid_instrument.cxx_parameters
deleted file mode 100644
index b205269..0000000
--- a/plugins/sid/moc_sid_instrument.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/sid
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=sid
--o
-/home/lukas/src/lmms/plugins/sid/moc_sid_instrument.cxx
-/home/lukas/src/lmms/plugins/sid/sid_instrument.h
diff --git a/plugins/sid/sid_instrument.cpp b/plugins/sid/sid_instrument.cpp
index 637982c..cda2b74 100644
--- a/plugins/sid/sid_instrument.cpp
+++ b/plugins/sid/sid_instrument.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Csaba Hruska <csaba.hruska/at/gmail.com>
* Attila Herman <attila589/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/sid/sid_instrument.h b/plugins/sid/sid_instrument.h
index d7c6f75..47b5369 100644
--- a/plugins/sid/sid_instrument.h
+++ b/plugins/sid/sid_instrument.h
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Csaba Hruska <csaba.hruska/at/gmail.com>
* Attila Herman <attila589/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stereo_enhancer/CMakeLists.txt b/plugins/stereo_enhancer/CMakeLists.txt
index fdd86db..c8e8c60 100644
--- a/plugins/stereo_enhancer/CMakeLists.txt
+++ b/plugins/stereo_enhancer/CMakeLists.txt
@@ -1,4 +1,4 @@
INCLUDE(BuildPlugin)
-BUILD_PLUGIN(stereoenhancer stereo_enhancer.cpp stereoenhancer_controls.cpp stereoenhancer_control_dialog.cpp stereo_enhancer.h stereoenhancer_controls.h stereoenhancer_control_dialog.h MOCFILES stereoenhancer_controls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(stereoenhancer stereo_enhancer.cpp stereoenhancer_controls.cpp stereoenhancer_control_dialog.cpp stereo_enhancer.h stereoenhancer_controls.h stereoenhancer_control_dialog.h MOCFILES stereoenhancer_controls.h stereoenhancer_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/stereo_enhancer/moc_stereoenhancer_controls.cxx_parameters b/plugins/stereo_enhancer/moc_stereoenhancer_controls.cxx_parameters
deleted file mode 100644
index f59ad93..0000000
--- a/plugins/stereo_enhancer/moc_stereoenhancer_controls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/stereo_enhancer
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=stereoenhancer
--o
-/home/lukas/src/lmms/plugins/stereo_enhancer/moc_stereoenhancer_controls.cxx
-/home/lukas/src/lmms/plugins/stereo_enhancer/stereoenhancer_controls.h
diff --git a/plugins/stereo_enhancer/stereo_enhancer.cpp b/plugins/stereo_enhancer/stereo_enhancer.cpp
index d12a8eb..ac4dd7d 100644
--- a/plugins/stereo_enhancer/stereo_enhancer.cpp
+++ b/plugins/stereo_enhancer/stereo_enhancer.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stereo_enhancer/stereo_enhancer.h b/plugins/stereo_enhancer/stereo_enhancer.h
index 59e23ad..41ba7d4 100644
--- a/plugins/stereo_enhancer/stereo_enhancer.h
+++ b/plugins/stereo_enhancer/stereo_enhancer.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stereo_enhancer/stereoenhancer_control_dialog.cpp b/plugins/stereo_enhancer/stereoenhancer_control_dialog.cpp
index 73603f3..1e18d8f 100644
--- a/plugins/stereo_enhancer/stereoenhancer_control_dialog.cpp
+++ b/plugins/stereo_enhancer/stereoenhancer_control_dialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2007 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -47,3 +47,4 @@ stereoEnhancerControlDialog::stereoEnhancerControlDialog(
this->setLayout(l);
}
+#include "moc_stereoenhancer_control_dialog.cxx"
diff --git a/plugins/stereo_enhancer/stereoenhancer_control_dialog.h b/plugins/stereo_enhancer/stereoenhancer_control_dialog.h
index bbe40e0..3a98771 100644
--- a/plugins/stereo_enhancer/stereoenhancer_control_dialog.h
+++ b/plugins/stereo_enhancer/stereoenhancer_control_dialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -32,6 +32,7 @@ class stereoEnhancerControls;
class stereoEnhancerControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
stereoEnhancerControlDialog( stereoEnhancerControls * _controls );
virtual ~stereoEnhancerControlDialog()
diff --git a/plugins/stereo_enhancer/stereoenhancer_controls.cpp b/plugins/stereo_enhancer/stereoenhancer_controls.cpp
index 4ea92c6..c1b9641 100644
--- a/plugins/stereo_enhancer/stereoenhancer_controls.cpp
+++ b/plugins/stereo_enhancer/stereoenhancer_controls.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stereo_enhancer/stereoenhancer_controls.h b/plugins/stereo_enhancer/stereoenhancer_controls.h
index ba13e35..6616bf3 100644
--- a/plugins/stereo_enhancer/stereoenhancer_controls.h
+++ b/plugins/stereo_enhancer/stereoenhancer_controls.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stereo_matrix/CMakeLists.txt b/plugins/stereo_matrix/CMakeLists.txt
index 176bd97..1c6471a 100644
--- a/plugins/stereo_matrix/CMakeLists.txt
+++ b/plugins/stereo_matrix/CMakeLists.txt
@@ -1,4 +1,4 @@
INCLUDE(BuildPlugin)
-BUILD_PLUGIN(stereomatrix stereo_matrix.cpp stereomatrix_controls.cpp stereomatrix_control_dialog.cpp stereo_matrix.h stereomatrix_controls.h stereomatrix_control_dialog.h MOCFILES stereomatrix_controls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(stereomatrix stereo_matrix.cpp stereomatrix_controls.cpp stereomatrix_control_dialog.cpp stereo_matrix.h stereomatrix_controls.h stereomatrix_control_dialog.h MOCFILES stereomatrix_controls.h stereomatrix_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/stereo_matrix/moc_stereomatrix_controls.cxx_parameters b/plugins/stereo_matrix/moc_stereomatrix_controls.cxx_parameters
deleted file mode 100644
index fd93570..0000000
--- a/plugins/stereo_matrix/moc_stereomatrix_controls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/stereo_matrix
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=stereomatrix
--o
-/home/lukas/src/lmms/plugins/stereo_matrix/moc_stereomatrix_controls.cxx
-/home/lukas/src/lmms/plugins/stereo_matrix/stereomatrix_controls.h
diff --git a/plugins/stereo_matrix/stereo_matrix.cpp b/plugins/stereo_matrix/stereo_matrix.cpp
index b484d99..db0f588 100644
--- a/plugins/stereo_matrix/stereo_matrix.cpp
+++ b/plugins/stereo_matrix/stereo_matrix.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stereo_matrix/stereo_matrix.h b/plugins/stereo_matrix/stereo_matrix.h
index a9b99c2..995d94b 100644
--- a/plugins/stereo_matrix/stereo_matrix.h
+++ b/plugins/stereo_matrix/stereo_matrix.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stereo_matrix/stereomatrix_control_dialog.cpp b/plugins/stereo_matrix/stereomatrix_control_dialog.cpp
index fa06727..b8a1a36 100644
--- a/plugins/stereo_matrix/stereomatrix_control_dialog.cpp
+++ b/plugins/stereo_matrix/stereomatrix_control_dialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -68,3 +68,4 @@ stereoMatrixControlDialog::stereoMatrixControlDialog(
rrKnob->move( 40+28, 60+28 );
}
+#include "moc_stereomatrix_control_dialog.cxx"
diff --git a/plugins/stereo_matrix/stereomatrix_control_dialog.h b/plugins/stereo_matrix/stereomatrix_control_dialog.h
index de3dcd1..82d79c5 100644
--- a/plugins/stereo_matrix/stereomatrix_control_dialog.h
+++ b/plugins/stereo_matrix/stereomatrix_control_dialog.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -32,6 +32,7 @@ class stereoMatrixControls;
class stereoMatrixControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
stereoMatrixControlDialog( stereoMatrixControls * _controls );
virtual ~stereoMatrixControlDialog()
diff --git a/plugins/stereo_matrix/stereomatrix_controls.cpp b/plugins/stereo_matrix/stereomatrix_controls.cpp
index 69f60e7..5e31b03 100644
--- a/plugins/stereo_matrix/stereomatrix_controls.cpp
+++ b/plugins/stereo_matrix/stereomatrix_controls.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stereo_matrix/stereomatrix_controls.h b/plugins/stereo_matrix/stereomatrix_controls.h
index 5166c5c..8604b4d 100644
--- a/plugins/stereo_matrix/stereomatrix_controls.h
+++ b/plugins/stereo_matrix/stereomatrix_controls.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/stk/mallets/mallets.cpp b/plugins/stk/mallets/mallets.cpp
index c2d91f0..c820032 100644
--- a/plugins/stk/mallets/mallets.cpp
+++ b/plugins/stk/mallets/mallets.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -81,15 +81,6 @@ malletsInstrument::malletsInstrument( InstrumentTrack * _instrument_track ):
!QFileInfo( configManager::inst()->stkDir() + QDir::separator()
+ "sinewave.raw" ).exists() )
{
- // try to inform user about missing Stk-installation
- if( m_filesMissing && engine::hasGUI() )
- {
- QMessageBox::information( 0, tr( "Missing files" ),
- tr( "Your Stk-installation seems to be "
- "incomplete. Please make sure "
- "the full Stk-package is installed!" ),
- QMessageBox::Ok );
- }
// ModalBar
m_presetsModel.addItem( tr( "Marimba" ) );
@@ -334,6 +325,16 @@ malletsInstrumentView::malletsInstrumentView( malletsInstrument * _instrument,
m_spreadKnob->setLabel( tr( "Spread" ) );
m_spreadKnob->move( 190, 140 );
m_spreadKnob->setHintText( tr( "Spread:" ) + " ", "" );
+
+ // try to inform user about missing Stk-installation
+ if( _instrument->m_filesMissing && engine::hasGUI() )
+ {
+ QMessageBox::information( 0, tr( "Missing files" ),
+ tr( "Your Stk-installation seems to be "
+ "incomplete. Please make sure "
+ "the full Stk-package is installed!" ),
+ QMessageBox::Ok );
+ }
}
diff --git a/plugins/stk/mallets/mallets.h b/plugins/stk/mallets/mallets.h
index 6c21bd8..ef7b0f0 100644
--- a/plugins/stk/mallets/mallets.h
+++ b/plugins/stk/mallets/mallets.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
*
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -133,6 +133,7 @@ protected:
class malletsInstrument : public Instrument
{
+ Q_OBJECT
public:
malletsInstrument( InstrumentTrack * _instrument_track );
virtual ~malletsInstrument();
diff --git a/plugins/triple_oscillator/TripleOscillator.cpp b/plugins/triple_oscillator/TripleOscillator.cpp
index 50bce3e..65f24a2 100644
--- a/plugins/triple_oscillator/TripleOscillator.cpp
+++ b/plugins/triple_oscillator/TripleOscillator.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/triple_oscillator/TripleOscillator.h b/plugins/triple_oscillator/TripleOscillator.h
index a0e6705..a271c23 100644
--- a/plugins/triple_oscillator/TripleOscillator.h
+++ b/plugins/triple_oscillator/TripleOscillator.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/triple_oscillator/moc_TripleOscillator.cxx_parameters b/plugins/triple_oscillator/moc_TripleOscillator.cxx_parameters
deleted file mode 100644
index 982b8b2..0000000
--- a/plugins/triple_oscillator/moc_TripleOscillator.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/triple_oscillator
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=tripleoscillator
--o
-/home/lukas/src/lmms/plugins/triple_oscillator/moc_TripleOscillator.cxx
-/home/lukas/src/lmms/plugins/triple_oscillator/TripleOscillator.h
diff --git a/plugins/vestige/moc_vestige.cxx_parameters b/plugins/vestige/moc_vestige.cxx_parameters
deleted file mode 100644
index 16cb4cd..0000000
--- a/plugins/vestige/moc_vestige.cxx_parameters
+++ /dev/null
@@ -1,17 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/vestige/../vst_base
--I/home/lukas/src/lmms/plugins/vestige
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=vestige
--o
-/home/lukas/src/lmms/plugins/vestige/moc_vestige.cxx
-/home/lukas/src/lmms/plugins/vestige/vestige.h
diff --git a/plugins/vestige/vestige.cpp b/plugins/vestige/vestige.cpp
index 2072967..45fd94a 100644
--- a/plugins/vestige/vestige.cpp
+++ b/plugins/vestige/vestige.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -170,9 +170,10 @@ void vestigeInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this )
{
if( QFileInfo( m_pluginDLL ).isAbsolute() )
{
- QString relativePath;
- if( !( relativePath = m_pluginDLL.section( configManager::
- inst()->vstDir(), 1, 1 ) ).isEmpty() )
+ QString f = QString( m_pluginDLL ).replace( QDir::separator(), '/' );
+ QString vd = QString( configManager::inst()->vstDir() ).replace( QDir::separator(), '/' );
+ QString relativePath;
+ if( !( relativePath = f.section( vd, 1, 1 ) ).isEmpty() )
{
m_pluginDLL = relativePath;
}
@@ -237,9 +238,10 @@ void vestigeInstrument::loadFile( const QString & _file )
{
m_pluginMutex.lock();
const bool set_ch_name = ( m_plugin != NULL &&
- instrumentTrack()->name() == m_plugin->name() ) ||
- instrumentTrack()->name() ==
- InstrumentTrack::tr( "Default preset" );
+ instrumentTrack()->name() == m_plugin->name() ) ||
+ instrumentTrack()->name() == InstrumentTrack::tr( "Default preset" ) ||
+ instrumentTrack()->name() == displayName();
+
m_pluginMutex.unlock();
if ( m_plugin != NULL )
@@ -310,12 +312,12 @@ void vestigeInstrument::play( sampleFrame * _buf )
-bool vestigeInstrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time )
+bool vestigeInstrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset )
{
m_pluginMutex.lock();
if( m_plugin != NULL )
{
- m_plugin->processMidiEvent( event, time );
+ m_plugin->processMidiEvent( event, offset );
}
m_pluginMutex.unlock();
@@ -776,7 +778,7 @@ void VestigeInstrumentView::noteOffAll( void )
m_vi->m_pluginMutex.lock();
if( m_vi->m_plugin != NULL )
{
- for( int key = 0; key <= MidiMaxNote; ++key )
+ for( int key = 0; key <= MidiMaxKey; ++key )
{
m_vi->m_plugin->processMidiEvent( MidiEvent( MidiNoteOff, 0, key, 0 ), 0 );
}
@@ -881,8 +883,9 @@ manageVestigeInstrumentView::manageVestigeInstrumentView( Instrument * _instrume
m_vi->m_subWindow = engine::mainWindow()->workspace()->addSubWindow(new QMdiSubWindow, Qt::SubWindow |
Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
- m_vi->m_subWindow->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
- m_vi->m_subWindow->setFixedSize( 960, 300);
+ m_vi->m_subWindow->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::MinimumExpanding );
+ m_vi->m_subWindow->setFixedWidth( 960 );
+ m_vi->m_subWindow->setMinimumHeight( 300 );
m_vi->m_subWindow->setWidget(m_vi->m_scrollArea);
m_vi->m_subWindow->setWindowTitle( m_vi->instrumentTrack()->name()
+ tr( " - VST plugin control" ) );
@@ -979,7 +982,6 @@ manageVestigeInstrumentView::manageVestigeInstrumentView( Instrument * _instrume
widget->setAutoFillBackground(true);
m_vi->m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
- m_vi->m_scrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
m_vi->m_scrollArea->setPalette( QApplication::palette( m_vi->m_scrollArea ) );
m_vi->m_scrollArea->setMinimumHeight( 64 );
diff --git a/plugins/vestige/vestige.h b/plugins/vestige/vestige.h
index 8a5ce63..42081cc 100644
--- a/plugins/vestige/vestige.h
+++ b/plugins/vestige/vestige.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -68,7 +68,7 @@ public:
return IsSingleStreamed | IsMidiBased;
}
- virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time );
+ virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset = 0 );
virtual PluginView * instantiateView( QWidget * _parent );
diff --git a/plugins/vibed/moc_nine_button_selector.cxx_parameters b/plugins/vibed/moc_nine_button_selector.cxx_parameters
deleted file mode 100644
index a0c114f..0000000
--- a/plugins/vibed/moc_nine_button_selector.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/vibed
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=vibedstrings
--o
-/home/lukas/src/lmms/plugins/vibed/moc_nine_button_selector.cxx
-/home/lukas/src/lmms/plugins/vibed/nine_button_selector.h
diff --git a/plugins/vibed/moc_vibed.cxx_parameters b/plugins/vibed/moc_vibed.cxx_parameters
deleted file mode 100644
index 1bc50b1..0000000
--- a/plugins/vibed/moc_vibed.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/vibed
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=vibedstrings
--o
-/home/lukas/src/lmms/plugins/vibed/moc_vibed.cxx
-/home/lukas/src/lmms/plugins/vibed/vibed.h
diff --git a/plugins/vibed/nine_button_selector.cpp b/plugins/vibed/nine_button_selector.cpp
index 3c88604..b1a1b99 100644
--- a/plugins/vibed/nine_button_selector.cpp
+++ b/plugins/vibed/nine_button_selector.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/yahoo/com>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -251,9 +251,8 @@ void nineButtonSelector::updateButton( int _new_button )
void nineButtonSelector::contextMenuEvent( QContextMenuEvent * )
{
- captionMenu contextMenu( windowTitle() );
- contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ),
- this, SLOT( displayHelp() ) );
+ captionMenu contextMenu( windowTitle(), this );
+ contextMenu.addHelpAction();
contextMenu.exec( QCursor::pos() );
}
diff --git a/plugins/vibed/nine_button_selector.h b/plugins/vibed/nine_button_selector.h
index f17e36a..e7e0862 100644
--- a/plugins/vibed/nine_button_selector.h
+++ b/plugins/vibed/nine_button_selector.h
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/yahoo/com>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/vibed/string_container.cpp b/plugins/vibed/string_container.cpp
index 089c63e..c88bc71 100644
--- a/plugins/vibed/string_container.cpp
+++ b/plugins/vibed/string_container.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006 Danny McRae <khjklujn/at/yahoo/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/vibed/string_container.h b/plugins/vibed/string_container.h
index 2a217be..5434a2c 100644
--- a/plugins/vibed/string_container.h
+++ b/plugins/vibed/string_container.h
@@ -2,7 +2,7 @@
*
* Copyright (c) 2006 Danny McRae <khjklujn/at/yahoo/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/vibed/vibed.cpp b/plugins/vibed/vibed.cpp
index a4d0b4d..f48d2f6 100644
--- a/plugins/vibed/vibed.cpp
+++ b/plugins/vibed/vibed.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/yahoo/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -755,9 +755,8 @@ void vibedView::normalizeClicked()
void vibedView::contextMenuEvent( QContextMenuEvent * )
{
- captionMenu contextMenu( model()->displayName() );
- contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ),
- this, SLOT( displayHelp() ) );
+ captionMenu contextMenu( model()->displayName(), this );
+ contextMenu.addHelpAction();
contextMenu.exec( QCursor::pos() );
}
diff --git a/plugins/vibed/vibed.h b/plugins/vibed/vibed.h
index cb59da1..3df8b1b 100644
--- a/plugins/vibed/vibed.h
+++ b/plugins/vibed/vibed.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/yahoo/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/vibed/vibrating_string.cpp b/plugins/vibed/vibrating_string.cpp
index 704de66..494f987 100644
--- a/plugins/vibed/vibrating_string.cpp
+++ b/plugins/vibed/vibrating_string.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/yahoo/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/vibed/vibrating_string.h b/plugins/vibed/vibrating_string.h
index d75fe1d..a315a40 100644
--- a/plugins/vibed/vibrating_string.h
+++ b/plugins/vibed/vibrating_string.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/yahoo/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/vst_base/CMakeLists.txt b/plugins/vst_base/CMakeLists.txt
index 750ca90..373604c 100644
--- a/plugins/vst_base/CMakeLists.txt
+++ b/plugins/vst_base/CMakeLists.txt
@@ -6,7 +6,7 @@ IF(LMMS_BUILD_WIN32)
ADD_DEFINITIONS(-DPTW32_STATIC_LIB)
ADD_EXECUTABLE(RemoteVstPlugin "${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp")
TARGET_LINK_LIBRARIES(RemoteVstPlugin -lQtCore4 -lpthread -lgdi32 -lws2_32)
- SET_TARGET_PROPERTIES(RemoteVstPlugin PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -O3")
+ SET_TARGET_PROPERTIES(RemoteVstPlugin PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -O0")
ADD_CUSTOM_COMMAND(TARGET RemoteVstPlugin POST_BUILD COMMAND "${STRIP}" "${CMAKE_CURRENT_BINARY_DIR}/RemoteVstPlugin.exe")
INSTALL(TARGETS RemoteVstPlugin RUNTIME DESTINATION "${PLUGIN_DIR}")
@@ -35,7 +35,7 @@ ENDIF(LMMS_HOST_X86_64)
ADD_CUSTOM_COMMAND(
SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp"
COMMAND ${WINE_CXX}
- ARGS "-I\"${CMAKE_BINARY_DIR}\"" "-I\"${CMAKE_SOURCE_DIR}/include\"" "-I\"${CMAKE_INSTALL_PREFIX}/include/wine/windows\"" "-I\"${CMAKE_INSTALL_PREFIX}/include\"" -I/usr/include/wine/windows "\"${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp\"" -mwindows -lpthread ${EXTRA_FLAGS} -o RemoteVstPlugin
+ ARGS "-I\"${CMAKE_BINARY_DIR}\"" "-I\"${CMAKE_SOURCE_DIR}/include\"" "-I\"${CMAKE_INSTALL_PREFIX}/include/wine/windows\"" "-I\"${CMAKE_INSTALL_PREFIX}/include\"" -I/usr/include/wine/windows "\"${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp\"" -ansi -mwindows -lpthread ${EXTRA_FLAGS} -o RemoteVstPlugin
COMMAND find -name RemoteVstPlugin.exe -exec mv "'{}'" RemoteVstPlugin "';'"
TARGET vstbase
OUTPUTS RemoteVstPlugin
diff --git a/plugins/vst_base/RemoteVstPlugin.cpp b/plugins/vst_base/RemoteVstPlugin.cpp
index cc441ce..fdea04b 100644
--- a/plugins/vst_base/RemoteVstPlugin.cpp
+++ b/plugins/vst_base/RemoteVstPlugin.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* Code partly taken from (X)FST:
* Copyright (c) 2004 Paul Davis
diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp
index 5ed6164..8e7632c 100644
--- a/plugins/vst_base/VstPlugin.cpp
+++ b/plugins/vst_base/VstPlugin.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2013 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -415,7 +415,7 @@ void VstPlugin::setParameterDump( const QMap<QString, QString> & _pdump )
{
( *it ).section( ':', 0, 0 ).toInt(),
"",
- ( *it ).section( ':', 1, 1 ).toFloat()
+ ( *it ).section( ':', 2, -1 ).toFloat()
} ;
m.addInt( item.index );
m.addString( item.shortLabel );
diff --git a/plugins/vst_base/VstPlugin.h b/plugins/vst_base/VstPlugin.h
index 2c8635b..4c94a1b 100644
--- a/plugins/vst_base/VstPlugin.h
+++ b/plugins/vst_base/VstPlugin.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -25,6 +25,7 @@
#ifndef _VST_PLUGIN_H
#define _VST_PLUGIN_H
+#include <QtCore/QMap>
#include <QtCore/QMutex>
#include <QtCore/QPointer>
#include <QtCore/QString>
diff --git a/plugins/vst_base/Win64/CMakeLists.txt b/plugins/vst_base/Win64/CMakeLists.txt
index b16d502..814c866 100644
--- a/plugins/vst_base/Win64/CMakeLists.txt
+++ b/plugins/vst_base/Win64/CMakeLists.txt
@@ -5,7 +5,7 @@ ADD_EXECUTABLE(RemoteVstPlugin32 "${CMAKE_CURRENT_SOURCE_DIR}/../RemoteVstPlugin
TARGET_LINK_LIBRARIES(RemoteVstPlugin32 -lQtCore4 -lpthread -lgdi32 -lws2_32)
ADD_CUSTOM_COMMAND(TARGET RemoteVstPlugin32 POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/RemoteVstPlugin32.exe\"")
-SET_TARGET_PROPERTIES(RemoteVstPlugin32 PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -O3")
+SET_TARGET_PROPERTIES(RemoteVstPlugin32 PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -O0")
INSTALL(TARGETS RemoteVstPlugin32 RUNTIME DESTINATION "${PLUGIN_DIR}/32")
INSTALL(FILES "${MINGW_PREFIX32}/bin/QtCore4.dll" "${MINGW_PREFIX32}/bin/zlib1.dll" "${MINGW_PREFIX32}/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32/bin/libwinpthread-1.dll"
diff --git a/plugins/vst_base/communication.h b/plugins/vst_base/communication.h
index 652af1c..6786b11 100644
--- a/plugins/vst_base/communication.h
+++ b/plugins/vst_base/communication.h
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/vst_base/moc_VstPlugin.cxx_parameters b/plugins/vst_base/moc_VstPlugin.cxx_parameters
deleted file mode 100644
index 9ed1862..0000000
--- a/plugins/vst_base/moc_VstPlugin.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/vst_base
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=vstbase
--o
-/home/lukas/src/lmms/plugins/vst_base/moc_VstPlugin.cxx
-/home/lukas/src/lmms/plugins/vst_base/VstPlugin.h
diff --git a/plugins/vst_base/vst_base.cpp b/plugins/vst_base/vst_base.cpp
index f5ae757..70b0f2a 100644
--- a/plugins/vst_base/vst_base.cpp
+++ b/plugins/vst_base/vst_base.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/watsyn/CMakeLists.txt b/plugins/watsyn/CMakeLists.txt
new file mode 100644
index 0000000..1353b47
--- /dev/null
+++ b/plugins/watsyn/CMakeLists.txt
@@ -0,0 +1,5 @@
+INCLUDE(BuildPlugin)
+
+LINK_DIRECTORIES(${SAMPLERATE_LIBRARY_DIRS})
+LINK_LIBRARIES(${SAMPLERATE_LIBRARIES})
+BUILD_PLUGIN(watsyn Watsyn.cpp Watsyn.h MOCFILES Watsyn.h EMBEDDED_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.png)
diff --git a/plugins/watsyn/Watsyn.cpp b/plugins/watsyn/Watsyn.cpp
new file mode 100644
index 0000000..5567e9d
--- /dev/null
+++ b/plugins/watsyn/Watsyn.cpp
@@ -0,0 +1,1287 @@
+/*
+ * Watsyn.cpp - a 4-oscillator modulating wavetable synth
+ *
+ * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <QtXml/QDomElement>
+
+#include "Watsyn.h"
+#include "base64.h"
+#include "engine.h"
+#include "InstrumentTrack.h"
+#include "templates.h"
+#include "tooltip.h"
+#include "song.h"
+#include "lmms_math.h"
+#include "interpolation.h"
+
+#include "embed.cpp"
+
+extern "C"
+{
+
+Plugin::Descriptor PLUGIN_EXPORT watsyn_plugin_descriptor =
+{
+ STRINGIFY( PLUGIN_NAME ),
+ "Watsyn",
+ QT_TRANSLATE_NOOP( "pluginBrowser",
+ "4-oscillator modulatable wavetable synth" ),
+ "Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>",
+ 0x0100,
+ Plugin::Instrument,
+ new PluginPixmapLoader( "logo" ),
+ NULL,
+ NULL
+} ;
+
+}
+
+
+
+
+WatsynObject::WatsynObject( float * _A1wave, float * _A2wave,
+ float * _B1wave, float * _B2wave,
+ int _amod, int _bmod, const sample_rate_t _samplerate, NotePlayHandle * _nph, fpp_t _frames,
+ WatsynInstrument * _w ) :
+ m_amod( _amod ),
+ m_bmod( _bmod ),
+ m_samplerate( _samplerate ),
+ m_nph( _nph ),
+ m_fpp( _frames ),
+ m_parent( _w )
+{
+ m_abuf = new sampleFrame[_frames];
+ m_bbuf = new sampleFrame[_frames];
+
+ m_lphase[A1_OSC] = 0.0f;
+ m_lphase[A2_OSC] = 0.0f;
+ m_lphase[B1_OSC] = 0.0f;
+ m_lphase[B2_OSC] = 0.0f;
+
+ m_rphase[A1_OSC] = 0.0f;
+ m_rphase[A2_OSC] = 0.0f;
+ m_rphase[B1_OSC] = 0.0f;
+ m_rphase[B2_OSC] = 0.0f;
+
+ // copy wavegraphs to the synth object to prevent race conditions
+
+ memcpy( &m_A1wave, _A1wave, sizeof( m_A1wave ) );
+ memcpy( &m_A2wave, _A2wave, sizeof( m_A2wave ) );
+ memcpy( &m_B1wave, _B1wave, sizeof( m_B1wave ) );
+ memcpy( &m_B2wave, _B2wave, sizeof( m_B2wave ) );
+}
+
+
+
+WatsynObject::~WatsynObject()
+{
+ delete[] m_abuf;
+ delete[] m_bbuf;
+}
+
+
+void WatsynObject::renderOutput( fpp_t _frames )
+{
+ if( m_abuf == NULL )
+ m_abuf = new sampleFrame[m_fpp];
+ if( m_bbuf == NULL )
+ m_bbuf = new sampleFrame[m_fpp];
+
+ for( fpp_t frame = 0; frame < _frames; frame++ )
+ {
+ // put phases of 1-series oscs into variables because phase modulation might happen
+ float A1_lphase = m_lphase[A1_OSC];
+ float A1_rphase = m_rphase[A1_OSC];
+ float B1_lphase = m_lphase[B1_OSC];
+ float B1_rphase = m_rphase[B1_OSC];
+
+ ///////////// A-series /////////////////
+
+ // A2
+ sample_t A2_L = linearInterpolate( m_A2wave[ static_cast<int>( m_lphase[A2_OSC] ) ],
+ m_A2wave[ static_cast<int>( m_lphase[A2_OSC] + 1 ) % WAVELEN ],
+ fraction( m_lphase[A2_OSC] ) ) * m_parent->m_lvol[A2_OSC];
+ sample_t A2_R = linearInterpolate( m_A2wave[ static_cast<int>( m_rphase[A2_OSC] ) ],
+ m_A2wave[ static_cast<int>( m_rphase[A2_OSC] + 1 ) % WAVELEN ],
+ fraction( m_rphase[A2_OSC] ) ) * m_parent->m_rvol[A2_OSC];
+
+ // if phase mod, add to phases
+ if( m_amod == MOD_PM )
+ {
+ A1_lphase = fmodf( A1_lphase + A2_L * PMOD_AMT, WAVELEN );
+ if( A1_lphase < 0 ) A1_lphase += WAVELEN;
+ A1_rphase = fmodf( A1_rphase + A2_R * PMOD_AMT, WAVELEN );
+ if( A1_rphase < 0 ) A1_rphase += WAVELEN;
+ }
+ // A1
+ sample_t A1_L = linearInterpolate( m_A1wave[ static_cast<int>( A1_lphase ) ],
+ m_A1wave[ static_cast<int>( A1_lphase + 1 ) % WAVELEN ],
+ fraction( A1_lphase ) ) * m_parent->m_lvol[A1_OSC];
+ sample_t A1_R = linearInterpolate( m_A1wave[ static_cast<int>( A1_rphase ) ],
+ m_A1wave[ static_cast<int>( A1_rphase + 1 ) % WAVELEN ],
+ fraction( A1_rphase ) ) * m_parent->m_rvol[A1_OSC];
+
+ ///////////// B-series /////////////////
+
+ // B2
+ sample_t B2_L = linearInterpolate( m_B2wave[ static_cast<int>( m_lphase[B2_OSC] ) ],
+ m_B2wave[ static_cast<int>( m_lphase[B2_OSC] + 1 ) % WAVELEN ],
+ fraction( m_lphase[B2_OSC] ) ) * m_parent->m_lvol[B2_OSC];
+ sample_t B2_R = linearInterpolate( m_B2wave[ static_cast<int>( m_rphase[B2_OSC] ) ],
+ m_B2wave[ static_cast<int>( m_rphase[B2_OSC] + 1 ) % WAVELEN ],
+ fraction( m_rphase[B2_OSC] ) ) * m_parent->m_rvol[B2_OSC];
+
+ // if crosstalk active, add a1
+ const float xt = m_parent->m_xtalk.value();
+ if( xt > 0.0 )
+ {
+ B2_L += ( A1_L * xt ) * 0.01f;
+ B2_R += ( A1_R * xt ) * 0.01f;
+ }
+
+ // if phase mod, add to phases
+ if( m_bmod == MOD_PM )
+ {
+ B1_lphase = fmodf( B1_lphase + B2_L * PMOD_AMT, WAVELEN );
+ if( B1_lphase < 0 ) B1_lphase += WAVELEN;
+ B1_rphase = fmodf( B1_rphase + B2_R * PMOD_AMT, WAVELEN );
+ if( B1_rphase < 0 ) B1_rphase += WAVELEN;
+ }
+ // B1
+ sample_t B1_L = linearInterpolate( m_B1wave[ static_cast<int>( B1_lphase ) % WAVELEN ],
+ m_B1wave[ static_cast<int>( B1_lphase + 1 ) % WAVELEN ],
+ fraction( B1_lphase ) ) * m_parent->m_lvol[B1_OSC];
+ sample_t B1_R = linearInterpolate( m_B1wave[ static_cast<int>( B1_rphase ) % WAVELEN ],
+ m_B1wave[ static_cast<int>( B1_rphase + 1 ) % WAVELEN ],
+ fraction( B1_rphase ) ) * m_parent->m_rvol[B1_OSC];
+
+
+ // A-series modulation)
+ switch( m_amod )
+ {
+ case MOD_MIX:
+ A1_L = ( A1_L + A2_L ) / 2.0;
+ A1_R = ( A1_R + A2_R ) / 2.0;
+ break;
+ case MOD_AM:
+ A1_L *= qMax( 0.0f, A2_L + 1.0f );
+ A1_R *= qMax( 0.0f, A2_R + 1.0f );
+ break;
+ case MOD_RM:
+ A1_L *= A2_L;
+ A1_R *= A2_R;
+ break;
+ }
+ m_abuf[frame][0] = A1_L;
+ m_abuf[frame][1] = A1_R;
+
+ // B-series modulation (other than phase mod)
+ switch( m_bmod )
+ {
+ case MOD_MIX:
+ B1_L = ( B1_L + B2_L ) / 2.0;
+ B1_R = ( B1_R + B2_R ) / 2.0;
+ break;
+ case MOD_AM:
+ B1_L *= qMax( 0.0f, B2_L + 1.0f );
+ B1_R *= qMax( 0.0f, B2_R + 1.0f );
+ break;
+ case MOD_RM:
+ B1_L *= B2_L;
+ B1_R *= B2_R;
+ break;
+ }
+ m_bbuf[frame][0] = B1_L;
+ m_bbuf[frame][1] = B1_R;
+
+ // update phases
+ for( int i = 0; i < NUM_OSCS; i++ )
+ {
+ m_lphase[i] += ( static_cast<float>( WAVELEN ) / ( m_samplerate / ( m_nph->frequency() * m_parent->m_lfreq[i] ) ) );
+ m_lphase[i] = fmodf( m_lphase[i], WAVELEN );
+ m_rphase[i] += ( static_cast<float>( WAVELEN ) / ( m_samplerate / ( m_nph->frequency() * m_parent->m_rfreq[i] ) ) );
+ m_rphase[i] = fmodf( m_rphase[i], WAVELEN );
+ }
+ }
+
+}
+
+
+
+WatsynInstrument::WatsynInstrument( InstrumentTrack * _instrument_track ) :
+ Instrument( _instrument_track, &watsyn_plugin_descriptor ),
+
+ a1_vol( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume A1" ) ),
+ a2_vol( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume A2" ) ),
+ b1_vol( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume B1" ) ),
+ b2_vol( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Volume B2" ) ),
+
+ a1_pan( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning A1" ) ),
+ a2_pan( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning A2" ) ),
+ b1_pan( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning B1" ) ),
+ b2_pan( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "Panning B2" ) ),
+
+ a1_mult( 8.0f, 1.0, 24.0, 1.0, this, tr( "Freq. multiplier A1" ) ),
+ a2_mult( 8.0f, 1.0, 24.0, 1.0, this, tr( "Freq. multiplier A2" ) ),
+ b1_mult( 8.0f, 1.0, 24.0, 1.0, this, tr( "Freq. multiplier B1" ) ),
+ b2_mult( 8.0f, 1.0, 24.0, 1.0, this, tr( "Freq. multiplier B2" ) ),
+
+ a1_ltune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Left detune A1" ) ),
+ a2_ltune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Left detune A2" ) ),
+ b1_ltune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Left detune B1" ) ),
+ b2_ltune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Left detune B2" ) ),
+
+ a1_rtune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Right detune A1" ) ),
+ a2_rtune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Right detune A2" ) ),
+ b1_rtune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Right detune B1" ) ),
+ b2_rtune( 0.0f, -600.0f, 600.0f, 1.0f, this, tr( "Right detune B2" ) ),
+
+ a1_graph( -1.0f, 1.0f, GRAPHLEN, this ),
+ a2_graph( -1.0f, 1.0f, GRAPHLEN, this ),
+ b1_graph( -1.0f, 1.0f, GRAPHLEN, this ),
+ b2_graph( -1.0f, 1.0f, GRAPHLEN, this ),
+
+ m_abmix( 0.0f, -100.0f, 100.0f, 0.1f, this, tr( "A-B Mix" ) ),
+ m_envAmt( 0.0f, -200.0f, 200.0f, 1.0f, this, tr( "A-B Mix envelope amount" ) ),
+
+ m_envAtt( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "A-B Mix envelope attack" ) ),
+ m_envHold( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "A-B Mix envelope hold" ) ),
+ m_envDec( 0.0f, 0.0f, 2000.0f, 1.0f, 2000.0f, this, tr( "A-B Mix envelope decay" ) ),
+
+ m_xtalk( 0.0f, 0.0f, 100.0f, 0.1f, this, tr( "A1-B2 Crosstalk" ) ),
+
+ m_amod( 0, 0, 3, this, tr( "A2-A1 modulation" ) ),
+ m_bmod( 0, 0, 3, this, tr( "B2-B1 modulation" ) ),
+
+ m_selectedGraph( 0, 0, 3, this, tr( "Selected graph" ) )
+{
+ connect( &a1_vol, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) );
+ connect( &a2_vol, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) );
+ connect( &b1_vol, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) );
+ connect( &b2_vol, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) );
+
+ connect( &a1_pan, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) );
+ connect( &a2_pan, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) );
+ connect( &b1_pan, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) );
+ connect( &b2_pan, SIGNAL( dataChanged() ), this, SLOT( updateVolumes() ) );
+
+ connect( &a1_mult, SIGNAL( dataChanged() ), this, SLOT( updateFreqA1() ) );
+ connect( &a2_mult, SIGNAL( dataChanged() ), this, SLOT( updateFreqA2() ) );
+ connect( &b1_mult, SIGNAL( dataChanged() ), this, SLOT( updateFreqB1() ) );
+ connect( &b2_mult, SIGNAL( dataChanged() ), this, SLOT( updateFreqB2() ) );
+
+ connect( &a1_ltune, SIGNAL( dataChanged() ), this, SLOT( updateFreqA1() ) );
+ connect( &a2_ltune, SIGNAL( dataChanged() ), this, SLOT( updateFreqA2() ) );
+ connect( &b1_ltune, SIGNAL( dataChanged() ), this, SLOT( updateFreqB1() ) );
+ connect( &b2_ltune, SIGNAL( dataChanged() ), this, SLOT( updateFreqB2() ) );
+
+ connect( &a1_rtune, SIGNAL( dataChanged() ), this, SLOT( updateFreqA1() ) );
+ connect( &a2_rtune, SIGNAL( dataChanged() ), this, SLOT( updateFreqA2() ) );
+ connect( &b1_rtune, SIGNAL( dataChanged() ), this, SLOT( updateFreqB1() ) );
+ connect( &b2_rtune, SIGNAL( dataChanged() ), this, SLOT( updateFreqB2() ) );
+
+ connect( &a1_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateWaveA1() ) );
+ connect( &a2_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateWaveA2() ) );
+ connect( &b1_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateWaveB1() ) );
+ connect( &b2_graph, SIGNAL( samplesChanged( int, int ) ), this, SLOT( updateWaveB2() ) );
+
+ a1_graph.setWaveToSine();
+ a2_graph.setWaveToSine();
+ b1_graph.setWaveToSine();
+ b2_graph.setWaveToSine();
+
+ updateVolumes();
+ updateFreqA1();
+ updateFreqA2();
+ updateFreqB1();
+ updateFreqB2();
+ updateWaveA1();
+ updateWaveA2();
+ updateWaveB1();
+ updateWaveB2();
+}
+
+
+WatsynInstrument::~WatsynInstrument()
+{
+}
+
+
+void WatsynInstrument::playNote( NotePlayHandle * _n,
+ sampleFrame * _working_buffer )
+{
+ if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL )
+ {
+ WatsynObject * w = new WatsynObject(
+ &A1_wave[0],
+ &A2_wave[0],
+ &B1_wave[0],
+ &B2_wave[0],
+ m_amod.value(), m_bmod.value(),
+ engine::mixer()->processingSampleRate(), _n,
+ engine::mixer()->framesPerPeriod(), this );
+
+ _n->m_pluginData = w;
+ }
+
+ const fpp_t frames = _n->framesLeftForCurrentPeriod();
+
+ WatsynObject * w = static_cast<WatsynObject *>( _n->m_pluginData );
+
+ sampleFrame * abuf = w->abuf();
+ sampleFrame * bbuf = w->bbuf();
+
+ w-> renderOutput( frames );
+
+ // envelope parameters
+ const float envAmt = m_envAmt.value();
+ const float envAtt = ( m_envAtt.value() * w->samplerate() ) / 1000.0f;
+ const float envHold = ( m_envHold.value() * w->samplerate() ) / 1000.0f;
+ const float envDec = ( m_envDec.value() * w->samplerate() ) / 1000.0f;
+ const float envLen = envAtt + envDec + envHold;
+ const float tfp_ = static_cast<float>( _n->totalFramesPlayed() );
+
+ // if sample-exact is enabled, use sample-exact calculations...
+ // disabled pending proper implementation of sample-exactness
+/* if( engine::mixer()->currentQualitySettings().sampleExactControllers )
+ {
+ for( fpp_t f=0; f < frames; f++ )
+ {
+ const float tfp = tfp_ + f;
+ // handle mixing envelope
+ float mixvalue = m_abmix.value( f );
+ if( envAmt != 0.0f && tfp < envLen )
+ {
+ if( tfp < envAtt )
+ {
+ mixvalue = qBound( -100.0f, mixvalue + ( tfp / envAtt * envAmt ), 100.0f );
+ }
+ else if ( tfp >= envAtt && tfp < envAtt + envHold )
+ {
+ mixvalue = qBound( -100.0f, mixvalue + envAmt, 100.0f );
+ }
+ else
+ {
+ mixvalue = qBound( -100.0f, mixvalue + envAmt - ( ( tfp - ( envAtt + envHold ) ) / envDec * envAmt ), 100.0f );
+ }
+ }
+ // get knob values in sample-exact way
+ const float bmix = ( ( mixvalue + 100.0 ) / 200.0 );
+ const float amix = 1.0 - bmix;
+
+ // mix a/b streams according to mixing knob
+ _working_buffer[f][0] = ( abuf[f][0] * amix ) +
+ ( bbuf[f][0] * bmix );
+ _working_buffer[f][1] = ( abuf[f][1] * amix ) +
+ ( bbuf[f][1] * bmix );
+ }
+ }
+ else*/
+
+ // if sample-exact is not enabled, use simpler calculations:
+ // if mix envelope is active, and we haven't gone past the envelope end, use envelope-aware calculation...
+ if( envAmt != 0.0f && tfp_ < envLen )
+ {
+ const float mixvalue_ = m_abmix.value();
+ for( fpp_t f=0; f < frames; f++ )
+ {
+ float mixvalue = mixvalue_;
+ const float tfp = tfp_ + f;
+ // handle mixing envelope
+ if( tfp < envAtt )
+ {
+ mixvalue = qBound( -100.0f, mixvalue + ( tfp / envAtt * envAmt ), 100.0f );
+ }
+ else if ( tfp >= envAtt && tfp < envAtt + envHold )
+ {
+ mixvalue = qBound( -100.0f, mixvalue + envAmt, 100.0f );
+ }
+ else
+ {
+ mixvalue = qBound( -100.0f, mixvalue + envAmt - ( ( tfp - ( envAtt + envHold ) ) / envDec * envAmt ), 100.0f );
+ }
+
+ // get knob values
+ const float bmix = ( ( mixvalue + 100.0 ) / 200.0 );
+ const float amix = 1.0 - bmix;
+
+ // mix a/b streams according to mixing knob
+ _working_buffer[f][0] = ( abuf[f][0] * amix ) +
+ ( bbuf[f][0] * bmix );
+ _working_buffer[f][1] = ( abuf[f][1] * amix ) +
+ ( bbuf[f][1] * bmix );
+ }
+ }
+
+ // ... mix envelope is inactive or we've past the end of envelope, so use a faster calculation to save cpu
+ else
+ {
+ // get knob values
+ const float bmix = ( ( m_abmix.value() + 100.0 ) / 200.0 );
+ const float amix = 1.0 - bmix;
+ for( fpp_t f=0; f < frames; f++ )
+ {
+ // mix a/b streams according to mixing knob
+ _working_buffer[f][0] = ( abuf[f][0] * amix ) +
+ ( bbuf[f][0] * bmix );
+ _working_buffer[f][1] = ( abuf[f][1] * amix ) +
+ ( bbuf[f][1] * bmix );
+ }
+ }
+
+ applyRelease( _working_buffer, _n );
+
+ instrumentTrack()->processAudioBuffer( _working_buffer, frames, _n );
+}
+
+
+void WatsynInstrument::deleteNotePluginData( NotePlayHandle * _n )
+{
+ delete static_cast<WatsynObject *>( _n->m_pluginData );
+}
+
+
+void WatsynInstrument::saveSettings( QDomDocument & _doc,
+ QDomElement & _this )
+{
+ a1_vol.saveSettings( _doc, _this, "a1_vol" );
+ a2_vol.saveSettings( _doc, _this, "a2_vol" );
+ b1_vol.saveSettings( _doc, _this, "b1_vol" );
+ b2_vol.saveSettings( _doc, _this, "b2_vol" );
+
+ a1_pan.saveSettings( _doc, _this, "a1_pan" );
+ a2_pan.saveSettings( _doc, _this, "a2_pan" );
+ b1_pan.saveSettings( _doc, _this, "b1_pan" );
+ b2_pan.saveSettings( _doc, _this, "b2_pan" );
+
+ a1_mult.saveSettings( _doc, _this, "a1_mult" );
+ a2_mult.saveSettings( _doc, _this, "a2_mult" );
+ b1_mult.saveSettings( _doc, _this, "b1_mult" );
+ b2_mult.saveSettings( _doc, _this, "b2_mult" );
+
+ a1_ltune.saveSettings( _doc, _this, "a1_ltune" );
+ a2_ltune.saveSettings( _doc, _this, "a2_ltune" );
+ b1_ltune.saveSettings( _doc, _this, "b1_ltune" );
+ b2_ltune.saveSettings( _doc, _this, "b2_ltune" );
+
+ a1_rtune.saveSettings( _doc, _this, "a1_rtune" );
+ a2_rtune.saveSettings( _doc, _this, "a2_rtune" );
+ b1_rtune.saveSettings( _doc, _this, "b1_rtune" );
+ b2_rtune.saveSettings( _doc, _this, "b2_rtune" );
+
+ // save graphs
+ QString sampleString;
+
+ base64::encode( (const char *)a1_graph.samples(), a1_graph.length() * sizeof(float), sampleString );
+ _this.setAttribute( "a1_wave", sampleString );
+ base64::encode( (const char *)a2_graph.samples(), a2_graph.length() * sizeof(float), sampleString );
+ _this.setAttribute( "a2_wave", sampleString );
+ base64::encode( (const char *)b1_graph.samples(), b1_graph.length() * sizeof(float), sampleString );
+ _this.setAttribute( "b1_wave", sampleString );
+ base64::encode( (const char *)b2_graph.samples(), b2_graph.length() * sizeof(float), sampleString );
+ _this.setAttribute( "b2_wave", sampleString );
+
+ m_abmix.saveSettings( _doc, _this, "abmix" );
+ m_envAmt.saveSettings( _doc, _this, "envAmt" );
+ m_envAtt.saveSettings( _doc, _this, "envAtt" );
+ m_envHold.saveSettings( _doc, _this, "envHold" );
+ m_envDec.saveSettings( _doc, _this, "envDec" );
+
+ m_xtalk.saveSettings( _doc, _this, "xtalk" );
+
+ m_amod.saveSettings( _doc, _this, "amod" );
+ m_bmod.saveSettings( _doc, _this, "bmod" );
+/* m_selectedGraph.saveSettings( _doc, _this, "selgraph" );*/
+}
+
+
+void WatsynInstrument::loadSettings( const QDomElement & _this )
+{
+ a1_vol.loadSettings( _this, "a1_vol" );
+ a2_vol.loadSettings( _this, "a2_vol" );
+ b1_vol.loadSettings( _this, "b1_vol" );
+ b2_vol.loadSettings( _this, "b2_vol" );
+
+ a1_pan.loadSettings( _this, "a1_pan" );
+ a2_pan.loadSettings( _this, "a2_pan" );
+ b1_pan.loadSettings( _this, "b1_pan" );
+ b2_pan.loadSettings( _this, "b2_pan" );
+
+ a1_mult.loadSettings( _this, "a1_mult" );
+ a2_mult.loadSettings( _this, "a2_mult" );
+ b1_mult.loadSettings( _this, "b1_mult" );
+ b2_mult.loadSettings( _this, "b2_mult" );
+
+ a1_ltune.loadSettings( _this, "a1_ltune" );
+ a2_ltune.loadSettings( _this, "a2_ltune" );
+ b1_ltune.loadSettings( _this, "b1_ltune" );
+ b2_ltune.loadSettings( _this, "b2_ltune" );
+
+ a1_rtune.loadSettings( _this, "a1_rtune" );
+ a2_rtune.loadSettings( _this, "a2_rtune" );
+ b1_rtune.loadSettings( _this, "b1_rtune" );
+ b2_rtune.loadSettings( _this, "b2_rtune" );
+
+ // load graphs
+ int size = 0;
+ char * dst = 0;
+
+ base64::decode( _this.attribute( "a1_wave"), &dst, &size );
+ a1_graph.setSamples( (float*) dst );
+ base64::decode( _this.attribute( "a2_wave"), &dst, &size );
+ a2_graph.setSamples( (float*) dst );
+ base64::decode( _this.attribute( "b1_wave"), &dst, &size );
+ b1_graph.setSamples( (float*) dst );
+ base64::decode( _this.attribute( "b2_wave"), &dst, &size );
+ b2_graph.setSamples( (float*) dst );
+
+ delete[] dst;
+
+ m_abmix.loadSettings( _this, "abmix" );
+
+ m_envAmt.loadSettings( _this, "envAmt" );
+ m_envAtt.loadSettings( _this, "envAtt" );
+ m_envHold.loadSettings( _this, "envHold" );
+ m_envDec.loadSettings( _this, "envDec" );
+
+ m_xtalk.loadSettings( _this, "xtalk" );
+
+ m_amod.loadSettings( _this, "amod" );
+ m_bmod.loadSettings( _this, "bmod" );
+/* m_selectedGraph.loadSettings( _this, "selgraph" );*/
+}
+
+
+QString WatsynInstrument::nodeName() const
+{
+ return( watsyn_plugin_descriptor.name );
+}
+
+
+PluginView * WatsynInstrument::instantiateView( QWidget * _parent )
+{
+ return( new WatsynView( this, _parent ) );
+}
+
+
+void WatsynInstrument::updateVolumes()
+{
+ m_lvol[A1_OSC] = leftCh( a1_vol.value(), a1_pan.value() );
+ m_rvol[A1_OSC] = rightCh( a1_vol.value(), a1_pan.value() );
+
+ m_lvol[A2_OSC] = leftCh( a2_vol.value(), a2_pan.value() );
+ m_rvol[A2_OSC] = rightCh( a2_vol.value(), a2_pan.value() );
+
+ m_lvol[B1_OSC] = leftCh( b1_vol.value(), b1_pan.value() );
+ m_rvol[B1_OSC] = rightCh( b1_vol.value(), b1_pan.value() );
+
+ m_lvol[B2_OSC] = leftCh( b2_vol.value(), b2_pan.value() );
+ m_rvol[B2_OSC] = rightCh( b2_vol.value(), b2_pan.value() );
+}
+
+
+void WatsynInstrument::updateFreqA1()
+{
+ // calculate frequencies
+ m_lfreq[A1_OSC] = ( a1_mult.value() / 8 ) * powf( 2, a1_ltune.value() / 1200 );
+ m_rfreq[A1_OSC] = ( a1_mult.value() / 8 ) * powf( 2, a1_rtune.value() / 1200 );
+}
+
+
+void WatsynInstrument::updateFreqA2()
+{
+ // calculate frequencies
+ m_lfreq[A2_OSC] = ( a2_mult.value() / 8 ) * powf( 2, a2_ltune.value() / 1200 );
+ m_rfreq[A2_OSC] = ( a2_mult.value() / 8 ) * powf( 2, a2_rtune.value() / 1200 );
+}
+
+
+void WatsynInstrument::updateFreqB1()
+{
+ // calculate frequencies
+ m_lfreq[B1_OSC] = ( b1_mult.value() / 8 ) * powf( 2, b1_ltune.value() / 1200 );
+ m_rfreq[B1_OSC] = ( b1_mult.value() / 8 ) * powf( 2, b1_rtune.value() / 1200 );
+}
+
+
+void WatsynInstrument::updateFreqB2()
+{
+ // calculate frequencies
+ m_lfreq[B2_OSC] = ( b2_mult.value() / 8 ) * powf( 2, b2_ltune.value() / 1200 );
+ m_rfreq[B2_OSC] = ( b2_mult.value() / 8 ) * powf( 2, b2_rtune.value() / 1200 );
+}
+
+
+void WatsynInstrument::updateWaveA1()
+{
+ // do sinc+oversampling on the wavetables to improve quality
+ srccpy( &A1_wave[0], const_cast<float*>( a1_graph.samples() ) );
+}
+
+
+void WatsynInstrument::updateWaveA2()
+{
+ // do sinc+oversampling on the wavetables to improve quality
+ srccpy( &A2_wave[0], const_cast<float*>( a2_graph.samples() ) );
+}
+
+
+void WatsynInstrument::updateWaveB1()
+{
+ // do sinc+oversampling on the wavetables to improve quality
+ srccpy( &B1_wave[0], const_cast<float*>( b1_graph.samples() ) );
+}
+
+
+void WatsynInstrument::updateWaveB2()
+{
+ // do sinc+oversampling on the wavetables to improve quality
+ srccpy( &B2_wave[0], const_cast<float*>( b2_graph.samples() ) );
+}
+
+
+
+
+WatsynView::WatsynView( Instrument * _instrument,
+ QWidget * _parent ) :
+ InstrumentView( _instrument, _parent )
+{
+ setAutoFillBackground( true );
+ QPalette pal;
+
+ pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) );
+ setPalette( pal );
+
+// knobs... lots of em
+
+ makeknob( a1_volKnob, 130, A1ROW, "Volume", "%", "aKnob" )
+ makeknob( a2_volKnob, 130, A2ROW, "Volume", "%", "aKnob" )
+ makeknob( b1_volKnob, 130, B1ROW, "Volume", "%", "bKnob" )
+ makeknob( b2_volKnob, 130, B2ROW, "Volume", "%", "bKnob" )
+
+ makeknob( a1_panKnob, 154, A1ROW, "Panning", "", "aKnob" )
+ makeknob( a2_panKnob, 154, A2ROW, "Panning", "", "aKnob" )
+ makeknob( b1_panKnob, 154, B1ROW, "Panning", "", "bKnob" )
+ makeknob( b2_panKnob, 154, B2ROW, "Panning", "", "bKnob" )
+
+ makeknob( a1_multKnob, 178, A1ROW, "Freq. multiplier", "/8", "aKnob" )
+ makeknob( a2_multKnob, 178, A2ROW, "Freq. multiplier", "/8", "aKnob" )
+ makeknob( b1_multKnob, 178, B1ROW, "Freq. multiplier", "/8", "bKnob" )
+ makeknob( b2_multKnob, 178, B2ROW, "Freq. multiplier", "/8", "bKnob" )
+
+ makeknob( a1_ltuneKnob, 202, A1ROW, "Left detune", " cents", "aKnob" )
+ makeknob( a2_ltuneKnob, 202, A2ROW, "Left detune", " cents", "aKnob" )
+ makeknob( b1_ltuneKnob, 202, B1ROW, "Left detune", " cents", "bKnob" )
+ makeknob( b2_ltuneKnob, 202, B2ROW, "Left detune", " cents", "bKnob" )
+
+ makeknob( a1_rtuneKnob, 226, A1ROW, "Right detune", " cents", "aKnob" )
+ makeknob( a2_rtuneKnob, 226, A2ROW, "Right detune", " cents", "aKnob" )
+ makeknob( b1_rtuneKnob, 226, B1ROW, "Right detune", " cents", "bKnob" )
+ makeknob( b2_rtuneKnob, 226, B2ROW, "Right detune", " cents", "bKnob" )
+
+ makeknob( m_abmixKnob, 4, 3, "A-B Mix", "", "mixKnob" )
+
+ makeknob( m_envAmtKnob, 88, 3, "Mix envelope amount", "", "mixenvKnob" )
+
+ maketsknob( m_envAttKnob, 88, A1ROW, "Mix envelope attack", " ms", "mixenvKnob" )
+ maketsknob( m_envHoldKnob, 88, A2ROW, "Mix envelope hold", " ms", "mixenvKnob" )
+ maketsknob( m_envDecKnob, 88, B1ROW, "Mix envelope decay", " ms", "mixenvKnob" )
+
+ makeknob( m_xtalkKnob, 88, B2ROW, "Crosstalk", "", "xtalkKnob" )
+
+// let's set volume knobs
+ a1_volKnob -> setVolumeKnob( true );
+ a2_volKnob -> setVolumeKnob( true );
+ b1_volKnob -> setVolumeKnob( true );
+ b2_volKnob -> setVolumeKnob( true );
+
+ m_abmixKnob -> setFixedSize( 31, 31 );
+
+
+// button groups next.
+// graph select buttons
+ pixmapButton * a1_selectButton = new pixmapButton( this, NULL );
+ a1_selectButton -> move( 4, 121 );
+ a1_selectButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "a1_active" ) );
+ a1_selectButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "a1_inactive" ) );
+ toolTip::add( a1_selectButton, tr( "Select oscillator A1") );
+
+ pixmapButton * a2_selectButton = new pixmapButton( this, NULL );
+ a2_selectButton -> move( 44, 121 );
+ a2_selectButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "a2_active" ) );
+ a2_selectButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "a2_inactive" ) );
+ toolTip::add( a2_selectButton, tr( "Select oscillator A2") );
+
+ pixmapButton * b1_selectButton = new pixmapButton( this, NULL );
+ b1_selectButton -> move( 84, 121 );
+ b1_selectButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "b1_active" ) );
+ b1_selectButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "b1_inactive" ) );
+ toolTip::add( b1_selectButton, tr( "Select oscillator B1") );
+
+ pixmapButton * b2_selectButton = new pixmapButton( this, NULL );
+ b2_selectButton -> move( 124, 121 );
+ b2_selectButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "b2_active" ) );
+ b2_selectButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "b2_inactive" ) );
+ toolTip::add( b2_selectButton, tr( "Select oscillator B2") );
+
+ m_selectedGraphGroup = new automatableButtonGroup( this );
+ m_selectedGraphGroup -> addButton( a1_selectButton );
+ m_selectedGraphGroup -> addButton( a2_selectButton );
+ m_selectedGraphGroup -> addButton( b1_selectButton );
+ m_selectedGraphGroup -> addButton( b2_selectButton );
+ WatsynInstrument * w = castModel<WatsynInstrument>();
+ m_selectedGraphGroup -> setModel( &w -> m_selectedGraph);
+
+// A-modulation button group
+ pixmapButton * amod_mixButton = new pixmapButton( this, NULL );
+ amod_mixButton -> move( 4, 50 );
+ amod_mixButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "amix_active" ) );
+ amod_mixButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "amix_inactive" ) );
+ toolTip::add( amod_mixButton, tr( "Mix output of A2 to A1" ) );
+
+ pixmapButton * amod_amButton = new pixmapButton( this, NULL );
+ amod_amButton -> move( 4, 66 );
+ amod_amButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "aam_active" ) );
+ amod_amButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "aam_inactive" ) );
+ toolTip::add( amod_amButton, tr( "Modulate amplitude of A1 with output of A2" ) );
+
+ pixmapButton * amod_rmButton = new pixmapButton( this, NULL );
+ amod_rmButton -> move( 4, 82 );
+ amod_rmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "arm_active" ) );
+ amod_rmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "arm_inactive" ) );
+ toolTip::add( amod_rmButton, tr( "Ring-modulate A1 and A2" ) );
+
+ pixmapButton * amod_pmButton = new pixmapButton( this, NULL );
+ amod_pmButton -> move( 4, 98 );
+ amod_pmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "apm_active" ) );
+ amod_pmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "apm_inactive" ) );
+ toolTip::add( amod_pmButton, tr( "Modulate phase of A1 with output of A2" ) );
+
+ m_aModGroup = new automatableButtonGroup( this );
+ m_aModGroup -> addButton( amod_mixButton );
+ m_aModGroup -> addButton( amod_amButton );
+ m_aModGroup -> addButton( amod_rmButton );
+ m_aModGroup -> addButton( amod_pmButton );
+
+// B-modulation button group
+ pixmapButton * bmod_mixButton = new pixmapButton( this, NULL );
+ bmod_mixButton -> move( 44, 50 );
+ bmod_mixButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "bmix_active" ) );
+ bmod_mixButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "bmix_inactive" ) );
+ toolTip::add( bmod_mixButton, tr( "Mix output of B2 to B1" ) );
+
+ pixmapButton * bmod_amButton = new pixmapButton( this, NULL );
+ bmod_amButton -> move( 44, 66 );
+ bmod_amButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "bam_active" ) );
+ bmod_amButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "bam_inactive" ) );
+ toolTip::add( bmod_amButton, tr( "Modulate amplitude of B1 with output of B2" ) );
+
+ pixmapButton * bmod_rmButton = new pixmapButton( this, NULL );
+ bmod_rmButton -> move( 44, 82 );
+ bmod_rmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "brm_active" ) );
+ bmod_rmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "brm_inactive" ) );
+ toolTip::add( bmod_rmButton, tr( "Ring-modulate B1 and B2" ) );
+
+ pixmapButton * bmod_pmButton = new pixmapButton( this, NULL );
+ bmod_pmButton -> move( 44, 98 );
+ bmod_pmButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "bpm_active" ) );
+ bmod_pmButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "bpm_inactive" ) );
+ toolTip::add( bmod_pmButton, tr( "Modulate phase of B1 with output of B2" ) );
+
+ m_bModGroup = new automatableButtonGroup( this );
+ m_bModGroup -> addButton( bmod_mixButton );
+ m_bModGroup -> addButton( bmod_amButton );
+ m_bModGroup -> addButton( bmod_rmButton );
+ m_bModGroup -> addButton( bmod_pmButton );
+
+
+// graph widgets
+ pal = QPalette();
+ pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap("wavegraph") );
+// a1 graph
+ a1_graph = new graph( this, graph::LinearStyle, 224, 105 );
+ a1_graph->move( 4, 141 );
+ a1_graph->setAutoFillBackground( true );
+ a1_graph->setGraphColor( QColor( 0x43, 0xb2, 0xff ) );
+ toolTip::add( a1_graph, tr ( "Draw your own waveform here by dragging your mouse on this graph." ) );
+ a1_graph->setPalette( pal );
+
+// a2 graph
+ a2_graph = new graph( this, graph::LinearStyle, 224, 105 );
+ a2_graph->move( 4, 141 );
+ a2_graph->setAutoFillBackground( true );
+ a2_graph->setGraphColor( QColor( 0x43, 0xb2, 0xff ) );
+ toolTip::add( a2_graph, tr ( "Draw your own waveform here by dragging your mouse on this graph." ) );
+ a2_graph->setPalette( pal );
+
+// b1 graph
+ b1_graph = new graph( this, graph::LinearStyle, 224, 105 );
+ b1_graph->move( 4, 141 );
+ b1_graph->setAutoFillBackground( true );
+ b1_graph->setGraphColor( QColor( 0xfc, 0x54, 0x31 ) );
+ toolTip::add( b1_graph, tr ( "Draw your own waveform here by dragging your mouse on this graph." ) );
+ b1_graph->setPalette( pal );
+
+// b2 graph
+ b2_graph = new graph( this, graph::LinearStyle, 224, 105 );
+ b2_graph->move( 4, 141 );
+ b2_graph->setAutoFillBackground( true );
+ b2_graph->setGraphColor( QColor( 0xfc, 0x54, 0x31 ) );
+ toolTip::add( b2_graph, tr ( "Draw your own waveform here by dragging your mouse on this graph." ) );
+ b2_graph->setPalette( pal );
+
+
+// misc pushbuttons
+// waveform modifications
+
+ m_loadButton = new pixmapButton( this, tr( "Load waveform" ) );
+ m_loadButton -> move ( 173, 121 );
+ m_loadButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "load_active" ) );
+ m_loadButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "load_inactive" ) );
+ toolTip::add( m_loadButton, tr( "Click to load a waveform from a sample file" ) );
+
+ m_phaseLeftButton = new pixmapButton( this, tr( "Phase left" ) );
+ m_phaseLeftButton -> move ( 193, 121 );
+ m_phaseLeftButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "phl_active" ) );
+ m_phaseLeftButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "phl_inactive" ) );
+ toolTip::add( m_phaseLeftButton, tr( "Click to shift phase by -15 degrees" ) );
+
+ m_phaseRightButton = new pixmapButton( this, tr( "Phase right" ) );
+ m_phaseRightButton -> move ( 210, 121 );
+ m_phaseRightButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "phr_active" ) );
+ m_phaseRightButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "phr_inactive" ) );
+ toolTip::add( m_phaseRightButton, tr( "Click to shift phase by +15 degrees" ) );
+
+ m_normalizeButton = new pixmapButton( this, tr( "Normalize" ) );
+ m_normalizeButton -> move ( 230, 121 );
+ m_normalizeButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "norm_active" ) );
+ m_normalizeButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "norm_inactive" ) );
+ toolTip::add( m_normalizeButton, tr( "Click to normalize" ) );
+
+
+ m_invertButton = new pixmapButton( this, tr( "Invert" ) );
+ m_invertButton -> move ( 230, 138 );
+ m_invertButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "inv_active" ) );
+ m_invertButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "inv_inactive" ) );
+ toolTip::add( m_invertButton, tr( "Click to invert" ) );
+
+ m_smoothButton = new pixmapButton( this, tr( "Smooth" ) );
+ m_smoothButton -> move ( 230, 155 );
+ m_smoothButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_active" ) );
+ m_smoothButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "smooth_inactive" ) );
+ toolTip::add( m_smoothButton, tr( "Click to smooth" ) );
+
+// waveforms
+
+ m_sinWaveButton = new pixmapButton( this, tr( "Sine wave" ) );
+ m_sinWaveButton -> move ( 230, 176 );
+ m_sinWaveButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sin_active" ) );
+ m_sinWaveButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sin_inactive" ) );
+ toolTip::add( m_sinWaveButton, tr( "Click for sine wave" ) );
+
+ m_triWaveButton = new pixmapButton( this, tr( "Triangle wave" ) );
+ m_triWaveButton -> move ( 230, 194 );
+ m_triWaveButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "tri_active" ) );
+ m_triWaveButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "tri_inactive" ) );
+ toolTip::add( m_triWaveButton, tr( "Click for triangle wave" ) );
+
+ m_sawWaveButton = new pixmapButton( this, tr( "Triangle wave" ) );
+ m_sawWaveButton -> move ( 230, 212 );
+ m_sawWaveButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "saw_active" ) );
+ m_sawWaveButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "saw_inactive" ) );
+ toolTip::add( m_sawWaveButton, tr( "Click for saw wave" ) );
+
+ m_sqrWaveButton = new pixmapButton( this, tr( "Square wave" ) );
+ m_sqrWaveButton -> move ( 230, 230 );
+ m_sqrWaveButton -> setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sqr_active" ) );
+ m_sqrWaveButton -> setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sqr_inactive" ) );
+ toolTip::add( m_sqrWaveButton, tr( "Click for square wave" ) );
+
+
+
+ connect( m_sinWaveButton, SIGNAL( clicked() ), this, SLOT( sinWaveClicked() ) );
+ connect( m_triWaveButton, SIGNAL( clicked() ), this, SLOT( triWaveClicked() ) );
+ connect( m_sawWaveButton, SIGNAL( clicked() ), this, SLOT( sawWaveClicked() ) );
+ connect( m_sqrWaveButton, SIGNAL( clicked() ), this, SLOT( sqrWaveClicked() ) );
+ connect( m_normalizeButton, SIGNAL( clicked() ), this, SLOT( normalizeClicked() ) );
+ connect( m_invertButton, SIGNAL( clicked() ), this, SLOT( invertClicked() ) );
+ connect( m_smoothButton, SIGNAL( clicked() ), this, SLOT( smoothClicked() ) );
+ connect( m_phaseLeftButton, SIGNAL( clicked() ), this, SLOT( phaseLeftClicked() ) );
+ connect( m_phaseRightButton, SIGNAL( clicked() ), this, SLOT( phaseRightClicked() ) );
+ connect( m_loadButton, SIGNAL( clicked() ), this, SLOT( loadClicked() ) );
+
+ connect( a1_selectButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) );
+ connect( a2_selectButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) );
+ connect( b1_selectButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) );
+ connect( b2_selectButton, SIGNAL( clicked() ), this, SLOT( updateLayout() ) );
+
+ updateLayout();
+}
+
+
+WatsynView::~WatsynView()
+{
+}
+
+
+
+void WatsynView::updateLayout()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->show();
+ a2_graph->hide();
+ b1_graph->hide();
+ b2_graph->hide();
+ break;
+ case A2_OSC:
+ a1_graph->hide();
+ a2_graph->show();
+ b1_graph->hide();
+ b2_graph->hide();
+ break;
+ case B1_OSC:
+ a1_graph->hide();
+ a2_graph->hide();
+ b1_graph->show();
+ b2_graph->hide();
+ break;
+ case B2_OSC:
+ a1_graph->hide();
+ a2_graph->hide();
+ b1_graph->hide();
+ b2_graph->show();
+ break;
+ }
+}
+
+
+
+void WatsynView::sinWaveClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->setWaveToSine();
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->setWaveToSine();
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->setWaveToSine();
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->setWaveToSine();
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::triWaveClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->setWaveToTriangle();
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->setWaveToTriangle();
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->setWaveToTriangle();
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->setWaveToTriangle();
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::sawWaveClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->setWaveToSaw();
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->setWaveToSaw();
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->setWaveToSaw();
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->setWaveToSaw();
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::sqrWaveClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->setWaveToSquare();
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->setWaveToSquare();
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->setWaveToSquare();
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->setWaveToSquare();
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::normalizeClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->normalize();
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->normalize();
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->normalize();
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->normalize();
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::invertClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->invert();
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->invert();
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->invert();
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->invert();
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::smoothClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->smooth();
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->smooth();
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->smooth();
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->smooth();
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::phaseLeftClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->shiftPhase( -15 );
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->shiftPhase( -15 );
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->shiftPhase( -15 );
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->shiftPhase( -15 );
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::phaseRightClicked()
+{
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->shiftPhase( 15 );
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->shiftPhase( 15 );
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->shiftPhase( 15 );
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->shiftPhase( 15 );
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::loadClicked()
+{
+ QString fileName;
+ switch( m_selectedGraphGroup->model()->value() )
+ {
+ case A1_OSC:
+ a1_graph->model()->setWaveToUser();
+ engine::getSong()->setModified();
+ break;
+ case A2_OSC:
+ a2_graph->model()->setWaveToUser();
+ engine::getSong()->setModified();
+ break;
+ case B1_OSC:
+ b1_graph->model()->setWaveToUser();
+ engine::getSong()->setModified();
+ break;
+ case B2_OSC:
+ b2_graph->model()->setWaveToUser();
+ engine::getSong()->setModified();
+ break;
+ }
+}
+
+
+void WatsynView::modelChanged()
+{
+ WatsynInstrument * w = castModel<WatsynInstrument>();
+
+ a1_volKnob -> setModel( &w -> a1_vol );
+ a2_volKnob -> setModel( &w -> a2_vol );
+ b1_volKnob -> setModel( &w -> b1_vol );
+ b2_volKnob -> setModel( &w -> b2_vol );
+
+ a1_panKnob -> setModel( &w -> a1_pan );
+ a2_panKnob -> setModel( &w -> a2_pan );
+ b1_panKnob -> setModel( &w -> b1_pan );
+ b2_panKnob -> setModel( &w -> b2_pan );
+
+ a1_multKnob -> setModel( &w -> a1_mult );
+ a2_multKnob -> setModel( &w -> a2_mult );
+ b1_multKnob -> setModel( &w -> b1_mult );
+ b2_multKnob -> setModel( &w -> b2_mult );
+
+ a1_ltuneKnob -> setModel( &w -> a1_ltune );
+ a2_ltuneKnob -> setModel( &w -> a2_ltune );
+ b1_ltuneKnob -> setModel( &w -> b1_ltune );
+ b2_ltuneKnob -> setModel( &w -> b2_ltune );
+
+ a1_rtuneKnob -> setModel( &w -> a1_rtune );
+ a2_rtuneKnob -> setModel( &w -> a2_rtune );
+ b1_rtuneKnob -> setModel( &w -> b1_rtune );
+ b2_rtuneKnob -> setModel( &w -> b2_rtune );
+
+ m_abmixKnob -> setModel( &w -> m_abmix );
+
+ m_selectedGraphGroup -> setModel( &w -> m_selectedGraph );
+
+ m_aModGroup -> setModel( &w -> m_amod );
+ m_bModGroup -> setModel( &w -> m_bmod );
+
+ a1_graph -> setModel( &w -> a1_graph );
+ a2_graph -> setModel( &w -> a2_graph );
+ b1_graph -> setModel( &w -> b1_graph );
+ b2_graph -> setModel( &w -> b2_graph );
+
+ m_envAmtKnob -> setModel( &w -> m_envAmt );
+ m_envAttKnob -> setModel( &w -> m_envAtt );
+ m_envHoldKnob -> setModel( &w -> m_envHold );
+ m_envDecKnob -> setModel( &w -> m_envDec );
+
+ m_xtalkKnob -> setModel( &w -> m_xtalk );
+}
+
+
+
+
+
+extern "C"
+{
+
+// necessary for getting instance out of shared lib
+Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data )
+{
+ return( new WatsynInstrument( static_cast<InstrumentTrack *>( _data ) ) );
+}
+
+
+}
+
+
+#include "moc_Watsyn.cxx"
diff --git a/plugins/watsyn/Watsyn.h b/plugins/watsyn/Watsyn.h
new file mode 100644
index 0000000..c4fb63a
--- /dev/null
+++ b/plugins/watsyn/Watsyn.h
@@ -0,0 +1,378 @@
+/*
+ * Watsyn.h - a 4-oscillator modulating wavetable synth
+ *
+ * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#ifndef WATSYN_H
+#define WATSYN_H
+
+#include "Instrument.h"
+#include "InstrumentView.h"
+#include "graph.h"
+#include "AutomatableModel.h"
+#include "automatable_button.h"
+#include "TempoSyncKnob.h"
+#include "NotePlayHandle.h"
+#include "pixmap_button.h"
+#include <samplerate.h>
+
+
+#define makeknob( name, x, y, hint, unit, oname ) \
+ name = new knob( knobStyled, this ); \
+ name ->move( x, y ); \
+ name ->setHintText( tr( hint ) + " ", unit ); \
+ name ->setObjectName( oname ); \
+ name ->setFixedSize( 19, 19 );
+
+#define maketsknob( name, x, y, hint, unit, oname ) \
+ name = new TempoSyncKnob( knobStyled, this ); \
+ name ->move( x, y ); \
+ name ->setHintText( tr( hint ) + " ", unit ); \
+ name ->setObjectName( oname ); \
+ name ->setFixedSize( 19, 19 );
+
+#define A1ROW 26
+#define A2ROW 49
+#define B1ROW 72
+#define B2ROW 95
+
+
+const int GRAPHLEN = 220; // don't change - must be same as the size of the widget
+
+const int WAVERATIO = 32; // oversampling ratio
+
+const int WAVELEN = GRAPHLEN * WAVERATIO;
+const int PMOD_AMT = WAVELEN / 2;
+
+const int MOD_MIX = 0;
+const int MOD_AM = 1;
+const int MOD_RM = 2;
+const int MOD_PM = 3;
+const int NUM_MODS = 4;
+
+const int A1_OSC = 0;
+const int A2_OSC = 1;
+const int B1_OSC = 2;
+const int B2_OSC = 3;
+const int NUM_OSCS = 4;
+
+class WatsynInstrument;
+
+class WatsynObject
+{
+public:
+ WatsynObject( float * _A1wave, float * _A2wave,
+ float * _B1wave, float * _B2wave,
+ int _amod, int _bmod, const sample_rate_t _samplerate, NotePlayHandle * _nph, fpp_t _frames,
+ WatsynInstrument * _w );
+ virtual ~WatsynObject();
+
+ void renderOutput( fpp_t _frames );
+
+ inline sampleFrame * abuf() const
+ {
+ return m_abuf;
+ }
+ inline sampleFrame * bbuf() const
+ {
+ return m_bbuf;
+ }
+ inline sample_rate_t samplerate() const
+ {
+ return m_samplerate;
+ }
+
+private:
+ int m_amod;
+ int m_bmod;
+
+ const sample_rate_t m_samplerate;
+ NotePlayHandle * m_nph;
+
+ fpp_t m_fpp;
+
+ WatsynInstrument * m_parent;
+
+ sampleFrame * m_abuf;
+ sampleFrame * m_bbuf;
+
+ float m_lphase [NUM_OSCS];
+ float m_rphase [NUM_OSCS];
+
+ float m_A1wave [WAVELEN];
+ float m_A2wave [WAVELEN];
+ float m_B1wave [WAVELEN];
+ float m_B2wave [WAVELEN];
+};
+
+class WatsynInstrument : public Instrument
+{
+ Q_OBJECT
+public:
+ WatsynInstrument( InstrumentTrack * _instrument_track );
+ virtual ~WatsynInstrument();
+
+ virtual void playNote( NotePlayHandle * _n,
+ sampleFrame * _working_buffer );
+ virtual void deleteNotePluginData( NotePlayHandle * _n );
+
+
+ virtual void saveSettings( QDomDocument & _doc,
+ QDomElement & _this );
+ virtual void loadSettings( const QDomElement & _this );
+
+ virtual QString nodeName() const;
+
+ virtual f_cnt_t desiredReleaseFrames() const
+ {
+ return( 64 );
+ }
+
+ virtual PluginView * instantiateView( QWidget * _parent );
+
+public slots:
+ void updateVolumes();
+ void updateFreqA1();
+ void updateFreqA2();
+ void updateFreqB1();
+ void updateFreqB2();
+ void updateWaveA1();
+ void updateWaveA2();
+ void updateWaveB1();
+ void updateWaveB2();
+
+protected:
+ float m_lvol [NUM_OSCS];
+ float m_rvol [NUM_OSCS];
+
+ float m_lfreq [NUM_OSCS];
+ float m_rfreq [NUM_OSCS];
+
+private:
+ inline float leftCh( float _vol, float _pan )
+ {
+ return ( _pan <= 0 ? 1.0 : 1.0 - ( _pan / 100.0 ) ) * _vol / 100.0;
+ }
+
+ inline float rightCh( float _vol, float _pan )
+ {
+ return ( _pan >= 0 ? 1.0 : 1.0 + ( _pan / 100.0 ) ) * _vol / 100.0;
+ }
+
+ // memcpy utilizing libsamplerate (src) for sinc interpolation
+ inline void srccpy( float * _dst, float * _src )
+ {
+ int err;
+ const int margin = 64;
+
+ // copy to temp array
+ float tmps [ GRAPHLEN + margin ]; // temp array in stack
+ float * tmp = &tmps[0];
+
+ memcpy( tmp, _src, sizeof( float ) * GRAPHLEN );
+ memcpy( tmp + GRAPHLEN, _src, sizeof( float ) * margin );
+ SRC_STATE * src_state = src_new( SRC_SINC_FASTEST, 1, &err );
+ SRC_DATA src_data;
+ src_data.data_in = tmp;
+ src_data.input_frames = GRAPHLEN + margin;
+ src_data.data_out = _dst;
+ src_data.output_frames = WAVELEN;
+ src_data.src_ratio = static_cast<double>( WAVERATIO );
+ src_data.end_of_input = 0;
+ err = src_process( src_state, &src_data );
+ if( err ) { qDebug( "Watsyn SRC error: %s", src_strerror( err ) ); }
+ src_delete( src_state );
+ }
+
+ // memcpy utilizing cubic interpolation
+/* inline void cipcpy( float * _dst, float * _src )
+ {
+ // calculate cyclic tangents
+ float tang[GRAPHLEN];
+ tang[0] = ( _src[1] - _src[ GRAPHLEN - 1] ) / 2;
+ tang[ GRAPHLEN - 1 ] = ( _src[0] - _src[ GRAPHLEN - 2 ] ) / 2;
+ for( int i = 1; i < GRAPHLEN-1; i++ )
+ {
+ tang[i] = ( _src[i+1] - _src[i-1] ) / 2;
+ }
+
+ // calculate cspline
+ for( int i=0; i < WAVELEN; i++ )
+ {
+ const float s1 = _src[ i / WAVERATIO ];
+ const float s2 = _src[ ( i / WAVERATIO + 1 ) % GRAPHLEN ];
+ const float m1 = tang[ i / WAVERATIO ];
+ const float m2 = tang[ ( i / WAVERATIO + 1 ) % GRAPHLEN ];
+
+ const float x = static_cast<float>( i % WAVERATIO ) / WAVERATIO;
+ const float x2 = x * x;
+ const float x3 = x * x * x;
+
+ _dst[i] = ( ( x3 * 2.0 - x2 * 3.0 + 1.0 ) * s1 ) +
+ ( ( x3 * -2.0 + x2 * 3.0 ) * s2 ) +
+ ( ( x3 - x2 * 2 + x ) * m1 ) +
+ ( ( x3 - x2 ) * m2 );
+ }
+ }*/
+
+
+ FloatModel a1_vol;
+ FloatModel a2_vol;
+ FloatModel b1_vol;
+ FloatModel b2_vol;
+
+ FloatModel a1_pan;
+ FloatModel a2_pan;
+ FloatModel b1_pan;
+ FloatModel b2_pan;
+
+ FloatModel a1_mult;
+ FloatModel a2_mult;
+ FloatModel b1_mult;
+ FloatModel b2_mult;
+
+ FloatModel a1_ltune;
+ FloatModel a2_ltune;
+ FloatModel b1_ltune;
+ FloatModel b2_ltune;
+
+ FloatModel a1_rtune;
+ FloatModel a2_rtune;
+ FloatModel b1_rtune;
+ FloatModel b2_rtune;
+
+ graphModel a1_graph;
+ graphModel a2_graph;
+ graphModel b1_graph;
+ graphModel b2_graph;
+
+ FloatModel m_abmix;
+
+ FloatModel m_envAmt;
+
+ TempoSyncKnobModel m_envAtt;
+ TempoSyncKnobModel m_envHold;
+ TempoSyncKnobModel m_envDec;
+
+ FloatModel m_xtalk;
+
+ IntModel m_amod;
+ IntModel m_bmod;
+
+ IntModel m_selectedGraph;
+
+ float A1_wave [WAVELEN];
+ float A2_wave [WAVELEN];
+ float B1_wave [WAVELEN];
+ float B2_wave [WAVELEN];
+
+ friend class WatsynObject;
+ friend class WatsynView;
+};
+
+
+class WatsynView : public InstrumentView
+{
+ Q_OBJECT
+public:
+ WatsynView( Instrument * _instrument,
+ QWidget * _parent );
+ virtual ~WatsynView();
+
+protected slots:
+ void updateLayout();
+
+ void sinWaveClicked();
+ void triWaveClicked();
+ void sawWaveClicked();
+ void sqrWaveClicked();
+
+ void smoothClicked();
+ void normalizeClicked();
+ void invertClicked();
+ void phaseLeftClicked();
+ void phaseRightClicked();
+ void loadClicked();
+
+private:
+ virtual void modelChanged();
+
+// knobs
+ knob * a1_volKnob;
+ knob * a2_volKnob;
+ knob * b1_volKnob;
+ knob * b2_volKnob;
+
+ knob * a1_panKnob;
+ knob * a2_panKnob;
+ knob * b1_panKnob;
+ knob * b2_panKnob;
+
+ knob * a1_multKnob;
+ knob * a2_multKnob;
+ knob * b1_multKnob;
+ knob * b2_multKnob;
+
+ knob * a1_ltuneKnob;
+ knob * a2_ltuneKnob;
+ knob * b1_ltuneKnob;
+ knob * b2_ltuneKnob;
+
+ knob * a1_rtuneKnob;
+ knob * a2_rtuneKnob;
+ knob * b1_rtuneKnob;
+ knob * b2_rtuneKnob;
+
+ knob * m_abmixKnob;
+
+ knob * m_envAmtKnob;
+
+ TempoSyncKnob * m_envAttKnob;
+ TempoSyncKnob * m_envHoldKnob;
+ TempoSyncKnob * m_envDecKnob;
+
+ knob * m_xtalkKnob;
+
+ automatableButtonGroup * m_selectedGraphGroup;
+ automatableButtonGroup * m_aModGroup;
+ automatableButtonGroup * m_bModGroup;
+
+ graph * a1_graph;
+ graph * a2_graph;
+ graph * b1_graph;
+ graph * b2_graph;
+
+ pixmapButton * m_sinWaveButton;
+ pixmapButton * m_triWaveButton;
+ pixmapButton * m_sawWaveButton;
+ pixmapButton * m_sqrWaveButton;
+ pixmapButton * m_normalizeButton;
+ pixmapButton * m_invertButton;
+ pixmapButton * m_smoothButton;
+ pixmapButton * m_phaseLeftButton;
+ pixmapButton * m_phaseRightButton;
+ pixmapButton * m_loadButton;
+
+};
+
+#endif
diff --git a/plugins/watsyn/a1_active.png b/plugins/watsyn/a1_active.png
new file mode 100644
index 0000000..06dbee1
Binary files /dev/null and b/plugins/watsyn/a1_active.png differ
diff --git a/plugins/watsyn/a1_inactive.png b/plugins/watsyn/a1_inactive.png
new file mode 100644
index 0000000..2352da0
Binary files /dev/null and b/plugins/watsyn/a1_inactive.png differ
diff --git a/plugins/watsyn/a2_active.png b/plugins/watsyn/a2_active.png
new file mode 100644
index 0000000..cd8963a
Binary files /dev/null and b/plugins/watsyn/a2_active.png differ
diff --git a/plugins/watsyn/a2_inactive.png b/plugins/watsyn/a2_inactive.png
new file mode 100644
index 0000000..6aeacac
Binary files /dev/null and b/plugins/watsyn/a2_inactive.png differ
diff --git a/plugins/watsyn/aam_active.png b/plugins/watsyn/aam_active.png
new file mode 100644
index 0000000..984c8f7
Binary files /dev/null and b/plugins/watsyn/aam_active.png differ
diff --git a/plugins/watsyn/aam_inactive.png b/plugins/watsyn/aam_inactive.png
new file mode 100644
index 0000000..979e48b
Binary files /dev/null and b/plugins/watsyn/aam_inactive.png differ
diff --git a/plugins/watsyn/amix_active.png b/plugins/watsyn/amix_active.png
new file mode 100644
index 0000000..6c76d44
Binary files /dev/null and b/plugins/watsyn/amix_active.png differ
diff --git a/plugins/watsyn/amix_inactive.png b/plugins/watsyn/amix_inactive.png
new file mode 100644
index 0000000..846cbf6
Binary files /dev/null and b/plugins/watsyn/amix_inactive.png differ
diff --git a/plugins/watsyn/apm_active.png b/plugins/watsyn/apm_active.png
new file mode 100644
index 0000000..3011bfe
Binary files /dev/null and b/plugins/watsyn/apm_active.png differ
diff --git a/plugins/watsyn/apm_inactive.png b/plugins/watsyn/apm_inactive.png
new file mode 100644
index 0000000..2ecea06
Binary files /dev/null and b/plugins/watsyn/apm_inactive.png differ
diff --git a/plugins/watsyn/arm_active.png b/plugins/watsyn/arm_active.png
new file mode 100644
index 0000000..cd70a1f
Binary files /dev/null and b/plugins/watsyn/arm_active.png differ
diff --git a/plugins/watsyn/arm_inactive.png b/plugins/watsyn/arm_inactive.png
new file mode 100644
index 0000000..8fed339
Binary files /dev/null and b/plugins/watsyn/arm_inactive.png differ
diff --git a/plugins/watsyn/artwork.png b/plugins/watsyn/artwork.png
new file mode 100644
index 0000000..bd321cd
Binary files /dev/null and b/plugins/watsyn/artwork.png differ
diff --git a/plugins/watsyn/b1_active.png b/plugins/watsyn/b1_active.png
new file mode 100644
index 0000000..5788f45
Binary files /dev/null and b/plugins/watsyn/b1_active.png differ
diff --git a/plugins/watsyn/b1_inactive.png b/plugins/watsyn/b1_inactive.png
new file mode 100644
index 0000000..780c3b1
Binary files /dev/null and b/plugins/watsyn/b1_inactive.png differ
diff --git a/plugins/watsyn/b2_active.png b/plugins/watsyn/b2_active.png
new file mode 100644
index 0000000..cba0847
Binary files /dev/null and b/plugins/watsyn/b2_active.png differ
diff --git a/plugins/watsyn/b2_inactive.png b/plugins/watsyn/b2_inactive.png
new file mode 100644
index 0000000..00bfa14
Binary files /dev/null and b/plugins/watsyn/b2_inactive.png differ
diff --git a/plugins/watsyn/bam_active.png b/plugins/watsyn/bam_active.png
new file mode 100644
index 0000000..194b9d9
Binary files /dev/null and b/plugins/watsyn/bam_active.png differ
diff --git a/plugins/watsyn/bam_inactive.png b/plugins/watsyn/bam_inactive.png
new file mode 100644
index 0000000..b679094
Binary files /dev/null and b/plugins/watsyn/bam_inactive.png differ
diff --git a/plugins/watsyn/bmix_active.png b/plugins/watsyn/bmix_active.png
new file mode 100644
index 0000000..8a2fbc2
Binary files /dev/null and b/plugins/watsyn/bmix_active.png differ
diff --git a/plugins/watsyn/bmix_inactive.png b/plugins/watsyn/bmix_inactive.png
new file mode 100644
index 0000000..60b7aa3
Binary files /dev/null and b/plugins/watsyn/bmix_inactive.png differ
diff --git a/plugins/watsyn/bpm_active.png b/plugins/watsyn/bpm_active.png
new file mode 100644
index 0000000..250b5ff
Binary files /dev/null and b/plugins/watsyn/bpm_active.png differ
diff --git a/plugins/watsyn/bpm_inactive.png b/plugins/watsyn/bpm_inactive.png
new file mode 100644
index 0000000..94d2a94
Binary files /dev/null and b/plugins/watsyn/bpm_inactive.png differ
diff --git a/plugins/watsyn/brm_active.png b/plugins/watsyn/brm_active.png
new file mode 100644
index 0000000..2bed299
Binary files /dev/null and b/plugins/watsyn/brm_active.png differ
diff --git a/plugins/watsyn/brm_inactive.png b/plugins/watsyn/brm_inactive.png
new file mode 100644
index 0000000..03a3612
Binary files /dev/null and b/plugins/watsyn/brm_inactive.png differ
diff --git a/plugins/watsyn/inv_active.png b/plugins/watsyn/inv_active.png
new file mode 100644
index 0000000..31aacc6
Binary files /dev/null and b/plugins/watsyn/inv_active.png differ
diff --git a/plugins/watsyn/inv_inactive.png b/plugins/watsyn/inv_inactive.png
new file mode 100644
index 0000000..637bf53
Binary files /dev/null and b/plugins/watsyn/inv_inactive.png differ
diff --git a/plugins/watsyn/load_active.png b/plugins/watsyn/load_active.png
new file mode 100644
index 0000000..e704e1d
Binary files /dev/null and b/plugins/watsyn/load_active.png differ
diff --git a/plugins/watsyn/load_inactive.png b/plugins/watsyn/load_inactive.png
new file mode 100644
index 0000000..93b1926
Binary files /dev/null and b/plugins/watsyn/load_inactive.png differ
diff --git a/plugins/watsyn/logo.png b/plugins/watsyn/logo.png
new file mode 100644
index 0000000..f18957b
Binary files /dev/null and b/plugins/watsyn/logo.png differ
diff --git a/plugins/watsyn/norm_active.png b/plugins/watsyn/norm_active.png
new file mode 100644
index 0000000..2795f27
Binary files /dev/null and b/plugins/watsyn/norm_active.png differ
diff --git a/plugins/watsyn/norm_inactive.png b/plugins/watsyn/norm_inactive.png
new file mode 100644
index 0000000..1fd29f4
Binary files /dev/null and b/plugins/watsyn/norm_inactive.png differ
diff --git a/plugins/watsyn/phl_active.png b/plugins/watsyn/phl_active.png
new file mode 100644
index 0000000..b4e3424
Binary files /dev/null and b/plugins/watsyn/phl_active.png differ
diff --git a/plugins/watsyn/phl_inactive.png b/plugins/watsyn/phl_inactive.png
new file mode 100644
index 0000000..ef55ac0
Binary files /dev/null and b/plugins/watsyn/phl_inactive.png differ
diff --git a/plugins/watsyn/phr_active.png b/plugins/watsyn/phr_active.png
new file mode 100644
index 0000000..9d22ada
Binary files /dev/null and b/plugins/watsyn/phr_active.png differ
diff --git a/plugins/watsyn/phr_inactive.png b/plugins/watsyn/phr_inactive.png
new file mode 100644
index 0000000..2ce5ccf
Binary files /dev/null and b/plugins/watsyn/phr_inactive.png differ
diff --git a/plugins/watsyn/saw_active.png b/plugins/watsyn/saw_active.png
new file mode 100644
index 0000000..da9dcee
Binary files /dev/null and b/plugins/watsyn/saw_active.png differ
diff --git a/plugins/watsyn/saw_inactive.png b/plugins/watsyn/saw_inactive.png
new file mode 100644
index 0000000..570dab7
Binary files /dev/null and b/plugins/watsyn/saw_inactive.png differ
diff --git a/plugins/watsyn/sin_active.png b/plugins/watsyn/sin_active.png
new file mode 100644
index 0000000..c3cbffc
Binary files /dev/null and b/plugins/watsyn/sin_active.png differ
diff --git a/plugins/watsyn/sin_inactive.png b/plugins/watsyn/sin_inactive.png
new file mode 100644
index 0000000..afa3634
Binary files /dev/null and b/plugins/watsyn/sin_inactive.png differ
diff --git a/plugins/watsyn/smooth_active.png b/plugins/watsyn/smooth_active.png
new file mode 100644
index 0000000..e23abe2
Binary files /dev/null and b/plugins/watsyn/smooth_active.png differ
diff --git a/plugins/watsyn/smooth_inactive.png b/plugins/watsyn/smooth_inactive.png
new file mode 100644
index 0000000..7f95114
Binary files /dev/null and b/plugins/watsyn/smooth_inactive.png differ
diff --git a/plugins/watsyn/sqr_active.png b/plugins/watsyn/sqr_active.png
new file mode 100644
index 0000000..444bcea
Binary files /dev/null and b/plugins/watsyn/sqr_active.png differ
diff --git a/plugins/watsyn/sqr_inactive.png b/plugins/watsyn/sqr_inactive.png
new file mode 100644
index 0000000..c61f086
Binary files /dev/null and b/plugins/watsyn/sqr_inactive.png differ
diff --git a/plugins/watsyn/tri_active.png b/plugins/watsyn/tri_active.png
new file mode 100644
index 0000000..690d1eb
Binary files /dev/null and b/plugins/watsyn/tri_active.png differ
diff --git a/plugins/watsyn/tri_inactive.png b/plugins/watsyn/tri_inactive.png
new file mode 100644
index 0000000..1e8f13c
Binary files /dev/null and b/plugins/watsyn/tri_inactive.png differ
diff --git a/plugins/watsyn/wavegraph.png b/plugins/watsyn/wavegraph.png
new file mode 100644
index 0000000..97b66ef
Binary files /dev/null and b/plugins/watsyn/wavegraph.png differ
diff --git a/plugins/waveshaper/CMakeLists.txt b/plugins/waveshaper/CMakeLists.txt
index f4b4bc9..da44322 100644
--- a/plugins/waveshaper/CMakeLists.txt
+++ b/plugins/waveshaper/CMakeLists.txt
@@ -1,3 +1,3 @@
INCLUDE(BuildPlugin)
-BUILD_PLUGIN(waveshaper waveshaper.cpp waveshaper_controls.cpp waveshaper_control_dialog.cpp MOCFILES waveshaper_controls.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
+BUILD_PLUGIN(waveshaper waveshaper.cpp waveshaper_controls.cpp waveshaper_control_dialog.cpp MOCFILES waveshaper_controls.h waveshaper_control_dialog.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png")
diff --git a/plugins/waveshaper/moc_waveshaper_controls.cxx_parameters b/plugins/waveshaper/moc_waveshaper_controls.cxx_parameters
deleted file mode 100644
index b676dee..0000000
--- a/plugins/waveshaper/moc_waveshaper_controls.cxx_parameters
+++ /dev/null
@@ -1,16 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/home/lukas/src/lmms/plugins/waveshaper
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DPLUGIN_NAME=waveshaper
--o
-/home/lukas/src/lmms/plugins/waveshaper/moc_waveshaper_controls.cxx
-/home/lukas/src/lmms/plugins/waveshaper/waveshaper_controls.h
diff --git a/plugins/waveshaper/waveshaper.cpp b/plugins/waveshaper/waveshaper.cpp
index 905e37a..7389e27 100644
--- a/plugins/waveshaper/waveshaper.cpp
+++ b/plugins/waveshaper/waveshaper.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -25,8 +25,9 @@
#include "waveshaper.h"
-#include <math.h>
+#include "lmms_math.h"
#include "embed.cpp"
+#include "interpolation.h"
extern "C"
@@ -77,23 +78,25 @@ bool waveShaperEffect::processAudioBuffer( sampleFrame * _buf,
// variables for effect
int i = 0;
- float lookup;
- float frac;
- float posneg;
double out_sum = 0.0;
const float d = dryLevel();
const float w = wetLevel();
+ const float input = m_wsControls.m_inputModel.value();
+ const float output = m_wsControls.m_outputModel.value();
+ const float * samples = m_wsControls.m_wavegraphModel.samples();
+ const bool clip = m_wsControls.m_clipModel.value();
+
for( fpp_t f = 0; f < _frames; ++f )
{
- sample_t s[2] = { _buf[f][0], _buf[f][1] };
+ float s[2] = { _buf[f][0], _buf[f][1] };
// apply input gain
- s[0] *= m_wsControls.m_inputModel.value();
- s[1] *= m_wsControls.m_inputModel.value();
+ s[0] *= input;
+ s[1] *= input;
// clip if clip enabled
- if( m_wsControls.m_clipModel.value() )
+ if( clip )
{
s[0] = qBound( -1.0f, s[0], 1.0f );
s[1] = qBound( -1.0f, s[1], 1.0f );
@@ -101,40 +104,36 @@ bool waveShaperEffect::processAudioBuffer( sampleFrame * _buf,
// start effect
- for ( i=0; i <= 1; ++i )
+ for( i=0; i <= 1; ++i )
{
- lookup = fabsf( s[i] ) * 200.0f;
- posneg = s[i] < 0 ? -1.0f : 1.0f;
+ const int lookup = static_cast<int>( qAbs( s[i] ) * 200.0f );
+ const float frac = fraction( qAbs( s[i] ) * 200.0f );
+ const float posneg = s[i] < 0 ? -1.0f : 1.0f;
- if ( lookup < 1 )
+ if( lookup < 1 )
{
- frac = lookup - truncf(lookup);
- s[i] = frac * m_wsControls.m_wavegraphModel.samples()[0] * posneg;
+ s[i] = frac * samples[0] * posneg;
}
- else
- if ( lookup < 200 )
- {
- frac = lookup - truncf(lookup);
- s[i] =
- (( (1.0f-frac) * m_wsControls.m_wavegraphModel.samples()[ (int)truncf(lookup) - 1 ] ) +
- ( frac * m_wsControls.m_wavegraphModel.samples()[ (int)truncf(lookup) ] ))
+ else if( lookup < 200 )
+ {
+ s[i] = linearInterpolate( samples[ lookup - 1 ],
+ samples[ lookup ], frac )
* posneg;
}
else
{
- s[i] *= m_wsControls.m_wavegraphModel.samples()[199];
+ s[i] *= samples[199];
}
}
// apply output gain
- s[0] *= m_wsControls.m_outputModel.value();
- s[1] *= m_wsControls.m_outputModel.value();
+ s[0] *= output;
+ s[1] *= output;
+ out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1];
// mix wet/dry signals
_buf[f][0] = d * _buf[f][0] + w * s[0];
_buf[f][1] = d * _buf[f][1] + w * s[1];
-
- out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1];
}
checkGate( out_sum / _frames );
diff --git a/plugins/waveshaper/waveshaper.h b/plugins/waveshaper/waveshaper.h
index 84dde1f..a97603f 100644
--- a/plugins/waveshaper/waveshaper.h
+++ b/plugins/waveshaper/waveshaper.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/waveshaper/waveshaper_control_dialog.cpp b/plugins/waveshaper/waveshaper_control_dialog.cpp
index b32b5b2..7e3503d 100644
--- a/plugins/waveshaper/waveshaper_control_dialog.cpp
+++ b/plugins/waveshaper/waveshaper_control_dialog.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -116,3 +116,5 @@ waveShaperControlDialog::waveShaperControlDialog(
connect( subOneButton, SIGNAL( clicked() ),
_controls, SLOT( subOneClicked() ) );
}
+
+#include "moc_waveshaper_control_dialog.cxx"
diff --git a/plugins/waveshaper/waveshaper_control_dialog.h b/plugins/waveshaper/waveshaper_control_dialog.h
index 0ad4b05..37d08b3 100644
--- a/plugins/waveshaper/waveshaper_control_dialog.h
+++ b/plugins/waveshaper/waveshaper_control_dialog.h
@@ -4,7 +4,7 @@
* * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -34,6 +34,7 @@ class waveShaperControls;
class waveShaperControlDialog : public EffectControlDialog
{
+ Q_OBJECT
public:
waveShaperControlDialog( waveShaperControls * _controls );
virtual ~waveShaperControlDialog()
diff --git a/plugins/waveshaper/waveshaper_controls.cpp b/plugins/waveshaper/waveshaper_controls.cpp
index 39e30d2..ac48727 100644
--- a/plugins/waveshaper/waveshaper_controls.cpp
+++ b/plugins/waveshaper/waveshaper_controls.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -28,6 +28,7 @@
#include "waveshaper_controls.h"
#include "waveshaper.h"
+#include "base64.h"
#include "graph.h"
#include "engine.h"
#include "song.h"
@@ -43,39 +44,14 @@ waveShaperControls::waveShaperControls( waveShaperEffect * _eff ) :
m_wavegraphModel( 0.0f, 1.0f, 200, this ),
m_clipModel( false, this )
{
- connect( &m_inputModel, SIGNAL( dataChanged() ),
- this, SLOT( changeInput() ) );
-
- connect( &m_outputModel, SIGNAL( dataChanged() ),
- this, SLOT( changeOutput() ) );
-
- connect( &m_clipModel, SIGNAL( dataChanged() ),
- this, SLOT( changeClip() ) );
-
connect( &m_wavegraphModel, SIGNAL( samplesChanged( int, int ) ),
this, SLOT( samplesChanged( int, int ) ) );
-
setDefaultShape();
-
}
-void waveShaperControls::changeInput()
-{
- engine::getSong()->setModified();
-}
-
-void waveShaperControls::changeOutput()
-{
- engine::getSong()->setModified();
-}
-
-void waveShaperControls::changeClip()
-{
- engine::getSong()->setModified();
-}
void waveShaperControls::samplesChanged( int _begin, int _end)
{
diff --git a/plugins/waveshaper/waveshaper_controls.h b/plugins/waveshaper/waveshaper_controls.h
index 3dc70bd..3828f1a 100644
--- a/plugins/waveshaper/waveshaper_controls.h
+++ b/plugins/waveshaper/waveshaper_controls.h
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,8 +23,8 @@
*
*/
-#ifndef _WAVESHAPER_CONTROLS_H
-#define _WAVESHAPER_CONTROLS_H
+#ifndef WAVESHAPER_CONTROLS_H
+#define WAVESHAPER_CONTROLS_H
#include "EffectControls.h"
#include "waveshaper_control_dialog.h"
@@ -64,10 +64,7 @@ public:
private slots:
- void changeInput();
- void changeOutput();
void samplesChanged( int, int );
- void changeClip();
void resetClicked();
void smoothClicked();
diff --git a/plugins/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/CMakeLists.txt
index 773632b..8864804 100644
--- a/plugins/zynaddsubfx/CMakeLists.txt
+++ b/plugins/zynaddsubfx/CMakeLists.txt
@@ -1,26 +1,5 @@
INCLUDE(BuildPlugin)
-SET(ZYN_SRC_GUI
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/MasterUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/VirKeyboard.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/ConfigUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/OscilGenUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/WidgetPDial.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/ResonanceUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/MicrotonalUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/ADnoteUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/PresetsUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/EffUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/FilterUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/PartUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/EnvelopeUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/LFOUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/SeqUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/PADnoteUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/SUBnoteUI.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/BankUI.cc"
-)
-
# definitions for ZynAddSubFX
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE)
@@ -48,42 +27,85 @@ ENDIF(LMMS_BUILD_WIN32)
SET(FLTK_SKIP_OPENGL TRUE)
SET(FLTK_SKIP_FORMS TRUE)
SET(FLTK_SKIP_IMAGES TRUE)
-SET(FLTK_SKIP_FLUID TRUE)
+SET(FLTK_SKIP_MATH TRUE)
+IF(MINGW_PREFIX)
+ SET(FLTK_SKIP_FLUID TRUE)
+ENDIF()
FIND_PACKAGE(FLTK REQUIRED)
+IF(MINGW_PREFIX)
+ SET(FLTK_FLUID_EXECUTABLE "${MINGW_PREFIX}/bin/fluid")
+ENDIF()
+
+IF(NOT EXISTS ${FLTK_FLUID_EXECUTABLE})
+ MESSAGE(FATAL_ERROR "Please install the fluid binary which is part of FLTK.")
+ENDIF()
+
INCLUDE_DIRECTORIES("${FLTK_INCLUDE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}"
${FFTW3F_INCLUDE_DIRS}
"${CMAKE_CURRENT_BINARY_DIR}"
"${CMAKE_BINARY_DIR}")
-set(ZASF_CORE_LIBS
- zynaddsubfx_input
- zynaddsubfx_output
- zynaddsubfx_misc
- zynaddsubfx_synth
- zynaddsubfx_seq
- zynaddsubfx_effect
- zynaddsubfx_params
- zynaddsubfx_dsp
- zynaddsubfx_samples
+
+include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/zynaddsubfx/src/UI)
+
+ADD_DEFINITIONS(-DPLUGINVERSION) # removes exit confirmation dialogs etc. in MasterUI.fl
+add_subdirectory(zynaddsubfx/src/Nio)
+add_subdirectory(zynaddsubfx/src/UI)
+
+SET(zynaddsubfx_core_SRCS
+ zynaddsubfx/src/DSP/AnalogFilter.cpp
+ zynaddsubfx/src/DSP/FFTwrapper.cpp
+ zynaddsubfx/src/DSP/Filter.cpp
+ zynaddsubfx/src/DSP/FormantFilter.cpp
+ zynaddsubfx/src/DSP/SVFilter.cpp
+ zynaddsubfx/src/DSP/Unison.cpp
+ zynaddsubfx/src/Effects/Alienwah.cpp
+ zynaddsubfx/src/Effects/Chorus.cpp
+ zynaddsubfx/src/Effects/Distorsion.cpp
+ zynaddsubfx/src/Effects/DynamicFilter.cpp
+ zynaddsubfx/src/Effects/Echo.cpp
+ zynaddsubfx/src/Effects/Effect.cpp
+ zynaddsubfx/src/Effects/EffectLFO.cpp
+ zynaddsubfx/src/Effects/EffectMgr.cpp
+ zynaddsubfx/src/Effects/EQ.cpp
+ zynaddsubfx/src/Effects/Phaser.cpp
+ zynaddsubfx/src/Effects/Reverb.cpp
+ zynaddsubfx/src/Misc/Bank.cpp
+ zynaddsubfx/src/Misc/Config.cpp
+ zynaddsubfx/src/Misc/Dump.cpp
+ zynaddsubfx/src/Misc/Master.cpp
+ zynaddsubfx/src/Misc/Microtonal.cpp
+ zynaddsubfx/src/Misc/Part.cpp
+ zynaddsubfx/src/Misc/Util.cpp
+ zynaddsubfx/src/Misc/QtXmlWrapper.cpp
+ zynaddsubfx/src/Misc/Recorder.cpp
+ zynaddsubfx/src/Misc/WavFile.cpp
+ zynaddsubfx/src/Misc/WaveShapeSmps.cpp
+ zynaddsubfx/src/Params/ADnoteParameters.cpp
+ zynaddsubfx/src/Params/Controller.cpp
+ zynaddsubfx/src/Params/EnvelopeParams.cpp
+ zynaddsubfx/src/Params/FilterParams.cpp
+ zynaddsubfx/src/Params/LFOParams.cpp
+ zynaddsubfx/src/Params/PADnoteParameters.cpp
+ zynaddsubfx/src/Params/Presets.cpp
+ zynaddsubfx/src/Params/PresetsArray.cpp
+ zynaddsubfx/src/Params/PresetsStore.cpp
+ zynaddsubfx/src/Params/SUBnoteParameters.cpp
+ zynaddsubfx/src/Synth/SynthNote.cpp
+ zynaddsubfx/src/Synth/ADnote.cpp
+ zynaddsubfx/src/Synth/Envelope.cpp
+ zynaddsubfx/src/Synth/LFO.cpp
+ zynaddsubfx/src/Synth/OscilGen.cpp
+ zynaddsubfx/src/Synth/PADnote.cpp
+ zynaddsubfx/src/Synth/Resonance.cpp
+ zynaddsubfx/src/Synth/SUBnote.cpp
)
-macro(unit_test NAME CXX_FILE FILES)
-endmacro(unit_test)
-
-add_subdirectory(src/Misc)
-add_subdirectory(src/Input)
-add_subdirectory(src/Synth)
-add_subdirectory(src/Output)
-add_subdirectory(src/Seq)
-add_subdirectory(src/Effects)
-add_subdirectory(src/Params)
-add_subdirectory(src/DSP)
-add_subdirectory(src/Samples)
-
-ADD_LIBRARY(ZynAddSubFxCore SHARED LocalZynAddSubFx.cpp)
-TARGET_LINK_LIBRARIES(ZynAddSubFxCore ${ZASF_CORE_LIBS} ${FFTW3F_LIBRARIES} ${QT_LIBRARIES} -lz -lpthread)
+
+ADD_LIBRARY(ZynAddSubFxCore SHARED LocalZynAddSubFx.cpp ${zynaddsubfx_core_SRCS})
+TARGET_LINK_LIBRARIES(ZynAddSubFxCore zynaddsubfx_nio ${FFTW3F_LIBRARIES} ${QT_LIBRARIES} -lz -lpthread)
IF(LMMS_BUILD_WIN32)
TARGET_LINK_LIBRARIES(ZynAddSubFxCore -lws2_32)
INSTALL(TARGETS ZynAddSubFxCore RUNTIME DESTINATION "${PLUGIN_DIR}")
@@ -106,12 +128,11 @@ ENDIF(WIN32)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PLUGIN_DIR}")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
-ADD_EXECUTABLE(RemoteZynAddSubFx RemoteZynAddSubFx.cpp ${ZYN_SRC_GUI} "${WINRC}")
+ADD_EXECUTABLE(RemoteZynAddSubFx RemoteZynAddSubFx.cpp "${WINRC}")
INSTALL(TARGETS RemoteZynAddSubFx RUNTIME DESTINATION "${PLUGIN_DIR}")
-TARGET_LINK_LIBRARIES(RemoteZynAddSubFx ${FLTK_LIBRARIES} -lpthread "-L\"${CMAKE_CURRENT_BINARY_DIR}\"" -lZynAddSubFxCore )
-ADD_DEPENDENCIES(RemoteZynAddSubFx ZynAddSubFxCore)
+TARGET_LINK_LIBRARIES(RemoteZynAddSubFx zynaddsubfx_gui ZynAddSubFxCore ${FLTK_LIBRARIES} -lpthread )
-# link system libraries when on win32
+# link Qt libraries when on win32
IF(LMMS_BUILD_WIN32)
TARGET_LINK_LIBRARIES(RemoteZynAddSubFx ${QT_LIBRARIES})
ENDIF(LMMS_BUILD_WIN32)
diff --git a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp
index 586481b..7bb7e76 100644
--- a/plugins/zynaddsubfx/LocalZynAddSubFx.cpp
+++ b/plugins/zynaddsubfx/LocalZynAddSubFx.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,20 +24,26 @@
#include <lmmsconfig.h>
+#include "zynaddsubfx/src/Misc/Util.h"
#include <unistd.h>
#include <ctime>
#include "LocalZynAddSubFx.h"
-#include "src/Input/NULLMidiIn.h"
-#include "src/Misc/Master.h"
-#include "src/Misc/Dump.h"
+#include "zynaddsubfx/src/Nio/NulEngine.h"
+#include "zynaddsubfx/src/Misc/Master.h"
+#include "zynaddsubfx/src/Misc/Part.h"
+#include "zynaddsubfx/src/Misc/Dump.h"
+SYNTH_T* synth = NULL;
+
int LocalZynAddSubFx::s_instanceCount = 0;
-LocalZynAddSubFx::LocalZynAddSubFx()
+LocalZynAddSubFx::LocalZynAddSubFx() :
+ m_master( NULL ),
+ m_ioEngine( NULL )
{
for( int i = 0; i < NumKeys; ++i )
{
@@ -56,17 +62,23 @@ LocalZynAddSubFx::LocalZynAddSubFx()
initConfig();
- OSCIL_SIZE = config.cfg.OscilSize;
+ synth = new SYNTH_T;
+ synth->oscilsize = config.cfg.OscilSize;
+ synth->alias();
srand( time( NULL ) );
- denormalkillbuf = new REALTYPE[SOUND_BUFFER_SIZE];
- for( int i = 0; i < SOUND_BUFFER_SIZE; ++i )
+
+ denormalkillbuf = new float[synth->buffersize];
+ for( int i = 0; i < synth->buffersize; ++i )
{
denormalkillbuf[i] = (RND-0.5)*1e-16;
}
}
+
++s_instanceCount;
+ m_ioEngine = new NulEngine;
+
m_master = new Master();
m_master->swaplr = 0;
}
@@ -77,6 +89,7 @@ LocalZynAddSubFx::LocalZynAddSubFx()
LocalZynAddSubFx::~LocalZynAddSubFx()
{
delete m_master;
+ delete m_ioEngine;
if( --s_instanceCount == 0 )
{
@@ -97,17 +110,19 @@ void LocalZynAddSubFx::initConfig()
-void LocalZynAddSubFx::setSampleRate( int _sampleRate )
+void LocalZynAddSubFx::setSampleRate( int sampleRate )
{
- SAMPLE_RATE = _sampleRate;
+ synth->samplerate = sampleRate;
+ synth->alias();
}
-void LocalZynAddSubFx::setBufferSize( int _bufferSize )
+void LocalZynAddSubFx::setBufferSize( int bufferSize )
{
- SOUND_BUFFER_SIZE = _bufferSize;
+ synth->buffersize = bufferSize;
+ synth->alias();
}
@@ -163,14 +178,12 @@ void LocalZynAddSubFx::setPresetDir( const std::string & _dir )
m_presetsDir = _dir;
for( int i = 0; i < MAX_BANK_ROOT_DIRS; ++i )
{
- if( config.cfg.bankRootDirList[i] == NULL )
+ if( config.cfg.bankRootDirList[i].empty() )
{
- config.cfg.bankRootDirList[i] = new char[MAX_STRING_SIZE];
- strcpy( config.cfg.bankRootDirList[i], m_presetsDir.c_str() );
+ config.cfg.bankRootDirList[i] = m_presetsDir;
break;
}
- else if( strcmp( config.cfg.bankRootDirList[i],
- m_presetsDir.c_str() ) == 0 )
+ else if( config.cfg.bankRootDirList[i] == m_presetsDir )
{
break;
}
@@ -205,41 +218,38 @@ void LocalZynAddSubFx::setPitchWheelBendRange( int semitones )
void LocalZynAddSubFx::processMidiEvent( const MidiEvent& event )
{
- // all functions are called while m_master->mutex is held
- static NULLMidiIn midiIn;
-
switch( event.type() )
{
case MidiNoteOn:
if( event.velocity() > 0 )
{
- if( event.key() <= 0 || event.key() >= 128 )
+ if( event.key() < 0 || event.key() > MidiMaxKey )
{
break;
}
if( m_runningNotes[event.key()] > 0 )
{
- m_master->NoteOff( event.channel(), event.key() );
+ m_master->noteOff( event.channel(), event.key() );
}
++m_runningNotes[event.key()];
- m_master->NoteOn( event.channel(), event.key(), event.velocity() );
+ m_master->noteOn( event.channel(), event.key(), event.velocity() );
break;
}
case MidiNoteOff:
- if( event.key() <= 0 || event.key() >= 128 )
+ if( event.key() < 0 || event.key() > MidiMaxKey )
{
break;
}
if( --m_runningNotes[event.key()] <= 0 )
{
- m_master->NoteOff( event.channel(), event.key() );
+ m_master->noteOff( event.channel(), event.key() );
}
break;
case MidiPitchBend:
- m_master->SetController( event.channel(), C_pitchwheel, event.pitchBend()-8192 );
+ m_master->setController( event.channel(), C_pitchwheel, event.pitchBend()-8192 );
break;
case MidiControlChange:
- m_master->SetController( event.channel(), midiIn.getcontroller( event.controllerNumber() ), event.controllerValue() );
+ m_master->setController( event.channel(), event.controllerNumber(), event.controllerValue() );
break;
default:
break;
@@ -251,12 +261,13 @@ void LocalZynAddSubFx::processMidiEvent( const MidiEvent& event )
void LocalZynAddSubFx::processAudio( sampleFrame * _out )
{
- REALTYPE outputl[SOUND_BUFFER_SIZE];
- REALTYPE outputr[SOUND_BUFFER_SIZE];
+ float outputl[synth->buffersize];
+ float outputr[synth->buffersize];
- m_master->GetAudioOutSamples( SOUND_BUFFER_SIZE, SAMPLE_RATE, outputl, outputr );
+ m_master->GetAudioOutSamples( synth->buffersize, synth->samplerate, outputl, outputr );
- for( int f = 0; f < SOUND_BUFFER_SIZE; ++f )
+ // TODO: move to MixHelpers
+ for( int f = 0; f < synth->buffersize; ++f )
{
_out[f][0] = outputl[f];
_out[f][1] = outputr[f];
diff --git a/plugins/zynaddsubfx/LocalZynAddSubFx.h b/plugins/zynaddsubfx/LocalZynAddSubFx.h
index baec213..b907734 100644
--- a/plugins/zynaddsubfx/LocalZynAddSubFx.h
+++ b/plugins/zynaddsubfx/LocalZynAddSubFx.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -29,6 +29,7 @@
#include "note.h"
class Master;
+class NulEngine;
class LocalZynAddSubFx
{
@@ -68,6 +69,7 @@ protected:
int m_runningNotes[NumKeys];
Master * m_master;
+ NulEngine* m_ioEngine;
} ;
diff --git a/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp b/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp
index 2e4535d..813ac51 100644
--- a/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp
+++ b/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,7 +35,8 @@
#include "RemoteZynAddSubFx.h"
#include "LocalZynAddSubFx.h"
-#include "src/UI/MasterUI.h"
+#include "zynaddsubfx/src/Nio/Nio.h"
+#include "zynaddsubfx/src/UI/MasterUI.h"
#include <FL/x.H>
@@ -49,6 +50,8 @@ public:
m_guiSleepTime( 100 ),
m_guiExit( false )
{
+ Nio::start();
+
setInputCount( 0 );
sendMessage( IdInitDone );
waitForMessage( IdInitDone );
@@ -65,6 +68,8 @@ public:
#else
usleep( m_guiSleepTime * 2 * 1000 );
#endif
+
+ Nio::stop();
}
virtual void updateSampleRate()
@@ -169,7 +174,7 @@ private:
void RemoteZynAddSubFx::guiThread()
{
- int exitProgram;
+ int exitProgram = 0;
MasterUI * ui = NULL;
while( !m_guiExit )
@@ -290,3 +295,22 @@ int main( int _argc, char * * _argv )
}
+#ifdef NTK_GUI
+static Fl_Tiled_Image *module_backdrop;
+#endif
+
+void set_module_parameters ( Fl_Widget *o )
+{
+#ifdef NTK_GUI
+ o->box( FL_DOWN_FRAME );
+ o->align( o->align() | FL_ALIGN_IMAGE_BACKDROP );
+ o->color( FL_BLACK );
+ o->image( module_backdrop );
+ o->labeltype( FL_SHADOW_LABEL );
+#else
+ o->box( FL_PLASTIC_UP_BOX );
+ o->color( FL_CYAN );
+ o->labeltype( FL_EMBOSSED_LABEL );
+#endif
+}
+
diff --git a/plugins/zynaddsubfx/RemoteZynAddSubFx.h b/plugins/zynaddsubfx/RemoteZynAddSubFx.h
index 23e9647..d33ce15 100644
--- a/plugins/zynaddsubfx/RemoteZynAddSubFx.h
+++ b/plugins/zynaddsubfx/RemoteZynAddSubFx.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/plugins/zynaddsubfx/ZynAddSubFx.cpp b/plugins/zynaddsubfx/ZynAddSubFx.cpp
index 8eca9fd..9cd11a2 100644
--- a/plugins/zynaddsubfx/ZynAddSubFx.cpp
+++ b/plugins/zynaddsubfx/ZynAddSubFx.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -343,7 +343,7 @@ void ZynAddSubFxInstrument::play( sampleFrame * _buf )
-bool ZynAddSubFxInstrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time )
+bool ZynAddSubFxInstrument::handleMidiEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset )
{
// do not forward external MIDI Control Change events if the according
// LED is not checked
@@ -533,6 +533,9 @@ ZynAddSubFxView::ZynAddSubFxView( Instrument * _instrument, QWidget * _parent )
m_toggleUIButton = new QPushButton( tr( "Show GUI" ), this );
m_toggleUIButton->setCheckable( true );
+#ifdef LMMS_BUILD_APPLE
+ m_toggleUIButton->setEnabled( false );
+#endif
m_toggleUIButton->setChecked( false );
m_toggleUIButton->setIcon( embed::getIconPixmap( "zoom" ) );
m_toggleUIButton->setFont( pointSize<8>( m_toggleUIButton->font() ) );
diff --git a/plugins/zynaddsubfx/ZynAddSubFx.h b/plugins/zynaddsubfx/ZynAddSubFx.h
index cb35b4c..c03129d 100644
--- a/plugins/zynaddsubfx/ZynAddSubFx.h
+++ b/plugins/zynaddsubfx/ZynAddSubFx.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -32,7 +32,7 @@
#include "Instrument.h"
#include "InstrumentView.h"
#include "RemotePlugin.h"
-#include "src/globals.h"
+#include "zynaddsubfx/src/globals.h"
class QPushButton;
@@ -70,7 +70,7 @@ public:
virtual void play( sampleFrame * _working_buffer );
- virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time = MidiTime() );
+ virtual bool handleMidiEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 );
virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
virtual void loadSettings( const QDomElement & _this );
diff --git a/plugins/zynaddsubfx/moc_ZynAddSubFx.cxx_parameters b/plugins/zynaddsubfx/moc_ZynAddSubFx.cxx_parameters
deleted file mode 100644
index 9305e1c..0000000
--- a/plugins/zynaddsubfx/moc_ZynAddSubFx.cxx_parameters
+++ /dev/null
@@ -1,23 +0,0 @@
--I/usr/include/qt4
--I/usr/include/qt4/QtGui
--I/usr/include/qt4/QtXml
--I/usr/include/qt4/QtCore
--I/usr/include
--I/home/lukas/src/lmms/plugins/zynaddsubfx
--I/home/lukas/src/lmms/plugins/zynaddsubfx
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/plugins/zynaddsubfx
--I/home/lukas/src/lmms
--I/home/lukas/src/lmms/include
--I/home/lukas/src/lmms/src/gui
--D$<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>
--DQT_GUI_LIB
--DQT_XML_LIB
--DQT_CORE_LIB
--DOS_LINUX
--DController=ZynController
--DASM_F2I_YES
--DPLUGIN_NAME=zynaddsubfx
--o
-/home/lukas/src/lmms/plugins/zynaddsubfx/moc_ZynAddSubFx.cxx
-/home/lukas/src/lmms/plugins/zynaddsubfx/ZynAddSubFx.h
diff --git a/plugins/zynaddsubfx/src/DSP/AnalogFilter.cpp b/plugins/zynaddsubfx/src/DSP/AnalogFilter.cpp
deleted file mode 100644
index bb1ad75..0000000
--- a/plugins/zynaddsubfx/src/DSP/AnalogFilter.cpp
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- AnalogFilter.cpp - Several analog filters (lowpass, highpass...)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <stdio.h>
-#include "AnalogFilter.h"
-
-AnalogFilter::AnalogFilter(unsigned char Ftype,
- REALTYPE Ffreq,
- REALTYPE Fq,
- unsigned char Fstages)
-{
- stages = Fstages;
- for(int i = 0; i < 3; i++) {
- oldc[i] = 0.0;
- oldd[i] = 0.0;
- c[i] = 0.0;
- d[i] = 0.0;
- }
- type = Ftype;
- freq = Ffreq;
- q = Fq;
- gain = 1.0;
- if(stages >= MAX_FILTER_STAGES)
- stages = MAX_FILTER_STAGES;
- cleanup();
- firsttime = 0;
- abovenq = 0;
- oldabovenq = 0;
- setfreq_and_q(Ffreq, Fq);
- firsttime = 1;
- d[0] = 0; //this is not used
- outgain = 1.0;
-}
-
-AnalogFilter::~AnalogFilter()
-{}
-
-void AnalogFilter::cleanup()
-{
- for(int i = 0; i < MAX_FILTER_STAGES + 1; i++) {
- x[i].c1 = 0.0;
- x[i].c2 = 0.0;
- y[i].c1 = 0.0;
- y[i].c2 = 0.0;
- oldx[i] = x[i];
- oldy[i] = y[i];
- }
- needsinterpolation = 0;
-}
-
-void AnalogFilter::computefiltercoefs()
-{
- REALTYPE tmp;
- REALTYPE omega, sn, cs, alpha, beta;
- int zerocoefs = 0; //this is used if the freq is too high
-
- //do not allow frequencies bigger than samplerate/2
- REALTYPE freq = this->freq;
- if(freq > (SAMPLE_RATE / 2 - 500.0)) {
- freq = SAMPLE_RATE / 2 - 500.0;
- zerocoefs = 1;
- }
- if(freq < 0.1)
- freq = 0.1;
- //do not allow bogus Q
- if(q < 0.0)
- q = 0.0;
- REALTYPE tmpq, tmpgain;
- if(stages == 0) {
- tmpq = q;
- tmpgain = gain;
- }
- else {
- tmpq = (q > 1.0 ? pow(q, 1.0 / (stages + 1)) : q);
- tmpgain = pow(gain, 1.0 / (stages + 1));
- }
-
- //most of theese are implementations of
- //the "Cookbook formulae for audio EQ" by Robert Bristow-Johnson
- //The original location of the Cookbook is:
- //http://www.harmony-central.com/Computer/Programming/Audio-EQ-Cookbook.txt
- switch(type) {
- case 0: //LPF 1 pole
- if(zerocoefs == 0)
- tmp = exp(-2.0 * PI * freq / SAMPLE_RATE);
- else
- tmp = 0.0;
- c[0] = 1.0 - tmp;
- c[1] = 0.0;
- c[2] = 0.0;
- d[1] = tmp;
- d[2] = 0.0;
- order = 1;
- break;
- case 1: //HPF 1 pole
- if(zerocoefs == 0)
- tmp = exp(-2.0 * PI * freq / SAMPLE_RATE);
- else
- tmp = 0.0;
- c[0] = (1.0 + tmp) / 2.0;
- c[1] = -(1.0 + tmp) / 2.0;
- c[2] = 0.0;
- d[1] = tmp;
- d[2] = 0.0;
- order = 1;
- break;
- case 2: //LPF 2 poles
- if(zerocoefs == 0) {
- omega = 2 * PI * freq / SAMPLE_RATE;
- sn = sin(omega);
- cs = cos(omega);
- alpha = sn / (2 * tmpq);
- tmp = 1 + alpha;
- c[0] = (1.0 - cs) / 2.0 / tmp;
- c[1] = (1.0 - cs) / tmp;
- c[2] = (1.0 - cs) / 2.0 / tmp;
- d[1] = -2 * cs / tmp * (-1);
- d[2] = (1 - alpha) / tmp * (-1);
- }
- else {
- c[0] = 1.0;
- c[1] = 0.0;
- c[2] = 0.0;
- d[1] = 0.0;
- d[2] = 0.0;
- }
- order = 2;
- break;
- case 3: //HPF 2 poles
- if(zerocoefs == 0) {
- omega = 2 * PI * freq / SAMPLE_RATE;
- sn = sin(omega);
- cs = cos(omega);
- alpha = sn / (2 * tmpq);
- tmp = 1 + alpha;
- c[0] = (1.0 + cs) / 2.0 / tmp;
- c[1] = -(1.0 + cs) / tmp;
- c[2] = (1.0 + cs) / 2.0 / tmp;
- d[1] = -2 * cs / tmp * (-1);
- d[2] = (1 - alpha) / tmp * (-1);
- }
- else {
- c[0] = 0.0;
- c[1] = 0.0;
- c[2] = 0.0;
- d[1] = 0.0;
- d[2] = 0.0;
- }
- order = 2;
- break;
- case 4: //BPF 2 poles
- if(zerocoefs == 0) {
- omega = 2 * PI * freq / SAMPLE_RATE;
- sn = sin(omega);
- cs = cos(omega);
- alpha = sn / (2 * tmpq);
- tmp = 1 + alpha;
- c[0] = alpha / tmp *sqrt(tmpq + 1);
- c[1] = 0;
- c[2] = -alpha / tmp *sqrt(tmpq + 1);
- d[1] = -2 * cs / tmp * (-1);
- d[2] = (1 - alpha) / tmp * (-1);
- }
- else {
- c[0] = 0.0;
- c[1] = 0.0;
- c[2] = 0.0;
- d[1] = 0.0;
- d[2] = 0.0;
- }
- order = 2;
- break;
- case 5: //NOTCH 2 poles
- if(zerocoefs == 0) {
- omega = 2 * PI * freq / SAMPLE_RATE;
- sn = sin(omega);
- cs = cos(omega);
- alpha = sn / (2 * sqrt(tmpq));
- tmp = 1 + alpha;
- c[0] = 1 / tmp;
- c[1] = -2 * cs / tmp;
- c[2] = 1 / tmp;
- d[1] = -2 * cs / tmp * (-1);
- d[2] = (1 - alpha) / tmp * (-1);
- }
- else {
- c[0] = 1.0;
- c[1] = 0.0;
- c[2] = 0.0;
- d[1] = 0.0;
- d[2] = 0.0;
- }
- order = 2;
- break;
- case 6: //PEAK (2 poles)
- if(zerocoefs == 0) {
- omega = 2 * PI * freq / SAMPLE_RATE;
- sn = sin(omega);
- cs = cos(omega);
- tmpq *= 3.0;
- alpha = sn / (2 * tmpq);
- tmp = 1 + alpha / tmpgain;
- c[0] = (1.0 + alpha * tmpgain) / tmp;
- c[1] = (-2.0 * cs) / tmp;
- c[2] = (1.0 - alpha * tmpgain) / tmp;
- d[1] = -2 * cs / tmp * (-1);
- d[2] = (1 - alpha / tmpgain) / tmp * (-1);
- }
- else {
- c[0] = 1.0;
- c[1] = 0.0;
- c[2] = 0.0;
- d[1] = 0.0;
- d[2] = 0.0;
- }
- order = 2;
- break;
- case 7: //Low Shelf - 2 poles
- if(zerocoefs == 0) {
- omega = 2 * PI * freq / SAMPLE_RATE;
- sn = sin(omega);
- cs = cos(omega);
- tmpq = sqrt(tmpq);
- alpha = sn / (2 * tmpq);
- beta = sqrt(tmpgain) / tmpq;
- tmp = (tmpgain + 1.0) + (tmpgain - 1.0) * cs + beta * sn;
-
- c[0] = tmpgain
- * ((tmpgain
- + 1.0) - (tmpgain - 1.0) * cs + beta * sn) / tmp;
- c[1] = 2.0 * tmpgain
- * ((tmpgain - 1.0) - (tmpgain + 1.0) * cs) / tmp;
- c[2] = tmpgain
- * ((tmpgain
- + 1.0) - (tmpgain - 1.0) * cs - beta * sn) / tmp;
- d[1] = -2.0 * ((tmpgain - 1.0) + (tmpgain + 1.0) * cs) / tmp * (-1);
- d[2] =
- ((tmpgain
- + 1.0) + (tmpgain - 1.0) * cs - beta * sn) / tmp * (-1);
- }
- else {
- c[0] = tmpgain;
- c[1] = 0.0;
- c[2] = 0.0;
- d[1] = 0.0;
- d[2] = 0.0;
- }
- order = 2;
- break;
- case 8: //High Shelf - 2 poles
- if(zerocoefs == 0) {
- omega = 2 * PI * freq / SAMPLE_RATE;
- sn = sin(omega);
- cs = cos(omega);
- tmpq = sqrt(tmpq);
- alpha = sn / (2 * tmpq);
- beta = sqrt(tmpgain) / tmpq;
- tmp = (tmpgain + 1.0) - (tmpgain - 1.0) * cs + beta * sn;
-
- c[0] = tmpgain
- * ((tmpgain
- + 1.0) + (tmpgain - 1.0) * cs + beta * sn) / tmp;
- c[1] = -2.0 * tmpgain
- * ((tmpgain - 1.0) + (tmpgain + 1.0) * cs) / tmp;
- c[2] = tmpgain
- * ((tmpgain
- + 1.0) + (tmpgain - 1.0) * cs - beta * sn) / tmp;
- d[1] = 2.0 * ((tmpgain - 1.0) - (tmpgain + 1.0) * cs) / tmp * (-1);
- d[2] =
- ((tmpgain
- + 1.0) - (tmpgain - 1.0) * cs - beta * sn) / tmp * (-1);
- }
- else {
- c[0] = 1.0;
- c[1] = 0.0;
- c[2] = 0.0;
- d[1] = 0.0;
- d[2] = 0.0;
- }
- order = 2;
- break;
- default: //wrong type
- type = 0;
- computefiltercoefs();
- break;
- }
-}
-
-
-void AnalogFilter::setfreq(REALTYPE frequency)
-{
- if(frequency < 0.1)
- frequency = 0.1;
- REALTYPE rap = freq / frequency;
- if(rap < 1.0)
- rap = 1.0 / rap;
-
- oldabovenq = abovenq;
- abovenq = frequency > (SAMPLE_RATE / 2 - 500.0);
-
- int nyquistthresh = (abovenq ^ oldabovenq);
-
-
- if((rap > 3.0) || (nyquistthresh != 0)) { //if the frequency is changed fast, it needs interpolation (now, filter and coeficients backup)
- for(int i = 0; i < 3; i++) {
- oldc[i] = c[i];
- oldd[i] = d[i];
- }
- for(int i = 0; i < MAX_FILTER_STAGES + 1; i++) {
- oldx[i] = x[i];
- oldy[i] = y[i];
- }
- if(firsttime == 0)
- needsinterpolation = 1;
- }
- freq = frequency;
- computefiltercoefs();
- firsttime = 0;
-}
-
-void AnalogFilter::setfreq_and_q(REALTYPE frequency, REALTYPE q_)
-{
- q = q_;
- setfreq(frequency);
-}
-
-void AnalogFilter::setq(REALTYPE q_)
-{
- q = q_;
- computefiltercoefs();
-}
-
-void AnalogFilter::settype(int type_)
-{
- type = type_;
- computefiltercoefs();
-}
-
-void AnalogFilter::setgain(REALTYPE dBgain)
-{
- gain = dB2rap(dBgain);
- computefiltercoefs();
-}
-
-void AnalogFilter::setstages(int stages_)
-{
- if(stages_ >= MAX_FILTER_STAGES)
- stages_ = MAX_FILTER_STAGES - 1;
- stages = stages_;
- cleanup();
- computefiltercoefs();
-}
-
-void AnalogFilter::singlefilterout(REALTYPE *smp,
- fstage &x,
- fstage &y,
- REALTYPE *c,
- REALTYPE *d)
-{
- int i;
- REALTYPE y0;
- if(order == 1) { //First order filter
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- y0 = smp[i] * c[0] + x.c1 * c[1] + y.c1 * d[1];
- y.c1 = y0;
- x.c1 = smp[i];
- //output
- smp[i] = y0;
- }
- }
- if(order == 2) { //Second order filter
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- y0 = smp[i] * c[0] + x.c1 * c[1] + x.c2 * c[2] + y.c1 * d[1]
- + y.c2 * d[2];
- y.c2 = y.c1;
- y.c1 = y0;
- x.c2 = x.c1;
- x.c1 = smp[i];
- //output
- smp[i] = y0;
- }
- }
-}
-void AnalogFilter::filterout(REALTYPE *smp)
-{
- REALTYPE *ismp = NULL; //used if it needs interpolation
- int i;
- if(needsinterpolation != 0) {
- ismp = new REALTYPE[SOUND_BUFFER_SIZE];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- ismp[i] = smp[i];
- for(i = 0; i < stages + 1; i++)
- singlefilterout(ismp, oldx[i], oldy[i], oldc, oldd);
- }
-
- for(i = 0; i < stages + 1; i++)
- singlefilterout(smp, x[i], y[i], c, d);
-
- if(needsinterpolation != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE x = i / (REALTYPE) SOUND_BUFFER_SIZE;
- smp[i] = ismp[i] * (1.0 - x) + smp[i] * x;
- }
- delete [] ismp;
- needsinterpolation = 0;
- }
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- smp[i] *= outgain;
-}
-
-REALTYPE AnalogFilter::H(REALTYPE freq)
-{
- REALTYPE fr = freq / SAMPLE_RATE * PI * 2.0;
- REALTYPE x = c[0], y = 0.0;
- for(int n = 1; n < 3; n++) {
- x += cos(n * fr) * c[n];
- y -= sin(n * fr) * c[n];
- }
- REALTYPE h = x * x + y * y;
- x = 1.0;
- y = 0.0;
- for(int n = 1; n < 3; n++) {
- x -= cos(n * fr) * d[n];
- y += sin(n * fr) * d[n];
- }
- h = h / (x * x + y * y);
- return pow(h, (stages + 1.0) / 2.0);
-}
-
diff --git a/plugins/zynaddsubfx/src/DSP/AnalogFilter.h b/plugins/zynaddsubfx/src/DSP/AnalogFilter.h
deleted file mode 100644
index cd7efbc..0000000
--- a/plugins/zynaddsubfx/src/DSP/AnalogFilter.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Analog Filter.h - Several analog filters (lowpass, highpass...)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef ANALOG_FILTER_H
-#define ANALOG_FILTER_H
-
-#include "../globals.h"
-#include "Filter_.h"
-
-/**Implementation of Several analog filters (lowpass, highpass...)*/
-class AnalogFilter:public Filter_
-{
- public:
- AnalogFilter(unsigned char Ftype,
- REALTYPE Ffreq,
- REALTYPE Fq,
- unsigned char Fstages);
- ~AnalogFilter();
- void filterout(REALTYPE *smp);
- void setfreq(REALTYPE frequency);
- void setfreq_and_q(REALTYPE frequency, REALTYPE q_);
- void setq(REALTYPE q_);
-
- void settype(int type_);
- void setgain(REALTYPE dBgain);
- void setstages(int stages_);
- void cleanup();
-
- REALTYPE H(REALTYPE freq); //Obtains the response for a given frequency
-
- private:
- struct fstage {
- REALTYPE c1, c2;
- } x[MAX_FILTER_STAGES + 1], y[MAX_FILTER_STAGES + 1],
- oldx[MAX_FILTER_STAGES + 1], oldy[MAX_FILTER_STAGES + 1];
-
- void singlefilterout(REALTYPE *smp,
- fstage &x,
- fstage &y,
- REALTYPE *c,
- REALTYPE *d);
- void computefiltercoefs();
- int type; //The type of the filter (LPF1,HPF1,LPF2,HPF2...)
- int stages; //how many times the filter is applied (0->1,1->2,etc.)
- REALTYPE freq; //Frequency given in Hz
- REALTYPE q; //Q factor (resonance or Q factor)
- REALTYPE gain; //the gain of the filter (if are shelf/peak) filters
-
- int order; //the order of the filter (number of poles)
-
- REALTYPE c[3], d[3]; //coefficients
-
- REALTYPE oldc[3], oldd[3]; //old coefficients(used only if some filter paremeters changes very fast, and it needs interpolation)
-
- int needsinterpolation, firsttime; /**\todo see if bool works for these*/
- int abovenq; //this is 1 if the frequency is above the nyquist
- int oldabovenq; //if the last time was above nyquist (used to see if it needs interpolation)
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/DSP/CMakeLists.txt b/plugins/zynaddsubfx/src/DSP/CMakeLists.txt
deleted file mode 100644
index 263a1ba..0000000
--- a/plugins/zynaddsubfx/src/DSP/CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-set(zynaddsubfx_dsp_SRCS
- AnalogFilter.cpp
- FFTwrapper.cpp
- Filter.cpp
- FormantFilter.cpp
- SVFilter.cpp
- Unison.cpp
-)
-
-add_library(zynaddsubfx_dsp STATIC
- ${zynaddsubfx_dsp_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_dsp)
diff --git a/plugins/zynaddsubfx/src/DSP/FFTwrapper.cpp b/plugins/zynaddsubfx/src/DSP/FFTwrapper.cpp
deleted file mode 100644
index d93c0c4..0000000
--- a/plugins/zynaddsubfx/src/DSP/FFTwrapper.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- FFTwrapper.c - A wrapper for Fast Fourier Transforms
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include "FFTwrapper.h"
-
-FFTwrapper::FFTwrapper(int fftsize_)
-{
- fftsize = fftsize_;
- tmpfftdata1 = new fftw_real[fftsize];
- tmpfftdata2 = new fftw_real[fftsize];
-#ifdef FFTW_VERSION_2
- planfftw = rfftw_create_plan(fftsize,
- FFTW_REAL_TO_COMPLEX,
- FFTW_ESTIMATE | FFTW_IN_PLACE);
- planfftw_inv = rfftw_create_plan(fftsize,
- FFTW_COMPLEX_TO_REAL,
- FFTW_ESTIMATE | FFTW_IN_PLACE);
-#else
- planfftw = fftwf_plan_r2r_1d(fftsize,
- tmpfftdata1,
- tmpfftdata1,
- FFTW_R2HC,
- FFTW_ESTIMATE);
- planfftw_inv = fftwf_plan_r2r_1d(fftsize,
- tmpfftdata2,
- tmpfftdata2,
- FFTW_HC2R,
- FFTW_ESTIMATE);
-#endif
-}
-
-FFTwrapper::~FFTwrapper()
-{
-#ifdef FFTW_VERSION_2
- rfftw_destroy_plan(planfftw);
- rfftw_destroy_plan(planfftw_inv);
-#else
- fftwf_destroy_plan(planfftw);
- fftwf_destroy_plan(planfftw_inv);
-#endif
-
- delete [] tmpfftdata1;
- delete [] tmpfftdata2;
-}
-
-/*
- * do the Fast Fourier Transform
- */
-void FFTwrapper::smps2freqs(REALTYPE *smps, FFTFREQS freqs)
-{
-#ifdef FFTW_VERSION_2
- for(int i = 0; i < fftsize; i++)
- tmpfftdata1[i] = smps[i];
- rfftw_one(planfftw, tmpfftdata1, tmpfftdata2);
- for(int i = 0; i < fftsize / 2; i++) {
- freqs.c[i] = tmpfftdata2[i];
- if(i != 0)
- freqs.s[i] = tmpfftdata2[fftsize - i];
- }
-#else
- for(int i = 0; i < fftsize; i++)
- tmpfftdata1[i] = smps[i];
- fftwf_execute(planfftw);
- for(int i = 0; i < fftsize / 2; i++) {
- freqs.c[i] = tmpfftdata1[i];
- if(i != 0)
- freqs.s[i] = tmpfftdata1[fftsize - i];
- }
-#endif
- tmpfftdata2[fftsize / 2] = 0.0;
-}
-
-/*
- * do the Inverse Fast Fourier Transform
- */
-void FFTwrapper::freqs2smps(FFTFREQS freqs, REALTYPE *smps)
-{
- tmpfftdata2[fftsize / 2] = 0.0;
-#ifdef FFTW_VERSION_2
- for(int i = 0; i < fftsize / 2; i++) {
- tmpfftdata1[i] = freqs.c[i];
- if(i != 0)
- tmpfftdata1[fftsize - i] = freqs.s[i];
- }
- rfftw_one(planfftw_inv, tmpfftdata1, tmpfftdata2);
- for(int i = 0; i < fftsize; i++)
- smps[i] = tmpfftdata2[i];
-#else
- for(int i = 0; i < fftsize / 2; i++) {
- tmpfftdata2[i] = freqs.c[i];
- if(i != 0)
- tmpfftdata2[fftsize - i] = freqs.s[i];
- }
- fftwf_execute(planfftw_inv);
- for(int i = 0; i < fftsize; i++)
- smps[i] = tmpfftdata2[i];
-#endif
-}
-
-void newFFTFREQS(FFTFREQS *f, int size)
-{
- f->c = new REALTYPE[size];
- f->s = new REALTYPE[size];
- for(int i = 0; i < size; i++) {
- f->c[i] = 0.0;
- f->s[i] = 0.0;
- }
-}
-
-void deleteFFTFREQS(FFTFREQS *f)
-{
- delete[] f->c;
- delete[] f->s;
- f->c = f->s = NULL;
-}
-
diff --git a/plugins/zynaddsubfx/src/DSP/FFTwrapper.h b/plugins/zynaddsubfx/src/DSP/FFTwrapper.h
deleted file mode 100644
index 17d4080..0000000
--- a/plugins/zynaddsubfx/src/DSP/FFTwrapper.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- FFTwrapper.h - A wrapper for Fast Fourier Transforms
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef FFT_WRAPPER_H
-#define FFT_WRAPPER_H
-
-#include "../globals.h"
-
-#ifdef FFTW_VERSION_2
-
-#include <fftw.h>
-
-/* If you got error messages about rfftw.h, replace the next include line with "#include <srfftw.h>"
-or with "#include <drfftw.h> (if one doesn't work try the other). It may be necessary to replace
-the <fftw.h> with <dfftw.h> or <sfftw.h>. If the neither one doesn't work,
-please install latest version of fftw(recomanded from the sources) from www.fftw.org.
-If you'll install fftw3 you need to change the Makefile.inc
-Hope all goes right." */
-#include <rfftw.h>
-
-#else
-
-#include <fftw3.h>
-#define fftw_real float
-#define rfftw_plan fftwf_plan
-#endif
-
-/**A wrapper for the FFTW library (Fast Fourier Transforms)*/
-class FFTwrapper
-{
- public:
- /**Constructor
- * @param fftsize The size of samples to be fed to fftw*/
- FFTwrapper(int fftsize_);
- /**Destructor*/
- ~FFTwrapper();
- /**Convert Samples to Frequencies using Fourier Transform
- * @param smps Pointer to Samples to be converted; has length fftsize_
- * @param freqs Structure FFTFREQS which stores the frequencies*/
- void smps2freqs(REALTYPE *smps, FFTFREQS freqs);
- void freqs2smps(FFTFREQS freqs, REALTYPE *smps);
- private:
- int fftsize;
- fftw_real *tmpfftdata1, *tmpfftdata2;
- rfftw_plan planfftw, planfftw_inv;
-};
-
-void newFFTFREQS(FFTFREQS *f, int size);
-void deleteFFTFREQS(FFTFREQS *f);
-#endif
-
diff --git a/plugins/zynaddsubfx/src/DSP/Filter.cpp b/plugins/zynaddsubfx/src/DSP/Filter.cpp
deleted file mode 100644
index c6a3ce9..0000000
--- a/plugins/zynaddsubfx/src/DSP/Filter.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Filter.cpp - Filters, uses analog,formant,etc. filters
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <stdio.h>
-
-#include "Filter.h"
-
-Filter::Filter(FilterParams *pars)
-{
- unsigned char Ftype = pars->Ptype;
- unsigned char Fstages = pars->Pstages;
-
- category = pars->Pcategory;
-
- switch(category) {
- case 1:
- filter = new FormantFilter(pars);
- break;
- case 2:
- filter = new SVFilter(Ftype, 1000.0, pars->getq(), Fstages);
- filter->outgain = dB2rap(pars->getgain());
- if(filter->outgain > 1.0)
- filter->outgain = sqrt(filter->outgain);
- break;
- default:
- filter = new AnalogFilter(Ftype, 1000.0, pars->getq(), Fstages);
- if((Ftype >= 6) && (Ftype <= 8))
- filter->setgain(pars->getgain());
- else
- filter->outgain = dB2rap(pars->getgain());
- break;
- }
-}
-
-Filter::~Filter()
-{
- delete (filter);
-}
-
-void Filter::filterout(REALTYPE *smp)
-{
- filter->filterout(smp);
-}
-
-void Filter::setfreq(REALTYPE frequency)
-{
- filter->setfreq(frequency);
-}
-
-void Filter::setfreq_and_q(REALTYPE frequency, REALTYPE q_)
-{
- filter->setfreq_and_q(frequency, q_);
-}
-
-void Filter::setq(REALTYPE q_)
-{
- filter->setq(q_);
-}
-
-REALTYPE Filter::getrealfreq(REALTYPE freqpitch)
-{
- if((category == 0) || (category == 2))
- return pow(2.0, freqpitch + 9.96578428); //log2(1000)=9.95748
- else
- return freqpitch;
-}
-
diff --git a/plugins/zynaddsubfx/src/DSP/Filter.h b/plugins/zynaddsubfx/src/DSP/Filter.h
deleted file mode 100644
index b8f568b..0000000
--- a/plugins/zynaddsubfx/src/DSP/Filter.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Filter.h - Filters, uses analog,formant,etc. filters
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef FILTER_H
-#define FILTER_H
-
-#include "../globals.h"
-
-#include "Filter_.h"
-#include "AnalogFilter.h"
-#include "FormantFilter.h"
-#include "SVFilter.h"
-#include "../Params/FilterParams.h"
-
-class Filter
-{
- public:
- Filter(FilterParams *pars);
- ~Filter();
- void filterout(REALTYPE *smp);
- void setfreq(REALTYPE frequency);
- void setfreq_and_q(REALTYPE frequency, REALTYPE q_);
- void setq(REALTYPE q_);
-
- REALTYPE getrealfreq(REALTYPE freqpitch);
- private:
- Filter_ *filter;
- unsigned char category;
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/DSP/Filter_.h b/plugins/zynaddsubfx/src/DSP/Filter_.h
deleted file mode 100644
index 88716f0..0000000
--- a/plugins/zynaddsubfx/src/DSP/Filter_.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Filter_.h - This class is inherited by filter classes
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef FILTER__H
-#define FILTER__H
-
-#include "../globals.h"
-
-class Filter_
-{
- public:
- virtual ~Filter_() {}
- virtual void filterout(REALTYPE *smp) = 0;
- virtual void setfreq(REALTYPE frequency) = 0;
- virtual void setfreq_and_q(REALTYPE frequency, REALTYPE q_) = 0;
- virtual void setq(REALTYPE q_) = 0;
- virtual void setgain(REALTYPE dBgain) = 0;
- REALTYPE outgain;
- private:
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/DSP/FormantFilter.cpp b/plugins/zynaddsubfx/src/DSP/FormantFilter.cpp
deleted file mode 100644
index 6d67719..0000000
--- a/plugins/zynaddsubfx/src/DSP/FormantFilter.cpp
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- FormantFilter.cpp - formant filters
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <stdio.h>
-#include "FormantFilter.h"
-
-FormantFilter::FormantFilter(FilterParams *pars)
-{
- numformants = pars->Pnumformants;
- for(int i = 0; i < numformants; i++)
- formant[i] = new AnalogFilter(4 /*BPF*/, 1000.0, 10.0, pars->Pstages);
- cleanup();
- inbuffer = new REALTYPE [SOUND_BUFFER_SIZE];
- tmpbuf = new REALTYPE [SOUND_BUFFER_SIZE];
-
- for(int j = 0; j < FF_MAX_VOWELS; j++)
- for(int i = 0; i < numformants; i++) {
- formantpar[j][i].freq = pars->getformantfreq(
- pars->Pvowels[j].formants[i].freq);
- formantpar[j][i].amp = pars->getformantamp(
- pars->Pvowels[j].formants[i].amp);
- formantpar[j][i].q = pars->getformantq(
- pars->Pvowels[j].formants[i].q);
- }
- ;
- for(int i = 0; i < FF_MAX_FORMANTS; i++)
- oldformantamp[i] = 1.0;
- for(int i = 0; i < numformants; i++) {
- currentformants[i].freq = 1000.0;
- currentformants[i].amp = 1.0;
- currentformants[i].q = 2.0;
- }
-
- formantslowness = pow(1.0 - (pars->Pformantslowness / 128.0), 3.0);
-
- sequencesize = pars->Psequencesize;
- if(sequencesize == 0)
- sequencesize = 1;
- for(int k = 0; k < sequencesize; k++)
- sequence[k].nvowel = pars->Psequence[k].nvowel;
-
- vowelclearness = pow(10.0, (pars->Pvowelclearness - 32.0) / 48.0);
-
- sequencestretch = pow(0.1, (pars->Psequencestretch - 32.0) / 48.0);
- if(pars->Psequencereversed)
- sequencestretch *= -1.0;
-
- outgain = dB2rap(pars->getgain());
-
- oldinput = -1.0;
- Qfactor = 1.0;
- oldQfactor = Qfactor;
- firsttime = 1;
-}
-
-FormantFilter::~FormantFilter()
-{
- for(int i = 0; i < numformants; i++)
- delete (formant[i]);
- delete[] inbuffer;
- delete[] tmpbuf;
-}
-
-
-
-
-void FormantFilter::cleanup()
-{
- for(int i = 0; i < numformants; i++)
- formant[i]->cleanup();
-}
-
-void FormantFilter::setpos(REALTYPE input)
-{
- int p1, p2;
-
- if(firsttime != 0)
- slowinput = input;
- else
- slowinput = slowinput
- * (1.0 - formantslowness) + input * formantslowness;
-
- if((fabs(oldinput - input) < 0.001) && (fabs(slowinput - input) < 0.001)
- && (fabs(Qfactor - oldQfactor) < 0.001)) {
-// oldinput=input; daca setez asta, o sa faca probleme la schimbari foarte lente
- firsttime = 0;
- return;
- }
- else
- oldinput = input;
-
-
- REALTYPE pos = fmod(input * sequencestretch, 1.0);
- if(pos < 0.0)
- pos += 1.0;
-
- F2I(pos * sequencesize, p2);
- p1 = p2 - 1;
- if(p1 < 0)
- p1 += sequencesize;
-
- pos = fmod(pos * sequencesize, 1.0);
- if(pos < 0.0)
- pos = 0.0;
- else
- if(pos > 1.0)
- pos = 1.0;
- pos =
- (atan((pos * 2.0
- - 1.0) * vowelclearness) / atan(vowelclearness) + 1.0) * 0.5;
-
- p1 = sequence[p1].nvowel;
- p2 = sequence[p2].nvowel;
-
- if(firsttime != 0) {
- for(int i = 0; i < numformants; i++) {
- currentformants[i].freq = formantpar[p1][i].freq
- * (1.0
- - pos) + formantpar[p2][i].freq * pos;
- currentformants[i].amp = formantpar[p1][i].amp
- * (1.0
- - pos) + formantpar[p2][i].amp * pos;
- currentformants[i].q = formantpar[p1][i].q
- * (1.0 - pos) + formantpar[p2][i].q * pos;
- formant[i]->setfreq_and_q(currentformants[i].freq,
- currentformants[i].q * Qfactor);
- oldformantamp[i] = currentformants[i].amp;
- }
- firsttime = 0;
- }
- else {
- for(int i = 0; i < numformants; i++) {
- currentformants[i].freq = currentformants[i].freq
- * (1.0 - formantslowness)
- + (formantpar[p1][i].freq
- * (1.0
- - pos) + formantpar[p2][i].freq
- * pos) * formantslowness;
-
- currentformants[i].amp = currentformants[i].amp
- * (1.0 - formantslowness)
- + (formantpar[p1][i].amp
- * (1.0
- - pos) + formantpar[p2][i].amp
- * pos) * formantslowness;
-
- currentformants[i].q = currentformants[i].q
- * (1.0 - formantslowness)
- + (formantpar[p1][i].q
- * (1.0
- - pos) + formantpar[p2][i].q
- * pos) * formantslowness;
-
- formant[i]->setfreq_and_q(currentformants[i].freq,
- currentformants[i].q * Qfactor);
- }
- }
-
- oldQfactor = Qfactor;
-}
-
-void FormantFilter::setfreq(REALTYPE frequency)
-{
- setpos(frequency);
-}
-
-void FormantFilter::setq(REALTYPE q_)
-{
- Qfactor = q_;
- for(int i = 0; i < numformants; i++)
- formant[i]->setq(Qfactor * currentformants[i].q);
-}
-
-void FormantFilter::setgain(REALTYPE dBgain)
-{}
-
-
-void FormantFilter::setfreq_and_q(REALTYPE frequency, REALTYPE q_)
-{
- Qfactor = q_;
- setpos(frequency);
-}
-
-
-void FormantFilter::filterout(REALTYPE *smp)
-{
- int i, j;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- inbuffer[i] = smp[i];
- smp[i] = 0.0;
- }
-
- for(j = 0; j < numformants; j++) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmpbuf[i] = inbuffer[i] * outgain;
- formant[j]->filterout(tmpbuf);
-
- if(ABOVE_AMPLITUDE_THRESHOLD(oldformantamp[j], currentformants[j].amp))
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- smp[i] += tmpbuf[i]
- * INTERPOLATE_AMPLITUDE(oldformantamp[j],
- currentformants[j].amp,
- i,
- SOUND_BUFFER_SIZE);
- else
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- smp[i] += tmpbuf[i] * currentformants[j].amp;
- oldformantamp[j] = currentformants[j].amp;
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/DSP/FormantFilter.h b/plugins/zynaddsubfx/src/DSP/FormantFilter.h
deleted file mode 100644
index 4efe24f..0000000
--- a/plugins/zynaddsubfx/src/DSP/FormantFilter.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- FormantFilter.h - formant filter
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef FORMANT_FILTER_H
-#define FORMANT_FILTER_H
-
-#include "../globals.h"
-#include "Filter_.h"
-#include "AnalogFilter.h"
-#include "../Params/FilterParams.h"
-
-
-class FormantFilter:public Filter_
-{
- public:
- FormantFilter(FilterParams *pars);
- ~FormantFilter();
- void filterout(REALTYPE *smp);
- void setfreq(REALTYPE frequency);
- void setfreq_and_q(REALTYPE frequency, REALTYPE q_);
- void setq(REALTYPE q_);
- void setgain(REALTYPE dBgain);
-
- void cleanup();
- private:
- AnalogFilter *formant[FF_MAX_FORMANTS];
- REALTYPE *inbuffer, *tmpbuf;
-
- struct {
- REALTYPE freq, amp, q; //frequency,amplitude,Q
- } formantpar[FF_MAX_VOWELS][FF_MAX_FORMANTS],
- currentformants[FF_MAX_FORMANTS];
-
- struct {
- unsigned char nvowel;
- } sequence [FF_MAX_SEQUENCE];
-
- REALTYPE oldformantamp[FF_MAX_FORMANTS];
-
- int sequencesize, numformants, firsttime;
- REALTYPE oldinput, slowinput;
- REALTYPE Qfactor, formantslowness, oldQfactor;
- REALTYPE vowelclearness, sequencestretch;
-
- void setpos(REALTYPE input);
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/DSP/SVFilter.cpp b/plugins/zynaddsubfx/src/DSP/SVFilter.cpp
deleted file mode 100644
index 636835a..0000000
--- a/plugins/zynaddsubfx/src/DSP/SVFilter.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- SVFilter.cpp - Several state-variable filters
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <stdio.h>
-#include "SVFilter.h"
-
-SVFilter::SVFilter(unsigned char Ftype,
- REALTYPE Ffreq,
- REALTYPE Fq,
- unsigned char Fstages)
-{
- stages = Fstages;
- type = Ftype;
- freq = Ffreq;
- q = Fq;
- gain = 1.0;
- outgain = 1.0;
- needsinterpolation = 0;
- firsttime = 1;
- if(stages >= MAX_FILTER_STAGES)
- stages = MAX_FILTER_STAGES;
- cleanup();
- setfreq_and_q(Ffreq, Fq);
-}
-
-SVFilter::~SVFilter()
-{}
-
-void SVFilter::cleanup()
-{
- for(int i = 0; i < MAX_FILTER_STAGES + 1; i++) {
- st[i].low = 0.0;
- st[i].high = 0.0;
- st[i].band = 0.0;
- st[i].notch = 0.0;
- }
- oldabovenq = 0;
- abovenq = 0;
-}
-
-void SVFilter::computefiltercoefs()
-{
- par.f = freq / SAMPLE_RATE * 4.0;
- if(par.f > 0.99999)
- par.f = 0.99999;
- par.q = 1.0 - atan(sqrt(q)) * 2.0 / PI;
- par.q = pow(par.q, 1.0 / (stages + 1));
- par.q_sqrt = sqrt(par.q);
-}
-
-
-void SVFilter::setfreq(REALTYPE frequency)
-{
- if(frequency < 0.1)
- frequency = 0.1;
- REALTYPE rap = freq / frequency;
- if(rap < 1.0)
- rap = 1.0 / rap;
-
- oldabovenq = abovenq;
- abovenq = frequency > (SAMPLE_RATE / 2 - 500.0);
-
- int nyquistthresh = (abovenq ^ oldabovenq);
-
-
- if((rap > 3.0) || (nyquistthresh != 0)) { //if the frequency is changed fast, it needs interpolation (now, filter and coeficients backup)
- if(firsttime == 0)
- needsinterpolation = 1;
- ipar = par;
- }
- freq = frequency;
- computefiltercoefs();
- firsttime = 0;
-}
-
-void SVFilter::setfreq_and_q(REALTYPE frequency, REALTYPE q_)
-{
- q = q_;
- setfreq(frequency);
-}
-
-void SVFilter::setq(REALTYPE q_)
-{
- q = q_;
- computefiltercoefs();
-}
-
-void SVFilter::settype(int type_)
-{
- type = type_;
- computefiltercoefs();
-}
-
-void SVFilter::setgain(REALTYPE dBgain)
-{
- gain = dB2rap(dBgain);
- computefiltercoefs();
-}
-
-void SVFilter::setstages(int stages_)
-{
- if(stages_ >= MAX_FILTER_STAGES)
- stages_ = MAX_FILTER_STAGES - 1;
- stages = stages_;
- cleanup();
- computefiltercoefs();
-}
-
-void SVFilter::singlefilterout(REALTYPE *smp, fstage &x, parameters &par)
-{
- int i;
- REALTYPE *out = NULL;
- switch(type) {
- case 0:
- out = &x.low;
- break;
- case 1:
- out = &x.high;
- break;
- case 2:
- out = &x.band;
- break;
- case 3:
- out = &x.notch;
- break;
- }
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- x.low = x.low + par.f * x.band;
- x.high = par.q_sqrt * smp[i] - x.low - par.q * x.band;
- x.band = par.f * x.high + x.band;
- x.notch = x.high + x.low;
-
- smp[i] = *out;
- }
-}
-
-void SVFilter::filterout(REALTYPE *smp)
-{
- int i;
- REALTYPE *ismp = NULL;
-
- if(needsinterpolation != 0) {
- ismp = new REALTYPE[SOUND_BUFFER_SIZE];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- ismp[i] = smp[i];
- for(i = 0; i < stages + 1; i++)
- singlefilterout(ismp, st[i], ipar);
- }
-
- for(i = 0; i < stages + 1; i++)
- singlefilterout(smp, st[i], par);
-
- if(needsinterpolation != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE x = i / (REALTYPE) SOUND_BUFFER_SIZE;
- smp[i] = ismp[i] * (1.0 - x) + smp[i] * x;
- }
- delete [] ismp;
- needsinterpolation = 0;
- }
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- smp[i] *= outgain;
-}
-
diff --git a/plugins/zynaddsubfx/src/DSP/SVFilter.h b/plugins/zynaddsubfx/src/DSP/SVFilter.h
deleted file mode 100644
index e90419e..0000000
--- a/plugins/zynaddsubfx/src/DSP/SVFilter.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- SV Filter.h - Several state-variable filters
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef SV_FILTER_H
-#define SV_FILTER_H
-
-#include "../globals.h"
-#include "Filter_.h"
-class SVFilter:public Filter_
-{
- public:
- SVFilter(unsigned char Ftype,
- REALTYPE Ffreq,
- REALTYPE Fq,
- unsigned char Fstages);
- ~SVFilter();
- void filterout(REALTYPE *smp);
- void setfreq(REALTYPE frequency);
- void setfreq_and_q(REALTYPE frequency, REALTYPE q_);
- void setq(REALTYPE q_);
-
- void settype(int type_);
- void setgain(REALTYPE dBgain);
- void setstages(int stages_);
- void cleanup();
-
- private:
- struct fstage {
- REALTYPE low, high, band, notch;
- } st[MAX_FILTER_STAGES + 1];
-
- struct parameters {
- REALTYPE f, q, q_sqrt;
- } par, ipar;
-
-
- void singlefilterout(REALTYPE *smp, fstage &x, parameters &par);
- void computefiltercoefs();
- int type; //The type of the filter (LPF1,HPF1,LPF2,HPF2...)
- int stages; //how many times the filter is applied (0->1,1->2,etc.)
- REALTYPE freq; //Frequency given in Hz
- REALTYPE q; //Q factor (resonance or Q factor)
- REALTYPE gain; //the gain of the filter (if are shelf/peak) filters
-
- int abovenq; //this is 1 if the frequency is above the nyquist
- int oldabovenq;
- int needsinterpolation, firsttime;
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/DSP/Unison.cpp b/plugins/zynaddsubfx/src/DSP/Unison.cpp
deleted file mode 100644
index 798b2ec..0000000
--- a/plugins/zynaddsubfx/src/DSP/Unison.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Unison.cpp - Unison effect (multivoice chorus)
- Copyright (C) 2002-2009 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include <math.h>
-#include <stdio.h>
-#include "Unison.h"
-
-Unison::Unison(int update_period_samples_, REALTYPE max_delay_sec_) {
- update_period_samples = update_period_samples_;
- max_delay = (int)(max_delay_sec_ * (REALTYPE)SAMPLE_RATE + 1);
- if(max_delay < 10)
- max_delay = 10;
- delay_buffer = new REALTYPE[max_delay];
- delay_k = 0;
- base_freq = 1.0;
- unison_bandwidth_cents = 10.0;
-
- ZERO_REALTYPE(delay_buffer, max_delay);
-
- uv = NULL;
- update_period_sample_k = 0;
- first_time = 0;
-
- set_size(1);
-}
-
-Unison::~Unison() {
- delete [] delay_buffer;
- if(uv)
- delete [] uv;
-}
-
-void Unison::set_size(int new_size) {
- if(new_size < 1)
- new_size = 1;
- unison_size = new_size;
- if(uv)
- delete [] uv;
- uv = new UnisonVoice[unison_size];
- first_time = true;
- update_parameters();
-}
-
-void Unison::set_base_frequency(REALTYPE freq) {
- base_freq = freq;
- update_parameters();
-}
-
-void Unison::set_bandwidth(REALTYPE bandwidth) {
- if(bandwidth < 0)
- bandwidth = 0.0;
- if(bandwidth > 1200.0)
- bandwidth = 1200.0;
-
- //printf("bandwidth %g\n", bandwidth);
- unison_bandwidth_cents = bandwidth;
- update_parameters();
-}
-
-void Unison::update_parameters() {
- if(!uv)
- return;
- REALTYPE increments_per_second = SAMPLE_RATE
- / (REALTYPE) update_period_samples;
-// printf("#%g, %g\n",increments_per_second,base_freq);
- for(int i = 0; i < unison_size; i++) {
- REALTYPE base = pow(UNISON_FREQ_SPAN, RND * 2.0 - 1.0);
- uv[i].relative_amplitude = base;
- REALTYPE period = base / base_freq;
- REALTYPE m = 4.0 / (period * increments_per_second);
- if(RND < 0.5)
- m = -m;
- uv[i].step = m;
-// printf("%g %g\n",uv[i].relative_amplitude,period);
- }
-
- REALTYPE max_speed = pow(2.0, unison_bandwidth_cents / 1200.0);
- unison_amplitude_samples = 0.125
- * (max_speed - 1.0) * SAMPLE_RATE / base_freq;
- //printf("unison_amplitude_samples %g\n", unison_amplitude_samples);
-
- if(unison_amplitude_samples >= max_delay - 1)
- unison_amplitude_samples = max_delay - 2;
-
- update_unison_data();
-}
-
-void Unison::process(int bufsize, REALTYPE *inbuf, REALTYPE *outbuf) {
- if(!uv)
- return;
- if(!outbuf)
- outbuf = inbuf;
-
- REALTYPE volume = 1.0 / sqrt(unison_size);
- REALTYPE xpos_step = 1.0 / (REALTYPE) update_period_samples;
- REALTYPE xpos = (REALTYPE) update_period_sample_k * xpos_step;
- for(int i = 0; i < bufsize; i++) {
- if((update_period_sample_k++) >= update_period_samples) {
- update_unison_data();
- update_period_sample_k = 0;
- xpos = 0.0;
- }
- xpos += xpos_step;
- REALTYPE in = inbuf[i], out = 0.0;
-
- REALTYPE sign = 1.0;
- for(int k = 0; k < unison_size; k++) {
- REALTYPE vpos = uv[k].realpos1
- * (1.0 - xpos) + uv[k].realpos2 * xpos; //optimize
- REALTYPE pos = delay_k + max_delay - vpos - 1.0; //optimize
- int posi;
- REALTYPE posf;
- F2I(pos, posi); //optimize!
- if(posi >= max_delay)
- posi -= max_delay;
- posf = pos - floor(pos);
- out +=
- ((1.0
- - posf) * delay_buffer[posi] + posf
- * delay_buffer[posi + 1]) * sign;
- sign = -sign;
- }
- outbuf[i] = out * volume;
-// printf("%d %g\n",i,outbuf[i]);
- delay_buffer[delay_k] = in;
- if((++delay_k) >= max_delay)
- delay_k = 0;
- }
-}
-
-void Unison::update_unison_data() {
- if(!uv)
- return;
-
- for(int k = 0; k < unison_size; k++) {
- REALTYPE pos = uv[k].position;
- REALTYPE step = uv[k].step;
- pos += step;
- if(pos <= -1.0) {
- pos = -1.0;
- step = -step;
- }
- if(pos >= 1.0) {
- pos = 1.0;
- step = -step;
- }
- REALTYPE vibratto_val = (pos - 0.333333333 * pos * pos * pos) * 1.5; //make the vibratto lfo smoother
- REALTYPE newval = 1.0 + 0.5
- * (vibratto_val
- + 1.0) * unison_amplitude_samples
- * uv[k].relative_amplitude;
-
- if(first_time)
- uv[k].realpos1 = uv[k].realpos2 = newval;
- else{
- uv[k].realpos1 = uv[k].realpos2;
- uv[k].realpos2 = newval;
- }
-
- uv[k].position = pos;
- uv[k].step = step;
- }
- if(first_time)
- first_time = false;
-}
-
diff --git a/plugins/zynaddsubfx/src/DSP/Unison.h b/plugins/zynaddsubfx/src/DSP/Unison.h
deleted file mode 100644
index d4254a1..0000000
--- a/plugins/zynaddsubfx/src/DSP/Unison.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Unison.h - Unison effect (multivoice chorus)
- Copyright (C) 2002-2009 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#ifndef UNISON_H
-#define UNISON_H
-#include <stdlib.h>
-#include "../globals.h"
-
-#define UNISON_FREQ_SPAN 2.0
-//how much the unison frequencies varies (always >= 1.0)
-
-class Unison
-{
- public:
- Unison(int update_period_samples_, REALTYPE max_delay_sec_);
- ~Unison();
-
- void set_size(int new_size);
- void set_base_frequency(REALTYPE freq);
- void set_bandwidth(REALTYPE bandwidth_cents);
-
- void process(int bufsize, REALTYPE *inbuf, REALTYPE *outbuf = NULL);
-
- private:
- void update_parameters();
- void update_unison_data();
-
- int unison_size;
- REALTYPE base_freq;
- struct UnisonVoice {
- REALTYPE step, position; //base LFO
- REALTYPE realpos1, realpos2; //the position regarding samples
- REALTYPE relative_amplitude;
- REALTYPE lin_fpos, lin_ffreq;
- UnisonVoice() {
- position = RND * 1.8 - 0.9;
- realpos1 = 0.0;
- realpos2 = 0.0;
- step = 0.0;
- relative_amplitude = 1.0;
- }
- } *uv;
- int update_period_samples, update_period_sample_k;
- int max_delay, delay_k;
- bool first_time;
- REALTYPE *delay_buffer;
- REALTYPE unison_amplitude_samples;
- REALTYPE unison_bandwidth_cents;
-};
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/Alienwah.cpp b/plugins/zynaddsubfx/src/Effects/Alienwah.cpp
deleted file mode 100644
index 4cfecbd..0000000
--- a/plugins/zynaddsubfx/src/Effects/Alienwah.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Alienwah.cpp - "AlienWah" effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include "Alienwah.h"
-
-Alienwah::Alienwah(const int &insertion_,
- REALTYPE *const efxoutl_,
- REALTYPE *const efxoutr_)
- :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0), oldl(NULL), oldr(NULL)
-{
- setpreset(Ppreset);
- cleanup();
- oldclfol = complex<REALTYPE>(fb, 0.0);
- oldclfor = complex<REALTYPE>(fb, 0.0);
-}
-
-Alienwah::~Alienwah()
-{
- if(oldl != NULL)
- delete [] oldl;
- if(oldr != NULL)
- delete [] oldr;
-}
-
-
-/*
- * Apply the effect
- */
-void Alienwah::out(const Stereo<float *> &smp)
-{
- REALTYPE lfol, lfor; //Left/Right LFOs
- complex<REALTYPE> clfol, clfor, out, tmp;
- /**\todo Rework, as optimization can be used when the new complex type is
- * utilized.
- * Before all calculations needed to be done with individual REALTYPE,
- * but now they can be done together*/
- lfo.effectlfoout(&lfol, &lfor);
- lfol *= depth * PI * 2.0;
- lfor *= depth * PI * 2.0;
- clfol = complex<REALTYPE>(cos(lfol + phase) * fb, sin(lfol + phase) * fb); //rework
- clfor = complex<REALTYPE>(cos(lfor + phase) * fb, sin(lfor + phase) * fb); //rework
-
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE x = ((REALTYPE) i) / SOUND_BUFFER_SIZE;
- REALTYPE x1 = 1.0 - x;
- //left
- tmp = clfol * x + oldclfol * x1;
-
- out = tmp * oldl[oldk];
- out += (1 - fabs(fb)) * smp.l[i] * (1.0 - panning);
-
- oldl[oldk] = out;
- REALTYPE l = out.real() * 10.0 * (fb + 0.1);
-
- //right
- tmp = clfor * x + oldclfor * x1;
-
- out = tmp * oldr[oldk];
- out += (1 - fabs(fb)) * smp.r[i] * (1.0 - panning);
-
- oldr[oldk] = out;
- REALTYPE r = out.real() * 10.0 * (fb + 0.1);
-
-
- if(++oldk >= Pdelay)
- oldk = 0;
- //LRcross
- efxoutl[i] = l * (1.0 - lrcross) + r * lrcross;
- efxoutr[i] = r * (1.0 - lrcross) + l * lrcross;
- }
-
- oldclfol = clfol;
- oldclfor = clfor;
-}
-
-/*
- * Cleanup the effect
- */
-void Alienwah::cleanup()
-{
- for(int i = 0; i < Pdelay; i++) {
- oldl[i] = complex<REALTYPE>(0.0, 0.0);
- oldr[i] = complex<REALTYPE>(0.0, 0.0);
- }
- oldk = 0;
-}
-
-
-/*
- * Parameter control
- */
-
-void Alienwah::setdepth(unsigned char Pdepth)
-{
- this->Pdepth = Pdepth;
- depth = (Pdepth / 127.0);
-}
-
-void Alienwah::setfb(unsigned char Pfb)
-{
- this->Pfb = Pfb;
- fb = fabs((Pfb - 64.0) / 64.1);
- fb = sqrt(fb);
- if(fb < 0.4)
- fb = 0.4;
- if(Pfb < 64)
- fb = -fb;
-}
-
-void Alienwah::setvolume(unsigned char Pvolume)
-{
- this->Pvolume = Pvolume;
- outvolume = Pvolume / 127.0;
- if(insertion == 0)
- volume = 1.0;
- else
- volume = outvolume;
-}
-
-void Alienwah::setpanning(unsigned char Ppanning)
-{
- this->Ppanning = Ppanning;
- panning = Ppanning / 127.0;
-}
-
-void Alienwah::setlrcross(unsigned char Plrcross)
-{
- this->Plrcross = Plrcross;
- lrcross = Plrcross / 127.0;
-}
-
-void Alienwah::setphase(unsigned char Pphase)
-{
- this->Pphase = Pphase;
- phase = (Pphase - 64.0) / 64.0 * PI;
-}
-
-void Alienwah::setdelay(unsigned char Pdelay)
-{
- if(oldl != NULL)
- delete [] oldl;
- if(oldr != NULL)
- delete [] oldr;
- if(Pdelay >= MAX_ALIENWAH_DELAY)
- this->Pdelay = MAX_ALIENWAH_DELAY;
- else
- this->Pdelay = Pdelay;
- oldl = new complex<REALTYPE>[Pdelay];
- oldr = new complex<REALTYPE>[Pdelay];
- cleanup();
-}
-
-void Alienwah::setpreset(unsigned char npreset)
-{
- const int PRESET_SIZE = 11;
- const int NUM_PRESETS = 4;
- unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
- //AlienWah1
- {127, 64, 70, 0, 0, 62, 60, 105, 25, 0, 64},
- //AlienWah2
- {127, 64, 73, 106, 0, 101, 60, 105, 17, 0, 64},
- //AlienWah3
- {127, 64, 63, 0, 1, 100, 112, 105, 31, 0, 42},
- //AlienWah4
- {93, 64, 25, 0, 1, 66, 101, 11, 47, 0, 86}
- };
-
- if(npreset >= NUM_PRESETS)
- npreset = NUM_PRESETS - 1;
- for(int n = 0; n < PRESET_SIZE; n++)
- changepar(n, presets[npreset][n]);
- if(insertion == 0)
- changepar(0, presets[npreset][0] / 2); //lower the volume if this is system effect
- Ppreset = npreset;
-}
-
-
-void Alienwah::changepar(int npar, unsigned char value)
-{
- switch(npar) {
- case 0:
- setvolume(value);
- break;
- case 1:
- setpanning(value);
- break;
- case 2:
- lfo.Pfreq = value;
- lfo.updateparams();
- break;
- case 3:
- lfo.Prandomness = value;
- lfo.updateparams();
- break;
- case 4:
- lfo.PLFOtype = value;
- lfo.updateparams();
- break;
- case 5:
- lfo.Pstereo = value;
- lfo.updateparams();
- break;
- case 6:
- setdepth(value);
- break;
- case 7:
- setfb(value);
- break;
- case 8:
- setdelay(value);
- break;
- case 9:
- setlrcross(value);
- break;
- case 10:
- setphase(value);
- break;
- }
-}
-
-unsigned char Alienwah::getpar(int npar) const
-{
- switch(npar) {
- case 0:
- return Pvolume;
- break;
- case 1:
- return Ppanning;
- break;
- case 2:
- return lfo.Pfreq;
- break;
- case 3:
- return lfo.Prandomness;
- break;
- case 4:
- return lfo.PLFOtype;
- break;
- case 5:
- return lfo.Pstereo;
- break;
- case 6:
- return Pdepth;
- break;
- case 7:
- return Pfb;
- break;
- case 8:
- return Pdelay;
- break;
- case 9:
- return Plrcross;
- break;
- case 10:
- return Pphase;
- break;
- default:
- return 0;
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/Alienwah.h b/plugins/zynaddsubfx/src/Effects/Alienwah.h
deleted file mode 100644
index 9ad6954..0000000
--- a/plugins/zynaddsubfx/src/Effects/Alienwah.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Alienwah.h - "AlienWah" effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef ALIENWAH_H
-#define ALIENWAH_H
-#include <complex>
-#include "../globals.h"
-#include "Effect.h"
-#include "EffectLFO.h"
-
-using namespace std;
-
-#define MAX_ALIENWAH_DELAY 100
-
-/**"AlienWah" Effect*/
-class Alienwah:public Effect
-{
- public:
- /**
- * Constructor
- * @param insetion_ 1 for insertion Effect, 0 for others
- * @param efxoutl_ Pointer to Alienwah's left channel output buffer
- * @param efxoutr_ Pointer to Alienwah's left channel output buffer
- * @return Initialized Alienwah
- */
- Alienwah(const int &insetion_,
- REALTYPE *const efxoutl_,
- REALTYPE *const efxoutr_);
- ~Alienwah();
- void out(const Stereo<float *> &smp);
-
- void setpreset(unsigned char npreset);
- void changepar(int npar, unsigned char value);
- unsigned char getpar(int npar) const;
- void cleanup();
-
- private:
- //Alienwah Parameters
- EffectLFO lfo; //lfo-ul Alienwah
- unsigned char Pvolume;
- unsigned char Ppanning;
- unsigned char Pdepth; //the depth of the Alienwah
- unsigned char Pfb; //feedback
- unsigned char Plrcross; //feedback
- unsigned char Pdelay;
- unsigned char Pphase;
-
-
- //Control Parameters
- void setvolume(unsigned char Pvolume);
- void setpanning(unsigned char Ppanning);
- void setdepth(unsigned char Pdepth);
- void setfb(unsigned char Pfb);
- void setlrcross(unsigned char Plrcross);
- void setdelay(unsigned char Pdelay);
- void setphase(unsigned char Pphase);
-
- //Internal Values
- REALTYPE panning, fb, depth, lrcross, phase;
- complex<REALTYPE> *oldl, *oldr;
- complex<REALTYPE> oldclfol, oldclfor;
- int oldk;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/CMakeLists.txt b/plugins/zynaddsubfx/src/Effects/CMakeLists.txt
deleted file mode 100644
index 0c15dfa..0000000
--- a/plugins/zynaddsubfx/src/Effects/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-set(zynaddsubfx_effect_SRCS
- Alienwah.cpp
- Chorus.cpp
- Distorsion.cpp
- DynamicFilter.cpp
- Echo.cpp
- Effect.cpp
- EffectLFO.cpp
- EffectMgr.cpp
- EQ.cpp
- Phaser.cpp
- Reverb.cpp
-)
-
-add_library(zynaddsubfx_effect STATIC
- ${zynaddsubfx_effect_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_effect)
diff --git a/plugins/zynaddsubfx/src/Effects/Chorus.cpp b/plugins/zynaddsubfx/src/Effects/Chorus.cpp
deleted file mode 100644
index b39c003..0000000
--- a/plugins/zynaddsubfx/src/Effects/Chorus.cpp
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Chorus.cpp - Chorus and Flange effects
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include "Chorus.h"
-#include <iostream>
-
-using namespace std;
-
-Chorus::Chorus(const int &insertion_,
- REALTYPE *const efxoutl_,
- REALTYPE *const efxoutr_)
- :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0),
- maxdelay((int)(MAX_CHORUS_DELAY / 1000.0 * SAMPLE_RATE)),
- delaySample(maxdelay)
-{
- dlk = 0;
- drk = 0;
-
- setpreset(Ppreset);
-
- lfo.effectlfoout(&lfol, &lfor);
- dl2 = getdelay(lfol);
- dr2 = getdelay(lfor);
- cleanup();
-}
-
-Chorus::~Chorus() {}
-
-/*
- * get the delay value in samples; xlfo is the current lfo value
- */
-REALTYPE Chorus::getdelay(REALTYPE xlfo)
-{
- REALTYPE result;
- if(Pflangemode == 0)
- result = (delay + xlfo * depth) * SAMPLE_RATE;
- else
- result = 0;
-
- //check if it is too big delay(caused bu errornous setdelay() and setdepth()
- /**\todo fix setdelay() and setdepth(), so this error cannot occur*/
- if((result + 0.5) >= maxdelay) {
- cerr
- <<
- "WARNING: Chorus.cpp::getdelay(..) too big delay (see setdelay and setdepth funcs.)\n";
- result = maxdelay - 1.0;
- }
- return result;
-}
-
-void Chorus::out(const Stereo<float *> &input)
-{
- const REALTYPE one = 1.0;
- dl1 = dl2;
- dr1 = dr2;
- lfo.effectlfoout(&lfol, &lfor);
-
- dl2 = getdelay(lfol);
- dr2 = getdelay(lfor);
-
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE inl = input.l[i];
- REALTYPE inr = input.r[i];
- //LRcross
- Stereo<REALTYPE> tmpc(inl, inr);
- //REALTYPE r=inr;
- inl = tmpc.l * (1.0 - lrcross) + tmpc.r * lrcross;
- inr = tmpc.r * (1.0 - lrcross) + tmpc.l * lrcross;
-
- //Left channel
-
- //compute the delay in samples using linear interpolation between the lfo delays
- mdel = (dl1 * (SOUND_BUFFER_SIZE - i) + dl2 * i) / SOUND_BUFFER_SIZE;
- if(++dlk >= maxdelay)
- dlk = 0;
- REALTYPE tmp = dlk - mdel + maxdelay * 2.0; //where should I get the sample from
-
- F2I(tmp, dlhi);
- dlhi %= maxdelay;
-
- dlhi2 = (dlhi - 1 + maxdelay) % maxdelay;
- dllo = 1.0 - fmod(tmp, one);
- efxoutl[i] = delaySample.l[dlhi2] * dllo + delaySample.l[dlhi]
- * (1.0 - dllo);
- delaySample.l[dlk] = inl + efxoutl[i] * fb;
-
- //Right channel
-
- //compute the delay in samples using linear interpolation between the lfo delays
- mdel = (dr1 * (SOUND_BUFFER_SIZE - i) + dr2 * i) / SOUND_BUFFER_SIZE;
- if(++drk >= maxdelay)
- drk = 0;
- tmp = drk * 1.0 - mdel + maxdelay * 2.0; //where should I get the sample from
-
- F2I(tmp, dlhi);
- dlhi %= maxdelay;
-
- dlhi2 = (dlhi - 1 + maxdelay) % maxdelay;
- dllo = 1.0 - fmod(tmp, one);
- efxoutr[i] = delaySample.r[dlhi2] * dllo + delaySample.r[dlhi]
- * (1.0 - dllo);
- delaySample.r[dlk] = inr + efxoutr[i] * fb;
- }
-
- if(Poutsub != 0)
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] *= -1.0;
- efxoutr[i] *= -1.0;
- }
- ;
-
-
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] *= panning;
- efxoutr[i] *= (1.0 - panning);
- }
-}
-
-/*
- * Cleanup the effect
- */
-void Chorus::cleanup()
-{
- delaySample.l.clear();
- delaySample.r.clear();
-}
-
-/*
- * Parameter control
- */
-void Chorus::setdepth(unsigned char Pdepth)
-{
- this->Pdepth = Pdepth;
- depth = (pow(8.0, (Pdepth / 127.0) * 2.0) - 1.0) / 1000.0; //seconds
-}
-
-void Chorus::setdelay(unsigned char Pdelay)
-{
- this->Pdelay = Pdelay;
- delay = (pow(10.0, (Pdelay / 127.0) * 2.0) - 1.0) / 1000.0; //seconds
-}
-
-void Chorus::setfb(unsigned char Pfb)
-{
- this->Pfb = Pfb;
- fb = (Pfb - 64.0) / 64.1;
-}
-void Chorus::setvolume(unsigned char Pvolume)
-{
- this->Pvolume = Pvolume;
- outvolume = Pvolume / 127.0;
- if(insertion == 0)
- volume = 1.0;
- else
- volume = outvolume;
-}
-
-void Chorus::setpanning(unsigned char Ppanning)
-{
- this->Ppanning = Ppanning;
- panning = Ppanning / 127.0;
-}
-
-void Chorus::setlrcross(unsigned char Plrcross)
-{
- this->Plrcross = Plrcross;
- lrcross = Plrcross / 127.0;
-}
-
-void Chorus::setpreset(unsigned char npreset)
-{
- const int PRESET_SIZE = 12;
- const int NUM_PRESETS = 10;
- unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
- //Chorus1
- {64, 64, 50, 0, 0, 90, 40, 85, 64, 119, 0, 0 },
- //Chorus2
- {64, 64, 45, 0, 0, 98, 56, 90, 64, 19, 0, 0 },
- //Chorus3
- {64, 64, 29, 0, 1, 42, 97, 95, 90, 127, 0, 0 },
- //Celeste1
- {64, 64, 26, 0, 0, 42, 115, 18, 90, 127, 0, 0 },
- //Celeste2
- {64, 64, 29, 117, 0, 50, 115, 9, 31, 127, 0, 1 },
- //Flange1
- {64, 64, 57, 0, 0, 60, 23, 3, 62, 0, 0, 0 },
- //Flange2
- {64, 64, 33, 34, 1, 40, 35, 3, 109, 0, 0, 0 },
- //Flange3
- {64, 64, 53, 34, 1, 94, 35, 3, 54, 0, 0, 1 },
- //Flange4
- {64, 64, 40, 0, 1, 62, 12, 19, 97, 0, 0, 0 },
- //Flange5
- {64, 64, 55, 105, 0, 24, 39, 19, 17, 0, 0, 1 }
- };
-
- if(npreset >= NUM_PRESETS)
- npreset = NUM_PRESETS - 1;
- for(int n = 0; n < PRESET_SIZE; n++)
- changepar(n, presets[npreset][n]);
- Ppreset = npreset;
-}
-
-
-void Chorus::changepar(int npar, unsigned char value)
-{
- switch(npar) {
- case 0:
- setvolume(value);
- break;
- case 1:
- setpanning(value);
- break;
- case 2:
- lfo.Pfreq = value;
- lfo.updateparams();
- break;
- case 3:
- lfo.Prandomness = value;
- lfo.updateparams();
- break;
- case 4:
- lfo.PLFOtype = value;
- lfo.updateparams();
- break;
- case 5:
- lfo.Pstereo = value;
- lfo.updateparams();
- break;
- case 6:
- setdepth(value);
- break;
- case 7:
- setdelay(value);
- break;
- case 8:
- setfb(value);
- break;
- case 9:
- setlrcross(value);
- break;
- case 10:
- if(value > 1)
- Pflangemode = 1;
- else
- Pflangemode = value;
- break;
- case 11:
- if(value > 1)
- Poutsub = 1;
- else
- Poutsub = value;
- break;
- }
-}
-
-unsigned char Chorus::getpar(int npar) const
-{
- switch(npar) {
- case 0:
- return Pvolume;
- break;
- case 1:
- return Ppanning;
- break;
- case 2:
- return lfo.Pfreq;
- break;
- case 3:
- return lfo.Prandomness;
- break;
- case 4:
- return lfo.PLFOtype;
- break;
- case 5:
- return lfo.Pstereo;
- break;
- case 6:
- return Pdepth;
- break;
- case 7:
- return Pdelay;
- break;
- case 8:
- return Pfb;
- break;
- case 9:
- return Plrcross;
- break;
- case 10:
- return Pflangemode;
- break;
- case 11:
- return Poutsub;
- break;
- default:
- return 0;
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/Chorus.h b/plugins/zynaddsubfx/src/Effects/Chorus.h
deleted file mode 100644
index 2aeb1a1..0000000
--- a/plugins/zynaddsubfx/src/Effects/Chorus.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Chorus.h - Chorus and Flange effects
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef CHORUS_H
-#define CHORUS_H
-#include "../globals.h"
-#include "Effect.h"
-#include "EffectLFO.h"
-#include "../Samples/Sample.h"
-#include "../Misc/Stereo.h"
-
-#define MAX_CHORUS_DELAY 250.0 //ms
-
-/**Chorus and Flange effects*/
-class Chorus:public Effect
-{
- public:
- Chorus(const int &insetion_, REALTYPE *efxoutl_, REALTYPE *efxoutr_);
- /**Destructor*/
- ~Chorus();
- void out(const Stereo<float *> &input);
- void setpreset(unsigned char npreset);
- /**
- * Sets the value of the chosen variable
- *
- * The possible parameters are:
- * -# Volume
- * -# Panning
- * -# LFO Frequency
- * -# LFO Randomness
- * -# LFO Type
- * -# LFO stereo
- * -# Depth
- * -# Delay
- * -# Feedback
- * -# Flange Mode
- * -# Subtractive
- * @param npar number of chosen parameter
- * @param value the new value
- */
- void changepar(int npar, unsigned char value);
- /**
- * Gets the value of the chosen variable
- *
- * The possible parameters are:
- * -# Volume
- * -# Panning
- * -# LFO Frequency
- * -# LFO Randomness
- * -# LFO Type
- * -# LFO stereo
- * -# Depth
- * -# Delay
- * -# Feedback
- * -# Flange Mode
- * -# Subtractive
- * @param npar number of chosen parameter
- * @return the value of the parameter
- */
- unsigned char getpar(int npar) const;
- void cleanup();
-
- private:
- //Chorus Parameters
- EffectLFO lfo; //lfo-ul chorus
- unsigned char Pvolume;
- unsigned char Ppanning;
- unsigned char Pdepth; //the depth of the Chorus(ms)
- unsigned char Pdelay; //the delay (ms)
- unsigned char Pfb; //feedback
- unsigned char Plrcross; //feedback
- unsigned char Pflangemode; //how the LFO is scaled, to result chorus or flange
- unsigned char Poutsub; //if I wish to substract the output instead of the adding it
-
-
- //Parameter Controls
- void setvolume(unsigned char Pvolume);
- void setpanning(unsigned char Ppanning);
- void setdepth(unsigned char Pdepth);
- void setdelay(unsigned char Pdelay);
- void setfb(unsigned char Pfb);
- void setlrcross(unsigned char Plrcross);
-
- //Internal Values
- REALTYPE depth, delay, fb, lrcross, panning;
- REALTYPE dl1, dl2, dr1, dr2, lfol, lfor;
- int maxdelay;
- Stereo<Sample> delaySample;
- int dlk, drk, dlhi, dlhi2;
- REALTYPE getdelay(REALTYPE xlfo);
- REALTYPE dllo, mdel;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/Distorsion.cpp b/plugins/zynaddsubfx/src/Effects/Distorsion.cpp
deleted file mode 100644
index a0b6a2e..0000000
--- a/plugins/zynaddsubfx/src/Effects/Distorsion.cpp
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Distorsion.cpp - Distorsion effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include "Distorsion.h"
-
-
-/*
- * Waveshape (this is called by OscilGen::waveshape and Distorsion::process)
- */
-
-void waveshapesmps(int n,
- REALTYPE *smps,
- unsigned char type,
- unsigned char drive)
-{
- int i;
- REALTYPE ws = drive / 127.0;
- REALTYPE tmpv;
-
- switch(type) {
- case 1:
- ws = pow(10, ws * ws * 3.0) - 1.0 + 0.001; //Arctangent
- for(i = 0; i < n; i++)
- smps[i] = atan(smps[i] * ws) / atan(ws);
- break;
- case 2:
- ws = ws * ws * 32.0 + 0.0001; //Asymmetric
- if(ws < 1.0)
- tmpv = sin(ws) + 0.1;
- else
- tmpv = 1.1;
- for(i = 0; i < n; i++)
- smps[i] = sin(smps[i] * (0.1 + ws - ws * smps[i])) / tmpv;
- ;
- break;
- case 3:
- ws = ws * ws * ws * 20.0 + 0.0001; //Pow
- for(i = 0; i < n; i++) {
- smps[i] *= ws;
- if(fabs(smps[i]) < 1.0) {
- smps[i] = (smps[i] - pow(smps[i], 3.0)) * 3.0;
- if(ws < 1.0)
- smps[i] /= ws;
- }
- else
- smps[i] = 0.0;
- }
- break;
- case 4:
- ws = ws * ws * ws * 32.0 + 0.0001; //Sine
- if(ws < 1.57)
- tmpv = sin(ws);
- else
- tmpv = 1.0;
- for(i = 0; i < n; i++)
- smps[i] = sin(smps[i] * ws) / tmpv;
- break;
- case 5:
- ws = ws * ws + 0.000001; //Quantisize
- for(i = 0; i < n; i++)
- smps[i] = floor(smps[i] / ws + 0.5) * ws;
- break;
- case 6:
- ws = ws * ws * ws * 32 + 0.0001; //Zigzag
- if(ws < 1.0)
- tmpv = sin(ws);
- else
- tmpv = 1.0;
- for(i = 0; i < n; i++)
- smps[i] = asin(sin(smps[i] * ws)) / tmpv;
- break;
- case 7:
- ws = pow(2.0, -ws * ws * 8.0); //Limiter
- for(i = 0; i < n; i++) {
- REALTYPE tmp = smps[i];
- if(fabs(tmp) > ws) {
- if(tmp >= 0.0)
- smps[i] = 1.0;
- else
- smps[i] = -1.0;
- }
- else
- smps[i] /= ws;
- }
- break;
- case 8:
- ws = pow(2.0, -ws * ws * 8.0); //Upper Limiter
- for(i = 0; i < n; i++) {
- REALTYPE tmp = smps[i];
- if(tmp > ws)
- smps[i] = ws;
- smps[i] *= 2.0;
- }
- break;
- case 9:
- ws = pow(2.0, -ws * ws * 8.0); //Lower Limiter
- for(i = 0; i < n; i++) {
- REALTYPE tmp = smps[i];
- if(tmp < -ws)
- smps[i] = -ws;
- smps[i] *= 2.0;
- }
- break;
- case 10:
- ws = (pow(2.0, ws * 6.0) - 1.0) / pow(2.0, 6.0); //Inverse Limiter
- for(i = 0; i < n; i++) {
- REALTYPE tmp = smps[i];
- if(fabs(tmp) > ws) {
- if(tmp >= 0.0)
- smps[i] = tmp - ws;
- else
- smps[i] = tmp + ws;
- }
- else
- smps[i] = 0;
- }
- break;
- case 11:
- ws = pow(5, ws * ws * 1.0) - 1.0; //Clip
- for(i = 0; i < n; i++)
- smps[i] = smps[i]
- * (ws + 0.5) * 0.9999 - floor(
- 0.5 + smps[i] * (ws + 0.5) * 0.9999);
- break;
- case 12:
- ws = ws * ws * ws * 30 + 0.001; //Asym2
- if(ws < 0.3)
- tmpv = ws;
- else
- tmpv = 1.0;
- for(i = 0; i < n; i++) {
- REALTYPE tmp = smps[i] * ws;
- if((tmp > -2.0) && (tmp < 1.0))
- smps[i] = tmp * (1.0 - tmp) * (tmp + 2.0) / tmpv;
- else
- smps[i] = 0.0;
- }
- break;
- case 13:
- ws = ws * ws * ws * 32.0 + 0.0001; //Pow2
- if(ws < 1.0)
- tmpv = ws * (1 + ws) / 2.0;
- else
- tmpv = 1.0;
- for(i = 0; i < n; i++) {
- REALTYPE tmp = smps[i] * ws;
- if((tmp > -1.0) && (tmp < 1.618034))
- smps[i] = tmp * (1.0 - tmp) / tmpv;
- else
- if(tmp > 0.0)
- smps[i] = -1.0;
- else
- smps[i] = -2.0;
- }
- break;
- case 14:
- ws = pow(ws, 5.0) * 80.0 + 0.0001; //sigmoid
- if(ws > 10.0)
- tmpv = 0.5;
- else
- tmpv = 0.5 - 1.0 / (exp(ws) + 1.0);
- for(i = 0; i < n; i++) {
- REALTYPE tmp = smps[i] * ws;
- if(tmp < -10.0)
- tmp = -10.0;
- else
- if(tmp > 10.0)
- tmp = 10.0;
- tmp = 0.5 - 1.0 / (exp(tmp) + 1.0);
- smps[i] = tmp / tmpv;
- }
- break;
- /**\todo update to Distorsion::changepar (Ptype max) if there is added more waveshapings functions*/
- }
-}
-
-
-Distorsion::Distorsion(const int &insertion_,
- REALTYPE *efxoutl_,
- REALTYPE *efxoutr_)
- :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0)
-{
- lpfl = new AnalogFilter(2, 22000, 1, 0);
- lpfr = new AnalogFilter(2, 22000, 1, 0);
- hpfl = new AnalogFilter(3, 20, 1, 0);
- hpfr = new AnalogFilter(3, 20, 1, 0);
-
-
- //default values
- Pvolume = 50;
- Plrcross = 40;
- Pdrive = 90;
- Plevel = 64;
- Ptype = 0;
- Pnegate = 0;
- Plpf = 127;
- Phpf = 0;
- Pstereo = 0;
- Pprefiltering = 0;
-
- setpreset(Ppreset);
- cleanup();
-}
-
-Distorsion::~Distorsion()
-{
- delete lpfl;
- delete lpfr;
- delete hpfl;
- delete hpfr;
-}
-
-/*
- * Cleanup the effect
- */
-void Distorsion::cleanup()
-{
- lpfl->cleanup();
- hpfl->cleanup();
- lpfr->cleanup();
- hpfr->cleanup();
-}
-
-
-/*
- * Apply the filters
- */
-
-void Distorsion::applyfilters(REALTYPE *efxoutl, REALTYPE *efxoutr)
-{
- lpfl->filterout(efxoutl);
- hpfl->filterout(efxoutl);
- if(Pstereo != 0) { //stereo
- lpfr->filterout(efxoutr);
- hpfr->filterout(efxoutr);
- }
-}
-
-
-/*
- * Effect output
- */
-void Distorsion::out(const Stereo<float *> &smp)
-{
- int i;
- REALTYPE l, r, lout, rout;
-
- REALTYPE inputvol = pow(5.0, (Pdrive - 32.0) / 127.0);
- if(Pnegate != 0)
- inputvol *= -1.0;
-
- if(Pstereo != 0) { //Stereo
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] = smp.l[i] * inputvol * panning;
- efxoutr[i] = smp.r[i] * inputvol * (1.0 - panning);
- }
- }
- else {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- efxoutl[i] =
- (smp.l[i] * panning + smp.r[i] * (1.0 - panning)) * inputvol;
- ;
- }
-
- if(Pprefiltering != 0)
- applyfilters(efxoutl, efxoutr);
-
- //no optimised, yet (no look table)
- waveshapesmps(SOUND_BUFFER_SIZE, efxoutl, Ptype + 1, Pdrive);
- if(Pstereo != 0)
- waveshapesmps(SOUND_BUFFER_SIZE, efxoutr, Ptype + 1, Pdrive);
-
- if(Pprefiltering == 0)
- applyfilters(efxoutl, efxoutr);
-
- if(Pstereo == 0)
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- efxoutr[i] = efxoutl[i];
-
- REALTYPE level = dB2rap(60.0 * Plevel / 127.0 - 40.0);
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- lout = efxoutl[i];
- rout = efxoutr[i];
- l = lout * (1.0 - lrcross) + rout * lrcross;
- r = rout * (1.0 - lrcross) + lout * lrcross;
- lout = l;
- rout = r;
-
- efxoutl[i] = lout * 2.0 * level;
- efxoutr[i] = rout * 2.0 * level;
- }
-}
-
-
-/*
- * Parameter control
- */
-void Distorsion::setvolume(unsigned char Pvolume)
-{
- this->Pvolume = Pvolume;
-
- if(insertion == 0) {
- outvolume = pow(0.01, (1.0 - Pvolume / 127.0)) * 4.0;
- volume = 1.0;
- }
- else
- volume = outvolume = Pvolume / 127.0;
- ;
- if(Pvolume == 0)
- cleanup();
-}
-
-void Distorsion::setpanning(unsigned char Ppanning)
-{
- this->Ppanning = Ppanning;
- panning = (Ppanning + 0.5) / 127.0;
-}
-
-
-void Distorsion::setlrcross(unsigned char Plrcross)
-{
- this->Plrcross = Plrcross;
- lrcross = Plrcross / 127.0 * 1.0;
-}
-
-void Distorsion::setlpf(unsigned char Plpf)
-{
- this->Plpf = Plpf;
- REALTYPE fr = exp(pow(Plpf / 127.0, 0.5) * log(25000.0)) + 40;
- lpfl->setfreq(fr);
- lpfr->setfreq(fr);
-}
-
-void Distorsion::sethpf(unsigned char Phpf)
-{
- this->Phpf = Phpf;
- REALTYPE fr = exp(pow(Phpf / 127.0, 0.5) * log(25000.0)) + 20.0;
- hpfl->setfreq(fr);
- hpfr->setfreq(fr);
-}
-
-
-void Distorsion::setpreset(unsigned char npreset)
-{
- const int PRESET_SIZE = 11;
- const int NUM_PRESETS = 6;
- unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
- //Overdrive 1
- {127, 64, 35, 56, 70, 0, 0, 96, 0, 0, 0 },
- //Overdrive 2
- {127, 64, 35, 29, 75, 1, 0, 127, 0, 0, 0 },
- //A. Exciter 1
- {64, 64, 35, 75, 80, 5, 0, 127, 105, 1, 0 },
- //A. Exciter 2
- {64, 64, 35, 85, 62, 1, 0, 127, 118, 1, 0 },
- //Guitar Amp
- {127, 64, 35, 63, 75, 2, 0, 55, 0, 0, 0 },
- //Quantisize
- {127, 64, 35, 88, 75, 4, 0, 127, 0, 1, 0 }
- };
-
-
- if(npreset >= NUM_PRESETS)
- npreset = NUM_PRESETS - 1;
- for(int n = 0; n < PRESET_SIZE; n++)
- changepar(n, presets[npreset][n]);
- if(insertion == 0)
- changepar(0, (int) (presets[npreset][0] / 1.5)); //lower the volume if this is system effect
- Ppreset = npreset;
- cleanup();
-}
-
-
-void Distorsion::changepar(int npar, unsigned char value)
-{
- switch(npar) {
- case 0:
- setvolume(value);
- break;
- case 1:
- setpanning(value);
- break;
- case 2:
- setlrcross(value);
- break;
- case 3:
- Pdrive = value;
- break;
- case 4:
- Plevel = value;
- break;
- case 5:
- if(value > 13)
- Ptype = 13; //this must be increased if more distorsion types are added
- else
- Ptype = value;
- break;
- case 6:
- if(value > 1)
- Pnegate = 1;
- else
- Pnegate = value;
- break;
- case 7:
- setlpf(value);
- break;
- case 8:
- sethpf(value);
- break;
- case 9:
- if(value > 1)
- Pstereo = 1;
- else
- Pstereo = value;
- break;
- case 10:
- Pprefiltering = value;
- break;
- }
-}
-
-unsigned char Distorsion::getpar(int npar) const
-{
- switch(npar) {
- case 0:
- return Pvolume;
- break;
- case 1:
- return Ppanning;
- break;
- case 2:
- return Plrcross;
- break;
- case 3:
- return Pdrive;
- break;
- case 4:
- return Plevel;
- break;
- case 5:
- return Ptype;
- break;
- case 6:
- return Pnegate;
- break;
- case 7:
- return Plpf;
- break;
- case 8:
- return Phpf;
- break;
- case 9:
- return Pstereo;
- break;
- case 10:
- return Pprefiltering;
- break;
- }
- return 0; //in case of bogus parameter number
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/Distorsion.h b/plugins/zynaddsubfx/src/Effects/Distorsion.h
deleted file mode 100644
index 472af3f..0000000
--- a/plugins/zynaddsubfx/src/Effects/Distorsion.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Distorsion.h - Distorsion Effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef DISTORSION_H
-#define DISTORSION_H
-
-#include "../globals.h"
-#include "../DSP/AnalogFilter.h"
-#include "Effect.h"
-
-//Waveshaping(called by Distorsion effect and waveshape from OscilGen)
-void waveshapesmps(int n,
- REALTYPE *smps,
- unsigned char type,
- unsigned char drive);
-/**Distortion Effect*/
-class Distorsion:public Effect
-{
- public:
- Distorsion(const int &insertion, REALTYPE *efxoutl_, REALTYPE *efxoutr_);
- ~Distorsion();
- void out(const Stereo<float *> &smp);
- void setpreset(unsigned char npreset);
- void changepar(int npar, unsigned char value);
- unsigned char getpar(int npar) const;
- void cleanup();
- void applyfilters(REALTYPE *efxoutl, REALTYPE *efxoutr);
-
- private:
- //Parametrii
- unsigned char Pvolume; //Volume or E/R
- unsigned char Ppanning; //Panning
- unsigned char Plrcross; // L/R Mixing
- unsigned char Pdrive; //the input amplification
- unsigned char Plevel; //the output amplification
- unsigned char Ptype; //Distorsion type
- unsigned char Pnegate; //if the input is negated
- unsigned char Plpf; //lowpass filter
- unsigned char Phpf; //highpass filter
- unsigned char Pstereo; //0=mono,1=stereo
- unsigned char Pprefiltering; //if you want to do the filtering before the distorsion
-
- void setvolume(unsigned char Pvolume);
- void setpanning(unsigned char Ppanning);
- void setlrcross(unsigned char Plrcross);
- void setlpf(unsigned char Plpf);
- void sethpf(unsigned char Phpf);
-
- //Real Parameters
- REALTYPE panning, lrcross;
- AnalogFilter *lpfl, *lpfr, *hpfl, *hpfr;
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/DynamicFilter.cpp b/plugins/zynaddsubfx/src/Effects/DynamicFilter.cpp
deleted file mode 100644
index b60f401..0000000
--- a/plugins/zynaddsubfx/src/Effects/DynamicFilter.cpp
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- DynamicFilter.cpp - "WahWah" effect and others
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include "DynamicFilter.h"
-
-DynamicFilter::DynamicFilter(int insertion_,
- REALTYPE *efxoutl_,
- REALTYPE *efxoutr_)
- :Effect(insertion_, efxoutl_, efxoutr_, new FilterParams(0, 64, 64), 0),
- Pvolume(110), Ppanning(64), Pdepth(0), Pampsns(90),
- Pampsnsinv(0), Pampsmooth(60),
- filterl(NULL), filterr(NULL)
-{
- setpreset(Ppreset);
- cleanup();
-}
-
-DynamicFilter::~DynamicFilter()
-{
- delete filterpars;
- delete filterl;
- delete filterr;
-}
-
-
-/*
- * Apply the effect
- */
-void DynamicFilter::out(const Stereo<float *> &smp)
-{
- int i;
- if(filterpars->changed) {
- filterpars->changed = false;
- cleanup();
- }
-
- REALTYPE lfol, lfor;
- lfo.effectlfoout(&lfol, &lfor);
- lfol *= depth * 5.0;
- lfor *= depth * 5.0;
- REALTYPE freq = filterpars->getfreq();
- REALTYPE q = filterpars->getq();
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] = smp.l[i];
- efxoutr[i] = smp.r[i];
-
- REALTYPE x = (fabs(smp.l[i]) + fabs(smp.l[i])) * 0.5;
- ms1 = ms1 * (1.0 - ampsmooth) + x * ampsmooth + 1e-10;
- }
-
-
- REALTYPE ampsmooth2 = pow(ampsmooth, 0.2) * 0.3;
- ms2 = ms2 * (1.0 - ampsmooth2) + ms1 * ampsmooth2;
- ms3 = ms3 * (1.0 - ampsmooth2) + ms2 * ampsmooth2;
- ms4 = ms4 * (1.0 - ampsmooth2) + ms3 * ampsmooth2;
- REALTYPE rms = (sqrt(ms4)) * ampsns;
-
- REALTYPE frl = filterl->getrealfreq(freq + lfol + rms);
- REALTYPE frr = filterr->getrealfreq(freq + lfor + rms);
-
- filterl->setfreq_and_q(frl, q);
- filterr->setfreq_and_q(frr, q);
-
-
- filterl->filterout(efxoutl);
- filterr->filterout(efxoutr);
-
- //panning
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] *= panning;
- efxoutr[i] *= (1.0 - panning);
- }
-}
-
-/*
- * Cleanup the effect
- */
-void DynamicFilter::cleanup()
-{
- reinitfilter();
- ms1 = 0.0;
- ms2 = 0.0;
- ms3 = 0.0;
- ms4 = 0.0;
-}
-
-
-/*
- * Parameter control
- */
-
-void DynamicFilter::setdepth(unsigned char Pdepth)
-{
- this->Pdepth = Pdepth;
- depth = pow((Pdepth / 127.0), 2.0);
-}
-
-
-void DynamicFilter::setvolume(unsigned char Pvolume)
-{
- this->Pvolume = Pvolume;
- outvolume = Pvolume / 127.0;
- if(insertion == 0)
- volume = 1.0;
- else
- volume = outvolume;
-}
-
-void DynamicFilter::setpanning(unsigned char Ppanning)
-{
- this->Ppanning = Ppanning;
- panning = Ppanning / 127.0;
-}
-
-
-void DynamicFilter::setampsns(unsigned char Pampsns)
-{
- ampsns = pow(Pampsns / 127.0, 2.5) * 10.0;
- if(Pampsnsinv != 0)
- ampsns = -ampsns;
- ampsmooth = exp(-Pampsmooth / 127.0 * 10.0) * 0.99;
- this->Pampsns = Pampsns;
-}
-
-void DynamicFilter::reinitfilter()
-{
- if(filterl != NULL)
- delete (filterl);
- if(filterr != NULL)
- delete (filterr);
- filterl = new Filter(filterpars);
- filterr = new Filter(filterpars);
-}
-
-void DynamicFilter::setpreset(unsigned char npreset)
-{
- const int PRESET_SIZE = 10;
- const int NUM_PRESETS = 5;
- unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
- //WahWah
- {110, 64, 80, 0, 0, 64, 0, 90, 0, 60},
- //AutoWah
- {110, 64, 70, 0, 0, 80, 70, 0, 0, 60},
- //Sweep
- {100, 64, 30, 0, 0, 50, 80, 0, 0, 60},
- //VocalMorph1
- {110, 64, 80, 0, 0, 64, 0, 64, 0, 60},
- //VocalMorph1
- {127, 64, 50, 0, 0, 96, 64, 0, 0, 60}
- };
-
- if(npreset >= NUM_PRESETS)
- npreset = NUM_PRESETS - 1;
- for(int n = 0; n < PRESET_SIZE; n++)
- changepar(n, presets[npreset][n]);
-
- filterpars->defaults();
- switch(npreset) {
- case 0:
- filterpars->Pcategory = 0;
- filterpars->Ptype = 2;
- filterpars->Pfreq = 45;
- filterpars->Pq = 64;
- filterpars->Pstages = 1;
- filterpars->Pgain = 64;
- break;
- case 1:
- filterpars->Pcategory = 2;
- filterpars->Ptype = 0;
- filterpars->Pfreq = 72;
- filterpars->Pq = 64;
- filterpars->Pstages = 0;
- filterpars->Pgain = 64;
- break;
- case 2:
- filterpars->Pcategory = 0;
- filterpars->Ptype = 4;
- filterpars->Pfreq = 64;
- filterpars->Pq = 64;
- filterpars->Pstages = 2;
- filterpars->Pgain = 64;
- break;
- case 3:
- filterpars->Pcategory = 1;
- filterpars->Ptype = 0;
- filterpars->Pfreq = 50;
- filterpars->Pq = 70;
- filterpars->Pstages = 1;
- filterpars->Pgain = 64;
-
- filterpars->Psequencesize = 2;
- // "I"
- filterpars->Pvowels[0].formants[0].freq = 34;
- filterpars->Pvowels[0].formants[0].amp = 127;
- filterpars->Pvowels[0].formants[0].q = 64;
- filterpars->Pvowels[0].formants[1].freq = 99;
- filterpars->Pvowels[0].formants[1].amp = 122;
- filterpars->Pvowels[0].formants[1].q = 64;
- filterpars->Pvowels[0].formants[2].freq = 108;
- filterpars->Pvowels[0].formants[2].amp = 112;
- filterpars->Pvowels[0].formants[2].q = 64;
- // "A"
- filterpars->Pvowels[1].formants[0].freq = 61;
- filterpars->Pvowels[1].formants[0].amp = 127;
- filterpars->Pvowels[1].formants[0].q = 64;
- filterpars->Pvowels[1].formants[1].freq = 71;
- filterpars->Pvowels[1].formants[1].amp = 121;
- filterpars->Pvowels[1].formants[1].q = 64;
- filterpars->Pvowels[1].formants[2].freq = 99;
- filterpars->Pvowels[1].formants[2].amp = 117;
- filterpars->Pvowels[1].formants[2].q = 64;
- break;
- case 4:
- filterpars->Pcategory = 1;
- filterpars->Ptype = 0;
- filterpars->Pfreq = 64;
- filterpars->Pq = 70;
- filterpars->Pstages = 1;
- filterpars->Pgain = 64;
-
- filterpars->Psequencesize = 2;
- filterpars->Pnumformants = 2;
- filterpars->Pvowelclearness = 0;
-
- filterpars->Pvowels[0].formants[0].freq = 70;
- filterpars->Pvowels[0].formants[0].amp = 127;
- filterpars->Pvowels[0].formants[0].q = 64;
- filterpars->Pvowels[0].formants[1].freq = 80;
- filterpars->Pvowels[0].formants[1].amp = 122;
- filterpars->Pvowels[0].formants[1].q = 64;
-
- filterpars->Pvowels[1].formants[0].freq = 20;
- filterpars->Pvowels[1].formants[0].amp = 127;
- filterpars->Pvowels[1].formants[0].q = 64;
- filterpars->Pvowels[1].formants[1].freq = 100;
- filterpars->Pvowels[1].formants[1].amp = 121;
- filterpars->Pvowels[1].formants[1].q = 64;
- break;
- }
-
-// for (int i=0;i<5;i++){
-// printf("freq=%d amp=%d q=%d\n",filterpars->Pvowels[0].formants[i].freq,filterpars->Pvowels[0].formants[i].amp,filterpars->Pvowels[0].formants[i].q);
-// };
- if(insertion == 0)
- changepar(0, presets[npreset][0] / 2); //lower the volume if this is system effect
- Ppreset = npreset;
-
- reinitfilter();
-}
-
-
-void DynamicFilter::changepar(int npar, unsigned char value)
-{
- switch(npar) {
- case 0:
- setvolume(value);
- break;
- case 1:
- setpanning(value);
- break;
- case 2:
- lfo.Pfreq = value;
- lfo.updateparams();
- break;
- case 3:
- lfo.Prandomness = value;
- lfo.updateparams();
- break;
- case 4:
- lfo.PLFOtype = value;
- lfo.updateparams();
- break;
- case 5:
- lfo.Pstereo = value;
- lfo.updateparams();
- break;
- case 6:
- setdepth(value);
- break;
- case 7:
- setampsns(value);
- break;
- case 8:
- Pampsnsinv = value;
- setampsns(Pampsns);
- break;
- case 9:
- Pampsmooth = value;
- setampsns(Pampsns);
- break;
- }
-}
-
-unsigned char DynamicFilter::getpar(int npar) const
-{
- switch(npar) {
- case 0:
- return Pvolume;
- break;
- case 1:
- return Ppanning;
- break;
- case 2:
- return lfo.Pfreq;
- break;
- case 3:
- return lfo.Prandomness;
- break;
- case 4:
- return lfo.PLFOtype;
- break;
- case 5:
- return lfo.Pstereo;
- break;
- case 6:
- return Pdepth;
- break;
- case 7:
- return Pampsns;
- break;
- case 8:
- return Pampsnsinv;
- break;
- case 9:
- return Pampsmooth;
- break;
- default:
- return 0;
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/DynamicFilter.h b/plugins/zynaddsubfx/src/Effects/DynamicFilter.h
deleted file mode 100644
index 6ce10f5..0000000
--- a/plugins/zynaddsubfx/src/Effects/DynamicFilter.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- DynamicFilter.h - "WahWah" effect and others
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef DYNAMICFILTER_H
-#define DYNAMICFILTER_H
-#include "../globals.h"
-#include "Effect.h"
-#include "EffectLFO.h"
-
-#include "../DSP/Filter.h"
-/**DynamicFilter Effect*/
-class DynamicFilter:public Effect
-{
- public:
- DynamicFilter(int insetion_, REALTYPE *efxoutl_, REALTYPE *efxoutr_);
- ~DynamicFilter();
- void out(const Stereo<float *> &smp);
-
- void setpreset(unsigned char npreset);
- void changepar(int npar, unsigned char value);
- unsigned char getpar(int npar) const;
- void cleanup();
-
-// void setdryonly();
-
- private:
- //Parametrii DynamicFilter
- EffectLFO lfo; //lfo-ul DynamicFilter
- unsigned char Pvolume;
- unsigned char Ppanning;
- unsigned char Pdepth; /**<the depth of the lfo of the DynamicFilter*/
- unsigned char Pampsns; /**<how the filter varies according to the input amplitude*/
- unsigned char Pampsnsinv; //if the filter freq is lowered if the input amplitude rises
- unsigned char Pampsmooth; //how smooth the input amplitude changes the filter
-
- //Parameter Control
- void setvolume(unsigned char Pvolume);
- void setpanning(unsigned char Ppanning);
- void setdepth(unsigned char Pdepth);
- void setampsns(unsigned char Pampsns);
-
- void reinitfilter();
-
- //Internal Values
- REALTYPE panning, depth, ampsns, ampsmooth;
-
- Filter *filterl, *filterr;
-
- REALTYPE ms1, ms2, ms3, ms4; //mean squares
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/EQ.cpp b/plugins/zynaddsubfx/src/Effects/EQ.cpp
deleted file mode 100644
index 59aa9f1..0000000
--- a/plugins/zynaddsubfx/src/Effects/EQ.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- EQ.cpp - EQ effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include "EQ.h"
-
-EQ::EQ(const int &insertion_, REALTYPE *efxoutl_, REALTYPE *efxoutr_)
- :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0)
-{
- for(int i = 0; i < MAX_EQ_BANDS; i++) {
- filter[i].Ptype = 0;
- filter[i].Pfreq = 64;
- filter[i].Pgain = 64;
- filter[i].Pq = 64;
- filter[i].Pstages = 0;
- filter[i].l = new AnalogFilter(6, 1000.0, 1.0, 0);
- filter[i].r = new AnalogFilter(6, 1000.0, 1.0, 0);
- }
- //default values
- Pvolume = 50;
-
- setpreset(Ppreset);
- cleanup();
-}
-
-EQ::~EQ()
-{}
-
-void EQ::cleanup()
-{
- for(int i = 0; i < MAX_EQ_BANDS; i++) {
- filter[i].l->cleanup();
- filter[i].r->cleanup();
- }
-}
-
-void EQ::out(const Stereo<float *> &smp)
-{
- int i;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] = smp.l[i] * volume;
- efxoutr[i] = smp.r[i] * volume;
- }
-
- for(i = 0; i < MAX_EQ_BANDS; i++) {
- if(filter[i].Ptype == 0)
- continue;
- filter[i].l->filterout(efxoutl);
- filter[i].r->filterout(efxoutr);
- }
-}
-
-
-/*
- * Parameter control
- */
-void EQ::setvolume(unsigned char Pvolume)
-{
- this->Pvolume = Pvolume;
-
- outvolume = pow(0.005, (1.0 - Pvolume / 127.0)) * 10.0;
- if(insertion == 0)
- volume = 1.0;
- else
- volume = outvolume;
- ;
-}
-
-
-void EQ::setpreset(unsigned char npreset)
-{
- const int PRESET_SIZE = 1;
- const int NUM_PRESETS = 2;
- unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
- //EQ 1
- {67},
- //EQ 2
- {67}
- };
-
- if(npreset >= NUM_PRESETS)
- npreset = NUM_PRESETS - 1;
- for(int n = 0; n < PRESET_SIZE; n++)
- changepar(n, presets[npreset][n]);
- Ppreset = npreset;
-}
-
-
-void EQ::changepar(int npar, unsigned char value)
-{
- switch(npar) {
- case 0:
- setvolume(value);
- break;
- }
- if(npar < 10)
- return;
-
- int nb = (npar - 10) / 5; //number of the band (filter)
- if(nb >= MAX_EQ_BANDS)
- return;
- int bp = npar % 5; //band paramenter
-
- REALTYPE tmp;
- switch(bp) {
- case 0:
- filter[nb].Ptype = value;
- if(value > 9)
- filter[nb].Ptype = 0; //has to be changed if more filters will be added
- if(filter[nb].Ptype != 0) {
- filter[nb].l->settype(value - 1);
- filter[nb].r->settype(value - 1);
- }
- break;
- case 1:
- filter[nb].Pfreq = value;
- tmp = 600.0 * pow(30.0, (value - 64.0) / 64.0);
- filter[nb].l->setfreq(tmp);
- filter[nb].r->setfreq(tmp);
- break;
- case 2:
- filter[nb].Pgain = value;
- tmp = 30.0 * (value - 64.0) / 64.0;
- filter[nb].l->setgain(tmp);
- filter[nb].r->setgain(tmp);
- break;
- case 3:
- filter[nb].Pq = value;
- tmp = pow(30.0, (value - 64.0) / 64.0);
- filter[nb].l->setq(tmp);
- filter[nb].r->setq(tmp);
- break;
- case 4:
- filter[nb].Pstages = value;
- if(value >= MAX_FILTER_STAGES)
- filter[nb].Pstages = MAX_FILTER_STAGES - 1;
- filter[nb].l->setstages(value);
- filter[nb].r->setstages(value);
- break;
- }
-}
-
-unsigned char EQ::getpar(int npar) const
-{
- switch(npar) {
- case 0:
- return Pvolume;
- break;
- }
-
- if(npar < 10)
- return 0;
-
- int nb = (npar - 10) / 5; //number of the band (filter)
- if(nb >= MAX_EQ_BANDS)
- return 0;
- int bp = npar % 5; //band paramenter
- switch(bp) {
- case 0:
- return filter[nb].Ptype;
- break;
- case 1:
- return filter[nb].Pfreq;
- break;
- case 2:
- return filter[nb].Pgain;
- break;
- case 3:
- return filter[nb].Pq;
- break;
- case 4:
- return filter[nb].Pstages;
- break;
- }
-
- return 0; //in case of bogus parameter number
-}
-
-
-
-
-REALTYPE EQ::getfreqresponse(REALTYPE freq)
-{
- REALTYPE resp = 1.0;
-
- for(int i = 0; i < MAX_EQ_BANDS; i++) {
- if(filter[i].Ptype == 0)
- continue;
- resp *= filter[i].l->H(freq);
- }
- return rap2dB(resp * outvolume);
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/EQ.h b/plugins/zynaddsubfx/src/Effects/EQ.h
deleted file mode 100644
index 7ac3284..0000000
--- a/plugins/zynaddsubfx/src/Effects/EQ.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- EQ.h - EQ Effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef EQ_H
-#define EQ_H
-
-#include "../globals.h"
-#include "../DSP/AnalogFilter.h"
-#include "Effect.h"
-
-/**EQ Effect*/
-class EQ:public Effect
-{
- public:
- EQ(const int &insertion_, REALTYPE *efxoutl_, REALTYPE *efxoutr_);
- ~EQ();
- void out(const Stereo<float *> &smp);
- void setpreset(unsigned char npreset);
- void changepar(int npar, unsigned char value);
- unsigned char getpar(int npar) const;
- void cleanup();
- REALTYPE getfreqresponse(REALTYPE freq);
- private:
- //Parameters
- unsigned char Pvolume; /**<Volume*/
-
- void setvolume(unsigned char Pvolume);
-
- struct {
- //parameters
- unsigned char Ptype, Pfreq, Pgain, Pq, Pstages;
- //internal values
- AnalogFilter *l, *r;
- } filter[MAX_EQ_BANDS];
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/Echo.cpp b/plugins/zynaddsubfx/src/Effects/Echo.cpp
deleted file mode 100644
index ffdbba8..0000000
--- a/plugins/zynaddsubfx/src/Effects/Echo.cpp
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Echo.cpp - Echo effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Copyright (C) 2009-2010 Mark McCurry
- Author: Nasca Octavian Paul
- Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include "Echo.h"
-
-#define MAX_DELAY 2
-
-Echo::Echo(const int &insertion_,
- REALTYPE *const efxoutl_,
- REALTYPE *const efxoutr_)
- :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0),
- samplerate(SAMPLE_RATE),
- Pvolume(50), Ppanning(64), Pdelay(60),
- Plrdelay(100), Plrcross(100), Pfb(40), Phidamp(60),
- delayTime(1), lrdelay(0), avgDelay(0),
- delay(new REALTYPE[(int)(MAX_DELAY * samplerate)],
- new REALTYPE[(int)(MAX_DELAY * samplerate)]),
- old(0.0), pos(0), delta(1), ndelta(1)
-{
- initdelays();
- setpreset(Ppreset);
-}
-
-Echo::~Echo()
-{
- delete[] delay.l;
- delete[] delay.r;
-}
-
-/*
- * Cleanup the effect
- */
-void Echo::cleanup()
-{
- memset(delay.l,0,MAX_DELAY*samplerate*sizeof(REALTYPE));
- memset(delay.r,0,MAX_DELAY*samplerate*sizeof(REALTYPE));
- old = Stereo<REALTYPE>(0.0);
-}
-
-inline int max(int a, int b)
-{
- return a > b ? a : b;
-}
-
-/*
- * Initialize the delays
- */
-void Echo::initdelays()
-{
- cleanup();
- //number of seconds to delay left chan
- float dl = avgDelay - lrdelay;
-
- //number of seconds to delay right chan
- float dr = avgDelay + lrdelay;
-
- ndelta.l = max(1,(int) (dl * samplerate));
- ndelta.r = max(1,(int) (dr * samplerate));
-}
-
-void Echo::out(const Stereo<float *> &input)
-{
- REALTYPE ldl, rdl;
-
- for(int i = 0; i < SOUND_BUFFER_SIZE; ++i) {
- ldl = delay.l[pos.l];
- rdl = delay.r[pos.r];
- ldl = ldl * (1.0 - lrcross) + rdl * lrcross;
- rdl = rdl * (1.0 - lrcross) + ldl * lrcross;
-
- efxoutl[i] = ldl * 2.0;
- efxoutr[i] = rdl * 2.0;
-
- ldl = input.l[i] * panning - ldl * fb;
- rdl = input.r[i] * (1.0 - panning) - rdl * fb;
-
- //LowPass Filter
- old.l = delay.l[(pos.l+delta.l)%(MAX_DELAY * samplerate)] = ldl * hidamp + old.l * (1.0 - hidamp);
- old.r = delay.r[(pos.r+delta.r)%(MAX_DELAY * samplerate)] = rdl * hidamp + old.r * (1.0 - hidamp);
-
- //increment
- ++pos.l;// += delta.l;
- ++pos.r;// += delta.r;
-
- //ensure that pos is still in bounds
- pos.l %= MAX_DELAY * samplerate;
- pos.r %= MAX_DELAY * samplerate;
-
- //adjust delay if needed
- delta.l = (15*delta.l + ndelta.l)/16;
- delta.r = (15*delta.r + ndelta.r)/16;
- }
-}
-
-
-/*
- * Parameter control
- */
-void Echo::setvolume(unsigned char Pvolume)
-{
- this->Pvolume = Pvolume;
-
- if(insertion == 0) {
- outvolume = pow(0.01, (1.0 - Pvolume / 127.0)) * 4.0;
- volume = 1.0;
- }
- else
- volume = outvolume = Pvolume / 127.0;
- ;
- if(Pvolume == 0)
- cleanup();
-}
-
-void Echo::setpanning(unsigned char Ppanning)
-{
- this->Ppanning = Ppanning;
- panning = (Ppanning + 0.5) / 127.0;
-}
-
-void Echo::setdelay(unsigned char Pdelay)
-{
- this->Pdelay=Pdelay;
- avgDelay=(Pdelay/127.0*1.5);//0 .. 1.5 sec
- initdelays();
-}
-
-void Echo::setlrdelay(unsigned char Plrdelay)
-{
- REALTYPE tmp;
- this->Plrdelay = Plrdelay;
- tmp =
- (pow(2, fabs(Plrdelay - 64.0) / 64.0 * 9) - 1.0) / 1000.0;
- if(Plrdelay < 64.0)
- tmp = -tmp;
- lrdelay = tmp;
- initdelays();
-}
-
-void Echo::setlrcross(unsigned char Plrcross)
-{
- this->Plrcross = Plrcross;
- lrcross = Plrcross / 127.0 * 1.0;
-}
-
-void Echo::setfb(unsigned char Pfb)
-{
- this->Pfb = Pfb;
- fb = Pfb / 128.0;
-}
-
-void Echo::sethidamp(unsigned char Phidamp)
-{
- this->Phidamp = Phidamp;
- hidamp = 1.0 - Phidamp / 127.0;
-}
-
-void Echo::setpreset(unsigned char npreset)
-{
- /**\todo see if the preset array can be replaced with a struct or a class*/
- const int PRESET_SIZE = 7;
- const int NUM_PRESETS = 9;
- unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
- //Echo 1
- {67, 64, 35, 64, 30, 59, 0 },
- //Echo 2
- {67, 64, 21, 64, 30, 59, 0 },
- //Echo 3
- {67, 75, 60, 64, 30, 59, 10 },
- //Simple Echo
- {67, 60, 44, 64, 30, 0, 0 },
- //Canyon
- {67, 60, 102, 50, 30, 82, 48 },
- //Panning Echo 1
- {67, 64, 44, 17, 0, 82, 24 },
- //Panning Echo 2
- {81, 60, 46, 118, 100, 68, 18 },
- //Panning Echo 3
- {81, 60, 26, 100, 127, 67, 36 },
- //Feedback Echo
- {62, 64, 28, 64, 100, 90, 55 }
- };
-
-
- if(npreset >= NUM_PRESETS)
- npreset = NUM_PRESETS - 1;
- for(int n = 0; n < PRESET_SIZE; n++)
- changepar(n, presets[npreset][n]);
- if(insertion)
- setvolume(presets[npreset][0] / 2); //lower the volume if this is insertion effect
- Ppreset = npreset;
-}
-
-
-void Echo::changepar(int npar, unsigned char value)
-{
- switch(npar) {
- case 0:
- setvolume(value);
- break;
- case 1:
- setpanning(value);
- break;
- case 2:
- setdelay(value);
- break;
- case 3:
- setlrdelay(value);
- break;
- case 4:
- setlrcross(value);
- break;
- case 5:
- setfb(value);
- break;
- case 6:
- sethidamp(value);
- break;
- }
-}
-
-unsigned char Echo::getpar(int npar) const
-{
- switch(npar) {
- case 0:
- return Pvolume;
- break;
- case 1:
- return Ppanning;
- break;
- case 2:
- return Pdelay;
- break;
- case 3:
- return Plrdelay;
- break;
- case 4:
- return Plrcross;
- break;
- case 5:
- return Pfb;
- break;
- case 6:
- return Phidamp;
- break;
- }
- return 0; // in case of bogus parameter number
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/Echo.h b/plugins/zynaddsubfx/src/Effects/Echo.h
deleted file mode 100644
index 3701c5c..0000000
--- a/plugins/zynaddsubfx/src/Effects/Echo.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Echo.h - Echo Effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef ECHO_H
-#define ECHO_H
-
-#include "../globals.h"
-#include "Effect.h"
-#include "../Misc/Stereo.h"
-#include "../Samples/Sample.h"
-
-/**Echo Effect*/
-class Echo:public Effect
-{
- public:
-
- /**
- * The Constructor For Echo
- * @param insertion_ integer to determine if Echo is an insertion effect
- * or not
- * @param efxoutl_ Effect out Left Channel
- * @param efxoutr_ Effect out Right Channel
- * @return An initialized Echo Object
- */
- Echo(const int &insertion_,
- REALTYPE *const efxoutl_,
- REALTYPE *const efxoutr_);
-
- /**
- * The destructor
- */
- ~Echo();
-
- void out(const Stereo<float *> &input);
-
- /**
- * Sets the state of Echo to the specified preset
- * @param npreset number of chosen preset
- */
- void setpreset(unsigned char npreset);
-
- /**
- * Sets the value of the chosen variable
- *
- * The possible parameters are:
- * -# Volume
- * -# Panning
- * -# Delay
- * -# L/R Delay
- * -# L/R Crossover
- * -# Feedback
- * -# Dampening
- * @param npar number of chosen parameter
- * @param value the new value
- */
- void changepar(int npar, unsigned char value);
-
- /**
- * Gets the specified parameter
- *
- * The possible parameters are
- * -# Volume
- * -# Panning
- * -# Delay
- * -# L/R Delay
- * -# L/R Crossover
- * -# Feedback
- * -# Dampening
- * @param npar number of chosen parameter
- * @return value of parameter
- */
- unsigned char getpar(int npar) const;
-
- int getnumparams();
-
- /**Zeros out the state of the Echo*/
- void cleanup();
-
- /**\todo This function needs to be implemented or the prototype should be removed*/
- void setdryonly();
- private:
- int samplerate;
-
- //Parameters
- char Pvolume; /**<#1 Volume or Dry/Wetness*/
- char Ppanning; /**<#2 Panning*/
- char Pdelay; /**<#3 Delay of the Echo*/
- char Plrdelay; /**<#4 L/R delay difference*/
- char Plrcross; /**<#5 L/R Mixing*/
- char Pfb; /**<#6Feedback*/
- char Phidamp; /**<#7Dampening of the Echo*/
-
- void setvolume(unsigned char Pvolume);
- void setpanning(unsigned char Ppanning);
- void setdelay(unsigned char Pdelay);
- void setlrdelay(unsigned char Plrdelay);
- void setlrcross(unsigned char Plrcross);
- void setfb(unsigned char Pfb);
- void sethidamp(unsigned char Phidamp);
-
- //Real Parameters
- REALTYPE panning, lrcross, fb, hidamp;
- //Left/Right delay lengths
- Stereo<int> delayTime;
- REALTYPE lrdelay;
- REALTYPE avgDelay;
-
- void initdelays();
- //2 channel ring buffer
- Stereo<REALTYPE *> delay;
- Stereo<REALTYPE> old;
-
- //position of reading/writing from delaysample
- Stereo<int> pos;
- //step size for delay buffer
- Stereo<int> delta;
- Stereo<int> ndelta;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/Effect.cpp b/plugins/zynaddsubfx/src/Effects/Effect.cpp
deleted file mode 100644
index ab44312..0000000
--- a/plugins/zynaddsubfx/src/Effects/Effect.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Effect.cpp - this class is inherited by the all effects(Reverb, Echo, ..)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "Effect.h"
-
-Effect::Effect(bool insertion_, REALTYPE *const efxoutl_,
- REALTYPE *const efxoutr_, FilterParams *filterpars_,
- const unsigned char &Ppreset_)
- :Ppreset(Ppreset_), efxoutl(efxoutl_), efxoutr(efxoutr_),
- filterpars(filterpars_), insertion(insertion_)
-{}
-
-void Effect::out(REALTYPE *const smpsl, REALTYPE *const smpsr)
-{
- out(Stereo<float *>(smpsl,smpsr));
-};
-
diff --git a/plugins/zynaddsubfx/src/Effects/Effect.h b/plugins/zynaddsubfx/src/Effects/Effect.h
deleted file mode 100644
index eddbbba..0000000
--- a/plugins/zynaddsubfx/src/Effects/Effect.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Effect.h - this class is inherited by the all effects(Reverb, Echo, ..)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef EFFECT_H
-#define EFFECT_H
-
-#include "../Misc/Util.h"
-#include "../globals.h"
-#include "../Params/FilterParams.h"
-#include "../Misc/Stereo.h"
-
-
-/**this class is inherited by the all effects(Reverb, Echo, ..)*/
-class Effect
-{
- public:
- /**
- * Effect Constructor
- * @param insertion_ 1 when it is an insertion Effect and 0 when it
- * is not an insertion Effect
- * @param efxoutl_ Effect output buffer Left channel
- * @param efxoutr_ Effect output buffer Right channel
- * @param filterpars_ pointer to FilterParams array
- * @param Ppreset_ chosen preset
- * @return Initialized Effect object*/
- Effect(bool insertion_, REALTYPE *const efxoutl_,
- REALTYPE *const efxoutr_, FilterParams *filterpars_,
- const unsigned char &Ppreset_);
- /**Deconstructor
- *
- * Deconstructs the Effect and releases any resouces that it has
- * allocated for itself*/
- virtual ~Effect() {}
- /**
- * Choose a preset
- * @param npreset number of chosen preset*/
- virtual void setpreset(unsigned char npreset) = 0;
- /**Change parameter npar to value
- * @param npar chosen parameter
- * @param value chosen new value*/
- virtual void changepar(int npar, unsigned char value) = 0;
- /**Get the value of parameter npar
- * @param npar chosen parameter
- * @return the value of the parameter in an unsigned char or 0 if it
- * does not exist*/
- virtual unsigned char getpar(int npar) const = 0;
- /**Output result of effect based on the given buffers
- *
- * This method should result in the effect generating its results
- * and placing them into the efxoutl and efxoutr buffers.
- * Every Effect should overide this method.
- *
- * @param smpsl Input buffer for the Left channel
- * @param smpsr Input buffer for the Right channel
- */
- void out(REALTYPE *const smpsl, REALTYPE *const smpsr);
- virtual void out(const Stereo<float *> &smp) = 0;
- /**Reset the state of the effect*/
- virtual void cleanup() {}
- /**This is only used for EQ (for user interface)*/
- virtual REALTYPE getfreqresponse(REALTYPE freq) {
- return freq;
- }
-
- unsigned char Ppreset; /**<Currently used preset*/
- REALTYPE *const efxoutl; /**<Effect out Left Channel*/
- REALTYPE *const efxoutr; /**<Effect out Right Channel*/
- /**\todo make efxoutl and efxoutr private and replace them with a Stereo<float*>*/
-
- REALTYPE outvolume;/**<This is the volume of effect and is public because
- * it is needed in system effects.
- * The out volume of such effects are always 1.0, so
- * this setting tells me how is the volume to the
- * Master Output only.*/
-
- REALTYPE volume;
-
- FilterParams *filterpars; /**<Parameters for filters used by Effect*/
- protected:
-
- const bool insertion;/**<If Effect is an insertion effect, insertion=1
- *otherwise, it should be insertion=0*/
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/EffectLFO.cpp b/plugins/zynaddsubfx/src/Effects/EffectLFO.cpp
deleted file mode 100644
index f157c71..0000000
--- a/plugins/zynaddsubfx/src/Effects/EffectLFO.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- EffectLFO.cpp - Stereo LFO used by some effects
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cstdlib>
-#include <cmath>
-
-#include "EffectLFO.h"
-
-
-EffectLFO::EffectLFO()
-{
- xl = 0.0;
- xr = 0.0;
- Pfreq = 40;
- Prandomness = 0;
- PLFOtype = 0;
- Pstereo = 96;
-
- updateparams();
-
- ampl1 = (1 - lfornd) + lfornd * RND;
- ampl2 = (1 - lfornd) + lfornd * RND;
- ampr1 = (1 - lfornd) + lfornd * RND;
- ampr2 = (1 - lfornd) + lfornd * RND;
-}
-
-EffectLFO::~EffectLFO()
-{}
-
-
-/*
- * Update the changed parameters
- */
-void EffectLFO::updateparams()
-{
- REALTYPE lfofreq = (pow(2, Pfreq / 127.0 * 10.0) - 1.0) * 0.03;
- incx = fabs(lfofreq) * (REALTYPE)SOUND_BUFFER_SIZE / (REALTYPE)SAMPLE_RATE;
- if(incx > 0.49999999)
- incx = 0.499999999; //Limit the Frequency
-
- lfornd = Prandomness / 127.0;
- if(lfornd < 0.0)
- lfornd = 0.0;
- else
- if(lfornd > 1.0)
- lfornd = 1.0;
-
- if(PLFOtype > 1)
- PLFOtype = 1; //this has to be updated if more lfo's are added
- lfotype = PLFOtype;
-
- xr = fmod(xl + (Pstereo - 64.0) / 127.0 + 1.0, 1.0);
-}
-
-
-/*
- * Compute the shape of the LFO
- */
-REALTYPE EffectLFO::getlfoshape(REALTYPE x)
-{
- REALTYPE out;
- switch(lfotype) {
- case 1: //EffectLFO_TRIANGLE
- if((x > 0.0) && (x < 0.25))
- out = 4.0 * x;
- else
- if((x > 0.25) && (x < 0.75))
- out = 2 - 4 * x;
- else
- out = 4.0 * x - 4.0;
- break;
- /**\todo more to be added here; also ::updateparams() need to be updated (to allow more lfotypes)*/
- default:
- out = cos(x * 2 * PI); //EffectLFO_SINE
- }
- return out;
-}
-
-/*
- * LFO output
- */
-void EffectLFO::effectlfoout(REALTYPE *outl, REALTYPE *outr)
-{
- REALTYPE out;
-
- out = getlfoshape(xl);
- if((lfotype == 0) || (lfotype == 1))
- out *= (ampl1 + xl * (ampl2 - ampl1));
- xl += incx;
- if(xl > 1.0) {
- xl -= 1.0;
- ampl1 = ampl2;
- ampl2 = (1.0 - lfornd) + lfornd * RND;
- }
- *outl = (out + 1.0) * 0.5;
-
- out = getlfoshape(xr);
- if((lfotype == 0) || (lfotype == 1))
- out *= (ampr1 + xr * (ampr2 - ampr1));
- xr += incx;
- if(xr > 1.0) {
- xr -= 1.0;
- ampr1 = ampr2;
- ampr2 = (1.0 - lfornd) + lfornd * RND;
- }
- *outr = (out + 1.0) * 0.5;
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/EffectLFO.h b/plugins/zynaddsubfx/src/Effects/EffectLFO.h
deleted file mode 100644
index cd54463..0000000
--- a/plugins/zynaddsubfx/src/Effects/EffectLFO.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- EffectLFO.h - Stereo LFO used by some effects
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef EFFECT_LFO_H
-#define EFFECT_LFO_H
-
-#include "../globals.h"
-/**LFO for some of the Effect objects
- * \todo see if this should inherit LFO*/
-class EffectLFO
-{
- public:
- EffectLFO();
- ~EffectLFO();
- void effectlfoout(REALTYPE *outl, REALTYPE *outr);
- void updateparams();
- unsigned char Pfreq;
- unsigned char Prandomness;
- unsigned char PLFOtype;
- unsigned char Pstereo; //"64"=0
- private:
- REALTYPE getlfoshape(REALTYPE x);
-
- REALTYPE xl, xr;
- REALTYPE incx;
- REALTYPE ampl1, ampl2, ampr1, ampr2; //necessary for "randomness"
- REALTYPE lfornd;
- char lfotype; /**\todo GET RID OF CHAR (replace with short or enum)*/
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/EffectMgr.cpp b/plugins/zynaddsubfx/src/Effects/EffectMgr.cpp
deleted file mode 100644
index eea0e32..0000000
--- a/plugins/zynaddsubfx/src/Effects/EffectMgr.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- EffectMgr.cpp - Effect manager, an interface betwen the program and effects
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "EffectMgr.h"
-#include <iostream>
-using namespace std;
-
-EffectMgr::EffectMgr(int insertion_, pthread_mutex_t *mutex_)
- :insertion(insertion_),
- efxoutl(new REALTYPE[SOUND_BUFFER_SIZE]),
- efxoutr(new REALTYPE[SOUND_BUFFER_SIZE]),
- filterpars(NULL), nefx(0), efx(NULL), mutex(mutex_), dryonly(false)
-{
- setpresettype("Peffect"); /**\todo Figure out what this is doing
- * , as it might be another leaky abstraction.*/
-// efx=NULL;
-// nefx=0;
-// insertion=insertion_;
-// mutex=mutex_;
-// efxoutl=new REALTYPE[SOUND_BUFFER_SIZE];
-// efxoutr=new REALTYPE[SOUND_BUFFER_SIZE];
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] = 0.0;
- efxoutr[i] = 0.0;
- }
-// filterpars=NULL;
-// dryonly=false;
- defaults();
-}
-
-
-EffectMgr::~EffectMgr()
-{
- if(efx != NULL)
- delete efx;
- delete [] efxoutl;
- delete [] efxoutr;
-}
-
-void EffectMgr::defaults()
-{
- changeeffect(0);
- setdryonly(false);
-}
-
-/*
- * Change the effect
- */
-void EffectMgr::changeeffect(int nefx_)
-{
- cleanup();
- if(nefx == nefx_)
- return;
- nefx = nefx_;
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] = 0.0;
- efxoutr[i] = 0.0;
- }
-
- if(efx != NULL)
- delete efx;
- switch(nefx) { /**\todo replace leaky abstraction*/
- case 1:
- efx = new Reverb(insertion, efxoutl, efxoutr);
- break;
- case 2:
- efx = new Echo(insertion, efxoutl, efxoutr);
- break;
- case 3:
- efx = new Chorus(insertion, efxoutl, efxoutr);
- break;
- case 4:
- efx = new Phaser(insertion, efxoutl, efxoutr);
- break;
- case 5:
- efx = new Alienwah(insertion, efxoutl, efxoutr);
- break;
- case 6:
- efx = new Distorsion(insertion, efxoutl, efxoutr);
- break;
- case 7:
- efx = new EQ(insertion, efxoutl, efxoutr);
- break;
- case 8:
- efx = new DynamicFilter(insertion, efxoutl, efxoutr);
- break;
- //put more effect here
- default:
- efx = NULL;
- break; //no effect (thru)
- }
-
- if(efx != NULL)
- filterpars = efx->filterpars;
-}
-
-/*
- * Obtain the effect number
- */
-int EffectMgr::geteffect()
-{
- return nefx;
-}
-
-/*
- * Cleanup the current effect
- */
-void EffectMgr::cleanup()
-{
- if(efx != NULL)
- efx->cleanup();
-}
-
-
-/*
- * Get the preset of the current effect
- */
-
-unsigned char EffectMgr::getpreset()
-{
- if(efx != NULL)
- return efx->Ppreset;
- else
- return 0;
-}
-
-/*
- * Change the preset of the current effect
- */
-void EffectMgr::changepreset_nolock(unsigned char npreset)
-{
- if(efx != NULL)
- efx->setpreset(npreset);
-}
-
-/*
- * Change the preset of the current effect(with thread locking)
- */
-void EffectMgr::changepreset(unsigned char npreset)
-{
- pthread_mutex_lock(mutex);
- changepreset_nolock(npreset);
- pthread_mutex_unlock(mutex);
-}
-
-
-/*
- * Change a parameter of the current effect
- */
-void EffectMgr::seteffectpar_nolock(int npar, unsigned char value)
-{
- if(efx == NULL)
- return;
- efx->changepar(npar, value);
-}
-
-/*
- * Change a parameter of the current effect (with thread locking)
- */
-void EffectMgr::seteffectpar(int npar, unsigned char value)
-{
- pthread_mutex_lock(mutex);
- seteffectpar_nolock(npar, value);
- pthread_mutex_unlock(mutex);
-}
-
-/*
- * Get a parameter of the current effect
- */
-unsigned char EffectMgr::geteffectpar(int npar)
-{
- if(efx == NULL)
- return 0;
- return efx->getpar(npar);
-}
-
-
-/*
- * Apply the effect
- */
-void EffectMgr::out(REALTYPE *smpsl, REALTYPE *smpsr)
-{
- int i;
- if(efx == NULL) {
- if(insertion == 0)
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- smpsl[i] = 0.0;
- smpsr[i] = 0.0;
- efxoutl[i] = 0.0;
- efxoutr[i] = 0.0;
- }
- ;
- return;
- }
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- smpsl[i] += denormalkillbuf[i];
- smpsr[i] += denormalkillbuf[i];
- efxoutl[i] = 0.0;
- efxoutr[i] = 0.0;
- }
- efx->out(smpsl, smpsr);
-
- REALTYPE volume = efx->volume;
-
- if(nefx == 7) { //this is need only for the EQ effect
- /**\todo figure out why*/
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- smpsl[i] = efxoutl[i];
- smpsr[i] = efxoutr[i];
- }
- return;
- }
-
- //Insertion effect
- if(insertion != 0) {
- REALTYPE v1, v2;
- if(volume < 0.5) {
- v1 = 1.0;
- v2 = volume * 2.0;
- }
- else {
- v1 = (1.0 - volume) * 2.0;
- v2 = 1.0;
- }
- if((nefx == 1) || (nefx == 2))
- v2 *= v2; //for Reverb and Echo, the wet function is not liniar
-
- if(dryonly) { //this is used for instrument effect only
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- smpsl[i] *= v1;
- smpsr[i] *= v1;
- efxoutl[i] *= v2;
- efxoutr[i] *= v2;
- }
- }
- else { //normal instrument/insertion effect
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- smpsl[i] = smpsl[i] * v1 + efxoutl[i] * v2;
- smpsr[i] = smpsr[i] * v1 + efxoutr[i] * v2;
- }
- }
- }
- else { //System effect
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] *= 2.0 * volume;
- efxoutr[i] *= 2.0 * volume;
- smpsl[i] = efxoutl[i];
- smpsr[i] = efxoutr[i];
- }
- }
-}
-
-/*
- * Get the effect volume for the system effect
- */
-REALTYPE EffectMgr::sysefxgetvolume()
-{
- if(efx == NULL)
- return 1.0;
- else
- return efx->outvolume;
-}
-
-
-/*
- * Get the EQ response
- */
-REALTYPE EffectMgr::getEQfreqresponse(REALTYPE freq)
-{
- if(nefx == 7)
- return efx->getfreqresponse(freq);
- else
- return 0.0;
-}
-
-
-void EffectMgr::setdryonly(bool value)
-{
- dryonly = value;
-}
-
-void EffectMgr::add2XML(XMLwrapper *xml)
-{
- xml->addpar("type", geteffect());
-
- if((efx == NULL) || (geteffect() == 0))
- return;
- xml->addpar("preset", efx->Ppreset);
-
- xml->beginbranch("EFFECT_PARAMETERS");
- for(int n = 0; n < 128; n++) {
- /**\todo evaluate who should oversee saving
- * and loading of parameters*/
- int par = geteffectpar(n);
- if(par == 0)
- continue;
- xml->beginbranch("par_no", n);
- xml->addpar("par", par);
- xml->endbranch();
- }
- if(filterpars != NULL) {
- xml->beginbranch("FILTER");
- filterpars->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
-}
-
-void EffectMgr::getfromXML(XMLwrapper *xml)
-{
- changeeffect(xml->getpar127("type", geteffect()));
-
- if((efx == NULL) || (geteffect() == 0))
- return;
-
- efx->Ppreset = xml->getpar127("preset", efx->Ppreset);
-
- if(xml->enterbranch("EFFECT_PARAMETERS")) {
- for(int n = 0; n < 128; n++) {
- seteffectpar_nolock(n, 0); //erase effect parameter
- if(xml->enterbranch("par_no", n) == 0)
- continue;
-
- int par = geteffectpar(n);
- seteffectpar_nolock(n, xml->getpar127("par", par));
- xml->exitbranch();
- }
- if(filterpars != NULL) {
- if(xml->enterbranch("FILTER")) {
- filterpars->getfromXML(xml);
- xml->exitbranch();
- }
- }
- xml->exitbranch();
- }
- cleanup();
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/EffectMgr.h b/plugins/zynaddsubfx/src/Effects/EffectMgr.h
deleted file mode 100644
index 29d6a7a..0000000
--- a/plugins/zynaddsubfx/src/Effects/EffectMgr.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- EffectMgr.h - Effect manager, an interface betwen the program and effects
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#ifndef EFFECTMGR_H
-#define EFFECTMGR_H
-
-#include <pthread.h>
-
-#include "Effect.h"
-#include "Reverb.h"
-#include "Echo.h"
-#include "Chorus.h"
-#include "Phaser.h"
-#include "Alienwah.h"
-#include "Distorsion.h"
-#include "EQ.h"
-#include "DynamicFilter.h"
-#include "../Misc/XMLwrapper.h"
-#include "../Params/FilterParams.h"
-#include "../Params/Presets.h"
-
-/**Effect manager, an interface betwen the program and effects*/
-class EffectMgr:public Presets
-{
- public:
- EffectMgr(int insertion_, pthread_mutex_t *mutex_);
- ~EffectMgr();
-
- void add2XML(XMLwrapper *xml);
- void defaults();
- void getfromXML(XMLwrapper *xml);
-
- void out(REALTYPE *smpsl, REALTYPE *smpsr);
-
- void setdryonly(bool value);
-
- /**get the output(to speakers) volume of the systemeffect*/
- REALTYPE sysefxgetvolume();
-
- void cleanup(); /**<cleanup the effect*/
-
- /**change effect to the given int
- * @param nefx_ the number of the effect*/
- void changeeffect(int nefx_);
- /**Get the number of the effect
- * @return the number*/
- int geteffect();
- /**
- * Change the preset to the given one
- * @param npreset number of the chosen preset
- */
- void changepreset(unsigned char npreset);
- /**
- * Change the preset to the given one without locking the thread
- * @param npreset number of the chosen preset
- */
- void changepreset_nolock(unsigned char npreset);
- /**
- * Get the current preset
- * @return the current preset*/
- unsigned char getpreset();
- /**sets the effect par*/
- void seteffectpar(int npar, unsigned char value);
- /**<sets the effect par without thread lock*/
- void seteffectpar_nolock(int npar, unsigned char value);
- unsigned char geteffectpar(int npar);
- const bool insertion; /**<1 if the effect is connected as insertion effect*/
- REALTYPE *efxoutl, *efxoutr;
-
- /**used by UI
- * \todo needs to be decoupled*/
- REALTYPE getEQfreqresponse(REALTYPE freq);
-
- FilterParams *filterpars;
-
- private:
- int nefx;
- Effect *efx;
- pthread_mutex_t *mutex;
- bool dryonly;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/Phaser.cpp b/plugins/zynaddsubfx/src/Effects/Phaser.cpp
deleted file mode 100644
index cbb098b..0000000
--- a/plugins/zynaddsubfx/src/Effects/Phaser.cpp
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
-
- Phaser.cpp - Phasing and Approximate digital model of an analog JFET phaser.
- Analog modeling implemented by Ryan Billing aka Transmogrifox.
- ZynAddSubFX - a software synthesizer
-
- Phaser.cpp - Phaser effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Copyright (C) 2009-2010 Ryan Billing
- Copyright (C) 2010-2010 Mark McCurry
- Author: Nasca Octavian Paul
- Ryan Billing
- Mark McCurry
-
- DSP analog modeling theory & practice largely influenced by various CCRMA publications, particularly works by Julius O. Smith.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include <algorithm>
-#include "Phaser.h"
-
-using namespace std;
-
-#define PHASER_LFO_SHAPE 2
-#define ONE_ 0.99999f // To prevent LFO ever reaching 1.0 for filter stability purposes
-#define ZERO_ 0.00001f // Same idea as above.
-
-Phaser::Phaser(const int &insertion_, REALTYPE *efxoutl_, REALTYPE *efxoutr_)
- :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0), old(NULL), xn1(NULL), yn1(NULL), diff(0.0), oldgain(0.0),
- fb(0.0)
-{
- analog_setup();
- setpreset(Ppreset);
- cleanup();
-}
-
-void Phaser::analog_setup()
-{
- //model mismatch between JFET devices
- offset[0] = -0.2509303f;
- offset[1] = 0.9408924f;
- offset[2] = 0.998f;
- offset[3] = -0.3486182f;
- offset[4] = -0.2762545f;
- offset[5] = -0.5215785f;
- offset[6] = 0.2509303f;
- offset[7] = -0.9408924f;
- offset[8] = -0.998f;
- offset[9] = 0.3486182f;
- offset[10] = 0.2762545f;
- offset[11] = 0.5215785f;
-
- barber = 0; //Deactivate barber pole phasing by default
-
- mis = 1.0f;
- Rmin = 625.0f;// 2N5457 typical on resistance at Vgs = 0
- Rmax = 22000.0f;// Resistor parallel to FET
- Rmx = Rmin/Rmax;
- Rconst = 1.0f + Rmx; // Handle parallel resistor relationship
- C = 0.00000005f; // 50 nF
- CFs = (float) 2.0f*(float)SAMPLE_RATE*C;
- invperiod = 1.0f / ((float) SOUND_BUFFER_SIZE);
-}
-
-Phaser::~Phaser()
-{
- if(xn1.l)
- delete[] xn1.l;
- if(yn1.l)
- delete[] yn1.l;
- if(xn1.r)
- delete[] xn1.r;
- if(yn1.r)
- delete[] yn1.r;
-}
-
-/*
- * Effect output
- */
-void Phaser::out(const Stereo<REALTYPE *> &input)
-{
- if(Panalog)
- AnalogPhase(input);
- else
- normalPhase(input);
-}
-
-void Phaser::AnalogPhase(const Stereo<REALTYPE *> &input)
-{
- Stereo<REALTYPE> gain(0.0), lfoVal(0.0), mod(0.0), g(0.0), b(0.0), hpf(0.0);
-
- lfo.effectlfoout(&lfoVal.l, &lfoVal.r);
- mod.l = lfoVal.l*width + (depth - 0.5f);
- mod.r = lfoVal.r*width + (depth - 0.5f);
-
- mod.l = limit(mod.l, ZERO_, ONE_);
- mod.r = limit(mod.r, ZERO_, ONE_);
-
- if(Phyper) {
- //Triangle wave squared is approximately sin on bottom, tri on top
- //Result is exponential sweep more akin to filter in synth with
- //exponential generator circuitry.
- mod.l *= mod.l;
- mod.r *= mod.r;
- }
-
- //g.l,g.r is Vp - Vgs. Typical FET drain-source resistance follows constant/[1-sqrt(Vp - Vgs)]
- mod.l = sqrtf(1.0f - mod.l);
- mod.r = sqrtf(1.0f - mod.r);
-
- diff.r = (mod.r - oldgain.r) * invperiod;
- diff.l = (mod.l - oldgain.l) * invperiod;
-
- g = oldgain;
- oldgain = mod;
-
- for (int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- g.l += diff.l;// Linear interpolation between LFO samples
- g.r += diff.r;
-
- Stereo<REALTYPE> xn(input.l[i] * panning,
- input.r[i] * (1.0f - panning));
-
- if (barber) {
- g.l = fmodf((g.l + 0.25f), ONE_);
- g.r = fmodf((g.r + 0.25f), ONE_);
- }
-
- xn.l = applyPhase(xn.l, g.l, fb.l, hpf.l, yn1.l, xn1.l);
- xn.r = applyPhase(xn.r, g.r, fb.r, hpf.r, yn1.r, xn1.r);
-
-
- fb.l = xn.l * feedback;
- fb.r = xn.r * feedback;
- efxoutl[i] = xn.l;
- efxoutr[i] = xn.r;
- }
-
- if(Poutsub) {
- invSignal(efxoutl, SOUND_BUFFER_SIZE);
- invSignal(efxoutr, SOUND_BUFFER_SIZE);
- }
-}
-
-REALTYPE Phaser::applyPhase(REALTYPE x, REALTYPE g, REALTYPE fb,
- REALTYPE &hpf, REALTYPE *yn1, REALTYPE *xn1)
-{
- for(int j = 0; j < Pstages; j++) { //Phasing routine
- mis = 1.0f + offsetpct*offset[j];
-
- //This is symmetrical.
- //FET is not, so this deviates slightly, however sym dist. is
- //better sounding than a real FET.
- float d = (1.0f + 2.0f*(0.25f + g)*hpf*hpf*distortion) * mis;
- Rconst = 1.0f + mis*Rmx;
-
- // This is 1/R. R is being modulated to control filter fc.
- float b = (Rconst - g)/ (d*Rmin);
- float gain = (CFs - b)/(CFs + b);
- yn1[j] = gain * (x + yn1[j]) - xn1[j];
-
- //high pass filter:
- //Distortion depends on the high-pass part of the AP stage.
- hpf = yn1[j] + (1.0f-gain)*xn1[j];
-
- xn1[j] = x;
- x = yn1[j];
- if (j==1)
- x += fb; //Insert feedback after first phase stage
- }
- return x;
-}
-void Phaser::normalPhase(const Stereo<REALTYPE *> &input)
-{
- Stereo<REALTYPE> gain(0.0), lfoVal(0.0);
-
- lfo.effectlfoout(&lfoVal.l, &lfoVal.r);
- gain.l = (exp(lfoVal.l * PHASER_LFO_SHAPE) - 1) / (exp(PHASER_LFO_SHAPE) - 1.0);
- gain.r = (exp(lfoVal.r * PHASER_LFO_SHAPE) - 1) / (exp(PHASER_LFO_SHAPE) - 1.0);
-
- gain.l = 1.0 - phase * (1.0 - depth) - (1.0 - phase) * gain.l * depth;
- gain.r = 1.0 - phase * (1.0 - depth) - (1.0 - phase) * gain.r * depth;
-
- gain.l = limit(gain.l, ZERO_, ONE_);
- gain.r = limit(gain.r, ZERO_, ONE_);
-
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE x = (REALTYPE) i / SOUND_BUFFER_SIZE;
- REALTYPE x1 = 1.0 - x;
- //TODO think about making panning an external feature
- Stereo<REALTYPE> xn(input.l[i] * panning + fb.l,
- input.r[i] * (1.0 - panning) + fb.r);
-
- Stereo<REALTYPE> g(gain.l * x + oldgain.l * x1,
- gain.r * x + oldgain.r * x1);
-
- xn.l = applyPhase(xn.l, g.l, old.l);
- xn.r = applyPhase(xn.r, g.r, old.r);
-
- //Left/Right crossing
- crossover(xn.l, xn.r, lrcross);
-
- fb.l = xn.l * feedback;
- fb.r = xn.r * feedback;
- efxoutl[i] = xn.l;
- efxoutr[i] = xn.r;
- }
-
- oldgain = gain;
-
- if(Poutsub) {
- invSignal(efxoutl, SOUND_BUFFER_SIZE);
- invSignal(efxoutr, SOUND_BUFFER_SIZE);
- }
-}
-
-REALTYPE Phaser::applyPhase(REALTYPE x, REALTYPE g, REALTYPE *old)
-{
- for(int j = 0; j < Pstages * 2; j++) { //Phasing routine
- REALTYPE tmp = old[j];
- old[j] = g * tmp + x;
- x = tmp - g *old[j];
- }
- return x;
-}
-
-/*
- * Cleanup the effect
- */
-void Phaser::cleanup()
-{
- fb = oldgain = Stereo<REALTYPE>(0.0);
- for(int i = 0; i < Pstages * 2; i++) {
- old.l[i] = 0.0;
- old.r[i] = 0.0;
- }
- for(int i = 0; i < Pstages; i++) {
- xn1.l[i] = 0.0;
- yn1.l[i] = 0.0;
- xn1.r[i] = 0.0;
- yn1.r[i] = 0.0;
- }
-}
-
-/*
- * Parameter control
- */
-void Phaser::setwidth(unsigned char Pwidth)
-{
- this->Pwidth = Pwidth;
- width = ((float)Pwidth / 127.0f);
-}
-
-void Phaser::setfb(unsigned char Pfb)
-{
- this->Pfb = Pfb;
- feedback = (float) (Pfb - 64) / 64.2f;
-}
-
-void Phaser::setvolume(unsigned char Pvolume)
-{
- this->Pvolume = Pvolume;
- outvolume = Pvolume / 127.0;
- if(insertion == 0)
- volume = 1.0;
- else
- volume = outvolume;
-}
-
-void Phaser::setpanning(unsigned char Ppanning)
-{
- this->Ppanning = Ppanning;
- panning = (float)Ppanning / 127.0;
-}
-
-void Phaser::setlrcross(unsigned char Plrcross)
-{
- this->Plrcross = Plrcross;
- lrcross = Plrcross / 127.0;
-}
-
-void Phaser::setdistortion(unsigned char Pdistortion)
-{
- this->Pdistortion = Pdistortion;
- distortion = (float)Pdistortion / 127.0f;
-}
-
-void Phaser::setoffset(unsigned char Poffset)
-{
- this->Poffset = Poffset;
- offsetpct = (float)Poffset / 127.0f;
-}
-
-void Phaser::setstages(unsigned char Pstages)
-{
- if(xn1.l)
- delete[] xn1.l;
- if(yn1.l)
- delete[] yn1.l;
- if(xn1.r)
- delete[] xn1.r;
- if(yn1.r)
- delete[] yn1.r;
-
-
- this->Pstages = min(MAX_PHASER_STAGES, (int)Pstages);
-
- old = Stereo<REALTYPE *>(new REALTYPE[Pstages * 2],
- new REALTYPE[Pstages * 2]);
-
- xn1 = Stereo<REALTYPE *>(new REALTYPE[Pstages],
- new REALTYPE[Pstages]);
-
- yn1 = Stereo<REALTYPE *>(new REALTYPE[Pstages],
- new REALTYPE[Pstages]);
-
- cleanup();
-}
-
-void Phaser::setphase(unsigned char Pphase)
-{
- this->Pphase = Pphase;
- phase = (Pphase / 127.0);
-}
-
-void Phaser::setdepth(unsigned char Pdepth)
-{
- this->Pdepth = Pdepth;
- depth = (float)(Pdepth) / 127.0f;
-}
-
-
-void Phaser::setpreset(unsigned char npreset)
-{
- const int PRESET_SIZE = 15;
- const int NUM_PRESETS = 12;
- unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
- //Phaser
- //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
- {64, 64, 36, 0, 0, 64, 110, 64, 1, 0, 0, 20, 0, 0, 0},
- {64, 64, 35, 0, 0, 88, 40, 64, 3, 0, 0, 20, 0, 0, 0},
- {64, 64, 31, 0, 0, 66, 68, 107, 2, 0, 0, 20, 0, 0, 0},
- {39, 64, 22, 0, 0, 66, 67, 10, 5, 0, 1, 20, 0, 0, 0},
- {64, 64, 20, 0, 1, 110, 67, 78, 10, 0, 0, 20, 0, 0, 0},
- {64, 64, 53, 100, 0, 58, 37, 78, 3, 0, 0, 20, 0, 0, 0},
- //APhaser
- //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
- {64, 64, 14, 0, 1, 64, 64, 40, 4, 10, 0, 110, 1, 20, 1},
- {64, 64, 14, 5, 1, 64, 70, 40, 6, 10, 0, 110, 1, 20, 1},
- {64, 64, 9, 0, 0, 64, 60, 40, 8, 10, 0, 40, 0, 20, 1},
- {64, 64, 14, 10, 0, 64, 45, 80, 7, 10, 1, 110, 1, 20, 1},
- {25, 64, 127, 10, 0, 64, 25, 16, 8, 100, 0, 25, 0, 20, 1},
- {64, 64, 1, 10, 1, 64, 70, 40, 12, 10, 0, 110, 1, 20, 1}
- };
- if(npreset >= NUM_PRESETS)
- npreset = NUM_PRESETS - 1;
- for(int n = 0; n < PRESET_SIZE; n++)
- changepar(n, presets[npreset][n]);
- Ppreset = npreset;
-}
-
-
-void Phaser::changepar(int npar, unsigned char value)
-{
- switch(npar) {
- case 0:
- setvolume(value);
- break;
- case 1:
- setpanning(value);
- break;
- case 2:
- lfo.Pfreq = value;
- lfo.updateparams();
- break;
- case 3:
- lfo.Prandomness = value;
- lfo.updateparams();
- break;
- case 4:
- lfo.PLFOtype = value;
- lfo.updateparams();
- barber = (2 == value);
- break;
- case 5:
- lfo.Pstereo = value;
- lfo.updateparams();
- break;
- case 6:
- setdepth(value);
- break;
- case 7:
- setfb(value);
- break;
- case 8:
- setstages(value);
- break;
- case 9:
- setlrcross(value);
- setoffset(value);
- break;
- case 10:
- Poutsub = min((int)value,1);
- break;
- case 11:
- setphase(value);
- setwidth(value);
- break;
- case 12:
- Phyper = min((int)value, 1);
- break;
- case 13:
- setdistortion(value);
- break;
- case 14:
- Panalog = value;
- break;
- }
-}
-
-unsigned char Phaser::getpar(int npar) const
-{
- switch(npar) {
- case 0:
- return Pvolume;
- case 1:
- return Ppanning;
- case 2:
- return lfo.Pfreq;
- case 3:
- return lfo.Prandomness;
- case 4:
- return lfo.PLFOtype;
- case 5:
- return lfo.Pstereo;
- case 6:
- return Pdepth;
- case 7:
- return Pfb;
- case 8:
- return Pstages;
- case 9:
- return Plrcross;
- return Poffset;
- case 10:
- return Poutsub;
- case 11:
- return Pphase;
- return Pwidth;
- case 12:
- return Phyper;
- case 13:
- return Pdistortion;
- case 14:
- return Panalog;
- default:
- return 0;
- }
-}
diff --git a/plugins/zynaddsubfx/src/Effects/Phaser.h b/plugins/zynaddsubfx/src/Effects/Phaser.h
deleted file mode 100644
index 75ff791..0000000
--- a/plugins/zynaddsubfx/src/Effects/Phaser.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Phaser.h - Phaser effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Copyright (C) 2009-2010 Ryan Billing
- Copyright (C) 2010-2010 Mark McCurry
- Author: Nasca Octavian Paul
- Ryan Billing
- Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef PHASER_H
-#define PHASER_H
-#include "../globals.h"
-#include "Effect.h"
-#include "EffectLFO.h"
-
-#define MAX_PHASER_STAGES 12
-
-class Phaser:public Effect
-{
- public:
- Phaser(const int &insertion_, REALTYPE *efxoutl_, REALTYPE *efxoutr_);
- ~Phaser();
- void out(const Stereo<REALTYPE *> &input);
- void setpreset(unsigned char npreset);
- void changepar(int npar, unsigned char value);
- unsigned char getpar(int npar) const;
- void cleanup();
-
- private:
- //Phaser parameters
- EffectLFO lfo; //Phaser modulator
- unsigned char Pvolume; //Used to set wet/dry mix
- unsigned char Ppanning;
- unsigned char Pdistortion; //Model distortion added by FET element
- unsigned char Pdepth; //Depth of phaser sweep
- unsigned char Pwidth; //Phaser width (LFO amplitude)
- unsigned char Pfb; //feedback
- unsigned char Poffset; //Model mismatch between variable resistors
- unsigned char Plrcross; //crossover
- unsigned char Pstages; //Number of first-order All-Pass stages
- unsigned char Poutsub; //if I wish to subtract the output instead of adding
- unsigned char Pphase;
- unsigned char Phyper; //lfo^2 -- converts tri into hyper-sine
- unsigned char Panalog;
-
- //Control parameters
- void setvolume(unsigned char Pvolume);
- void setpanning(unsigned char Ppanning);
- void setdepth(unsigned char Pdepth);
- void setfb(unsigned char Pfb);
- void setdistortion(unsigned char Pdistortion);
- void setwidth(unsigned char Pwidth);
- void setoffset(unsigned char Poffset);
- void setlrcross(unsigned char Plrcross);
- void setstages(unsigned char Pstages);
- void setphase(unsigned char Pphase);
-
- //Internal Variables
- bool barber; //Barber pole phasing flag
- REALTYPE distortion, width, offsetpct;
- REALTYPE panning, feedback, depth, lrcross, phase;
- Stereo<REALTYPE *> old, xn1, yn1;
- Stereo<REALTYPE> diff, oldgain, fb;
- REALTYPE invperiod;
- REALTYPE offset[12];
-
- float mis;
- float Rmin; // 3N5457 typical on resistance at Vgs = 0
- float Rmax; // Resistor parallel to FET
- float Rmx; // Rmin/Rmax to avoid division in loop
- float Rconst; // Handle parallel resistor relationship
- float C; // Capacitor
- float CFs; // A constant derived from capacitor and resistor relationships
-
- void analog_setup();
- void AnalogPhase(const Stereo<REALTYPE *> &input);
- //analog case
- REALTYPE applyPhase(REALTYPE x, REALTYPE g, REALTYPE fb,
- REALTYPE &hpf, REALTYPE *yn1, REALTYPE *xn1);
-
- void normalPhase(const Stereo<REALTYPE *> &input);
- REALTYPE applyPhase(REALTYPE x, REALTYPE g, REALTYPE *old);
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Effects/Reverb.cpp b/plugins/zynaddsubfx/src/Effects/Reverb.cpp
deleted file mode 100644
index 0176fa7..0000000
--- a/plugins/zynaddsubfx/src/Effects/Reverb.cpp
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Reverb.cpp - Reverberation effect
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include "Reverb.h"
-
-/**\todo: EarlyReflections,Prdelay,Perbalance */
-
-Reverb::Reverb(const int &insertion_, REALTYPE *efxoutl_, REALTYPE *efxoutr_)
- :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0)
-{
- inputbuf = new REALTYPE[SOUND_BUFFER_SIZE];
-
- bandwidth = NULL;
-
- //defaults
- Pvolume = 48;
- Ppan = 64;
- Ptime = 64;
- Pidelay = 40;
- Pidelayfb = 0;
- Prdelay = 0;
- Plpf = 127;
- Phpf = 0;
- Perbalance = 64;
- Plohidamp = 80;
- Ptype = 1;
- Proomsize = 64;
- Pbandwidth = 30;
- roomsize = 1.0;
- rs = 1.0;
-
- for(int i = 0; i < REV_COMBS * 2; i++) {
- comblen[i] = 800 + (int)(RND * 1400);
- combk[i] = 0;
- lpcomb[i] = 0;
- combfb[i] = -0.97;
- comb[i] = NULL;
- }
-
- for(int i = 0; i < REV_APS * 2; i++) {
- aplen[i] = 500 + (int)(RND * 500);
- apk[i] = 0;
- ap[i] = NULL;
- }
-
- lpf = NULL;
- hpf = NULL; //no filter
- idelay = NULL;
-
- setpreset(Ppreset);
- cleanup(); //do not call this before the comb initialisation
-}
-
-
-Reverb::~Reverb()
-{
- int i;
- if(idelay != NULL)
- delete [] idelay;
- if(hpf != NULL)
- delete hpf;
- if(lpf != NULL)
- delete lpf;
-
- for(i = 0; i < REV_APS * 2; i++)
- delete [] ap[i];
- for(i = 0; i < REV_COMBS * 2; i++)
- delete [] comb[i];
-
- delete [] inputbuf;
- if(bandwidth)
- delete bandwidth;
-}
-
-/*
- * Cleanup the effect
- */
-void Reverb::cleanup()
-{
- int i, j;
- for(i = 0; i < REV_COMBS * 2; i++) {
- lpcomb[i] = 0.0;
- for(j = 0; j < comblen[i]; j++)
- comb[i][j] = 0.0;
- }
-
- for(i = 0; i < REV_APS * 2; i++)
- for(j = 0; j < aplen[i]; j++)
- ap[i][j] = 0.0;
-
- if(idelay != NULL)
- for(i = 0; i < idelaylen; i++)
- idelay[i] = 0.0;
-
- if(hpf != NULL)
- hpf->cleanup();
- if(lpf != NULL)
- lpf->cleanup();
-}
-
-/*
- * Process one channel; 0=left,1=right
- */
-void Reverb::processmono(int ch, REALTYPE *output)
-{
- int i, j;
- REALTYPE fbout, tmp;
- /**\todo: implement the high part from lohidamp*/
-
- for(j = REV_COMBS * ch; j < REV_COMBS * (ch + 1); j++) {
- int ck = combk[j];
- int comblength = comblen[j];
- REALTYPE lpcombj = lpcomb[j];
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- fbout = comb[j][ck] * combfb[j];
- fbout = fbout * (1.0 - lohifb) + lpcombj * lohifb;
- lpcombj = fbout;
-
- comb[j][ck] = inputbuf[i] + fbout;
- output[i] += fbout;
-
- if((++ck) >= comblength)
- ck = 0;
- }
-
- combk[j] = ck;
- lpcomb[j] = lpcombj;
- }
-
- for(j = REV_APS * ch; j < REV_APS * (1 + ch); j++) {
- int ak = apk[j];
- int aplength = aplen[j];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tmp = ap[j][ak];
- ap[j][ak] = 0.7 * tmp + output[i];
- output[i] = tmp - 0.7 * ap[j][ak];
- if((++ak) >= aplength)
- ak = 0;
- }
- apk[j] = ak;
- }
-}
-
-/*
- * Effect output
- */
-void Reverb::out(const Stereo<float *> &smp)
-{
- int i;
- if((Pvolume == 0) && (insertion != 0))
- return;
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- inputbuf[i] = (smp.l[i] + smp.r[i]) / 2.0;
-
- if(idelay != NULL) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- //Initial delay r
- REALTYPE tmp = inputbuf[i] + idelay[idelayk] * idelayfb;
- inputbuf[i] = idelay[idelayk];
- idelay[idelayk] = tmp;
- idelayk++;
- if(idelayk >= idelaylen)
- idelayk = 0;
- }
- }
-
- if(bandwidth)
- bandwidth->process(SOUND_BUFFER_SIZE, inputbuf);
-
- if(lpf != NULL)
- lpf->filterout(inputbuf);
- if(hpf != NULL)
- hpf->filterout(inputbuf);
-
- processmono(0, efxoutl); //left
- processmono(1, efxoutr); //right
-
- REALTYPE lvol = rs / REV_COMBS * pan;
- REALTYPE rvol = rs / REV_COMBS * (1.0 - pan);
- if(insertion != 0) {
- lvol *= 2;
- rvol *= 2;
- }
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- efxoutl[i] *= lvol;
- efxoutr[i] *= rvol;
- }
-}
-
-
-/*
- * Parameter control
- */
-void Reverb::setvolume(unsigned char Pvolume)
-{
- this->Pvolume = Pvolume;
- if(insertion == 0) {
- outvolume = pow(0.01, (1.0 - Pvolume / 127.0)) * 4.0;
- volume = 1.0;
- }
- else {
- volume = outvolume = Pvolume / 127.0;
- if(Pvolume == 0)
- cleanup();
- }
-}
-
-void Reverb::setpan(unsigned char Ppan)
-{
- this->Ppan = Ppan;
- pan = (REALTYPE)Ppan / 127.0;
-}
-
-void Reverb::settime(unsigned char Ptime)
-{
- int i;
- REALTYPE t;
- this->Ptime = Ptime;
- t = pow(60.0, (REALTYPE)Ptime / 127.0) - 0.97;
-
- for(i = 0; i < REV_COMBS * 2; i++)
- combfb[i] =
- -exp((REALTYPE)comblen[i] / (REALTYPE)SAMPLE_RATE * log(0.001) / t);
- //the feedback is negative because it removes the DC
-}
-
-void Reverb::setlohidamp(unsigned char Plohidamp)
-{
- if(Plohidamp < 64)
- Plohidamp = 64; //remove this when the high part from lohidamp will be added
-
- this->Plohidamp = Plohidamp;
- if(Plohidamp == 64) {
- lohidamptype = 0;
- lohifb = 0.0;
- }
- else {
- if(Plohidamp < 64)
- lohidamptype = 1;
- if(Plohidamp > 64)
- lohidamptype = 2;
- REALTYPE x = fabs((REALTYPE)(Plohidamp - 64) / 64.1);
- lohifb = x * x;
- }
-}
-
-void Reverb::setidelay(unsigned char Pidelay)
-{
- REALTYPE delay;
- this->Pidelay = Pidelay;
- delay = pow(50 * Pidelay / 127.0, 2) - 1.0;
-
- if(idelay != NULL)
- delete [] idelay;
- idelay = NULL;
-
- idelaylen = (int) (SAMPLE_RATE * delay / 1000);
- if(idelaylen > 1) {
- idelayk = 0;
- idelay = new REALTYPE[idelaylen];
- for(int i = 0; i < idelaylen; i++)
- idelay[i] = 0.0;
- }
-}
-
-void Reverb::setidelayfb(unsigned char Pidelayfb)
-{
- this->Pidelayfb = Pidelayfb;
- idelayfb = Pidelayfb / 128.0;
-}
-
-void Reverb::sethpf(unsigned char Phpf)
-{
- this->Phpf = Phpf;
- if(Phpf == 0) { //No HighPass
- if(hpf != NULL)
- delete hpf;
- hpf = NULL;
- }
- else {
- REALTYPE fr = exp(pow(Phpf / 127.0, 0.5) * log(10000.0)) + 20.0;
- if(hpf == NULL)
- hpf = new AnalogFilter(3, fr, 1, 0);
- else
- hpf->setfreq(fr);
- }
-}
-
-void Reverb::setlpf(unsigned char Plpf)
-{
- this->Plpf = Plpf;
- if(Plpf == 127) { //No LowPass
- if(lpf != NULL)
- delete lpf;
- lpf = NULL;
- }
- else {
- REALTYPE fr = exp(pow(Plpf / 127.0, 0.5) * log(25000.0)) + 40;
- if(lpf == NULL)
- lpf = new AnalogFilter(2, fr, 1, 0);
- else
- lpf->setfreq(fr);
- }
-}
-
-void Reverb::settype(unsigned char Ptype)
-{
- const int NUM_TYPES = 3;
- const int combtunings[NUM_TYPES][REV_COMBS] = {
- //this is unused (for random)
- {0, 0, 0, 0, 0, 0, 0, 0 },
- //Freeverb by Jezar at Dreampoint
- {1116, 1188, 1277, 1356, 1422, 1491, 1557, 1617 },
- //Freeverb by Jezar at Dreampoint //duplicate
- {1116, 1188, 1277, 1356, 1422, 1491, 1557, 1617 }
- };
- const int aptunings[NUM_TYPES][REV_APS] = {
- //this is unused (for random)
- {0, 0, 0, 0 },
- //Freeverb by Jezar at Dreampoint
- {225, 341, 441, 556 },
- //Freeverb by Jezar at Dreampoint (duplicate)
- {225, 341, 441, 556 }
- };
-
- if(Ptype >= NUM_TYPES)
- Ptype = NUM_TYPES - 1;
- this->Ptype = Ptype;
-
- REALTYPE tmp;
- for(int i = 0; i < REV_COMBS * 2; i++) {
- if(Ptype == 0)
- tmp = 800.0 + (int)(RND * 1400.0);
- else
- tmp = combtunings[Ptype][i % REV_COMBS];
- tmp *= roomsize;
- if(i > REV_COMBS)
- tmp += 23.0;
- tmp *= SAMPLE_RATE / 44100.0; //adjust the combs according to the samplerate
- if(tmp < 10)
- tmp = 10;
-
- comblen[i] = (int) tmp;
- combk[i] = 0;
- lpcomb[i] = 0;
- if(comb[i] != NULL)
- delete [] comb[i];
- comb[i] = new REALTYPE[comblen[i]];
- }
-
- for(int i = 0; i < REV_APS * 2; i++) {
- if(Ptype == 0)
- tmp = 500 + (int)(RND * 500);
- else
- tmp = aptunings[Ptype][i % REV_APS];
- tmp *= roomsize;
- if(i > REV_APS)
- tmp += 23.0;
- tmp *= SAMPLE_RATE / 44100.0; //adjust the combs according to the samplerate
- if(tmp < 10)
- tmp = 10;
- aplen[i] = (int) tmp;
- apk[i] = 0;
- if(ap[i] != NULL)
- delete [] ap[i];
- ap[i] = new REALTYPE[aplen[i]];
- }
- settime(Ptime);
- cleanup();
- if(bandwidth)
- delete bandwidth;
- bandwidth = NULL;
- if(Ptype == 2) { //bandwidth
- bandwidth = new Unison(SOUND_BUFFER_SIZE / 4 + 1, 2.0);
- bandwidth->set_size(50);
- bandwidth->set_base_frequency(1.0);
- }
-}
-
-void Reverb::setroomsize(unsigned char Proomsize)
-{
- this->Proomsize = Proomsize;
- if(Proomsize == 0)
- this->Proomsize = 64; //this is because the older versions consider roomsize=0
- roomsize = (this->Proomsize - 64.0) / 64.0;
- if(roomsize > 0.0)
- roomsize *= 2.0;
- roomsize = pow(10.0, roomsize);
- rs = sqrt(roomsize);
- settype(Ptype);
-}
-
-void Reverb::setbandwidth(unsigned char Pbandwidth) {
- this->Pbandwidth = Pbandwidth;
- REALTYPE v = Pbandwidth / 127.0;
- if(bandwidth)
- bandwidth->set_bandwidth(pow(v, 2.0) * 200.0);
-}
-
-void Reverb::setpreset(unsigned char npreset)
-{
- const int PRESET_SIZE = 13;
- const int NUM_PRESETS = 13;
- unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
- //Cathedral1
- {80, 64, 63, 24, 0, 0, 0, 85, 5, 83, 1, 64, 20 },
- //Cathedral2
- {80, 64, 69, 35, 0, 0, 0, 127, 0, 71, 0, 64, 20 },
- //Cathedral3
- {80, 64, 69, 24, 0, 0, 0, 127, 75, 78, 1, 85, 20 },
- //Hall1
- {90, 64, 51, 10, 0, 0, 0, 127, 21, 78, 1, 64, 20 },
- //Hall2
- {90, 64, 53, 20, 0, 0, 0, 127, 75, 71, 1, 64, 20 },
- //Room1
- {100, 64, 33, 0, 0, 0, 0, 127, 0, 106, 0, 30, 20 },
- //Room2
- {100, 64, 21, 26, 0, 0, 0, 62, 0, 77, 1, 45, 20 },
- //Basement
- {110, 64, 14, 0, 0, 0, 0, 127, 5, 71, 0, 25, 20 },
- //Tunnel
- {85, 80, 84, 20, 42, 0, 0, 51, 0, 78, 1, 105, 20 },
- //Echoed1
- {95, 64, 26, 60, 71, 0, 0, 114, 0, 64, 1, 64, 20 },
- //Echoed2
- {90, 64, 40, 88, 71, 0, 0, 114, 0, 88, 1, 64, 20 },
- //VeryLong1
- {90, 64, 93, 15, 0, 0, 0, 114, 0, 77, 0, 95, 20 },
- //VeryLong2
- {90, 64, 111, 30, 0, 0, 0, 114, 90, 74, 1, 80, 20 }
- };
-
- if(npreset >= NUM_PRESETS)
- npreset = NUM_PRESETS - 1;
- for(int n = 0; n < PRESET_SIZE; n++)
- changepar(n, presets[npreset][n]);
- if(insertion != 0)
- changepar(0, presets[npreset][0] / 2); //lower the volume if reverb is insertion effect
- Ppreset = npreset;
-}
-
-
-void Reverb::changepar(int npar, unsigned char value)
-{
- switch(npar) {
- case 0:
- setvolume(value);
- break;
- case 1:
- setpan(value);
- break;
- case 2:
- settime(value);
- break;
- case 3:
- setidelay(value);
- break;
- case 4:
- setidelayfb(value);
- break;
-// case 5: setrdelay(value);
-// break;
-// case 6: seterbalance(value);
-// break;
- case 7:
- setlpf(value);
- break;
- case 8:
- sethpf(value);
- break;
- case 9:
- setlohidamp(value);
- break;
- case 10:
- settype(value);
- break;
- case 11:
- setroomsize(value);
- break;
- case 12:
- setbandwidth(value);
- break;
- }
-}
-
-unsigned char Reverb::getpar(int npar) const
-{
- switch(npar) {
- case 0:
- return Pvolume;
- break;
- case 1:
- return Ppan;
- break;
- case 2:
- return Ptime;
- break;
- case 3:
- return Pidelay;
- break;
- case 4:
- return Pidelayfb;
- break;
-// case 5: return(Prdelay);
-// break;
-// case 6: return(Perbalance);
-// break;
- case 7:
- return Plpf;
- break;
- case 8:
- return Phpf;
- break;
- case 9:
- return Plohidamp;
- break;
- case 10:
- return Ptype;
- break;
- case 11:
- return Proomsize;
- break;
- case 12:
- return Pbandwidth;
- break;
- }
- return 0; //in case of bogus "parameter"
-}
-
diff --git a/plugins/zynaddsubfx/src/Effects/Reverb.h b/plugins/zynaddsubfx/src/Effects/Reverb.h
deleted file mode 100644
index a505a8f..0000000
--- a/plugins/zynaddsubfx/src/Effects/Reverb.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Reverb.h - Reverberation effect
- Copyright (C) 2002-2009 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef REVERB_H
-#define REVERB_H
-
-#include <math.h>
-#include "../globals.h"
-#include "../DSP/AnalogFilter.h"
-#include "../DSP/FFTwrapper.h"
-#include "../DSP/Unison.h"
-#include "Effect.h"
-
-#define REV_COMBS 8
-#define REV_APS 4
-
-/**Creates Reverberation Effects*/
-
-class Reverb:public Effect
-{
- public:
- Reverb(const int &insertion_, REALTYPE *efxoutl_, REALTYPE *efxoutr_);
- ~Reverb();
- void out(const Stereo<float *> &smp);
- void cleanup();
-
- void setpreset(unsigned char npreset);
- void changepar(int npar, unsigned char value);
- unsigned char getpar(int npar) const;
-
- private:
- //Parametrii
- /**Amount of the reverb*/
- unsigned char Pvolume;
-
- /**Left/Right Panning*/
- unsigned char Ppan;
-
- /**duration of reverb*/
- unsigned char Ptime;
-
- /**Initial delay*/
- unsigned char Pidelay;
-
- /**Initial delay feedback*/
- unsigned char Pidelayfb;
-
- /**delay between ER/Reverbs*/
- unsigned char Prdelay;
-
- /**EarlyReflections/Reverb Balance*/
- unsigned char Perbalance;
-
- /**HighPassFilter*/
- unsigned char Plpf;
-
- /**LowPassFilter*/
- unsigned char Phpf;
-
- /**Low/HighFrequency Damping
- * \todo 0..63 lpf,64=off,65..127=hpf(TODO)*/
- unsigned char Plohidamp;
-
- /**Reverb type*/
- unsigned char Ptype;
-
- /**Room Size*/
- unsigned char Proomsize;
-
- /**Bandwidth */
- unsigned char Pbandwidth;
-
- //parameter control
- void setvolume(unsigned char Pvolume);
- void setpan(unsigned char Ppan);
- void settime(unsigned char Ptime);
- void setlohidamp(unsigned char Plohidamp);
- void setidelay(unsigned char Pidelay);
- void setidelayfb(unsigned char Pidelayfb);
- void sethpf(unsigned char Phpf);
- void setlpf(unsigned char Plpf);
- void settype(unsigned char Ptype);
- void setroomsize(unsigned char Proomsize);
- void setbandwidth(unsigned char Pbandwidth);
-
- REALTYPE pan;
- //Parameters
- int lohidamptype; /**<0=disable,1=highdamp(lowpass),2=lowdamp(highpass)*/
- int idelaylen;
- int idelayk;
- REALTYPE lohifb, idelayfb, roomsize, rs; //rs is used to "normalise" the volume according to the roomsize
- int comblen[REV_COMBS * 2];
- int aplen[REV_APS * 2];
- Unison *bandwidth;
-
- //Internal Variables
-
- REALTYPE *comb[REV_COMBS * 2];
-
- int combk[REV_COMBS * 2];
- REALTYPE combfb[REV_COMBS * 2]; /**<feedback-ul fiecarui filtru "comb"*/
- REALTYPE lpcomb[REV_COMBS * 2]; /**<pentru Filtrul LowPass*/
-
- REALTYPE *ap[REV_APS * 2];
-
- int apk[REV_APS * 2];
-
- REALTYPE *idelay;
- AnalogFilter *lpf, *hpf; //filters
- REALTYPE *inputbuf;
-
- void processmono(int ch, REALTYPE *output);
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Input/ALSAMidiIn.cpp b/plugins/zynaddsubfx/src/Input/ALSAMidiIn.cpp
deleted file mode 100644
index d50795d..0000000
--- a/plugins/zynaddsubfx/src/Input/ALSAMidiIn.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- ALSAMidiIn.cpp - Midi input for ALSA (this creates an ALSA virtual port)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "ALSAMidiIn.h"
-
-ALSAMidiIn::ALSAMidiIn()
-{
- int alsaport;
- inputok = false;
-
- midi_handle = NULL;
-
- if(snd_seq_open(&midi_handle, "default", SND_SEQ_OPEN_INPUT, 0) != 0)
- return;
-
- snd_seq_set_client_name(midi_handle, "ZynAddSubFX"); //thanks to Frank Neumann
-
- alsaport = snd_seq_create_simple_port(
- midi_handle,
- "ZynAddSubFX",
- SND_SEQ_PORT_CAP_WRITE
- | SND_SEQ_PORT_CAP_SUBS_WRITE,
- SND_SEQ_PORT_TYPE_SYNTH);
- if(alsaport < 0)
- return;
-
- inputok = true;
-}
-
-ALSAMidiIn::~ALSAMidiIn()
-{
- if(midi_handle)
- snd_seq_close(midi_handle);
-}
-
-
-/*
- * Get the midi command,channel and parameters
- */
-void ALSAMidiIn::getmidicmd(MidiCmdType &cmdtype,
- unsigned char &cmdchan,
- int *cmdparams)
-{
- snd_seq_event_t *midievent = NULL;
- cmdtype = MidiNull;
-
- if(inputok == false) {
- /* The input is broken. We need to block for a while anyway so other
- non-RT threads get a chance to run. */
- sleep(1);
- return;
- }
-
- snd_seq_event_input(midi_handle, &midievent);
-
- if(midievent == NULL)
- return;
- switch(midievent->type) {
- case SND_SEQ_EVENT_NOTEON:
- cmdtype = MidiNoteON;
- cmdchan = midievent->data.note.channel;
- cmdparams[0] = midievent->data.note.note;
- cmdparams[1] = midievent->data.note.velocity;
- break;
- case SND_SEQ_EVENT_NOTEOFF:
- cmdtype = MidiNoteOFF;
- cmdchan = midievent->data.note.channel;
- cmdparams[0] = midievent->data.note.note;
- break;
- case SND_SEQ_EVENT_PITCHBEND:
- cmdtype = MidiController;
- cmdchan = midievent->data.control.channel;
- cmdparams[0] = C_pitchwheel; //Pitch Bend
- cmdparams[1] = midievent->data.control.value;
- break;
- case SND_SEQ_EVENT_CONTROLLER:
- cmdtype = MidiController;
- cmdchan = midievent->data.control.channel;
- cmdparams[0] = getcontroller(midievent->data.control.param);
- cmdparams[1] = midievent->data.control.value;
- //fprintf(stderr,"t=%d val=%d\n",midievent->data.control.param,midievent->data.control.value);
- break;
- }
-}
-
-
-int ALSAMidiIn::getalsaid()
-{
- if(midi_handle) {
- snd_seq_client_info_t *seq_info;
- snd_seq_client_info_malloc(&seq_info);
- snd_seq_get_client_info(midi_handle, seq_info);
- int id = snd_seq_client_info_get_client(seq_info);
- snd_seq_client_info_free(seq_info);
- return id;
- }
- return -1;
-}
-
diff --git a/plugins/zynaddsubfx/src/Input/ALSAMidiIn.h b/plugins/zynaddsubfx/src/Input/ALSAMidiIn.h
deleted file mode 100644
index cea61fb..0000000
--- a/plugins/zynaddsubfx/src/Input/ALSAMidiIn.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- ALSAMidiIn.h - Midi input for ALSA (this creates an ALSA virtual port)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef ALSA_MIDI_IN_H
-#define ALSA_MIDI_IN_H
-
-#include <alsa/asoundlib.h>
-#include "MidiIn.h"
-
-
-/**Midi input for ALSA (this creates an ALSA virtual port)*/
-class ALSAMidiIn:public MidiIn
-{
- public:
- /**Constructor*/
- ALSAMidiIn();
- /**Destructor*/
- ~ALSAMidiIn();
-
- void getmidicmd(MidiCmdType &cmdtype,
- unsigned char &cmdchan,
- int *cmdparams);
- /**Get the ALSA id
- * @return ALSA id*/
- int getalsaid();
-
- private:
- snd_seq_t *midi_handle;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Input/CMakeLists.txt b/plugins/zynaddsubfx/src/Input/CMakeLists.txt
deleted file mode 100644
index dac0417..0000000
--- a/plugins/zynaddsubfx/src/Input/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-set(zynaddsubfx_input_SRCS
- MidiIn.cpp
- NULLMidiIn.cpp
- #OSSMidiIn.cpp #[TODO] get OSS midi detection and
- #WINMidiIn.cpp # Win midi detection working
-)
-
-if(AlsaMidiInput)
- set(zynaddsubfx_input_SRCS
- ${zynaddsubfx_input_SRCS}
- ALSAMidiIn.cpp
- )
- message(STATUS "Alsa midi input enabled")
- set(MIDIINPUT_LIBRARIES ${ASOUND_LIBRARY} PARENT_SCOPE)
-endif(AlsaMidiInput)
-
-add_library(zynaddsubfx_input STATIC
- ${zynaddsubfx_input_SRCS}
- )
diff --git a/plugins/zynaddsubfx/src/Input/MidiIn.cpp b/plugins/zynaddsubfx/src/Input/MidiIn.cpp
deleted file mode 100644
index 3d7c5b2..0000000
--- a/plugins/zynaddsubfx/src/Input/MidiIn.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- MidiIn.cpp - This class is inherited by all the Midi input classes
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "../globals.h"
-#include "MidiIn.h"
-
-int MidiIn::getcontroller(unsigned char b)
-{
- /**\todo there might be a better way to do this*/
- int ctl = C_NULL;
- switch(b) {
- case 1:
- ctl = C_modwheel; //Modulation Wheel
- break;
- case 7:
- ctl = C_volume; //Volume
- break;
- case 10:
- ctl = C_panning; //Panning
- break;
- case 11:
- ctl = C_expression; //Expression
- break;
- case 64:
- ctl = C_sustain; //Sustain pedal
- break;
- case 65:
- ctl = C_portamento; //Portamento
- break;
- case 71:
- ctl = C_filterq; //Filter Q (Sound Timbre)
- break;
- case 74:
- ctl = C_filtercutoff; //Filter Cutoff (Brightness)
- break;
- case 75:
- ctl = C_bandwidth; //BandWidth
- break;
- case 76:
- ctl = C_fmamp; //FM amplitude
- break;
- case 77:
- ctl = C_resonance_center; //Resonance Center Frequency
- break;
- case 78:
- ctl = C_resonance_bandwidth; //Resonance Bandwith
- break;
- case 120:
- ctl = C_allsoundsoff; //All Sounds OFF
- break;
- case 121:
- ctl = C_resetallcontrollers; //Reset All Controllers
- break;
- case 123:
- ctl = C_allnotesoff; //All Notes OFF
- break;
- //RPN and NRPN
- case 0x06:
- ctl = C_dataentryhi; //Data Entry (Coarse)
- break;
- case 0x26:
- ctl = C_dataentrylo; //Data Entry (Fine)
- break;
- case 99:
- ctl = C_nrpnhi; //NRPN (Coarse)
- break;
- case 98:
- ctl = C_nrpnlo; //NRPN (Fine)
- break;
- default:
- ctl = C_NULL; //unknown controller
- //fprintf(stderr,"Controller=%d , par=%d\n",midievent->data.control.param,cmdparams[1]);
- break;
- }
- return ctl;
-}
-
diff --git a/plugins/zynaddsubfx/src/Input/MidiIn.h b/plugins/zynaddsubfx/src/Input/MidiIn.h
deleted file mode 100644
index 5d978ea..0000000
--- a/plugins/zynaddsubfx/src/Input/MidiIn.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- MidiIn.h - This class is inherited by all the Midi input classes
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef MIDI_IN_H
-#define MIDI_IN_H
-
-#include "../globals.h"
-
-enum MidiCmdType {
- MidiNull, MidiNoteOFF, MidiNoteON, MidiController
-};
-#define MP_MAX_BYTES 4000 //in case of loooong SYS_EXes
-
-/**This class is inherited by all the Midi input classes*/
-class MidiIn
-{
- public:
- /**Get the command,channel and parameters of the MIDI
- *
- * \todo make pure virtual
- * @param cmdtype the referece to the variable that will store the type
- * @param cmdchan the channel for the event
- * @param parameters for the event*/
- virtual void getmidicmd(MidiCmdType &cmdtype,
- unsigned char &cmdchan,
- int *cmdparams) = 0;
- int getcontroller(unsigned char b);
- protected:
- bool inputok; /**<1 if I can read midi bytes from input ports*/
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Input/NULLMidiIn.cpp b/plugins/zynaddsubfx/src/Input/NULLMidiIn.cpp
deleted file mode 100644
index a9c13ac..0000000
--- a/plugins/zynaddsubfx/src/Input/NULLMidiIn.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- NULLMidiIn.cpp - a dummy Midi port
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "NULLMidiIn.h"
-
-NULLMidiIn::NULLMidiIn()
-{}
-
-NULLMidiIn::~NULLMidiIn()
-{}
-
-/*
- * Get the midi command,channel and parameters
- * It returns MidiNull because it is a dummy driver
- */
-void NULLMidiIn::getmidicmd(MidiCmdType &cmdtype,
- unsigned char &cmdchan,
- int *cmdparams)
-{
- cmdtype = MidiNull;
-}
-
diff --git a/plugins/zynaddsubfx/src/Input/NULLMidiIn.h b/plugins/zynaddsubfx/src/Input/NULLMidiIn.h
deleted file mode 100644
index 72cef4a..0000000
--- a/plugins/zynaddsubfx/src/Input/NULLMidiIn.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- NULLMidiIn.h - a dummy Midi port
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef NULL_MIDI_IN_H
-#define NULL_MIDI_IN_H
-
-#include "MidiIn.h"
-
-
-/**a dummy Midi port*/
-class NULLMidiIn:public MidiIn
-{
- public:
- /**Dummy Constructor
- * \todo see if the default constructor would work here*/
- NULLMidiIn();
- /**Dummy Destructor
- * \todo see if the default destructor would work here*/
- ~NULLMidiIn();
- /**Get the midi command,channel and parameters
- * It returns MidiNull because it is a dummy driver
- */
- void getmidicmd(MidiCmdType &cmdtype,
- unsigned char &cmdchan,
- int *cmdparams);
-
- private:
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Input/OSSMidiIn.cpp b/plugins/zynaddsubfx/src/Input/OSSMidiIn.cpp
deleted file mode 100644
index 5a20fb9..0000000
--- a/plugins/zynaddsubfx/src/Input/OSSMidiIn.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- OSSMidiIn.cpp - Midi input for Open Sound System
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/soundcard.h>
-
-#include "OSSMidiIn.h"
-#include "../Misc/Util.h"
-
-OSSMidiIn::OSSMidiIn()
-{
- inputok = false;
- midi_handle = open(config.cfg.LinuxOSSSeqInDev, O_RDONLY, 0);
- if(midi_handle != -1)
- inputok = true;
-
- lastmidicmd = 0;
- cmdtype = 0;
- cmdchan = 0;
-}
-
-OSSMidiIn::~OSSMidiIn()
-{
- close(midi_handle);
-}
-
-unsigned char OSSMidiIn::readbyte()
-{
- unsigned char tmp[4];
- read(midi_handle, &tmp[0], 1);
- while(tmp[0] != SEQ_MIDIPUTC) {
- read(midi_handle, &tmp[0], 4);
- }
- return tmp[1];
-}
-
-unsigned char OSSMidiIn::getmidibyte()
-{
- unsigned char b;
- do {
- b = readbyte();
- } while(b == 0xfe); //drops the Active Sense Messages
- return b;
-}
-
-/*
- * Get the midi command,channel and parameters
- */
-void OSSMidiIn::getmidicmd(MidiCmdType &cmdtype,
- unsigned char &cmdchan,
- int *cmdparams)
-{
- unsigned char tmp, i;
- if(inputok == false) {
- cmdtype = MidiNull;
- return;
- }
- i = 0;
- if(lastmidicmd == 0) { //asteapta prima data pana cand vine prima comanda midi
- while(tmp < 0x80)
- tmp = getmidibyte();
- lastmidicmd = tmp;
- }
-
- tmp = getmidibyte();
-
- if(tmp >= 0x80) {
- lastmidicmd = tmp;
- tmp = getmidibyte();
- }
-
- if((lastmidicmd >= 0x80) && (lastmidicmd <= 0x8f)) { //Note OFF
- cmdtype = MidiNoteOFF;
- cmdchan = lastmidicmd % 16;
- cmdparams[0] = tmp; //note number
- }
-
- if((lastmidicmd >= 0x90) && (lastmidicmd <= 0x9f)) { //Note ON
- cmdtype = MidiNoteON;
- cmdchan = lastmidicmd % 16;
- cmdparams[0] = tmp; //note number
- cmdparams[1] = getmidibyte(); //velocity
- if(cmdparams[1] == 0)
- cmdtype = MidiNoteOFF; //if velocity==0 then is note off
- }
- if((lastmidicmd >= 0xB0) && (lastmidicmd <= 0xBF)) { //Controllers
- cmdtype = MidiController;
- cmdchan = lastmidicmd % 16;
- cmdparams[0] = getcontroller(tmp);
- cmdparams[1] = getmidibyte();
- }
- if((lastmidicmd >= 0xE0) && (lastmidicmd <= 0xEF)) { //Pitch Wheel
- cmdtype = MidiController;
- cmdchan = lastmidicmd % 16;
- cmdparams[0] = C_pitchwheel;
- cmdparams[1] = (tmp + getmidibyte() * (int) 128) - 8192; //hope this is correct
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Input/OSSMidiIn.h b/plugins/zynaddsubfx/src/Input/OSSMidiIn.h
deleted file mode 100644
index a3b56f5..0000000
--- a/plugins/zynaddsubfx/src/Input/OSSMidiIn.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- OSSMidiIn.h - Midi input for Open Sound System
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef OSS_MIDI_IN_H
-#define OSS_MIDI_IN_H
-
-#include "MidiIn.h"
-
-class OSSMidiIn:public MidiIn
-{
- public:
- OSSMidiIn();
- ~OSSMidiIn();
- unsigned char getmidibyte();
- unsigned char readbyte();
-
- //Midi parser
- void getmidicmd(MidiCmdType &cmdtype,
- unsigned char &cmdchan,
- int *cmdparams);
- unsigned char cmdtype; //the Message Type (noteon,noteof,sysex..)
- unsigned char cmdchan; //the channel number
-
- private:
- int midi_handle;
- unsigned char lastmidicmd; //last byte (>=80) received from the Midi
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Input/WINMidiIn.cpp b/plugins/zynaddsubfx/src/Input/WINMidiIn.cpp
deleted file mode 100644
index 65974ee..0000000
--- a/plugins/zynaddsubfx/src/Input/WINMidiIn.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- WINMidiIn.cpp - Midi input for Windows
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <windows.h>
-#include <mmsystem.h>
-#include <pthread.h>
-
-#include "WINMidiIn.h"
-#include "MidiIn.h"
-#include "../Misc/Util.h"
-
-Master *winmaster;
-HMIDIIN winmidiinhandle;
-MidiIn midictl; //used to convert the controllers to ZynAddSubFX controllers
-
-void CALLBACK WinMidiInProc(HMIDIIN hMidiIn, UINT wMsg, DWORD dwInstance,
- DWORD dwParam1, DWORD dwParam2)
-{
- int midicommand = MidiNull;
- if(wMsg == MIM_DATA) {
- int cmd, par1, par2;
- cmd = dwParam1 & 0xff;
- if(cmd == 0xfe)
- return;
- par1 = (dwParam1 >> 8) & 0xff;
- par2 = dwParam1 >> 16;
- //printf("%x %x %x\n",cmd,par1,par2);fflush(stdout);
- int cmdchan = cmd & 0x0f;
- int cmdtype = (cmd >> 4) & 0x0f;
-
- int tmp = 0;
- pthread_mutex_lock(&winmaster->mutex);
- switch(cmdtype) {
- case (0x8): //noteon
- winmaster->NoteOff(cmdchan, par1);
- break;
- case (0x9): //noteoff
- winmaster->NoteOn(cmdchan, par1, par2 & 0xff);
- break;
- case (0xb): //controller
- winmaster->SetController(cmdchan, midictl.getcontroller(
- par1), par2 & 0xff);
- break;
- case (0xe): //pitch wheel
- tmp = (par1 + par2 * (long int) 128) - 8192;
- winmaster->SetController(cmdchan, C_pitchwheel, tmp);
- break;
- default:
- break;
- }
- pthread_mutex_unlock(&winmaster->mutex);
- }
-}
-
-void InitWinMidi(Master *master_)
-{
- winmaster = master_;
-
- long int result =
- midiInOpen(&winmidiinhandle,
- config.cfg.WindowsMidiInId,
- (DWORD)WinMidiInProc,
- 0,
- CALLBACK_FUNCTION);
- result = midiInStart(winmidiinhandle);
-}
-
-void StopWinMidi()
-{
- midiInStop(winmidiinhandle);
- midiInClose(winmidiinhandle);
-}
-
diff --git a/plugins/zynaddsubfx/src/Input/WINMidiIn.h b/plugins/zynaddsubfx/src/Input/WINMidiIn.h
deleted file mode 100644
index db9fc79..0000000
--- a/plugins/zynaddsubfx/src/Input/WINMidiIn.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- WINMidiIn.h - Midi input for Windows
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef WIN_MIDI_IN_H
-#define WIN_MIDI_IN_H
-
-
-#include "../Misc/Master.h"
-
-void InitWinMidi(Master *master_);
-void StopWinMidi();
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/Bank.cpp b/plugins/zynaddsubfx/src/Misc/Bank.cpp
deleted file mode 100644
index 246a409..0000000
--- a/plugins/zynaddsubfx/src/Misc/Bank.cpp
+++ /dev/null
@@ -1,644 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Bank.h - Instrument Bank
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "Bank.h"
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <dirent.h>
-#include <sys/stat.h>
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include "Config.h"
-
-#define INSTRUMENT_EXTENSION ".xiz"
-
-//if this file exists into a directory, this make the directory to be considered as a bank, even if it not contains a instrument file
-#define FORCE_BANK_DIR_FILE ".bankdir"
-
-Bank::Bank()
-{
- ZERO(defaultinsname, PART_MAX_NAME_LEN);
- snprintf(defaultinsname, PART_MAX_NAME_LEN, "%s", " ");
-
- for(int i = 0; i < BANK_SIZE; i++) {
- ins[i].used = false;
- ins[i].filename = NULL;
- ins[i].info.PADsynth_used = false;
- }
- dirname = NULL;
- clearbank();
-
-
-
- for(int i = 0; i < MAX_NUM_BANKS; i++) {
- banks[i].dir = NULL;
- banks[i].name = NULL;
- }
-
- bankfiletitle = dirname;
-
- loadbank(config.cfg.currentBankDir);
-}
-
-Bank::~Bank()
-{
- for(int i = 0; i < MAX_NUM_BANKS; i++) {
- if(banks[i].dir != NULL)
- delete [] banks[i].dir;
- if(banks[i].name != NULL)
- delete [] banks[i].name;
- }
-
- clearbank();
-}
-
-/*
- * Get the name of an instrument from the bank
- */
-char *Bank::getname(unsigned int ninstrument)
-{
- if(emptyslot(ninstrument))
- return defaultinsname;
- return ins[ninstrument].name;
-}
-
-/*
- * Get the numbered name of an instrument from the bank
- */
-char *Bank::getnamenumbered(unsigned int ninstrument)
-{
- if(emptyslot(ninstrument))
- return defaultinsname;
- snprintf(tmpinsname[ninstrument],
- PART_MAX_NAME_LEN + 15,
- "%d. %s",
- ninstrument + 1,
- getname(ninstrument));
- return tmpinsname[ninstrument];
-}
-
-/*
- * Changes the name of an instrument (and the filename)
- */
-void Bank::setname(unsigned int ninstrument, const char *newname, int newslot)
-{
- if(emptyslot(ninstrument))
- return;
-
- char newfilename[1000 + 1], tmpfilename[100 + 1];
-
- ZERO(newfilename, 1001);
- ZERO(tmpfilename, 101);
- if(newslot >= 0)
- snprintf(tmpfilename, 100, "%4d-%s", newslot + 1, newname);
- else
- snprintf(tmpfilename, 100, "%4d-%s", ninstrument + 1, newname);
-
- //add the zeroes at the start of filename
- for(int i = 0; i < 4; i++)
- if(tmpfilename[i] == ' ')
- tmpfilename[i] = '0';
-
- //make the filenames legal
- for(int i = 0; i < (int) strlen(tmpfilename); i++) {
- char c = tmpfilename[i];
- if((c >= '0') && (c <= '9'))
- continue;
- if((c >= 'A') && (c <= 'Z'))
- continue;
- if((c >= 'a') && (c <= 'z'))
- continue;
- if((c == '-') || (c == ' '))
- continue;
-
- tmpfilename[i] = '_';
- }
-
- snprintf(newfilename, 1000, "%s/%s.xiz", dirname, tmpfilename);
-
-// printf("rename %s -> %s\n",ins[ninstrument].filename,newfilename);//////////////
-
- rename(ins[ninstrument].filename, newfilename);
- if(ins[ninstrument].filename)
- delete [] ins[ninstrument].filename;
- ins[ninstrument].filename = new char[strlen(newfilename) + 5];
- snprintf(ins[ninstrument].filename, strlen(
- newfilename) + 1, "%s", newfilename);
- snprintf(ins[ninstrument].name, PART_MAX_NAME_LEN, "%s", &tmpfilename[5]);
-}
-
-/*
- * Check if there is no instrument on a slot from the bank
- */
-int Bank::emptyslot(unsigned int ninstrument)
-{
- if(ninstrument >= BANK_SIZE)
- return 1;
- if(ins[ninstrument].filename == NULL)
- return 1;
-
- if(ins[ninstrument].used)
- return 0;
- else
- return 1;
-}
-
-/*
- * Removes the instrument from the bank
- */
-void Bank::clearslot(unsigned int ninstrument)
-{
- if(emptyslot(ninstrument))
- return;
-
-// printf("remove %s \n",ins[ninstrument].filename);////////////////////////
-
-
- remove(ins[ninstrument].filename);
- deletefrombank(ninstrument);
-}
-
-/*
- * Save the instrument to a slot
- */
-void Bank::savetoslot(unsigned int ninstrument, Part *part)
-{
- clearslot(ninstrument);
-
- const int maxfilename = 200;
- char tmpfilename[maxfilename + 20];
- ZERO(tmpfilename, maxfilename + 20);
-
- snprintf(tmpfilename,
- maxfilename,
- "%4d-%s",
- ninstrument + 1,
- (char *)part->Pname);
-
- //add the zeroes at the start of filename
- for(int i = 0; i < 4; i++)
- if(tmpfilename[i] == ' ')
- tmpfilename[i] = '0';
-
- //make the filenames legal
- for(int i = 0; i < (int)strlen(tmpfilename); i++) {
- char c = tmpfilename[i];
- if((c >= '0') && (c <= '9'))
- continue;
- if((c >= 'A') && (c <= 'Z'))
- continue;
- if((c >= 'a') && (c <= 'z'))
- continue;
- if((c == '-') || (c == ' '))
- continue;
-
- tmpfilename[i] = '_';
- }
-
- strncat(tmpfilename, ".xiz", maxfilename + 10);
-
- int fnsize = strlen(dirname) + strlen(tmpfilename) + 10;
- char *filename = new char[fnsize + 4];
- ZERO(filename, fnsize + 2);
-
- snprintf(filename, fnsize, "%s/%s", dirname, tmpfilename);
-
- remove(filename);
- part->saveXML(filename);
- addtobank(ninstrument, tmpfilename, (char *) part->Pname);
-
- delete[] filename;
-}
-
-/*
- * Loads the instrument from the bank
- */
-void Bank::loadfromslot(unsigned int ninstrument, Part *part)
-{
- if(emptyslot(ninstrument))
- return;
-
- part->defaultsinstrument();
-
-// printf("load: %s\n",ins[ninstrument].filename);
-
- part->loadXMLinstrument(ins[ninstrument].filename);
-}
-
-
-/*
- * Makes current a bank directory
- */
-int Bank::loadbank(const char *bankdirname)
-{
- DIR *dir = opendir(bankdirname);
- clearbank();
-
- if(dir == NULL)
- return -1;
-
- if(dirname != NULL)
- delete[] dirname;
- dirname = new char[strlen(bankdirname) + 1];
- snprintf(dirname, strlen(bankdirname) + 1, "%s", bankdirname);
-
- bankfiletitle = dirname;
-
- // printf("loadbank %s/\n",bankdirname);
- struct dirent *fn;
-
- while((fn = readdir(dir))) {
- const char *filename = fn->d_name;
-
- //sa verific daca e si extensia dorita
- if(strstr(filename, INSTRUMENT_EXTENSION) == NULL)
- continue;
-
- //verify if the name is like this NNNN-name (where N is a digit)
- int no = 0;
- unsigned int startname = 0;
-
- for(unsigned int i = 0; i < 4; i++) {
- if(strlen(filename) <= i)
- break;
-
- if((filename[i] >= '0') && (filename[i] <= '9')) {
- no = no * 10 + (filename[i] - '0');
- startname++;
- }
- }
-
-
- if((startname + 1) < strlen(filename))
- startname++; //to take out the "-"
-
- char name[PART_MAX_NAME_LEN + 1];
- ZERO(name, PART_MAX_NAME_LEN + 1);
- snprintf(name, PART_MAX_NAME_LEN, "%s", filename);
-
- //remove the file extension
- for(int i = strlen(name) - 1; i >= 2; i--) {
- if(name[i] == '.') {
- name[i] = '\0';
- break;
- }
- }
-
- if(no != 0) //the instrument position in the bank is found
- addtobank(no - 1, filename, &name[startname]);
- else
- addtobank(-1, filename, name);
- ;
- }
-
-
- closedir(dir);
-
- if(dirname != NULL)
- sprintf(config.cfg.currentBankDir, "%s", dirname);
- ;
-
- return 0;
-}
-
-/*
- * Makes a new bank, put it on a file and makes it current bank
- */
-int Bank::newbank(const char *newbankdirname)
-{
- int result;
- char tmpfilename[MAX_STRING_SIZE];
- char bankdir[MAX_STRING_SIZE];
- snprintf(bankdir, MAX_STRING_SIZE, "%s", config.cfg.bankRootDirList[0]);
-
- if(((bankdir[strlen(bankdir) - 1]) != '/')
- && ((bankdir[strlen(bankdir) - 1]) != '\\'))
- strncat(bankdir, "/", MAX_STRING_SIZE - strlen(bankdir) - 1 );
- ;
- strncat(bankdir, newbankdirname, MAX_STRING_SIZE - strlen(bankdir) - 1);
-#ifdef OS_WINDOWS
- result = mkdir(bankdir);
-#else
- result = mkdir(bankdir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-#endif
- if(result < 0)
- return -1;
-
- snprintf(tmpfilename,
- MAX_STRING_SIZE,
- "%s/%s",
- bankdir,
- FORCE_BANK_DIR_FILE);
-// printf("%s\n",tmpfilename);
- FILE *tmpfile = fopen(tmpfilename, "w+");
- fclose(tmpfile);
-
- return loadbank(bankdir);
-}
-
-/*
- * Check if the bank is locked (i.e. the file opened was readonly)
- */
-int Bank::locked()
-{
- return dirname == NULL;
-}
-
-/*
- * Swaps a slot with another
- */
-void Bank::swapslot(unsigned int n1, unsigned int n2)
-{
- if((n1 == n2) || (locked()))
- return;
- if(emptyslot(n1) && (emptyslot(n2)))
- return;
- if(emptyslot(n1)) { //change n1 to n2 in order to make
- int tmp = n2;
- n2 = n1;
- n1 = tmp;
- }
-
- if(emptyslot(n2)) { //this is just a movement from slot1 to slot2
- setname(n1, getname(n1), n2);
- ins[n2] = ins[n1];
- ins[n1].used = false;
- ins[n1].name[0] = '\0';
- ins[n1].filename = NULL;
- ins[n1].info.PADsynth_used = 0;
- }
- else { //if both slots are used
- if(strcmp(ins[n1].name, ins[n2].name) == 0) //change the name of the second instrument if the name are equal
- strncat(ins[n2].name, "2", PART_MAX_NAME_LEN);
- ;
- setname(n1, getname(n1), n2);
- setname(n2, getname(n2), n1);
- ins_t tmp;
- tmp.used = true;
- strcpy(tmp.name, ins[n2].name);
- char *tmpfilename = ins[n2].filename;
- bool padsynth_used = ins[n2].info.PADsynth_used;
-
- ins[n2] = ins[n1];
- strcpy(ins[n1].name, tmp.name);
- ins[n1].filename = tmpfilename;
- ins[n1].info.PADsynth_used = padsynth_used;
- }
-}
-
-
-//a helper function that compares 2 banks[] arrays
-int Bank_compar(const void *a, const void *b)
-{
- struct Bank::bankstruct *bank1 = (Bank::bankstruct *)a;
- struct Bank::bankstruct *bank2 = (Bank::bankstruct *)b;
- if(((bank1->name) == NULL) || ((bank2->name) == NULL))
- return 0;
-
- int result = strcasecmp(bank1->name, bank2->name);
- return result < 0;
-}
-
-
-/*
- * Re-scan for directories containing instrument banks
- */
-
-void Bank::rescanforbanks()
-{
- for(int i = 0; i < MAX_NUM_BANKS; i++) {
- if(banks[i].dir != NULL)
- delete [] banks[i].dir;
- if(banks[i].name != NULL)
- delete [] banks[i].name;
- banks[i].dir = NULL;
- banks[i].name = NULL;
- }
-
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++)
- if(config.cfg.bankRootDirList[i] != NULL)
- scanrootdir(config.cfg.bankRootDirList[i]);
-
- //sort the banks
- for(int j = 0; j < MAX_NUM_BANKS - 1; j++) {
- for(int i = j + 1; i < MAX_NUM_BANKS; i++) {
- if(Bank_compar(&banks[i], &banks[j])) {
- char *tmpname = banks[i].name;
- char *tmpdir = banks[i].dir;
-
- banks[i].name = banks[j].name;
- banks[i].dir = banks[j].dir;
-
- banks[j].name = tmpname;
- banks[j].dir = tmpdir;
- }
- }
- }
-
- //remove duplicate bank names
- int dupl = 0;
- for(int j = 0; j < MAX_NUM_BANKS - 1; j++) {
- for(int i = j + 1; i < MAX_NUM_BANKS; i++) {
- if((banks[i].name == NULL) || (banks[j].name == NULL))
- continue;
- if(strcmp(banks[i].name, banks[j].name) == 0) { //add a [1] to the first bankname and [n] to others
- char *tmpname = banks[i].name;
- banks[i].name = new char[strlen(tmpname) + 100];
- sprintf(banks[i].name, "%s[%d]", tmpname, dupl + 2);
- delete[] tmpname;
-
- if(dupl == 0) {
- char *tmpname = banks[j].name;
- banks[j].name = new char[strlen(tmpname) + 100];
- sprintf(banks[j].name, "%s[1]", tmpname);
- delete[] tmpname;
- }
-
- dupl++;
- }
- else
- dupl = 0;
- }
- }
-}
-
-
-
-// private stuff
-
-void Bank::scanrootdir(char *rootdir)
-{
-// printf("Scanning root dir:%s\n",rootdir);
- DIR *dir = opendir(rootdir);
- if(dir == NULL)
- return;
-
- const int maxdirsize = 1000;
- struct {
- char dir[maxdirsize];
- char name[maxdirsize];
- } bank;
-
- const char *separator = "/";
- if(strlen(rootdir)) {
- char tmp = rootdir[strlen(rootdir) - 1];
- if((tmp == '/') || (tmp == '\\'))
- separator = "";
- }
-
- struct dirent *fn;
- while((fn = readdir(dir))) {
- const char *dirname = fn->d_name;
- if(dirname[0] == '.')
- continue;
-
- snprintf(bank.dir, maxdirsize, "%s%s%s/", rootdir, separator, dirname);
- snprintf(bank.name, maxdirsize, "%s", dirname);
- //find out if the directory contains at least 1 instrument
- bool isbank = false;
-
- DIR *d = opendir(bank.dir);
- if(d == NULL)
- continue;
-
- struct dirent *fname;
-
- while((fname = readdir(d))) {
- if((strstr(fname->d_name, INSTRUMENT_EXTENSION) != NULL)
- || (strstr(fname->d_name, FORCE_BANK_DIR_FILE) != NULL)) {
- isbank = true;
- break; //aici as putea pune in loc de break un update la un counter care imi arata nr. de instrumente din bank
- }
- }
-
- closedir(d);
-
- if(isbank) {
- int pos = -1;
- for(int i = 1; i < MAX_NUM_BANKS; i++) { //banks[0] e liber intotdeauna
- if(banks[i].name == NULL) {
- pos = i;
- break;
- }
- }
-
- if(pos >= 0) {
- banks[pos].name = new char[maxdirsize];
- banks[pos].dir = new char[maxdirsize];
- snprintf(banks[pos].name, maxdirsize, "%s", bank.name);
- snprintf(banks[pos].dir, maxdirsize, "%s", bank.dir);
- }
- }
- }
-
- closedir(dir);
-}
-
-void Bank::clearbank()
-{
- for(int i = 0; i < BANK_SIZE; i++)
- deletefrombank(i);
- if(dirname != NULL)
- delete[] dirname;
- bankfiletitle = NULL;
- dirname = NULL;
-}
-
-int Bank::addtobank(int pos, const char *filename, const char *name)
-{
- if((pos >= 0) && (pos < BANK_SIZE)) {
- if(ins[pos].used)
- pos = -1; //force it to find a new free position
- }
- else
- if(pos >= BANK_SIZE)
- pos = -1;
-
-
- if(pos < 0) { //find a free position
- for(int i = BANK_SIZE - 1; i >= 0; i--)
- if(!ins[i].used) {
- pos = i;
- break;
- }
- ;
- }
-
- if(pos < 0)
- return -1; //the bank is full
-
- // printf("%s %d\n",filename,pos);
-
- deletefrombank(pos);
-
- ins[pos].used = true;
- snprintf(ins[pos].name, PART_MAX_NAME_LEN, "%s", name);
-
- snprintf(tmpinsname[pos], PART_MAX_NAME_LEN + 10, " ");
-
- int len = strlen(filename) + 1 + strlen(dirname);
- ins[pos].filename = new char[len + 2];
- ins[pos].filename[len + 1] = 0;
- snprintf(ins[pos].filename, len + 1, "%s/%s", dirname, filename);
-
- //see if PADsynth is used
- if(config.cfg.CheckPADsynth) {
- XMLwrapper *xml = new XMLwrapper();
- xml->loadXMLfile(ins[pos].filename);
-
- ins[pos].info.PADsynth_used = xml->hasPadSynth();
- delete xml;
- }
- else
- ins[pos].info.PADsynth_used = false;
-
- return 0;
-}
-
-bool Bank::isPADsynth_used(unsigned int ninstrument)
-{
- if(config.cfg.CheckPADsynth == 0)
- return 0;
- else
- return ins[ninstrument].info.PADsynth_used;
-}
-
-
-void Bank::deletefrombank(int pos)
-{
- if((pos < 0) || (pos >= BANK_SIZE))
- return;
- ins[pos].used = false;
- ZERO(ins[pos].name, PART_MAX_NAME_LEN + 1);
- if(ins[pos].filename != NULL) {
- delete [] ins[pos].filename;
- ins[pos].filename = NULL;
- }
-
- ZERO(tmpinsname[pos], PART_MAX_NAME_LEN + 20);
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/Bank.h b/plugins/zynaddsubfx/src/Misc/Bank.h
deleted file mode 100644
index aa35946..0000000
--- a/plugins/zynaddsubfx/src/Misc/Bank.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Bank.h - Instrument Bank
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef BANK_H
-#define BANK_H
-
-#include "../globals.h"
-#include "XMLwrapper.h"
-#include "Part.h"
-
-#define BANK_SIZE 160
-
-/**
- * The max. number of banks that are used
- */
-#define MAX_NUM_BANKS 400
-
-/**The instrument Bank
- * \todo add in strings to replace char* */
-class Bank
-{
- public:
- /**Constructor*/
- Bank();
- ~Bank();
- char *getname(unsigned int ninstrument);
- char *getnamenumbered(unsigned int ninstrument);
- void setname(unsigned int ninstrument, const char *newname, int newslot); //if newslot==-1 then this is ignored, else it will be put on that slot
- bool isPADsynth_used(unsigned int ninstrument);
-
- /**returns 0 if the slot is not empty or 1 if the slot is empty
- * \todo start using bool before facepalm*/
- int emptyslot(unsigned int ninstrument);
-
- /**Empties out the selected slot*/
- void clearslot(unsigned int ninstrument);
- /**Saves the given Part to slot*/
- void savetoslot(unsigned int ninstrument, Part *part);
- /**Loads the given slot into a Part*/
- void loadfromslot(unsigned int ninstrument, Part *part);
-
- /**Swaps Slots*/
- void swapslot(unsigned int n1, unsigned int n2);
-
- int loadbank(const char *bankdirname);
- int newbank(const char *newbankdirname);
-
- char *bankfiletitle; //this is shown on the UI of the bank (the title of the window)
- int locked();
-
- void rescanforbanks();
-
- struct bankstruct {
- char *dir;
- char *name;
- };
-
- bankstruct banks[MAX_NUM_BANKS];
-
- private:
-
- //it adds a filename to the bank
- //if pos is -1 it try to find a position
- //returns -1 if the bank is full, or 0 if the instrument was added
- int addtobank(int pos, const char *filename, const char *name);
-
- void deletefrombank(int pos);
-
- void clearbank();
-
- char defaultinsname[PART_MAX_NAME_LEN];
- char tmpinsname[BANK_SIZE][PART_MAX_NAME_LEN + 20]; //this keeps the numbered names
-
- struct ins_t {
- bool used;
- char name[PART_MAX_NAME_LEN + 1];
- char *filename;
- struct {
- bool PADsynth_used;
- } info;
- } ins[BANK_SIZE];
-
- char *dirname;
-
- void scanrootdir(char *rootdir); //scans a root dir for banks
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/CMakeLists.txt b/plugins/zynaddsubfx/src/Misc/CMakeLists.txt
deleted file mode 100644
index eb68d58..0000000
--- a/plugins/zynaddsubfx/src/Misc/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-if(NOT ("${MXML_INCLUDE_DIR}" STREQUAL ""))
- include_directories("${MXML_INCLUDE_DIR}")
-endif()
-
-set(zynaddsubfx_misc_SRCS
- Bank.cpp
- Config.cpp
- Dump.cpp
- Master.cpp
- Microtonal.cpp
- Part.cpp
- Util.cpp
- QtXmlWrapper.cpp
-)
-
-if (LASH_FOUND)
- set(zynaddsubfx_misc_SRCS ${zynaddsubfx_misc_SRCS} LASHClient.cpp)
-endif()
-
-add_library(zynaddsubfx_misc STATIC
- ${zynaddsubfx_misc_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_misc zynaddsubfx_output)
diff --git a/plugins/zynaddsubfx/src/Misc/Config.cpp b/plugins/zynaddsubfx/src/Misc/Config.cpp
deleted file mode 100644
index a58f64d..0000000
--- a/plugins/zynaddsubfx/src/Misc/Config.cpp
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Config.cpp - Configuration file functions
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#include <stdio.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef OS_WINDOWS
-#include <windows.h>
-#include <mmsystem.h>
-#endif
-
-#include "Config.h"
-#include "XMLwrapper.h"
-
-Config::Config() :
- workingDir( NULL )
-{}
-void Config::init()
-{
- maxstringsize = MAX_STRING_SIZE; //for ui
- //defaults
- cfg.SampleRate = 44100;
- cfg.SoundBufferSize = 256;
- cfg.OscilSize = 1024;
- cfg.SwapStereo = 0;
-
- cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE];
- snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp");
- cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE];
- snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer");
-
- cfg.DumpFile = new char[MAX_STRING_SIZE];
- snprintf(cfg.DumpFile, MAX_STRING_SIZE, "zynaddsubfx_dump.txt");
-
- cfg.WindowsWaveOutId = 0;
- cfg.WindowsMidiInId = 0;
-
- cfg.BankUIAutoClose = 0;
- cfg.DumpNotesToFile = 0;
- cfg.DumpAppend = 1;
-
- cfg.GzipCompression = 3;
-
- cfg.Interpolation = 0;
- cfg.CheckPADsynth = 1;
-
- cfg.UserInterfaceMode = 0;
- cfg.VirKeybLayout = 1;
- winwavemax = 1;
- winmidimax = 1;
-//try to find out how many input midi devices are there
-#ifdef WINMIDIIN
- winmidimax = midiInGetNumDevs();
- if(winmidimax == 0)
- winmidimax = 1;
-#endif
- winmididevices = new winmidionedevice[winmidimax];
- for(int i = 0; i < winmidimax; i++) {
- winmididevices[i].name = new char[MAX_STRING_SIZE];
- for(int j = 0; j < MAX_STRING_SIZE; j++)
- winmididevices[i].name[j] = '\0';
- }
-
-
-//get the midi input devices name
-#ifdef WINMIDIIN
- MIDIINCAPS midiincaps;
- for(int i = 0; i < winmidimax; i++)
- if(!midiInGetDevCaps(i, &midiincaps, sizeof(MIDIINCAPS)))
- snprintf(winmididevices[i].name,
- MAX_STRING_SIZE,
- "%s",
- midiincaps.szPname);
- ;
-#endif
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++)
- cfg.bankRootDirList[i] = NULL;
- cfg.currentBankDir = new char[MAX_STRING_SIZE];
- sprintf(cfg.currentBankDir, "./testbnk");
-
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++)
- cfg.presetsDirList[i] = NULL;
-
- char filename[MAX_STRING_SIZE];
- getConfigFileName(filename, MAX_STRING_SIZE);
- readConfig(filename);
-
- if(cfg.bankRootDirList[0] == NULL) {
-#if defined(OS_LINUX)
- //banks
- cfg.bankRootDirList[0] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[0], "~/banks");
-
- cfg.bankRootDirList[1] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[1], "./");
-
- cfg.bankRootDirList[2] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[2], "/usr/share/zynaddsubfx/banks");
-
- cfg.bankRootDirList[3] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[3], "/usr/local/share/zynaddsubfx/banks");
-
- cfg.bankRootDirList[4] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[4], "../banks");
-
- cfg.bankRootDirList[5] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[5], "banks");
-
-#else
- //banks
- cfg.bankRootDirList[0] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[0], "./");
-
-#ifdef VSTAUDIOOUT
- cfg.bankRootDirList[1] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[1], "c:/Program Files/ZynAddSubFX/banks");
-#else
- cfg.bankRootDirList[1] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[1], "../banks");
-#endif
- cfg.bankRootDirList[2] = new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[2], "banks");
-
-#endif
- }
-
- if(cfg.presetsDirList[0] == NULL) {
-#if defined(OS_LINUX)
- //presets
- cfg.presetsDirList[0] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[0], "./");
-
- cfg.presetsDirList[1] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[1], "../presets");
-
- cfg.presetsDirList[2] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[2], "presets");
-
- cfg.presetsDirList[3] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[3], "/usr/share/zynaddsubfx/presets");
-
- cfg.presetsDirList[4] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[4], "/usr/local/share/zynaddsubfx/presets");
-
-#else
- //presets
- cfg.presetsDirList[0] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[0], "./");
-
-#ifdef VSTAUDIOOUT
- cfg.presetsDirList[1] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[1], "c:/Program Files/ZynAddSubFX/presets");
-#else
- cfg.presetsDirList[1] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[1], "../presets");
-#endif
-
- cfg.presetsDirList[2] = new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[2], "presets");
-#endif
- }
-}
-
-Config::~Config()
-{
- delete [] cfg.LinuxOSSWaveOutDev;
- delete [] cfg.LinuxOSSSeqInDev;
- delete [] cfg.DumpFile;
-
- for(int i = 0; i < winmidimax; i++)
- delete [] winmididevices[i].name;
- delete [] winmididevices;
-}
-
-
-void Config::save()
-{
- char filename[MAX_STRING_SIZE];
- getConfigFileName(filename, MAX_STRING_SIZE);
- saveConfig(filename);
-}
-
-void Config::clearbankrootdirlist()
-{
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++) {
- if(cfg.bankRootDirList[i] == NULL)
- delete (cfg.bankRootDirList[i]);
- cfg.bankRootDirList[i] = NULL;
- }
-}
-
-void Config::clearpresetsdirlist()
-{
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++) {
- if(cfg.presetsDirList[i] == NULL)
- delete (cfg.presetsDirList[i]);
- cfg.presetsDirList[i] = NULL;
- }
-}
-
-void Config::readConfig(const char *filename)
-{
- XMLwrapper *xmlcfg = new XMLwrapper();
- if(xmlcfg->loadXMLfile(filename) < 0)
- return;
- if(xmlcfg->enterbranch("CONFIGURATION")) {
- cfg.SampleRate = xmlcfg->getpar("sample_rate",
- cfg.SampleRate,
- 4000,
- 1024000);
- cfg.SoundBufferSize = xmlcfg->getpar("sound_buffer_size",
- cfg.SoundBufferSize,
- 16,
- 8192);
- cfg.OscilSize = xmlcfg->getpar("oscil_size",
- cfg.OscilSize,
- MAX_AD_HARMONICS * 2,
- 131072);
- cfg.SwapStereo = xmlcfg->getpar("swap_stereo",
- cfg.SwapStereo,
- 0,
- 1);
- cfg.BankUIAutoClose = xmlcfg->getpar("bank_window_auto_close",
- cfg.BankUIAutoClose,
- 0,
- 1);
-
- cfg.DumpNotesToFile = xmlcfg->getpar("dump_notes_to_file",
- cfg.DumpNotesToFile,
- 0,
- 1);
- cfg.DumpAppend = xmlcfg->getpar("dump_append",
- cfg.DumpAppend,
- 0,
- 1);
- xmlcfg->getparstr("dump_file", cfg.DumpFile, MAX_STRING_SIZE);
-
- cfg.GzipCompression = xmlcfg->getpar("gzip_compression",
- cfg.GzipCompression,
- 0,
- 9);
-
- xmlcfg->getparstr("bank_current", cfg.currentBankDir, MAX_STRING_SIZE);
- cfg.Interpolation = xmlcfg->getpar("interpolation",
- cfg.Interpolation,
- 0,
- 1);
-
- cfg.CheckPADsynth = xmlcfg->getpar("check_pad_synth",
- cfg.CheckPADsynth,
- 0,
- 1);
-
-
- cfg.UserInterfaceMode = xmlcfg->getpar("user_interface_mode",
- cfg.UserInterfaceMode,
- 0,
- 2);
- cfg.VirKeybLayout = xmlcfg->getpar("virtual_keyboard_layout",
- cfg.VirKeybLayout,
- 0,
- 10);
-
- //get bankroot dirs
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++) {
- if(xmlcfg->enterbranch("BANKROOT", i)) {
- cfg.bankRootDirList[i] = new char[MAX_STRING_SIZE];
- xmlcfg->getparstr("bank_root",
- cfg.bankRootDirList[i],
- MAX_STRING_SIZE);
- xmlcfg->exitbranch();
- }
- }
-
- //get preset root dirs
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++) {
- if(xmlcfg->enterbranch("PRESETSROOT", i)) {
- cfg.presetsDirList[i] = new char[MAX_STRING_SIZE];
- xmlcfg->getparstr("presets_root",
- cfg.presetsDirList[i],
- MAX_STRING_SIZE);
- xmlcfg->exitbranch();
- }
- }
-
- //linux stuff
- xmlcfg->getparstr("linux_oss_wave_out_dev",
- cfg.LinuxOSSWaveOutDev,
- MAX_STRING_SIZE);
- xmlcfg->getparstr("linux_oss_seq_in_dev",
- cfg.LinuxOSSSeqInDev,
- MAX_STRING_SIZE);
-
- //windows stuff
- cfg.WindowsWaveOutId = xmlcfg->getpar("windows_wave_out_id",
- cfg.WindowsWaveOutId,
- 0,
- winwavemax);
- cfg.WindowsMidiInId = xmlcfg->getpar("windows_midi_in_id",
- cfg.WindowsMidiInId,
- 0,
- winmidimax);
-
- xmlcfg->exitbranch();
- }
- delete (xmlcfg);
-
- cfg.OscilSize = (int) pow(2, ceil(log(cfg.OscilSize - 1.0) / log(2.0)));
-}
-
-void Config::saveConfig(const char *filename)
-{
- XMLwrapper *xmlcfg = new XMLwrapper();
-
- xmlcfg->beginbranch("CONFIGURATION");
-
- xmlcfg->addpar("sample_rate", cfg.SampleRate);
- xmlcfg->addpar("sound_buffer_size", cfg.SoundBufferSize);
- xmlcfg->addpar("oscil_size", cfg.OscilSize);
- xmlcfg->addpar("swap_stereo", cfg.SwapStereo);
- xmlcfg->addpar("bank_window_auto_close", cfg.BankUIAutoClose);
-
- xmlcfg->addpar("dump_notes_to_file", cfg.DumpNotesToFile);
- xmlcfg->addpar("dump_append", cfg.DumpAppend);
- xmlcfg->addparstr("dump_file", cfg.DumpFile);
-
- xmlcfg->addpar("gzip_compression", cfg.GzipCompression);
-
- xmlcfg->addpar("check_pad_synth", cfg.CheckPADsynth);
-
- xmlcfg->addparstr("bank_current", cfg.currentBankDir);
-
- xmlcfg->addpar("user_interface_mode", cfg.UserInterfaceMode);
- xmlcfg->addpar("virtual_keyboard_layout", cfg.VirKeybLayout);
-
-
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++)
- if(cfg.bankRootDirList[i] != NULL) {
- xmlcfg->beginbranch("BANKROOT", i);
- xmlcfg->addparstr("bank_root", cfg.bankRootDirList[i]);
- xmlcfg->endbranch();
- }
- ;
-
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++)
- if(cfg.presetsDirList[i] != NULL) {
- xmlcfg->beginbranch("PRESETSROOT", i);
- xmlcfg->addparstr("presets_root", cfg.presetsDirList[i]);
- xmlcfg->endbranch();
- }
- ;
-
- xmlcfg->addpar("interpolation", cfg.Interpolation);
-
- //linux stuff
- xmlcfg->addparstr("linux_oss_wave_out_dev", cfg.LinuxOSSWaveOutDev);
- xmlcfg->addparstr("linux_oss_seq_in_dev", cfg.LinuxOSSSeqInDev);
-
- //windows stuff
- xmlcfg->addpar("windows_wave_out_id", cfg.WindowsWaveOutId);
- xmlcfg->addpar("windows_midi_in_id", cfg.WindowsMidiInId);
-
- xmlcfg->endbranch();
-
- int tmp = cfg.GzipCompression;
- cfg.GzipCompression = 0;
- xmlcfg->saveXMLfile(filename);
- cfg.GzipCompression = tmp;
-
- delete (xmlcfg);
-}
-
-void Config::getConfigFileName(char *name, int namesize)
-{
- name[0] = 0;
- if( workingDir != NULL )
- {
- snprintf(name, namesize, "%s%s", workingDir, ".zynaddsubfxXML.cfg");
- }
- else
- {
-#ifdef OS_LINUX
- snprintf(name, namesize, "%s%s", getenv("HOME"), "/.zynaddsubfxXML.cfg");
-#else
- snprintf(name, namesize, "%s", "zynaddsubfxXML.cfg");
-#endif
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/Config.h b/plugins/zynaddsubfx/src/Misc/Config.h
deleted file mode 100644
index 45688ad..0000000
--- a/plugins/zynaddsubfx/src/Misc/Config.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Config.h - Configuration file functions
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-#include "../globals.h"
-#define MAX_STRING_SIZE 4000
-#define MAX_BANK_ROOT_DIRS 100
-
-/**Configuration file functions*/
-class Config
-{
- public:
- /** Constructor*/
- Config();
- /** Destructor*/
- ~Config();
- struct {
- char *LinuxOSSWaveOutDev, *LinuxOSSSeqInDev;
- int SampleRate, SoundBufferSize, OscilSize, SwapStereo;
- int WindowsWaveOutId, WindowsMidiInId;
- int BankUIAutoClose;
- int DumpNotesToFile, DumpAppend;
- int GzipCompression;
- int Interpolation;
- char *DumpFile;
- char *bankRootDirList[MAX_BANK_ROOT_DIRS], *currentBankDir;
- char *presetsDirList[MAX_BANK_ROOT_DIRS];
- int CheckPADsynth;
- int UserInterfaceMode;
- int VirKeybLayout;
- } cfg;
- int winwavemax, winmidimax; //number of wave/midi devices on Windows
- int maxstringsize;
-
- char * workingDir;
-
- struct winmidionedevice {
- char *name;
- };
- winmidionedevice *winmididevices;
-
- void clearbankrootdirlist();
- void clearpresetsdirlist();
- void init();
- void save();
-
- private:
- void readConfig(const char *filename);
- void saveConfig(const char *filename);
- void getConfigFileName(char *name, int namesize);
-};
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/Control.h b/plugins/zynaddsubfx/src/Misc/Control.h
deleted file mode 100644
index 297e6f0..0000000
--- a/plugins/zynaddsubfx/src/Misc/Control.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Control.h - Defines a variable that can be controled from a frontend
-
- Copyright (C) 2009 Harald Hvaal
- Author: Harald Hvaal
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#ifndef _CONTROL_H_
-#define _CONTROL_H_
-
-#include <string>
-
-class Control
-{
- public:
- /**
- * The parent is the logical owner of this control. Parent should only
- * be null for the root node.
- * The id is a string uniquely identifying this control within the
- * context of the parent control. No spaces or dots are allowed in this
- * id.
- * Children id's are denoted by <parent-id>.<children-id>, so that one
- * can refer to any control in the hierarchy by separating them with
- * dots. Example: Main.AddSynth.FrequencyLFO.Amplitude
- */
- Control(Control *parent, string id);
-
- /**
- * Will recursively get the XML representation for all the subcontrols.
- * Used for saving to file and copy-pasting settings
- */
- string getXMLRepresentation();
-
- /**
- * Set the value of this (and possibly subcomponents as well) based on
- * a xml description.
- */
- void restoreFromXML(string xml);
-
- /**
- * Register a controluser. This will cause this user to be notified
- * whenever the contents of the control changes.
- */
- void registerControlUser(ControlUser *user);
-
- /**
- * This should return a string representation of the controls internal
- * value
- */
- virtual string getStringRepresentation() = 0;
-};
-
-class FloatControl:public Control
-{
- public:
- /**
- * Set the value of this control. If the ControlUser variable is set,
- * then this user will not be updated with the new value. This is to
- * avoid setting a value being set back to the source that set it
- * (which would be redundant, or possibly causing infinite setValue
- * loops).
- * NOTE: this function is thread-safe (using a mutex internally)
- */
- void setValue(float value, ControlUser *user = NULL);
-
- /**
- * Reimplemented from Control
- */
- virtual string getStringRepresentation();
-
- float value();
-};
-
-class ControlUser
-{
- public:
- /**
- * Pure virtual method, to notify the controluser that the value has
- * been changed internally, and needs to be read again.
- */
- virtual void controlUpdated(Control *control) = 0;
-};
-
-#endif /* _CONTROL_H_ */
-
diff --git a/plugins/zynaddsubfx/src/Misc/Dump.cpp b/plugins/zynaddsubfx/src/Misc/Dump.cpp
deleted file mode 100644
index 492cf57..0000000
--- a/plugins/zynaddsubfx/src/Misc/Dump.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Dump.cpp - It dumps the notes to a text file
-
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#include <stdlib.h>
-#include <time.h>
-#include "Util.h"
-#include "Dump.h"
-
-Dump dump;
-
-Dump::Dump()
-{
- file = NULL;
- tick = 0;
- k = 0;
- keyspressed = 0;
-}
-
-Dump::~Dump()
-{
- if(file != NULL) {
- double duration = (double)tick * (double) SOUND_BUFFER_SIZE
- / (double) SAMPLE_RATE;
- fprintf(
- file,
- "\n# statistics: duration = %d seconds; keyspressed = %d\n\n\n\n",
- (int) duration,
- keyspressed);
- fclose(file);
- }
-}
-
-void Dump::startnow()
-{
- if(file != NULL)
- return; //the file is already open
-
- if(config.cfg.DumpNotesToFile != 0) {
- if(config.cfg.DumpAppend != 0)
- file = fopen(config.cfg.DumpFile, "a");
- else
- file = fopen(config.cfg.DumpFile, "w");
- if(file == NULL)
- return;
- if(config.cfg.DumpAppend != 0)
- fprintf(file, "%s", "#************************************\n");
-
- time_t tm = time(NULL);
-
- fprintf(file, "#date/time = %s\n", ctime(&tm));
- fprintf(file,
- "#1 tick = %g milliseconds\n",
- SOUND_BUFFER_SIZE * 1000.0 / SAMPLE_RATE);
- fprintf(file, "SAMPLERATE = %d\n", SAMPLE_RATE);
- fprintf(file, "TICKSIZE = %d #samples\n", SOUND_BUFFER_SIZE);
- fprintf(file, "\n\nSTART\n");
- }
-}
-
-void Dump::inctick()
-{
- tick++;
-}
-
-
-void Dump::dumpnote(char chan, char note, char vel)
-{
- if(file == NULL)
- return;
- if(note == 0)
- return;
- if(vel == 0)
- fprintf(file, "n %d -> %d %d \n", tick, chan, note); //note off
- else
- fprintf(file, "N %d -> %d %d %d \n", tick, chan, note, vel); //note on
-
- if(vel != 0)
- keyspressed++;
-#ifndef JACKAUDIOOUT
- if(k++ > 25) {
- fflush(file);
- k = 0;
- }
-#endif
-}
-
-void Dump::dumpcontroller(char chan, unsigned int type, int par)
-{
- if(file == NULL)
- return;
- switch(type) {
- case C_pitchwheel:
- fprintf(file, "P %d -> %d %d\n", tick, chan, par);
- break;
- default:
- fprintf(file, "C %d -> %d %d %d\n", tick, chan, type, par);
- break;
- }
-#ifndef JACKAUDIOOUT
- if(k++ > 25) {
- fflush(file);
- k = 0;
- }
-#endif
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/Dump.h b/plugins/zynaddsubfx/src/Misc/Dump.h
deleted file mode 100644
index 392fd40..0000000
--- a/plugins/zynaddsubfx/src/Misc/Dump.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Dump.h - It dumps the notes to a text file
-
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#ifndef DUMP_H
-#define DUMP_H
-
-#include <stdio.h>
-
-/**Object used to dump the notes into a text file
- * \todo see if this object should have knowledge about the file
- * that it will write to
- * \todo upgrade from stdio to iostream*/
-class Dump
-{
- public:
- /**Constructor*/
- Dump();
- /**Destructor
- * Closes the dumpfile*/
- ~Dump();
- /**Open dumpfile and prepare it for dumps
- * \todo see if this fits better in the constructor*/
- void startnow();
- /**Tick the timestamp*/
- void inctick();
- /**Dump Note to dumpfile
- * @param chan The channel of the note
- * @param note The note
- * @param vel The velocity of the note*/
- void dumpnote(char chan, char note, char vel);
- /** Dump the Controller
- * @param chan The channel of the Controller
- * @param type The type
- * @param par The value of the controller
- * \todo figure out what type is exactly meaning*/
- void dumpcontroller(char chan, unsigned int type, int par);
-
- private:
- FILE *file;
- int tick;
- int k; //This appears to be a constant used to flush the file
- //periodically when JACK is used
- int keyspressed;
-};
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/LASHClient.cpp b/plugins/zynaddsubfx/src/Misc/LASHClient.cpp
deleted file mode 100644
index 2920377..0000000
--- a/plugins/zynaddsubfx/src/Misc/LASHClient.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- LASHClient.cpp - LASH support
- Copyright (C) 2006-2009 Lars Luthman
- Author: Lars Luthman
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#include <unistd.h>
-#include <iostream>
-#include <string>
-
-#include "LASHClient.h"
-
-
-LASHClient::LASHClient(int *argc, char ***argv)
-{
- client = lash_init(lash_extract_args(argc, argv), "ZynAddSubFX",
- LASH_Config_File, LASH_PROTOCOL(2, 0));
-}
-
-
-void LASHClient::setalsaid(int id)
-{
- if(lash_enabled(client))
- if(id != -1)
- lash_alsa_client_id(client, id);
-}
-
-
-void LASHClient::setjackname(const char *name)
-{
- if(lash_enabled(client))
- if(name != NULL) {
- lash_jack_client_name(client, name);
-
- lash_event_t *event = lash_event_new_with_type(LASH_Client_Name);
- lash_event_set_string(event, name);
- lash_send_event(client, event);
- }
-}
-
-
-LASHClient::Event LASHClient::checkevents(std::string &filename)
-{
- if(!lash_enabled(client))
- return NoEvent;
-
- Event received = NoEvent;
- lash_event_t *event;
- while(event = lash_get_event(client)) {
- // save
- if(lash_event_get_type(event) == LASH_Save_File) {
- std::cerr << "LASH event: LASH_Save_File" << std::endl;
- filename = std::string(lash_event_get_string(event))
- + "/master.xmz";
- received = Save;
- break;
- }
- // restore
- else
- if(lash_event_get_type(event) == LASH_Restore_File) {
- std::cerr << "LASH event: LASH_Restore_File" << std::endl;
- filename = std::string(lash_event_get_string(event))
- + "/master.xmz";
- received = Restore;
- break;
- }
- // quit
- else
- if(lash_event_get_type(event) == LASH_Quit) {
- std::cerr << "LASH event: LASH_Quit" << std::endl;
- received = Quit;
- break;
- }
-
- lash_event_destroy(event);
- }
- return received;
-}
-
-
-void LASHClient::confirmevent(Event event)
-{
- if(event == Save)
- lash_send_event(client, lash_event_new_with_type(LASH_Save_File));
- else
- if(event == Restore)
- lash_send_event(client, lash_event_new_with_type(LASH_Restore_File));
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/LASHClient.h b/plugins/zynaddsubfx/src/Misc/LASHClient.h
deleted file mode 100644
index cf50295..0000000
--- a/plugins/zynaddsubfx/src/Misc/LASHClient.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- LASHClient.h - LASH support
- Copyright (C) 2006-2009 Lars Luthman
- Author: Lars Luthman
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#ifndef LASHClient_h
-#define LASHClient_h
-
-#include <string>
-#include <pthread.h>
-#include <lash/lash.h>
-
-
-/** This class wraps up some functions for initialising and polling
- * the LASH daemon.
- * \todo fix indentation nonconformism
- * \todo see why there is no destructor*/
-class LASHClient
-{
- public:
- /**Enum to represent the LASH events that are currently handled*/
- enum Event {
- Save,
- Restore,
- Quit,
- NoEvent
- };
-
- /** Constructor
- * @param argc number of arguments
- * @param argv the text arguments*/
- LASHClient(int *argc, char ***argv);
-
- /**set the ALSA id
- * @param id new ALSA id*/
- void setalsaid(int id);
- /**Set the JACK name
- * @param name the new name*/
- void setjackname(const char *name);
- Event checkevents(std::string &filename);
- void confirmevent(Event event);
-
- private:
-
- lash_client_t *client;
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/Master.cpp b/plugins/zynaddsubfx/src/Misc/Master.cpp
deleted file mode 100644
index fa5e1b0..0000000
--- a/plugins/zynaddsubfx/src/Misc/Master.cpp
+++ /dev/null
@@ -1,828 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Master.cpp - It sends Midi Messages to Parts, receives samples from parts,
- process them with system/insertion effects and mix them
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "Master.h"
-
-#include <stdio.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <unistd.h>
-
-Master::Master()
-{
- swaplr = 0;
-
- pthread_mutex_init(&mutex, NULL);
- fft = new FFTwrapper(OSCIL_SIZE);
-
- tmpmixl = new REALTYPE[SOUND_BUFFER_SIZE];
- tmpmixr = new REALTYPE[SOUND_BUFFER_SIZE];
- audiooutl = new REALTYPE[SOUND_BUFFER_SIZE];
- audiooutr = new REALTYPE[SOUND_BUFFER_SIZE];
-
- ksoundbuffersample = -1; //this is only time when this is -1; this means that the GetAudioOutSamples was never called
- ksoundbuffersamplelow = 0.0;
- oldsamplel = 0.0;
- oldsampler = 0.0;
- shutup = 0;
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- vuoutpeakpart[npart] = 1e-9;
- fakepeakpart[npart] = 0;
- }
-
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- audiooutl[i] = 0.0;
- audiooutr[i] = 0.0;
- }
-
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++)
- part[npart] = new Part(µtonal, fft, &mutex);
-
-
-
- //Insertion Effects init
- for(int nefx = 0; nefx < NUM_INS_EFX; nefx++)
- insefx[nefx] = new EffectMgr(1, &mutex);
-
- //System Effects init
- for(int nefx = 0; nefx < NUM_SYS_EFX; nefx++)
- sysefx[nefx] = new EffectMgr(0, &mutex);
- ;
-
-
- defaults();
-}
-
-void Master::defaults()
-{
- volume = 1.0;
- setPvolume(80);
- setPkeyshift(64);
-
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- part[npart]->defaults();
- part[npart]->Prcvchn = npart % NUM_MIDI_CHANNELS;
- }
-
- partonoff(0, 1); //enable the first part
-
- for(int nefx = 0; nefx < NUM_INS_EFX; nefx++) {
- insefx[nefx]->defaults();
- Pinsparts[nefx] = -1;
- }
-
- //System Effects init
- for(int nefx = 0; nefx < NUM_SYS_EFX; nefx++) {
- sysefx[nefx]->defaults();
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++)
- //if (nefx==0) setPsysefxvol(npart,nefx,64);
- //else
- setPsysefxvol(npart, nefx, 0);
- ;
- for(int nefxto = 0; nefxto < NUM_SYS_EFX; nefxto++)
- setPsysefxsend(nefx, nefxto, 0);
- }
-
-// sysefx[0]->changeeffect(1);
- microtonal.defaults();
- ShutUp();
-}
-
-/*
- * Note On Messages (velocity=0 for NoteOff)
- */
-void Master::NoteOn(unsigned char chan,
- unsigned char note,
- unsigned char velocity)
-{
- dump.dumpnote(chan, note, velocity);
-
- noteon(chan, note, velocity);
-}
-
-/*
- * Internal Note On (velocity=0 for NoteOff)
- */
-void Master::noteon(unsigned char chan,
- unsigned char note,
- unsigned char velocity)
-{
- int npart;
- if(velocity != 0) {
- for(npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- if(chan == part[npart]->Prcvchn) {
- fakepeakpart[npart] = velocity * 2;
- if(part[npart]->Penabled != 0)
- part[npart]->NoteOn(note, velocity, keyshift);
- }
- }
- }
- else
- this->NoteOff(chan, note);
- ;
- HDDRecorder.triggernow();
-}
-
-/*
- * Note Off Messages
- */
-void Master::NoteOff(unsigned char chan, unsigned char note)
-{
- dump.dumpnote(chan, note, 0);
-
- noteoff(chan, note);
-}
-
-/*
- * Internal Note Off
- */
-void Master::noteoff(unsigned char chan, unsigned char note)
-{
- int npart;
- for(npart = 0; npart < NUM_MIDI_PARTS; npart++)
- if((chan == part[npart]->Prcvchn) && (part[npart]->Penabled != 0))
- part[npart]->NoteOff(note);
- ;
-}
-
-/*
- * Controllers
- */
-void Master::SetController(unsigned char chan, unsigned int type, int par)
-{
- dump.dumpcontroller(chan, type, par);
-
- setcontroller(chan, type, par);
-}
-
-/*
- * Internal Controllers
- */
-void Master::setcontroller(unsigned char chan, unsigned int type, int par)
-{
- if((type == C_dataentryhi) || (type == C_dataentrylo)
- || (type == C_nrpnhi) || (type == C_nrpnlo)) { //Process RPN and NRPN by the Master (ignore the chan)
- ctl.setparameternumber(type, par);
-
- int parhi = -1, parlo = -1, valhi = -1, vallo = -1;
- if(ctl.getnrpn(&parhi, &parlo, &valhi, &vallo) == 0) //this is NRPN
- //fprintf(stderr,"rcv. NRPN: %d %d %d %d\n",parhi,parlo,valhi,vallo);
- switch(parhi) {
- case 0x04: //System Effects
- if(parlo < NUM_SYS_EFX)
- sysefx[parlo]->seteffectpar_nolock(valhi, vallo);
- ;
- break;
- case 0x08: //Insertion Effects
- if(parlo < NUM_INS_EFX)
- insefx[parlo]->seteffectpar_nolock(valhi, vallo);
- ;
- break;
- }
- ;
- }
- else { //other controllers
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++) //Send the controller to all part assigned to the channel
- if((chan == part[npart]->Prcvchn) && (part[npart]->Penabled != 0))
- part[npart]->SetController(type, par);
- ;
-
- if(type == C_allsoundsoff) { //cleanup insertion/system FX
- for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx)
- sysefx[nefx]->cleanup();
- for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx)
- insefx[nefx]->cleanup();
- }
- }
-}
-
-
-/*
- * Enable/Disable a part
- */
-void Master::partonoff(int npart, int what)
-{
- if(npart >= NUM_MIDI_PARTS)
- return;
- if(what == 0) { //disable part
- fakepeakpart[npart] = 0;
- part[npart]->Penabled = 0;
- part[npart]->cleanup();
- for(int nefx = 0; nefx < NUM_INS_EFX; nefx++) {
- if(Pinsparts[nefx] == npart)
- insefx[nefx]->cleanup();
- ;
- }
- }
- else { //enabled
- part[npart]->Penabled = 1;
- fakepeakpart[npart] = 0;
- }
-}
-
-/*
- * Master audio out (the final sound)
- */
-void Master::AudioOut(REALTYPE *outl, REALTYPE *outr)
-{
- int i, npart, nefx;
-
- /* //test!!!!!!!!!!!!! se poate bloca aici (mutex)
- if (seq.play){
- int type,par1,par2,again,midichan;
- int ntrack=1;
- // do{
- again=seq.getevent(ntrack,&midichan,&type,&par1,&par2);
- if (type>0) {
- // printf("aaa\n");
-
- if (type==1){//note_on or note_off
- if (par2!=0) NoteOn(midichan,par1,par2);
- else NoteOff(midichan,par1);
- };
- };
- // } while (again);
- };
- */
-
-
-// printf("zzzz\n");
-
-
- //Swaps the Left channel with Right Channel (if it is asked for)
- if(swaplr != 0) {
- REALTYPE *tmp = outl;
- outl = outr;
- outr = tmp;
- }
-
- //clean up the output samples
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] = 0.0;
- outr[i] = 0.0;
- }
-
- //Compute part samples and store them part[npart]->partoutl,partoutr
- for(npart = 0; npart < NUM_MIDI_PARTS; npart++)
- if(part[npart]->Penabled != 0)
- part[npart]->ComputePartSmps();
-
- //Insertion effects
- for(nefx = 0; nefx < NUM_INS_EFX; nefx++) {
- if(Pinsparts[nefx] >= 0) {
- int efxpart = Pinsparts[nefx];
- if(part[efxpart]->Penabled != 0)
- insefx[nefx]->out(part[efxpart]->partoutl,
- part[efxpart]->partoutr);
- }
- }
-
-
- //Apply the part volumes and pannings (after insertion effects)
- for(npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- if(part[npart]->Penabled == 0)
- continue;
-
- REALTYPE newvol_l = part[npart]->volume;
- REALTYPE newvol_r = part[npart]->volume;
- REALTYPE oldvol_l = part[npart]->oldvolumel;
- REALTYPE oldvol_r = part[npart]->oldvolumer;
- REALTYPE pan = part[npart]->panning;
- if(pan < 0.5)
- newvol_l *= pan * 2.0;
- else
- newvol_r *= (1.0 - pan) * 2.0;
-
- if(ABOVE_AMPLITUDE_THRESHOLD(oldvol_l, newvol_l)
- || ABOVE_AMPLITUDE_THRESHOLD(oldvol_r, newvol_r)) { //the volume or the panning has changed and needs interpolation
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE vol_l = INTERPOLATE_AMPLITUDE(oldvol_l,
- newvol_l,
- i,
- SOUND_BUFFER_SIZE);
- REALTYPE vol_r = INTERPOLATE_AMPLITUDE(oldvol_r,
- newvol_r,
- i,
- SOUND_BUFFER_SIZE);
- part[npart]->partoutl[i] *= vol_l;
- part[npart]->partoutr[i] *= vol_r;
- }
- part[npart]->oldvolumel = newvol_l;
- part[npart]->oldvolumer = newvol_r;
- }
- else {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //the volume did not changed
- part[npart]->partoutl[i] *= newvol_l;
- part[npart]->partoutr[i] *= newvol_r;
- }
- }
- }
-
-
- //System effects
- for(nefx = 0; nefx < NUM_SYS_EFX; nefx++) {
- if(sysefx[nefx]->geteffect() == 0)
- continue; //the effect is disabled
-
- //Clean up the samples used by the system effects
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tmpmixl[i] = 0.0;
- tmpmixr[i] = 0.0;
- }
-
- //Mix the channels according to the part settings about System Effect
- for(npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- //skip if the part has no output to effect
- if(Psysefxvol[nefx][npart] == 0)
- continue;
-
- //skip if the part is disabled
- if(part[npart]->Penabled == 0)
- continue;
-
- //the output volume of each part to system effect
- REALTYPE vol = sysefxvol[nefx][npart];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tmpmixl[i] += part[npart]->partoutl[i] * vol;
- tmpmixr[i] += part[npart]->partoutr[i] * vol;
- }
- }
-
- // system effect send to next ones
- for(int nefxfrom = 0; nefxfrom < nefx; nefxfrom++) {
- if(Psysefxsend[nefxfrom][nefx] != 0) {
- REALTYPE v = sysefxsend[nefxfrom][nefx];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tmpmixl[i] += sysefx[nefxfrom]->efxoutl[i] * v;
- tmpmixr[i] += sysefx[nefxfrom]->efxoutr[i] * v;
- }
- }
- }
-
- sysefx[nefx]->out(tmpmixl, tmpmixr);
-
- //Add the System Effect to sound output
- REALTYPE outvol = sysefx[nefx]->sysefxgetvolume();
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] += tmpmixl[i] * outvol;
- outr[i] += tmpmixr[i] * outvol;
- }
- }
-
- //Mix all parts
- for(npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //the volume did not changed
- outl[i] += part[npart]->partoutl[i];
- outr[i] += part[npart]->partoutr[i];
- }
- }
-
- //Insertion effects for Master Out
- for(nefx = 0; nefx < NUM_INS_EFX; nefx++)
- if(Pinsparts[nefx] == -2)
- insefx[nefx]->out(outl, outr);
- ;
-
- //Master Volume
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] *= volume;
- outr[i] *= volume;
- }
-
- //Peak computation (for vumeters)
- vuoutpeakl = 1e-12;
- vuoutpeakr = 1e-12;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- if(fabs(outl[i]) > vuoutpeakl)
- vuoutpeakl = fabs(outl[i]);
- if(fabs(outr[i]) > vuoutpeakr)
- vuoutpeakr = fabs(outr[i]);
- }
- if((vuoutpeakl > 1.0) || (vuoutpeakr > 1.0))
- vuclipped = 1;
- if(vumaxoutpeakl < vuoutpeakl)
- vumaxoutpeakl = vuoutpeakl;
- if(vumaxoutpeakr < vuoutpeakr)
- vumaxoutpeakr = vuoutpeakr;
-
- //RMS Peak computation (for vumeters)
- vurmspeakl = 1e-12;
- vurmspeakr = 1e-12;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- vurmspeakl += outl[i] * outl[i];
- vurmspeakr += outr[i] * outr[i];
- }
- vurmspeakl = sqrt(vurmspeakl / SOUND_BUFFER_SIZE);
- vurmspeakr = sqrt(vurmspeakr / SOUND_BUFFER_SIZE);
-
- //Part Peak computation (for Part vumeters or fake part vumeters)
- for(npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- vuoutpeakpart[npart] = 1.0e-12;
- if(part[npart]->Penabled != 0) {
- REALTYPE *outl = part[npart]->partoutl,
- *outr = part[npart]->partoutr;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE tmp = fabs(outl[i] + outr[i]);
- if(tmp > vuoutpeakpart[npart])
- vuoutpeakpart[npart] = tmp;
- }
- vuoutpeakpart[npart] *= volume;
- }
- else
- if(fakepeakpart[npart] > 1)
- fakepeakpart[npart]--;
- ;
- }
-
-
- //Shutup if it is asked (with fade-out)
- if(shutup != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE tmp =
- (SOUND_BUFFER_SIZE - i) / (REALTYPE) SOUND_BUFFER_SIZE;
- outl[i] *= tmp;
- outr[i] *= tmp;
- }
- ShutUp();
- }
-
- //update the LFO's time
- LFOParams::time++;
-
- if(HDDRecorder.recording())
- HDDRecorder.recordbuffer(outl, outr);
- dump.inctick();
-}
-
-void Master::GetAudioOutSamples(int nsamples,
- int samplerate,
- REALTYPE *outl,
- REALTYPE *outr)
-{
- if(ksoundbuffersample == -1) { //first time
- AudioOut(&audiooutl[0], &audiooutr[0]);
- ksoundbuffersample = 0;
- }
-
-
- if(samplerate == SAMPLE_RATE) { //no resample
- int ksample = 0;
- while(ksample < nsamples) {
- outl[ksample] = audiooutl[ksoundbuffersample];
- outr[ksample] = audiooutr[ksoundbuffersample];
-
- ksample++;
- ksoundbuffersample++;
- if(ksoundbuffersample >= SOUND_BUFFER_SIZE) {
- AudioOut(&audiooutl[0], &audiooutr[0]);
- ksoundbuffersample = 0;
- }
- }
- }
- else { //Resample
- int ksample = 0;
- REALTYPE srinc = SAMPLE_RATE / (REALTYPE)samplerate;
-
- while(ksample < nsamples) {
- if(ksoundbuffersample != 0) {
- outl[ksample] = audiooutl[ksoundbuffersample]
- * ksoundbuffersamplelow
- + audiooutl[ksoundbuffersample
- - 1] * (1.0 - ksoundbuffersamplelow);
- outr[ksample] = audiooutr[ksoundbuffersample]
- * ksoundbuffersamplelow
- + audiooutr[ksoundbuffersample
- - 1] * (1.0 - ksoundbuffersamplelow);
- }
- else {
- outl[ksample] = audiooutl[ksoundbuffersample]
- * ksoundbuffersamplelow
- + oldsamplel * (1.0 - ksoundbuffersamplelow);
- outr[ksample] = audiooutr[ksoundbuffersample]
- * ksoundbuffersamplelow
- + oldsampler * (1.0 - ksoundbuffersamplelow);
- }
-
- ksample++;
-
- ksoundbuffersamplelow += srinc;
- if(ksoundbuffersamplelow >= 1.0) {
- ksoundbuffersample += (int) floor(ksoundbuffersamplelow);
- ksoundbuffersamplelow = ksoundbuffersamplelow - floor(
- ksoundbuffersamplelow);
- }
-
- if(ksoundbuffersample >= SOUND_BUFFER_SIZE) {
- oldsamplel = audiooutl[SOUND_BUFFER_SIZE - 1];
- oldsampler = audiooutr[SOUND_BUFFER_SIZE - 1];
- AudioOut(&audiooutl[0], &audiooutr[0]);
- ksoundbuffersample = 0;
- }
- }
- }
-}
-
-
-Master::~Master()
-{
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++)
- delete part[npart];
- for(int nefx = 0; nefx < NUM_INS_EFX; nefx++)
- delete insefx[nefx];
- for(int nefx = 0; nefx < NUM_SYS_EFX; nefx++)
- delete sysefx[nefx];
-
- delete [] audiooutl;
- delete [] audiooutr;
- delete [] tmpmixl;
- delete [] tmpmixr;
- delete (fft);
-
- pthread_mutex_destroy(&mutex);
-}
-
-
-/*
- * Parameter control
- */
-void Master::setPvolume(char Pvolume_)
-{
- Pvolume = Pvolume_;
- volume = dB2rap((Pvolume - 96.0) / 96.0 * 40.0);
-}
-
-void Master::setPkeyshift(char Pkeyshift_)
-{
- Pkeyshift = Pkeyshift_;
- keyshift = (int)Pkeyshift - 64;
-}
-
-
-void Master::setPsysefxvol(int Ppart, int Pefx, char Pvol)
-{
- Psysefxvol[Pefx][Ppart] = Pvol;
- sysefxvol[Pefx][Ppart] = pow(0.1, (1.0 - Pvol / 96.0) * 2.0);
-}
-
-void Master::setPsysefxsend(int Pefxfrom, int Pefxto, char Pvol)
-{
- Psysefxsend[Pefxfrom][Pefxto] = Pvol;
- sysefxsend[Pefxfrom][Pefxto] = pow(0.1, (1.0 - Pvol / 96.0) * 2.0);
-}
-
-
-/*
- * Panic! (Clean up all parts and effects)
- */
-void Master::ShutUp()
-{
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- part[npart]->cleanup();
- fakepeakpart[npart] = 0;
- }
- for(int nefx = 0; nefx < NUM_INS_EFX; nefx++)
- insefx[nefx]->cleanup();
- for(int nefx = 0; nefx < NUM_SYS_EFX; nefx++)
- sysefx[nefx]->cleanup();
- vuresetpeaks();
- shutup = 0;
-}
-
-
-/*
- * Reset peaks and clear the "cliped" flag (for VU-meter)
- */
-void Master::vuresetpeaks()
-{
- vuoutpeakl = 1e-9;
- vuoutpeakr = 1e-9;
- vumaxoutpeakl = 1e-9;
- vumaxoutpeakr = 1e-9;
- vuclipped = 0;
-}
-
-
-
-void Master::applyparameters()
-{
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++)
- part[npart]->applyparameters();
- ;
-}
-
-void Master::add2XML(XMLwrapper *xml)
-{
- xml->addpar("volume", Pvolume);
- xml->addpar("key_shift", Pkeyshift);
- xml->addparbool("nrpn_receive", ctl.NRPN.receive);
-
- xml->beginbranch("MICROTONAL");
- microtonal.add2XML(xml);
- xml->endbranch();
-
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- xml->beginbranch("PART", npart);
- part[npart]->add2XML(xml);
- xml->endbranch();
- }
-
- xml->beginbranch("SYSTEM_EFFECTS");
- for(int nefx = 0; nefx < NUM_SYS_EFX; nefx++) {
- xml->beginbranch("SYSTEM_EFFECT", nefx);
- xml->beginbranch("EFFECT");
- sysefx[nefx]->add2XML(xml);
- xml->endbranch();
-
- for(int pefx = 0; pefx < NUM_MIDI_PARTS; pefx++) {
- xml->beginbranch("VOLUME", pefx);
- xml->addpar("vol", Psysefxvol[nefx][pefx]);
- xml->endbranch();
- }
-
- for(int tonefx = nefx + 1; tonefx < NUM_SYS_EFX; tonefx++) {
- xml->beginbranch("SENDTO", tonefx);
- xml->addpar("send_vol", Psysefxsend[nefx][tonefx]);
- xml->endbranch();
- }
-
-
- xml->endbranch();
- }
- xml->endbranch();
-
- xml->beginbranch("INSERTION_EFFECTS");
- for(int nefx = 0; nefx < NUM_INS_EFX; nefx++) {
- xml->beginbranch("INSERTION_EFFECT", nefx);
- xml->addpar("part", Pinsparts[nefx]);
-
- xml->beginbranch("EFFECT");
- insefx[nefx]->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
- }
-
- xml->endbranch();
-}
-
-
-int Master::getalldata(char **data)
-{
- XMLwrapper *xml = new XMLwrapper();
-
- xml->beginbranch("MASTER");
-
- pthread_mutex_lock(&mutex);
- add2XML(xml);
- pthread_mutex_unlock(&mutex);
-
- xml->endbranch();
-
- *data = xml->getXMLdata();
- delete (xml);
- return strlen(*data) + 1;
-}
-
-void Master::putalldata(char *data, int size)
-{
- XMLwrapper *xml = new XMLwrapper();
- if(!xml->putXMLdata(data)) {
- delete (xml);
- return;
- }
-
- if(xml->enterbranch("MASTER") == 0)
- return;
-
- pthread_mutex_lock(&mutex);
- getfromXML(xml);
- pthread_mutex_unlock(&mutex);
-
- xml->exitbranch();
-
- delete (xml);
-}
-
-int Master::saveXML(const char *filename)
-{
- XMLwrapper *xml = new XMLwrapper();
-
- xml->beginbranch("MASTER");
- add2XML(xml);
- xml->endbranch();
-
- int result = xml->saveXMLfile(filename);
- delete (xml);
- return result;
-}
-
-
-
-int Master::loadXML(const char *filename)
-{
- XMLwrapper *xml = new XMLwrapper();
- if(xml->loadXMLfile(filename) < 0) {
- delete (xml);
- return -1;
- }
-
- if(xml->enterbranch("MASTER") == 0)
- return -10;
- getfromXML(xml);
- xml->exitbranch();
-
- delete (xml);
- return 0;
-}
-
-void Master::getfromXML(XMLwrapper *xml)
-{
- setPvolume(xml->getpar127("volume", Pvolume));
- setPkeyshift(xml->getpar127("key_shift", Pkeyshift));
- ctl.NRPN.receive = xml->getparbool("nrpn_receive", ctl.NRPN.receive);
-
-
- part[0]->Penabled = 0;
- for(int npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- if(xml->enterbranch("PART", npart) == 0)
- continue;
- part[npart]->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("MICROTONAL")) {
- microtonal.getfromXML(xml);
- xml->exitbranch();
- }
-
- sysefx[0]->changeeffect(0);
- if(xml->enterbranch("SYSTEM_EFFECTS")) {
- for(int nefx = 0; nefx < NUM_SYS_EFX; nefx++) {
- if(xml->enterbranch("SYSTEM_EFFECT", nefx) == 0)
- continue;
- if(xml->enterbranch("EFFECT")) {
- sysefx[nefx]->getfromXML(xml);
- xml->exitbranch();
- }
-
- for(int partefx = 0; partefx < NUM_MIDI_PARTS; partefx++) {
- if(xml->enterbranch("VOLUME", partefx) == 0)
- continue;
- setPsysefxvol(partefx, nefx,
- xml->getpar127("vol", Psysefxvol[partefx][nefx]));
- xml->exitbranch();
- }
-
- for(int tonefx = nefx + 1; tonefx < NUM_SYS_EFX; tonefx++) {
- if(xml->enterbranch("SENDTO", tonefx) == 0)
- continue;
- setPsysefxsend(nefx, tonefx,
- xml->getpar127("send_vol",
- Psysefxsend[nefx][tonefx]));
- xml->exitbranch();
- }
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
-
- if(xml->enterbranch("INSERTION_EFFECTS")) {
- for(int nefx = 0; nefx < NUM_INS_EFX; nefx++) {
- if(xml->enterbranch("INSERTION_EFFECT", nefx) == 0)
- continue;
- Pinsparts[nefx] = xml->getpar("part",
- Pinsparts[nefx],
- -2,
- NUM_MIDI_PARTS);
- if(xml->enterbranch("EFFECT")) {
- insefx[nefx]->getfromXML(xml);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/Master.h b/plugins/zynaddsubfx/src/Misc/Master.h
deleted file mode 100644
index eb47522..0000000
--- a/plugins/zynaddsubfx/src/Misc/Master.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Master.h - It sends Midi Messages to Parts, receives samples from parts,
- process them with system/insertion effects and mix them
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef MASTER_H
-#define MASTER_H
-
-#include "../globals.h"
-#include "../Effects/EffectMgr.h"
-#include "Part.h"
-#include "../Output/Recorder.h"
-#include "Microtonal.h"
-
-#include "Bank.h"
-#include "Dump.h"
-#include "../Seq/Sequencer.h"
-#include "XMLwrapper.h"
-
-extern Dump dump;
-/** It sends Midi Messages to Parts, receives samples from parts,
- * process them with system/insertion effects and mix them */
-class Master
-{
- public:
- /** Constructor*/
- Master();
- /** Destructor*/
- ~Master();
-
- /**Saves all settings to a XML file
- * @return 0 for ok or <0 if there is an error*/
- int saveXML(const char *filename);
-
- /**This adds the parameters to the XML data*/
- void add2XML(XMLwrapper *xml);
-
- void defaults();
-
-
- /**loads all settings from a XML file
- * @return 0 for ok or -1 if there is an error*/
- int loadXML(const char *filename);
- void applyparameters();
-
- void getfromXML(XMLwrapper *xml);
-
- /**get all data to a newly allocated array (used for VST)
- * @return the datasize*/
- int getalldata(char **data);
- /**put all data from the *data array to zynaddsubfx parameters (used for VST)*/
- void putalldata(char *data, int size);
-
-
-
- //Midi IN
- void NoteOn(unsigned char chan,
- unsigned char note,
- unsigned char velocity);
- void NoteOff(unsigned char chan, unsigned char note);
- void SetController(unsigned char chan, unsigned int type, int par);
- //void NRPN...
-
-
- void ShutUp();
- int shutup;
-
- /**Audio Output*/
- void AudioOut(REALTYPE *outl, REALTYPE *outr);
- /**Audio Output (for callback mode). This allows the program to be controled by an external program*/
- void GetAudioOutSamples(int nsamples,
- int samplerate,
- REALTYPE *outl,
- REALTYPE *outr);
-
-
- void partonoff(int npart, int what);
-
- /**parts \todo see if this can be made to be dynamic*/
- Part *part[NUM_MIDI_PARTS];
-
- //parameters
- unsigned char Pvolume;
- unsigned char Pkeyshift;
- unsigned char Psysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
- unsigned char Psysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
-
- //parameters control
- void setPvolume(char Pvolume_);
- void setPkeyshift(char Pkeyshift_);
- void setPsysefxvol(int Ppart, int Pefx, char Pvol);
- void setPsysefxsend(int Pefxfrom, int Pefxto, char Pvol);
-
- //effects
- EffectMgr *sysefx[NUM_SYS_EFX]; //system
- EffectMgr *insefx[NUM_INS_EFX]; //insertion
-// void swapcopyeffects(int what,int type,int neff1,int neff2);
-
- //HDD recorder
- Recorder HDDRecorder;
-
- //part that's apply the insertion effect; -1 to disable
- short int Pinsparts[NUM_INS_EFX];
-
- //peaks for VU-meter
- void vuresetpeaks();
- REALTYPE vuoutpeakl, vuoutpeakr, vumaxoutpeakl, vumaxoutpeakr,
- vurmspeakl, vurmspeakr;
- int vuclipped;
-
- //peaks for part VU-meters
- REALTYPE vuoutpeakpart[NUM_MIDI_PARTS];
- unsigned char fakepeakpart[NUM_MIDI_PARTS]; //this is used to compute the "peak" when the part is disabled
-
- Controller ctl;
- int swaplr; //1 if L and R are swapped
-
- //Sequencer
- Sequencer seq;
-
- //other objects
- Microtonal microtonal;
- Bank bank;
-
- FFTwrapper *fft;
- pthread_mutex_t mutex;
-
- private:
- REALTYPE volume;
- REALTYPE sysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
- REALTYPE sysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
-
- //Temporary mixing samples for part samples which is sent to system effect
- REALTYPE *tmpmixl;
- REALTYPE *tmpmixr;
-
-
- int keyshift;
-
- //Audio Output samples (if it used GetAudioOutSamples - eg. for Jack output; elsewhere is unused)
- REALTYPE *audiooutl;
- REALTYPE *audiooutr;
-
- int ksoundbuffersample; //this is used to know if there is need to call AudioOut by GetAudioOutSamples method
- REALTYPE ksoundbuffersamplelow; //this is used for resampling (eg. if Jack samplerate!= SAMPLE_RATE)
- REALTYPE oldsamplel, oldsampler; //this is used for resampling
-
- //These are called by the NoteOn, NoteOff,SetController (which are from external sources like MIDI, Virtual Keyboard)
- //and are called by internal parts of the program (like sequencer)
- void noteon(unsigned char chan,
- unsigned char note,
- unsigned char velocity);
- void noteoff(unsigned char chan, unsigned char note);
- void setcontroller(unsigned char chan, unsigned int type, int par);
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/Microtonal.cpp b/plugins/zynaddsubfx/src/Misc/Microtonal.cpp
deleted file mode 100644
index cae9aa9..0000000
--- a/plugins/zynaddsubfx/src/Misc/Microtonal.cpp
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Microtonal.cpp - Tuning settings and microtonal capabilities
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <string.h>
-#include "Microtonal.h"
-
-#define MAX_LINE_SIZE 80
-
-Microtonal::Microtonal()
-{
- Pname = new unsigned char[MICROTONAL_MAX_NAME_LEN];
- Pcomment = new unsigned char[MICROTONAL_MAX_NAME_LEN];
- defaults();
-}
-
-void Microtonal::defaults()
-{
- Pinvertupdown = 0;
- Pinvertupdowncenter = 60;
- octavesize = 12;
- Penabled = 0;
- PAnote = 69;
- PAfreq = 440.0;
- Pscaleshift = 64;
-
- Pfirstkey = 0;
- Plastkey = 127;
- Pmiddlenote = 60;
- Pmapsize = 12;
- Pmappingenabled = 0;
-
- for(int i = 0; i < 128; i++)
- Pmapping[i] = i;
-
- for(int i = 0; i < MAX_OCTAVE_SIZE; i++) {
- octave[i].tuning = tmpoctave[i].tuning = pow(
- 2,
- (i % octavesize
- + 1) / 12.0);
- octave[i].type = tmpoctave[i].type = 1;
- octave[i].x1 = tmpoctave[i].x1 = (i % octavesize + 1) * 100;
- octave[i].x2 = tmpoctave[i].x2 = 0;
- }
- octave[11].type = 2;
- octave[11].x1 = 2;
- octave[11].x2 = 1;
- for(int i = 0; i < MICROTONAL_MAX_NAME_LEN; i++) {
- Pname[i] = '\0';
- Pcomment[i] = '\0';
- }
- snprintf((char *) Pname, MICROTONAL_MAX_NAME_LEN, "12tET");
- snprintf((char *) Pcomment,
- MICROTONAL_MAX_NAME_LEN,
- "Equal Temperament 12 notes per octave");
- Pglobalfinedetune = 64;
-}
-
-Microtonal::~Microtonal()
-{
- delete [] Pname;
- delete [] Pcomment;
-}
-
-/*
- * Get the size of the octave
- */
-unsigned char Microtonal::getoctavesize() const
-{
- if(Penabled != 0)
- return octavesize;
- else
- return 12;
-}
-
-/*
- * Get the frequency according the note number
- */
-REALTYPE Microtonal::getnotefreq(int note, int keyshift) const
-{
- // in this function will appears many times things like this:
- // var=(a+b*100)%b
- // I had written this way because if I use var=a%b gives unwanted results when a<0
- // This is the same with divisions.
-
- if((Pinvertupdown != 0) && ((Pmappingenabled == 0) || (Penabled == 0)))
- note = (int) Pinvertupdowncenter * 2 - note;
-
- //compute global fine detune
- REALTYPE globalfinedetunerap = pow(2.0, (Pglobalfinedetune - 64.0) / 1200.0); //-64.0 .. 63.0 cents
-
- if(Penabled == 0)
- return pow(2.0,
- (note - PAnote
- + keyshift) / 12.0) * PAfreq * globalfinedetunerap; //12tET
-
- int scaleshift =
- ((int)Pscaleshift - 64 + (int) octavesize * 100) % octavesize;
-
- //compute the keyshift
- REALTYPE rap_keyshift = 1.0;
- if(keyshift != 0) {
- int kskey = (keyshift + (int)octavesize * 100) % octavesize;
- int ksoct = (keyshift + (int)octavesize * 100) / octavesize - 100;
- rap_keyshift = (kskey == 0) ? (1.0) : (octave[kskey - 1].tuning);
- rap_keyshift *= pow(octave[octavesize - 1].tuning, ksoct);
- }
-
- //if the mapping is enabled
- if(Pmappingenabled != 0) {
- if((note < Pfirstkey) || (note > Plastkey))
- return -1.0;
- //Compute how many mapped keys are from middle note to reference note
- //and find out the proportion between the freq. of middle note and "A" note
- int tmp = PAnote - Pmiddlenote, minus = 0;
- if(tmp < 0) {
- tmp = -tmp;
- minus = 1;
- }
- int deltanote = 0;
- for(int i = 0; i < tmp; i++)
- if(Pmapping[i % Pmapsize] >= 0)
- deltanote++;
- REALTYPE rap_anote_middlenote =
- (deltanote ==
- 0) ? (1.0) : (octave[(deltanote - 1) % octavesize].tuning);
- if(deltanote != 0)
- rap_anote_middlenote *=
- pow(octave[octavesize - 1].tuning, (deltanote - 1) / octavesize);
- if(minus != 0)
- rap_anote_middlenote = 1.0 / rap_anote_middlenote;
-
- //Convert from note (midi) to degree (note from the tunning)
- int degoct =
- (note - (int)Pmiddlenote + (int) Pmapsize
- * 200) / (int)Pmapsize - 200;
- int degkey = (note - Pmiddlenote + (int)Pmapsize * 100) % Pmapsize;
- degkey = Pmapping[degkey];
- if(degkey < 0)
- return -1.0; //this key is not mapped
-
- //invert the keyboard upside-down if it is asked for
- //TODO: do the right way by using Pinvertupdowncenter
- if(Pinvertupdown != 0) {
- degkey = octavesize - degkey - 1;
- degoct = -degoct;
- }
- //compute the frequency of the note
- degkey = degkey + scaleshift;
- degoct += degkey / octavesize;
- degkey %= octavesize;
-
- REALTYPE freq = (degkey == 0) ? (1.0) : octave[degkey - 1].tuning;
- freq *= pow(octave[octavesize - 1].tuning, degoct);
- freq *= PAfreq / rap_anote_middlenote;
- freq *= globalfinedetunerap;
- if(scaleshift != 0)
- freq /= octave[scaleshift - 1].tuning;
- return freq * rap_keyshift;
- }
- else { //if the mapping is disabled
- int nt = note - PAnote + scaleshift;
- int ntkey = (nt + (int)octavesize * 100) % octavesize;
- int ntoct = (nt - ntkey) / octavesize;
-
- REALTYPE oct = octave[octavesize - 1].tuning;
- REALTYPE freq =
- octave[(ntkey + octavesize - 1) % octavesize].tuning *pow(oct,
- ntoct)
- * PAfreq;
- if(ntkey == 0)
- freq /= oct;
- if(scaleshift != 0)
- freq /= octave[scaleshift - 1].tuning;
-// fprintf(stderr,"note=%d freq=%.3f cents=%d\n",note,freq,(int)floor(log(freq/PAfreq)/log(2.0)*1200.0+0.5));
- freq *= globalfinedetunerap;
- return freq * rap_keyshift;
- }
-}
-
-bool Microtonal::operator==(const Microtonal µ) const
-{
- return !(*this != micro);
-}
-
-bool Microtonal::operator!=(const Microtonal µ) const
-{
- //A simple macro to test equality MiCRotonal EQuals (not the perfect
- //approach, but good enough)
-#define MCREQ(x) if(x != micro.x) \
- return true;
-
- //for floats
-#define FMCREQ(x) if(!((x < micro.x + 0.0001) && (x > micro.x - 0.0001))) \
- return true;
-
- MCREQ(Pinvertupdown);
- MCREQ(Pinvertupdowncenter);
- MCREQ(octavesize);
- MCREQ(Penabled);
- MCREQ(PAnote);
- FMCREQ(PAfreq);
- MCREQ(Pscaleshift);
-
- MCREQ(Pfirstkey);
- MCREQ(Plastkey);
- MCREQ(Pmiddlenote);
- MCREQ(Pmapsize);
- MCREQ(Pmappingenabled);
-
- for(int i = 0; i < 128; i++)
- MCREQ(Pmapping[i]);
-
- for(int i = 0; i < octavesize; i++) {
- FMCREQ(octave[i].tuning);
- MCREQ(octave[i].type);
- MCREQ(octave[i].x1);
- MCREQ(octave[i].x2);
- }
- if(strcmp((const char *)this->Pname, (const char *)micro.Pname))
- return true;
- if(strcmp((const char *)this->Pcomment, (const char *)micro.Pcomment))
- return true;
- MCREQ(Pglobalfinedetune);
- return false;
-
- //undefine macros, as they are no longer needed
-#undef MCREQ
-#undef FMCREQ
-}
-
-
-/*
- * Convert a line to tunings; returns -1 if it ok
- */
-int Microtonal::linetotunings(unsigned int nline, const char *line)
-{
- int x1 = -1, x2 = -1, type = -1;
- REALTYPE x = -1.0, tmp, tuning = 1.0;
- if(strstr(line, "/") == NULL) {
- if(strstr(line, ".") == NULL) { // M case (M=M/1)
- sscanf(line, "%d", &x1);
- x2 = 1;
- type = 2; //division
- }
- else { // float number case
- sscanf(line, "%f", &x);
- if(x < 0.000001)
- return 1;
- type = 1; //float type(cents)
- }
- }
- else { // M/N case
- sscanf(line, "%d/%d", &x1, &x2);
- if((x1 < 0) || (x2 < 0))
- return 1;
- if(x2 == 0)
- x2 = 1;
- type = 2; //division
- }
-
- if(x1 <= 0)
- x1 = 1; //not allow zero frequency sounds (consider 0 as 1)
-
- //convert to float if the number are too big
- if((type == 2)
- && ((x1 > (128 * 128 * 128 - 1)) || (x2 > (128 * 128 * 128 - 1)))) {
- type = 1;
- x = ((REALTYPE) x1) / x2;
- }
- switch(type) {
- case 1:
- x1 = (int) floor(x);
- tmp = fmod(x, 1.0);
- x2 = (int) (floor(tmp * 1e6));
- tuning = pow(2.0, x / 1200.0);
- break;
- case 2:
- x = ((REALTYPE)x1) / x2;
- tuning = x;
- break;
- }
-
- tmpoctave[nline].tuning = tuning;
- tmpoctave[nline].type = type;
- tmpoctave[nline].x1 = x1;
- tmpoctave[nline].x2 = x2;
-
- return -1; //ok
-}
-
-/*
- * Convert the text to tunnings
- */
-int Microtonal::texttotunings(const char *text)
-{
- unsigned int i, k = 0, nl = 0;
- char *lin;
- lin = new char[MAX_LINE_SIZE + 1];
- while(k < strlen(text)) {
- for(i = 0; i < MAX_LINE_SIZE; i++) {
- lin[i] = text[k++];
- if(lin[i] < 0x20)
- break;
- }
- lin[i] = '\0';
- if(strlen(lin) == 0)
- continue;
- int err = linetotunings(nl, lin);
- if(err != -1) {
- delete [] lin;
- return nl; //Parse error
- }
- nl++;
- }
- delete [] lin;
- if(nl > MAX_OCTAVE_SIZE)
- nl = MAX_OCTAVE_SIZE;
- if(nl == 0)
- return -2; //the input is empty
- octavesize = nl;
- for(i = 0; i < octavesize; i++) {
- octave[i].tuning = tmpoctave[i].tuning;
- octave[i].type = tmpoctave[i].type;
- octave[i].x1 = tmpoctave[i].x1;
- octave[i].x2 = tmpoctave[i].x2;
- }
- return -1; //ok
-}
-
-/*
- * Convert the text to mapping
- */
-void Microtonal::texttomapping(const char *text)
-{
- unsigned int i, k = 0;
- char *lin;
- lin = new char[MAX_LINE_SIZE + 1];
- for(i = 0; i < 128; i++)
- Pmapping[i] = -1;
- int tx = 0;
- while(k < strlen(text)) {
- for(i = 0; i < MAX_LINE_SIZE; i++) {
- lin[i] = text[k++];
- if(lin[i] < 0x20)
- break;
- }
- lin[i] = '\0';
- if(strlen(lin) == 0)
- continue;
-
- int tmp = 0;
- if(sscanf(lin, "%d", &tmp) == 0)
- tmp = -1;
- if(tmp < -1)
- tmp = -1;
- Pmapping[tx] = tmp;
-
- if((tx++) > 127)
- break;
- }
- delete [] lin;
-
- if(tx == 0)
- tx = 1;
- Pmapsize = tx;
-}
-
-/*
- * Convert tunning to text line
- */
-void Microtonal::tuningtoline(int n, char *line, int maxn)
-{
- if((n > octavesize) || (n > MAX_OCTAVE_SIZE)) {
- line[0] = '\0';
- return;
- }
- if(octave[n].type == 1)
- snprintf(line, maxn, "%d.%06d", octave[n].x1, octave[n].x2);
- if(octave[n].type == 2)
- snprintf(line, maxn, "%d/%d", octave[n].x1, octave[n].x2);
-}
-
-
-int Microtonal::loadline(FILE *file, char *line)
-{
- do {
- if(fgets(line, 500, file) == 0)
- return 1;
- } while(line[0] == '!');
- return 0;
-}
-/*
- * Loads the tunnings from a scl file
- */
-int Microtonal::loadscl(const char *filename)
-{
- FILE *file = fopen(filename, "r");
- char tmp[500];
- fseek(file, 0, SEEK_SET);
- //loads the short description
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- for(int i = 0; i < 500; i++)
- if(tmp[i] < 32)
- tmp[i] = 0;
- snprintf((char *) Pname, MICROTONAL_MAX_NAME_LEN, "%s", tmp);
- snprintf((char *) Pcomment, MICROTONAL_MAX_NAME_LEN, "%s", tmp);
- //loads the number of the notes
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- int nnotes = MAX_OCTAVE_SIZE;
- sscanf(&tmp[0], "%d", &nnotes);
- if(nnotes > MAX_OCTAVE_SIZE)
- return 2;
- //load the tunnings
- for(int nline = 0; nline < nnotes; nline++) {
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- linetotunings(nline, &tmp[0]);
- }
- fclose(file);
-
- octavesize = nnotes;
- for(int i = 0; i < octavesize; i++) {
- octave[i].tuning = tmpoctave[i].tuning;
- octave[i].type = tmpoctave[i].type;
- octave[i].x1 = tmpoctave[i].x1;
- octave[i].x2 = tmpoctave[i].x2;
- }
-
- return 0;
-}
-
-/*
- * Loads the mapping from a kbm file
- */
-int Microtonal::loadkbm(const char *filename)
-{
- FILE *file = fopen(filename, "r");
- int x;
- char tmp[500];
-
- fseek(file, 0, SEEK_SET);
- //loads the mapsize
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- if(sscanf(&tmp[0], "%d", &x) == 0)
- return 2;
- if(x < 1)
- x = 0;
- if(x > 127)
- x = 127; //just in case...
- Pmapsize = x;
- //loads first MIDI note to retune
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- if(sscanf(&tmp[0], "%d", &x) == 0)
- return 2;
- if(x < 1)
- x = 0;
- if(x > 127)
- x = 127; //just in case...
- Pfirstkey = x;
- //loads last MIDI note to retune
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- if(sscanf(&tmp[0], "%d", &x) == 0)
- return 2;
- if(x < 1)
- x = 0;
- if(x > 127)
- x = 127; //just in case...
- Plastkey = x;
- //loads last the middle note where scale fro scale degree=0
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- if(sscanf(&tmp[0], "%d", &x) == 0)
- return 2;
- if(x < 1)
- x = 0;
- if(x > 127)
- x = 127; //just in case...
- Pmiddlenote = x;
- //loads the reference note
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- if(sscanf(&tmp[0], "%d", &x) == 0)
- return 2;
- if(x < 1)
- x = 0;
- if(x > 127)
- x = 127; //just in case...
- PAnote = x;
- //loads the reference freq.
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- REALTYPE tmpPAfreq = 440.0;
- if(sscanf(&tmp[0], "%f", &tmpPAfreq) == 0)
- return 2;
- PAfreq = tmpPAfreq;
-
- //the scale degree(which is the octave) is not loaded, it is obtained by the tunnings with getoctavesize() method
- if(loadline(file, &tmp[0]) != 0)
- return 2;
-
- //load the mappings
- if(Pmapsize != 0) {
- for(int nline = 0; nline < Pmapsize; nline++) {
- if(loadline(file, &tmp[0]) != 0)
- return 2;
- if(sscanf(&tmp[0], "%d", &x) == 0)
- x = -1;
- Pmapping[nline] = x;
- }
- Pmappingenabled = 1;
- }
- else {
- Pmappingenabled = 0;
- Pmapping[0] = 0;
- Pmapsize = 1;
- }
- fclose(file);
-
- return 0;
-}
-
-
-
-void Microtonal::add2XML(XMLwrapper *xml) const
-{
- xml->addparstr("name", (char *) Pname);
- xml->addparstr("comment", (char *) Pcomment);
-
- xml->addparbool("invert_up_down", Pinvertupdown);
- xml->addpar("invert_up_down_center", Pinvertupdowncenter);
-
- xml->addparbool("enabled", Penabled);
- xml->addpar("global_fine_detune", Pglobalfinedetune);
-
- xml->addpar("a_note", PAnote);
- xml->addparreal("a_freq", PAfreq);
-
- if((Penabled == 0) && (xml->minimal))
- return;
-
- xml->beginbranch("SCALE");
- xml->addpar("scale_shift", Pscaleshift);
- xml->addpar("first_key", Pfirstkey);
- xml->addpar("last_key", Plastkey);
- xml->addpar("middle_note", Pmiddlenote);
-
- xml->beginbranch("OCTAVE");
- xml->addpar("octave_size", octavesize);
- for(int i = 0; i < octavesize; i++) {
- xml->beginbranch("DEGREE", i);
- if(octave[i].type == 1)
- xml->addparreal("cents", octave[i].tuning);
- ;
- if(octave[i].type == 2) {
- xml->addpar("numerator", octave[i].x1);
- xml->addpar("denominator", octave[i].x2);
- }
- xml->endbranch();
- }
- xml->endbranch();
-
- xml->beginbranch("KEYBOARD_MAPPING");
- xml->addpar("map_size", Pmapsize);
- xml->addpar("mapping_enabled", Pmappingenabled);
- for(int i = 0; i < Pmapsize; i++) {
- xml->beginbranch("KEYMAP", i);
- xml->addpar("degree", Pmapping[i]);
- xml->endbranch();
- }
-
- xml->endbranch();
- xml->endbranch();
-}
-
-void Microtonal::getfromXML(XMLwrapper *xml)
-{
- xml->getparstr("name", (char *) Pname, MICROTONAL_MAX_NAME_LEN);
- xml->getparstr("comment", (char *) Pcomment, MICROTONAL_MAX_NAME_LEN);
-
- Pinvertupdown = xml->getparbool("invert_up_down", Pinvertupdown);
- Pinvertupdowncenter = xml->getpar127("invert_up_down_center",
- Pinvertupdowncenter);
-
- Penabled = xml->getparbool("enabled", Penabled);
- Pglobalfinedetune = xml->getpar127("global_fine_detune", Pglobalfinedetune);
-
- PAnote = xml->getpar127("a_note", PAnote);
- PAfreq = xml->getparreal("a_freq", PAfreq, 1.0, 10000.0);
-
- if(xml->enterbranch("SCALE")) {
- Pscaleshift = xml->getpar127("scale_shift", Pscaleshift);
- Pfirstkey = xml->getpar127("first_key", Pfirstkey);
- Plastkey = xml->getpar127("last_key", Plastkey);
- Pmiddlenote = xml->getpar127("middle_note", Pmiddlenote);
-
- if(xml->enterbranch("OCTAVE")) {
- octavesize = xml->getpar127("octave_size", octavesize);
- for(int i = 0; i < octavesize; i++) {
- if(xml->enterbranch("DEGREE", i) == 0)
- continue;
- octave[i].x2 = 0;
- octave[i].tuning = xml->getparreal("cents", octave[i].tuning);
- octave[i].x1 = xml->getpar127("numerator", octave[i].x1);
- octave[i].x2 = xml->getpar127("denominator", octave[i].x2);
-
- if(octave[i].x2 != 0)
- octave[i].type = 2;
- else
- octave[i].type = 1;
-
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("KEYBOARD_MAPPING")) {
- Pmapsize = xml->getpar127("map_size", Pmapsize);
- Pmappingenabled = xml->getpar127("mapping_enabled", Pmappingenabled);
- for(int i = 0; i < Pmapsize; i++) {
- if(xml->enterbranch("KEYMAP", i) == 0)
- continue;
- Pmapping[i] = xml->getpar127("degree", Pmapping[i]);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-}
-
-
-
-int Microtonal::saveXML(const char *filename) const
-{
- XMLwrapper *xml = new XMLwrapper();
-
- xml->beginbranch("MICROTONAL");
- add2XML(xml);
- xml->endbranch();
-
- int result = xml->saveXMLfile(filename);
- delete (xml);
- return result;
-}
-
-int Microtonal::loadXML(const char *filename)
-{
- XMLwrapper *xml = new XMLwrapper();
- if(xml->loadXMLfile(filename) < 0) {
- delete (xml);
- return -1;
- }
-
- if(xml->enterbranch("MICROTONAL") == 0)
- return -10;
- getfromXML(xml);
- xml->exitbranch();
-
- delete (xml);
- return 0;
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/Microtonal.h b/plugins/zynaddsubfx/src/Misc/Microtonal.h
deleted file mode 100644
index c7fd7c2..0000000
--- a/plugins/zynaddsubfx/src/Misc/Microtonal.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Microtonal.h - Tuning settings and microtonal capabilities
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef MICROTONAL_H
-#define MICROTONAL_H
-
-#include "../globals.h"
-#include "XMLwrapper.h"
-
-#define MAX_OCTAVE_SIZE 128
-#define MICROTONAL_MAX_NAME_LEN 120
-
-#include <stdio.h>
-
-
-/**Tuning settings and microtonal capabilities*/
-class Microtonal
-{
- public:
- /**Constructor*/
- Microtonal();
- /**Destructor*/
- ~Microtonal();
- void defaults();
- /**Calculates the frequency for a given note
- */
- REALTYPE getnotefreq(int note, int keyshift) const;
-
-
- //Parameters
- /**if the keys are inversed (the pitch is lower to keys from the right direction)*/
- unsigned char Pinvertupdown;
-
- /**the central key of the inversion*/
- unsigned char Pinvertupdowncenter;
-
- /**0 for 12 key temperate scale, 1 for microtonal*/
- unsigned char Penabled;
-
- /**the note of "A" key*/
- unsigned char PAnote;
-
- /**the frequency of the "A" note*/
- REALTYPE PAfreq;
-
- /**if the scale is "tuned" to a note, you can tune to other note*/
- unsigned char Pscaleshift;
-
- //first and last key (to retune)
- unsigned char Pfirstkey;
- unsigned char Plastkey;
-
- /**The middle note where scale degree 0 is mapped to*/
- unsigned char Pmiddlenote;
-
- /**Map size*/
- unsigned char Pmapsize;
-
- /**Mapping ON/OFF*/
- unsigned char Pmappingenabled;
- /**Mapping (keys)*/
- short int Pmapping[128];
-
- /**Fine detune to be applied to all notes*/
- unsigned char Pglobalfinedetune;
-
- // Functions
- /** Return the current octave size*/
- unsigned char getoctavesize() const;
- /**Convert tunning to string*/
- void tuningtoline(int n, char *line, int maxn);
- /**load the tunnings from a .scl file*/
- int loadscl(const char *filename);
- /**load the mapping from .kbm file*/
- int loadkbm(const char *filename);
- /**Load text into the internal tunings
- *
- *\todo better description*/
- int texttotunings(const char *text);
- /**Load text into the internal mappings
- *
- *\todo better description*/
- void texttomapping(const char *text);
-
- /**Name of Microtonal tuning*/
- unsigned char *Pname;
- /**Comment about the tuning*/
- unsigned char *Pcomment;
-
- void add2XML(XMLwrapper *xml) const;
- void getfromXML(XMLwrapper *xml);
- int saveXML(const char *filename) const;
- int loadXML(const char *filename);
-
- //simple operators primarily for debug
- bool operator==(const Microtonal µ) const;
- bool operator!=(const Microtonal µ) const;
-
- private:
- int linetotunings(unsigned int nline, const char *line);
- int loadline(FILE *file, char *line); //loads a line from the text file, while ignoring the lines beggining with "!"
- unsigned char octavesize;
- struct {
- unsigned char type; //1 for cents or 2 for division
-
- // the real tuning (eg. +1.05946 for one halftone)
- // or 2.0 for one octave
- REALTYPE tuning;
-
- //the real tunning is x1/x2
- unsigned int x1, x2;
- } octave[MAX_OCTAVE_SIZE], tmpoctave[MAX_OCTAVE_SIZE];
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/Part.cpp b/plugins/zynaddsubfx/src/Misc/Part.cpp
deleted file mode 100644
index e54c858..0000000
--- a/plugins/zynaddsubfx/src/Misc/Part.cpp
+++ /dev/null
@@ -1,1370 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Part.cpp - Part implementation
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "Part.h"
-#include "Microtonal.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-Part::Part(Microtonal *microtonal_, FFTwrapper *fft_, pthread_mutex_t *mutex_)
-{
- microtonal = microtonal_;
- fft = fft_;
- mutex = mutex_;
- partoutl = new REALTYPE [SOUND_BUFFER_SIZE];
- partoutr = new REALTYPE [SOUND_BUFFER_SIZE];
- tmpoutl = new REALTYPE [SOUND_BUFFER_SIZE];
- tmpoutr = new REALTYPE [SOUND_BUFFER_SIZE];
-
- for(int n = 0; n < NUM_KIT_ITEMS; n++) {
- kit[n].Pname = new unsigned char [PART_MAX_NAME_LEN];
- kit[n].adpars = NULL;
- kit[n].subpars = NULL;
- kit[n].padpars = NULL;
- }
-
- kit[0].adpars = new ADnoteParameters(fft);
- kit[0].subpars = new SUBnoteParameters();
- kit[0].padpars = new PADnoteParameters(fft, mutex);
-// ADPartParameters=kit[0].adpars;
-// SUBPartParameters=kit[0].subpars;
-
- //Part's Insertion Effects init
- for(int nefx = 0; nefx < NUM_PART_EFX; nefx++) {
- partefx[nefx] = new EffectMgr(1, mutex);
- Pefxbypass[nefx] = false;
- }
-
- for(int n = 0; n < NUM_PART_EFX + 1; n++) {
- partfxinputl[n] = new REALTYPE [SOUND_BUFFER_SIZE];
- partfxinputr[n] = new REALTYPE [SOUND_BUFFER_SIZE];
- }
-
- killallnotes = 0;
- oldfreq = -1.0;
-
- int i, j;
- for(i = 0; i < POLIPHONY; i++) {
- partnote[i].status = KEY_OFF;
- partnote[i].note = -1;
- partnote[i].itemsplaying = 0;
- for(j = 0; j < NUM_KIT_ITEMS; j++) {
- partnote[i].kititem[j].adnote = NULL;
- partnote[i].kititem[j].subnote = NULL;
- partnote[i].kititem[j].padnote = NULL;
- }
- partnote[i].time = 0;
- }
- cleanup();
-
- Pname = new unsigned char [PART_MAX_NAME_LEN];
-
- oldvolumel = oldvolumer = 0.5;
- lastnote = -1;
- lastpos = 0; // lastpos will store previously used NoteOn(...)'s pos.
- lastlegatomodevalid = false; // To store previous legatomodevalid value.
-
-
- defaults();
-}
-
-void Part::defaults()
-{
- Penabled = 0;
- Pminkey = 0;
- Pmaxkey = 127;
- Pnoteon = 1;
- Ppolymode = 1;
- Plegatomode = 0;
- setPvolume(96);
- Pkeyshift = 64;
- Prcvchn = 0;
- setPpanning(64);
- Pvelsns = 64;
- Pveloffs = 64;
- Pkeylimit = 15;
- defaultsinstrument();
- ctl.defaults();
-}
-
-void Part::defaultsinstrument()
-{
- ZERO(Pname, PART_MAX_NAME_LEN);
-
- info.Ptype = 0;
- ZERO(info.Pauthor, MAX_INFO_TEXT_SIZE + 1);
- ZERO(info.Pcomments, MAX_INFO_TEXT_SIZE + 1);
-
- Pkitmode = 0;
- Pdrummode = 0;
-
- for(int n = 0; n < NUM_KIT_ITEMS; n++) {
- kit[n].Penabled = 0;
- kit[n].Pmuted = 0;
- kit[n].Pminkey = 0;
- kit[n].Pmaxkey = 127;
- kit[n].Padenabled = 0;
- kit[n].Psubenabled = 0;
- kit[n].Ppadenabled = 0;
- ZERO(kit[n].Pname, PART_MAX_NAME_LEN);
- kit[n].Psendtoparteffect = 0;
- if(n != 0)
- setkititemstatus(n, 0);
- }
- kit[0].Penabled = 1;
- kit[0].Padenabled = 1;
- kit[0].adpars->defaults();
- kit[0].subpars->defaults();
- kit[0].padpars->defaults();
-
- for(int nefx = 0; nefx < NUM_PART_EFX; nefx++) {
- partefx[nefx]->defaults();
- Pefxroute[nefx] = 0; //route to next effect
- }
-}
-
-
-
-/*
- * Cleanup the part
- */
-void Part::cleanup()
-{
- for(int k = 0; k < POLIPHONY; k++)
- KillNotePos(k);
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- partoutl[i] = denormalkillbuf[i];
- partoutr[i] = denormalkillbuf[i];
- tmpoutl[i] = 0.0;
- tmpoutr[i] = 0.0;
- }
- ctl.resetall();
- for(int nefx = 0; nefx < NUM_PART_EFX; nefx++)
- partefx[nefx]->cleanup();
- for(int n = 0; n < NUM_PART_EFX + 1; n++) {
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- partfxinputl[n][i] = denormalkillbuf[i];
- partfxinputr[n][i] = denormalkillbuf[i];
- }
- }
-}
-
-Part::~Part()
-{
- cleanup();
- for(int n = 0; n < NUM_KIT_ITEMS; n++) {
- if(kit[n].adpars != NULL)
- delete (kit[n].adpars);
- if(kit[n].subpars != NULL)
- delete (kit[n].subpars);
- if(kit[n].padpars != NULL)
- delete (kit[n].padpars);
- kit[n].adpars = NULL;
- kit[n].subpars = NULL;
- kit[n].padpars = NULL;
- delete [] kit[n].Pname;
- }
-
- delete [] Pname;
- delete [] partoutl;
- delete [] partoutr;
- delete [] tmpoutl;
- delete [] tmpoutr;
- for(int nefx = 0; nefx < NUM_PART_EFX; nefx++)
- delete (partefx[nefx]);
- for(int n = 0; n < NUM_PART_EFX + 1; n++) {
- delete [] partfxinputl[n];
- delete [] partfxinputr[n];
- }
-}
-
-/*
- * Note On Messages
- */
-void Part::NoteOn(unsigned char note,
- unsigned char velocity,
- int masterkeyshift)
-{
- int i, pos;
-
- // Legato and MonoMem used vars:
- int posb = POLIPHONY - 1; // Just a dummy initial value.
- bool legatomodevalid = false; //true when legato mode is determined applicable.
- bool doinglegato = false; // true when we determined we do a legato note.
- bool ismonofirstnote = false; /*(In Mono/Legato) true when we determined
- no other notes are held down or sustained.*/
- int lastnotecopy = lastnote; //Useful after lastnote has been changed.
-
- if(Pnoteon == 0)
- return;
- if((note < Pminkey) || (note > Pmaxkey))
- return;
-
- // MonoMem stuff:
- if(Ppolymode == 0) { // If Poly is off
- monomemnotes.push_back(note); // Add note to the list.
- monomem[note].velocity = velocity; // Store this note's velocity.
- monomem[note].mkeyshift = masterkeyshift; /* Store masterkeyshift too,
- I'm not sure why though... */
- if((partnote[lastpos].status != KEY_PLAYING)
- && (partnote[lastpos].status != KEY_RELASED_AND_SUSTAINED))
- ismonofirstnote = true; // No other keys are held or sustained.
- }
- else
- // Poly mode is On so just make sure the list is empty.
- if(not monomemnotes.empty())
- monomemnotes.clear();
-
- lastnote = note;
-
- pos = -1;
- for(i = 0; i < POLIPHONY; i++) {
- if(partnote[i].status == KEY_OFF) {
- pos = i;
- break;
- }
- }
-
- if((Plegatomode != 0) && (Pdrummode == 0)) {
- if(Ppolymode != 0) {
- fprintf(
- stderr,
- "ZynAddSubFX WARNING: Poly and Legato modes are both On, that should not happen ! ... Disabling Legato mode ! - (Part.cpp::NoteOn(..))\n");
- Plegatomode = 0;
- }
- else {
- // Legato mode is on and applicable.
- legatomodevalid = true;
- if((not ismonofirstnote) && (lastlegatomodevalid)) {
- // At least one other key is held or sustained, and the
- // previous note was played while in valid legato mode.
- doinglegato = true; // So we'll do a legato note.
- pos = lastpos; // A legato note uses same pos as previous..
- posb = lastposb; // .. same goes for posb.
- }
- else {
- // Legato mode is valid, but this is only a first note.
- for(i = 0; i < POLIPHONY; i++)
- if((partnote[i].status == KEY_PLAYING)
- || (partnote[i].status == KEY_RELASED_AND_SUSTAINED))
- RelaseNotePos(i);
-
- // Set posb
- posb = (pos + 1) % POLIPHONY; //We really want it (if the following fails)
- for(i = 0; i < POLIPHONY; i++)
- if((partnote[i].status == KEY_OFF) && (pos != i)) {
- posb = i;
- break;
- }
- }
- lastposb = posb; // Keep a trace of used posb
- }
- }
- else // Legato mode is either off or non-applicable.
- if(Ppolymode == 0) { //if the mode is 'mono' turn off all other notes
- for(i = 0; i < POLIPHONY; i++)
- if(partnote[i].status == KEY_PLAYING)
- RelaseNotePos(i);
- RelaseSustainedKeys();
- }
- lastlegatomodevalid = legatomodevalid;
-
- if(pos == -1)
- //test
- fprintf(stderr,
- "%s",
- "NOTES TOO MANY (> POLIPHONY) - (Part.cpp::NoteOn(..))\n");
- else {
- //start the note
- partnote[pos].status = KEY_PLAYING;
- partnote[pos].note = note;
- if(legatomodevalid) {
- partnote[posb].status = KEY_PLAYING;
- partnote[posb].note = note;
- }
-
- //this computes the velocity sensing of the part
- REALTYPE vel = VelF(velocity / 127.0, Pvelsns);
-
- //compute the velocity offset
- vel += (Pveloffs - 64.0) / 64.0;
- if(vel < 0.0)
- vel = 0.0;
- else
- if(vel > 1.0)
- vel = 1.0;
-
- //compute the keyshift
- int partkeyshift = (int)Pkeyshift - 64;
- int keyshift = masterkeyshift + partkeyshift;
-
- //initialise note frequency
- REALTYPE notebasefreq;
- if(Pdrummode == 0) {
- notebasefreq = microtonal->getnotefreq(note, keyshift);
- if(notebasefreq < 0.0)
- return; //the key is no mapped
- }
- else
- notebasefreq = 440.0 * pow(2.0, (note - 69.0) / 12.0);
- ;
-
- //Portamento
- if(oldfreq < 1.0)
- oldfreq = notebasefreq; //this is only the first note is played
-
- // For Mono/Legato: Force Portamento Off on first
- // notes. That means it is required that the previous note is
- // still held down or sustained for the Portamento to activate
- // (that's like Legato).
- int portamento = 0;
- if((Ppolymode != 0) || (not ismonofirstnote))
- // I added a third argument to the
- // ctl.initportamento(...) function to be able
- // to tell it if we're doing a legato note.
- portamento = ctl.initportamento(oldfreq, notebasefreq, doinglegato);
-
- if(portamento != 0)
- ctl.portamento.noteusing = pos;
- oldfreq = notebasefreq;
-
- lastpos = pos; // Keep a trace of used pos.
-
- if(doinglegato) {
- // Do Legato note
- if(Pkitmode == 0) { // "normal mode" legato note
- if((kit[0].Padenabled != 0)
- && (partnote[pos].kititem[0].adnote != NULL)
- && (partnote[posb].kititem[0].adnote != NULL)) {
- partnote[pos].kititem[0].adnote->ADlegatonote(notebasefreq,
- vel,
- portamento,
- note,
- true); //'true' is to tell it it's being called from here.
- partnote[posb].kititem[0].adnote->ADlegatonote(notebasefreq,
- vel,
- portamento,
- note,
- true);
- }
-
- if((kit[0].Psubenabled != 0)
- && (partnote[pos].kititem[0].subnote != NULL)
- && (partnote[posb].kititem[0].subnote != NULL)) {
- partnote[pos].kititem[0].subnote->SUBlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- partnote[posb].kititem[0].subnote->SUBlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- }
-
- if((kit[0].Ppadenabled != 0)
- && (partnote[pos].kititem[0].padnote != NULL)
- && (partnote[posb].kititem[0].padnote != NULL)) {
- partnote[pos].kititem[0].padnote->PADlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- partnote[posb].kititem[0].padnote->PADlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- }
- }
- else { // "kit mode" legato note
- int ci = 0;
- for(int item = 0; item < NUM_KIT_ITEMS; item++) {
- if(kit[item].Pmuted != 0)
- continue;
- if((note < kit[item].Pminkey) || (note > kit[item].Pmaxkey))
- continue;
-
- if((lastnotecopy < kit[item].Pminkey)
- || (lastnotecopy > kit[item].Pmaxkey))
- continue; // We will not perform legato across 2 key regions.
-
- partnote[pos].kititem[ci].sendtoparteffect =
- (kit[item].Psendtoparteffect <
- NUM_PART_EFX ? kit[item].Psendtoparteffect : NUM_PART_EFX); //if this parameter is 127 for "unprocessed"
- partnote[posb].kititem[ci].sendtoparteffect =
- (kit[item].Psendtoparteffect <
- NUM_PART_EFX ? kit[item].Psendtoparteffect : NUM_PART_EFX);
-
- if((kit[item].Padenabled != 0) && (kit[item].adpars != NULL)
- && (partnote[pos].kititem[ci].adnote != NULL)
- && (partnote[posb].kititem[ci].adnote != NULL)) {
- partnote[pos].kititem[ci].adnote->ADlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- partnote[posb].kititem[ci].adnote->ADlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- }
- if((kit[item].Psubenabled != 0)
- && (kit[item].subpars != NULL)
- && (partnote[pos].kititem[ci].subnote != NULL)
- && (partnote[posb].kititem[ci].subnote != NULL)) {
- partnote[pos].kititem[ci].subnote->SUBlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- partnote[posb].kititem[ci].subnote->SUBlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- }
- if((kit[item].Ppadenabled != 0)
- && (kit[item].padpars != NULL)
- && (partnote[pos].kititem[ci].padnote != NULL)
- && (partnote[posb].kititem[ci].padnote != NULL)) {
- partnote[pos].kititem[ci].padnote->PADlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- partnote[posb].kititem[ci].padnote->PADlegatonote(
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- }
-
- if((kit[item].adpars != NULL)
- || (kit[item].subpars != NULL)
- || (kit[item].padpars != NULL)) {
- ci++;
- if(((kit[item].Padenabled != 0)
- || (kit[item].Psubenabled != 0)
- || (kit[item].Ppadenabled != 0)) && (Pkitmode == 2))
- break;
- }
- }
- if(ci == 0) {
- // No legato were performed at all, so pretend nothing happened:
- monomemnotes.pop_back(); // Remove last note from the list.
- lastnote = lastnotecopy; // Set lastnote back to previous value.
- }
- }
- return; // Ok, Legato note done, return.
- }
-
- partnote[pos].itemsplaying = 0;
- if(legatomodevalid)
- partnote[posb].itemsplaying = 0;
-
- if(Pkitmode == 0) { //init the notes for the "normal mode"
- partnote[pos].kititem[0].sendtoparteffect = 0;
- if(kit[0].Padenabled != 0)
- partnote[pos].kititem[0].adnote = new ADnote(kit[0].adpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- false);
- if(kit[0].Psubenabled != 0)
- partnote[pos].kititem[0].subnote = new SUBnote(kit[0].subpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- false);
- if(kit[0].Ppadenabled != 0)
- partnote[pos].kititem[0].padnote = new PADnote(kit[0].padpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- false);
- if((kit[0].Padenabled != 0) || (kit[0].Psubenabled != 0)
- || (kit[0].Ppadenabled != 0))
- partnote[pos].itemsplaying++;
-
- // Spawn another note (but silent) if legatomodevalid==true
- if(legatomodevalid) {
- partnote[posb].kititem[0].sendtoparteffect = 0;
- if(kit[0].Padenabled != 0)
- partnote[posb].kititem[0].adnote = new ADnote(kit[0].adpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- true); //true for silent.
- if(kit[0].Psubenabled != 0)
- partnote[posb].kititem[0].subnote = new SUBnote(
- kit[0].subpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- if(kit[0].Ppadenabled != 0)
- partnote[posb].kititem[0].padnote = new PADnote(
- kit[0].padpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- if((kit[0].Padenabled != 0) || (kit[0].Psubenabled != 0)
- || (kit[0].Ppadenabled != 0))
- partnote[posb].itemsplaying++;
- }
- }
- else { //init the notes for the "kit mode"
- for(int item = 0; item < NUM_KIT_ITEMS; item++) {
- if(kit[item].Pmuted != 0)
- continue;
- if((note < kit[item].Pminkey) || (note > kit[item].Pmaxkey))
- continue;
-
- int ci = partnote[pos].itemsplaying; //ci=current item
-
- partnote[pos].kititem[ci].sendtoparteffect =
- (kit[item].Psendtoparteffect < NUM_PART_EFX ?
- kit[item].
- Psendtoparteffect : NUM_PART_EFX); //if this parameter is 127 for "unprocessed"
-
- if((kit[item].adpars != NULL) && ((kit[item].Padenabled) != 0))
- partnote[pos].kititem[ci].adnote = new ADnote(
- kit[item].adpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- false);
-
- if((kit[item].subpars != NULL) && ((kit[item].Psubenabled) != 0))
- partnote[pos].kititem[ci].subnote = new SUBnote(
- kit[item].subpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- false);
-
- if((kit[item].padpars != NULL) && ((kit[item].Ppadenabled) != 0))
- partnote[pos].kititem[ci].padnote = new PADnote(
- kit[item].padpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- false);
-
- // Spawn another note (but silent) if legatomodevalid==true
- if(legatomodevalid) {
- partnote[posb].kititem[ci].sendtoparteffect =
- (kit[item].Psendtoparteffect <
- NUM_PART_EFX ? kit[item].Psendtoparteffect : NUM_PART_EFX); //if this parameter is 127 for "unprocessed"
-
- if((kit[item].adpars != NULL)
- && ((kit[item].Padenabled) != 0))
- partnote[posb].kititem[ci].adnote = new ADnote(
- kit[item].adpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- true); //true for silent.
- if((kit[item].subpars != NULL)
- && ((kit[item].Psubenabled) != 0))
- partnote[posb].kititem[ci].subnote =
- new SUBnote(kit[item].subpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- true);
- if((kit[item].padpars != NULL)
- && ((kit[item].Ppadenabled) != 0))
- partnote[posb].kititem[ci].padnote =
- new PADnote(kit[item].padpars,
- &ctl,
- notebasefreq,
- vel,
- portamento,
- note,
- true);
-
- if((kit[item].adpars != NULL) || (kit[item].subpars != NULL))
- partnote[posb].itemsplaying++;
- }
-
- if((kit[item].adpars != NULL) || (kit[item].subpars != NULL)) {
- partnote[pos].itemsplaying++;
- if(((kit[item].Padenabled != 0)
- || (kit[item].Psubenabled != 0)
- || (kit[item].Ppadenabled != 0))
- && (Pkitmode == 2))
- break;
- }
- }
- }
- }
-
- //this only relase the keys if there is maximum number of keys allowed
- setkeylimit(Pkeylimit);
-}
-
-/*
- * Note Off Messages
- */
-void Part::NoteOff(unsigned char note) //relase the key
-{
- int i;
-
- // This note is released, so we remove it from the list.
- if(not monomemnotes.empty())
- monomemnotes.remove(note);
-
- for(i = POLIPHONY - 1; i >= 0; i--) //first note in, is first out if there are same note multiple times
- if((partnote[i].status == KEY_PLAYING) && (partnote[i].note == note)) {
- if(ctl.sustain.sustain == 0) { //the sustain pedal is not pushed
- if((Ppolymode == 0) && (not monomemnotes.empty()))
- MonoMemRenote(); // To play most recent still held note.
- else
- RelaseNotePos(i);
- /// break;
- }
- else //the sustain pedal is pushed
- partnote[i].status = KEY_RELASED_AND_SUSTAINED;
- }
-}
-
-/*
- * Controllers
- */
-void Part::SetController(unsigned int type, int par)
-{
- switch(type) {
- case C_pitchwheel:
- ctl.setpitchwheel(par);
- break;
- case C_expression:
- ctl.setexpression(par);
- setPvolume(Pvolume); //update the volume
- break;
- case C_portamento:
- ctl.setportamento(par);
- break;
- case C_panning:
- ctl.setpanning(par);
- setPpanning(Ppanning); //update the panning
- break;
- case C_filtercutoff:
- ctl.setfiltercutoff(par);
- break;
- case C_filterq:
- ctl.setfilterq(par);
- break;
- case C_bandwidth:
- ctl.setbandwidth(par);
- break;
- case C_modwheel:
- ctl.setmodwheel(par);
- break;
- case C_fmamp:
- ctl.setfmamp(par);
- break;
- case C_volume:
- ctl.setvolume(par);
- if(ctl.volume.receive != 0)
- volume = ctl.volume.volume;
- else
- setPvolume(Pvolume);
- break;
- case C_sustain:
- ctl.setsustain(par);
- if(ctl.sustain.sustain == 0)
- RelaseSustainedKeys();
- break;
- case C_allsoundsoff:
- AllNotesOff(); //Panic
- break;
- case C_resetallcontrollers:
- ctl.resetall();
- RelaseSustainedKeys();
- if(ctl.volume.receive != 0)
- volume = ctl.volume.volume;
- else
- setPvolume(Pvolume);
- setPvolume(Pvolume); //update the volume
- setPpanning(Ppanning); //update the panning
-
- for(int item = 0; item < NUM_KIT_ITEMS; item++) {
- if(kit[item].adpars == NULL)
- continue;
- kit[item].adpars->GlobalPar.Reson->
- sendcontroller(C_resonance_center, 1.0);
-
- kit[item].adpars->GlobalPar.Reson->
- sendcontroller(C_resonance_bandwidth, 1.0);
- }
- //more update to add here if I add controllers
- break;
- case C_allnotesoff:
- RelaseAllKeys();
- break;
- case C_resonance_center:
- ctl.setresonancecenter(par);
- for(int item = 0; item < NUM_KIT_ITEMS; item++) {
- if(kit[item].adpars == NULL)
- continue;
- kit[item].adpars->GlobalPar.Reson->
- sendcontroller(C_resonance_center, ctl.resonancecenter.relcenter);
- }
- break;
- case C_resonance_bandwidth:
- ctl.setresonancebw(par);
- kit[0].adpars->GlobalPar.Reson->
- sendcontroller(C_resonance_bandwidth, ctl.resonancebandwidth.relbw);
- break;
- }
-}
-/*
- * Relase the sustained keys
- */
-
-void Part::RelaseSustainedKeys()
-{
- // Let's call MonoMemRenote() on some conditions:
- if((Ppolymode == 0) && (not monomemnotes.empty()))
- if(monomemnotes.back() != lastnote) // Sustain controller manipulation would cause repeated same note respawn without this check.
- MonoMemRenote(); // To play most recent still held note.
-
- for(int i = 0; i < POLIPHONY; i++)
- if(partnote[i].status == KEY_RELASED_AND_SUSTAINED)
- RelaseNotePos(i);
-}
-
-/*
- * Relase all keys
- */
-
-void Part::RelaseAllKeys()
-{
- for(int i = 0; i < POLIPHONY; i++)
- if((partnote[i].status != KEY_RELASED)
- && (partnote[i].status != KEY_OFF)) //thanks to Frank Neumann
- RelaseNotePos(i);
- ;
-}
-
-// Call NoteOn(...) with the most recent still held key as new note
-// (Made for Mono/Legato).
-void Part::MonoMemRenote()
-{
- unsigned char mmrtempnote = monomemnotes.back(); // Last list element.
- monomemnotes.pop_back(); // We remove it, will be added again in NoteOn(...).
- if(Pnoteon == 0)
- RelaseNotePos(lastpos);
- else
- NoteOn(mmrtempnote, monomem[mmrtempnote].velocity,
- monomem[mmrtempnote].mkeyshift);
-}
-
-/*
- * Release note at position
- */
-void Part::RelaseNotePos(int pos)
-{
- for(int j = 0; j < NUM_KIT_ITEMS; j++) {
- if(partnote[pos].kititem[j].adnote != NULL)
- if(partnote[pos].kititem[j].adnote)
- partnote[pos].kititem[j].adnote->relasekey();
-
- if(partnote[pos].kititem[j].subnote != NULL)
- if(partnote[pos].kititem[j].subnote != NULL)
- partnote[pos].kititem[j].subnote->relasekey();
-
- if(partnote[pos].kititem[j].padnote != NULL)
- if(partnote[pos].kititem[j].padnote)
- partnote[pos].kititem[j].padnote->relasekey();
- }
- partnote[pos].status = KEY_RELASED;
-}
-
-
-/*
- * Kill note at position
- */
-void Part::KillNotePos(int pos)
-{
- partnote[pos].status = KEY_OFF;
- partnote[pos].note = -1;
- partnote[pos].time = 0;
- partnote[pos].itemsplaying = 0;
-
- for(int j = 0; j < NUM_KIT_ITEMS; j++) {
- if(partnote[pos].kititem[j].adnote != NULL) {
- delete (partnote[pos].kititem[j].adnote);
- partnote[pos].kititem[j].adnote = NULL;
- }
- if(partnote[pos].kititem[j].subnote != NULL) {
- delete (partnote[pos].kititem[j].subnote);
- partnote[pos].kititem[j].subnote = NULL;
- }
- if(partnote[pos].kititem[j].padnote != NULL) {
- delete (partnote[pos].kititem[j].padnote);
- partnote[pos].kititem[j].padnote = NULL;
- }
- }
- if(pos == ctl.portamento.noteusing) {
- ctl.portamento.noteusing = -1;
- ctl.portamento.used = 0;
- }
-}
-
-
-/*
- * Set Part's key limit
- */
-void Part::setkeylimit(unsigned char Pkeylimit)
-{
- this->Pkeylimit = Pkeylimit;
- int keylimit = Pkeylimit;
- if(keylimit == 0)
- keylimit = POLIPHONY - 5;
-
- //release old keys if the number of notes>keylimit
- if(Ppolymode != 0) {
- int notecount = 0;
- for(int i = 0; i < POLIPHONY; i++)
- if((partnote[i].status == KEY_PLAYING)
- || (partnote[i].status == KEY_RELASED_AND_SUSTAINED))
- notecount++;
- ;
- int oldestnotepos = -1, maxtime = 0;
- if(notecount > keylimit) { //find out the oldest note
- for(int i = 0; i < POLIPHONY; i++) {
- if(((partnote[i].status == KEY_PLAYING)
- || (partnote[i].status == KEY_RELASED_AND_SUSTAINED))
- && (partnote[i].time > maxtime)) {
- maxtime = partnote[i].time;
- oldestnotepos = i;
- }
- }
- }
- if(oldestnotepos != -1)
- RelaseNotePos(oldestnotepos);
- }
-}
-
-
-/*
- * Prepare all notes to be turned off
- */
-void Part::AllNotesOff()
-{
- killallnotes = 1;
-}
-
-
-/*
- * Compute Part samples and store them in the partoutl[] and partoutr[]
- */
-void Part::ComputePartSmps()
-{
- int i, k;
- int noteplay; //0 if there is nothing activated
- for(int nefx = 0; nefx < NUM_PART_EFX + 1; nefx++) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- partfxinputl[nefx][i] = 0.0;
- partfxinputr[nefx][i] = 0.0;
- }
- }
-
- for(k = 0; k < POLIPHONY; k++) {
- if(partnote[k].status == KEY_OFF)
- continue;
- noteplay = 0;
- partnote[k].time++;
- //get the sampledata of the note and kill it if it's finished
-
- for(int item = 0; item < partnote[k].itemsplaying; item++) {
- int sendcurrenttofx = partnote[k].kititem[item].sendtoparteffect;
-
- ADnote *adnote = partnote[k].kititem[item].adnote;
- SUBnote *subnote = partnote[k].kititem[item].subnote;
- PADnote *padnote = partnote[k].kititem[item].padnote;
- //get from the ADnote
- if(adnote != NULL) {
- noteplay++;
- if(adnote->ready != 0)
- adnote->noteout(&tmpoutl[0], &tmpoutr[0]);
- else
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tmpoutl[i] = 0.0;
- tmpoutr[i] = 0.0;
- }
- ;
- if(adnote->finished() != 0) {
- delete (adnote);
- partnote[k].kititem[item].adnote = NULL;
- }
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //add the ADnote to part(mix)
- partfxinputl[sendcurrenttofx][i] += tmpoutl[i];
- partfxinputr[sendcurrenttofx][i] += tmpoutr[i];
- }
- }
- //get from the SUBnote
- if(subnote != NULL) {
- noteplay++;
- if(subnote->ready != 0)
- subnote->noteout(&tmpoutl[0], &tmpoutr[0]);
- else
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tmpoutl[i] = 0.0;
- tmpoutr[i] = 0.0;
- }
- ;
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //add the SUBnote to part(mix)
- partfxinputl[sendcurrenttofx][i] += tmpoutl[i];
- partfxinputr[sendcurrenttofx][i] += tmpoutr[i];
- }
- if(subnote->finished() != 0) {
- delete (subnote);
- partnote[k].kititem[item].subnote = NULL;
- }
- }
- //get from the PADnote
- if(padnote != NULL) {
- noteplay++;
- if(padnote->ready != 0)
- padnote->noteout(&tmpoutl[0], &tmpoutr[0]);
- else
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tmpoutl[i] = 0.0;
- tmpoutr[i] = 0.0;
- }
- ;
- if(padnote->finished() != 0) {
- delete (padnote);
- partnote[k].kititem[item].padnote = NULL;
- }
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //add the PADnote to part(mix)
- partfxinputl[sendcurrenttofx][i] += tmpoutl[i];
- partfxinputr[sendcurrenttofx][i] += tmpoutr[i];
- }
- }
- }
- //Kill note if there is no synth on that note
- if(noteplay == 0)
- KillNotePos(k);
- }
-
-
- //Apply part's effects and mix them
- for(int nefx = 0; nefx < NUM_PART_EFX; nefx++) {
- if(!Pefxbypass[nefx]) {
- partefx[nefx]->out(partfxinputl[nefx], partfxinputr[nefx]);
- if(Pefxroute[nefx] == 2) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- partfxinputl[nefx + 1][i] += partefx[nefx]->efxoutl[i];
- partfxinputr[nefx + 1][i] += partefx[nefx]->efxoutr[i];
- }
- }
- }
- int routeto = ((Pefxroute[nefx] == 0) ? nefx + 1 : NUM_PART_EFX);
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- partfxinputl[routeto][i] += partfxinputl[nefx][i];
- partfxinputr[routeto][i] += partfxinputr[nefx][i];
- }
- }
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- partoutl[i] = partfxinputl[NUM_PART_EFX][i];
- partoutr[i] = partfxinputr[NUM_PART_EFX][i];
- }
-
- //Kill All Notes if killallnotes!=0
- if(killallnotes != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE tmp =
- (SOUND_BUFFER_SIZE - i) / (REALTYPE) SOUND_BUFFER_SIZE;
- partoutl[i] *= tmp;
- partoutr[i] *= tmp;
- tmpoutl[i] = 0.0;
- tmpoutr[i] = 0.0;
- }
- for(int k = 0; k < POLIPHONY; k++)
- KillNotePos(k);
- killallnotes = 0;
- for(int nefx = 0; nefx < NUM_PART_EFX; nefx++)
- partefx[nefx]->cleanup();
- ;
- }
- ctl.updateportamento();
-}
-
-/*
- * Parameter control
- */
-void Part::setPvolume(char Pvolume_)
-{
- Pvolume = Pvolume_;
- volume = dB2rap((Pvolume - 96.0) / 96.0 * 40.0) * ctl.expression.relvolume;
-}
-
-void Part::setPpanning(char Ppanning_)
-{
- Ppanning = Ppanning_;
- panning = Ppanning / 127.0 + ctl.panning.pan;
- if(panning < 0.0)
- panning = 0.0;
- else
- if(panning > 1.0)
- panning = 1.0;
-}
-
-/*
- * Enable or disable a kit item
- */
-void Part::setkititemstatus(int kititem, int Penabled_)
-{
- if((kititem == 0) || (kititem >= NUM_KIT_ITEMS))
- return; //nonexistent kit item and the first kit item is always enabled
- kit[kititem].Penabled = Penabled_;
-
- bool resetallnotes = false;
- if(Penabled_ == 0) {
- if(kit[kititem].adpars != NULL)
- delete (kit[kititem].adpars);
- if(kit[kititem].subpars != NULL)
- delete (kit[kititem].subpars);
- if(kit[kititem].padpars != NULL) {
- delete (kit[kititem].padpars);
- resetallnotes = true;
- }
- kit[kititem].adpars = NULL;
- kit[kititem].subpars = NULL;
- kit[kititem].padpars = NULL;
- kit[kititem].Pname[0] = '\0';
- }
- else {
- if(kit[kititem].adpars == NULL)
- kit[kititem].adpars = new ADnoteParameters(fft);
- if(kit[kititem].subpars == NULL)
- kit[kititem].subpars = new SUBnoteParameters();
- if(kit[kititem].padpars == NULL)
- kit[kititem].padpars = new PADnoteParameters(fft, mutex);
- }
-
- if(resetallnotes)
- for(int k = 0; k < POLIPHONY; k++)
- KillNotePos(k);
-}
-
-
-
-void Part::add2XMLinstrument(XMLwrapper *xml)
-{
- xml->beginbranch("INFO");
- xml->addparstr("name", (char *)Pname);
- xml->addparstr("author", (char *)info.Pauthor);
- xml->addparstr("comments", (char *)info.Pcomments);
- xml->addpar("type", info.Ptype);
- xml->endbranch();
-
-
- xml->beginbranch("INSTRUMENT_KIT");
- xml->addpar("kit_mode", Pkitmode);
- xml->addparbool("drum_mode", Pdrummode);
-
- for(int i = 0; i < NUM_KIT_ITEMS; i++) {
- xml->beginbranch("INSTRUMENT_KIT_ITEM", i);
- xml->addparbool("enabled", kit[i].Penabled);
- if(kit[i].Penabled != 0) {
- xml->addparstr("name", (char *)kit[i].Pname);
-
- xml->addparbool("muted", kit[i].Pmuted);
- xml->addpar("min_key", kit[i].Pminkey);
- xml->addpar("max_key", kit[i].Pmaxkey);
-
- xml->addpar("send_to_instrument_effect", kit[i].Psendtoparteffect);
-
- xml->addparbool("add_enabled", kit[i].Padenabled);
- if((kit[i].Padenabled != 0) && (kit[i].adpars != NULL)) {
- xml->beginbranch("ADD_SYNTH_PARAMETERS");
- kit[i].adpars->add2XML(xml);
- xml->endbranch();
- }
-
- xml->addparbool("sub_enabled", kit[i].Psubenabled);
- if((kit[i].Psubenabled != 0) && (kit[i].subpars != NULL)) {
- xml->beginbranch("SUB_SYNTH_PARAMETERS");
- kit[i].subpars->add2XML(xml);
- xml->endbranch();
- }
-
- xml->addparbool("pad_enabled", kit[i].Ppadenabled);
- if((kit[i].Ppadenabled != 0) && (kit[i].padpars != NULL)) {
- xml->beginbranch("PAD_SYNTH_PARAMETERS");
- kit[i].padpars->add2XML(xml);
- xml->endbranch();
- }
- }
- xml->endbranch();
- }
- xml->endbranch();
-
- xml->beginbranch("INSTRUMENT_EFFECTS");
- for(int nefx = 0; nefx < NUM_PART_EFX; nefx++) {
- xml->beginbranch("INSTRUMENT_EFFECT", nefx);
- xml->beginbranch("EFFECT");
- partefx[nefx]->add2XML(xml);
- xml->endbranch();
-
- xml->addpar("route", Pefxroute[nefx]);
- partefx[nefx]->setdryonly(Pefxroute[nefx] == 2);
- xml->addparbool("bypass", Pefxbypass[nefx]);
- xml->endbranch();
- }
- xml->endbranch();
-}
-
-
-void Part::add2XML(XMLwrapper *xml)
-{
- //parameters
- xml->addparbool("enabled", Penabled);
- if((Penabled == 0) && (xml->minimal))
- return;
-
- xml->addpar("volume", Pvolume);
- xml->addpar("panning", Ppanning);
-
- xml->addpar("min_key", Pminkey);
- xml->addpar("max_key", Pmaxkey);
- xml->addpar("key_shift", Pkeyshift);
- xml->addpar("rcv_chn", Prcvchn);
-
- xml->addpar("velocity_sensing", Pvelsns);
- xml->addpar("velocity_offset", Pveloffs);
-
- xml->addparbool("note_on", Pnoteon);
- xml->addparbool("poly_mode", Ppolymode);
- xml->addpar("legato_mode", Plegatomode);
- xml->addpar("key_limit", Pkeylimit);
-
- xml->beginbranch("INSTRUMENT");
- add2XMLinstrument(xml);
- xml->endbranch();
-
- xml->beginbranch("CONTROLLER");
- ctl.add2XML(xml);
- xml->endbranch();
-}
-
-int Part::saveXML(char *filename)
-{
- XMLwrapper *xml;
- xml = new XMLwrapper();
-
- xml->beginbranch("INSTRUMENT");
- add2XMLinstrument(xml);
- xml->endbranch();
-
- int result = xml->saveXMLfile(filename);
- delete (xml);
- return result;
-}
-
-int Part::loadXMLinstrument(const char *filename)
-{
- XMLwrapper *xml = new XMLwrapper();
- if(xml->loadXMLfile(filename) < 0) {
- delete (xml);
- return -1;
- }
-
- if(xml->enterbranch("INSTRUMENT") == 0)
- return -10;
- getfromXMLinstrument(xml);
- xml->exitbranch();
-
- delete (xml);
- return 0;
-}
-
-
-void Part::applyparameters()
-{
- for(int n = 0; n < NUM_KIT_ITEMS; n++)
- if((kit[n].padpars != NULL) && (kit[n].Ppadenabled != 0))
- kit[n].padpars->applyparameters(true);
- ;
-}
-
-void Part::getfromXMLinstrument(XMLwrapper *xml)
-{
- if(xml->enterbranch("INFO")) {
- xml->getparstr("name", (char *)Pname, PART_MAX_NAME_LEN);
- xml->getparstr("author", (char *)info.Pauthor, MAX_INFO_TEXT_SIZE);
- xml->getparstr("comments", (char *)info.Pcomments, MAX_INFO_TEXT_SIZE);
- info.Ptype = xml->getpar("type", info.Ptype, 0, 16);
-
- xml->exitbranch();
- }
-
- if(xml->enterbranch("INSTRUMENT_KIT")) {
- Pkitmode = xml->getpar127("kit_mode", Pkitmode);
- Pdrummode = xml->getparbool("drum_mode", Pdrummode);
-
- setkititemstatus(0, 0);
- for(int i = 0; i < NUM_KIT_ITEMS; i++) {
- if(xml->enterbranch("INSTRUMENT_KIT_ITEM", i) == 0)
- continue;
- setkititemstatus(i, xml->getparbool("enabled", kit[i].Penabled));
- if(kit[i].Penabled == 0) {
- xml->exitbranch();
- continue;
- }
-
- xml->getparstr("name", (char *)kit[i].Pname, PART_MAX_NAME_LEN);
-
- kit[i].Pmuted = xml->getparbool("muted", kit[i].Pmuted);
- kit[i].Pminkey = xml->getpar127("min_key", kit[i].Pminkey);
- kit[i].Pmaxkey = xml->getpar127("max_key", kit[i].Pmaxkey);
-
- kit[i].Psendtoparteffect = xml->getpar127(
- "send_to_instrument_effect",
- kit[i].Psendtoparteffect);
-
- kit[i].Padenabled = xml->getparbool("add_enabled",
- kit[i].Padenabled);
- if(xml->enterbranch("ADD_SYNTH_PARAMETERS")) {
- kit[i].adpars->getfromXML(xml);
- xml->exitbranch();
- }
-
- kit[i].Psubenabled = xml->getparbool("sub_enabled",
- kit[i].Psubenabled);
- if(xml->enterbranch("SUB_SYNTH_PARAMETERS")) {
- kit[i].subpars->getfromXML(xml);
- xml->exitbranch();
- }
-
- kit[i].Ppadenabled = xml->getparbool("pad_enabled",
- kit[i].Ppadenabled);
- if(xml->enterbranch("PAD_SYNTH_PARAMETERS")) {
- kit[i].padpars->getfromXML(xml);
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
-
-
- if(xml->enterbranch("INSTRUMENT_EFFECTS")) {
- for(int nefx = 0; nefx < NUM_PART_EFX; nefx++) {
- if(xml->enterbranch("INSTRUMENT_EFFECT", nefx) == 0)
- continue;
- if(xml->enterbranch("EFFECT")) {
- partefx[nefx]->getfromXML(xml);
- xml->exitbranch();
- }
-
- Pefxroute[nefx] = xml->getpar("route",
- Pefxroute[nefx],
- 0,
- NUM_PART_EFX);
- partefx[nefx]->setdryonly(Pefxroute[nefx] == 2);
- Pefxbypass[nefx] = xml->getparbool("bypass", Pefxbypass[nefx]);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-}
-
-void Part::getfromXML(XMLwrapper *xml)
-{
- Penabled = xml->getparbool("enabled", Penabled);
-
- setPvolume(xml->getpar127("volume", Pvolume));
- setPpanning(xml->getpar127("panning", Ppanning));
-
- Pminkey = xml->getpar127("min_key", Pminkey);
- Pmaxkey = xml->getpar127("max_key", Pmaxkey);
- Pkeyshift = xml->getpar127("key_shift", Pkeyshift);
- Prcvchn = xml->getpar127("rcv_chn", Prcvchn);
-
- Pvelsns = xml->getpar127("velocity_sensing", Pvelsns);
- Pveloffs = xml->getpar127("velocity_offset", Pveloffs);
-
- Pnoteon = xml->getparbool("note_on", Pnoteon);
- Ppolymode = xml->getparbool("poly_mode", Ppolymode);
- Plegatomode = xml->getparbool("legato_mode", Plegatomode); //older versions
- if(!Plegatomode)
- Plegatomode = xml->getpar127("legato_mode", Plegatomode);
- Pkeylimit = xml->getpar127("key_limit", Pkeylimit);
-
-
- if(xml->enterbranch("INSTRUMENT")) {
- getfromXMLinstrument(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("CONTROLLER")) {
- ctl.getfromXML(xml);
- xml->exitbranch();
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/Part.h b/plugins/zynaddsubfx/src/Misc/Part.h
deleted file mode 100644
index 66169e3..0000000
--- a/plugins/zynaddsubfx/src/Misc/Part.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Part.h - Part implementation
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef PART_H
-#define PART_H
-
-#define MAX_INFO_TEXT_SIZE 1000
-
-#include "../globals.h"
-#include "../Params/ADnoteParameters.h"
-#include "../Params/SUBnoteParameters.h"
-#include "../Params/PADnoteParameters.h"
-#include "../Synth/ADnote.h"
-#include "../Synth/SUBnote.h"
-#include "../Synth/PADnote.h"
-#include "../Params/Controller.h"
-#include "../Misc/Microtonal.h"
-#include "../DSP/FFTwrapper.h"
-#include "../Effects/EffectMgr.h"
-#include "XMLwrapper.h"
-
-#include <list> // For the monomemnotes list.
-
-/** Part implementation*/
-class Part
-{
- public:
- /**Constructor
- * @param microtonal_ Pointer to the microtonal object
- * @param fft_ Pointer to the FFTwrapper
- * @param mutex_ Pointer to the master pthread_mutex_t*/
- Part(Microtonal *microtonal_, FFTwrapper *fft_, pthread_mutex_t *mutex_);
- /**Destructor*/
- ~Part();
-
- // Midi commands implemented
- void NoteOn(unsigned char note,
- unsigned char velocity,
- int masterkeyshift);
- void NoteOff(unsigned char note);
- void AllNotesOff(); //panic
- void SetController(unsigned int type, int par);
- void RelaseSustainedKeys(); //this is called when the sustain pedal is relased
- void RelaseAllKeys(); //this is called on AllNotesOff controller
-
- /* The synthesizer part output */
- void ComputePartSmps(); //Part output
-
- //instrumentonly: 0 - save all, 1 - save only instrumnet, 2 - save only instrument without the name(used in bank)
-
-
- //saves the instrument settings to a XML file
- //returns 0 for ok or <0 if there is an error
- int saveXML(char *filename);
- int loadXMLinstrument(const char *filename);
-
- void add2XML(XMLwrapper *xml);
- void add2XMLinstrument(XMLwrapper *xml);
-
- void defaults();
- void defaultsinstrument();
-
- void applyparameters();
-
- void getfromXML(XMLwrapper *xml);
- void getfromXMLinstrument(XMLwrapper *xml);
-
- void cleanup();
-
-// ADnoteParameters *ADPartParameters;
-// SUBnoteParameters *SUBPartParameters;
-
- //the part's kit
- struct {
- unsigned char Penabled, Pmuted, Pminkey, Pmaxkey;
- unsigned char *Pname;
- unsigned char Padenabled, Psubenabled, Ppadenabled;
- unsigned char Psendtoparteffect;
- ADnoteParameters *adpars;
- SUBnoteParameters *subpars;
- PADnoteParameters *padpars;
- } kit[NUM_KIT_ITEMS];
-
-
- //Part parameters
- void setkeylimit(unsigned char Pkeylimit);
- void setkititemstatus(int kititem, int Penabled_);
-
- unsigned char Penabled; /**<if the part is enabled*/
- unsigned char Pvolume; /**<part volume*/
- unsigned char Pminkey; /**<the minimum key that the part receives noteon messages*/
- unsigned char Pmaxkey; //the maximum key that the part receives noteon messages
- void setPvolume(char Pvolume);
- unsigned char Pkeyshift; //Part keyshift
- unsigned char Prcvchn; //from what midi channel it receive commnads
- unsigned char Ppanning; //part panning
- void setPpanning(char Ppanning);
- unsigned char Pvelsns; //velocity sensing (amplitude velocity scale)
- unsigned char Pveloffs; //velocity offset
- unsigned char Pnoteon; //if the part receives NoteOn messages
- unsigned char Pkitmode; //if the kitmode is enabled
- unsigned char Pdrummode; //if all keys are mapped and the system is 12tET (used for drums)
-
- unsigned char Ppolymode; //Part mode - 0=monophonic , 1=polyphonic
- unsigned char Plegatomode; // 0=normal, 1=legato
- unsigned char Pkeylimit; //how many keys are alowed to be played same time (0=off), the older will be relased
-
- unsigned char *Pname; //name of the instrument
- struct { //instrument additional information
- unsigned char Ptype;
- unsigned char Pauthor[MAX_INFO_TEXT_SIZE + 1];
- unsigned char Pcomments[MAX_INFO_TEXT_SIZE + 1];
- } info;
-
-
- REALTYPE *partoutl; //Left channel output of the part
- REALTYPE *partoutr; //Right channel output of the part
-
- REALTYPE *partfxinputl[NUM_PART_EFX + 1],
- *partfxinputr[NUM_PART_EFX + 1]; //Left and right signal that pass thru part effects; partfxinput l/r [NUM_PART_EFX] is for "no effect" buffer
-
- enum NoteStatus {
- KEY_OFF, KEY_PLAYING, KEY_RELASED_AND_SUSTAINED, KEY_RELASED
- };
-
- REALTYPE volume, oldvolumel, oldvolumer; //this is applied by Master
- REALTYPE panning; //this is applied by Master, too
-
- Controller ctl; //Part controllers
-
- EffectMgr *partefx[NUM_PART_EFX]; //insertion part effects (they are part of the instrument)
- unsigned char Pefxroute[NUM_PART_EFX]; //how the effect's output is routed(to next effect/to out)
- bool Pefxbypass[NUM_PART_EFX]; //if the effects are bypassed
-
-
- pthread_mutex_t *mutex;
-
- int lastnote;
-
- private:
- void KillNotePos(int pos);
- void RelaseNotePos(int pos);
- void MonoMemRenote(); // MonoMem stuff.
-
- int killallnotes; //is set to 1 if I want to kill all notes
-
- struct PartNotes {
- NoteStatus status;
- int note; //if there is no note playing, the "note"=-1
- int itemsplaying;
- struct {
- ADnote *adnote;
- SUBnote *subnote;
- PADnote *padnote;
- int sendtoparteffect;
- } kititem[NUM_KIT_ITEMS];
- int time;
- };
-
- int lastpos, lastposb; // To keep track of previously used pos and posb.
- bool lastlegatomodevalid; // To keep track of previous legatomodevalid.
-
- // MonoMem stuff
- std::list<unsigned char> monomemnotes; // A list to remember held notes.
- struct {
- unsigned char velocity;
- int mkeyshift; // I'm not sure masterkeyshift should be remembered.
- } monomem[256]; /* 256 is to cover all possible note values.
- monomem[] is used in conjunction with the list to
- store the velocity and masterkeyshift values of a
- given note (the list only store note values).
- For example 'monomem[note].velocity' would be the
- velocity value of the note 'note'.
- */
-
- PartNotes partnote[POLIPHONY];
-
- REALTYPE *tmpoutl; //used to get the note
- REALTYPE *tmpoutr;
-
- REALTYPE oldfreq; //this is used for portamento
- Microtonal *microtonal;
- FFTwrapper *fft;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/QtXmlWrapper.cpp b/plugins/zynaddsubfx/src/Misc/QtXmlWrapper.cpp
deleted file mode 100644
index a329e04..0000000
--- a/plugins/zynaddsubfx/src/Misc/QtXmlWrapper.cpp
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- * QtXmlWrapper.cpp - a QtXml based XML backend for ZynAddSubxFX
- *
- * Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-/* File derived from QtXmlWrapper.C: */
-/*
- ZynAddSubFX - a software synthesizer
-
- QtXmlWrapper.C - XML wrapper
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Copyright (C) 2009-2009 Mark McCurry
- Author: Nasca Octavian Paul
- Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <QtXml/QDomDocument>
-#include <QtCore/QDebug>
-#include "QtXmlWrapper.h"
-#include <string>
-#include <sstream>
-#include <cstdarg>
-#include <zlib.h>
-#include "lmmsconfig.h"
-#include "../globals.h"
-#include "Util.h"
-
-
-struct XmlData
-{
- XmlData() :
- m_doc( "ZynAddSubFX-data" )
- {
- }
- QDomDocument m_doc;
- QDomElement m_node;
- QDomElement m_info;
-
- QDomElement addparams( const char *name, unsigned int params, ... );
-} ;
-
-
-
-QtXmlWrapper::QtXmlWrapper() :
- d( new XmlData )
-{
- version.Major = 2;
- version.Minor = 4;
- version.Revision = 1;
-
- minimal = true;
-
- d->m_node = d->m_doc.createElement( "ZynAddSubFX-data" );
- d->m_node.setAttribute( "version-major", QString::number( version.Major ) );
- d->m_node.setAttribute( "version-minor", QString::number( version.Minor ) );
- d->m_node.setAttribute( "version-revision", QString::number( version.Revision ) );
- d->m_node.setAttribute( "ZynAddSubFX-author", "Nasca Octavian Paul" );
- d->m_doc.appendChild( d->m_node );
-
- //make the empty branch that will contain the information parameters
- d->m_info = d->addparams("INFORMATION", 0);
-
- //save zynaddsubfx specifications
- beginbranch("BASE_PARAMETERS");
- addpar("max_midi_parts", NUM_MIDI_PARTS);
- addpar("max_kit_items_per_instrument", NUM_KIT_ITEMS);
-
- addpar("max_system_effects", NUM_SYS_EFX);
- addpar("max_insertion_effects", NUM_INS_EFX);
- addpar("max_instrument_effects", NUM_PART_EFX);
-
- addpar("max_addsynth_voices", NUM_VOICES);
- endbranch();
-}
-
-
-
-
-QtXmlWrapper::~QtXmlWrapper()
-{
- delete d;
-}
-
-
-
-
-void QtXmlWrapper::setPadSynth(bool enabled)
-{
- /**@bug this might create multiple nodes when only one is needed*/
- QDomElement oldNode = d->m_node;
- d->m_node = d->m_info;
- //Info storing
- addparbool("PADsynth_used", enabled);
- d->m_node = oldNode;
-}
-
-QDomElement findElement( QDomElement root, const QString & tagname, const QString & attrname,
- const QString & attrval )
-{
- QDomNodeList list = root.elementsByTagName( tagname );
- for( int i = 0; i < list.size(); ++i )
- {
- QDomNode n = list.at( i );
- if( n.isElement() )
- {
- QDomElement e = n.toElement();
- if( e.hasAttribute( attrname ) && e.attribute( attrname ) == attrval )
- {
- return e;
- }
- }
- }
-
- return QDomElement();
-}
-
-
-
-
-bool QtXmlWrapper::hasPadSynth() const
-{
- /**Right now this has a copied implementation of setparbool, so this should
- * be reworked as XMLwrapper evolves*/
- QDomElement tmp = d->m_doc.elementsByTagName( "INFORMATION" ).at( 0 ).toElement();
- QDomElement parameter = findElement( tmp, "par_bool", "name", "PADsynth_used" );
- if( !parameter.isNull() )
- {
- const QString val = parameter.attribute( "value" ).toLower();
- return val[0] == 'y';
- }
- return false;
-}
-
-
-/* SAVE XML members */
-
-int QtXmlWrapper::saveXMLfile(const std::string &filename) const
-{
- char *xmldata = getXMLdata();
- if(xmldata == NULL)
- return -2;
-
- int compression = config.cfg.GzipCompression;
- int result = dosavefile(filename.c_str(), compression, xmldata);
-
- delete[] xmldata;
- return result;
-}
-
-
-char *QtXmlWrapper::getXMLdata() const
-{
- QString xml = d->m_doc.toString( 1 );
- return qstrdup( xml.toUtf8().constData() );
-}
-
-
-int QtXmlWrapper::dosavefile(const char *filename,
- int compression,
- const char *xmldata) const
-{
- if(compression == 0) {
- FILE *file;
- file = fopen(filename, "w");
- if(file == NULL)
- return -1;
- fputs(xmldata, file);
- fclose(file);
- }
- else {
- if(compression > 9)
- compression = 9;
- if(compression < 1)
- compression = 1;
- char options[10];
- snprintf(options, 10, "wb%d", compression);
-
- gzFile gzfile;
- gzfile = gzopen(filename, options);
- if(gzfile == NULL)
- return -1;
- gzputs(gzfile, xmldata);
- gzclose(gzfile);
- }
-
- return 0;
-}
-
-
-
-void QtXmlWrapper::addpar(const std::string &name, int val)
-{
- d->addparams("par", 2, "name", name.c_str(), "value", stringFrom<int>(
- val).c_str());
-}
-
-void QtXmlWrapper::addparreal(const std::string &name, REALTYPE val)
-{
- d->addparams("par_real", 2, "name", name.c_str(), "value",
- stringFrom<REALTYPE>(val).c_str());
-}
-
-void QtXmlWrapper::addparbool(const std::string &name, int val)
-{
- if(val != 0)
- d->addparams("par_bool", 2, "name", name.c_str(), "value", "yes");
- else
- d->addparams("par_bool", 2, "name", name.c_str(), "value", "no");
-}
-
-void QtXmlWrapper::addparstr(const std::string &name, const std::string &val)
-{
- QDomElement e = d->m_doc.createElement( "string" );
- e.setAttribute( "name", name.c_str() );
- e.appendChild( d->m_doc.createTextNode( val.c_str() ) );
- d->m_node.appendChild( e );
-}
-
-
-void QtXmlWrapper::beginbranch(const std::string &name)
-{
- d->m_node = d->addparams(name.c_str(), 0);
-}
-
-void QtXmlWrapper::beginbranch(const std::string &name, int id)
-{
- d->m_node = d->addparams(name.c_str(), 1, "id", stringFrom<int>(id).c_str());
-}
-
-void QtXmlWrapper::endbranch()
-{
- d->m_node = d->m_node.parentNode().toElement();
-}
-
-
-
-/* LOAD XML members */
-
-int QtXmlWrapper::loadXMLfile(const std::string &filename)
-{
- const char *xmldata = doloadfile(filename.c_str());
- if(xmldata == NULL)
- {
- qDebug() << "QtXmlWrapper::loadXMLfile(): empty data";
- return -1; //the file could not be loaded or uncompressed
- }
-
- QByteArray b( xmldata );
- while( !b.isEmpty() && b[0] != '<' )
- {
- // remove first blank line
- b.remove( 0, 1 );
- }
-
- if( !d->m_doc.setContent( b ) )
- {
- qDebug() << "QtXmlWrapper::loadXMLfile(): could not set document content";
- delete[] xmldata;
- return -2;
- }
- delete[] xmldata;
-
- d->m_node = d->m_doc.elementsByTagName( "ZynAddSubFX-data" ).at( 0 ).toElement();
- if( d->m_node.isNull() || !d->m_node.isElement() )
- {
- qDebug() << "QtXmlWrapper::loadXMLfile(): missing root node";
- return -3; //the XML doesnt embbed zynaddsubfx data
- }
- QDomElement root = d->m_node.toElement();
- //fetch version information
- version.Major = root.attribute( "version-major").toInt();
- version.Minor = root.attribute( "version-minor").toInt();
- version.Revision = root.attribute( "version-revision").toInt();
-
- return 0;
-}
-
-
-char *QtXmlWrapper::doloadfile(const std::string &filename) const
-{
- char *xmldata = NULL;
- gzFile gzfile = gzopen(filename.c_str(), "rb");
-
- if(gzfile != NULL) { //The possibly compressed file opened
- std::stringstream strBuf; //reading stream
- const int bufSize = 500; //fetch size
- char fetchBuf[bufSize + 1]; //fetch buffer
- int read = 0; //chars read in last fetch
-
- fetchBuf[bufSize] = 0; //force null termination
-
- while(bufSize == (read = gzread(gzfile, fetchBuf, bufSize)))
- strBuf << fetchBuf;
-
- fetchBuf[read] = 0; //Truncate last partial read
- strBuf << fetchBuf;
-
- gzclose(gzfile);
-
- //Place data in output format
- std::string tmp = strBuf.str();
- xmldata = new char[tmp.size() + 1];
- strncpy(xmldata, tmp.c_str(), tmp.size() + 1);
- }
-
- return xmldata;
-}
-
-bool QtXmlWrapper::putXMLdata(const char *xmldata)
-{
- d->m_doc.setContent( QString::fromUtf8( xmldata ) );
-
- d->m_node = d->m_doc.elementsByTagName( "ZynAddSubFX-data" ).at( 0 ).toElement();
- if( d->m_node.isNull() )
- {
- return false;
- }
-
- return true;
-}
-
-
-
-int QtXmlWrapper::enterbranch(const std::string &name)
-{
- QDomElement tmp = d->m_node.firstChildElement( name.c_str() );
- if( tmp.isNull() )
- {
- return 0;
- }
-
- d->m_node = tmp;
-
- return 1;
-}
-
-int QtXmlWrapper::enterbranch(const std::string &name, int id)
-{
- QDomElement tmp = findElement( d->m_node, name.c_str(),
- "id", QString::number( id ) );
- if( tmp.isNull() )
- {
- return 0;
- }
-
- d->m_node = tmp;
-
- return 1;
-}
-
-
-void QtXmlWrapper::exitbranch()
-{
- d->m_node = d->m_node.parentNode().toElement();
-}
-
-
-int QtXmlWrapper::getbranchid(int min, int max) const
-{
- if( !d->m_node.isElement() )
- {
- return min;
- }
- QDomElement tmp = d->m_node.toElement();
- if( !tmp.hasAttribute( "id" ) )
- {
- return min;
- }
- int id = tmp.attribute( "id" ).toInt();
- if((min == 0) && (max == 0))
- return id;
-
- if(id < min)
- id = min;
- else
- if(id > max)
- id = max;
-
- return id;
-}
-
-int QtXmlWrapper::getpar(const std::string &name, int defaultpar, int min,
- int max) const
-{
- QDomElement tmp = findElement( d->m_node, "par", "name", name.c_str() );
- if( tmp.isNull() || !tmp.hasAttribute( "value" ) )
- {
- return defaultpar;
- }
-
- int val = tmp.attribute( "value" ).toInt();
- if(val < min)
- val = min;
- else
- if(val > max)
- val = max;
-
- return val;
-}
-
-int QtXmlWrapper::getpar127(const std::string &name, int defaultpar) const
-{
- return getpar(name, defaultpar, 0, 127);
-}
-
-int QtXmlWrapper::getparbool(const std::string &name, int defaultpar) const
-{
- QDomElement tmp = findElement( d->m_node, "par_bool", "name", name.c_str() );
- if( tmp.isNull() || !tmp.hasAttribute( "value" ) )
- {
- return defaultpar;
- }
-
- const QString val = tmp.attribute( "value" ).toLower();
- if( val[0] == 'y' )
- {
- return 1;
- }
- return 0;
-}
-
-void QtXmlWrapper::getparstr(const std::string &name, char *par, int maxstrlen) const
-{
- ZERO(par, maxstrlen);
- QDomNode tmp = findElement( d->m_node, "string", "name", name.c_str() );
- if( tmp.isNull() || !tmp.hasChildNodes() )
- {
- return;
- }
-
- tmp = tmp.firstChild();
- if( tmp.nodeType() == QDomNode::ElementNode )
- {
- snprintf(par, maxstrlen, "%s", tmp.toElement().tagName().toUtf8().constData() );
- return;
- }
- if( tmp.nodeType() == QDomNode::TextNode )
- {
- snprintf(par, maxstrlen, "%s", tmp.toText().data().toUtf8().constData() );
- return;
- }
-}
-
-std::string QtXmlWrapper::getparstr(const std::string &name,
- const std::string &defaultpar) const
-{
- QDomNode tmp = findElement( d->m_node, "string", "name", name.c_str() );
- if( tmp.isNull() || !tmp.hasChildNodes() )
- {
- return defaultpar;
- }
-
- tmp = tmp.firstChild();
- if( tmp.nodeType() == QDomNode::ElementNode && !tmp.toElement().tagName().isEmpty() )
- {
- return tmp.toElement().tagName().toUtf8().constData();
- }
- if( tmp.nodeType() == QDomNode::TextNode && !tmp.toText().data().isEmpty() )
- {
- return tmp.toText().data().toUtf8().constData();
- }
-
- return defaultpar;
-}
-
-REALTYPE QtXmlWrapper::getparreal(const char *name, REALTYPE defaultpar) const
-{
- QDomElement tmp = findElement( d->m_node, "par_real", "name", name );
- if( tmp.isNull() || !tmp.hasAttribute( "value" ) )
- {
- return defaultpar;
- }
-
- return tmp.attribute( "value" ).toFloat();
-}
-
-REALTYPE QtXmlWrapper::getparreal(const char *name,
- REALTYPE defaultpar,
- REALTYPE min,
- REALTYPE max) const
-{
- REALTYPE result = getparreal(name, defaultpar);
-
- if(result < min)
- result = min;
- else
- if(result > max)
- result = max;
- return result;
-}
-
-
-/** Private members **/
-
-QDomElement XmlData::addparams(const char *name, unsigned int params,
- ...)
-{
- /**@todo make this function send out a good error message if something goes
- * wrong**/
- QDomElement element = m_doc.createElement( name );
- m_node.appendChild( element );
-
- if(params) {
- va_list variableList;
- va_start(variableList, params);
-
- const char *ParamName;
- const char *ParamValue;
- while(params--) {
- ParamName = va_arg(variableList, const char *);
- ParamValue = va_arg(variableList, const char *);
- element.setAttribute( ParamName, ParamValue);
- }
- }
- return element;
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/QtXmlWrapper.h b/plugins/zynaddsubfx/src/Misc/QtXmlWrapper.h
deleted file mode 100644
index 0f478dd..0000000
--- a/plugins/zynaddsubfx/src/Misc/QtXmlWrapper.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * QtXmlWrapper.h - a QtXml based XML backend for ZynAddSubxFX
- *
- * Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-/* File derived from XMLwrapper.h: */
-/*
- ZynAddSubFX - a software synthesizer
-
- XMLwrapper.h - XML wrapper
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Copyright (C) 2009-2009 Mark McCurry
- Author: Nasca Octavian Paul
- Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef QT_XML_WRAPPER_H
-#define QT_XML_WRAPPER_H
-
-#include "../globals.h"
-
-#include <string>
-#include <cstdlib>
-#include <cstdio>
-#include <cstring>
-
-#define QtXmlWrapper XMLwrapper
-
-struct XmlData;
-
-class QtXmlWrapper
-{
-public:
- QtXmlWrapper();
- ~QtXmlWrapper();
-
- int saveXMLfile( const std::string & filename ) const;
- int loadXMLfile( const std::string & filename );
-
- char *getXMLdata() const;
- bool putXMLdata( const char *xmldata );
-
- void addpar( const std::string & name, int val );
- void addparreal( const std::string & name, REALTYPE val);
- void addparbool( const std::string & name, int val );
- void addparstr( const std::string & name, const std::string & val );
-
- void beginbranch( const std::string & name );
- void beginbranch( const std::string & name, int id );
- void endbranch();
-
-
- int enterbranch( const std::string & name );
- int enterbranch( const std::string & name, int id );
- void exitbranch();
- int getbranchid( int min, int max ) const;
-
- int getpar( const std::string & name, int defaultpar, int min, int max ) const;
- int getpar127( const std::string & name, int defaultpar ) const;
- int getparbool( const std::string & name, int defaultpar ) const;
-
- void getparstr( const std::string & name, char * par, int maxstrlen ) const;
- std::string getparstr( const std::string & name, const std::string & defaultpar ) const;
- REALTYPE getparreal( const char * name, REALTYPE defaultpar ) const;
-
- REALTYPE getparreal(const char *name, REALTYPE defaultpar, REALTYPE min, REALTYPE max) const;
-
- bool minimal; /**<false if all parameters will be stored (used only for clipboard)*/
-
- void setPadSynth( bool enabled );
- bool hasPadSynth() const;
-
-
-private:
- int dosavefile(const char *filename, int compression, const char *xmldata) const;
-
- char *doloadfile(const std::string &filename) const;
-
- struct
- {
- int Major;
- int Minor;
- int Revision;
- } version;
-
- XmlData * d;
-
-
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/Stereo.cpp b/plugins/zynaddsubfx/src/Misc/Stereo.cpp
deleted file mode 100644
index be53e51..0000000
--- a/plugins/zynaddsubfx/src/Misc/Stereo.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Stereo.cpp - Object for storing a pair of objects
- Copyright (C) 2009-2009 Mark McCurry
- Author: Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-template<class T>
-Stereo<T>::Stereo(const T &left, const T &right)
- :l(left), r(right)
-{}
-
-template<class T>
-Stereo<T>::Stereo(const T &val)
- :l(val), r(val)
-{}
-
-template<class T>
-Stereo<T> &Stereo<T>::operator=(const Stereo<T> &nstr)
-{
- l = nstr.l;
- r = nstr.r;
- return *this;
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/Stereo.h b/plugins/zynaddsubfx/src/Misc/Stereo.h
deleted file mode 100644
index 06ee63c..0000000
--- a/plugins/zynaddsubfx/src/Misc/Stereo.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Stereo.h - Object for storing a pair of objects
- Copyright (C) 2009-2009 Mark McCurry
- Author: Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#ifndef STEREO_H
-#define STEREO_H
-
-template<class T>
-struct Stereo
-{
- public:
- Stereo(const T &left, const T &right);
-
- /**Initializes Stereo with left and right set to val
- * @param val the value for both channels*/
- Stereo(const T &val);
- ~Stereo() {}
-
- Stereo<T> &operator=(const Stereo<T> &smp);
-
- //data
- T l, r;
-};
-#include "Stereo.cpp"
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/Util.cpp b/plugins/zynaddsubfx/src/Misc/Util.cpp
deleted file mode 100644
index a7ea432..0000000
--- a/plugins/zynaddsubfx/src/Misc/Util.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Util.cpp - Miscellaneous functions
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "Util.h"
-#include <math.h>
-#include <stdio.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-int SAMPLE_RATE = 44100;
-int SOUND_BUFFER_SIZE = 256;
-int OSCIL_SIZE = 1024;
-
-Config config;
-REALTYPE *denormalkillbuf;
-
-
-/*
- * Transform the velocity according the scaling parameter (velocity sensing)
- */
-REALTYPE VelF(REALTYPE velocity, unsigned char scaling)
-{
- REALTYPE x;
- x = pow(VELOCITY_MAX_SCALE, (64.0 - scaling) / 64.0);
- if((scaling == 127) || (velocity > 0.99))
- return 1.0;
- else
- return pow(velocity, x);
-}
-
-/*
- * Get the detune in cents
- */
-REALTYPE getdetune(unsigned char type,
- unsigned short int coarsedetune,
- unsigned short int finedetune)
-{
- REALTYPE det = 0.0, octdet = 0.0, cdet = 0.0, findet = 0.0;
- //Get Octave
- int octave = coarsedetune / 1024;
- if(octave >= 8)
- octave -= 16;
- octdet = octave * 1200.0;
-
- //Coarse and fine detune
- int cdetune = coarsedetune % 1024;
- if(cdetune > 512)
- cdetune -= 1024;
-
- int fdetune = finedetune - 8192;
-
- switch(type) {
-// case 1: is used for the default (see below)
- case 2:
- cdet = fabs(cdetune * 10.0);
- findet = fabs(fdetune / 8192.0) * 10.0;
- break;
- case 3:
- cdet = fabs(cdetune * 100);
- findet = pow(10, fabs(fdetune / 8192.0) * 3.0) / 10.0 - 0.1;
- break;
- case 4:
- cdet = fabs(cdetune * 701.95500087); //perfect fifth
- findet = (pow(2, fabs(fdetune / 8192.0) * 12.0) - 1.0) / 4095 * 1200;
- break;
- //case ...: need to update N_DETUNE_TYPES, if you'll add more
- default:
- cdet = fabs(cdetune * 50.0);
- findet = fabs(fdetune / 8192.0) * 35.0; //almost like "Paul's Sound Designer 2"
- break;
- }
- if(finedetune < 8192)
- findet = -findet;
- if(cdetune < 0)
- cdet = -cdet;
-
- det = octdet + cdet + findet;
- return det;
-}
-
-
-bool fileexists(const char *filename)
-{
- struct stat tmp;
- int result = stat(filename, &tmp);
- if(result >= 0)
- return true;
-
- return false;
-}
-
-void invSignal(REALTYPE *sig, size_t len)
-{
- for(unsigned int i = 0; i < len; i++)
- sig[i] *= -1.0f;
-}
-
-void crossover(REALTYPE &a, REALTYPE &b, REALTYPE crossover)
-{
- REALTYPE tmpa = a;
- REALTYPE tmpb = b;
- a = tmpa * (1.0 - crossover) + tmpb * crossover;
- b = tmpb * (1.0 - crossover) + tmpa * crossover;
-}
-
-
diff --git a/plugins/zynaddsubfx/src/Misc/Util.h b/plugins/zynaddsubfx/src/Misc/Util.h
deleted file mode 100644
index d77f457..0000000
--- a/plugins/zynaddsubfx/src/Misc/Util.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Util.h - Miscellaneous functions
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef UTIL_H
-#define UTIL_H
-
-#include <cstdio>
-#include <string>
-#include <sstream>
-#include "../globals.h"
-#include "Config.h"
-
-//Velocity Sensing function
-extern REALTYPE VelF(REALTYPE velocity, unsigned char scaling);
-
-bool fileexists(const char *filename);
-
-#define N_DETUNE_TYPES 4 //the number of detune types
-extern REALTYPE getdetune(unsigned char type,
- unsigned short int coarsedetune,
- unsigned short int finedetune);
-
-extern REALTYPE *denormalkillbuf; /**<the buffer to add noise in order to avoid denormalisation*/
-
-extern Config config;
-
-void invSignal(REALTYPE *sig, size_t len);
-
-void crossover(REALTYPE &a, REALTYPE &b, REALTYPE crossover);
-
-template<class T>
-std::string stringFrom(T x)
-{
- std::stringstream ss;
- ss << x;
- return ss.str();
-}
-
-template<class T>
-std::string stringFrom(REALTYPE x)
-{
- char buf[64];
- sprintf( buf, "%f", x );
- return buf;
-}
-
-
-template<class T>
-T stringTo(const char *x)
-{
- std::string str = x != NULL ? x : "0"; //should work for the basic float/int
- std::stringstream ss(str);
- T ans;
- ss >> ans;
- return ans;
-}
-
-template <class T>
-T limit(T val, T min, T max)
-{
- return (val < min ? min : (val > max ? max : val));
-}
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Misc/XMLwrapper.cpp b/plugins/zynaddsubfx/src/Misc/XMLwrapper.cpp
deleted file mode 100644
index d3750c4..0000000
--- a/plugins/zynaddsubfx/src/Misc/XMLwrapper.cpp
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- XMLwrapper.cpp - XML wrapper
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Copyright (C) 2009-2009 Mark McCurry
- Author: Nasca Octavian Paul
- Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "XMLwrapper.h"
-#include <cstring>
-#include <stdio.h>
-#include <stdlib.h>
-#include <cstdarg>
-#include <zlib.h>
-#include <iostream>
-#include <sstream>
-
-#include "../globals.h"
-#include "Util.h"
-
-using namespace std;
-
-int xml_k = 0;
-bool verbose = false;
-
-const char *XMLwrapper_whitespace_callback(mxml_node_t *node, int where)
-{
- const char *name = node->value.element.name;
-
- if((where == MXML_WS_BEFORE_OPEN) && (!strcmp(name, "?xml")))
- return NULL;
- if((where == MXML_WS_BEFORE_CLOSE) && (!strcmp(name, "string")))
- return NULL;
-
- if((where == MXML_WS_BEFORE_OPEN) || (where == MXML_WS_BEFORE_CLOSE))
- /* const char *tmp=node->value.element.name;
- if (tmp!=NULL) {
- if ((strstr(tmp,"par")!=tmp)&&(strstr(tmp,"string")!=tmp)) {
- printf("%s ",tmp);
- if (where==MXML_WS_BEFORE_OPEN) xml_k++;
- if (where==MXML_WS_BEFORE_CLOSE) xml_k--;
- if (xml_k>=STACKSIZE) xml_k=STACKSIZE-1;
- if (xml_k<0) xml_k=0;
- printf("%d\n",xml_k);
- printf("\n");
- };
-
- };
- int i=0;
- for (i=1;i<xml_k;i++) tabs[i]='\t';
- tabs[0]='\n';tabs[i+1]='\0';
- if (where==MXML_WS_BEFORE_OPEN) return(tabs);
- else return("\n");
- */
- return "\n";
- ;
-
- return 0;
-}
-
-//temporary const overload of mxmlFindElement
-const mxml_node_t *mxmlFindElement(const mxml_node_t *node,
- const mxml_node_t *top,
- const char *name,
- const char *attr,
- const char *value,
- int descend)
-{
- return const_cast<const mxml_node_t *>(mxmlFindElement(
- const_cast<mxml_node_t *>(node),
- const_cast<mxml_node_t *>(top),
- name, attr, value, descend));
-}
-
-//temporary const overload of mxmlElementGetAttr
-const char *mxmlElementGetAttr(const mxml_node_t *node, const char *name)
-{
- return mxmlElementGetAttr(const_cast<mxml_node_t *>(node), name);
-}
-
-XMLwrapper::XMLwrapper()
-{
- version.Major = 2;
- version.Minor = 4;
- version.Revision = 1;
-
- minimal = true;
-
- node = tree = mxmlNewElement(MXML_NO_PARENT,
- "?xml version=\"1.0\" encoding=\"UTF-8\"?");
- /* for mxml 2.1 (and older)
- tree=mxmlNewElement(MXML_NO_PARENT,"?xml");
- mxmlElementSetAttr(tree,"version","1.0");
- mxmlElementSetAttr(tree,"encoding","UTF-8");
- */
-
- mxml_node_t *doctype = mxmlNewElement(tree, "!DOCTYPE");
- mxmlElementSetAttr(doctype, "ZynAddSubFX-data", NULL);
-
- node = root = addparams("ZynAddSubFX-data", 4,
- "version-major", stringFrom<int>(
- version.Major).c_str(),
- "version-minor", stringFrom<int>(
- version.Minor).c_str(),
- "version-revision",
- stringFrom<int>(version.Revision).c_str(),
- "ZynAddSubFX-author", "Nasca Octavian Paul");
-
- //make the empty branch that will contain the information parameters
- info = addparams("INFORMATION", 0);
-
- //save zynaddsubfx specifications
- beginbranch("BASE_PARAMETERS");
- addpar("max_midi_parts", NUM_MIDI_PARTS);
- addpar("max_kit_items_per_instrument", NUM_KIT_ITEMS);
-
- addpar("max_system_effects", NUM_SYS_EFX);
- addpar("max_insertion_effects", NUM_INS_EFX);
- addpar("max_instrument_effects", NUM_PART_EFX);
-
- addpar("max_addsynth_voices", NUM_VOICES);
- endbranch();
-}
-
-XMLwrapper::~XMLwrapper()
-{
- if(tree != NULL)
- mxmlDelete(tree);
-}
-
-void XMLwrapper::setPadSynth(bool enabled)
-{
- /**@bug this might create multiple nodes when only one is needed*/
- mxml_node_t *oldnode = node;
- node = info;
- //Info storing
- addparbool("PADsynth_used", enabled);
- node = oldnode;
-}
-
-bool XMLwrapper::hasPadSynth() const
-{
- /**Right now this has a copied implementation of setparbool, so this should
- * be reworked as XMLwrapper evolves*/
- mxml_node_t *tmp = mxmlFindElement(tree,
- tree,
- "INFORMATION",
- NULL,
- NULL,
- MXML_DESCEND);
-
- mxml_node_t *parameter = mxmlFindElement(tmp,
- tmp,
- "par_bool",
- "name",
- "PADsynth_used",
- MXML_DESCEND_FIRST);
- if(parameter == NULL) //no information availiable
- return false;
-
- const char *strval = mxmlElementGetAttr(parameter, "value");
- if(strval == NULL) //no information available
- return false;
-
- if((strval[0] == 'Y') || (strval[0] == 'y'))
- return true;
- else
- return false;
-}
-
-
-/* SAVE XML members */
-
-int XMLwrapper::saveXMLfile(const string &filename) const
-{
- char *xmldata = getXMLdata();
- if(xmldata == NULL)
- return -2;
-
- int compression = config.cfg.GzipCompression;
- int result = dosavefile(filename.c_str(), compression, xmldata);
-
- free(xmldata);
- return result;
-}
-
-char *XMLwrapper::getXMLdata() const
-{
- xml_k = 0;
-
- char *xmldata = mxmlSaveAllocString(tree, XMLwrapper_whitespace_callback);
-
- return xmldata;
-}
-
-
-int XMLwrapper::dosavefile(const char *filename,
- int compression,
- const char *xmldata) const
-{
- if(compression == 0) {
- FILE *file;
- file = fopen(filename, "w");
- if(file == NULL)
- return -1;
- fputs(xmldata, file);
- fclose(file);
- }
- else {
- if(compression > 9)
- compression = 9;
- if(compression < 1)
- compression = 1;
- char options[10];
- snprintf(options, 10, "wb%d", compression);
-
- gzFile gzfile;
- gzfile = gzopen(filename, options);
- if(gzfile == NULL)
- return -1;
- gzputs(gzfile, xmldata);
- gzclose(gzfile);
- }
-
- return 0;
-}
-
-
-
-void XMLwrapper::addpar(const string &name, int val)
-{
- addparams("par", 2, "name", name.c_str(), "value", stringFrom<int>(
- val).c_str());
-}
-
-void XMLwrapper::addparreal(const string &name, REALTYPE val)
-{
- addparams("par_real", 2, "name", name.c_str(), "value",
- stringFrom<REALTYPE>(val).c_str());
-}
-
-void XMLwrapper::addparbool(const string &name, int val)
-{
- if(val != 0)
- addparams("par_bool", 2, "name", name.c_str(), "value", "yes");
- else
- addparams("par_bool", 2, "name", name.c_str(), "value", "no");
-}
-
-void XMLwrapper::addparstr(const string &name, const string &val)
-{
- mxml_node_t *element = mxmlNewElement(node, "string");
- mxmlElementSetAttr(element, "name", name.c_str());
- mxmlNewText(element, 0, val.c_str());
-}
-
-
-void XMLwrapper::beginbranch(const string &name)
-{
- if(verbose)
- cout << "beginbranch()" << name << endl;
- node = addparams(name.c_str(), 0);
-}
-
-void XMLwrapper::beginbranch(const string &name, int id)
-{
- if(verbose)
- cout << "beginbranch(" << id << ")" << name << endl;
- node = addparams(name.c_str(), 1, "id", stringFrom<int>(id).c_str());
-}
-
-void XMLwrapper::endbranch()
-{
- if(verbose)
- cout << "endbranch()" << node << "-" << node->value.element.name
- << " To "
- << node->parent << "-" << node->parent->value.element.name << endl;
- node = node->parent;
-}
-
-
-
-/* LOAD XML members */
-
-int XMLwrapper::loadXMLfile(const string &filename)
-{
- if(tree != NULL)
- mxmlDelete(tree);
- tree = NULL;
-
- const char *xmldata = doloadfile(filename.c_str());
- if(xmldata == NULL)
- return -1; //the file could not be loaded or uncompressed
-
- root = tree = mxmlLoadString(NULL, xmldata, MXML_OPAQUE_CALLBACK);
-
- delete [] xmldata;
-
- if(tree == NULL)
- return -2; //this is not XML
-
-
- node = root = mxmlFindElement(tree,
- tree,
- "ZynAddSubFX-data",
- NULL,
- NULL,
- MXML_DESCEND);
- if(root == NULL)
- return -3; //the XML doesnt embbed zynaddsubfx data
-
- //fetch version information
- version.Major = stringTo<int>(mxmlElementGetAttr(root, "version-major"));
- version.Minor = stringTo<int>(mxmlElementGetAttr(root, "version-minor"));
- version.Revision =
- stringTo<int>(mxmlElementGetAttr(root, "version-revision"));
-
- if(verbose)
- cout << "loadXMLfile() version: " << version.Major << '.'
- << version.Minor << '.' << version.Revision << endl;
-
-
- return 0;
-}
-
-
-char *XMLwrapper::doloadfile(const string &filename) const
-{
- char *xmldata = NULL;
- gzFile gzfile = gzopen(filename.c_str(), "rb");
-
- if(gzfile != NULL) { //The possibly compressed file opened
- stringstream strBuf; //reading stream
- const int bufSize = 500; //fetch size
- char fetchBuf[bufSize + 1]; //fetch buffer
- int read = 0; //chars read in last fetch
-
- fetchBuf[bufSize] = 0; //force null termination
-
- while(bufSize == (read = gzread(gzfile, fetchBuf, bufSize)))
- strBuf << fetchBuf;
-
- fetchBuf[read] = 0; //Truncate last partial read
- strBuf << fetchBuf;
-
- gzclose(gzfile);
-
- //Place data in output format
- string tmp = strBuf.str();
- xmldata = new char[tmp.size() + 1];
- strncpy(xmldata, tmp.c_str(), tmp.size() + 1);
- }
-
- return xmldata;
-}
-
-bool XMLwrapper::putXMLdata(const char *xmldata)
-{
- if(tree != NULL)
- mxmlDelete(tree);
-
- tree = NULL;
- if(xmldata == NULL)
- return false;
-
- root = tree = mxmlLoadString(NULL, xmldata, MXML_OPAQUE_CALLBACK);
- if(tree == NULL)
- return false;
-
- node = root = mxmlFindElement(tree,
- tree,
- "ZynAddSubFX-data",
- NULL,
- NULL,
- MXML_DESCEND);
- if(root == NULL)
- return false;
-
- return true;
-}
-
-
-
-int XMLwrapper::enterbranch(const string &name)
-{
- if(verbose)
- cout << "enterbranch() " << name << endl;
- mxml_node_t *tmp = mxmlFindElement(node, node,
- name.c_str(), NULL, NULL,
- MXML_DESCEND_FIRST);
- if(tmp == NULL)
- return 0;
-
- node = tmp;
- return 1;
-}
-
-int XMLwrapper::enterbranch(const string &name, int id)
-{
- if(verbose)
- cout << "enterbranch(" << id << ") " << name << endl;
- mxml_node_t *tmp = mxmlFindElement(node, node,
- name.c_str(), "id", stringFrom<int>(
- id).c_str(), MXML_DESCEND_FIRST);
- if(tmp == NULL)
- return 0;
-
- node = tmp;
- return 1;
-}
-
-
-void XMLwrapper::exitbranch()
-{
- if(verbose)
- cout << "exitbranch()" << node << "-" << node->value.element.name
- << " To "
- << node->parent << "-" << node->parent->value.element.name << endl;
- node = node->parent;
-}
-
-
-int XMLwrapper::getbranchid(int min, int max) const
-{
- int id = stringTo<int>(mxmlElementGetAttr(node, "id"));
- if((min == 0) && (max == 0))
- return id;
-
- if(id < min)
- id = min;
- else
- if(id > max)
- id = max;
-
- return id;
-}
-
-int XMLwrapper::getpar(const string &name, int defaultpar, int min,
- int max) const
-{
- const mxml_node_t *tmp = mxmlFindElement(node,
- node,
- "par",
- "name",
- name.c_str(),
- MXML_DESCEND_FIRST);
-
- if(tmp == NULL)
- return defaultpar;
-
- const char *strval = mxmlElementGetAttr(tmp, "value");
- if(strval == NULL)
- return defaultpar;
-
- int val = stringTo<int>(strval);
- if(val < min)
- val = min;
- else
- if(val > max)
- val = max;
-
- return val;
-}
-
-int XMLwrapper::getpar127(const string &name, int defaultpar) const
-{
- return getpar(name, defaultpar, 0, 127);
-}
-
-int XMLwrapper::getparbool(const string &name, int defaultpar) const
-{
- const mxml_node_t *tmp = mxmlFindElement(node,
- node,
- "par_bool",
- "name",
- name.c_str(),
- MXML_DESCEND_FIRST);
-
- if(tmp == NULL)
- return defaultpar;
-
- const char *strval = mxmlElementGetAttr(tmp, "value");
- if(strval == NULL)
- return defaultpar;
-
- if((strval[0] == 'Y') || (strval[0] == 'y'))
- return 1;
- else
- return 0;
-}
-
-void XMLwrapper::getparstr(const string &name, char *par, int maxstrlen) const
-{
- ZERO(par, maxstrlen);
- const mxml_node_t *tmp = mxmlFindElement(node,
- node,
- "string",
- "name",
- name.c_str(),
- MXML_DESCEND_FIRST);
-
- if(tmp == NULL)
- return;
- if(tmp->child == NULL)
- return;
- if(tmp->child->type == MXML_OPAQUE) {
- snprintf(par, maxstrlen, "%s", tmp->child->value.element.name);
- return;
- }
- if((tmp->child->type == MXML_TEXT)
- && (tmp->child->value.text.string != NULL)) {
- snprintf(par, maxstrlen, "%s", tmp->child->value.text.string);
- return;
- }
-}
-
-string XMLwrapper::getparstr(const string &name,
- const std::string &defaultpar) const
-{
- const mxml_node_t *tmp = mxmlFindElement(node,
- node,
- "string",
- "name",
- name.c_str(),
- MXML_DESCEND_FIRST);
-
- if((tmp == NULL) || (tmp->child == NULL))
- return defaultpar;
-
- if((tmp->child->type == MXML_OPAQUE)
- && (tmp->child->value.element.name != NULL))
- return tmp->child->value.element.name;
-
- if((tmp->child->type == MXML_TEXT)
- && (tmp->child->value.text.string != NULL))
- return tmp->child->value.text.string;
-
- return defaultpar;
-}
-
-REALTYPE XMLwrapper::getparreal(const char *name, REALTYPE defaultpar) const
-{
- const mxml_node_t *tmp = mxmlFindElement(node,
- node,
- "par_real",
- "name",
- name,
- MXML_DESCEND_FIRST);
- if(tmp == NULL)
- return defaultpar;
-
- const char *strval = mxmlElementGetAttr(tmp, "value");
- if(strval == NULL)
- return defaultpar;
-
- return stringTo<REALTYPE>(strval);
-}
-
-REALTYPE XMLwrapper::getparreal(const char *name,
- REALTYPE defaultpar,
- REALTYPE min,
- REALTYPE max) const
-{
- REALTYPE result = getparreal(name, defaultpar);
-
- if(result < min)
- result = min;
- else
- if(result > max)
- result = max;
- return result;
-}
-
-
-/** Private members **/
-
-mxml_node_t *XMLwrapper::addparams(const char *name, unsigned int params,
- ...) const
-{
- /**@todo make this function send out a good error message if something goes
- * wrong**/
- mxml_node_t *element = mxmlNewElement(node, name);
-
- if(params) {
- va_list variableList;
- va_start(variableList, params);
-
- const char *ParamName;
- const char *ParamValue;
- while(params--) {
- ParamName = va_arg(variableList, const char *);
- ParamValue = va_arg(variableList, const char *);
- if(verbose)
- cout << "addparams()[" << params << "]=" << name << " "
- << ParamName << "=\"" << ParamValue << "\"" << endl;
- mxmlElementSetAttr(element, ParamName, ParamValue);
- }
- }
- return element;
-}
-
diff --git a/plugins/zynaddsubfx/src/Misc/XMLwrapper.h b/plugins/zynaddsubfx/src/Misc/XMLwrapper.h
deleted file mode 100644
index 997ac93..0000000
--- a/plugins/zynaddsubfx/src/Misc/XMLwrapper.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- XMLwrapper.h - XML wrapper
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Copyright (C) 2009-2009 Mark McCurry
- Author: Nasca Octavian Paul
- Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#if 1
-#include "QtXmlWrapper.h"
-#else
-#include <mxml.h>
-#include <string>
-#ifndef REALTYPE
-#define REALTYPE float
-#endif
-
-#ifndef XML_WRAPPER_H
-#define XML_WRAPPER_H
-
-/**Mxml wrapper*/
-class XMLwrapper
-{
- public:
- /**
- * Constructor.
- * Will Construct the object and fill in top level branch
- * */
- XMLwrapper();
-
- /**Destructor*/
- ~XMLwrapper();
-
- /**
- * Saves the XML to a file.
- * @param filename the name of the destination file.
- * @returns 0 if ok or -1 if the file cannot be saved.
- */
- int saveXMLfile(const std::string &filename) const;
-
- /**
- * Return XML tree as a string.
- * Note: The string must be freed with free() to deallocate
- * @returns a newly allocated NULL terminated string of the XML data.
- */
- char *getXMLdata() const;
-
- /**
- * Add simple parameter.
- * @param name The name of the mXML node.
- * @param val The string value of the mXml node
- */
- void addpar(const std::string &name, int val);
-
- /**
- * Adds a realtype parameter.
- * @param name The name of the mXML node.
- * @param val The REALTYPE value of the node.
- */
- void addparreal(const std::string &name, REALTYPE val);
-
- /**
- * Add boolean parameter.
- * \todo Fix this reverse boolean logic.
- * @param name The name of the mXML node.
- * @param val The boolean value of the node (0->"yes";else->"no").
- */
- void addparbool(const std::string &name, int val);
-
- /**
- * Add string parameter.
- * @param name The name of the mXML node.
- * @param val The string value of the node.
- */
- void addparstr(const std::string &name, const std::string &val);
-
- /**
- * Create a new branch.
- * @param name Name of new branch
- * @see void endbranch()
- */
- void beginbranch(const std::string &name);
- /**
- * Create a new branch.
- * @param name Name of new branch
- * @param id "id" value of branch
- * @see void endbranch()
- */
- void beginbranch(const std::string &name, int id);
-
- /**Closes new branches.
- * This must be called to exit each branch created by beginbranch( ).
- * @see void beginbranch(const std::string &name)
- * @see void beginbranch(const std::string &name, int id)
- */
- void endbranch();
-
- /**
- * Loads file into XMLwrapper.
- * @param filename file to be loaded
- * @returns 0 if ok or -1 if the file cannot be loaded
- */
- int loadXMLfile(const std::string &filename);
-
- /**
- * Loads string into XMLwrapper.
- * @param xmldata NULL terminated string of XML data.
- * @returns true if successful.
- */
- bool putXMLdata(const char *xmldata);
-
- /**
- * Enters the branch.
- * @param name Name of branch.
- * @returns 1 if is ok, or 0 otherwise.
- */
- int enterbranch(const std::string &name);
-
- /**
- * Enter into the branch \c name with id \c id.
- * @param name Name of branch.
- * @param id Value of branch's "id".
- * @returns 1 if is ok, or 0 otherwise.
- */
- int enterbranch(const std::string &name, int id);
-
- /**Exits from a branch*/
- void exitbranch();
-
- /**Get the the branch_id and limits it between the min and max.
- * if min==max==0, it will not limit it
- * if there isn't any id, will return min
- * this must be called only imediately after enterbranch()
- */
- int getbranchid(int min, int max) const;
-
- /**
- * Returns the integer value stored in node name.
- * It returns the integer value between the limits min and max.
- * If min==max==0, then the value will not be limited.
- * If there is no location named name, then defaultpar will be returned.
- * @param name The parameter name.
- * @param defaultpar The default value if the real value is not found.
- * @param min The minimum return value.
- * @param max The maximum return value.
- */
- int getpar(const std::string &name, int defaultpar, int min,
- int max) const;
-
- /**
- * Returns the integer value stored in the node with range [0,127].
- * @param name The parameter name.
- * @param defaultpar The default value if the real value is not found.
- */
- int getpar127(const std::string &name, int defaultpar) const;
-
- /**
- * Returns the boolean value stored in the node.
- * @param name The parameter name.
- * @param defaultpar The default value if the real value is not found.
- */
- int getparbool(const std::string &name, int defaultpar) const;
-
- /**
- * Get the string value stored in the node.
- * @param name The parameter name.
- * @param par Pointer to destination string
- * @param maxstrlen Max string length for destination
- */
- void getparstr(const std::string &name, char *par, int maxstrlen) const;
-
- /**
- * Get the string value stored in the node.
- * @param name The parameter name.
- * @param defaultpar The default value if the real value is not found.
- */
- std::string getparstr(const std::string &name,
- const std::string &defaultpar) const;
-
- /**
- * Returns the real value stored in the node.
- * @param name The parameter name.
- * @param defaultpar The default value if the real value is not found.
- */
- REALTYPE getparreal(const char *name, REALTYPE defaultpar) const;
-
- /**
- * Returns the real value stored in the node.
- * @param name The parameter name.
- * @param defaultpar The default value if the real value is not found.
- * @param min The minimum value
- * @param max The maximum value
- */
- REALTYPE getparreal(const char *name,
- REALTYPE defaultpar,
- REALTYPE min,
- REALTYPE max) const;
-
- bool minimal; /**<false if all parameters will be stored (used only for clipboard)*/
-
- /**
- * Sets the current tree's PAD Synth usage
- */
- void setPadSynth(bool enabled);
- /**
- * Checks the current tree for PADsynth usage
- */
- bool hasPadSynth() const;
-
- private:
-
- /**
- * Save the file.
- * @param filename File to save to
- * @param compression Level of gzip compression
- * @param xmldata String to be saved
- */
- int dosavefile(const char *filename,
- int compression,
- const char *xmldata) const;
-
- /**
- * Loads specified file and returns data.
- *
- * Will load a gziped file or an uncompressed file.
- * @param filename the file
- * @return The decompressed data
- */
- char *doloadfile(const std::string &filename) const;
-
- mxml_node_t *tree; /**<all xml data*/
- mxml_node_t *root; /**<xml data used by zynaddsubfx*/
- mxml_node_t *node; /**<current subtree in parsing or writing */
- mxml_node_t *info; /**<Node used to store the information about the data*/
-
- /**
- * Create mxml_node_t with specified name and parameters
- *
- * Results should look like:
- * <name optionalParam1="value1" optionalParam2="value2" ...>
- *
- * @param name The name of the xml node
- * @param params The number of the attributes
- * @param ... const char * pairs that are in the format attribute_name,
- * attribute_value
- */
- mxml_node_t *addparams(const char *name, unsigned int params,
- ...) const;
-
- /**@todo keep these numbers up to date*/
- struct {
- int Major; /**<major version number.*/
- int Minor; /**<minor version number.*/
- int Revision; /**<version revision number.*/
- } version;
-};
-
-#endif
-#endif
diff --git a/plugins/zynaddsubfx/src/Output/CMakeLists.txt b/plugins/zynaddsubfx/src/Output/CMakeLists.txt
deleted file mode 100644
index e69296e..0000000
--- a/plugins/zynaddsubfx/src/Output/CMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-set(zynaddsubfx_output_SRCS
- Recorder.cpp
- WAVaudiooutput.cpp
-)
-
-if(AlsaMidiOutput)
- set(zynaddsubfx_output_SRCS
- ${zynaddsubfx_output_SRCS}
- OSSaudiooutput.cpp)
- set(zynaddsubfx_output_lib ${ASOUND_LIBRARY})
-endif(AlsaMidiOutput)
-
-if(JackOutput)
- include_directories("${JACK_INCLUDE_DIR}")
- set(zynaddsubfx_output_SRCS
- ${zynaddsubfx_output_SRCS}
- JACKaudiooutput.cpp)
- set(zynaddsubfx_output_lib ${JACK_LIBRARIES})
-endif(JackOutput)
-
-if(PortAudioOutput)
- include_directories("${PORTAUDIO_INCLUDE_DIR}")
- set(zynaddsubfx_output_SRCS
- ${zynaddsubfx_output_SRCS}
- PAaudiooutput.cpp)
- set(zynaddsubfx_output_lib ${PORTAUDIO_LIBRARIES})
-endif(PortAudioOutput)
-
-add_library(zynaddsubfx_output STATIC
- ${zynaddsubfx_output_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_output ${zynaddsubfx_output_lib})
diff --git a/plugins/zynaddsubfx/src/Output/DSSIaudiooutput.cpp b/plugins/zynaddsubfx/src/Output/DSSIaudiooutput.cpp
deleted file mode 100644
index a7fdd08..0000000
--- a/plugins/zynaddsubfx/src/Output/DSSIaudiooutput.cpp
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- DSSIaudiooutput.cpp - Audio functions for DSSI
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-/*
- * Inital working DSSI output code contributed by Stephen G. Parry
- */
-
-//this file contains code used from trivial_synth.c from
-//the DSSI (published by Steve Harris under public domain) as a template.
-
-#include <string.h>
-#include "DSSIaudiooutput.h"
-#include "../Misc/Config.h"
-#include "../Misc/Bank.h"
-#include <limits.h>
-
-//
-// Static stubs for LADSPA member functions
-//
-// LADSPA is essentially a C handle based API; This plug-in implementation is
-// a C++ OO one so we need stub functions to map from C API calls to C++ object
-// method calls.
-void DSSIaudiooutput::stub_connectPort(LADSPA_Handle instance, unsigned long port, LADSPA_Data * data)
-{
- getInstance(instance)->connectPort(port, data);
-}
-
-void DSSIaudiooutput::stub_activate(LADSPA_Handle instance)
-{
- getInstance(instance)->activate();
-}
-
-void DSSIaudiooutput::stub_run(LADSPA_Handle instance, unsigned long sample_count)
-{
- getInstance(instance)->run(sample_count);
-}
-
-void DSSIaudiooutput::stub_deactivate(LADSPA_Handle instance)
-{
- getInstance(instance)->deactivate();
-}
-
-
-void DSSIaudiooutput::stub_cleanup(LADSPA_Handle instance)
-{
- DSSIaudiooutput* plugin_instance = getInstance(instance);
- plugin_instance->cleanup();
- delete plugin_instance;
-}
-
-
-const LADSPA_Descriptor *ladspa_descriptor(unsigned long index)
-{
- return DSSIaudiooutput::getLadspaDescriptor(index);
-}
-
-//
-// Static stubs for DSSI member functions
-//
-// DSSI is essentially a C handle based API; This plug-in implementation is
-// a C++ OO one so we need stub functions to map from C API calls to C++ object
-// method calls.
-const DSSI_Program_Descriptor* DSSIaudiooutput::stub_getProgram (LADSPA_Handle instance, unsigned long index)
-{
- return getInstance(instance)->getProgram(index);
-}
-
-void DSSIaudiooutput::stub_selectProgram(LADSPA_Handle instance, unsigned long bank, unsigned long program)
-{
- getInstance(instance)->selectProgram(bank, program);
-}
-
-int DSSIaudiooutput::stub_getMidiControllerForPort(LADSPA_Handle instance, unsigned long port)
-{
- return getInstance(instance)->getMidiControllerForPort(port);
-}
-
-void DSSIaudiooutput::stub_runSynth(LADSPA_Handle instance, unsigned long sample_count,
- snd_seq_event_t *events, unsigned long event_count)
-{
- getInstance(instance)->runSynth(sample_count, events, event_count);
-}
-
-const DSSI_Descriptor *dssi_descriptor(unsigned long index)
-{
- return DSSIaudiooutput::getDssiDescriptor(index);
-}
-
-//
-// LADSPA member functions
-//
-
-/**
- * Instantiates a plug-in.
- *
- * This LADSPA member function instantiates a plug-in.
- * Note that instance initialisation should generally occur in
- * activate() rather than here.
- *
- * Zyn Implementation
- * ------------------
- * This implementation creates a C++ class object and hides its pointer
- * in the handle by type casting.
- *
- * @param descriptor [in] the descriptor for this plug-in
- * @param s_rate [in] the sample rate
- * @return the plug-in instance handle if successful else NULL
- */
-LADSPA_Handle DSSIaudiooutput::instantiate(const LADSPA_Descriptor * descriptor, unsigned long s_rate)
-{
- if(descriptor->UniqueID == dssiDescriptor->LADSPA_Plugin->UniqueID)
- {
- return (LADSPA_Handle)(new DSSIaudiooutput(s_rate));
- }
- else
- {
- return NULL;
- }
-}
-
-/**
- * Connects a port on an instantiated plug-in.
- *
- * This LADSPA member function connects a port on an instantiated plug-in 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 plug-in 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.
- *
- * Zyn Implementation
- * ------------------
- * The buffer pointers are stored as member variables
- *
- * @param port [in] the port to be connected
- * @param data [in] the data buffer to write to / read from
- */
-void DSSIaudiooutput::connectPort(unsigned long port, LADSPA_Data * data)
-{
- switch (port) {
- case 0:
- outl = data;
- break;
- case 1:
- outr = data;
- break;
- }
-}
-
-/**
- * Initialises a plug-in instance and activates it for use.
- *
- * This LADSPA member function initialises a plug-in instance and activates it
- * for use. This is separated from instantiate() to aid real-time support and
- * so that hosts can reinitialise a plug-in instance by calling deactivate() and
- * then activate(). In this case the plug-in instance must reset all state
- * information dependent on the history of the plug-in instance except for any
- * data locations provided by connect_port() and any gain set by
- * set_run_adding_gain().
- *
- * Zyn Implementation
- * ------------------
- * Currently this does nothing; Care must be taken as to code placed here as
- * too much code here seems to cause time-out problems in jack-dssi-host.
-*/
-void DSSIaudiooutput::activate()
-{
-}
-
-/**
- * Runs an instance of a plug-in for a block.
- *
- * This LADSPA member function runs an instance of a plug-in for a block.
- * Note that if an activate() function exists then it must be called before
- * run() or run_adding(). If deactivate() is called for a plug-in instance then
- * the plug-in instance may not be reused until activate() has been called again.
- *
- * Zyn Implementation
- * ------------------
- * This is a LADSPA function that does not process any MIDI events; it is hence
- * implemented by simply calling runSynth() with an empty event list.
- *
- * @param sample_count [in] the block size (in samples) for which the plug-in instance may run
- */
-void DSSIaudiooutput::run(unsigned long sample_count)
-{
- runSynth(sample_count,NULL,(unsigned long)0);
-}
-
-/**
- * Counterpart to activate().
- *
- * This LADSPA member function is the counterpart to activate() (see above).
- * Deactivation is not similar to pausing as the plug-in instance will be
- * reinitialised when activate() is called to reuse it.
- *
- * Zyn Implementation
- * ------------------
- * Currently this function does nothing.
- */
-void DSSIaudiooutput::deactivate()
-{
-
-}
-
-/**
- * Deletes a plug-in instance that is no longer required.
- *
- * LADSPA member function; once an instance of a plug-in has been finished with
- * it can be deleted using this function. The instance handle ceases to be
- * valid after this call.
- *
- * If activate() was called for a plug-in instance then a corresponding call to
- * deactivate() must be made before cleanup() is called.
- *
- * Zyn Implementation
- * ------------------
- * Currently cleanup is deferred to the destructor that is invoked after cleanup()
- */
-void DSSIaudiooutput::cleanup()
-{
-}
-
-/**
- * Initial entry point for the LADSPA plug-in library.
- *
- * This LADSPA function is the initial entry point for the plug-in library.
- * The LADSPA host looks for this entry point in each shared library object it
- * finds and then calls the function to enumerate the plug-ins within the
- * library.
- *
- * Zyn Implementation
- * ------------------
- * As the Zyn plug-in is a DSSI plug-in, the LADSPA descriptor is embedded inside
- * the DSSI descriptor, which is created by DSSIaudiooutput::initDssiDescriptor()
- * statically when the library is loaded. This function then merely returns a pointer
- * to that embedded descriptor.
- *
- * @param index [in] the index number of the plug-in within the library.
- * @return if index is in range, a pointer to the plug-in descriptor is returned, else NULL
- */
-const LADSPA_Descriptor* DSSIaudiooutput::getLadspaDescriptor(unsigned long index)
-{
- if(index > 0 || dssiDescriptor == NULL)
- return NULL;
- else
- return dssiDescriptor->LADSPA_Plugin;
-}
-
-//
-// DSSI member functions
-//
-
-/**
- * Provides a description of a program available on this synth.
- *
- * This DSSI member function pointer provides a description of a program (named
- * preset sound) available on this synth.
- *
- * Zyn Implementation
- * ------------------
- * The instruments in all Zyn's bank directories, as shown by the `instrument
- * -> show instrument bank` command, are enumerated to the host by this
- * function, allowing access to all those instruments.
- * The first time an instrument is requested, the bank it is in and any
- * unmapped ones preceding that are mapped; all the instruments names and
- * filenames from those banks are stored in the programMap member variable for
- * later use. This is done on demand in this way, rather than up front in one
- * go because loading all the instrument names in one go can lead to timeouts
- * and zombies.
- *
- * @param index [in] index into the plug-in's list of
- * programs, not a program number as represented by the Program
- * field of the DSSI_Program_Descriptor. (This distinction is
- * needed to support synths that use non-contiguous program or
- * bank numbers.)
- * @return a DSSI_Program_Descriptor pointer that is
- * guaranteed to be valid only until the next call to get_program,
- * deactivate, or configure, on the same plug-in instance, or NULL if index is out of range.
- */
-const DSSI_Program_Descriptor* DSSIaudiooutput::getProgram (unsigned long index)
-{
- static DSSI_Program_Descriptor retVal;
-
- /* Make sure we have the list of banks loaded */
- initBanks();
-
- /* Make sure that the bank containing the instrument has been mapped */
- while (index >= programMap.size() && mapNextBank())
- /* DO NOTHING MORE */;
-
- if(index >= programMap.size())
- {
- /* No more instruments */
- return NULL;
- }
- else
- {
- /* OK, return the instrument */
- retVal.Name = programMap[index].name.c_str();
- retVal.Program = programMap[index].program;
- retVal.Bank = programMap[index].bank;
- return &retVal;
- }
-}
-
-/**
- * Selects a new program for this synth.
- *
- * This DSSI member function selects a new program for this synth. The program
- * change will take effect immediately at the start of the next run_synth()
- * call. An invalid bank / instrument combination is ignored.
- *
- * Zyn Implementation
- * ------------------
- * the banks and instruments are as shown in the `instrument -> show instrument
- * bank` command in Zyn. The bank no is a 1-based index into the list of banks
- * Zyn loads and shows in the drop down and the program number is the
- * instrument within that bank.
- *
- * @param bank [in] the bank number to select
- * @param program [in] the program number within the bank to select
- */
-void DSSIaudiooutput::selectProgram(unsigned long bank, unsigned long program)
-{
- initBanks();
-// cerr << "selectProgram(" << (bank & 0x7F) << ':' << ((bank >> 7) & 0x7F) << "," << program << ")" << '\n';
- if(bank < MAX_NUM_BANKS && program < BANK_SIZE)
- {
- char* bankdir = master->bank.banks[ bank ].dir;
- if(bankdir != NULL)
- {
- pthread_mutex_lock(&master->mutex);
-
- /* We have to turn off the CheckPADsynth functionality, else
- * the program change takes way too long and we get timeouts
- * and hence zombies (!) */
- int save = config.cfg.CheckPADsynth;
- config.cfg.CheckPADsynth = 0;
-
- /* Load the bank... */
- master->bank.loadbank(bankdir);
-
- /* restore the CheckPADsynth flag */
- config.cfg.CheckPADsynth = save;
-
- /* Now load the instrument... */
- master->bank.loadfromslot((unsigned int)program, master->part[0]);
-
- pthread_mutex_unlock(&master->mutex);
- }
- }
-}
-
-/**
- * Returns the MIDI controller number or NRPN for a input control port
- *
- * This DSSI member function returns the MIDI controller number or NRPN that
- * should be mapped to the given input control port. If the given port should
- * not have any MIDI controller mapped to it, the function will return DSSI_NONE.
- * The behaviour of this function is undefined if the given port
- * number does not correspond to an input control port.
- *
- * Zyn Implementation
- * ------------------
- * Currently Zyn does not define any controller ports, but may do in the future.
- *
- * @param port [in] the input controller port
- * @return the CC and NRPN values shifted and ORed together.
- */
-int DSSIaudiooutput::getMidiControllerForPort(unsigned long port)
-{
- return DSSI_NONE;
-}
-
-/**
- * Runs the synth for a block.
- *
- * This DSSI member function runs the synth for a block. This is identical in
- * function to the LADSPA run() function, except that it also supplies events
- * to the synth.
- *
- * Zyn Implementation
- * ------------------
- * Zyn implements synthesis in Master::GetAudioOutSamples; runSynth calls this
- * function in chunks delimited by the sample_count and the frame indexes in
- * the events block, calling the appropriate NoteOn, NoteOff and SetController
- * members of Master to process the events supplied between each chunk.
- *
- * @param sample_count [in] the block size (in samples) for which the synth
- * instance may run.
- * @param events [in] The Events pointer points to a block of ALSA
- * sequencer events, used to communicate MIDI and related events to the synth.
- * Each event must be timestamped relative to the start of the block,
- * (mis)using the ALSA "tick time" field as a frame count. The host is
- * responsible for ensuring that events with differing timestamps are already
- * ordered by time. Must not include NOTE (only NOTE_ON / NOTE_OFF), LSB or MSB
- * events.
- * @param event_count [in] the number of entries in the `events` block
- */
-void DSSIaudiooutput::runSynth(unsigned long sample_count, snd_seq_event_t *events, unsigned long event_count)
-{
- unsigned long from_frame = 0;
- unsigned long event_index = 0;
- unsigned long next_event_frame = 0;
- unsigned long to_frame = 0;
- pthread_mutex_lock(&master->mutex);
-
- do {
- /* Find the time of the next event, if any */
- if(events == NULL || event_index >= event_count)
- next_event_frame = ULONG_MAX;
- else
- next_event_frame = events[event_index].time.tick;
-
- /* find the end of the sub-sample to be processed this time round... */
- /* if the next event falls within the desired sample interval... */
- if(next_event_frame < sample_count && next_event_frame >= to_frame)
- /* set the end to be at that event */
- to_frame = next_event_frame;
- else
- /* ...else go for the whole remaining sample */
- to_frame = sample_count;
- if(from_frame<to_frame)
- {
- // call master to fill from `from_frame` to `to_frame`:
- master->GetAudioOutSamples(to_frame - from_frame, (int)sampleRate, &(outl[from_frame]), &(outr[from_frame]));
- // next sub-sample please...
- from_frame = to_frame;
- }
-
- // Now process any event(s) at the current timing point
- while(events != NULL && event_index < event_count && events[event_index].time.tick == to_frame)
- {
- if(events[event_index].type == SND_SEQ_EVENT_NOTEON)
- {
- master->NoteOn(events[event_index].data.note.channel, events[event_index].data.note.note, events[event_index].data.note.velocity);
- }
- else if(events[event_index].type == SND_SEQ_EVENT_NOTEOFF)
- {
- master->NoteOff(events[event_index].data.note.channel, events[event_index].data.note.note);
- }
- else if(events[event_index].type == SND_SEQ_EVENT_CONTROLLER)
- {
- master->SetController(events[event_index].data.control.channel, events[event_index].data.control.param, events[event_index].data.control.value);
- }
- else
- {
- }
- event_index++;
- }
-
- // Keep going until we have the desired total length of sample...
- } while(to_frame < sample_count);
-
- pthread_mutex_unlock(&master->mutex);
-}
-
-/**
- * Initial entry point for the DSSI plug-in library.
- *
- * This DSSI function is the initial entry point for the plug-in library.
- * The DSSI host looks for this entry point in each shared library object it
- * finds and then calls the function to enumerate the plug-ins within the
- * library.
- *
- * Zyn Implementation
- * ------------------
- * The descriptor is created statically by DSSIaudiooutput::initDssiDescriptor()
- * when the plug-in library is loaded. This function merely returns a pointer to
- * that descriptor.
- *
- * @param index [in] the index number of the plug-in within the library.
- * @return if index is in range, a pointer to the plug-in descriptor is returned, else NULL
- */
-const DSSI_Descriptor* DSSIaudiooutput::getDssiDescriptor(unsigned long index)
-{
- if(index > 0 || dssiDescriptor == NULL)
- return NULL;
- else
- return dssiDescriptor;
-}
-
-//
-// Internal member functions
-//
-
-// Initialise the DSSI descriptor, statically:
-DSSI_Descriptor* DSSIaudiooutput::dssiDescriptor = DSSIaudiooutput::initDssiDescriptor();
-
-/**
- * Initializes the DSSI (and LADSPA) descriptor, returning it is an object.
- */
-DSSI_Descriptor* DSSIaudiooutput::initDssiDescriptor()
-{
- DSSI_Descriptor* newDssiDescriptor = new DSSI_Descriptor;
-
- LADSPA_PortDescriptor* newPortDescriptors;
- char** newPortNames;
- LADSPA_PortRangeHint* newPortRangeHints;
-
- if (newDssiDescriptor)
- {
- LADSPA_Descriptor* newLadspaDescriptor = new LADSPA_Descriptor;
- if (newLadspaDescriptor)
- {
- newLadspaDescriptor->UniqueID = 100;
- newLadspaDescriptor->Label = "ZASF";
- newLadspaDescriptor->Properties = 0;
- newLadspaDescriptor->Name = "ZynAddSubFX";
- newLadspaDescriptor->Maker = "Nasca Octavian Paul <zynaddsubfx at yahoo.com>";
- newLadspaDescriptor->Copyright = "GNU General Public License v.2";
- newLadspaDescriptor->PortCount = 2;
-
- newPortNames = new char *[newLadspaDescriptor->PortCount];
- newPortNames[0] = "Output L";
- newPortNames[1] = "Output R";
- newLadspaDescriptor->PortNames = newPortNames;
-
- newPortDescriptors = new LADSPA_PortDescriptor[newLadspaDescriptor->PortCount];
- newPortDescriptors[0] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
- newPortDescriptors[1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
- newLadspaDescriptor->PortDescriptors = newPortDescriptors;
-
- newPortRangeHints = new LADSPA_PortRangeHint[newLadspaDescriptor->PortCount];
- newPortRangeHints[0].HintDescriptor = 0;
- newPortRangeHints[1].HintDescriptor = 0;
- newLadspaDescriptor->PortRangeHints = newPortRangeHints;
-
- newLadspaDescriptor->activate = stub_activate;
- newLadspaDescriptor->cleanup = stub_cleanup;
- newLadspaDescriptor->connect_port = stub_connectPort;
- newLadspaDescriptor->deactivate = stub_deactivate;
- newLadspaDescriptor->instantiate = instantiate;
- newLadspaDescriptor->run = stub_run;
- newLadspaDescriptor->run_adding = NULL;
- newLadspaDescriptor->set_run_adding_gain = NULL;
- }
- newDssiDescriptor->LADSPA_Plugin = newLadspaDescriptor;
- newDssiDescriptor->DSSI_API_Version = 1;
- newDssiDescriptor->configure = NULL;
- newDssiDescriptor->get_program = stub_getProgram;
- newDssiDescriptor->get_midi_controller_for_port = stub_getMidiControllerForPort;
- newDssiDescriptor->select_program = stub_selectProgram;
- newDssiDescriptor->run_synth = stub_runSynth;
- newDssiDescriptor->run_synth_adding = NULL;
- newDssiDescriptor->run_multiple_synths = NULL;
- newDssiDescriptor->run_multiple_synths_adding = NULL;
- }
-
- dssiDescriptor = newDssiDescriptor;
-
- return dssiDescriptor;
-}
-
-/**
- * Converts a LADSPA / DSSI handle into a DSSIaudiooutput instance.
- *
- * @param instance [in]
- * @return the instance
- */
-DSSIaudiooutput* DSSIaudiooutput::getInstance(LADSPA_Handle instance)
-{
- return (DSSIaudiooutput*)(instance);
-}
-
-/**
- * The private sole constructor for the DSSIaudiooutput class.
- *
- * Only ever called via instantiate().
- * @param sampleRate [in] the sample rate to be used by the synth.
- * @return
- */
-DSSIaudiooutput::DSSIaudiooutput(unsigned long sampleRate)
-{
- this->sampleRate = sampleRate;
- this->banksInited = false;
-
- config.init();
-
- srand(time(NULL));
- denormalkillbuf=new REALTYPE [SOUND_BUFFER_SIZE];
- for (int i=0;i<SOUND_BUFFER_SIZE;i++) denormalkillbuf[i]=(RND-0.5)*1e-16;
-
- this->master = new Master();
-}
-
-/**
- * The destructor for the DSSIaudiooutput class
- * @return
- */
-DSSIaudiooutput::~DSSIaudiooutput()
-{
-}
-
-/**
- * Ensures the list of bank (directories) has been initialised.
- */
-void DSSIaudiooutput::initBanks(void)
-{
- if(!banksInited)
- {
- pthread_mutex_lock(&master->mutex);
- master->bank.rescanforbanks();
- banksInited = true;
- pthread_mutex_unlock(&master->mutex);
- }
-}
-
-/**
- * constructor for the internally used ProgramDescriptor class
- *
- * @param _bank [in] bank number
- * @param _program [in] program number
- * @param _name [in] instrument / sample name
- * @return
- */
-DSSIaudiooutput::ProgramDescriptor::ProgramDescriptor(unsigned long _bank, unsigned long _program, char* _name) :
- bank(_bank), program(_program), name(_name)
-{
-}
-
-/**
- * The map of programs available; held as a single shared statically allocated object.
- */
-vector <DSSIaudiooutput::ProgramDescriptor> DSSIaudiooutput::programMap = vector<DSSIaudiooutput::ProgramDescriptor>();
-
-/**
- * Index controlling the map of banks
- */
-long DSSIaudiooutput::bankNoToMap = 1;
-
-/**
- * Queries and maps the next available bank of instruments.
- *
- * If the program index requested to getProgram() lies beyond the banks mapped to date,
- * this member function is called to map the next one.
- * @return true if a new bank has been found and mapped, else false.
- */
-bool DSSIaudiooutput::mapNextBank()
-{
- pthread_mutex_lock(&master->mutex);
- Bank& bank = master->bank;
- bool retval;
- if(bankNoToMap >= MAX_NUM_BANKS || bank.banks[bankNoToMap].dir == NULL)
- {
- retval = false;
- }
- else
- {
- bank.loadbank(bank.banks[bankNoToMap].dir);
- for(unsigned long instrument = 0; instrument < BANK_SIZE; instrument++)
- {
- char* insName = bank.getname(instrument);
- if(insName != NULL && insName[0] != '\0' && insName[0] != ' ')
- {
- programMap.push_back(ProgramDescriptor(bankNoToMap,instrument,insName));
- }
- }
- bankNoToMap ++;
- retval = true;
- }
- pthread_mutex_unlock(&master->mutex);
- return retval;
-}
diff --git a/plugins/zynaddsubfx/src/Output/DSSIaudiooutput.h b/plugins/zynaddsubfx/src/Output/DSSIaudiooutput.h
deleted file mode 100644
index 076367a..0000000
--- a/plugins/zynaddsubfx/src/Output/DSSIaudiooutput.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- VSTaudiooutput.h - Audio output for VST
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#ifndef VST_AUDIO_OUTPUT_H
-#define VST_AUDIO_OUTPUT_H
-
-#include <pthread.h>
-
-#include "../globals.h"
-#include "../Misc/Master.h"
-
-#include <dssi.h>
-#include <ladspa.h>
-#include <vector>
-
-class DSSIaudiooutput
-{
-public:
- //
- // Static stubs for LADSPA member functions
- //
- static void stub_connectPort(LADSPA_Handle instance, unsigned long port, LADSPA_Data * data);
- static void stub_activate(LADSPA_Handle instance);
- static void stub_run(LADSPA_Handle instance, unsigned long sample_count);
- static void stub_deactivate(LADSPA_Handle Instance);
- static void stub_cleanup(LADSPA_Handle instance);
-
- //
- // Static stubs for DSSI member functions
- //
- static const DSSI_Program_Descriptor* stub_getProgram (LADSPA_Handle instance, unsigned long Index);
- static void stub_selectProgram(LADSPA_Handle instance, unsigned long bank, unsigned long program);
- static int stub_getMidiControllerForPort(LADSPA_Handle instance, unsigned long port);
- static void stub_runSynth(LADSPA_Handle instance, unsigned long sample_count,
- snd_seq_event_t *events, unsigned long event_count);
-
- /*
- * LADSPA member functions
- */
- static LADSPA_Handle instantiate(const LADSPA_Descriptor * descriptor, unsigned long s_rate);
- void connectPort(unsigned long port, LADSPA_Data * data);
- void activate();
- void run(unsigned long sample_count);
- void deactivate();
- void cleanup();
- static const LADSPA_Descriptor* getLadspaDescriptor(unsigned long index);
-
- /*
- * DSSI member functions
- */
- const DSSI_Program_Descriptor* getProgram (unsigned long Index);
- void selectProgram(unsigned long bank, unsigned long program);
- int getMidiControllerForPort(unsigned long port);
- void runSynth(unsigned long sample_count, snd_seq_event_t *events, unsigned long event_count);
- static const DSSI_Descriptor* getDssiDescriptor(unsigned long index);
-
- struct ProgramDescriptor
- {
- unsigned long bank;
- unsigned long program;
- string name;
- ProgramDescriptor(unsigned long _bank, unsigned long _program, char* _name);
- };
-
-private:
-
- DSSIaudiooutput(unsigned long sampleRate);
- ~DSSIaudiooutput();
- static DSSI_Descriptor* initDssiDescriptor();
- static DSSIaudiooutput* getInstance(LADSPA_Handle instance);
- void initBanks();
- bool mapNextBank();
-
- LADSPA_Data *outl;
- LADSPA_Data *outr;
- long sampleRate;
- Master* master;
- static DSSI_Descriptor* dssiDescriptor;
- static string bankDirNames[];
- static
- vector <ProgramDescriptor> programMap;
-
- /**
- * Flag controlling the list of bank directories
- */
- bool banksInited;
-
- static
- long bankNoToMap;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Output/JACK_RTaudiooutput.cpp b/plugins/zynaddsubfx/src/Output/JACK_RTaudiooutput.cpp
deleted file mode 100644
index 2e63e65..0000000
--- a/plugins/zynaddsubfx/src/Output/JACK_RTaudiooutput.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- JACKaudiooutput.cpp - Audio output for JACK
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <pthread.h>
-#include <unistd.h>
-
-
-extern "C"
-{
-#include <jack/ringbuffer.h>
-};
-#include "JACKaudiooutput.h"
-
-Master *jackmaster;
-jack_client_t *jackclient;
-jack_port_t *outport_left, *outport_right;
-jack_ringbuffer_t *rb = NULL;
-
-REALTYPE *jackoutl, *jackoutr;
-int jackfinish = 0;
-
-void *thread_blocked(void *arg);
-int jackprocess(jack_nframes_t nframes, void *arg);
-int jacksrate(jack_nframes_t nframes, void *arg);
-void jackshutdown(void *arg);
-
-pthread_cond_t more_data = PTHREAD_COND_INITIALIZER;
-pthread_mutex_t zyn_thread_lock = PTHREAD_MUTEX_INITIALIZER;
-
-pthread_t bthr;
-
-
-bool JACKaudiooutputinit(Master *master_)
-{
- jackmaster = master_;
- jackclient = 0;
- char tmpstr[100];
-
- jackoutl = new REALTYPE [SOUND_BUFFER_SIZE];
- jackoutr = new REALTYPE [SOUND_BUFFER_SIZE];
-
- int rbbufsize = SOUND_BUFFER_SIZE * sizeof(REALTYPE) * 2 * 2;
- printf("%d\n", rbbufsize);
- rb = jack_ringbuffer_create(rbbufsize);
- for(int i = 0; i < rbbufsize; i++)
- rb->buf[i] = 0.0;
-
-
- for(int i = 0; i < 15; i++) {
- if(i != 0)
- snprintf(tmpstr, 100, "ZynAddSubFX_%d", i);
- else
- snprintf(tmpstr, 100, "ZynAddSubFX");
- jackclient = jack_client_new(tmpstr);
- if(jackclient != 0)
- break;
- }
-
- if(jackclient == 0) {
- fprintf(
- stderr,
- "\nERROR: Cannot make a jack client (possible reasons: JACK server is not running or jackd is launched by root and zynaddsubfx by another user.).\n\n\n");
- return false;
- }
-
- fprintf(stderr,
- "Internal SampleRate = %d\nJack Output SampleRate= %d\n",
- SAMPLE_RATE,
- jack_get_sample_rate(jackclient));
- if((unsigned int)jack_get_sample_rate(jackclient) !=
- (unsigned int) SAMPLE_RATE)
- fprintf(stderr,
- "It is recomanded that the both samplerates to be equal.\n");
-
- jack_set_process_callback(jackclient, jackprocess, 0);
- jack_set_sample_rate_callback(jackclient, jacksrate, 0);
- jack_on_shutdown(jackclient, jackshutdown, 0);
-
- outport_left = jack_port_register(jackclient,
- "out_1",
- JACK_DEFAULT_AUDIO_TYPE,
- JackPortIsOutput | JackPortIsTerminal,
- 0);
- outport_right = jack_port_register(jackclient,
- "out_2",
- JACK_DEFAULT_AUDIO_TYPE,
- JackPortIsOutput | JackPortIsTerminal,
- 0);
-
- if(jack_activate(jackclient)) {
- fprintf(stderr, "Cannot activate jack client\n");
- return false;
- }
-
- pthread_create(&bthr, NULL, thread_blocked, NULL);
-
- /*
- jack_connect(jackclient,jack_port_name(outport_left),"alsa_pcm:out_1");
- jack_connect(jackclient,jack_port_name(outport_right),"alsa_pcm:out_2");
- */
-
- return true;
-}
-
-void *thread_blocked(void *arg)
-{
- int datasize = SOUND_BUFFER_SIZE * sizeof(REALTYPE);
-
- //try to get realtime
- sched_param sc;
- sc.sched_priority = 50;
- int err = sched_setscheduler(0, SCHED_FIFO, &sc);
-
- pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
- pthread_mutex_lock(&zyn_thread_lock);
-
- while(jackfinish == 0) {
- while(jack_ringbuffer_write_space(rb) >= datasize) {
- pthread_mutex_lock(&jackmaster->mutex);
- jackmaster->GetAudioOutSamples(SOUND_BUFFER_SIZE,
- jack_get_sample_rate(jackclient),
- jackoutl,
- jackoutr);
- pthread_mutex_unlock(&jackmaster->mutex);
-
- jack_ringbuffer_write(rb, (char *) jackoutl, datasize);
- jack_ringbuffer_write(rb, (char *) jackoutr, datasize);
- }
- pthread_cond_wait(&more_data, &zyn_thread_lock);
- }
- pthread_mutex_unlock(&zyn_thread_lock);
-
- return 0;
-}
-
-
-int jackprocess(jack_nframes_t nframes, void *arg)
-{
- jack_default_audio_sample_t *outl =
- (jack_default_audio_sample_t *) jack_port_get_buffer(outport_left,
- nframes);
- jack_default_audio_sample_t *outr =
- (jack_default_audio_sample_t *) jack_port_get_buffer(outport_right,
- nframes);
-
- int datasize = nframes * sizeof(REALTYPE);
- int incoming_datasize = SOUND_BUFFER_SIZE * sizeof(REALTYPE);
- int data_read = 0;
-
-
- if(jack_ringbuffer_read_space(rb) >= (2 * incoming_datasize)) {
- if(datasize > incoming_datasize) {
- data_read = 0;
- while(data_read < datasize) {
- jack_ringbuffer_read(rb, (char *) outl + data_read, datasize);
- jack_ringbuffer_read(rb, (char *) outr + data_read, datasize);
- data_read += incoming_datasize;
- }
- }
- else
- if(datasize == incoming_datasize) {
- jack_ringbuffer_read(rb, (char *) outl, datasize);
- jack_ringbuffer_read(rb, (char *) outr, datasize);
- }
- else {}
- }
- else { //the ringbuffer is empty or there are too small amount of samples in it
- for(int i = 0; i < nframes; i++) {
- outl[i] = 0.0;
- outr[i] = 0.0;
- }
- }
- /* if (jack_ringbuffer_read_space(rb)>=datasize){
- jack_ringbuffer_read(rb, (char *) outl,datasize);
- jack_ringbuffer_read(rb, (char *) outr,datasize);
- } else {//the ringbuffer is empty or there are too small amount of samples in it
- for (int i=0;i<nframes;i++){
- outl[i]=0.0;outr[i]=0.0;
- };
- };
- */
- if(pthread_mutex_trylock(&zyn_thread_lock) == 0) {
- pthread_cond_signal(&more_data);
- pthread_mutex_unlock(&zyn_thread_lock);
- }
-
- return 0;
-}
-
-void JACKfinish()
-{
- jackfinish = 1;
- jack_ringbuffer_free(rb);
- jack_client_close(jackclient);
-
- usleep(100000);
- delete (jackoutl);
- delete (jackoutr);
-}
-
-int jacksrate(jack_nframes_t nframes, void *arg)
-{
- return 0;
-}
-
-void jackshutdown(void *arg)
-{}
-
diff --git a/plugins/zynaddsubfx/src/Output/JACKaudiooutput.cpp b/plugins/zynaddsubfx/src/Output/JACKaudiooutput.cpp
deleted file mode 100644
index d3c25fd..0000000
--- a/plugins/zynaddsubfx/src/Output/JACKaudiooutput.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- JACKaudiooutput.cpp - Audio output for JACK
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdlib.h>
-#include <jack/midiport.h>
-#include "JACKaudiooutput.h"
-
-Master *jackmaster;
-jack_client_t *jackclient;
-char jackname[100];
-jack_port_t *outport_left, *outport_right, *midi_inport;
-
-int jackprocess(jack_nframes_t nframes, void *arg);
-int jacksrate(jack_nframes_t nframes, void *arg);
-void jackshutdown(void *arg);
-
-bool JACKaudiooutputinit(Master *master_)
-{
- jackmaster = master_;
- jackclient = 0;
-
- for(int i = 0; i < 15; i++) {
- if(i != 0)
- snprintf(jackname, 100, "ZynAddSubFX_%d", i);
- else
- snprintf(jackname, 100, "ZynAddSubFX");
- jackclient = jack_client_new(jackname);
- if(jackclient != 0)
- break;
- }
-
- if(jackclient == 0) {
- fprintf(
- stderr,
- "\nERROR: Cannot make a jack client (possible reasons: JACK server is not running or jackd is launched by root and zynaddsubfx by another user.).\n");
- return false;
- }
-
- fprintf(stderr,
- "Internal SampleRate = %d\nJack Output SampleRate= %d\n",
- SAMPLE_RATE,
- jack_get_sample_rate(jackclient));
- if((unsigned int)jack_get_sample_rate(jackclient) !=
- (unsigned int) SAMPLE_RATE)
- fprintf(stderr,
- "It is recomanded that the both samplerates to be equal.\n");
-
- jack_set_process_callback(jackclient, jackprocess, 0);
- jack_set_sample_rate_callback(jackclient, jacksrate, 0);
- jack_on_shutdown(jackclient, jackshutdown, 0);
-
- outport_left = jack_port_register(jackclient,
- "out_1",
- JACK_DEFAULT_AUDIO_TYPE,
- JackPortIsOutput | JackPortIsTerminal,
- 0);
- outport_right = jack_port_register(jackclient,
- "out_2",
- JACK_DEFAULT_AUDIO_TYPE,
- JackPortIsOutput | JackPortIsTerminal,
- 0);
- midi_inport = jack_port_register(jackclient,
- "midi_input",
- JACK_DEFAULT_MIDI_TYPE,
- JackPortIsInput | JackPortIsTerminal,
- 0);
-
- if(jack_activate(jackclient)) {
- fprintf(stderr, "Cannot activate jack client\n");
- return false;
- }
-
- /*
- jack_connect(jackclient,jack_port_name(outport_left),"alsa_pcm:out_1");
- jack_connect(jackclient,jack_port_name(outport_right),"alsa_pcm:out_2");
- */
- return true;
-}
-
-int jackprocess(jack_nframes_t nframes, void *arg)
-{
- jack_default_audio_sample_t *outl =
- (jack_default_audio_sample_t *) jack_port_get_buffer(outport_left,
- nframes);
- jack_default_audio_sample_t *outr =
- (jack_default_audio_sample_t *) jack_port_get_buffer(outport_right,
- nframes);
-
- if(!pthread_mutex_trylock(&jackmaster->mutex)) {
- JACKhandlemidi(nframes);
- jackmaster->GetAudioOutSamples(nframes, jack_get_sample_rate(
- jackclient), outl, outr);
- pthread_mutex_unlock(&jackmaster->mutex);
- }
- else {
- memset(outl, 0, sizeof(jack_default_audio_sample_t) * nframes);
- memset(outr, 0, sizeof(jack_default_audio_sample_t) * nframes);
- }
-
- return 0;
-}
-
-void JACKfinish()
-{
- jack_client_close(jackclient);
-}
-
-int jacksrate(jack_nframes_t nframes, void *arg)
-{
- return 0;
-}
-
-void jackshutdown(void *arg)
-{}
-
-
-void JACKhandlemidi(unsigned long frames)
-{
- // We must have the master mutex before we run this function
-
- // XXX This is really nasty, not only do we lose the sample accuracy of
- // JACK MIDI, but any accuracy at all below the buffer size
-
- void *midi_buf = jack_port_get_buffer(midi_inport, frames);
- jack_midi_event_t jack_midi_event;
- jack_nframes_t event_index = 0;
- unsigned char *midi_data;
- unsigned char type, chan;
-
- while(jack_midi_event_get(&jack_midi_event, midi_buf,
- event_index++) == 0) {
- midi_data = jack_midi_event.buffer;
- type = midi_data[0] & 0xF0;
- chan = midi_data[0] & 0x0F;
-
- switch(type) {
- case 0x80: /* note-off */
- jackmaster->NoteOff(chan, midi_data[1]);
- break;
-
- case 0x90: /* note-on */
- jackmaster->NoteOn(chan, midi_data[1], midi_data[2]);
- break;
-
- case 0xB0: /* controller */
- jackmaster->SetController(chan, midi_data[1], midi_data[2]);
- break;
-
- case 0xE0: /* pitch bend */
- jackmaster->SetController(chan, C_pitchwheel,
- ((midi_data[2] << 7) | midi_data[1]));
- break;
-
- /* XXX TODO: handle MSB/LSB controllers and RPNs and NRPNs */
- }
- }
-}
-
-
-const char *JACKgetname()
-{
- if(jackclient != NULL)
- return jackname;
- return NULL;
-}
-
diff --git a/plugins/zynaddsubfx/src/Output/JACKaudiooutput.h b/plugins/zynaddsubfx/src/Output/JACKaudiooutput.h
deleted file mode 100644
index afc5e5b..0000000
--- a/plugins/zynaddsubfx/src/Output/JACKaudiooutput.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- JACKaudiooutput.h - Audio output for JACK
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#ifndef JACK_AUDIO_OUTPUT_H
-#define JACK_AUDIO_OUTPUT_H
-
-#include <jack/jack.h>
-
-#include "../globals.h"
-#include "../Misc/Master.h"
-
-
-#if (REALTYPE != jack_default_audio_sample_t)
-#error \
- "The internal sample datatype of ZynAddSubFX and the datatype of jack differs. \
- In order to compile ZynAddSubFX the 'REALTYPE' and 'jack_default_audio_sample_t' must be equal. \
- Set the 'REALTYPE' data type (which is defined in 'globals.h') to what is defined \
- in the file types.h from jack include directory as 'jack_default_audio_sample_t' (as float or double)."
-#endif
-
-
-
-
-bool JACKaudiooutputinit(Master *master_);
-void JACKfinish();
-void JACKhandlemidi(unsigned long frames);
-const char *JACKgetname();
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Output/OSSaudiooutput.cpp b/plugins/zynaddsubfx/src/Output/OSSaudiooutput.cpp
deleted file mode 100644
index f6c6b3f..0000000
--- a/plugins/zynaddsubfx/src/Output/OSSaudiooutput.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- OSSaudiooutput.cpp - Audio output for Open Sound System
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/soundcard.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <iostream>
-
-#include "OSSaudiooutput.h"
-#include "../Misc/Util.h"
-#include "../globals.h"
-using namespace std;
-
-OSSaudiooutput::OSSaudiooutput()
-{
- int i;
- int snd_bitsize = 16;
- snd_fragment = 0x00080009; //fragment size (?)
- snd_stereo = 1; //stereo
- snd_format = AFMT_S16_LE;
- snd_samplerate = SAMPLE_RATE;
- playing_until.tv_sec = 0;
- playing_until.tv_usec = 0;
-
- smps = new short int[SOUND_BUFFER_SIZE * 2];
- for(i = 0; i < SOUND_BUFFER_SIZE * 2; i++)
- smps[i] = 0;
-
- snd_handle = open(config.cfg.LinuxOSSWaveOutDev, O_WRONLY, 0);
- if(snd_handle == -1) {
- cerr << "ERROR - I can't open the ";
- cerr << config.cfg.LinuxOSSWaveOutDev << '.' << endl;
- return;
- }
- ioctl(snd_handle, SNDCTL_DSP_RESET, NULL);
-
- ioctl(snd_handle, SNDCTL_DSP_SETFMT, &snd_format);
- ioctl(snd_handle, SNDCTL_DSP_STEREO, &snd_stereo);
- ioctl(snd_handle, SNDCTL_DSP_SPEED, &snd_samplerate);
- ioctl(snd_handle, SNDCTL_DSP_SAMPLESIZE, &snd_bitsize);
- ioctl(snd_handle, SNDCTL_DSP_SETFRAGMENT, &snd_fragment);
-}
-
-
-/*
- * Output the samples to the soundcard
- * The samples are bigger than -1.0 and smaller 1.0
- */
-void OSSaudiooutput::OSSout(REALTYPE *smp_left, REALTYPE *smp_right)
-{
- int i;
- REALTYPE l, r;
- if(snd_handle < 0) { //output could not be opened
- struct timeval now;
- int remaining;
- gettimeofday(&now, NULL);
- if((playing_until.tv_usec == 0) && (playing_until.tv_sec == 0)) {
- playing_until.tv_usec = now.tv_usec;
- playing_until.tv_sec = now.tv_sec;
- }
- else {
- remaining = (playing_until.tv_usec - now.tv_usec)
- + (playing_until.tv_sec - now.tv_sec) * 1000000;
- if(remaining > 10000) //Don't sleep() less than 10ms.
- //This will add latency...
- usleep(remaining - 10000);
- if(remaining < 0)
- cerr << "WARNING - too late" << endl;
- }
- playing_until.tv_usec += SOUND_BUFFER_SIZE * 1000000 / SAMPLE_RATE;
- if(remaining < 0)
- playing_until.tv_usec -= remaining;
- playing_until.tv_sec += playing_until.tv_usec / 1000000;
- playing_until.tv_usec %= 1000000;
- return;
- }
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- l = smp_left[i];
- r = smp_right[i];
-
- if(l < -1.0)
- l = -1.0;
- else
- if(l > 1.0)
- l = 1.0;
- if(r < -1.0)
- r = -1.0;
- else
- if(r > 1.0)
- r = 1.0;
-
- smps[i * 2] = (short int) (l * 32767.0);
- smps[i * 2 + 1] = (short int) (r * 32767.0);
- }
- write(snd_handle, smps, SOUND_BUFFER_SIZE * 4); // *2 because is 16 bit, again * 2 because is stereo
-}
-
-
-OSSaudiooutput::~OSSaudiooutput()
-{
- close(snd_handle);
- delete [] smps;
-}
-
diff --git a/plugins/zynaddsubfx/src/Output/OSSaudiooutput.h b/plugins/zynaddsubfx/src/Output/OSSaudiooutput.h
deleted file mode 100644
index 28da1cf..0000000
--- a/plugins/zynaddsubfx/src/Output/OSSaudiooutput.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- OSSaudiooutput.h - Audio output for Open Sound System
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef OSS_AUDIO_OUTPUT_H
-#define OSS_AUDIO_OUTPUT_H
-
-#include <sys/time.h>
-#include "../globals.h"
-
-class OSSaudiooutput
-{
- public:
- OSSaudiooutput();
- ~OSSaudiooutput();
-
- //the out is [-1.0 .. 1.0]
- /* smp_left[] and smp_right[] has the size of SOUND_BUFFER_SIZE */
- void OSSout(REALTYPE *smp_left, REALTYPE *smp_right);
- private:
- int snd_handle;
- int snd_fragment;
- int snd_stereo;
- int snd_format;
- int snd_samplerate;
- struct timeval playing_until;
-
- short int *smps; //Samples to be sent to soundcard
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Output/PAaudiooutput.cpp b/plugins/zynaddsubfx/src/Output/PAaudiooutput.cpp
deleted file mode 100644
index bfd84cc..0000000
--- a/plugins/zynaddsubfx/src/Output/PAaudiooutput.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PAaudiooutput.cpp - Audio output for PortAudio
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "PAaudiooutput.h"
-
-Master *PAmaster;
-PaStream *stream;
-REALTYPE *outl, *outr;
-
-int PAprocess(void *inputBuffer, void *outputBuffer,
- unsigned long framesPerBuffer,
- PaTimestamp outTime, void *userData)
-{
- if(framesPerBuffer != SOUND_BUFFER_SIZE) {
- fprintf(
- stderr,
- "Bug: PAudioOutput::PAprocess SOUND_BUFFER_SIZE!=framesPerBuffer");
- fprintf(stderr, "%d %d\n", framesPerBuffer, SOUND_BUFFER_SIZE);
- }
-
- pthread_mutex_lock(&PAmaster->mutex);
- PAmaster->GetAudioOutSamples(SOUND_BUFFER_SIZE, SAMPLE_RATE, outl, outr);
- pthread_mutex_unlock(&PAmaster->mutex);
-
- float *out = (float *)outputBuffer;
-
- for(int i = 0; i < framesPerBuffer; i++) {
- if(i >= SOUND_BUFFER_SIZE)
- break; //this should never happens, except only when framesPerBuffer!>SOUND_BUFFER_SIZE
- out[i * 2] = outl[i];
- out[i * 2 + 1] = outr[i];
- }
-
- return 0;
-}
-
-void PAaudiooutputinit(Master *master_)
-{
- PAmaster = master_;
- outl = new REALTYPE [SOUND_BUFFER_SIZE];
- outr = new REALTYPE [SOUND_BUFFER_SIZE];
- Pa_Initialize();
- Pa_OpenDefaultStream(&stream,
- 0,
- 2,
- paFloat32,
- SAMPLE_RATE,
- SOUND_BUFFER_SIZE,
- 0,
- PAprocess,
- NULL);
- Pa_StartStream(stream);
-}
-
-void PAfinish()
-{
- Pa_StopStream(stream);
- delete (outl);
- delete (outr);
-}
-
diff --git a/plugins/zynaddsubfx/src/Output/PAaudiooutput.h b/plugins/zynaddsubfx/src/Output/PAaudiooutput.h
deleted file mode 100644
index 942011d..0000000
--- a/plugins/zynaddsubfx/src/Output/PAaudiooutput.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PAaudiooutput.h - Audio output for PortAudio
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#ifndef PA_AUDIO_OUTPUT_H
-#define PA_AUDIO_OUTPUT_H
-
-#include <portaudio.h>
-
-#include "../globals.h"
-#include "../Misc/Master.h"
-
-void PAaudiooutputinit(Master *master_);
-void PAfinish();
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Output/Recorder.cpp b/plugins/zynaddsubfx/src/Output/Recorder.cpp
deleted file mode 100644
index 244047c..0000000
--- a/plugins/zynaddsubfx/src/Output/Recorder.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Recorder.cpp - Records sound to a file
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <sys/stat.h>
-#include "Recorder.h"
-
-Recorder::Recorder()
-{
- recordbuf_16bit = new short int [SOUND_BUFFER_SIZE * 2];
- status = 0;
- notetrigger = 0;
- for(int i = 0; i < SOUND_BUFFER_SIZE * 2; i++)
- recordbuf_16bit[i] = 0;
-}
-
-Recorder::~Recorder()
-{
- if(recording() == 1)
- stop();
- delete [] recordbuf_16bit;
-}
-
-int Recorder::preparefile(std::string filename_, int overwrite)
-{
- if(!overwrite) {
- struct stat fileinfo;
- int statr;
- statr = stat(filename_.c_str(), &fileinfo);
- if(statr == 0) //file exists
- return 1;
- }
-
- if(!wav.newfile(filename_, SAMPLE_RATE, 2))
- return 2;
-
- status = 1; //ready
-
- return 0;
-}
-
-void Recorder::start()
-{
- notetrigger = 0;
- status = 2; //recording
-}
-
-void Recorder::stop()
-{
- wav.close();
- status = 0;
-}
-
-void Recorder::pause()
-{
- status = 0;
-}
-
-int Recorder::recording()
-{
- if((status == 2) && (notetrigger != 0))
- return 1;
- else
- return 0;
-}
-
-void Recorder::recordbuffer(REALTYPE *outl, REALTYPE *outr)
-{
- int tmp;
- if(status != 2)
- return;
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tmp = (int)(outl[i] * 32767.0);
- if(tmp < -32768)
- tmp = -32768;
- if(tmp > 32767)
- tmp = 32767;
- recordbuf_16bit[i * 2] = tmp;
-
- tmp = (int)(outr[i] * 32767.0);
- if(tmp < -32768)
- tmp = -32768;
- if(tmp > 32767)
- tmp = 32767;
- recordbuf_16bit[i * 2 + 1] = tmp;
- }
- wav.write_stereo_samples(SOUND_BUFFER_SIZE, recordbuf_16bit);
-}
-
-void Recorder::triggernow()
-{
- if(status == 2)
- notetrigger = 1;
-}
-
diff --git a/plugins/zynaddsubfx/src/Output/Recorder.h b/plugins/zynaddsubfx/src/Output/Recorder.h
deleted file mode 100644
index 997ed37..0000000
--- a/plugins/zynaddsubfx/src/Output/Recorder.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Recorder.h - Records sound to a file
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef RECORDER_H
-#define RECORDER_H
-#include <string>
-#include "../globals.h"
-#include "WAVaudiooutput.h"
-
-/**Records sound to a file*/
-class Recorder
-{
- public:
-
- Recorder();
- ~Recorder();
- int preparefile(std::string filename_, int overwrite); //returns 1 if the file exists
- void start();
- void stop();
- void pause();
- int recording();
- void triggernow();
- void recordbuffer(REALTYPE *outl, REALTYPE *outr);
-
- /** Status:
- * 0 - not ready(no file selected),
- * 1 - ready
- * 2 - recording */
- int status;
-
- private:
- WAVaudiooutput wav;
- short int *recordbuf_16bit;
- int notetrigger;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Output/VSTaudiooutput.cpp b/plugins/zynaddsubfx/src/Output/VSTaudiooutput.cpp
deleted file mode 100644
index 494a127..0000000
--- a/plugins/zynaddsubfx/src/Output/VSTaudiooutput.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- VSTaudiooutput.cpp - Audio output for VST
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#include <string.h>
-#include "VSTaudiooutput.h"
-
-//the constructor and the destructor are defined in main.cpp
-
-void VSTSynth::process(float **inputs, float **outputs, long sampleframes)
-{
- float *outl = outputs[0];
- float *outr = outputs[1];
- pthread_mutex_lock(&vmaster->mutex);
- vmaster->GetAudioOutSamples(sampleframes, (int) getSampleRate(), outl, outr);
- pthread_mutex_unlock(&vmaster->mutex);
-}
-
-void VSTSynth::processReplacing(float **inputs,
- float **outputs,
- long sampleframes)
-{
- process(inputs, outputs, sampleframes);
-}
-
-long int VSTSynth::canDo(char *txt)
-{
- if(strcmp(txt, "receiveVstEvents") == 0)
- return 1;
- if(strcmp(txt, "receiveVstMidiEvent") == 0)
- return 1;
- return -1;
-}
-
-bool VSTSynth::getVendorString(char *txt)
-{
- strcpy(txt, "Nasca O. Paul");
- return true;
-}
-
-bool VSTSynth::getProductString(char *txt)
-{
- strcpy(txt, "ZynAddSubFX");
- return true;
-}
-
-void VSTSynth::resume()
-{
- wantEvents();
-}
-
diff --git a/plugins/zynaddsubfx/src/Output/VSTaudiooutput.h b/plugins/zynaddsubfx/src/Output/VSTaudiooutput.h
deleted file mode 100644
index 1fe0afd..0000000
--- a/plugins/zynaddsubfx/src/Output/VSTaudiooutput.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- VSTaudiooutput.h - Audio output for VST
- Copyright (C) 2002 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#ifndef VST_AUDIO_OUTPUT_H
-#define VST_AUDIO_OUTPUT_H
-
-#include <pthread.h>
-
-#include "../globals.h"
-#include "../Misc/Master.h"
-#include "../UI/MasterUI.h"
-
-#include "../../../vstsdk2/source/common/audioeffectx.h"
-
-class VSTSynth:public AudioEffectX
-{
- public:
- VSTSynth(audioMasterCallback audioMaster);
- ~VSTSynth();
-
- virtual void process(float **inputs, float **outputs, long sampleframes);
- virtual void processReplacing(float **inputs,
- float **outputs,
- long sampleframes);
- virtual long processEvents(VstEvents *events); //this is used for Midi input
- virtual long int canDo(char *txt);
- virtual bool getVendorString(char *txt);
- virtual bool getProductString(char *txt);
- virtual void resume();
-
- virtual long getChunk(void **data, bool isPreset = false);
- virtual long setChunk(void *data, long size, bool isPreset = false);
-
- MasterUI *ui;
- int Pexitprogram;
-
- Master *vmaster;
- pthread_t thr;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Output/WAVaudiooutput.cpp b/plugins/zynaddsubfx/src/Output/WAVaudiooutput.cpp
deleted file mode 100644
index cc1f87c..0000000
--- a/plugins/zynaddsubfx/src/Output/WAVaudiooutput.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- Copyright (C) 2006 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "WAVaudiooutput.h"
-using namespace std;
-
-WAVaudiooutput::WAVaudiooutput()
-{
- file = NULL;
- sampleswritten = 0;
- samplerate = 44100;
-}
-
-WAVaudiooutput::~WAVaudiooutput()
-{
- close();
-}
-
-bool WAVaudiooutput::newfile(string filename, int samplerate, int channels)
-{
- /**\todo Move this into the Constructor*/
- close(); //inchide un posibil fisier existent
- file = fopen(filename.c_str(), "w");
- if(!file)
- return false;
- this->samplerate = samplerate;
- this->channels = channels;
- sampleswritten = 0;
- char tmp[44];
- fwrite(tmp, 1, 44, file);
- return true;
-}
-
-void WAVaudiooutput::close()
-{
- if(file) {
- unsigned int chunksize;
- rewind(file);
-
- fwrite("RIFF", 4, 1, file);
- chunksize = sampleswritten * 4 + 36;
- fwrite(&chunksize, 4, 1, file);
-
- fwrite("WAVEfmt ", 8, 1, file);
- chunksize = 16;
- fwrite(&chunksize, 4, 1, file);
- unsigned short int formattag = 1; //uncompresed wave
- fwrite(&formattag, 2, 1, file);
- unsigned short int nchannels = channels; //stereo
- fwrite(&nchannels, 2, 1, file);
- unsigned int samplerate_ = samplerate; //samplerate
- fwrite(&samplerate_, 4, 1, file);
- unsigned int bytespersec = samplerate * 2 * channels; //bytes/sec
- fwrite(&bytespersec, 4, 1, file);
- unsigned short int blockalign = 2 * channels; //2 channels * 16 bits/8
- fwrite(&blockalign, 2, 1, file);
- unsigned short int bitspersample = 16;
- fwrite(&bitspersample, 2, 1, file);
-
- fwrite("data", 4, 1, file);
- chunksize = sampleswritten * blockalign;
- fwrite(&chunksize, 4, 1, file);
-
- fclose(file);
- file = NULL;
- }
-}
-
-void WAVaudiooutput::write_stereo_samples(int nsmps, short int *smps)
-{
- if(!file)
- return;
- fwrite(smps, nsmps, 4, file);
- sampleswritten += nsmps;
-}
-
-void WAVaudiooutput::write_mono_samples(int nsmps, short int *smps)
-{
- if(!file)
- return;
- fwrite(smps, nsmps, 2, file);
- sampleswritten += nsmps;
-}
-
diff --git a/plugins/zynaddsubfx/src/Output/WAVaudiooutput.h b/plugins/zynaddsubfx/src/Output/WAVaudiooutput.h
deleted file mode 100644
index 193fb19..0000000
--- a/plugins/zynaddsubfx/src/Output/WAVaudiooutput.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-
- Copyright (C) 2008 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#ifndef WAVOUTPUT_H
-#define WAVOUTPUT_H
-#include <string>
-
-class WAVaudiooutput
-{
- public:
- WAVaudiooutput();
- ~WAVaudiooutput();
-
- bool newfile(std::string filename, int samplerate, int channels);
- void close();
-
- void write_mono_samples(int nsmps, short int *smps);
- void write_stereo_samples(int nsmps, short int *smps);
-
- private:
- int sampleswritten;
- int samplerate;
- int channels;
- FILE *file;
-};
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/ADnoteParameters.cpp b/plugins/zynaddsubfx/src/Params/ADnoteParameters.cpp
deleted file mode 100644
index 91f3449..0000000
--- a/plugins/zynaddsubfx/src/Params/ADnoteParameters.cpp
+++ /dev/null
@@ -1,840 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- ADnoteParameters.cpp - Parameters for ADnote (ADsynth)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-
-#include "ADnoteParameters.h"
-int ADnote_unison_sizes[] =
-{1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 25, 30, 40, 50, 0};
-
-ADnoteParameters::ADnoteParameters(FFTwrapper *fft_)
- :PresetsArray()
-{
- setpresettype("Padsyth");
- fft = fft_;
-
- GlobalPar.FreqEnvelope = new EnvelopeParams(0, 0);
- GlobalPar.FreqEnvelope->ASRinit(64, 50, 64, 60);
- GlobalPar.FreqLfo = new LFOParams(70, 0, 64, 0, 0, 0, 0, 0);
-
- GlobalPar.AmpEnvelope = new EnvelopeParams(64, 1);
- GlobalPar.AmpEnvelope->ADSRinit_dB(0, 40, 127, 25);
- GlobalPar.AmpLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 1);
-
- GlobalPar.GlobalFilter = new FilterParams(2, 94, 40);
- GlobalPar.FilterEnvelope = new EnvelopeParams(0, 1);
- GlobalPar.FilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64);
- GlobalPar.FilterLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 2);
- GlobalPar.Reson = new Resonance();
-
- for(int nvoice = 0; nvoice < NUM_VOICES; nvoice++)
- EnableVoice(nvoice);
-
- defaults();
-}
-
-void ADnoteParameters::defaults()
-{
- //Default Parameters
- /* Frequency Global Parameters */
- GlobalPar.PStereo = 1; //stereo
- GlobalPar.PDetune = 8192; //zero
- GlobalPar.PCoarseDetune = 0;
- GlobalPar.PDetuneType = 1;
- GlobalPar.FreqEnvelope->defaults();
- GlobalPar.FreqLfo->defaults();
- GlobalPar.PBandwidth = 64;
-
- /* Amplitude Global Parameters */
- GlobalPar.PVolume = 90;
- GlobalPar.PPanning = 64; //center
- GlobalPar.PAmpVelocityScaleFunction = 64;
- GlobalPar.AmpEnvelope->defaults();
- GlobalPar.AmpLfo->defaults();
- GlobalPar.PPunchStrength = 0;
- GlobalPar.PPunchTime = 60;
- GlobalPar.PPunchStretch = 64;
- GlobalPar.PPunchVelocitySensing = 72;
- GlobalPar.Hrandgrouping = 0;
-
- /* Filter Global Parameters*/
- GlobalPar.PFilterVelocityScale = 64;
- GlobalPar.PFilterVelocityScaleFunction = 64;
- GlobalPar.GlobalFilter->defaults();
- GlobalPar.FilterEnvelope->defaults();
- GlobalPar.FilterLfo->defaults();
- GlobalPar.Reson->defaults();
-
-
- for(int nvoice = 0; nvoice < NUM_VOICES; nvoice++)
- defaults(nvoice);
- ;
- VoicePar[0].Enabled = 1;
-}
-
-/*
- * Defaults a voice
- */
-void ADnoteParameters::defaults(int n)
-{
- int nvoice = n;
- VoicePar[nvoice].Enabled = 0;
-
- VoicePar[nvoice].Unison_size = 1;
- VoicePar[nvoice].Unison_frequency_spread = 60;
- VoicePar[nvoice].Unison_stereo_spread = 64;
- VoicePar[nvoice].Unison_vibratto = 64;
- VoicePar[nvoice].Unison_vibratto_speed = 64;
- VoicePar[nvoice].Unison_invert_phase = 0;
-
- VoicePar[nvoice].Type = 0;
- VoicePar[nvoice].Pfixedfreq = 0;
- VoicePar[nvoice].PfixedfreqET = 0;
- VoicePar[nvoice].Presonance = 1;
- VoicePar[nvoice].Pfilterbypass = 0;
- VoicePar[nvoice].Pextoscil = -1;
- VoicePar[nvoice].PextFMoscil = -1;
- VoicePar[nvoice].Poscilphase = 64;
- VoicePar[nvoice].PFMoscilphase = 64;
- VoicePar[nvoice].PDelay = 0;
- VoicePar[nvoice].PVolume = 100;
- VoicePar[nvoice].PVolumeminus = 0;
- VoicePar[nvoice].PPanning = 64; //center
- VoicePar[nvoice].PDetune = 8192; //8192=0
- VoicePar[nvoice].PCoarseDetune = 0;
- VoicePar[nvoice].PDetuneType = 0;
- VoicePar[nvoice].PFreqLfoEnabled = 0;
- VoicePar[nvoice].PFreqEnvelopeEnabled = 0;
- VoicePar[nvoice].PAmpEnvelopeEnabled = 0;
- VoicePar[nvoice].PAmpLfoEnabled = 0;
- VoicePar[nvoice].PAmpVelocityScaleFunction = 127;
- VoicePar[nvoice].PFilterEnabled = 0;
- VoicePar[nvoice].PFilterEnvelopeEnabled = 0;
- VoicePar[nvoice].PFilterLfoEnabled = 0;
- VoicePar[nvoice].PFMEnabled = 0;
-
- //I use the internal oscillator (-1)
- VoicePar[nvoice].PFMVoice = -1;
-
- VoicePar[nvoice].PFMVolume = 90;
- VoicePar[nvoice].PFMVolumeDamp = 64;
- VoicePar[nvoice].PFMDetune = 8192;
- VoicePar[nvoice].PFMCoarseDetune = 0;
- VoicePar[nvoice].PFMDetuneType = 0;
- VoicePar[nvoice].PFMFreqEnvelopeEnabled = 0;
- VoicePar[nvoice].PFMAmpEnvelopeEnabled = 0;
- VoicePar[nvoice].PFMVelocityScaleFunction = 64;
-
- VoicePar[nvoice].OscilSmp->defaults();
- VoicePar[nvoice].FMSmp->defaults();
-
- VoicePar[nvoice].AmpEnvelope->defaults();
- VoicePar[nvoice].AmpLfo->defaults();
-
- VoicePar[nvoice].FreqEnvelope->defaults();
- VoicePar[nvoice].FreqLfo->defaults();
-
- VoicePar[nvoice].VoiceFilter->defaults();
- VoicePar[nvoice].FilterEnvelope->defaults();
- VoicePar[nvoice].FilterLfo->defaults();
-
- VoicePar[nvoice].FMFreqEnvelope->defaults();
- VoicePar[nvoice].FMAmpEnvelope->defaults();
-}
-
-
-
-/*
- * Init the voice parameters
- */
-void ADnoteParameters::EnableVoice(int nvoice)
-{
- VoicePar[nvoice].OscilSmp = new OscilGen(fft, GlobalPar.Reson);
- VoicePar[nvoice].FMSmp = new OscilGen(fft, NULL);
-
- VoicePar[nvoice].AmpEnvelope = new EnvelopeParams(64, 1);
- VoicePar[nvoice].AmpEnvelope->ADSRinit_dB(0, 100, 127, 100);
- VoicePar[nvoice].AmpLfo = new LFOParams(90, 32, 64, 0, 0, 30, 0, 1);
-
- VoicePar[nvoice].FreqEnvelope = new EnvelopeParams(0, 0);
- VoicePar[nvoice].FreqEnvelope->ASRinit(30, 40, 64, 60);
- VoicePar[nvoice].FreqLfo = new LFOParams(50, 40, 0, 0, 0, 0, 0, 0);
-
- VoicePar[nvoice].VoiceFilter = new FilterParams(2, 50, 60);
- VoicePar[nvoice].FilterEnvelope = new EnvelopeParams(0, 0);
- VoicePar[nvoice].FilterEnvelope->ADSRinit_filter(90, 70, 40, 70, 10, 40);
- VoicePar[nvoice].FilterLfo = new LFOParams(50, 20, 64, 0, 0, 0, 0, 2);
-
- VoicePar[nvoice].FMFreqEnvelope = new EnvelopeParams(0, 0);
- VoicePar[nvoice].FMFreqEnvelope->ASRinit(20, 90, 40, 80);
- VoicePar[nvoice].FMAmpEnvelope = new EnvelopeParams(64, 1);
- VoicePar[nvoice].FMAmpEnvelope->ADSRinit(80, 90, 127, 100);
-}
-
-/*
- * Get the Multiplier of the fine detunes of the voices
- */
-REALTYPE ADnoteParameters::getBandwidthDetuneMultiplier()
-{
- REALTYPE bw = (GlobalPar.PBandwidth - 64.0) / 64.0;
- bw = pow(2.0, bw * pow(fabs(bw), 0.2) * 5.0);
-
- return bw;
-}
-
-/*
- * Get the unison spread in cents for a voice
- */
-
-REALTYPE ADnoteParameters::getUnisonFrequencySpreadCents(int nvoice) {
- REALTYPE unison_spread = VoicePar[nvoice].Unison_frequency_spread / 127.0;
- unison_spread = pow(unison_spread * 2.0, 2.0) * 50.0; //cents
- return unison_spread;
-}
-
-/*
- * Kill the voice
- */
-void ADnoteParameters::KillVoice(int nvoice)
-{
- delete (VoicePar[nvoice].OscilSmp);
- delete (VoicePar[nvoice].FMSmp);
-
- delete (VoicePar[nvoice].AmpEnvelope);
- delete (VoicePar[nvoice].AmpLfo);
-
- delete (VoicePar[nvoice].FreqEnvelope);
- delete (VoicePar[nvoice].FreqLfo);
-
- delete (VoicePar[nvoice].VoiceFilter);
- delete (VoicePar[nvoice].FilterEnvelope);
- delete (VoicePar[nvoice].FilterLfo);
-
- delete (VoicePar[nvoice].FMFreqEnvelope);
- delete (VoicePar[nvoice].FMAmpEnvelope);
-}
-
-ADnoteParameters::~ADnoteParameters()
-{
- delete (GlobalPar.FreqEnvelope);
- delete (GlobalPar.FreqLfo);
- delete (GlobalPar.AmpEnvelope);
- delete (GlobalPar.AmpLfo);
- delete (GlobalPar.GlobalFilter);
- delete (GlobalPar.FilterEnvelope);
- delete (GlobalPar.FilterLfo);
- delete (GlobalPar.Reson);
-
- for(int nvoice = 0; nvoice < NUM_VOICES; nvoice++)
- KillVoice(nvoice);
- ;
-}
-
-int ADnoteParameters::get_unison_size_index(int nvoice) {
- int index = 0;
- if(nvoice >= NUM_VOICES)
- return 0;
- int unison = VoicePar[nvoice].Unison_size;
-
- while(1) {
- if(ADnote_unison_sizes[index] >= unison)
- return index;
- ;
- if(ADnote_unison_sizes[index] == 0)
- return index - 1;
- ;
- index++;
- }
- return 0;
-}
-
-void ADnoteParameters::set_unison_size_index(int nvoice, int index) {
- int unison = 1;
- for(int i = 0; i <= index; i++) {
- unison = ADnote_unison_sizes[i];
- if(unison == 0) {
- unison = ADnote_unison_sizes[i - 1];
- break;
- }
- }
-
- VoicePar[nvoice].Unison_size = unison;
-}
-
-
-
-void ADnoteParameters::add2XMLsection(XMLwrapper *xml, int n)
-{
- int nvoice = n;
- if(nvoice >= NUM_VOICES)
- return;
-
- int oscilused = 0, fmoscilused = 0; //if the oscil or fmoscil are used by another voice
-
- for(int i = 0; i < NUM_VOICES; i++) {
- if(VoicePar[i].Pextoscil == nvoice)
- oscilused = 1;
- if(VoicePar[i].PextFMoscil == nvoice)
- fmoscilused = 1;
- }
-
- xml->addparbool("enabled", VoicePar[nvoice].Enabled);
- if(((VoicePar[nvoice].Enabled == 0) && (oscilused == 0)
- && (fmoscilused == 0)) && (xml->minimal))
- return;
-
-
- xml->addpar("type", VoicePar[nvoice].Type);
-
- xml->addpar("unison_size", VoicePar[nvoice].Unison_size);
- xml->addpar("unison_frequency_spread",
- VoicePar[nvoice].Unison_frequency_spread);
- xml->addpar("unison_stereo_spread", VoicePar[nvoice].Unison_stereo_spread);
- xml->addpar("unison_vibratto", VoicePar[nvoice].Unison_vibratto);
- xml->addpar("unison_vibratto_speed", VoicePar[nvoice].Unison_vibratto_speed);
- xml->addpar("unison_invert_phase", VoicePar[nvoice].Unison_invert_phase);
-
- xml->addpar("delay", VoicePar[nvoice].PDelay);
- xml->addparbool("resonance", VoicePar[nvoice].Presonance);
-
- xml->addpar("ext_oscil", VoicePar[nvoice].Pextoscil);
- xml->addpar("ext_fm_oscil", VoicePar[nvoice].PextFMoscil);
-
- xml->addpar("oscil_phase", VoicePar[nvoice].Poscilphase);
- xml->addpar("oscil_fm_phase", VoicePar[nvoice].PFMoscilphase);
-
- xml->addparbool("filter_enabled", VoicePar[nvoice].PFilterEnabled);
- xml->addparbool("filter_bypass", VoicePar[nvoice].Pfilterbypass);
-
- xml->addpar("fm_enabled", VoicePar[nvoice].PFMEnabled);
-
- xml->beginbranch("OSCIL");
- VoicePar[nvoice].OscilSmp->add2XML(xml);
- xml->endbranch();
-
-
- xml->beginbranch("AMPLITUDE_PARAMETERS");
- xml->addpar("panning", VoicePar[nvoice].PPanning);
- xml->addpar("volume", VoicePar[nvoice].PVolume);
- xml->addparbool("volume_minus", VoicePar[nvoice].PVolumeminus);
- xml->addpar("velocity_sensing", VoicePar[nvoice].PAmpVelocityScaleFunction);
-
- xml->addparbool("amp_envelope_enabled",
- VoicePar[nvoice].PAmpEnvelopeEnabled);
- if((VoicePar[nvoice].PAmpEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("AMPLITUDE_ENVELOPE");
- VoicePar[nvoice].AmpEnvelope->add2XML(xml);
- xml->endbranch();
- }
- xml->addparbool("amp_lfo_enabled", VoicePar[nvoice].PAmpLfoEnabled);
- if((VoicePar[nvoice].PAmpLfoEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("AMPLITUDE_LFO");
- VoicePar[nvoice].AmpLfo->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_PARAMETERS");
- xml->addparbool("fixed_freq", VoicePar[nvoice].Pfixedfreq);
- xml->addpar("fixed_freq_et", VoicePar[nvoice].PfixedfreqET);
- xml->addpar("detune", VoicePar[nvoice].PDetune);
- xml->addpar("coarse_detune", VoicePar[nvoice].PCoarseDetune);
- xml->addpar("detune_type", VoicePar[nvoice].PDetuneType);
-
- xml->addparbool("freq_envelope_enabled",
- VoicePar[nvoice].PFreqEnvelopeEnabled);
- if((VoicePar[nvoice].PFreqEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FREQUENCY_ENVELOPE");
- VoicePar[nvoice].FreqEnvelope->add2XML(xml);
- xml->endbranch();
- }
- xml->addparbool("freq_lfo_enabled", VoicePar[nvoice].PFreqLfoEnabled);
- if((VoicePar[nvoice].PFreqLfoEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FREQUENCY_LFO");
- VoicePar[nvoice].FreqLfo->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
-
-
- if((VoicePar[nvoice].PFilterEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FILTER_PARAMETERS");
- xml->beginbranch("FILTER");
- VoicePar[nvoice].VoiceFilter->add2XML(xml);
- xml->endbranch();
-
- xml->addparbool("filter_envelope_enabled",
- VoicePar[nvoice].PFilterEnvelopeEnabled);
- if((VoicePar[nvoice].PFilterEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FILTER_ENVELOPE");
- VoicePar[nvoice].FilterEnvelope->add2XML(xml);
- xml->endbranch();
- }
-
- xml->addparbool("filter_lfo_enabled",
- VoicePar[nvoice].PFilterLfoEnabled);
- if((VoicePar[nvoice].PFilterLfoEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FILTER_LFO");
- VoicePar[nvoice].FilterLfo->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
- }
-
- if((VoicePar[nvoice].PFMEnabled != 0) || (fmoscilused != 0)
- || (!xml->minimal)) {
- xml->beginbranch("FM_PARAMETERS");
- xml->addpar("input_voice", VoicePar[nvoice].PFMVoice);
-
- xml->addpar("volume", VoicePar[nvoice].PFMVolume);
- xml->addpar("volume_damp", VoicePar[nvoice].PFMVolumeDamp);
- xml->addpar("velocity_sensing",
- VoicePar[nvoice].PFMVelocityScaleFunction);
-
- xml->addparbool("amp_envelope_enabled",
- VoicePar[nvoice].PFMAmpEnvelopeEnabled);
- if((VoicePar[nvoice].PFMAmpEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("AMPLITUDE_ENVELOPE");
- VoicePar[nvoice].FMAmpEnvelope->add2XML(xml);
- xml->endbranch();
- }
- xml->beginbranch("MODULATOR");
- xml->addpar("detune", VoicePar[nvoice].PFMDetune);
- xml->addpar("coarse_detune", VoicePar[nvoice].PFMCoarseDetune);
- xml->addpar("detune_type", VoicePar[nvoice].PFMDetuneType);
-
- xml->addparbool("freq_envelope_enabled",
- VoicePar[nvoice].PFMFreqEnvelopeEnabled);
- if((VoicePar[nvoice].PFMFreqEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FREQUENCY_ENVELOPE");
- VoicePar[nvoice].FMFreqEnvelope->add2XML(xml);
- xml->endbranch();
- }
-
- xml->beginbranch("OSCIL");
- VoicePar[nvoice].FMSmp->add2XML(xml);
- xml->endbranch();
-
- xml->endbranch();
- xml->endbranch();
- }
-}
-
-
-void ADnoteParameters::add2XML(XMLwrapper *xml)
-{
- xml->addparbool("stereo", GlobalPar.PStereo);
-
- xml->beginbranch("AMPLITUDE_PARAMETERS");
- xml->addpar("volume", GlobalPar.PVolume);
- xml->addpar("panning", GlobalPar.PPanning);
- xml->addpar("velocity_sensing", GlobalPar.PAmpVelocityScaleFunction);
- xml->addpar("punch_strength", GlobalPar.PPunchStrength);
- xml->addpar("punch_time", GlobalPar.PPunchTime);
- xml->addpar("punch_stretch", GlobalPar.PPunchStretch);
- xml->addpar("punch_velocity_sensing", GlobalPar.PPunchVelocitySensing);
- xml->addpar("harmonic_randomness_grouping", GlobalPar.Hrandgrouping);
-
- xml->beginbranch("AMPLITUDE_ENVELOPE");
- GlobalPar.AmpEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("AMPLITUDE_LFO");
- GlobalPar.AmpLfo->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_PARAMETERS");
- xml->addpar("detune", GlobalPar.PDetune);
-
- xml->addpar("coarse_detune", GlobalPar.PCoarseDetune);
- xml->addpar("detune_type", GlobalPar.PDetuneType);
-
- xml->addpar("bandwidth", GlobalPar.PBandwidth);
-
- xml->beginbranch("FREQUENCY_ENVELOPE");
- GlobalPar.FreqEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_LFO");
- GlobalPar.FreqLfo->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-
-
- xml->beginbranch("FILTER_PARAMETERS");
- xml->addpar("velocity_sensing_amplitude", GlobalPar.PFilterVelocityScale);
- xml->addpar("velocity_sensing", GlobalPar.PFilterVelocityScaleFunction);
-
- xml->beginbranch("FILTER");
- GlobalPar.GlobalFilter->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FILTER_ENVELOPE");
- GlobalPar.FilterEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FILTER_LFO");
- GlobalPar.FilterLfo->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-
- xml->beginbranch("RESONANCE");
- GlobalPar.Reson->add2XML(xml);
- xml->endbranch();
-
- for(int nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- xml->beginbranch("VOICE", nvoice);
- add2XMLsection(xml, nvoice);
- xml->endbranch();
- }
-}
-
-
-void ADnoteParameters::getfromXML(XMLwrapper *xml)
-{
- GlobalPar.PStereo = xml->getparbool("stereo", GlobalPar.PStereo);
-
- if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
- GlobalPar.PVolume = xml->getpar127("volume", GlobalPar.PVolume);
- GlobalPar.PPanning = xml->getpar127("panning", GlobalPar.PPanning);
- GlobalPar.PAmpVelocityScaleFunction = xml->getpar127(
- "velocity_sensing",
- GlobalPar.
- PAmpVelocityScaleFunction);
-
- GlobalPar.PPunchStrength = xml->getpar127("punch_strength",
- GlobalPar.PPunchStrength);
- GlobalPar.PPunchTime = xml->getpar127("punch_time",
- GlobalPar.PPunchTime);
- GlobalPar.PPunchStretch = xml->getpar127("punch_stretch",
- GlobalPar.PPunchStretch);
- GlobalPar.PPunchVelocitySensing = xml->getpar127(
- "punch_velocity_sensing",
- GlobalPar.PPunchVelocitySensing);
- GlobalPar.Hrandgrouping = xml->getpar127(
- "harmonic_randomness_grouping",
- GlobalPar.Hrandgrouping);
-
- if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
- GlobalPar.AmpEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("AMPLITUDE_LFO")) {
- GlobalPar.AmpLfo->getfromXML(xml);
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
- GlobalPar.PDetune = xml->getpar("detune",
- GlobalPar.PDetune,
- 0,
- 16383);
- GlobalPar.PCoarseDetune = xml->getpar("coarse_detune",
- GlobalPar.PCoarseDetune,
- 0,
- 16383);
- GlobalPar.PDetuneType = xml->getpar127("detune_type",
- GlobalPar.PDetuneType);
-
- GlobalPar.PBandwidth = xml->getpar127("bandwidth",
- GlobalPar.PBandwidth);
-
- xml->enterbranch("FREQUENCY_ENVELOPE");
- GlobalPar.FreqEnvelope->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FREQUENCY_LFO");
- GlobalPar.FreqLfo->getfromXML(xml);
- xml->exitbranch();
-
- xml->exitbranch();
- }
-
-
- if(xml->enterbranch("FILTER_PARAMETERS")) {
- GlobalPar.PFilterVelocityScale = xml->getpar127(
- "velocity_sensing_amplitude",
- GlobalPar.PFilterVelocityScale);
- GlobalPar.PFilterVelocityScaleFunction = xml->getpar127(
- "velocity_sensing",
- GlobalPar.PFilterVelocityScaleFunction);
-
- xml->enterbranch("FILTER");
- GlobalPar.GlobalFilter->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FILTER_ENVELOPE");
- GlobalPar.FilterEnvelope->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FILTER_LFO");
- GlobalPar.FilterLfo->getfromXML(xml);
- xml->exitbranch();
- xml->exitbranch();
- }
-
- if(xml->enterbranch("RESONANCE")) {
- GlobalPar.Reson->getfromXML(xml);
- xml->exitbranch();
- }
-
- for(int nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- VoicePar[nvoice].Enabled = 0;
- if(xml->enterbranch("VOICE", nvoice) == 0)
- continue;
- getfromXMLsection(xml, nvoice);
- xml->exitbranch();
- }
-}
-
-void ADnoteParameters::getfromXMLsection(XMLwrapper *xml, int n)
-{
- int nvoice = n;
- if(nvoice >= NUM_VOICES)
- return;
-
- VoicePar[nvoice].Enabled = xml->getparbool("enabled", 0);
-
- VoicePar[nvoice].Unison_size =
- xml->getpar127("unison_size", VoicePar[nvoice].Unison_size);
- VoicePar[nvoice].Unison_frequency_spread = xml->getpar127(
- "unison_frequency_spread",
- VoicePar[nvoice].Unison_frequency_spread);
- VoicePar[nvoice].Unison_stereo_spread = xml->getpar127(
- "unison_stereo_spread",
- VoicePar[nvoice].Unison_stereo_spread);
- VoicePar[nvoice].Unison_vibratto = xml->getpar127(
- "unison_vibratto",
- VoicePar[nvoice].
- Unison_vibratto);
- VoicePar[nvoice].Unison_vibratto_speed = xml->getpar127(
- "unison_vibratto_speed",
- VoicePar[nvoice].Unison_vibratto_speed);
- VoicePar[nvoice].Unison_invert_phase = xml->getpar127(
- "unison_invert_phase",
- VoicePar[nvoice].Unison_invert_phase);
-
- VoicePar[nvoice].Type = xml->getpar127("type",
- VoicePar[nvoice].Type);
- VoicePar[nvoice].PDelay = xml->getpar127("delay",
- VoicePar[nvoice].PDelay);
- VoicePar[nvoice].Presonance =
- xml->getparbool("resonance", VoicePar[nvoice].Presonance);
-
- VoicePar[nvoice].Pextoscil = xml->getpar("ext_oscil",
- -1,
- -1,
- nvoice - 1);
- VoicePar[nvoice].PextFMoscil = xml->getpar("ext_fm_oscil",
- -1,
- -1,
- nvoice - 1);
-
- VoicePar[nvoice].Poscilphase =
- xml->getpar127("oscil_phase", VoicePar[nvoice].Poscilphase);
- VoicePar[nvoice].PFMoscilphase = xml->getpar127(
- "oscil_fm_phase",
- VoicePar[nvoice].
- PFMoscilphase);
-
- VoicePar[nvoice].PFilterEnabled = xml->getparbool(
- "filter_enabled",
- VoicePar[nvoice].
- PFilterEnabled);
- VoicePar[nvoice].Pfilterbypass = xml->getparbool(
- "filter_bypass",
- VoicePar[nvoice].
- Pfilterbypass);
-
- VoicePar[nvoice].PFMEnabled =
- xml->getpar127("fm_enabled", VoicePar[nvoice].PFMEnabled);
-
- if(xml->enterbranch("OSCIL")) {
- VoicePar[nvoice].OscilSmp->getfromXML(xml);
- xml->exitbranch();
- }
-
-
- if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
- VoicePar[nvoice].PPanning =
- xml->getpar127("panning", VoicePar[nvoice].PPanning);
- VoicePar[nvoice].PVolume =
- xml->getpar127("volume", VoicePar[nvoice].PVolume);
- VoicePar[nvoice].PVolumeminus = xml->getparbool(
- "volume_minus",
- VoicePar[nvoice].
- PVolumeminus);
- VoicePar[nvoice].PAmpVelocityScaleFunction = xml->getpar127(
- "velocity_sensing",
- VoicePar[nvoice].PAmpVelocityScaleFunction);
-
- VoicePar[nvoice].PAmpEnvelopeEnabled = xml->getparbool(
- "amp_envelope_enabled",
- VoicePar[nvoice].PAmpEnvelopeEnabled);
- if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
- VoicePar[nvoice].AmpEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- VoicePar[nvoice].PAmpLfoEnabled = xml->getparbool(
- "amp_lfo_enabled",
- VoicePar[nvoice].
- PAmpLfoEnabled);
- if(xml->enterbranch("AMPLITUDE_LFO")) {
- VoicePar[nvoice].AmpLfo->getfromXML(xml);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
- VoicePar[nvoice].Pfixedfreq =
- xml->getparbool("fixed_freq", VoicePar[nvoice].Pfixedfreq);
- VoicePar[nvoice].PfixedfreqET = xml->getpar127(
- "fixed_freq_et",
- VoicePar[nvoice].
- PfixedfreqET);
-
-
- VoicePar[nvoice].PDetune = xml->getpar("detune",
- VoicePar[nvoice].PDetune,
- 0,
- 16383);
-
- VoicePar[nvoice].PCoarseDetune =
- xml->getpar("coarse_detune",
- VoicePar[nvoice].PCoarseDetune,
- 0,
- 16383);
- VoicePar[nvoice].PDetuneType = xml->getpar127(
- "detune_type",
- VoicePar[nvoice].
- PDetuneType);
-
- VoicePar[nvoice].PFreqEnvelopeEnabled = xml->getparbool(
- "freq_envelope_enabled",
- VoicePar[nvoice].PFreqEnvelopeEnabled);
- if(xml->enterbranch("FREQUENCY_ENVELOPE")) {
- VoicePar[nvoice].FreqEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- VoicePar[nvoice].PFreqLfoEnabled = xml->getparbool(
- "freq_lfo_enabled",
- VoicePar[nvoice].
- PFreqLfoEnabled);
- if(xml->enterbranch("FREQUENCY_LFO")) {
- VoicePar[nvoice].FreqLfo->getfromXML(xml);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FILTER_PARAMETERS")) {
- if(xml->enterbranch("FILTER")) {
- VoicePar[nvoice].VoiceFilter->getfromXML(xml);
- xml->exitbranch();
- }
-
- VoicePar[nvoice].PFilterEnvelopeEnabled = xml->getparbool(
- "filter_envelope_enabled",
- VoicePar[nvoice].PFilterEnvelopeEnabled);
- if(xml->enterbranch("FILTER_ENVELOPE")) {
- VoicePar[nvoice].FilterEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- VoicePar[nvoice].PFilterLfoEnabled = xml->getparbool(
- "filter_lfo_enabled",
- VoicePar[nvoice].PFilterLfoEnabled);
- if(xml->enterbranch("FILTER_LFO")) {
- VoicePar[nvoice].FilterLfo->getfromXML(xml);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FM_PARAMETERS")) {
- VoicePar[nvoice].PFMVoice =
- xml->getpar("input_voice",
- VoicePar[nvoice].PFMVoice,
- -1,
- nvoice - 1);
-
- VoicePar[nvoice].PFMVolume =
- xml->getpar127("volume", VoicePar[nvoice].PFMVolume);
- VoicePar[nvoice].PFMVolumeDamp = xml->getpar127(
- "volume_damp",
- VoicePar[nvoice].
- PFMVolumeDamp);
- VoicePar[nvoice].PFMVelocityScaleFunction = xml->getpar127(
- "velocity_sensing",
- VoicePar[nvoice].PFMVelocityScaleFunction);
-
- VoicePar[nvoice].PFMAmpEnvelopeEnabled = xml->getparbool(
- "amp_envelope_enabled",
- VoicePar[nvoice].PFMAmpEnvelopeEnabled);
- if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
- VoicePar[nvoice].FMAmpEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("MODULATOR")) {
- VoicePar[nvoice].PFMDetune =
- xml->getpar("detune", VoicePar[nvoice].PFMDetune, 0, 16383);
- VoicePar[nvoice].PFMCoarseDetune = xml->getpar(
- "coarse_detune",
- VoicePar[nvoice].
- PFMCoarseDetune,
- 0,
- 16383);
- VoicePar[nvoice].PFMDetuneType = xml->getpar127(
- "detune_type",
- VoicePar[nvoice].
- PFMDetuneType);
-
- VoicePar[nvoice].PFMFreqEnvelopeEnabled = xml->getparbool(
- "freq_envelope_enabled",
- VoicePar[nvoice].PFMFreqEnvelopeEnabled);
- if(xml->enterbranch("FREQUENCY_ENVELOPE")) {
- VoicePar[nvoice].FMFreqEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("OSCIL")) {
- VoicePar[nvoice].FMSmp->getfromXML(xml);
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/ADnoteParameters.h b/plugins/zynaddsubfx/src/Params/ADnoteParameters.h
deleted file mode 100644
index e63efcf..0000000
--- a/plugins/zynaddsubfx/src/Params/ADnoteParameters.h
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- ADnoteParameters.h - Parameters for ADnote (ADsynth)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef AD_NOTE_PARAMETERS_H
-#define AD_NOTE_PARAMETERS_H
-
-
-#include "../globals.h"
-#include "EnvelopeParams.h"
-#include "LFOParams.h"
-#include "FilterParams.h"
-#include "../Synth/OscilGen.h"
-#include "../Synth/Resonance.h"
-#include "../Misc/Util.h"
-#include "../Misc/XMLwrapper.h"
-#include "../DSP/FFTwrapper.h"
-#include "PresetsArray.h"
-
-enum FMTYPE {
- NONE, MORPH, RING_MOD, PHASE_MOD, FREQ_MOD, PITCH_MOD
-};
-extern int ADnote_unison_sizes[];
-
-/*****************************************************************/
-/* GLOBAL PARAMETERS */
-/*****************************************************************/
-
-struct ADnoteGlobalParam {
- /* The instrument type - MONO/STEREO
- If the mode is MONO, the panning of voices are not used
- Stereo=1, Mono=0. */
-
- unsigned char PStereo;
-
-
- /******************************************
- * FREQUENCY GLOBAL PARAMETERS *
- ******************************************/
- unsigned short int PDetune; //fine detune
- unsigned short int PCoarseDetune; //coarse detune+octave
- unsigned char PDetuneType; //detune type
-
- unsigned char PBandwidth; //how much the relative fine detunes of the voices are changed
-
- EnvelopeParams *FreqEnvelope; //Frequency Envelope
-
- LFOParams *FreqLfo; //Frequency LFO
-
- /********************************************
- * AMPLITUDE GLOBAL PARAMETERS *
- ********************************************/
-
- /* Panning - 0 - random
- 1 - left
- 64 - center
- 127 - right */
- unsigned char PPanning;
-
- unsigned char PVolume;
-
- unsigned char PAmpVelocityScaleFunction;
-
- EnvelopeParams *AmpEnvelope;
-
- LFOParams *AmpLfo;
-
- unsigned char PPunchStrength, PPunchTime, PPunchStretch,
- PPunchVelocitySensing;
-
- /******************************************
- * FILTER GLOBAL PARAMETERS *
- ******************************************/
- FilterParams *GlobalFilter;
-
- // filter velocity sensing
- unsigned char PFilterVelocityScale;
-
- // filter velocity sensing
- unsigned char PFilterVelocityScaleFunction;
-
- EnvelopeParams *FilterEnvelope;
-
- LFOParams *FilterLfo;
-
- // RESONANCE
- Resonance *Reson;
-
- //how the randomness is applied to the harmonics on more voices using the same oscillator
- unsigned char Hrandgrouping;
-};
-
-
-
-/***********************************************************/
-/* VOICE PARAMETERS */
-/***********************************************************/
-struct ADnoteVoiceParam {
- /** If the voice is enabled */
- unsigned char Enabled;
-
- /** How many subvoices are used in this voice */
- unsigned char Unison_size;
-
- /** How subvoices are spread */
- unsigned char Unison_frequency_spread;
-
- /** Stereo spread of the subvoices*/
- unsigned char Unison_stereo_spread;
-
- /** Vibratto of the subvoices (which makes the unison more "natural")*/
- unsigned char Unison_vibratto;
-
- /** Medium speed of the vibratto of the subvoices*/
- unsigned char Unison_vibratto_speed;
-
- /** Unison invert phase */
- unsigned char Unison_invert_phase; //0=none,1=random,2=50%,3=33%,4=25%
-
- /** Type of the voice (0=Sound,1=Noise)*/
- unsigned char Type;
-
- /** Voice Delay */
- unsigned char PDelay;
-
- /** If the resonance is enabled for this voice */
- unsigned char Presonance;
-
- // What external oscil should I use, -1 for internal OscilSmp&FMSmp
- short int Pextoscil, PextFMoscil;
- // it is not allowed that the externoscil,externFMoscil => current voice
-
- // oscillator phases
- unsigned char Poscilphase, PFMoscilphase;
-
- // filter bypass
- unsigned char Pfilterbypass;
-
- /** Voice oscillator */
- OscilGen *OscilSmp;
-
- /**********************************
- * FREQUENCY PARAMETERS *
- **********************************/
-
- /** If the base frequency is fixed to 440 Hz*/
- unsigned char Pfixedfreq;
-
- /* Equal temperate (this is used only if the Pfixedfreq is enabled)
- If this parameter is 0, the frequency is fixed (to 440 Hz);
- if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
- unsigned char PfixedfreqET;
-
- /** Fine detune */
- unsigned short int PDetune;
-
- /** Coarse detune + octave */
- unsigned short int PCoarseDetune;
-
- /** Detune type */
- unsigned char PDetuneType;
-
- /* Frequency Envelope */
- unsigned char PFreqEnvelopeEnabled;
- EnvelopeParams *FreqEnvelope;
-
- /* Frequency LFO */
- unsigned char PFreqLfoEnabled;
- LFOParams *FreqLfo;
-
-
- /***************************
- * AMPLITUDE PARAMETERS *
- ***************************/
-
- /* Panning 0 - random
- 1 - left
- 64 - center
- 127 - right
- The Panning is ignored if the instrument is mono */
- unsigned char PPanning;
-
- /* Voice Volume */
- unsigned char PVolume;
-
- /* If the Volume negative */
- unsigned char PVolumeminus;
-
- /* Velocity sensing */
- unsigned char PAmpVelocityScaleFunction;
-
- /* Amplitude Envelope */
- unsigned char PAmpEnvelopeEnabled;
- EnvelopeParams *AmpEnvelope;
-
- /* Amplitude LFO */
- unsigned char PAmpLfoEnabled;
- LFOParams *AmpLfo;
-
-
-
- /*************************
- * FILTER PARAMETERS *
- *************************/
-
- /* Voice Filter */
- unsigned char PFilterEnabled;
- FilterParams *VoiceFilter;
-
- /* Filter Envelope */
- unsigned char PFilterEnvelopeEnabled;
- EnvelopeParams *FilterEnvelope;
-
- /* LFO Envelope */
- unsigned char PFilterLfoEnabled;
- LFOParams *FilterLfo;
-
- /****************************
- * MODULLATOR PARAMETERS *
- ****************************/
-
- /* Modullator Parameters (0=off,1=Morph,2=RM,3=PM,4=FM.. */
- unsigned char PFMEnabled;
-
- /* Voice that I use as modullator instead of FMSmp.
- It is -1 if I use FMSmp(default).
- It maynot be equal or bigger than current voice */
- short int PFMVoice;
-
- /* Modullator oscillator */
- OscilGen *FMSmp;
-
- /* Modullator Volume */
- unsigned char PFMVolume;
-
- /* Modullator damping at higher frequencies */
- unsigned char PFMVolumeDamp;
-
- /* Modullator Velocity Sensing */
- unsigned char PFMVelocityScaleFunction;
-
- /* Fine Detune of the Modullator*/
- unsigned short int PFMDetune;
-
- /* Coarse Detune of the Modullator */
- unsigned short int PFMCoarseDetune;
-
- /* The detune type */
- unsigned char PFMDetuneType;
-
- /* Frequency Envelope of the Modullator */
- unsigned char PFMFreqEnvelopeEnabled;
- EnvelopeParams *FMFreqEnvelope;
-
- /* Frequency Envelope of the Modullator */
- unsigned char PFMAmpEnvelopeEnabled;
- EnvelopeParams *FMAmpEnvelope;
-};
-
-class ADnoteParameters : public PresetsArray
-{
- public:
- ADnoteParameters(FFTwrapper *fft_);
- ~ADnoteParameters();
-
- ADnoteGlobalParam GlobalPar;
- ADnoteVoiceParam VoicePar[NUM_VOICES];
-
- void defaults();
- void add2XML(XMLwrapper *xml);
- void getfromXML(XMLwrapper *xml);
-
- REALTYPE getBandwidthDetuneMultiplier();
- REALTYPE getUnisonFrequencySpreadCents(int nvoice);
- int get_unison_size_index(int nvoice);
- void set_unison_size_index(int nvoice, int index);
- private:
- void defaults(int n); //n is the nvoice
-
- void EnableVoice(int nvoice);
- void KillVoice(int nvoice);
- FFTwrapper *fft;
-
- void add2XMLsection(XMLwrapper *xml, int n);
- void getfromXMLsection(XMLwrapper *xml, int n);
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/CMakeLists.txt b/plugins/zynaddsubfx/src/Params/CMakeLists.txt
deleted file mode 100644
index 670fcf2..0000000
--- a/plugins/zynaddsubfx/src/Params/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-set(zynaddsubfx_params_SRCS
- ADnoteParameters.cpp
- Controller.cpp
- EnvelopeParams.cpp
- FilterParams.cpp
- LFOParams.cpp
- PADnoteParameters.cpp
- Presets.cpp
- PresetsArray.cpp
- PresetsStore.cpp
- SUBnoteParameters.cpp
-
-)
-
-add_library(zynaddsubfx_params STATIC
- ${zynaddsubfx_params_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_params)# ${ASOUND_LIBRARY})
diff --git a/plugins/zynaddsubfx/src/Params/Controller.cpp b/plugins/zynaddsubfx/src/Params/Controller.cpp
deleted file mode 100644
index e3fb70d..0000000
--- a/plugins/zynaddsubfx/src/Params/Controller.cpp
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Controller.cpp - (Midi) Controllers implementation
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "Controller.h"
-#include <math.h>
-#include <stdio.h>
-
-Controller::Controller()
-{
- defaults();
- resetall();
-}
-
-Controller::~Controller()
-{}
-
-void Controller::defaults()
-{
- setpitchwheelbendrange(100); //2 halftones
- expression.receive = 1;
- panning.depth = 64;
- filtercutoff.depth = 64;
- filterq.depth = 64;
- bandwidth.depth = 64;
- bandwidth.exponential = 0;
- modwheel.depth = 80;
- modwheel.exponential = 0;
- fmamp.receive = 1;
- volume.receive = 1;
- sustain.receive = 1;
- NRPN.receive = 1;
-
- portamento.portamento = 0;
- portamento.used = 0;
- portamento.proportional = 0;
- portamento.propRate = 80;
- portamento.propDepth = 90;
- portamento.receive = 1;
- portamento.time = 64;
- portamento.updowntimestretch = 64;
- portamento.pitchthresh = 3;
- portamento.pitchthreshtype = 1;
- portamento.noteusing = -1;
- resonancecenter.depth = 64;
- resonancebandwidth.depth = 64;
-
- initportamento(440.0, 440.0, false); // Now has a third argument
- setportamento(0);
-}
-
-void Controller::resetall()
-{
- setpitchwheel(0); //center
- setexpression(127);
- setpanning(64);
- setfiltercutoff(64);
- setfilterq(64);
- setbandwidth(64);
- setmodwheel(64);
- setfmamp(127);
- setvolume(127);
- setsustain(0);
- setresonancecenter(64);
- setresonancebw(64);
-
- //reset the NRPN
- NRPN.parhi = -1;
- NRPN.parlo = -1;
- NRPN.valhi = -1;
- NRPN.vallo = -1;
-}
-
-void Controller::setpitchwheel(int value)
-{
- pitchwheel.data = value;
- REALTYPE cents = value / 8192.0;
- cents *= pitchwheel.bendrange;
- pitchwheel.relfreq = pow(2, cents / 1200.0);
- //fprintf(stderr,"%ld %ld -> %.3f\n",pitchwheel.bendrange,pitchwheel.data,pitchwheel.relfreq);fflush(stderr);
-}
-
-void Controller::setpitchwheelbendrange(unsigned short int value)
-{
- pitchwheel.bendrange = value;
-}
-
-void Controller::setexpression(int value)
-{
- expression.data = value;
- if(expression.receive != 0)
- expression.relvolume = value / 127.0;
- else
- expression.relvolume = 1.0;
-}
-
-void Controller::setpanning(int value)
-{
- panning.data = value;
- panning.pan = (value / 128.0 - 0.5) * (panning.depth / 64.0);
-}
-
-void Controller::setfiltercutoff(int value)
-{
- filtercutoff.data = value;
- filtercutoff.relfreq =
- (value - 64.0) * filtercutoff.depth / 4096.0 * 3.321928; //3.3219..=ln2(10)
-}
-
-void Controller::setfilterq(int value)
-{
- filterq.data = value;
- filterq.relq = pow(30.0, (value - 64.0) / 64.0 * (filterq.depth / 64.0));
-}
-
-void Controller::setbandwidth(int value)
-{
- bandwidth.data = value;
- if(bandwidth.exponential == 0) {
- REALTYPE tmp = pow(25.0, pow(bandwidth.depth / 127.0, 1.5)) - 1.0;
- if((value < 64) && (bandwidth.depth >= 64))
- tmp = 1.0;
- bandwidth.relbw = (value / 64.0 - 1.0) * tmp + 1.0;
- if(bandwidth.relbw < 0.01)
- bandwidth.relbw = 0.01;
- }
- else
- bandwidth.relbw =
- pow(25.0, (value - 64.0) / 64.0 * (bandwidth.depth / 64.0));
- ;
-}
-
-void Controller::setmodwheel(int value)
-{
- modwheel.data = value;
- if(modwheel.exponential == 0) {
- REALTYPE tmp = pow(25.0, pow(modwheel.depth / 127.0, 1.5) * 2.0) / 25.0;
- if((value < 64) && (modwheel.depth >= 64))
- tmp = 1.0;
- modwheel.relmod = (value / 64.0 - 1.0) * tmp + 1.0;
- if(modwheel.relmod < 0.0)
- modwheel.relmod = 0.0;
- }
- else
- modwheel.relmod =
- pow(25.0, (value - 64.0) / 64.0 * (modwheel.depth / 80.0));
-}
-
-void Controller::setfmamp(int value)
-{
- fmamp.data = value;
- fmamp.relamp = value / 127.0;
- if(fmamp.receive != 0)
- fmamp.relamp = value / 127.0;
- else
- fmamp.relamp = 1.0;
-}
-
-void Controller::setvolume(int value)
-{
- volume.data = value;
- if(volume.receive != 0)
- volume.volume = pow(0.1, (127 - value) / 127.0 * 2.0);
- else
- volume.volume = 1.0;
-}
-
-void Controller::setsustain(int value)
-{
- sustain.data = value;
- if(sustain.receive != 0)
- sustain.sustain = ((value < 64) ? 0 : 1);
- else
- sustain.sustain = 0;
-}
-
-void Controller::setportamento(int value)
-{
- portamento.data = value;
- if(portamento.receive != 0)
- portamento.portamento = ((value < 64) ? 0 : 1);
-}
-
-int Controller::initportamento(REALTYPE oldfreq,
- REALTYPE newfreq,
- bool legatoflag)
-{
- portamento.x = 0.0;
-
- if(legatoflag) { // Legato in progress
- if(portamento.portamento == 0)
- return 0;
- }
- else // No legato, do the original if...return
- if((portamento.used != 0) || (portamento.portamento == 0))
- return 0;
- ;
-
- REALTYPE portamentotime = pow(100.0, portamento.time / 127.0) / 50.0; //portamento time in seconds
-
- if(portamento.proportional) {
- //If there is a min(float,float) and a max(float,float) then they
- //could be used here
- //Linear functors could also make this nicer
- if(oldfreq > newfreq) //2 is the center of propRate
- portamentotime *=
- pow(oldfreq / newfreq / (portamento.propRate / 127.0 * 3 + .05),
- (portamento.propDepth / 127.0 * 1.6 + .2));
- else //1 is the center of propDepth
- portamentotime *=
- pow(newfreq / oldfreq / (portamento.propRate / 127.0 * 3 + .05),
- (portamento.propDepth / 127.0 * 1.6 + .2));
- }
-
- if((portamento.updowntimestretch >= 64) && (newfreq < oldfreq)) {
- if(portamento.updowntimestretch == 127)
- return 0;
- portamentotime *= pow(0.1, (portamento.updowntimestretch - 64) / 63.0);
- }
- if((portamento.updowntimestretch < 64) && (newfreq > oldfreq)) {
- if(portamento.updowntimestretch == 0)
- return 0;
- portamentotime *= pow(0.1, (64.0 - portamento.updowntimestretch) / 64.0);
- }
-
- //printf("%f->%f : Time %f\n",oldfreq,newfreq,portamentotime);
-
- portamento.dx = SOUND_BUFFER_SIZE / (portamentotime * SAMPLE_RATE);
- portamento.origfreqrap = oldfreq / newfreq;
-
- REALTYPE tmprap = ((portamento.origfreqrap > 1.0) ?
- (portamento.origfreqrap) :
- (1.0 / portamento.origfreqrap));
-
- REALTYPE thresholdrap = pow(2.0, portamento.pitchthresh / 12.0);
- if((portamento.pitchthreshtype == 0) && (tmprap - 0.00001 > thresholdrap))
- return 0;
- if((portamento.pitchthreshtype == 1) && (tmprap + 0.00001 < thresholdrap))
- return 0;
-
- portamento.used = 1;
- portamento.freqrap = portamento.origfreqrap;
- return 1;
-}
-
-void Controller::updateportamento()
-{
- if(portamento.used == 0)
- return;
-
- portamento.x += portamento.dx;
- if(portamento.x > 1.0) {
- portamento.x = 1.0;
- portamento.used = 0;
- }
- portamento.freqrap =
- (1.0 - portamento.x) * portamento.origfreqrap + portamento.x;
-}
-
-
-void Controller::setresonancecenter(int value)
-{
- resonancecenter.data = value;
- resonancecenter.relcenter =
- pow(3.0, (value - 64.0) / 64.0 * (resonancecenter.depth / 64.0));
-}
-void Controller::setresonancebw(int value)
-{
- resonancebandwidth.data = value;
- resonancebandwidth.relbw =
- pow(1.5, (value - 64.0) / 64.0 * (resonancebandwidth.depth / 127.0));
-}
-
-
-//Returns 0 if there is NRPN or 1 if there is not
-int Controller::getnrpn(int *parhi, int *parlo, int *valhi, int *vallo)
-{
- if(NRPN.receive == 0)
- return 1;
- if((NRPN.parhi < 0) || (NRPN.parlo < 0) || (NRPN.valhi < 0)
- || (NRPN.vallo < 0))
- return 1;
-
- *parhi = NRPN.parhi;
- *parlo = NRPN.parlo;
- *valhi = NRPN.valhi;
- *vallo = NRPN.vallo;
- return 0;
-}
-
-
-void Controller::setparameternumber(unsigned int type, int value)
-{
- switch(type) {
- case C_nrpnhi:
- NRPN.parhi = value;
- NRPN.valhi = -1;
- NRPN.vallo = -1; //clear the values
- break;
- case C_nrpnlo:
- NRPN.parlo = value;
- NRPN.valhi = -1;
- NRPN.vallo = -1; //clear the values
- break;
- case C_dataentryhi:
- if((NRPN.parhi >= 0) && (NRPN.parlo >= 0))
- NRPN.valhi = value;
- break;
- case C_dataentrylo:
- if((NRPN.parhi >= 0) && (NRPN.parlo >= 0))
- NRPN.vallo = value;
- break;
- }
-}
-
-
-
-void Controller::add2XML(XMLwrapper *xml)
-{
- xml->addpar("pitchwheel_bendrange", pitchwheel.bendrange);
-
- xml->addparbool("expression_receive", expression.receive);
- xml->addpar("panning_depth", panning.depth);
- xml->addpar("filter_cutoff_depth", filtercutoff.depth);
- xml->addpar("filter_q_depth", filterq.depth);
- xml->addpar("bandwidth_depth", bandwidth.depth);
- xml->addpar("mod_wheel_depth", modwheel.depth);
- xml->addparbool("mod_wheel_exponential", modwheel.exponential);
- xml->addparbool("fm_amp_receive", fmamp.receive);
- xml->addparbool("volume_receive", volume.receive);
- xml->addparbool("sustain_receive", sustain.receive);
-
- xml->addparbool("portamento_receive", portamento.receive);
- xml->addpar("portamento_time", portamento.time);
- xml->addpar("portamento_pitchthresh", portamento.pitchthresh);
- xml->addpar("portamento_pitchthreshtype", portamento.pitchthreshtype);
- xml->addpar("portamento_portamento", portamento.portamento);
- xml->addpar("portamento_updowntimestretch", portamento.updowntimestretch);
- xml->addpar("portamento_proportional", portamento.proportional);
- xml->addpar("portamento_proprate", portamento.propRate);
- xml->addpar("portamento_propdepth", portamento.propDepth);
-
- xml->addpar("resonance_center_depth", resonancecenter.depth);
- xml->addpar("resonance_bandwidth_depth", resonancebandwidth.depth);
-}
-
-void Controller::getfromXML(XMLwrapper *xml)
-{
- pitchwheel.bendrange = xml->getpar("pitchwheel_bendrange",
- pitchwheel.bendrange,
- -6400,
- 6400);
-
- expression.receive = xml->getparbool("expression_receive",
- expression.receive);
- panning.depth = xml->getpar127("panning_depth", panning.depth);
- filtercutoff.depth = xml->getpar127("filter_cutoff_depth",
- filtercutoff.depth);
- filterq.depth = xml->getpar127("filter_q_depth", filterq.depth);
- bandwidth.depth = xml->getpar127("bandwidth_depth", bandwidth.depth);
- modwheel.depth = xml->getpar127("mod_wheel_depth", modwheel.depth);
- modwheel.exponential = xml->getparbool("mod_wheel_exponential",
- modwheel.exponential);
- fmamp.receive = xml->getparbool("fm_amp_receive",
- fmamp.receive);
- volume.receive = xml->getparbool("volume_receive",
- volume.receive);
- sustain.receive = xml->getparbool("sustain_receive",
- sustain.receive);
-
- portamento.receive = xml->getparbool("portamento_receive",
- portamento.receive);
- portamento.time = xml->getpar127("portamento_time",
- portamento.time);
- portamento.pitchthresh = xml->getpar127("portamento_pitchthresh",
- portamento.pitchthresh);
- portamento.pitchthreshtype = xml->getpar127("portamento_pitchthreshtype",
- portamento.pitchthreshtype);
- portamento.portamento = xml->getpar127("portamento_portamento",
- portamento.portamento);
- portamento.updowntimestretch = xml->getpar127(
- "portamento_updowntimestretch",
- portamento.updowntimestretch);
- portamento.proportional = xml->getpar127("portamento_proportional",
- portamento.proportional);
- portamento.propRate = xml->getpar127("portamento_proprate",
- portamento.propRate);
- portamento.propDepth = xml->getpar127("portamento_propdepth",
- portamento.propDepth);
-
-
- resonancecenter.depth = xml->getpar127("resonance_center_depth",
- resonancecenter.depth);
- resonancebandwidth.depth = xml->getpar127("resonance_bandwidth_depth",
- resonancebandwidth.depth);
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/Controller.h b/plugins/zynaddsubfx/src/Params/Controller.h
deleted file mode 100644
index 86a4bad..0000000
--- a/plugins/zynaddsubfx/src/Params/Controller.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Controller.h - (Midi) Controllers implementation
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-
-#ifndef CONTROLLER_H
-#define CONTROLLER_H
-
-#include "../globals.h"
-#include "../Misc/XMLwrapper.h"
-
-/**(Midi) Controllers implementation*/
-class Controller
-{
- public:
- Controller();
- ~Controller();
- void resetall();
-
- void add2XML(XMLwrapper *xml);
- void defaults();
- void getfromXML(XMLwrapper *xml);
-
- //Controllers functions
- void setpitchwheel(int value);
- void setpitchwheelbendrange(unsigned short int value);
- void setexpression(int value);
- void setpanning(int value);
- void setfiltercutoff(int value);
- void setfilterq(int value);
- void setbandwidth(int value);
- void setmodwheel(int value);
- void setfmamp(int value);
- void setvolume(int value);
- void setsustain(int value);
- /**Enable or disable portamento
- * @param value 0-127 MIDI value (greater than 64 enables)*/
- void setportamento(int value);
- void setresonancecenter(int value);
- void setresonancebw(int value);
-
-
- void setparameternumber(unsigned int type, int value); //used for RPN and NRPN's
- int getnrpn(int *parhi, int *parlo, int *valhi, int *vallo);
-
- /**
- * Initialize a portamento
- *
- * @param oldfreq Starting frequency of the portamento (Hz)
- * @param newfreq Ending frequency of the portamento (Hz)
- * @param legatoflag true when legato is in progress, false otherwise
- * @returns 1 if properly initialized, 0 otherwise*/
- int initportamento(REALTYPE oldfreq, REALTYPE newfreq, bool legatoflag);
- /**Update portamento's freqrap to next value based upon dx*/
- void updateportamento();
-
- // Controllers values
- struct { //Pitch Wheel
- int data;
- short int bendrange; //bendrange is in cents
- REALTYPE relfreq; //the relative frequency (default is 1.0)
- } pitchwheel;
-
- struct { //Expression
- int data;
- REALTYPE relvolume;
- unsigned char receive;
- } expression;
-
- struct { //Panning
- int data;
- REALTYPE pan;
- unsigned char depth;
- } panning;
-
-
- struct { //Filter cutoff
- int data;
- REALTYPE relfreq;
- unsigned char depth;
- } filtercutoff;
-
- struct { //Filter Q
- int data;
- REALTYPE relq;
- unsigned char depth;
- } filterq;
-
- struct { //Bandwidth
- int data;
- REALTYPE relbw;
- unsigned char depth;
- unsigned char exponential;
- } bandwidth;
-
- struct { //Modulation Wheel
- int data;
- REALTYPE relmod;
- unsigned char depth;
- unsigned char exponential;
- } modwheel;
-
- struct { //FM amplitude
- int data;
- REALTYPE relamp;
- unsigned char receive;
- } fmamp;
-
- struct { //Volume
- int data;
- REALTYPE volume;
- unsigned char receive;
- } volume;
-
- struct { //Sustain
- int data, sustain;
- unsigned char receive;
- } sustain;
-
- struct { /**<Portamento*/
- //parameters
- int data;
- unsigned char portamento;
- /**Whether the portamento midi events are received or not*/
- unsigned char receive;
- /** The time that it takes for the portamento to complete
- *
- * Translates in an expontal fashion to 0 Seconds to 1.93 Seconds
- * of completion time*/
- unsigned char time;
- /**If the portamento is proportinal to the distance spanned
- *
- * 0 - constant time(default)
- * 1 - proportional*/
- unsigned char proportional;
- /**Rate of proportinal portamento*/
- unsigned char propRate;
- /**Depth of proportinal portamento*/
- unsigned char propDepth;
- /**pitchthresh is the threshold of enabling protamento*/
- unsigned char pitchthresh;
- /**enable the portamento only below(0)/above(1) the threshold*/
- unsigned char pitchthreshtype;
-
- /**this value represent how the portamento time is reduced
- * 0 - for down portamento
- * 1-63 - the up portamento's time is smaller than the down portamento
- * 64 - the portamento time is always the same
- * 64-126 - the down portamento's time is smaller than the up portamento
- * 127 - for upper portamento
- * 'up portamento' means when the frequency is rising
- * (eg: the portamento is from 200Hz to 300 Hz)
- * 'down portamento' means when the frequency is lowering
- * (eg: the portamento is from 300Hz to 200 Hz)
- */
- unsigned char updowntimestretch;
- /**this value is used to compute the actual portamento
- *
- * This is a multiplyer to change the frequency of the newer
- * frequency to fit the profile of the portamento.
- * This will be linear with respect to x.*/
- REALTYPE freqrap;
- /**this is used by the Part for knowing which note uses the portamento*/
- int noteusing;
- /**if a the portamento is used by a note
- * \todo see if this can be a bool*/
- int used;
-
- //Internal data
-
- /**x is from 0.0 (start portamento) to 1.0 (finished portamento)*/
- REALTYPE x;
- /**dx is the increment to x when updateportamento is called*/
- REALTYPE dx;
- /** this is used for computing oldfreq value from x*/
- REALTYPE origfreqrap;
- } portamento;
-
- struct { //Resonance Center Frequency
- int data;
- REALTYPE relcenter;
- unsigned char depth;
- } resonancecenter;
-
- struct { //Resonance Bandwidth
- int data;
- REALTYPE relbw;
- unsigned char depth;
- } resonancebandwidth;
-
-
- /** RPN and NPRPN */
- struct { //nrpn
- int parhi, parlo;
- int valhi, vallo;
- unsigned char receive; //this is saved to disk by Master
- } NRPN;
-
- private:
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/EnvelopeParams.cpp b/plugins/zynaddsubfx/src/Params/EnvelopeParams.cpp
deleted file mode 100644
index c13039f..0000000
--- a/plugins/zynaddsubfx/src/Params/EnvelopeParams.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- EnvelopeParams.cpp - Parameters for Envelope
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdio.h>
-
-#include <math.h>
-#include <stdlib.h>
-#include "EnvelopeParams.h"
-
-EnvelopeParams::EnvelopeParams(unsigned char Penvstretch_,
- unsigned char Pforcedrelease_):Presets()
-{
- int i;
-
- PA_dt = 10;
- PD_dt = 10;
- PR_dt = 10;
- PA_val = 64;
- PD_val = 64;
- PS_val = 64;
- PR_val = 64;
-
- for(i = 0; i < MAX_ENVELOPE_POINTS; i++) {
- Penvdt[i] = 32;
- Penvval[i] = 64;
- }
- Penvdt[0] = 0; //no used
- Penvsustain = 1;
- Penvpoints = 1;
- Envmode = 1;
- Penvstretch = Penvstretch_;
- Pforcedrelease = Pforcedrelease_;
- Pfreemode = 1;
- Plinearenvelope = 0;
-
- store2defaults();
-}
-
-EnvelopeParams::~EnvelopeParams()
-{}
-
-REALTYPE EnvelopeParams::getdt(char i)
-{
- REALTYPE result = (pow(2.0, Penvdt[(int)i] / 127.0 * 12.0) - 1.0) * 10.0; //miliseconds
- return result;
-}
-
-
-/*
- * ADSR/ASR... initialisations
- */
-void EnvelopeParams::ADSRinit(char A_dt, char D_dt, char S_val, char R_dt)
-{
- setpresettype("Penvamplitude");
- Envmode = 1;
- PA_dt = A_dt;
- PD_dt = D_dt;
- PS_val = S_val;
- PR_dt = R_dt;
- Pfreemode = 0;
- converttofree();
-
- store2defaults();
-}
-
-void EnvelopeParams::ADSRinit_dB(char A_dt, char D_dt, char S_val, char R_dt)
-{
- setpresettype("Penvamplitude");
- Envmode = 2;
- PA_dt = A_dt;
- PD_dt = D_dt;
- PS_val = S_val;
- PR_dt = R_dt;
- Pfreemode = 0;
- converttofree();
-
- store2defaults();
-}
-
-void EnvelopeParams::ASRinit(char A_val, char A_dt, char R_val, char R_dt)
-{
- setpresettype("Penvfrequency");
- Envmode = 3;
- PA_val = A_val;
- PA_dt = A_dt;
- PR_val = R_val;
- PR_dt = R_dt;
- Pfreemode = 0;
- converttofree();
-
- store2defaults();
-}
-
-void EnvelopeParams::ADSRinit_filter(char A_val,
- char A_dt,
- char D_val,
- char D_dt,
- char R_dt,
- char R_val)
-{
- setpresettype("Penvfilter");
- Envmode = 4;
- PA_val = A_val;
- PA_dt = A_dt;
- PD_val = D_val;
- PD_dt = D_dt;
- PR_dt = R_dt;
- PR_val = R_val;
- Pfreemode = 0;
- converttofree();
- store2defaults();
-}
-
-void EnvelopeParams::ASRinit_bw(char A_val, char A_dt, char R_val, char R_dt)
-{
- setpresettype("Penvbandwidth");
- Envmode = 5;
- PA_val = A_val;
- PA_dt = A_dt;
- PR_val = R_val;
- PR_dt = R_dt;
- Pfreemode = 0;
- converttofree();
- store2defaults();
-}
-
-/*
- * Convert the Envelope to freemode
- */
-void EnvelopeParams::converttofree()
-{
- switch(Envmode) {
- case 1:
- Penvpoints = 4;
- Penvsustain = 2;
- Penvval[0] = 0;
- Penvdt[1] = PA_dt;
- Penvval[1] = 127;
- Penvdt[2] = PD_dt;
- Penvval[2] = PS_val;
- Penvdt[3] = PR_dt;
- Penvval[3] = 0;
- break;
- case 2:
- Penvpoints = 4;
- Penvsustain = 2;
- Penvval[0] = 0;
- Penvdt[1] = PA_dt;
- Penvval[1] = 127;
- Penvdt[2] = PD_dt;
- Penvval[2] = PS_val;
- Penvdt[3] = PR_dt;
- Penvval[3] = 0;
- break;
- case 3:
- Penvpoints = 3;
- Penvsustain = 1;
- Penvval[0] = PA_val;
- Penvdt[1] = PA_dt;
- Penvval[1] = 64;
- Penvdt[2] = PR_dt;
- Penvval[2] = PR_val;
- break;
- case 4:
- Penvpoints = 4;
- Penvsustain = 2;
- Penvval[0] = PA_val;
- Penvdt[1] = PA_dt;
- Penvval[1] = PD_val;
- Penvdt[2] = PD_dt;
- Penvval[2] = 64;
- Penvdt[3] = PR_dt;
- Penvval[3] = PR_val;
- break;
- case 5:
- Penvpoints = 3;
- Penvsustain = 1;
- Penvval[0] = PA_val;
- Penvdt[1] = PA_dt;
- Penvval[1] = 64;
- Penvdt[2] = PR_dt;
- Penvval[2] = PR_val;
- break;
- }
-}
-
-
-
-
-void EnvelopeParams::add2XML(XMLwrapper *xml)
-{
- xml->addparbool("free_mode", Pfreemode);
- xml->addpar("env_points", Penvpoints);
- xml->addpar("env_sustain", Penvsustain);
- xml->addpar("env_stretch", Penvstretch);
- xml->addparbool("forced_release", Pforcedrelease);
- xml->addparbool("linear_envelope", Plinearenvelope);
- xml->addpar("A_dt", PA_dt);
- xml->addpar("D_dt", PD_dt);
- xml->addpar("R_dt", PR_dt);
- xml->addpar("A_val", PA_val);
- xml->addpar("D_val", PD_val);
- xml->addpar("S_val", PS_val);
- xml->addpar("R_val", PR_val);
-
- if((Pfreemode != 0) || (!xml->minimal)) {
- for(int i = 0; i < Penvpoints; i++) {
- xml->beginbranch("POINT", i);
- if(i != 0)
- xml->addpar("dt", Penvdt[i]);
- xml->addpar("val", Penvval[i]);
- xml->endbranch();
- }
- }
-}
-
-
-
-void EnvelopeParams::getfromXML(XMLwrapper *xml)
-{
- Pfreemode = xml->getparbool("free_mode", Pfreemode);
- Penvpoints = xml->getpar127("env_points", Penvpoints);
- Penvsustain = xml->getpar127("env_sustain", Penvsustain);
- Penvstretch = xml->getpar127("env_stretch", Penvstretch);
- Pforcedrelease = xml->getparbool("forced_release", Pforcedrelease);
- Plinearenvelope = xml->getparbool("linear_envelope", Plinearenvelope);
-
- PA_dt = xml->getpar127("A_dt", PA_dt);
- PD_dt = xml->getpar127("D_dt", PD_dt);
- PR_dt = xml->getpar127("R_dt", PR_dt);
- PA_val = xml->getpar127("A_val", PA_val);
- PD_val = xml->getpar127("D_val", PD_val);
- PS_val = xml->getpar127("S_val", PS_val);
- PR_val = xml->getpar127("R_val", PR_val);
-
- for(int i = 0; i < Penvpoints; i++) {
- if(xml->enterbranch("POINT", i) == 0)
- continue;
- if(i != 0)
- Penvdt[i] = xml->getpar127("dt", Penvdt[i]);
- Penvval[i] = xml->getpar127("val", Penvval[i]);
- xml->exitbranch();
- }
-
- if(!Pfreemode)
- converttofree();
-}
-
-
-void EnvelopeParams::defaults()
-{
- Penvstretch = Denvstretch;
- Pforcedrelease = Dforcedrelease;
- Plinearenvelope = Dlinearenvelope;
- PA_dt = DA_dt;
- PD_dt = DD_dt;
- PR_dt = DR_dt;
- PA_val = DA_val;
- PD_val = DD_val;
- PS_val = DS_val;
- PR_val = DR_val;
- Pfreemode = 0;
- converttofree();
-}
-
-void EnvelopeParams::store2defaults()
-{
- Denvstretch = Penvstretch;
- Dforcedrelease = Pforcedrelease;
- Dlinearenvelope = Plinearenvelope;
- DA_dt = PA_dt;
- DD_dt = PD_dt;
- DR_dt = PR_dt;
- DA_val = PA_val;
- DD_val = PD_val;
- DS_val = PS_val;
- DR_val = PR_val;
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/EnvelopeParams.h b/plugins/zynaddsubfx/src/Params/EnvelopeParams.h
deleted file mode 100644
index 3a1c06a..0000000
--- a/plugins/zynaddsubfx/src/Params/EnvelopeParams.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- EnvelopeParams.h - Parameters for Envelope
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef ENVELOPE_PARAMS_H
-#define ENVELOPE_PARAMS_H
-
-#include "../globals.h"
-#include "../Misc/XMLwrapper.h"
-#include "Presets.h"
-
-#define MAX_ENVELOPE_POINTS 40
-#define MIN_ENVELOPE_DB -400
-
-class EnvelopeParams:public Presets
-{
- public:
- EnvelopeParams(unsigned char Penvstretch_,
- unsigned char Pforcedrelease_);
- ~EnvelopeParams();
- void ADSRinit(char A_dt, char D_dt, char S_val, char R_dt);
- void ADSRinit_dB(char A_dt, char D_dt, char S_val, char R_dt);
- void ASRinit(char A_val, char A_dt, char R_val, char R_dt);
- void ADSRinit_filter(char A_val,
- char A_dt,
- char D_val,
- char D_dt,
- char R_dt,
- char R_val);
- void ASRinit_bw(char A_val, char A_dt, char R_val, char R_dt);
- void converttofree();
-
- void add2XML(XMLwrapper *xml);
- void defaults();
- void getfromXML(XMLwrapper *xml);
-
- REALTYPE getdt(char i);
-
- /* MIDI Parameters */
- unsigned char Pfreemode; //1 daca este in modul free sau 0 daca este in mod ADSR,ASR,...
- unsigned char Penvpoints;
- unsigned char Penvsustain; //127 pentru dezactivat
- unsigned char Penvdt[MAX_ENVELOPE_POINTS];
- unsigned char Penvval[MAX_ENVELOPE_POINTS];
- unsigned char Penvstretch; //64=normal stretch (piano-like), 0=no stretch
- unsigned char Pforcedrelease; //0 - OFF, 1 - ON
- unsigned char Plinearenvelope; //if the amplitude envelope is linear
-
- unsigned char PA_dt, PD_dt, PR_dt,
- PA_val, PD_val, PS_val, PR_val;
-
-
-
- int Envmode; // 1 for ADSR parameters (linear amplitude)
- // 2 for ADSR_dB parameters (dB amplitude)
- // 3 for ASR parameters (frequency LFO)
- // 4 for ADSR_filter parameters (filter parameters)
- // 5 for ASR_bw parameters (bandwidth parameters)
-
- private:
- void store2defaults();
-
- /* Default parameters */
- unsigned char Denvstretch;
- unsigned char Dforcedrelease;
- unsigned char Dlinearenvelope;
- unsigned char DA_dt, DD_dt, DR_dt,
- DA_val, DD_val, DS_val, DR_val;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/FilterParams.cpp b/plugins/zynaddsubfx/src/Params/FilterParams.cpp
deleted file mode 100644
index 6f87bc1..0000000
--- a/plugins/zynaddsubfx/src/Params/FilterParams.cpp
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- FilterParams.cpp - Parameters for filter
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "FilterParams.h"
-
-FilterParams::FilterParams(unsigned char Ptype_,
- unsigned char Pfreq_,
- unsigned char Pq_)
- : PresetsArray()
-{
- setpresettype("Pfilter");
- Dtype = Ptype_;
- Dfreq = Pfreq_;
- Dq = Pq_;
-
- changed = false;
- defaults();
-}
-
-FilterParams::~FilterParams()
-{}
-
-
-void FilterParams::defaults()
-{
- Ptype = Dtype;
- Pfreq = Dfreq;
- Pq = Dq;
-
- Pstages = 0;
- Pfreqtrack = 64;
- Pgain = 64;
- Pcategory = 0;
-
- Pnumformants = 3;
- Pformantslowness = 64;
- for(int j = 0; j < FF_MAX_VOWELS; j++)
- defaults(j);
- ;
-
- Psequencesize = 3;
- for(int i = 0; i < FF_MAX_SEQUENCE; i++)
- Psequence[i].nvowel = i % FF_MAX_VOWELS;
-
- Psequencestretch = 40;
- Psequencereversed = 0;
- Pcenterfreq = 64; //1 kHz
- Poctavesfreq = 64;
- Pvowelclearness = 64;
-}
-
-void FilterParams::defaults(int n)
-{
- int j = n;
- for(int i = 0; i < FF_MAX_FORMANTS; i++) {
- Pvowels[j].formants[i].freq = (int)(RND * 127.0); //some random freqs
- Pvowels[j].formants[i].q = 64;
- Pvowels[j].formants[i].amp = 127;
- }
-}
-
-
-/*
- * Get the parameters from other FilterParams
- */
-
-void FilterParams::getfromFilterParams(FilterParams *pars)
-{
- defaults();
-
- if(pars == NULL)
- return;
-
- Ptype = pars->Ptype;
- Pfreq = pars->Pfreq;
- Pq = pars->Pq;
-
- Pstages = pars->Pstages;
- Pfreqtrack = pars->Pfreqtrack;
- Pgain = pars->Pgain;
- Pcategory = pars->Pcategory;
-
- Pnumformants = pars->Pnumformants;
- Pformantslowness = pars->Pformantslowness;
- for(int j = 0; j < FF_MAX_VOWELS; j++) {
- for(int i = 0; i < FF_MAX_FORMANTS; i++) {
- Pvowels[j].formants[i].freq = pars->Pvowels[j].formants[i].freq;
- Pvowels[j].formants[i].q = pars->Pvowels[j].formants[i].q;
- Pvowels[j].formants[i].amp = pars->Pvowels[j].formants[i].amp;
- }
- }
-
- Psequencesize = pars->Psequencesize;
- for(int i = 0; i < FF_MAX_SEQUENCE; i++)
- Psequence[i].nvowel = pars->Psequence[i].nvowel;
-
- Psequencestretch = pars->Psequencestretch;
- Psequencereversed = pars->Psequencereversed;
- Pcenterfreq = pars->Pcenterfreq;
- Poctavesfreq = pars->Poctavesfreq;
- Pvowelclearness = pars->Pvowelclearness;
-}
-
-
-/*
- * Parameter control
- */
-REALTYPE FilterParams::getfreq()
-{
- return (Pfreq / 64.0 - 1.0) * 5.0;
-}
-
-REALTYPE FilterParams::getq()
-{
- return exp(pow((REALTYPE) Pq / 127.0, 2) * log(1000.0)) - 0.9;
-}
-REALTYPE FilterParams::getfreqtracking(REALTYPE notefreq)
-{
- return log(notefreq / 440.0) * (Pfreqtrack - 64.0) / (64.0 * LOG_2);
-}
-
-REALTYPE FilterParams::getgain()
-{
- return (Pgain / 64.0 - 1.0) * 30.0; //-30..30dB
-}
-
-/*
- * Get the center frequency of the formant's graph
- */
-REALTYPE FilterParams::getcenterfreq()
-{
- return 10000.0 * pow(10, -(1.0 - Pcenterfreq / 127.0) * 2.0);
-}
-
-/*
- * Get the number of octave that the formant functions applies to
- */
-REALTYPE FilterParams::getoctavesfreq()
-{
- return 0.25 + 10.0 * Poctavesfreq / 127.0;
-}
-
-/*
- * Get the frequency from x, where x is [0..1]
- */
-REALTYPE FilterParams::getfreqx(REALTYPE x)
-{
- if(x > 1.0)
- x = 1.0;
- REALTYPE octf = pow(2.0, getoctavesfreq());
- return getcenterfreq() / sqrt(octf) * pow(octf, x);
-}
-
-/*
- * Get the x coordinate from frequency (used by the UI)
- */
-REALTYPE FilterParams::getfreqpos(REALTYPE freq)
-{
- return (log(freq) - log(getfreqx(0.0))) / log(2.0) / getoctavesfreq();
-}
-
-
-/*
- * Get the freq. response of the formant filter
- */
-void FilterParams::formantfilterH(int nvowel, int nfreqs, REALTYPE *freqs)
-{
- REALTYPE c[3], d[3];
- REALTYPE filter_freq, filter_q, filter_amp;
- REALTYPE omega, sn, cs, alpha;
-
- for(int i = 0; i < nfreqs; i++)
- freqs[i] = 0.0;
-
- //for each formant...
- for(int nformant = 0; nformant < Pnumformants; nformant++) {
- //compute formant parameters(frequency,amplitude,etc.)
- filter_freq = getformantfreq(Pvowels[nvowel].formants[nformant].freq);
- filter_q = getformantq(Pvowels[nvowel].formants[nformant].q) * getq();
- if(Pstages > 0)
- filter_q =
- (filter_q > 1.0 ? pow(filter_q, 1.0 / (Pstages + 1)) : filter_q);
-
- filter_amp = getformantamp(Pvowels[nvowel].formants[nformant].amp);
-
-
- if(filter_freq <= (SAMPLE_RATE / 2 - 100.0)) {
- omega = 2 * PI * filter_freq / SAMPLE_RATE;
- sn = sin(omega);
- cs = cos(omega);
- alpha = sn / (2 * filter_q);
- REALTYPE tmp = 1 + alpha;
- c[0] = alpha / tmp *sqrt(filter_q + 1);
- c[1] = 0;
- c[2] = -alpha / tmp *sqrt(filter_q + 1);
- d[1] = -2 * cs / tmp * (-1);
- d[2] = (1 - alpha) / tmp * (-1);
- }
- else
- continue;
-
-
- for(int i = 0; i < nfreqs; i++) {
- REALTYPE freq = getfreqx(i / (REALTYPE) nfreqs);
- if(freq > SAMPLE_RATE / 2) {
- for(int tmp = i; tmp < nfreqs; tmp++)
- freqs[tmp] = 0.0;
- break;
- }
- REALTYPE fr = freq / SAMPLE_RATE * PI * 2.0;
- REALTYPE x = c[0], y = 0.0;
- for(int n = 1; n < 3; n++) {
- x += cos(n * fr) * c[n];
- y -= sin(n * fr) * c[n];
- }
- REALTYPE h = x * x + y * y;
- x = 1.0;
- y = 0.0;
- for(int n = 1; n < 3; n++) {
- x -= cos(n * fr) * d[n];
- y += sin(n * fr) * d[n];
- }
- h = h / (x * x + y * y);
-
- freqs[i] += pow(h, (Pstages + 1.0) / 2.0) * filter_amp;
- }
- }
- for(int i = 0; i < nfreqs; i++) {
- if(freqs[i] > 0.000000001)
- freqs[i] = rap2dB(freqs[i]) + getgain();
- else
- freqs[i] = -90.0;
- }
-}
-
-/*
- * Transforms a parameter to the real value
- */
-REALTYPE FilterParams::getformantfreq(unsigned char freq)
-{
- REALTYPE result = getfreqx(freq / 127.0);
- return result;
-}
-
-REALTYPE FilterParams::getformantamp(unsigned char amp)
-{
- REALTYPE result = pow(0.1, (1.0 - amp / 127.0) * 4.0);
- return result;
-}
-
-REALTYPE FilterParams::getformantq(unsigned char q)
-{
- //temp
- REALTYPE result = pow(25.0, (q - 32.0) / 64.0);
- return result;
-}
-
-
-
-void FilterParams::add2XMLsection(XMLwrapper *xml, int n)
-{
- int nvowel = n;
- for(int nformant = 0; nformant < FF_MAX_FORMANTS; nformant++) {
- xml->beginbranch("FORMANT", nformant);
- xml->addpar("freq", Pvowels[nvowel].formants[nformant].freq);
- xml->addpar("amp", Pvowels[nvowel].formants[nformant].amp);
- xml->addpar("q", Pvowels[nvowel].formants[nformant].q);
- xml->endbranch();
- }
-}
-
-void FilterParams::add2XML(XMLwrapper *xml)
-{
- //filter parameters
- xml->addpar("category", Pcategory);
- xml->addpar("type", Ptype);
- xml->addpar("freq", Pfreq);
- xml->addpar("q", Pq);
- xml->addpar("stages", Pstages);
- xml->addpar("freq_track", Pfreqtrack);
- xml->addpar("gain", Pgain);
-
- //formant filter parameters
- if((Pcategory == 1) || (!xml->minimal)) {
- xml->beginbranch("FORMANT_FILTER");
- xml->addpar("num_formants", Pnumformants);
- xml->addpar("formant_slowness", Pformantslowness);
- xml->addpar("vowel_clearness", Pvowelclearness);
- xml->addpar("center_freq", Pcenterfreq);
- xml->addpar("octaves_freq", Poctavesfreq);
- for(int nvowel = 0; nvowel < FF_MAX_VOWELS; nvowel++) {
- xml->beginbranch("VOWEL", nvowel);
- add2XMLsection(xml, nvowel);
- xml->endbranch();
- }
- xml->addpar("sequence_size", Psequencesize);
- xml->addpar("sequence_stretch", Psequencestretch);
- xml->addparbool("sequence_reversed", Psequencereversed);
- for(int nseq = 0; nseq < FF_MAX_SEQUENCE; nseq++) {
- xml->beginbranch("SEQUENCE_POS", nseq);
- xml->addpar("vowel_id", Psequence[nseq].nvowel);
- xml->endbranch();
- }
- xml->endbranch();
- }
-}
-
-
-void FilterParams::getfromXMLsection(XMLwrapper *xml, int n)
-{
- int nvowel = n;
- for(int nformant = 0; nformant < FF_MAX_FORMANTS; nformant++) {
- if(xml->enterbranch("FORMANT", nformant) == 0)
- continue;
- Pvowels[nvowel].formants[nformant].freq = xml->getpar127(
- "freq",
- Pvowels[nvowel
- ].formants[nformant].freq);
- Pvowels[nvowel].formants[nformant].amp = xml->getpar127(
- "amp",
- Pvowels[nvowel
- ].formants[nformant].amp);
- Pvowels[nvowel].formants[nformant].q =
- xml->getpar127("q", Pvowels[nvowel].formants[nformant].q);
- xml->exitbranch();
- }
-}
-
-void FilterParams::getfromXML(XMLwrapper *xml)
-{
- //filter parameters
- Pcategory = xml->getpar127("category", Pcategory);
- Ptype = xml->getpar127("type", Ptype);
- Pfreq = xml->getpar127("freq", Pfreq);
- Pq = xml->getpar127("q", Pq);
- Pstages = xml->getpar127("stages", Pstages);
- Pfreqtrack = xml->getpar127("freq_track", Pfreqtrack);
- Pgain = xml->getpar127("gain", Pgain);
-
- //formant filter parameters
- if(xml->enterbranch("FORMANT_FILTER")) {
- Pnumformants = xml->getpar127("num_formants", Pnumformants);
- Pformantslowness = xml->getpar127("formant_slowness", Pformantslowness);
- Pvowelclearness = xml->getpar127("vowel_clearness", Pvowelclearness);
- Pcenterfreq = xml->getpar127("center_freq", Pcenterfreq);
- Poctavesfreq = xml->getpar127("octaves_freq", Poctavesfreq);
-
- for(int nvowel = 0; nvowel < FF_MAX_VOWELS; nvowel++) {
- if(xml->enterbranch("VOWEL", nvowel) == 0)
- continue;
- getfromXMLsection(xml, nvowel);
- xml->exitbranch();
- }
- Psequencesize = xml->getpar127("sequence_size", Psequencesize);
- Psequencestretch = xml->getpar127("sequence_stretch", Psequencestretch);
- Psequencereversed = xml->getparbool("sequence_reversed",
- Psequencereversed);
- for(int nseq = 0; nseq < FF_MAX_SEQUENCE; nseq++) {
- if(xml->enterbranch("SEQUENCE_POS", nseq) == 0)
- continue;
- Psequence[nseq].nvowel = xml->getpar("vowel_id",
- Psequence[nseq].nvowel,
- 0,
- FF_MAX_VOWELS - 1);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/FilterParams.h b/plugins/zynaddsubfx/src/Params/FilterParams.h
deleted file mode 100644
index 8facbe5..0000000
--- a/plugins/zynaddsubfx/src/Params/FilterParams.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- FilterParams.h - Parameters for filter
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef FILTER_PARAMS_H
-#define FILTER_PARAMS_H
-
-#include "../globals.h"
-#include "../Misc/XMLwrapper.h"
-#include "PresetsArray.h"
-
-class FilterParams : public PresetsArray
-{
- public:
- FilterParams(unsigned char Ptype_,
- unsigned char Pfreq,
- unsigned char Pq_);
- ~FilterParams();
-
- void add2XML(XMLwrapper *xml);
- void add2XMLsection(XMLwrapper *xml, int n);
- void defaults();
- void getfromXML(XMLwrapper *xml);
- void getfromXMLsection(XMLwrapper *xml, int n);
-
-
- void getfromFilterParams(FilterParams *pars);
-
- REALTYPE getfreq();
- REALTYPE getq();
- REALTYPE getfreqtracking(REALTYPE notefreq);
- REALTYPE getgain();
-
- unsigned char Pcategory; //Filter category (Analog/Formant/StVar)
- unsigned char Ptype; // Filter type (for analog lpf,hpf,bpf..)
- unsigned char Pfreq; // Frequency (64-central frequency)
- unsigned char Pq; // Q parameters (resonance or bandwidth)
- unsigned char Pstages; //filter stages+1
- unsigned char Pfreqtrack; //how the filter frequency is changing according the note frequency
- unsigned char Pgain; //filter's output gain
-
- //Formant filter parameters
- unsigned char Pnumformants; //how many formants are used
- unsigned char Pformantslowness; //how slow varies the formants
- unsigned char Pvowelclearness; //how vowels are kept clean (how much try to avoid "mixed" vowels)
- unsigned char Pcenterfreq, Poctavesfreq; //the center frequency of the res. func., and the number of octaves
-
- struct {
- struct {
- unsigned char freq, amp, q; //frequency,amplitude,Q
- } formants[FF_MAX_FORMANTS];
- } Pvowels[FF_MAX_VOWELS];
-
-
- unsigned char Psequencesize; //how many vowels are in the sequence
- unsigned char Psequencestretch; //how the sequence is stretched (how the input from filter envelopes/LFOs/etc. is "stretched")
- unsigned char Psequencereversed; //if the input from filter envelopes/LFOs/etc. is reversed(negated)
- struct {
- unsigned char nvowel; //the vowel from the position
- } Psequence[FF_MAX_SEQUENCE];
-
- REALTYPE getcenterfreq();
- REALTYPE getoctavesfreq();
- REALTYPE getfreqpos(REALTYPE freq);
- REALTYPE getfreqx(REALTYPE x);
-
- void formantfilterH(int nvowel, int nfreqs, REALTYPE *freqs); //used by UI
-
- REALTYPE getformantfreq(unsigned char freq);
- REALTYPE getformantamp(unsigned char amp);
- REALTYPE getformantq(unsigned char q);
-
- bool changed;
-
- private:
- void defaults(int n);
-
- //stored default parameters
- unsigned char Dtype;
- unsigned char Dfreq;
- unsigned char Dq;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/LFOParams.cpp b/plugins/zynaddsubfx/src/Params/LFOParams.cpp
deleted file mode 100644
index 33028de..0000000
--- a/plugins/zynaddsubfx/src/Params/LFOParams.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- LFOParams.cpp - Parameters for LFO
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <stdio.h>
-#include "../globals.h"
-#include "LFOParams.h"
-
-int LFOParams::time;
-
-LFOParams::LFOParams(char Pfreq_,
- char Pintensity_,
- char Pstartphase_,
- char PLFOtype_,
- char Prandomness_,
- char Pdelay_,
- char Pcontinous_,
- char fel_):Presets()
-{
- switch(fel_) {
- case 0:
- setpresettype("Plfofrequency");
- break;
- case 1:
- setpresettype("Plfoamplitude");
- break;
- case 2:
- setpresettype("Plfofilter");
- break;
- }
- Dfreq = Pfreq_;
- Dintensity = Pintensity_;
- Dstartphase = Pstartphase_;
- DLFOtype = PLFOtype_;
- Drandomness = Prandomness_;
- Ddelay = Pdelay_;
- Dcontinous = Pcontinous_;
- fel = fel_;
- time = 0;
-
- defaults();
-}
-
-LFOParams::~LFOParams()
-{}
-
-void LFOParams::defaults()
-{
- Pfreq = Dfreq / 127.0;
- Pintensity = Dintensity;
- Pstartphase = Dstartphase;
- PLFOtype = DLFOtype;
- Prandomness = Drandomness;
- Pdelay = Ddelay;
- Pcontinous = Dcontinous;
- Pfreqrand = 0;
- Pstretch = 64;
-}
-
-
-void LFOParams::add2XML(XMLwrapper *xml)
-{
- xml->addparreal("freq", Pfreq);
- xml->addpar("intensity", Pintensity);
- xml->addpar("start_phase", Pstartphase);
- xml->addpar("lfo_type", PLFOtype);
- xml->addpar("randomness_amplitude", Prandomness);
- xml->addpar("randomness_frequency", Pfreqrand);
- xml->addpar("delay", Pdelay);
- xml->addpar("stretch", Pstretch);
- xml->addparbool("continous", Pcontinous);
-}
-
-void LFOParams::getfromXML(XMLwrapper *xml)
-{
- Pfreq = xml->getparreal("freq", Pfreq, 0.0, 1.0);
- Pintensity = xml->getpar127("intensity", Pintensity);
- Pstartphase = xml->getpar127("start_phase", Pstartphase);
- PLFOtype = xml->getpar127("lfo_type", PLFOtype);
- Prandomness = xml->getpar127("randomness_amplitude", Prandomness);
- Pfreqrand = xml->getpar127("randomness_frequency", Pfreqrand);
- Pdelay = xml->getpar127("delay", Pdelay);
- Pstretch = xml->getpar127("stretch", Pstretch);
- Pcontinous = xml->getparbool("continous", Pcontinous);
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/LFOParams.h b/plugins/zynaddsubfx/src/Params/LFOParams.h
deleted file mode 100644
index 6a7dcd9..0000000
--- a/plugins/zynaddsubfx/src/Params/LFOParams.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- LFOParams.h - Parameters for LFO
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef LFO_PARAMS_H
-#define LFO_PARAMS_H
-
-#include "../Misc/XMLwrapper.h"
-#include "Presets.h"
-
-class LFOParams:public Presets
-{
- public:
- LFOParams(char Pfreq_,
- char Pintensity_,
- char Pstartphase_,
- char PLFOtype_,
- char Prandomness_,
- char Pdelay_,
- char Pcontinous,
- char fel_);
- ~LFOParams();
-
- void add2XML(XMLwrapper *xml);
- void defaults();
- /**Loads the LFO from the xml*/
- void getfromXML(XMLwrapper *xml);
-
- /* MIDI Parameters*/
- REALTYPE Pfreq; /**<frequency*/
- unsigned char Pintensity; /**<intensity*/
- unsigned char Pstartphase; /**<start phase (0=random)*/
- unsigned char PLFOtype; /**<LFO type (sin,triangle,square,ramp,...)*/
- unsigned char Prandomness; /**<randomness (0=off)*/
- unsigned char Pfreqrand; /**<frequency randomness (0=off)*/
- unsigned char Pdelay; /**<delay (0=off)*/
- unsigned char Pcontinous; /**<1 if LFO is continous*/
- unsigned char Pstretch; /**<how the LFO is "stretched" according the note frequency (64=no stretch)*/
-
- int fel; //what kind is the LFO (0 - frequency, 1 - amplitude, 2 - filter)
- static int time; //is used by Pcontinous parameter
- private:
- /* Default parameters */
- unsigned char Dfreq;
- unsigned char Dintensity;
- unsigned char Dstartphase;
- unsigned char DLFOtype;
- unsigned char Drandomness;
- unsigned char Ddelay;
- unsigned char Dcontinous;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/PADnoteParameters.cpp b/plugins/zynaddsubfx/src/Params/PADnoteParameters.cpp
deleted file mode 100644
index a44da25..0000000
--- a/plugins/zynaddsubfx/src/Params/PADnoteParameters.cpp
+++ /dev/null
@@ -1,911 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PADnoteParameters.cpp - Parameters for PADnote (PADsynth)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#include <math.h>
-#include "PADnoteParameters.h"
-#include "../Output/WAVaudiooutput.h"
-using namespace std;
-
-PADnoteParameters::PADnoteParameters(FFTwrapper *fft_,
- pthread_mutex_t *mutex_):Presets()
-{
- setpresettype("Ppadsyth");
-
- fft = fft_;
- mutex = mutex_;
-
- resonance = new Resonance();
- oscilgen = new OscilGen(fft_, resonance);
- oscilgen->ADvsPAD = true;
-
- FreqEnvelope = new EnvelopeParams(0, 0);
- FreqEnvelope->ASRinit(64, 50, 64, 60);
- FreqLfo = new LFOParams(70, 0, 64, 0, 0, 0, 0, 0);
-
- AmpEnvelope = new EnvelopeParams(64, 1);
- AmpEnvelope->ADSRinit_dB(0, 40, 127, 25);
- AmpLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 1);
-
- GlobalFilter = new FilterParams(2, 94, 40);
- FilterEnvelope = new EnvelopeParams(0, 1);
- FilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64);
- FilterLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 2);
-
- for(int i = 0; i < PAD_MAX_SAMPLES; i++)
- sample[i].smp = NULL;
- newsample.smp = NULL;
-
- defaults();
-}
-
-PADnoteParameters::~PADnoteParameters()
-{
- deletesamples();
- delete (oscilgen);
- delete (resonance);
-
- delete (FreqEnvelope);
- delete (FreqLfo);
- delete (AmpEnvelope);
- delete (AmpLfo);
- delete (GlobalFilter);
- delete (FilterEnvelope);
- delete (FilterLfo);
-}
-
-void PADnoteParameters::defaults()
-{
- Pmode = 0;
- Php.base.type = 0;
- Php.base.par1 = 80;
- Php.freqmult = 0;
- Php.modulator.par1 = 0;
- Php.modulator.freq = 30;
- Php.width = 127;
- Php.amp.type = 0;
- Php.amp.mode = 0;
- Php.amp.par1 = 80;
- Php.amp.par2 = 64;
- Php.autoscale = true;
- Php.onehalf = 0;
-
- setPbandwidth(500);
- Pbwscale = 0;
-
- resonance->defaults();
- oscilgen->defaults();
-
- Phrpos.type = 0;
- Phrpos.par1 = 64;
- Phrpos.par2 = 64;
- Phrpos.par3 = 0;
-
- Pquality.samplesize = 3;
- Pquality.basenote = 4;
- Pquality.oct = 3;
- Pquality.smpoct = 2;
-
- PStereo = 1; //stereo
- /* Frequency Global Parameters */
- Pfixedfreq = 0;
- PfixedfreqET = 0;
- PDetune = 8192; //zero
- PCoarseDetune = 0;
- PDetuneType = 1;
- FreqEnvelope->defaults();
- FreqLfo->defaults();
-
- /* Amplitude Global Parameters */
- PVolume = 90;
- PPanning = 64; //center
- PAmpVelocityScaleFunction = 64;
- AmpEnvelope->defaults();
- AmpLfo->defaults();
- PPunchStrength = 0;
- PPunchTime = 60;
- PPunchStretch = 64;
- PPunchVelocitySensing = 72;
-
- /* Filter Global Parameters*/
- PFilterVelocityScale = 64;
- PFilterVelocityScaleFunction = 64;
- GlobalFilter->defaults();
- FilterEnvelope->defaults();
- FilterLfo->defaults();
-
- deletesamples();
-}
-
-void PADnoteParameters::deletesample(int n)
-{
- if((n < 0) || (n >= PAD_MAX_SAMPLES))
- return;
- if(sample[n].smp != NULL) {
- delete[] sample[n].smp;
- sample[n].smp = NULL;
- }
- sample[n].size = 0;
- sample[n].basefreq = 440.0;
-}
-
-void PADnoteParameters::deletesamples()
-{
- for(int i = 0; i < PAD_MAX_SAMPLES; i++)
- deletesample(i);
-}
-
-/*
- * Get the harmonic profile (i.e. the frequency distributio of a single harmonic)
- */
-REALTYPE PADnoteParameters::getprofile(REALTYPE *smp, int size)
-{
- for(int i = 0; i < size; i++)
- smp[i] = 0.0;
- const int supersample = 16;
- REALTYPE basepar = pow(2.0, (1.0 - Php.base.par1 / 127.0) * 12.0);
- REALTYPE freqmult = floor(pow(2.0,
- Php.freqmult / 127.0 * 5.0) + 0.000001);
-
- REALTYPE modfreq = floor(pow(2.0,
- Php.modulator.freq / 127.0
- * 5.0) + 0.000001);
- REALTYPE modpar1 = pow(Php.modulator.par1 / 127.0, 4.0) * 5.0 / sqrt(
- modfreq);
- REALTYPE amppar1 =
- pow(2.0, pow(Php.amp.par1 / 127.0, 2.0) * 10.0) - 0.999;
- REALTYPE amppar2 = (1.0 - Php.amp.par2 / 127.0) * 0.998 + 0.001;
- REALTYPE width = pow(150.0 / (Php.width + 22.0), 2.0);
-
- for(int i = 0; i < size * supersample; i++) {
- bool makezero = false;
- REALTYPE x = i * 1.0 / (size * (REALTYPE) supersample);
-
- REALTYPE origx = x;
-
- //do the sizing (width)
- x = (x - 0.5) * width + 0.5;
- if(x < 0.0) {
- x = 0.0;
- makezero = true;
- }
- else {
- if(x > 1.0) {
- x = 1.0;
- makezero = true;
- }
- }
-
- //compute the full profile or one half
- switch(Php.onehalf) {
- case 1:
- x = x * 0.5 + 0.5;
- break;
- case 2:
- x = x * 0.5;
- break;
- }
-
- REALTYPE x_before_freq_mult = x;
-
- //do the frequency multiplier
- x *= freqmult;
-
- //do the modulation of the profile
- x += sin(x_before_freq_mult * 3.1415926 * modfreq) * modpar1;
- x = fmod(x + 1000.0, 1.0) * 2.0 - 1.0;
-
-
- //this is the base function of the profile
- REALTYPE f;
- switch(Php.base.type) {
- case 1:
- f = exp(-(x * x) * basepar);
- if(f < 0.4)
- f = 0.0;
- else
- f = 1.0;
- break;
- case 2:
- f = exp(-(fabs(x)) * sqrt(basepar));
- break;
- default:
- f = exp(-(x * x) * basepar);
- break;
- }
- if(makezero)
- f = 0.0;
-
- REALTYPE amp = 1.0;
- origx = origx * 2.0 - 1.0;
-
- //compute the amplitude multiplier
- switch(Php.amp.type) {
- case 1:
- amp = exp(-(origx * origx) * 10.0 * amppar1);
- break;
- case 2:
- amp = 0.5 * (1.0 + cos(3.1415926 * origx * sqrt(amppar1 * 4.0 + 1.0)));
- break;
- case 3:
- amp = 1.0 / (pow(origx * (amppar1 * 2.0 + 0.8), 14.0) + 1.0);
- break;
- }
-
- //apply the amplitude multiplier
- REALTYPE finalsmp = f;
- if(Php.amp.type != 0)
- switch(Php.amp.mode) {
- case 0:
- finalsmp = amp * (1.0 - amppar2) + finalsmp * amppar2;
- break;
- case 1:
- finalsmp *= amp * (1.0 - amppar2) + amppar2;
- break;
- case 2:
- finalsmp = finalsmp / (amp + pow(amppar2, 4.0) * 20.0 + 0.0001);
- break;
- case 3:
- finalsmp = amp / (finalsmp + pow(amppar2, 4.0) * 20.0 + 0.0001);
- break;
- }
- ;
-
- smp[i / supersample] += finalsmp / supersample;
- }
-
- //normalize the profile (make the max. to be equal to 1.0)
- REALTYPE max = 0.0;
- for(int i = 0; i < size; i++) {
- if(smp[i] < 0.0)
- smp[i] = 0.0;
- if(smp[i] > max)
- max = smp[i];
- }
- if(max < 0.00001)
- max = 1.0;
- for(int i = 0; i < size; i++)
- smp[i] /= max;
-
- if(!Php.autoscale)
- return 0.5;
-
- //compute the estimated perceived bandwidth
- REALTYPE sum = 0.0;
- int i;
- for(i = 0; i < size / 2 - 2; i++) {
- sum += smp[i] * smp[i] + smp[size - i - 1] * smp[size - i - 1];
- if(sum >= 4.0)
- break;
- }
-
- REALTYPE result = 1.0 - 2.0 * i / (REALTYPE) size;
- return result;
-}
-
-/*
- * Compute the real bandwidth in cents and returns it
- * Also, sets the bandwidth parameter
- */
-REALTYPE PADnoteParameters::setPbandwidth(int Pbandwidth)
-{
- this->Pbandwidth = Pbandwidth;
- REALTYPE result = pow(Pbandwidth / 1000.0, 1.1);
- result = pow(10.0, result * 4.0) * 0.25;
- return result;
-}
-
-/*
- * Get the harmonic(overtone) position
- */
-REALTYPE PADnoteParameters::getNhr(int n)
-{
- REALTYPE result = 1.0;
- REALTYPE par1 = pow(10.0, -(1.0 - Phrpos.par1 / 255.0) * 3.0);
- REALTYPE par2 = Phrpos.par2 / 255.0;
-
- REALTYPE n0 = n - 1.0;
- REALTYPE tmp = 0.0;
- int thresh = 0;
- switch(Phrpos.type) {
- case 1:
- thresh = (int)(par2 * par2 * 100.0) + 1;
- if(n < thresh)
- result = n;
- else
- result = 1.0 + n0 + (n0 - thresh + 1.0) * par1 * 8.0;
- break;
- case 2:
- thresh = (int)(par2 * par2 * 100.0) + 1;
- if(n < thresh)
- result = n;
- else
- result = 1.0 + n0 - (n0 - thresh + 1.0) * par1 * 0.90;
- break;
- case 3:
- tmp = par1 * 100.0 + 1.0;
- result = pow(n0 / tmp, 1.0 - par2 * 0.8) * tmp + 1.0;
- break;
- case 4:
- result = n0
- * (1.0
- - par1)
- + pow(n0 * 0.1, par2 * 3.0 + 1.0) * par1 * 10.0 + 1.0;
- break;
- case 5:
- result = n0
- + sin(n0 * par2 * par2 * PI * 0.999) * sqrt(par1) * 2.0 + 1.0;
- break;
- case 6:
- tmp = pow(par2 * 2.0, 2.0) + 0.1;
- result = n0 * pow(1.0 + par1 * pow(n0 * 0.8, tmp), tmp) + 1.0;
- break;
- default:
- result = n;
- break;
- }
-
- REALTYPE par3 = Phrpos.par3 / 255.0;
-
- REALTYPE iresult = floor(result + 0.5);
- REALTYPE dresult = result - iresult;
-
- result = iresult + (1.0 - par3) * dresult;
-
- return result;
-}
-
-/*
- * Generates the long spectrum for Bandwidth mode (only amplitudes are generated; phases will be random)
- */
-void PADnoteParameters::generatespectrum_bandwidthMode(REALTYPE *spectrum,
- int size,
- REALTYPE basefreq,
- REALTYPE *profile,
- int profilesize,
- REALTYPE bwadjust)
-{
- for(int i = 0; i < size; i++)
- spectrum[i] = 0.0;
-
- REALTYPE harmonics[OSCIL_SIZE / 2];
- for(int i = 0; i < OSCIL_SIZE / 2; i++)
- harmonics[i] = 0.0;
- //get the harmonic structure from the oscillator (I am using the frequency amplitudes, only)
- oscilgen->get(harmonics, basefreq, false);
-
- //normalize
- REALTYPE max = 0.0;
- for(int i = 0; i < OSCIL_SIZE / 2; i++)
- if(harmonics[i] > max)
- max = harmonics[i];
- if(max < 0.000001)
- max = 1;
- for(int i = 0; i < OSCIL_SIZE / 2; i++)
- harmonics[i] /= max;
-
- for(int nh = 1; nh < OSCIL_SIZE / 2; nh++) { //for each harmonic
- REALTYPE realfreq = getNhr(nh) * basefreq;
- if(realfreq > SAMPLE_RATE * 0.49999)
- break;
- if(realfreq < 20.0)
- break;
- if(harmonics[nh - 1] < 1e-4)
- continue;
-
- //compute the bandwidth of each harmonic
- REALTYPE bandwidthcents = setPbandwidth(Pbandwidth);
- REALTYPE bw =
- (pow(2.0, bandwidthcents / 1200.0) - 1.0) * basefreq / bwadjust;
- REALTYPE power = 1.0;
- switch(Pbwscale) {
- case 0:
- power = 1.0;
- break;
- case 1:
- power = 0.0;
- break;
- case 2:
- power = 0.25;
- break;
- case 3:
- power = 0.5;
- break;
- case 4:
- power = 0.75;
- break;
- case 5:
- power = 1.5;
- break;
- case 6:
- power = 2.0;
- break;
- case 7:
- power = -0.5;
- break;
- }
- bw = bw * pow(realfreq / basefreq, power);
- int ibw = (int)((bw / (SAMPLE_RATE * 0.5) * size)) + 1;
-
- REALTYPE amp = harmonics[nh - 1];
- if(resonance->Penabled)
- amp *= resonance->getfreqresponse(realfreq);
-
- if(ibw > profilesize) { //if the bandwidth is larger than the profilesize
- REALTYPE rap = sqrt((REALTYPE)profilesize / (REALTYPE)ibw);
- int cfreq =
- (int) (realfreq / (SAMPLE_RATE * 0.5) * size) - ibw / 2;
- for(int i = 0; i < ibw; i++) {
- int src = (int)(i * rap * rap);
- int spfreq = i + cfreq;
- if(spfreq < 0)
- continue;
- if(spfreq >= size)
- break;
- spectrum[spfreq] += amp * profile[src] * rap;
- }
- }
- else { //if the bandwidth is smaller than the profilesize
- REALTYPE rap = sqrt((REALTYPE)ibw / (REALTYPE)profilesize);
- REALTYPE ibasefreq = realfreq / (SAMPLE_RATE * 0.5) * size;
- for(int i = 0; i < profilesize; i++) {
- REALTYPE idfreq = i / (REALTYPE)profilesize - 0.5;
- idfreq *= ibw;
- int spfreq = (int) (idfreq + ibasefreq);
- REALTYPE fspfreq = fmod(idfreq + ibasefreq, 1.0);
- if(spfreq <= 0)
- continue;
- if(spfreq >= size - 1)
- break;
- spectrum[spfreq] += amp * profile[i] * rap * (1.0 - fspfreq);
- spectrum[spfreq + 1] += amp * profile[i] * rap * fspfreq;
- }
- }
- }
-}
-
-/*
- * Generates the long spectrum for non-Bandwidth modes (only amplitudes are generated; phases will be random)
- */
-void PADnoteParameters::generatespectrum_otherModes(REALTYPE *spectrum,
- int size,
- REALTYPE basefreq,
- REALTYPE *profile,
- int profilesize,
- REALTYPE bwadjust)
-{
- for(int i = 0; i < size; i++)
- spectrum[i] = 0.0;
-
- REALTYPE harmonics[OSCIL_SIZE / 2];
- for(int i = 0; i < OSCIL_SIZE / 2; i++)
- harmonics[i] = 0.0;
- //get the harmonic structure from the oscillator (I am using the frequency amplitudes, only)
- oscilgen->get(harmonics, basefreq, false);
-
- //normalize
- REALTYPE max = 0.0;
- for(int i = 0; i < OSCIL_SIZE / 2; i++)
- if(harmonics[i] > max)
- max = harmonics[i];
- if(max < 0.000001)
- max = 1;
- for(int i = 0; i < OSCIL_SIZE / 2; i++)
- harmonics[i] /= max;
-
- for(int nh = 1; nh < OSCIL_SIZE / 2; nh++) { //for each harmonic
- REALTYPE realfreq = getNhr(nh) * basefreq;
-
- ///sa fac aici interpolarea si sa am grija daca frecv descresc
-
- if(realfreq > SAMPLE_RATE * 0.49999)
- break;
- if(realfreq < 20.0)
- break;
-// if (harmonics[nh-1]<1e-4) continue;
-
-
- REALTYPE amp = harmonics[nh - 1];
- if(resonance->Penabled)
- amp *= resonance->getfreqresponse(realfreq);
- int cfreq = (int) (realfreq / (SAMPLE_RATE * 0.5) * size);
-
- spectrum[cfreq] = amp + 1e-9;
- }
-
- if(Pmode != 1) {
- int old = 0;
- for(int k = 1; k < size; k++) {
- if((spectrum[k] > 1e-10) || (k == (size - 1))) {
- int delta = k - old;
- REALTYPE val1 = spectrum[old];
- REALTYPE val2 = spectrum[k];
- REALTYPE idelta = 1.0 / delta;
- for(int i = 0; i < delta; i++) {
- REALTYPE x = idelta * i;
- spectrum[old + i] = val1 * (1.0 - x) + val2 * x;
- }
- old = k;
- }
- }
- }
-}
-
-/*
- * Applies the parameters (i.e. computes all the samples, based on parameters);
- */
-void PADnoteParameters::applyparameters(bool lockmutex)
-{
- const int samplesize = (((int) 1) << (Pquality.samplesize + 14));
- int spectrumsize = samplesize / 2;
- REALTYPE *spectrum = new REALTYPE[spectrumsize];
- int profilesize = 512;
- REALTYPE profile[profilesize];
-
-
- REALTYPE bwadjust = getprofile(profile, profilesize);
-// for (int i=0;i<profilesize;i++) profile[i]*=profile[i];
- REALTYPE basefreq = 65.406 * pow(2.0, Pquality.basenote / 2);
- if(Pquality.basenote % 2 == 1)
- basefreq *= 1.5;
-
- int samplemax = Pquality.oct + 1;
- int smpoct = Pquality.smpoct;
- if(Pquality.smpoct == 5)
- smpoct = 6;
- if(Pquality.smpoct == 6)
- smpoct = 12;
- if(smpoct != 0)
- samplemax *= smpoct;
- else
- samplemax = samplemax / 2 + 1;
- if(samplemax == 0)
- samplemax = 1;
-
- //prepare a BIG FFT stuff
- FFTwrapper *fft = new FFTwrapper(samplesize);
- FFTFREQS fftfreqs;
- newFFTFREQS(&fftfreqs, samplesize / 2);
-
- REALTYPE adj[samplemax]; //this is used to compute frequency relation to the base frequency
- for(int nsample = 0; nsample < samplemax; nsample++)
- adj[nsample] = (Pquality.oct + 1.0) * (REALTYPE)nsample / samplemax;
- for(int nsample = 0; nsample < samplemax; nsample++) {
- REALTYPE tmp = adj[nsample] - adj[samplemax - 1] * 0.5;
- REALTYPE basefreqadjust = pow(2.0, tmp);
-
- if(Pmode == 0)
- generatespectrum_bandwidthMode(spectrum,
- spectrumsize,
- basefreq * basefreqadjust,
- profile,
- profilesize,
- bwadjust);
- else
- generatespectrum_otherModes(spectrum,
- spectrumsize,
- basefreq * basefreqadjust,
- profile,
- profilesize,
- bwadjust);
-
- const int extra_samples = 5; //the last samples contains the first samples (used for linear/cubic interpolation)
- newsample.smp = new REALTYPE[samplesize + extra_samples];
-
- newsample.smp[0] = 0.0;
- for(int i = 1; i < spectrumsize; i++) { //randomize the phases
- REALTYPE phase = RND * 6.29;
- fftfreqs.c[i] = spectrum[i] * cos(phase);
- fftfreqs.s[i] = spectrum[i] * sin(phase);
- }
- fft->freqs2smps(fftfreqs, newsample.smp); //that's all; here is the only ifft for the whole sample; no windows are used ;-)
-
-
- //normalize(rms)
- REALTYPE rms = 0.0;
- for(int i = 0; i < samplesize; i++)
- rms += newsample.smp[i] * newsample.smp[i];
- rms = sqrt(rms);
- if(rms < 0.000001)
- rms = 1.0;
- rms *= sqrt(262144.0 / samplesize);
- for(int i = 0; i < samplesize; i++)
- newsample.smp[i] *= 1.0 / rms * 50.0;
-
- //prepare extra samples used by the linear or cubic interpolation
- for(int i = 0; i < extra_samples; i++)
- newsample.smp[i + samplesize] = newsample.smp[i];
-
- //replace the current sample with the new computed sample
- if(lockmutex) {
- pthread_mutex_lock(mutex);
- deletesample(nsample);
- sample[nsample].smp = newsample.smp;
- sample[nsample].size = samplesize;
- sample[nsample].basefreq = basefreq * basefreqadjust;
- pthread_mutex_unlock(mutex);
- }
- else {
- deletesample(nsample);
- sample[nsample].smp = newsample.smp;
- sample[nsample].size = samplesize;
- sample[nsample].basefreq = basefreq * basefreqadjust;
- }
- newsample.smp = NULL;
- }
- delete (fft);
- deleteFFTFREQS(&fftfreqs);
-
- delete[] spectrum;
-
- //delete the additional samples that might exists and are not useful
- if(lockmutex) {
- pthread_mutex_lock(mutex);
- for(int i = samplemax; i < PAD_MAX_SAMPLES; i++)
- deletesample(i);
- pthread_mutex_unlock(mutex);
- }
- else
- for(int i = samplemax; i < PAD_MAX_SAMPLES; i++)
- deletesample(i);
- ;
-}
-
-void PADnoteParameters::export2wav(string basefilename)
-{
- applyparameters(true);
- basefilename += "_PADsynth_";
- for(int k = 0; k < PAD_MAX_SAMPLES; k++) {
- if(sample[k].smp == NULL)
- continue;
- char tmpstr[20];
- snprintf(tmpstr, 20, "_%02d", k + 1);
- string filename = basefilename + string(tmpstr) + ".wav";
- WAVaudiooutput wav;
- if(wav.newfile(filename, SAMPLE_RATE, 1)) {
- int nsmps = sample[k].size;
- short int *smps = new short int[nsmps];
- for(int i = 0; i < nsmps; i++)
- smps[i] = (short int)(sample[k].smp[i] * 32767.0);
- wav.write_mono_samples(nsmps, smps);
- wav.close();
- }
- }
-}
-
-
-
-void PADnoteParameters::add2XML(XMLwrapper *xml)
-{
- xml->setPadSynth(true);
-
- xml->addparbool("stereo", PStereo);
- xml->addpar("mode", Pmode);
- xml->addpar("bandwidth", Pbandwidth);
- xml->addpar("bandwidth_scale", Pbwscale);
-
- xml->beginbranch("HARMONIC_PROFILE");
- xml->addpar("base_type", Php.base.type);
- xml->addpar("base_par1", Php.base.par1);
- xml->addpar("frequency_multiplier", Php.freqmult);
- xml->addpar("modulator_par1", Php.modulator.par1);
- xml->addpar("modulator_frequency", Php.modulator.freq);
- xml->addpar("width", Php.width);
- xml->addpar("amplitude_multiplier_type", Php.amp.type);
- xml->addpar("amplitude_multiplier_mode", Php.amp.mode);
- xml->addpar("amplitude_multiplier_par1", Php.amp.par1);
- xml->addpar("amplitude_multiplier_par2", Php.amp.par2);
- xml->addparbool("autoscale", Php.autoscale);
- xml->addpar("one_half", Php.onehalf);
- xml->endbranch();
-
- xml->beginbranch("OSCIL");
- oscilgen->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("RESONANCE");
- resonance->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("HARMONIC_POSITION");
- xml->addpar("type", Phrpos.type);
- xml->addpar("parameter1", Phrpos.par1);
- xml->addpar("parameter2", Phrpos.par2);
- xml->addpar("parameter3", Phrpos.par3);
- xml->endbranch();
-
- xml->beginbranch("SAMPLE_QUALITY");
- xml->addpar("samplesize", Pquality.samplesize);
- xml->addpar("basenote", Pquality.basenote);
- xml->addpar("octaves", Pquality.oct);
- xml->addpar("samples_per_octave", Pquality.smpoct);
- xml->endbranch();
-
- xml->beginbranch("AMPLITUDE_PARAMETERS");
- xml->addpar("volume", PVolume);
- xml->addpar("panning", PPanning);
- xml->addpar("velocity_sensing", PAmpVelocityScaleFunction);
- xml->addpar("punch_strength", PPunchStrength);
- xml->addpar("punch_time", PPunchTime);
- xml->addpar("punch_stretch", PPunchStretch);
- xml->addpar("punch_velocity_sensing", PPunchVelocitySensing);
-
- xml->beginbranch("AMPLITUDE_ENVELOPE");
- AmpEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("AMPLITUDE_LFO");
- AmpLfo->add2XML(xml);
- xml->endbranch();
-
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_PARAMETERS");
- xml->addpar("fixed_freq", Pfixedfreq);
- xml->addpar("fixed_freq_et", PfixedfreqET);
- xml->addpar("detune", PDetune);
- xml->addpar("coarse_detune", PCoarseDetune);
- xml->addpar("detune_type", PDetuneType);
-
- xml->beginbranch("FREQUENCY_ENVELOPE");
- FreqEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_LFO");
- FreqLfo->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-
- xml->beginbranch("FILTER_PARAMETERS");
- xml->addpar("velocity_sensing_amplitude", PFilterVelocityScale);
- xml->addpar("velocity_sensing", PFilterVelocityScaleFunction);
-
- xml->beginbranch("FILTER");
- GlobalFilter->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FILTER_ENVELOPE");
- FilterEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FILTER_LFO");
- FilterLfo->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-}
-
-void PADnoteParameters::getfromXML(XMLwrapper *xml)
-{
- PStereo = xml->getparbool("stereo", PStereo);
- Pmode = xml->getpar127("mode", 0);
- Pbandwidth = xml->getpar("bandwidth", Pbandwidth, 0, 1000);
- Pbwscale = xml->getpar127("bandwidth_scale", Pbwscale);
-
- if(xml->enterbranch("HARMONIC_PROFILE")) {
- Php.base.type = xml->getpar127("base_type", Php.base.type);
- Php.base.par1 = xml->getpar127("base_par1", Php.base.par1);
- Php.freqmult = xml->getpar127("frequency_multiplier",
- Php.freqmult);
- Php.modulator.par1 = xml->getpar127("modulator_par1",
- Php.modulator.par1);
- Php.modulator.freq = xml->getpar127("modulator_frequency",
- Php.modulator.freq);
- Php.width = xml->getpar127("width", Php.width);
- Php.amp.type = xml->getpar127("amplitude_multiplier_type",
- Php.amp.type);
- Php.amp.mode = xml->getpar127("amplitude_multiplier_mode",
- Php.amp.mode);
- Php.amp.par1 = xml->getpar127("amplitude_multiplier_par1",
- Php.amp.par1);
- Php.amp.par2 = xml->getpar127("amplitude_multiplier_par2",
- Php.amp.par2);
- Php.autoscale = xml->getparbool("autoscale", Php.autoscale);
- Php.onehalf = xml->getpar127("one_half", Php.onehalf);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("OSCIL")) {
- oscilgen->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("RESONANCE")) {
- resonance->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("HARMONIC_POSITION")) {
- Phrpos.type = xml->getpar127("type", Phrpos.type);
- Phrpos.par1 = xml->getpar("parameter1", Phrpos.par1, 0, 255);
- Phrpos.par2 = xml->getpar("parameter2", Phrpos.par2, 0, 255);
- Phrpos.par3 = xml->getpar("parameter3", Phrpos.par3, 0, 255);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("SAMPLE_QUALITY")) {
- Pquality.samplesize = xml->getpar127("samplesize", Pquality.samplesize);
- Pquality.basenote = xml->getpar127("basenote", Pquality.basenote);
- Pquality.oct = xml->getpar127("octaves", Pquality.oct);
- Pquality.smpoct = xml->getpar127("samples_per_octave",
- Pquality.smpoct);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
- PVolume = xml->getpar127("volume", PVolume);
- PPanning = xml->getpar127("panning", PPanning);
- PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing",
- PAmpVelocityScaleFunction);
- PPunchStrength = xml->getpar127("punch_strength", PPunchStrength);
- PPunchTime = xml->getpar127("punch_time", PPunchTime);
- PPunchStretch = xml->getpar127("punch_stretch", PPunchStretch);
- PPunchVelocitySensing = xml->getpar127("punch_velocity_sensing",
- PPunchVelocitySensing);
-
- xml->enterbranch("AMPLITUDE_ENVELOPE");
- AmpEnvelope->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("AMPLITUDE_LFO");
- AmpLfo->getfromXML(xml);
- xml->exitbranch();
-
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
- Pfixedfreq = xml->getpar127("fixed_freq", Pfixedfreq);
- PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET);
- PDetune = xml->getpar("detune", PDetune, 0, 16383);
- PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383);
- PDetuneType = xml->getpar127("detune_type", PDetuneType);
-
- xml->enterbranch("FREQUENCY_ENVELOPE");
- FreqEnvelope->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FREQUENCY_LFO");
- FreqLfo->getfromXML(xml);
- xml->exitbranch();
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FILTER_PARAMETERS")) {
- PFilterVelocityScale = xml->getpar127("velocity_sensing_amplitude",
- PFilterVelocityScale);
- PFilterVelocityScaleFunction = xml->getpar127(
- "velocity_sensing",
- PFilterVelocityScaleFunction);
-
- xml->enterbranch("FILTER");
- GlobalFilter->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FILTER_ENVELOPE");
- FilterEnvelope->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FILTER_LFO");
- FilterLfo->getfromXML(xml);
- xml->exitbranch();
- xml->exitbranch();
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/PADnoteParameters.h b/plugins/zynaddsubfx/src/Params/PADnoteParameters.h
deleted file mode 100644
index 37d5985..0000000
--- a/plugins/zynaddsubfx/src/Params/PADnoteParameters.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PADnoteParameters.h - Parameters for PADnote (PADsynth)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef PAD_NOTE_PARAMETERS_H
-#define PAD_NOTE_PARAMETERS_H
-
-#include "../Misc/XMLwrapper.h"
-#include "../DSP/FFTwrapper.h"
-#include "../globals.h"
-#include "../Synth/OscilGen.h"
-#include "../Synth/Resonance.h"
-#include "../Misc/Util.h"
-
-#include "EnvelopeParams.h"
-#include "LFOParams.h"
-#include "FilterParams.h"
-#include "Presets.h"
-#include <string>
-#include <pthread.h>
-
-class PADnoteParameters:public Presets
-{
- public:
- PADnoteParameters(FFTwrapper *fft_, pthread_mutex_t *mutex_);
- ~PADnoteParameters();
-
- void defaults();
- void add2XML(XMLwrapper *xml);
- void getfromXML(XMLwrapper *xml);
-
- //returns a value between 0.0-1.0 that represents the estimation perceived bandwidth
- REALTYPE getprofile(REALTYPE *smp, int size);
-
- //parameters
-
- //the mode: 0 - bandwidth, 1 - discrete (bandwidth=0), 2 - continous
- //the harmonic profile is used only on mode 0
- unsigned char Pmode;
-
- //Harmonic profile (the frequency distribution of a single harmonic)
- struct {
- struct { //base function
- unsigned char type;
- unsigned char par1;
- } base;
- unsigned char freqmult; //frequency multiplier of the distribution
- struct { //the modulator of the distribution
- unsigned char par1;
- unsigned char freq;
- } modulator;
-
- unsigned char width; //the width of the resulting function after the modulation
- struct { //the amplitude multiplier of the harmonic profile
- unsigned char mode;
- unsigned char type;
- unsigned char par1;
- unsigned char par2;
- } amp;
- bool autoscale; //if the scale of the harmonic profile is computed automaticaly
- unsigned char onehalf; //what part of the base function is used to make the distribution
- } Php;
-
-
- unsigned int Pbandwidth; //the values are from 0 to 1000
- unsigned char Pbwscale; //how the bandwidth is increased according to the harmonic's frequency
-
- struct { //where are positioned the harmonics (on integer multimplier or different places)
- unsigned char type;
- unsigned char par1, par2, par3; //0..255
- } Phrpos;
-
- struct { //quality of the samples (how many samples, the length of them,etc.)
- unsigned char samplesize;
- unsigned char basenote, oct, smpoct;
- } Pquality;
-
- //frequency parameters
- //If the base frequency is fixed to 440 Hz
- unsigned char Pfixedfreq;
-
- /* Equal temperate (this is used only if the Pfixedfreq is enabled)
- If this parameter is 0, the frequency is fixed (to 440 Hz);
- if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
- unsigned char PfixedfreqET;
- unsigned short int PDetune; //fine detune
- unsigned short int PCoarseDetune; //coarse detune+octave
- unsigned char PDetuneType; //detune type
-
- EnvelopeParams *FreqEnvelope; //Frequency Envelope
- LFOParams *FreqLfo; //Frequency LFO
-
- //Amplitude parameters
- unsigned char PStereo;
- /* Panning - 0 - random
- 1 - left
- 64 - center
- 127 - right */
- unsigned char PPanning;
-
- unsigned char PVolume;
-
- unsigned char PAmpVelocityScaleFunction;
-
- EnvelopeParams *AmpEnvelope;
-
- LFOParams *AmpLfo;
-
- unsigned char PPunchStrength, PPunchTime, PPunchStretch,
- PPunchVelocitySensing;
-
- //Filter Parameters
- FilterParams *GlobalFilter;
-
- // filter velocity sensing
- unsigned char PFilterVelocityScale;
-
- // filter velocity sensing
- unsigned char PFilterVelocityScaleFunction;
-
- EnvelopeParams *FilterEnvelope;
- LFOParams *FilterLfo;
-
-
-
-
- REALTYPE setPbandwidth(int Pbandwidth); //returns the BandWidth in cents
- REALTYPE getNhr(int n); //gets the n-th overtone position relatively to N harmonic
-
- void applyparameters(bool lockmutex);
- void export2wav(std::string basefilename);
-
- OscilGen *oscilgen;
- Resonance *resonance;
-
- struct {
- int size;
- REALTYPE basefreq;
- REALTYPE *smp;
- } sample[PAD_MAX_SAMPLES], newsample;
-
- private:
- void generatespectrum_bandwidthMode(REALTYPE *spectrum,
- int size,
- REALTYPE basefreq,
- REALTYPE *profile,
- int profilesize,
- REALTYPE bwadjust);
- void generatespectrum_otherModes(REALTYPE *spectrum,
- int size,
- REALTYPE basefreq,
- REALTYPE *profile,
- int profilesize,
- REALTYPE bwadjust);
- void deletesamples();
- void deletesample(int n);
-
- FFTwrapper *fft;
- pthread_mutex_t *mutex;
-};
-
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/Presets.cpp b/plugins/zynaddsubfx/src/Params/Presets.cpp
deleted file mode 100644
index 228964a..0000000
--- a/plugins/zynaddsubfx/src/Params/Presets.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Presets.cpp - Presets and Clipboard management
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "Presets.h"
-#include <string.h>
-
-
-Presets::Presets()
-{
- type[0] = 0;
-}
-
-Presets::~Presets()
-{}
-
-void Presets::setpresettype(const char *type)
-{
- strcpy(this->type, type);
-}
-
-void Presets::copy(const char *name)
-{
- XMLwrapper *xml = new XMLwrapper();
-
- //used only for the clipboard
- if(name == NULL)
- xml->minimal = false;
-
- char type[MAX_PRESETTYPE_SIZE];
- strcpy(type, this->type);
- //strcat(type, "n");
- if(name == NULL)
- if(strstr(type, "Plfo") != NULL)
- strcpy(type, "Plfo");
-
- xml->beginbranch(type);
- add2XML(xml);
- xml->endbranch();
-
- if(name == NULL)
- presetsstore.copyclipboard(xml, type);
- else
- presetsstore.copypreset(xml, type, name);
-
- delete (xml);
-}
-
-void Presets::paste(int npreset)
-{
- char type[MAX_PRESETTYPE_SIZE];
- strcpy(type, this->type);
- //strcat(type, "n");
-
- if(npreset == 0)
- if(strstr(type, "Plfo") != NULL)
- strcpy(type, "Plfo");
-
- XMLwrapper *xml = new XMLwrapper();
- if(npreset == 0) {
- if(!checkclipboardtype()) {
- delete (xml);
- return;
- }
- if(!presetsstore.pasteclipboard(xml)) {
- delete (xml);
- return;
- }
- }
- else {
- if(!presetsstore.pastepreset(xml, npreset)) {
- delete (xml);
- return;
- }
- }
-
- if(xml->enterbranch(type) == 0) {
- return;
- }
-
- defaults();
- getfromXML(xml);
-
- xml->exitbranch();
-
- delete (xml);
-}
-
-bool Presets::checkclipboardtype()
-{
- return presetsstore.checkclipboardtype(type);
-}
-
-void Presets::rescanforpresets()
-{
- presetsstore.rescanforpresets(type);
-}
-
-
-void Presets::deletepreset(int npreset)
-{
- presetsstore.deletepreset(npreset);
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/Presets.h b/plugins/zynaddsubfx/src/Params/Presets.h
deleted file mode 100644
index d8000fe..0000000
--- a/plugins/zynaddsubfx/src/Params/Presets.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Presets.h - Presets and Clipboard management
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef PRESETS_H
-#define PRESETS_H
-
-#include "../Misc/XMLwrapper.h"
-
-#include "PresetsStore.h"
-
-/**Presets and Clipboard management*/
-class Presets
-{
- friend class PresetsArray;
- public:
- Presets();
- virtual ~Presets();
-
- virtual void copy(const char *name); /**<if name==NULL, the clipboard is used*/
- virtual void paste(int npreset); //npreset==0 for clipboard
- virtual bool checkclipboardtype();
- void deletepreset(int npreset);
-
- char type[MAX_PRESETTYPE_SIZE];
- //void setelement(int n);
-
- void rescanforpresets();
-
- protected:
- void setpresettype(const char *type);
- private:
- virtual void add2XML(XMLwrapper *xml) = 0;
- virtual void getfromXML(XMLwrapper *xml) = 0;
- virtual void defaults() = 0;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/PresetsArray.cpp b/plugins/zynaddsubfx/src/Params/PresetsArray.cpp
deleted file mode 100644
index b1c9a2e..0000000
--- a/plugins/zynaddsubfx/src/Params/PresetsArray.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PresetsArray.cpp - PresetsArray and Clipboard management
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "PresetsArray.h"
-#include <string.h>
-
-
-PresetsArray::PresetsArray()
-{
- type[0] = 0;
- nelement = -1;
-}
-
-PresetsArray::~PresetsArray()
-{}
-
-void PresetsArray::setpresettype(const char *type)
-{
- strcpy(this->type, type);
-}
-
-void PresetsArray::copy(const char *name)
-{
- XMLwrapper *xml = new XMLwrapper();
-
- //used only for the clipboard
- if(name == NULL)
- xml->minimal = false;
-
- char type[MAX_PRESETTYPE_SIZE];
- strcpy(type, this->type);
- if(nelement != -1)
- strcat(type, "n");
- if(name == NULL)
- if(strstr(type, "Plfo") != NULL)
- strcpy(type, "Plfo");
- ;
-
- xml->beginbranch(type);
- if(nelement == -1)
- add2XML(xml);
- else
- add2XMLsection(xml, nelement);
- xml->endbranch();
-
- if(name == NULL)
- presetsstore.copyclipboard(xml, type);
- else
- presetsstore.copypreset(xml, type, name);
-
- delete (xml);
- nelement = -1;
-}
-
-void PresetsArray::paste(int npreset)
-{
- char type[MAX_PRESETTYPE_SIZE];
- strcpy(type, this->type);
- if(nelement != -1)
- strcat(type, "n");
- if(npreset == 0)
- if(strstr(type, "Plfo") != NULL)
- strcpy(type, "Plfo");
- ;
-
- XMLwrapper *xml = new XMLwrapper();
- if(npreset == 0) {
- if(!checkclipboardtype()) {
- nelement = -1;
- delete (xml);
- return;
- }
- if(!presetsstore.pasteclipboard(xml)) {
- delete (xml);
- nelement = -1;
- return;
- }
- }
- else {
- if(!presetsstore.pastepreset(xml, npreset)) {
- delete (xml);
- nelement = -1;
- return;
- }
- }
-
- if(xml->enterbranch(type) == 0) {
- nelement = -1;
- return;
- }
- if(nelement == -1) {
- defaults();
- getfromXML(xml);
- }
- else {
- defaults(nelement);
- getfromXMLsection(xml, nelement);
- }
- xml->exitbranch();
-
- delete (xml);
- nelement = -1;
-}
-
-bool PresetsArray::checkclipboardtype()
-{
- char type[MAX_PRESETTYPE_SIZE];
- strcpy(type, this->type);
- if(nelement != -1)
- strcat(type, "n");
-
- return presetsstore.checkclipboardtype(type);
-}
-
-void PresetsArray::setelement(int n)
-{
- nelement = n;
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/PresetsArray.h b/plugins/zynaddsubfx/src/Params/PresetsArray.h
deleted file mode 100644
index aea7ed3..0000000
--- a/plugins/zynaddsubfx/src/Params/PresetsArray.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PresetsArray.h - PresetsArray and Clipboard management
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef PRESETSARRAY_H
-#define PRESETSARRAY_H
-
-#include "../Misc/XMLwrapper.h"
-
-#include "Presets.h"
-
-/**PresetsArray and Clipboard management*/
-class PresetsArray : public Presets
-{
- public:
- PresetsArray();
- virtual ~PresetsArray();
-
- void copy(const char *name); /**<if name==NULL, the clipboard is used*/
- void paste(int npreset); //npreset==0 for clipboard
- bool checkclipboardtype();
- void deletepreset(int npreset);
-
- char type[MAX_PRESETTYPE_SIZE];
- void setelement(int n);
-
- void rescanforpresets();
-
- protected:
- void setpresettype(const char *type);
- private:
- virtual void add2XML(XMLwrapper *xml) = 0;
- virtual void getfromXML(XMLwrapper *xml) = 0;
- virtual void defaults() = 0;
- virtual void add2XMLsection(XMLwrapper *xml, int n) = 0;
- virtual void getfromXMLsection(XMLwrapper *xml, int n) = 0;
- virtual void defaults(int n) = 0;
- int nelement;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Params/PresetsStore.cpp b/plugins/zynaddsubfx/src/Params/PresetsStore.cpp
deleted file mode 100644
index 098067f..0000000
--- a/plugins/zynaddsubfx/src/Params/PresetsStore.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PresetsStore.cpp - Presets and Clipboard store
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#include <iostream>
-#include <algorithm>
-#include <cctype>
-#include <stdlib.h>
-#include <string.h>
-#include <dirent.h>
-#include <sys/stat.h>
-
-#include "PresetsStore.h"
-#include "../Misc/Util.h"
-
-using namespace std;
-
-PresetsStore presetsstore;
-
-PresetsStore::PresetsStore()
-{
- clipboard.data = NULL;
- clipboard.type[0] = 0;
-}
-
-PresetsStore::~PresetsStore()
-{
- if(clipboard.data != NULL)
- free(clipboard.data);
- clearpresets();
-}
-
-//Clipboard management
-
-void PresetsStore::copyclipboard(XMLwrapper *xml, char *type)
-{
- strcpy(clipboard.type, type);
- if(clipboard.data != NULL)
- free(clipboard.data);
- clipboard.data = xml->getXMLdata();
-}
-
-bool PresetsStore::pasteclipboard(XMLwrapper *xml)
-{
- if(clipboard.data != NULL)
- xml->putXMLdata(clipboard.data);
- else
- return false;
- return true;
-}
-
-bool PresetsStore::checkclipboardtype(const char *type)
-{
- //makes LFO's compatible
- if((strstr(type,
- "Plfo") != NULL) && (strstr(clipboard.type, "Plfo") != NULL))
- return true;
- return strcmp(type, clipboard.type) == 0;
-}
-
-//Presets management
-void PresetsStore::clearpresets()
-{
- presets.clear();
-}
-
-//a helper function that compares 2 presets[]
-bool PresetsStore::presetstruct::operator<(const presetstruct &b) const
-{
- return name < b.name;
-}
-
-
-void PresetsStore::rescanforpresets(const string &type)
-{
- //std::cout << "Scanning For Presets" << std::endl;
- //std::cout << "Of Type: " << type << std::endl;
-
- clearpresets();
- string ftype = "." + type + ".xpz";
-
- for(int i = 0; i < MAX_BANK_ROOT_DIRS; i++) {
- if(config.cfg.presetsDirList[i] == NULL)
- continue;
-
- //open directory
- string dirname = config.cfg.presetsDirList[i];
- DIR *dir = opendir(dirname.c_str());
- if(dir == NULL)
- continue;
- struct dirent *fn;
-
- //check all files in directory
- while((fn = readdir(dir))) {
- string filename = fn->d_name;
- if(filename.find(ftype) == string::npos)
- continue;
-
- //ensure proper path is formed
- char tmpc = dirname[dirname.size() - 1];
- const char *tmps;
- if((tmpc == '/') || (tmpc == '\\'))
- tmps = "";
- else
- tmps = "/";
-
- string location = "" + dirname + tmps + filename;
-
- //trim file type off of name
- string name = filename.substr(0, filename.find(ftype));
-
- //put on list
- presets.push_back(presetstruct(location, name));
- }
-
- closedir(dir);
- }
-
- //sort the presets
- sort(presets.begin(), presets.end());
-}
-
-
-void PresetsStore::copypreset(XMLwrapper *xml, char *type, string name)
-{
- if(config.cfg.presetsDirList[0] == NULL)
- return;
-
- //make the filenames legal
- for(int i = 0; i < (int) name.size(); i++) {
- char c = name[i];
- if(!(isdigit(c) || isalpha(c) || (c == '-') || (c == ' ')))
- name[i] = '_';
- }
-
- //make path legal
- const string dirname = config.cfg.presetsDirList[0];
- char tmpc = dirname[dirname.size() - 1];
- const char *tmps;
- if((tmpc == '/') || (tmpc == '\\'))
- tmps = "";
- else
- tmps = "/";
-
- string filename("" + dirname + tmps + name + type);
-
- xml->saveXMLfile(filename);
-}
-
-bool PresetsStore::pastepreset(XMLwrapper *xml, int npreset)
-{
- npreset--;
- if(npreset < 0)
- return false;
- unsigned int unsigned_npreset = npreset;
- if(unsigned_npreset >= presets.size())
- return false;
- string filename = presets[unsigned_npreset].file;
- if(filename.empty())
- return false;
- bool result = (xml->loadXMLfile(filename) >= 0);
- return result;
-}
-
-void PresetsStore::deletepreset(int npreset)
-{
- npreset--;
- if(npreset < 0)
- return;
- unsigned int unsigned_npreset = npreset;
- if(unsigned_npreset >= presets.size())
- return;
- string filename = presets[unsigned_npreset].file;
- if(filename.empty())
- return;
- remove(filename.c_str());
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/PresetsStore.h b/plugins/zynaddsubfx/src/Params/PresetsStore.h
deleted file mode 100644
index 0843795..0000000
--- a/plugins/zynaddsubfx/src/Params/PresetsStore.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PresetsStore.cpp - Presets and Clipboard store
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <string>
-#include <vector>
-#include "../Misc/XMLwrapper.h"
-#include "../Misc/Config.h"
-
-#define MAX_PRESETTYPE_SIZE 30
-
-class PresetsStore
-{
- public:
- PresetsStore();
- ~PresetsStore();
-
- //Clipboard stuff
- void copyclipboard(XMLwrapper *xml, char *type);
- bool pasteclipboard(XMLwrapper *xml);
- bool checkclipboardtype(const char *type);
-
- //presets stuff
- void copypreset(XMLwrapper *xml, char *type, std::string name);
- bool pastepreset(XMLwrapper *xml, int npreset);
- void deletepreset(int npreset);
-
- struct presetstruct {
- presetstruct(std::string _file, std::string _name)
- :file(_file),name(_name){};
- bool operator<(const presetstruct &b) const;
- std::string file;
- std::string name;
- };
- std::vector<presetstruct> presets;
-
- void rescanforpresets(const std::string &type);
-
- private:
- struct {
- char *data;
- char type[MAX_PRESETTYPE_SIZE];
- } clipboard;
-
- void clearpresets();
-};
-
-extern PresetsStore presetsstore;
-
diff --git a/plugins/zynaddsubfx/src/Params/SUBnoteParameters.cpp b/plugins/zynaddsubfx/src/Params/SUBnoteParameters.cpp
deleted file mode 100644
index 425ddad..0000000
--- a/plugins/zynaddsubfx/src/Params/SUBnoteParameters.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- SUBnoteParameters.cpp - Parameters for SUBnote (SUBsynth)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "../globals.h"
-#include "SUBnoteParameters.h"
-#include <stdio.h>
-
-SUBnoteParameters::SUBnoteParameters():Presets()
-{
- setpresettype("Psubsyth");
- AmpEnvelope = new EnvelopeParams(64, 1);
- AmpEnvelope->ADSRinit_dB(0, 40, 127, 25);
- FreqEnvelope = new EnvelopeParams(64, 0);
- FreqEnvelope->ASRinit(30, 50, 64, 60);
- BandWidthEnvelope = new EnvelopeParams(64, 0);
- BandWidthEnvelope->ASRinit_bw(100, 70, 64, 60);
-
- GlobalFilter = new FilterParams(2, 80, 40);
- GlobalFilterEnvelope = new EnvelopeParams(0, 1);
- GlobalFilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64);
-
- defaults();
-}
-
-
-void SUBnoteParameters::defaults()
-{
- PVolume = 96;
- PPanning = 64;
- PAmpVelocityScaleFunction = 90;
-
- Pfixedfreq = 0;
- PfixedfreqET = 0;
- Pnumstages = 2;
- Pbandwidth = 40;
- Phmagtype = 0;
- Pbwscale = 64;
- Pstereo = 1;
- Pstart = 1;
-
- PDetune = 8192;
- PCoarseDetune = 0;
- PDetuneType = 1;
- PFreqEnvelopeEnabled = 0;
- PBandWidthEnvelopeEnabled = 0;
-
- for(int n = 0; n < MAX_SUB_HARMONICS; n++) {
- Phmag[n] = 0;
- Phrelbw[n] = 64;
- }
- Phmag[0] = 127;
-
- PGlobalFilterEnabled = 0;
- PGlobalFilterVelocityScale = 64;
- PGlobalFilterVelocityScaleFunction = 64;
-
- AmpEnvelope->defaults();
- FreqEnvelope->defaults();
- BandWidthEnvelope->defaults();
- GlobalFilter->defaults();
- GlobalFilterEnvelope->defaults();
-}
-
-
-
-SUBnoteParameters::~SUBnoteParameters()
-{
- delete (AmpEnvelope);
- delete (FreqEnvelope);
- delete (BandWidthEnvelope);
- delete (GlobalFilter);
- delete (GlobalFilterEnvelope);
-}
-
-
-
-
-void SUBnoteParameters::add2XML(XMLwrapper *xml)
-{
- xml->addpar("num_stages", Pnumstages);
- xml->addpar("harmonic_mag_type", Phmagtype);
- xml->addpar("start", Pstart);
-
- xml->beginbranch("HARMONICS");
- for(int i = 0; i < MAX_SUB_HARMONICS; i++) {
- if((Phmag[i] == 0) && (xml->minimal))
- continue;
- xml->beginbranch("HARMONIC", i);
- xml->addpar("mag", Phmag[i]);
- xml->addpar("relbw", Phrelbw[i]);
- xml->endbranch();
- }
- xml->endbranch();
-
- xml->beginbranch("AMPLITUDE_PARAMETERS");
- xml->addparbool("stereo", Pstereo);
- xml->addpar("volume", PVolume);
- xml->addpar("panning", PPanning);
- xml->addpar("velocity_sensing", PAmpVelocityScaleFunction);
- xml->beginbranch("AMPLITUDE_ENVELOPE");
- AmpEnvelope->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_PARAMETERS");
- xml->addparbool("fixed_freq", Pfixedfreq);
- xml->addpar("fixed_freq_et", PfixedfreqET);
-
- xml->addpar("detune", PDetune);
- xml->addpar("coarse_detune", PCoarseDetune);
- xml->addpar("detune_type", PDetuneType);
-
- xml->addpar("bandwidth", Pbandwidth);
- xml->addpar("bandwidth_scale", Pbwscale);
-
- xml->addparbool("freq_envelope_enabled", PFreqEnvelopeEnabled);
- if((PFreqEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FREQUENCY_ENVELOPE");
- FreqEnvelope->add2XML(xml);
- xml->endbranch();
- }
-
- xml->addparbool("band_width_envelope_enabled", PBandWidthEnvelopeEnabled);
- if((PBandWidthEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("BANDWIDTH_ENVELOPE");
- BandWidthEnvelope->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
-
- xml->beginbranch("FILTER_PARAMETERS");
- xml->addparbool("enabled", PGlobalFilterEnabled);
- if((PGlobalFilterEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FILTER");
- GlobalFilter->add2XML(xml);
- xml->endbranch();
-
- xml->addpar("filter_velocity_sensing",
- PGlobalFilterVelocityScaleFunction);
- xml->addpar("filter_velocity_sensing_amplitude",
- PGlobalFilterVelocityScale);
-
- xml->beginbranch("FILTER_ENVELOPE");
- GlobalFilterEnvelope->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
-}
-
-void SUBnoteParameters::getfromXML(XMLwrapper *xml)
-{
- Pnumstages = xml->getpar127("num_stages", Pnumstages);
- Phmagtype = xml->getpar127("harmonic_mag_type", Phmagtype);
- Pstart = xml->getpar127("start", Pstart);
-
- if(xml->enterbranch("HARMONICS")) {
- Phmag[0] = 0;
- for(int i = 0; i < MAX_SUB_HARMONICS; i++) {
- if(xml->enterbranch("HARMONIC", i) == 0)
- continue;
- Phmag[i] = xml->getpar127("mag", Phmag[i]);
- Phrelbw[i] = xml->getpar127("relbw", Phrelbw[i]);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
- Pstereo = xml->getparbool("stereo", Pstereo);
- PVolume = xml->getpar127("volume", PVolume);
- PPanning = xml->getpar127("panning", PPanning);
- PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing",
- PAmpVelocityScaleFunction);
- if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
- AmpEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
- Pfixedfreq = xml->getparbool("fixed_freq", Pfixedfreq);
- PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET);
-
- PDetune = xml->getpar("detune", PDetune, 0, 16383);
- PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383);
- PDetuneType = xml->getpar127("detune_type", PDetuneType);
-
- Pbandwidth = xml->getpar127("bandwidth", Pbandwidth);
- Pbwscale = xml->getpar127("bandwidth_scale", Pbwscale);
-
- PFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled",
- PFreqEnvelopeEnabled);
- if(xml->enterbranch("FREQUENCY_ENVELOPE")) {
- FreqEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- PBandWidthEnvelopeEnabled = xml->getparbool(
- "band_width_envelope_enabled",
- PBandWidthEnvelopeEnabled);
- if(xml->enterbranch("BANDWIDTH_ENVELOPE")) {
- BandWidthEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FILTER_PARAMETERS")) {
- PGlobalFilterEnabled = xml->getparbool("enabled", PGlobalFilterEnabled);
- if(xml->enterbranch("FILTER")) {
- GlobalFilter->getfromXML(xml);
- xml->exitbranch();
- }
-
- PGlobalFilterVelocityScaleFunction = xml->getpar127(
- "filter_velocity_sensing",
- PGlobalFilterVelocityScaleFunction);
- PGlobalFilterVelocityScale = xml->getpar127(
- "filter_velocity_sensing_amplitude",
- PGlobalFilterVelocityScale);
-
- if(xml->enterbranch("FILTER_ENVELOPE")) {
- GlobalFilterEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Params/SUBnoteParameters.h b/plugins/zynaddsubfx/src/Params/SUBnoteParameters.h
deleted file mode 100644
index 57bc080..0000000
--- a/plugins/zynaddsubfx/src/Params/SUBnoteParameters.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- SUBnoteParameters.h - Parameters for SUBnote (SUBsynth)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef SUB_NOTE_PARAMETERS_H
-#define SUB_NOTE_PARAMETERS_H
-
-#include "../globals.h"
-#include "../Misc/XMLwrapper.h"
-#include "EnvelopeParams.h"
-#include "FilterParams.h"
-#include "Presets.h"
-
-class SUBnoteParameters:public Presets
-{
- public:
- SUBnoteParameters();
- ~SUBnoteParameters();
-
- void add2XML(XMLwrapper *xml);
- void defaults();
- void getfromXML(XMLwrapper *xml);
-
- //Parameters
- //AMPLITUDE PARAMETRERS
- unsigned char Pstereo; //0 for mono,1 for stereo
- unsigned char PVolume;
- unsigned char PPanning;
- unsigned char PAmpVelocityScaleFunction;
- EnvelopeParams *AmpEnvelope;
-
- //Frequency Parameters
- unsigned short int PDetune;
- unsigned short int PCoarseDetune;
- unsigned char PDetuneType;
- unsigned char PFreqEnvelopeEnabled;
- EnvelopeParams *FreqEnvelope;
- unsigned char PBandWidthEnvelopeEnabled;
- EnvelopeParams *BandWidthEnvelope;
-
- //Filter Parameters (Global)
- unsigned char PGlobalFilterEnabled;
- FilterParams *GlobalFilter;
- unsigned char PGlobalFilterVelocityScale;
- unsigned char PGlobalFilterVelocityScaleFunction;
- EnvelopeParams *GlobalFilterEnvelope;
-
-
- //Other Parameters
-
- //If the base frequency is fixed to 440 Hz
- unsigned char Pfixedfreq;
-
- /* Equal temperate (this is used only if the Pfixedfreq is enabled)
- If this parameter is 0, the frequency is fixed (to 440 Hz);
- if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
- unsigned char PfixedfreqET;
-
-
- //how many times the filters are applied
- unsigned char Pnumstages;
-
- //bandwidth
- unsigned char Pbandwidth;
-
- //How the magnitudes are computed (0=linear,1=-60dB,2=-60dB)
- unsigned char Phmagtype;
-
- //Magnitudes
- unsigned char Phmag[MAX_SUB_HARMONICS];
-
- //Relative BandWidth ("64"=1.0)
- unsigned char Phrelbw[MAX_SUB_HARMONICS];
-
- //how much the bandwidth is increased according to lower/higher frequency; 64-default
- unsigned char Pbwscale;
-
- //how the harmonics start("0"=0,"1"=random,"2"=1)
- unsigned char Pstart;
-
-
- private:
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Samples/CMakeLists.txt b/plugins/zynaddsubfx/src/Samples/CMakeLists.txt
deleted file mode 100644
index a6ef7b2..0000000
--- a/plugins/zynaddsubfx/src/Samples/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-set(zynaddsubfx_samples_SRCS
- Sample.cpp
-)
-
-add_library(zynaddsubfx_samples STATIC
- ${zynaddsubfx_samples_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_samples
- zynaddsubfx_samples
- )
diff --git a/plugins/zynaddsubfx/src/Samples/Sample.cpp b/plugins/zynaddsubfx/src/Samples/Sample.cpp
deleted file mode 100644
index 33c9b3a..0000000
--- a/plugins/zynaddsubfx/src/Samples/Sample.cpp
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Sample.cpp - Object for storing information on samples
- Copyright (C) 2009-2009 Mark McCurry
- Author: Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#include <cmath>
-#include <cstring>//for memcpy/memset
-#include <iostream>
-#include "Sample.h"
-
-using namespace std;
-
-/**\TODO start using pointer math here as these will be Frequency called
- * functions throughout the code*/
-Sample::Sample(const Sample &smp)
- :bufferSize(smp.bufferSize)
-{
- buffer = new REALTYPE[bufferSize];
- for(int i = 0; i < bufferSize; ++i)
- *(i + buffer) = *(i + smp.buffer);
-}
-
-Sample::Sample(int length, REALTYPE fill)
- :bufferSize(length)
-{
- if(length < 1)
- bufferSize = 1;
- buffer = new REALTYPE[bufferSize];
- for(int i = 0; i < bufferSize; ++i)
- buffer[i] = fill;
-}
-
-Sample::Sample(int length, const REALTYPE *input)
- :bufferSize(length)
-{
- if(length > 0) {
- buffer = new REALTYPE[length];
- for(int i = 0; i < length; ++i)
- *(buffer + i) = *(input + i);
- }
- else {
- buffer = new REALTYPE[1];
- bufferSize = 1;
- *buffer = 0;
- }
-}
-
-Sample::~Sample()
-{
- delete[] buffer;
-}
-
-void Sample::clear()
-{
- for(int i = 0; i < bufferSize; ++i)
- *(i + buffer) = 0;
-}
-
-void Sample::operator=(const Sample &smp)
-{
- /**\todo rewrite to be less repetitive*/
- if(bufferSize == smp.bufferSize)
- for(int i = 0; i < bufferSize; ++i)
- *(i + buffer) = *(i + smp.buffer);
- else {
- delete[] buffer;
- buffer = new REALTYPE[smp.bufferSize];
- bufferSize = smp.bufferSize;
- for(int i = 0; i < bufferSize; ++i)
- *(i + buffer) = *(i + smp.buffer);
- }
-}
-
-bool Sample::operator==(const Sample &smp) const
-{
- if(this->bufferSize != smp.bufferSize)
- return false;
- for(int i = 0; i < bufferSize; ++i)
- if(this->buffer[i] != smp.buffer[i])
- return false;
- return true;
-}
-
-/**
- * Linear point estimation
- * @param ya Y of point a
- * @param yb Y of point b
- * @param xt X of test point
- * @param xa X of point a
- * @param xb X of point b
- * @return estimated Y of test point
- */
-inline float linearEstimate(float ya, float yb, float xt, int xa = 0, int xb = 1)
-{
- if(xa == xb)
- return ya;
-
- return (yb-ya) * (xt-xa)/(xb-xa) + ya;
-}
-
-void Sample::resize(int nsize)
-{
- if(bufferSize == nsize)
- return;
- else {//resampling occurs here
- float ratio = (nsize * 1.0) / (bufferSize * 1.0);
-
- int nBufferSize = nsize;
- float *nBuffer = new float[nBufferSize];
-
- //take care of edge cases
- *nBuffer = *buffer;
- *(nBuffer+nBufferSize-1) = *(buffer+bufferSize-1);
-
- //addition is done to avoid 0 edge case
- for(int i = 1; i < nBufferSize - 1; ++i)
- {
- float left = floor(i/ratio);
- float right = ceil((i+1)/ratio);
- float test = i/ratio;
- if(left > bufferSize - 1)
- left = bufferSize - 1;
- if(right > bufferSize - 1)
- right = bufferSize - 1;
- if(left > test)
- test = left;
- nBuffer[i] = linearEstimate(buffer[(int)left],
- buffer[(int)right],
- test, (int)left, (int)right);
- }
-
- //put the new data in
- delete[] buffer;
- buffer = nBuffer;
- bufferSize = nBufferSize;
- }
-}
-
-void Sample::append(const Sample &smp)
-{
- int nbufferSize = bufferSize + smp.bufferSize;
- float *nbuffer = new float[nbufferSize];
-
- memcpy(nbuffer, buffer, bufferSize * sizeof(float));
- memcpy(nbuffer + bufferSize, smp.buffer, smp.bufferSize * sizeof(float));
- delete buffer;
-
- buffer = nbuffer;
- bufferSize = nbufferSize;
-}
-
-REALTYPE Sample::max() const
-{
- REALTYPE max = -1500; //a good low considering that samples should store values -1.0 to 1.0
- for(int i = 0; i < bufferSize; ++i)
- if(buffer[i] > max)
- max = buffer[i];
- return max;
-}
-
-REALTYPE Sample::min() const
-{
- REALTYPE min = 1500; //a good high considering that samples should store values -1.0 to 1.0
- for(int i = 0; i < bufferSize; ++i)
- if(buffer[i] < min)
- min = buffer[i];
- return min;
-}
-
-REALTYPE Sample::absMax() const
-{
- REALTYPE max = 0;
- for(int i = 0; i < bufferSize; ++i)
- if(fabs(buffer[i]) > max)
- max = fabs(buffer[i]);
- return max;
-}
-
diff --git a/plugins/zynaddsubfx/src/Samples/Sample.h b/plugins/zynaddsubfx/src/Samples/Sample.h
deleted file mode 100644
index de6b6df..0000000
--- a/plugins/zynaddsubfx/src/Samples/Sample.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Sample.h - Object for storing information on samples
- Copyright (C) 2009-2009 Mark McCurry
- Author: Mark McCurry
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#ifndef SAMPLE_H
-#define SAMPLE_H
-#include "../globals.h"
-/**
- * Base Class for Samples
- */
-class Sample
-{
- public:
- Sample(const Sample &smp);
- Sample(int length, REALTYPE fill = 0);
- Sample(int length, const REALTYPE *fill);
- ~Sample();
- /**Fills the buffer with zeros*/
- void clear();
- /**States the size of the buffer
- * @return the size of the buffer*/
- int size() const {
- return bufferSize;
- }
- /**Provides the indexing operator for non const Samples*/
- REALTYPE &operator[](int index) {
- return *(buffer + index % bufferSize);
- }
- /**Provides the indexing operator for const Samples*/
- const REALTYPE &operator[](int index) const {
- return *(buffer + index % bufferSize);
- }
- /**Provides the assignment operator*/
- void operator=(const Sample &smp);
- /**Provides the == operator*/
- bool operator==(const Sample &smp) const;
-
- /**Provides direct access to the buffer to allow for transition
- *
- * This method is like c_str() from the string class and should be used
- * sparingly*/
- const REALTYPE *c_buf() const {return buffer;}
-
- /**Change the size of the sample*/
- void resize(int nsize);
-
- /**Appends another Sample to this Sample*/
- void append(const Sample &smp);
-
- REALTYPE max() const;
- REALTYPE min() const;
- REALTYPE absMax() const;
- private:
- int bufferSize;
- float *buffer;
-};
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Seq/CMakeLists.txt b/plugins/zynaddsubfx/src/Seq/CMakeLists.txt
deleted file mode 100644
index 008c821..0000000
--- a/plugins/zynaddsubfx/src/Seq/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-set(zynaddsubfx_seq_SRCS
- MIDIEvents.cpp
- MIDIFile.cpp
- Sequencer.cpp
-)
-
-add_library(zynaddsubfx_seq STATIC
- ${zynaddsubfx_seq_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_seq)
diff --git a/plugins/zynaddsubfx/src/Seq/MIDIEvents.cpp b/plugins/zynaddsubfx/src/Seq/MIDIEvents.cpp
deleted file mode 100644
index 22d9a05..0000000
--- a/plugins/zynaddsubfx/src/Seq/MIDIEvents.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- MIDIEvents.cpp - It stores the midi events from midi file or sequencer
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include "MIDIEvents.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-MIDIEvents::MIDIEvents()
-{}
-
-MIDIEvents::~MIDIEvents()
-{}
-
-
-/************** Track stuff ***************/
-void MIDIEvents::writeevent(list *l, event *ev)
-{
- listpos *tmp = new listpos;
- tmp->next = NULL;
- tmp->ev = *ev;
- if(l->current != NULL)
- l->current->next = tmp;
- else
- l->first = tmp;
- l->current = tmp;
-// printf("Wx%x ",(int) l->current);
-// printf("-> %d \n",l->current->ev.deltatime);
- l->size++;
-}
-
-void MIDIEvents::readevent(list *l, event *ev)
-{
- if(l->current == NULL) {
- ev->type = -1;
- return;
- }
- *ev = l->current->ev;
- l->current = l->current->next;
-
- //test
- if(l->current != NULL) {
-// ev->deltatime=10000;
-// printf("Rx%d\n",l->current->ev.deltatime);
-// printf("Rx%x ",(int) l->current);
-// printf("-> %d (next=%x) \n",(int)l->current->ev.deltatime,(int)l->current->next);
- }
-}
-
-
-void MIDIEvents::rewindlist(list *l)
-{
- l->current = l->first;
-}
-
-void MIDIEvents::deletelist(list *l)
-{
- l->current = l->first;
- if(l->current == NULL)
- return;
- while(l->current->next != NULL) {
- listpos *tmp = l->current;
- l->current = l->current->next;
- delete (tmp);
- }
- deletelistreference(l);
-}
-
-void MIDIEvents::deletelistreference(list *l)
-{
- l->current = l->first = NULL;
- l->size = 0;
- l->length = 0.0;
-}
-
diff --git a/plugins/zynaddsubfx/src/Seq/MIDIEvents.h b/plugins/zynaddsubfx/src/Seq/MIDIEvents.h
deleted file mode 100644
index 2224048..0000000
--- a/plugins/zynaddsubfx/src/Seq/MIDIEvents.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- MIDIEvents.h - It stores the midi events from midi file or sequencer
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#ifndef MIDI_EVENTS_H
-#define MIDI_EVENTS_H
-
-#include "../globals.h"
-#define NUM_MIDI_TRACKS NUM_MIDI_CHANNELS
-
-/**storage the midi events from midi file or sequencer
- * \todo this looks quite like a remake of a linked list
- * if it is, then it should be rewritten to use <list>*/
-class MIDIEvents
-{
- friend class MIDIFile;
- public:
- MIDIEvents();
- ~MIDIEvents();
-
- protected:
-
- /* Events */
- struct event {
- int deltatime;
- int channel; //on what midi channel is
- int type, par1, par2; //type=1 for note, type=2 for controller, type=255 for time messages
- } tmpevent;
- struct listpos {
- event ev;
- struct listpos *next;
- };
- struct list {
- listpos *first, *current;
- int size; //how many events are
- double length; //in seconds
- };
- struct {
- list track; //the stored track
- list record; //the track being "recorded" from midi
- } miditrack[NUM_MIDI_TRACKS];
-
- void writeevent(list *l, event *ev);
- void readevent(list *l, event *ev);
-
- void rewindlist(list *l);
- void deletelist(list *l);
- void deletelistreference(list *l);
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Seq/MIDIFile.cpp b/plugins/zynaddsubfx/src/Seq/MIDIFile.cpp
deleted file mode 100644
index d6c70ec..0000000
--- a/plugins/zynaddsubfx/src/Seq/MIDIFile.cpp
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- MIDIFile.cpp - MIDI file loader
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include "MIDIFile.h"
-
-
-MIDIFile::MIDIFile()
-{
- midifile = NULL;
- midifilesize = 0;
- midifilek = 0;
- midieof = false;
- me = NULL;
-}
-
-MIDIFile::~MIDIFile()
-{
- clearmidifile();
-}
-
-int MIDIFile::loadfile(const char *filename)
-{
- clearmidifile();
-
- FILE *file = fopen(filename, "r");
- if(file == NULL)
- return -1;
-
- char header[4];
- ZERO(header, 4);
- if (fread(header, 4, 1, file) != 1) {
- return -1;
- }
-
- //test to see if this a midi file
- if((header[0] != 'M') || (header[1] != 'T') || (header[2] != 'h')
- || (header[3] != 'd')) {
- fclose(file);
- return -1;
- }
-
- //get the filesize
- fseek(file, 0, SEEK_END);
- midifilesize = ftell(file);
- rewind(file);
-
- midifile = new unsigned char[midifilesize];
- ZERO(midifile, midifilesize);
- if (fread(midifile, midifilesize, 1, file) != 1) {
- clearmidifile();
- return -1;
- }
- fclose(file);
-
-// for (int i=0;i<midifilesize;i++) printf("%2x ",midifile[i]);
-// printf("\n");
-
-
- return 0;
-}
-
-int MIDIFile::parsemidifile(MIDIEvents *me_)
-{
- this->me = me_;
-
- //read the header
- int chunk = getint32(); //MThd
- if(chunk != 0x4d546864)
- return -1;
- int size = getint32();
- if(size != 6)
- return -1; //header is always 6 bytes long
-
-
- int format = getint16();
- printf("format %d\n", format);
-
- int ntracks = getint16(); //this is always 1 if the format is "0"
- printf("ntracks %d\n", ntracks);
-
- int division = getint16();
- printf("division %d\n", division);
- if(division >= 0) { //delta time units in each a quater note
-// tick=???;
- }
- else //SMPTE (frames/second and ticks/frame)
- printf(
- "ERROR:in MIDIFile.cpp::parsemidifile() - SMPTE not implemented yet.");
- ;
-
- if(ntracks >= NUM_MIDI_TRACKS)
- ntracks = NUM_MIDI_TRACKS - 1;
-
- for(int n = 0; n < ntracks; n++) {
- if(parsetrack(n) < 0) {
- clearmidifile();
- return -1;
- }
- }
-
- printf("\n\nCURRENT File position is = 0x%x\n", midifilek);
- printf("\nMIDI file succesfully parsed.\n");
-// printf("\n0x%x\n",getbyte());
-
- this->me = NULL;
- return 0;
-}
-
-//private members
-
-
-int MIDIFile::parsetrack(int ntrack)
-{
- printf("\n--==*Reading track %d **==--\n", ntrack);
-
- int chunk = getint32(); //MTrk
- if(chunk != 0x4d54726b)
- return -1;
-
- int size = getint32();
- printf("size = %d\n", size);
-
- int oldmidifilek = midifilek;
-
- unsigned char lastmsg = 0;
- unsigned int dt = 0;
-
- while(!midieof) {
- unsigned int msgdeltatime = getvarint32();
-
-/// printf("MSGDELTATIME = %d\n",msgdeltatime);
-
-// dt+=msgdeltatime;
-
- int msg = peekbyte();
-/// printf("raw msg=0x%x ",msg);
- if(msg < 0x80)
- msg = lastmsg;
- else {
- lastmsg = msg;
- getbyte();
- }
-/// printf("msg=0x%x\n",msg);
-
-// dt+=msgdeltatime;
- add_dt(ntrack, msgdeltatime);
-
- unsigned int mtype, mlength;
-
- switch(msg) {
- case 0x80 ... 0x8f: //note on off
- parsenoteoff(ntrack, msg & 0x0f, dt);
- dt = 0;
- break;
- case 0x90 ... 0x9f: //note on (or note off)
- parsenoteon(ntrack, msg & 0x0f, dt);
- dt = 0;
- break;
- case 0xa0 ... 0xaf: //aftertouch - ignored
- skipnbytes(2);
- break;
- case 0xb0 ... 0xbf: //control change
- parsecontrolchange(ntrack, msg & 0x0f, dt);
- dt = 0;
- break;
- case 0xc0 ... 0xcf: //program change - ignored
- skipnbytes(1);
- break;
- case 0xd0 ... 0xdf: //channel pressure - ignored
- skipnbytes(1);
- break;
- case 0xe0 ... 0xef: //channel mode messages
- skipnbytes(2);
- break;
- case 0xf0: //sysex - ignored
- while(getbyte() != 0xf7) {
- if(midieof)
- break;
- }
- break;
- case 0xf7: //sysex (another type) - ignored
- skipnbytes(getvarint32());
- break;
-
- case 0xff: //meta-event
- mtype = getbyte();
- mlength = getbyte();
- parsemetaevent(mtype, mlength);
- break;
-
- default:
- getbyte();
- printf("UNKNOWN message! 0x%x\n", msg);
- return -1;
- break;
- }
-
-
-
- if(midieof)
- return -1;
-
- if((midifilek - oldmidifilek) == size)
- break;
- else
- if((midifilek - oldmidifilek) > size)
- return -1;
-// if (size!=6) return(-1);//header is always 6 bytes long
- }
-
- printf("End Track\n\n");
-
- return 0;
-}
-
-
-void MIDIFile::parsenoteoff(char ntrack, char chan, unsigned int dt)
-{
- unsigned char note;
- note = getbyte();
-
- (void) getbyte(); //Read in unused noteoff_velocity
- if(chan >= NUM_MIDI_CHANNELS)
- return;
-
- me->tmpevent.deltatime = convertdt(dt);
- me->tmpevent.type = 1;
- me->tmpevent.par1 = note;
- me->tmpevent.par2 = 0;
- me->tmpevent.channel = chan;
-
- printf("Note off:%d \n", note);
-
- ///test
-// ntrack=0;
-
- me->writeevent(&me->miditrack[(int)ntrack].record, &me->tmpevent);
-}
-
-
-void MIDIFile::parsenoteon(char ntrack, char chan, unsigned int dt)
-{
- unsigned char note, vel;
- note = getbyte();
- vel = getbyte();
-
-// printf("ntrack=%d\n",ntrack);
- printf("[dt %d ] Note on:%d %d\n", dt, note, vel);
-
- if(chan >= NUM_MIDI_CHANNELS)
- return;
-
- me->tmpevent.deltatime = convertdt(dt);
- me->tmpevent.type = 1;
- me->tmpevent.par1 = note;
- me->tmpevent.par2 = vel;
- me->tmpevent.channel = chan;
- me->writeevent(&me->miditrack[(int)ntrack].record, &me->tmpevent);
-}
-
-void MIDIFile::parsecontrolchange(char ntrack, char chan, unsigned int dt)
-{
- unsigned char control, value;
- control = getbyte();
- value = getbyte();
-
- if(chan >= NUM_MIDI_CHANNELS)
- return;
-
- printf("[dt %d] Control change:%d %d\n", dt, control, value);
-
- me->tmpevent.deltatime = convertdt(dt);
- me->tmpevent.type = 2;
- me->tmpevent.par1 = control; //???????????? ma uit la Sequencer::recordnote() din varianele vechi de zyn
- me->tmpevent.par2 = value;
- me->tmpevent.channel = chan;
- me->writeevent(&me->miditrack[(int)ntrack].record, &me->tmpevent);
-}
-
-void MIDIFile::parsepitchwheel(char ntrack, char chan, unsigned int dt)
-{
- unsigned char valhi, vallo;
- vallo = getbyte();
- valhi = getbyte();
-
- if(chan >= NUM_MIDI_CHANNELS)
- return;
-
- int value = (int)valhi * 128 + vallo;
-
- printf("[dt %d] Pitch wheel:%d\n", dt, value);
-}
-
-void MIDIFile::parsemetaevent(unsigned char mtype, unsigned char mlength)
-{
- int oldmidifilek = midifilek;
- printf("meta-event type=0x%x length=%d\n", mtype, mlength);
-
-
-
- midifilek = oldmidifilek + mlength;
-}
-
-void MIDIFile::add_dt(char ntrack, unsigned int dt)
-{
- me->tmpevent.deltatime = convertdt(dt);
- me->tmpevent.type = 255;
- me->tmpevent.par1 = 0;
- me->tmpevent.par2 = 0;
- me->tmpevent.channel = 0;
- me->writeevent(&me->miditrack[(int)ntrack].record, &me->tmpevent);
-}
-
-
-unsigned int MIDIFile::convertdt(unsigned int dt)
-{
- double result = dt;
- printf("DT=%d\n", dt);
-
- return (int) (result * 15.0);
-}
-
-
-void MIDIFile::clearmidifile()
-{
- if(midifile != NULL)
- delete (midifile);
- midifile = NULL;
- midifilesize = 0;
- midifilek = 0;
- midieof = false;
-}
-
-unsigned char MIDIFile::getbyte()
-{
- if(midifilek >= midifilesize) {
- midieof = true;
- return 0;
- }
-
-/// printf("(%d) ",midifile[midifilek]);
- return midifile[midifilek++];
-}
-
-unsigned char MIDIFile::peekbyte()
-{
- if(midifilek >= midifilesize) {
- midieof = true;
- return 0;
- }
- return midifile[midifilek];
-}
-
-unsigned int MIDIFile::getint32()
-{
- unsigned int result = 0;
- for(int i = 0; i < 4; i++)
- result = result * 256 + getbyte();
- ;
- if(midieof)
- result = 0;
- return result;
-}
-
-unsigned short int MIDIFile::getint16()
-{
- unsigned short int result = 0;
- for(int i = 0; i < 2; i++)
- result = result * 256 + getbyte();
- ;
- if(midieof)
- result = 0;
- return result;
-}
-
-unsigned int MIDIFile::getvarint32()
-{
- unsigned long result = 0;
-/// printf("\n[start]");
-
- if((result = getbyte()) & 0x80) {
- result &= 0x7f;
- uint8_t b;
- do {
- b = getbyte();
- result = (result << 7) + (b & 0x7f);
- } while(b & 0x80);
- }
-/// printf("[end - result= %d]\n",result);
- return result;
-}
-
-
-void MIDIFile::skipnbytes(int n)
-{
- midifilek += n;
- if(midifilek >= midifilesize) {
- midifilek = midifilesize - 1;
- midieof = true;
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Seq/MIDIFile.h b/plugins/zynaddsubfx/src/Seq/MIDIFile.h
deleted file mode 100644
index ed1153b..0000000
--- a/plugins/zynaddsubfx/src/Seq/MIDIFile.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- MIDIFile.h - MIDI file loader
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef MIDIFILE_H
-#define MIDIFILE_H
-
-#include "../globals.h"
-#include "MIDIEvents.h"
-
-/**MIDI file loader*/
-class MIDIFile
-{
- public:
- MIDIFile();
- ~MIDIFile();
-
- /**Loads the given file
- * @param filename The name of the file to load
- * @return -1 if there is an error, otherwise 0*/
- int loadfile(const char *filename);
-
- //returns -1 if there is an error, otherwise 0
- int parsemidifile(MIDIEvents *me_);
-
- private:
- MIDIEvents *me;
-
- unsigned char *midifile;
- int midifilesize, midifilek;
- bool midieof;
-
- //returns -1 if there is an error, otherwise 0
- int parsetrack(int ntrack);
-
- void parsenoteoff(char ntrack, char chan, unsigned int dt);
- void parsenoteon(char ntrack, char chan, unsigned int dt);
- void parsecontrolchange(char ntrack, char chan, unsigned int dt);
- void parsepitchwheel(char ntrack, char chan, unsigned int dt);
- void parsemetaevent(unsigned char mtype, unsigned char mlength);
-
- void add_dt(char ntrack, unsigned int dt);
-
- void clearmidifile();
-
- //convert the delta-time to internal format
- unsigned int convertdt(unsigned int dt);
-
- /* Low Level MIDIfile functions */
-
- //get a byte from the midifile
- unsigned char getbyte();
-
- //peek the current byte from the midifile
- unsigned char peekbyte();
-
- //get a set of 4 bytes from the midifile
- unsigned int getint32();
-
- //get a word of 2 bytes from the midifile
- unsigned short int getint16();
-
- //read a variable length quantity
- unsigned int getvarint32();
-
- //skip some bytes
- void skipnbytes(int n);
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Seq/Sequencer.cpp b/plugins/zynaddsubfx/src/Seq/Sequencer.cpp
deleted file mode 100644
index c11e68a..0000000
--- a/plugins/zynaddsubfx/src/Seq/Sequencer.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Sequencer.cpp - The Sequencer
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <sys/time.h>
-#include <time.h>
-
-#include "Sequencer.h"
-
-
-
-Sequencer::Sequencer()
-{
- play = 0;
- for(int i = 0; i < NUM_MIDI_TRACKS; i++) {
- miditrack[i].track.first = NULL;
- miditrack[i].track.current = NULL;
- miditrack[i].track.size = 0;
- miditrack[i].track.length = 0.0;
- miditrack[i].record.first = NULL;
- miditrack[i].record.current = NULL;
- miditrack[i].record.size = 0;
- miditrack[i].record.length = 0.0;
-
- nextevent[i].time = 0.0;
- resettime(&playtime[i]);
- }
-
- setplayspeed(0);
-}
-
-Sequencer::~Sequencer()
-{
- for(int i = 0; i < NUM_MIDI_TRACKS; i++) {
- deletelist(&miditrack[i].track);
- deletelist(&miditrack[i].record);
- }
-}
-
-
-int Sequencer::importmidifile(const char *filename)
-{
- if(midifile.loadfile(filename) < 0)
- return -1;
-
- for(int i = 0; i < NUM_MIDI_TRACKS; i++)
- deletelist(&miditrack[i].record);
- ;
- if(midifile.parsemidifile(this) < 0)
- return -1;
-
- //copy the "record" track to the main track
- for(int i = 0; i < NUM_MIDI_TRACKS; i++) {
- deletelist(&miditrack[i].track);
- miditrack[i].track = miditrack[i].record;
- deletelistreference(&miditrack[i].record);
- }
- return 0;
-}
-
-
-
-void Sequencer::startplay()
-{
- if(play != 0)
- return;
- for(int i = 0; i < NUM_MIDI_TRACKS; i++)
- resettime(&playtime[i]);
-
- for(int i = 0; i < NUM_MIDI_TRACKS; i++)
- rewindlist(&miditrack[i].track);
- ;
- play = 1;
-}
-void Sequencer::stopplay()
-{
- if(play == 0)
- return;
- play = 0;
-}
-
-// ************ Player stuff ***************
-
-int Sequencer::getevent(char ntrack,
- int *midich,
- int *type,
- int *par1,
- int *par2)
-{
- *type = 0;
- if(play == 0)
- return -1;
-
- //test
-// if (ntrack!=0) return(-1);
-
- updatecounter(&playtime[(int)ntrack]);
-
-// printf("%g %g\n",nextevent[ntrack].time,playtime[ntrack].abs);
-
- if(nextevent[(int)ntrack].time < playtime[(int)ntrack].abs)
- readevent(&miditrack[(int)ntrack].track, &nextevent[(int)ntrack].ev);
- else
- return -1;
- if(nextevent[(int)ntrack].ev.type == -1)
- return -1;
-// printf("********************************\n");
-
- //sa pun aici o protectie. a.i. daca distanta dintre timpul curent si eveliment e prea mare (>1sec) sa elimin nota
-
- if(ntrack == 1)
- printf("_ %f %.2f (%d)\n", nextevent[(int)ntrack].time,
- playtime[(int)ntrack].abs, nextevent[(int)ntrack].ev.par2);
-
- *type = nextevent[(int)ntrack].ev.type;
- *par1 = nextevent[(int)ntrack].ev.par1;
- *par2 = nextevent[(int)ntrack].ev.par2;
- *midich = nextevent[(int)ntrack].ev.channel;
-
-
- double dt = nextevent[(int)ntrack].ev.deltatime * 0.0001 * realplayspeed;
- printf("zzzzzzzzzzzzzz[%d] %d\n",
- ntrack,
- nextevent[(int)ntrack].ev.deltatime);
- nextevent[(int)ntrack].time += dt;
-
-// printf("%f - %d %d \n",nextevent[ntrack].time,par1,par2);
- return 0; //?? sau 1
-}
-
-/************** Timer stuff ***************/
-
-void Sequencer::resettime(timestruct *t)
-{
- t->abs = 0.0;
- t->rel = 0.0;
-
- t->last = 0.0;
-#ifndef OS_WINDOWS
- timeval tval;
- if(gettimeofday(&tval, NULL) == 0)
- t->last = tval.tv_sec + tval.tv_usec * 0.000001;
-#endif
-}
-
-void Sequencer::updatecounter(timestruct *t)
-{
- double current = 0.0;
-#ifndef OS_WINDOWS
- timeval tval;
- if(gettimeofday(&tval, NULL) == 0)
- current = tval.tv_sec + tval.tv_usec * 0.000001;
-#endif
-
- t->rel = current - t->last;
- t->abs += t->rel;
- t->last = current;
-
-// printf("%f %f %f\n",t->last,t->abs,t->rel);
-}
-
-void Sequencer::setplayspeed(int speed)
-{
- playspeed = speed;
- realplayspeed = pow(10.0, speed / 128.0);
-}
-
diff --git a/plugins/zynaddsubfx/src/Seq/Sequencer.h b/plugins/zynaddsubfx/src/Seq/Sequencer.h
deleted file mode 100644
index dd2d756..0000000
--- a/plugins/zynaddsubfx/src/Seq/Sequencer.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Sequencer.h - The Sequencer
- Copyright (C) 2003-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#ifndef SEQUENCER_H
-#define SEQUENCER_H
-
-#include "../globals.h"
-#include "MIDIEvents.h"
-#include "MIDIFile.h"
-
-/**The Sequencer
- * \todo restructure some of this code*/
-class Sequencer:public MIDIEvents
-{
- public:
- /**Constructor*/
- Sequencer();
- /**Destructor*/
- ~Sequencer();
-
- //these functions are called by the master and are ignored if the recorder/player are stopped
- void recordnote(char chan, char note, char vel);
- void recordcontroller(char chan, unsigned int type, int par);
-
- /**Gets an event \todo better description
- *
- * this is only for player
- * @return 1 if this must be called at least once more
- * 0 if there are no more notes for the current time
- * -1 if there are no notes*/
- int getevent(char ntrack, int *midich, int *type, int *par1, int *par2);
-
- /**Imports a given midifile
- * @return 0 if ok or -1 if there is a error loading file*/
- int importmidifile(const char *filename);
-
- void startplay();
- void stopplay();
-
-
- int play;
- int playspeed; //viteza de rulare (0.1x-10x), 0=1.0x, 128=10x
- void setplayspeed(int speed);
-
- private:
-
- MIDIFile midifile;
-
- /* Timer */
- struct timestruct {
- double abs; //the time from the begining of the track
- double rel; //the time difference between the last and the current event
- double last; //the time of the last event (absolute, since 1 Jan 1970)
- //these must be double, because the float's precision is too low
- //and all these represent the time in seconds
- } playtime[NUM_MIDI_TRACKS];
-
- void resettime(timestruct *t);
- void updatecounter(timestruct *t); //this updates the timer values
-
- /* Player only*/
-
- struct {
- event ev;
- double time;
- } nextevent[NUM_MIDI_TRACKS];
-
- double realplayspeed;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Synth/ADnote.cpp b/plugins/zynaddsubfx/src/Synth/ADnote.cpp
deleted file mode 100644
index aa149ce..0000000
--- a/plugins/zynaddsubfx/src/Synth/ADnote.cpp
+++ /dev/null
@@ -1,1987 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- ADnote.cpp - The "additive" synthesizer
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include <math.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "../globals.h"
-#include "../Misc/Util.h"
-#include "ADnote.h"
-
-
-ADnote::ADnote(ADnoteParameters *pars,
- Controller *ctl_,
- REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote_,
- bool besilent)
-{
- ready = 0;
-
- tmpwavel = new REALTYPE [SOUND_BUFFER_SIZE];
- tmpwaver = new REALTYPE [SOUND_BUFFER_SIZE];
- bypassl = new REALTYPE [SOUND_BUFFER_SIZE];
- bypassr = new REALTYPE [SOUND_BUFFER_SIZE];
-
- // Initialise some legato-specific vars
- Legato.msg = LM_Norm;
- Legato.fade.length = (int)(SAMPLE_RATE * 0.005); // 0.005 seems ok.
- if(Legato.fade.length < 1)
- Legato.fade.length = 1; // (if something's fishy)
- Legato.fade.step = (1.0 / Legato.fade.length);
- Legato.decounter = -10;
- Legato.param.freq = freq;
- Legato.param.vel = velocity;
- Legato.param.portamento = portamento_;
- Legato.param.midinote = midinote_;
- Legato.silent = besilent;
-
- partparams = pars;
- ctl = ctl_;
- portamento = portamento_;
- midinote = midinote_;
- NoteEnabled = ON;
- basefreq = freq;
- if(velocity > 1.0)
- velocity = 1.0;
- this->velocity = velocity;
- time = 0.0;
- stereo = pars->GlobalPar.PStereo;
-
- NoteGlobalPar.Detune = getdetune(pars->GlobalPar.PDetuneType,
- pars->GlobalPar.PCoarseDetune,
- pars->GlobalPar.PDetune);
- bandwidthDetuneMultiplier = pars->getBandwidthDetuneMultiplier();
-
- if(pars->GlobalPar.PPanning == 0)
- NoteGlobalPar.Panning = RND;
- else
- NoteGlobalPar.Panning = pars->GlobalPar.PPanning / 128.0;
-
-
- NoteGlobalPar.FilterCenterPitch = pars->GlobalPar.GlobalFilter->getfreq() //center freq
- + pars->GlobalPar.PFilterVelocityScale
- / 127.0 * 6.0 //velocity sensing
- * (VelF(velocity,
- pars->GlobalPar.
- PFilterVelocityScaleFunction) - 1);
-
- if(pars->GlobalPar.PPunchStrength != 0) {
- NoteGlobalPar.Punch.Enabled = 1;
- NoteGlobalPar.Punch.t = 1.0; //start from 1.0 and to 0.0
- NoteGlobalPar.Punch.initialvalue =
- ((pow(10, 1.5 * pars->GlobalPar.PPunchStrength / 127.0) - 1.0)
- * VelF(velocity,
- pars->GlobalPar.PPunchVelocitySensing));
- REALTYPE time =
- pow(10, 3.0 * pars->GlobalPar.PPunchTime / 127.0) / 10000.0; //0.1 .. 100 ms
- REALTYPE stretch = pow(440.0 / freq,
- pars->GlobalPar.PPunchStretch / 64.0);
- NoteGlobalPar.Punch.dt = 1.0 / (time * SAMPLE_RATE * stretch);
- }
- else
- NoteGlobalPar.Punch.Enabled = 0;
-
- for(int nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- pars->VoicePar[nvoice].OscilSmp->newrandseed(rand());
- NoteVoicePar[nvoice].OscilSmp = NULL;
- NoteVoicePar[nvoice].FMSmp = NULL;
- NoteVoicePar[nvoice].VoiceOut = NULL;
-
- NoteVoicePar[nvoice].FMVoice = -1;
- unison_size[nvoice] = 1;
-
- if(pars->VoicePar[nvoice].Enabled == 0) {
- NoteVoicePar[nvoice].Enabled = OFF;
- continue; //the voice is disabled
- }
-
- unison_stereo_spread[nvoice] =
- pars->VoicePar[nvoice].Unison_stereo_spread / 127.0;
- int unison = pars->VoicePar[nvoice].Unison_size;
- if(unison < 1)
- unison = 1;
-
- //compute unison
- unison_size[nvoice] = unison;
-
- unison_base_freq_rap[nvoice] = new REALTYPE[unison];
- unison_freq_rap[nvoice] = new REALTYPE[unison];
- unison_invert_phase[nvoice] = new bool[unison];
- REALTYPE unison_spread = pars->getUnisonFrequencySpreadCents(
- nvoice);
- REALTYPE unison_real_spread = pow(2.0, (unison_spread * 0.5) / 1200.0);
- REALTYPE unison_vibratto_a = pars->VoicePar[nvoice].Unison_vibratto
- / 127.0; //0.0 .. 1.0
-
-
- switch(unison) {
- case 1:
- unison_base_freq_rap[nvoice][0] = 1.0; //if the unison is not used, always make the only subvoice to have the default note
- break;
- case 2: { //unison for 2 subvoices
- unison_base_freq_rap[nvoice][0] = 1.0 / unison_real_spread;
- unison_base_freq_rap[nvoice][1] = unison_real_spread;
- };
- break;
- default: { //unison for more than 2 subvoices
- REALTYPE unison_values[unison];
- REALTYPE min = -1e-6, max = 1e-6;
- for(int k = 0; k < unison; k++) {
- REALTYPE step = (k / (REALTYPE) (unison - 1)) * 2.0 - 1.0; //this makes the unison spread more uniform
- REALTYPE val = step + (RND * 2.0 - 1.0) / (unison - 1);
- unison_values[k] = val;
- if(val > max)
- max = val;
- if(val < min)
- min = val;
- }
- REALTYPE diff = max - min;
- for(int k = 0; k < unison; k++) {
- unison_values[k] =
- (unison_values[k] - (max + min) * 0.5) / diff; //the lowest value will be -1 and the highest will be 1
- unison_base_freq_rap[nvoice][k] =
- pow(2.0, (unison_spread * unison_values[k]) / 1200);
- }
- };
- }
-
- //unison vibrattos
- if(unison > 1) {
- for(int k = 0; k < unison; k++) //reduce the frequency difference for larger vibrattos
- unison_base_freq_rap[nvoice][k] = 1.0
- + (unison_base_freq_rap[
- nvoice][k]
- - 1.0)
- * (1.0 - unison_vibratto_a);
- ;
- }
- unison_vibratto[nvoice].step = new REALTYPE[unison];
- unison_vibratto[nvoice].position = new REALTYPE[unison];
- unison_vibratto[nvoice].amplitude =
- (unison_real_spread - 1.0) * unison_vibratto_a;
-
- REALTYPE increments_per_second = SAMPLE_RATE
- / (REALTYPE)SOUND_BUFFER_SIZE;
- REALTYPE vibratto_base_period = 0.25
- * pow(2.0,
- (1.0
- - pars->VoicePar[nvoice].
- Unison_vibratto_speed / 127.0) * 4.0);
- for(int k = 0; k < unison; k++) {
- unison_vibratto[nvoice].position[k] = RND * 1.8 - 0.9;
- REALTYPE vibratto_period = vibratto_base_period * pow(
- 2.0,
- RND * 2.0
- - 1.0); //make period to vary randomly from 50% to 200% vibratto base period
-
- REALTYPE m = 4.0 / (vibratto_period * increments_per_second);
- if(RND < 0.5)
- m = -m;
- unison_vibratto[nvoice].step[k] = m;
- }
-
- if(unison == 1) { //no vibratto for a single voice
- unison_vibratto[nvoice].step[0] = 0.0;
- unison_vibratto[nvoice].position[0] = 0.0;
- unison_vibratto[nvoice].amplitude = 0.0;
- }
-
- //phase invert for unison
- unison_invert_phase[nvoice][0] = false;
- if(unison != 1) {
- int inv = pars->VoicePar[nvoice].Unison_invert_phase;
- switch(inv) {
- case 0: for(int k = 0; k < unison; k++)
- unison_invert_phase[nvoice][k] = false;
- break;
- case 1: for(int k = 0; k < unison; k++)
- unison_invert_phase[nvoice][k] = (RND > 0.5);
- break;
- default: for(int k = 0; k < unison; k++)
- unison_invert_phase[nvoice][k] =
- (k % inv == 0) ? true : false;
- break;
- }
- }
-
-
- oscfreqhi[nvoice] = new int[unison];
- oscfreqlo[nvoice] = new REALTYPE[unison];
- oscfreqhiFM[nvoice] = new unsigned int[unison];
- oscfreqloFM[nvoice] = new REALTYPE[unison];
- oscposhi[nvoice] = new int[unison];
- oscposlo[nvoice] = new REALTYPE[unison];
- oscposhiFM[nvoice] = new unsigned int[unison];
- oscposloFM[nvoice] = new REALTYPE[unison];
-
- NoteVoicePar[nvoice].Enabled = ON;
- NoteVoicePar[nvoice].fixedfreq = pars->VoicePar[nvoice].Pfixedfreq;
- NoteVoicePar[nvoice].fixedfreqET = pars->VoicePar[nvoice].PfixedfreqET;
-
- //use the Globalpars.detunetype if the detunetype is 0
- if(pars->VoicePar[nvoice].PDetuneType != 0) {
- NoteVoicePar[nvoice].Detune = getdetune(
- pars->VoicePar[nvoice].PDetuneType,
- pars->VoicePar[nvoice].
- PCoarseDetune,
- 8192); //coarse detune
- NoteVoicePar[nvoice].FineDetune = getdetune(
- pars->VoicePar[nvoice].PDetuneType,
- 0,
- pars->VoicePar[nvoice].PDetune); //fine detune
- }
- else {
- NoteVoicePar[nvoice].Detune = getdetune(
- pars->GlobalPar.PDetuneType,
- pars->VoicePar[nvoice].
- PCoarseDetune,
- 8192); //coarse detune
- NoteVoicePar[nvoice].FineDetune = getdetune(
- pars->GlobalPar.PDetuneType,
- 0,
- pars->VoicePar[nvoice].PDetune); //fine detune
- }
- if(pars->VoicePar[nvoice].PFMDetuneType != 0)
- NoteVoicePar[nvoice].FMDetune = getdetune(
- pars->VoicePar[nvoice].PFMDetuneType,
- pars->VoicePar[nvoice].
- PFMCoarseDetune,
- pars->VoicePar[nvoice].PFMDetune);
- else
- NoteVoicePar[nvoice].FMDetune = getdetune(
- pars->GlobalPar.PDetuneType,
- pars->VoicePar[nvoice].
- PFMCoarseDetune,
- pars->VoicePar[nvoice].PFMDetune);
- ;
-
-
- for(int k = 0; k < unison; k++) {
- oscposhi[nvoice][k] = 0;
- oscposlo[nvoice][k] = 0.0;
- oscposhiFM[nvoice][k] = 0;
- oscposloFM[nvoice][k] = 0.0;
- }
-
- NoteVoicePar[nvoice].OscilSmp =
- new REALTYPE[OSCIL_SIZE + OSCIL_SMP_EXTRA_SAMPLES]; //the extra points contains the first point
-
- //Get the voice's oscil or external's voice oscil
- int vc = nvoice;
- if(pars->VoicePar[nvoice].Pextoscil != -1)
- vc = pars->VoicePar[nvoice].Pextoscil;
- if(!pars->GlobalPar.Hrandgrouping)
- pars->VoicePar[vc].OscilSmp->newrandseed(rand());
- int oscposhi_start =
- pars->VoicePar[vc].OscilSmp->get(NoteVoicePar[nvoice].OscilSmp,
- getvoicebasefreq(nvoice),
- pars->VoicePar[nvoice].Presonance);
-
- //I store the first elments to the last position for speedups
- for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; i++)
- NoteVoicePar[nvoice].OscilSmp[OSCIL_SIZE
- + i] =
- NoteVoicePar[nvoice].OscilSmp[i];
-
- oscposhi_start +=
- (int)((pars->VoicePar[nvoice].Poscilphase
- - 64.0) / 128.0 * OSCIL_SIZE + OSCIL_SIZE * 4);
- oscposhi_start %= OSCIL_SIZE;
-
- for(int k = 0; k < unison; k++) {
- oscposhi[nvoice][k] = oscposhi_start;
- oscposhi_start = (int)(RND * (OSCIL_SIZE - 1)); //put random starting point for other subvoices
- }
-
- NoteVoicePar[nvoice].FreqLfo = NULL;
- NoteVoicePar[nvoice].FreqEnvelope = NULL;
-
- NoteVoicePar[nvoice].AmpLfo = NULL;
- NoteVoicePar[nvoice].AmpEnvelope = NULL;
-
- NoteVoicePar[nvoice].VoiceFilterL = NULL;
- NoteVoicePar[nvoice].VoiceFilterR = NULL;
- NoteVoicePar[nvoice].FilterEnvelope = NULL;
- NoteVoicePar[nvoice].FilterLfo = NULL;
-
- NoteVoicePar[nvoice].FilterCenterPitch =
- pars->VoicePar[nvoice].VoiceFilter->getfreq();
- NoteVoicePar[nvoice].filterbypass =
- pars->VoicePar[nvoice].Pfilterbypass;
-
- switch(pars->VoicePar[nvoice].PFMEnabled) {
- case 1:
- NoteVoicePar[nvoice].FMEnabled = MORPH;
- break;
- case 2:
- NoteVoicePar[nvoice].FMEnabled = RING_MOD;
- break;
- case 3:
- NoteVoicePar[nvoice].FMEnabled = PHASE_MOD;
- break;
- case 4:
- NoteVoicePar[nvoice].FMEnabled = FREQ_MOD;
- break;
- case 5:
- NoteVoicePar[nvoice].FMEnabled = PITCH_MOD;
- break;
- default:
- NoteVoicePar[nvoice].FMEnabled = NONE;
- }
-
- NoteVoicePar[nvoice].FMVoice = pars->VoicePar[nvoice].PFMVoice;
- NoteVoicePar[nvoice].FMFreqEnvelope = NULL;
- NoteVoicePar[nvoice].FMAmpEnvelope = NULL;
-
- //Compute the Voice's modulator volume (incl. damping)
- REALTYPE fmvoldamp = pow(440.0 / getvoicebasefreq(
- nvoice),
- pars->VoicePar[nvoice].PFMVolumeDamp / 64.0
- - 1.0);
- switch(NoteVoicePar[nvoice].FMEnabled) {
- case PHASE_MOD:
- fmvoldamp =
- pow(440.0 / getvoicebasefreq(
- nvoice), pars->VoicePar[nvoice].PFMVolumeDamp / 64.0);
- NoteVoicePar[nvoice].FMVolume =
- (exp(pars->VoicePar[nvoice].PFMVolume / 127.0
- * FM_AMP_MULTIPLIER) - 1.0) * fmvoldamp * 4.0;
- break;
- case FREQ_MOD:
- NoteVoicePar[nvoice].FMVolume =
- (exp(pars->VoicePar[nvoice].PFMVolume / 127.0
- * FM_AMP_MULTIPLIER) - 1.0) * fmvoldamp * 4.0;
- break;
- // case PITCH_MOD:NoteVoicePar[nvoice].FMVolume=(pars->VoicePar[nvoice].PFMVolume/127.0*8.0)*fmvoldamp;//???????????
- // break;
- default:
- if(fmvoldamp > 1.0)
- fmvoldamp = 1.0;
- NoteVoicePar[nvoice].FMVolume = pars->VoicePar[nvoice].PFMVolume
- / 127.0 * fmvoldamp;
- }
-
- //Voice's modulator velocity sensing
- NoteVoicePar[nvoice].FMVolume *=
- VelF(velocity,
- partparams->VoicePar[nvoice].PFMVelocityScaleFunction);
-
- FMoldsmp[nvoice] = new REALTYPE [unison];
- for(int k = 0; k < unison; k++)
- FMoldsmp[nvoice][k] = 0.0; //this is for FM (integration)
-
- firsttick[nvoice] = 1;
- NoteVoicePar[nvoice].DelayTicks =
- (int)((exp(pars->VoicePar[nvoice].PDelay / 127.0
- * log(50.0))
- - 1.0) / SOUND_BUFFER_SIZE / 10.0 * SAMPLE_RATE);
- }
-
- max_unison = 1;
- for(int nvoice = 0; nvoice < NUM_VOICES; nvoice++)
- if(unison_size[nvoice] > max_unison)
- max_unison = unison_size[nvoice];
- ;
-
- tmpwave_unison = new REALTYPE *[max_unison];
- for(int k = 0; k < max_unison; k++) {
- tmpwave_unison[k] = new REALTYPE[SOUND_BUFFER_SIZE];
- memset(tmpwave_unison[k], 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- }
-
- initparameters();
- ready = 1;
-}
-
-// ADlegatonote: This function is (mostly) a copy of ADnote(...) and
-// initparameters() stuck together with some lines removed so that it
-// only alter the already playing note (to perform legato). It is
-// possible I left stuff that is not required for this.
-void ADnote::ADlegatonote(REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote_,
- bool externcall)
-{
- ADnoteParameters *pars = partparams;
- //Controller *ctl_=ctl;
-
- // Manage legato stuff
- if(externcall)
- Legato.msg = LM_Norm;
- if(Legato.msg != LM_CatchUp) {
- Legato.lastfreq = Legato.param.freq;
- Legato.param.freq = freq;
- Legato.param.vel = velocity;
- Legato.param.portamento = portamento_;
- Legato.param.midinote = midinote_;
- if(Legato.msg == LM_Norm) {
- if(Legato.silent) {
- Legato.fade.m = 0.0;
- Legato.msg = LM_FadeIn;
- }
- else {
- Legato.fade.m = 1.0;
- Legato.msg = LM_FadeOut;
- return;
- }
- }
- if(Legato.msg == LM_ToNorm)
- Legato.msg = LM_Norm;
- }
-
- portamento = portamento_;
- midinote = midinote_;
- basefreq = freq;
-
- if(velocity > 1.0)
- velocity = 1.0;
- this->velocity = velocity;
-
- NoteGlobalPar.Detune = getdetune(pars->GlobalPar.PDetuneType,
- pars->GlobalPar.PCoarseDetune,
- pars->GlobalPar.PDetune);
- bandwidthDetuneMultiplier = pars->getBandwidthDetuneMultiplier();
-
- if(pars->GlobalPar.PPanning == 0)
- NoteGlobalPar.Panning = RND;
- else
- NoteGlobalPar.Panning = pars->GlobalPar.PPanning / 128.0;
-
-
- NoteGlobalPar.FilterCenterPitch = pars->GlobalPar.GlobalFilter->getfreq() //center freq
- + pars->GlobalPar.PFilterVelocityScale
- / 127.0 * 6.0 //velocity sensing
- * (VelF(velocity,
- pars->GlobalPar.
- PFilterVelocityScaleFunction) - 1);
-
-
- for(int nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- if(NoteVoicePar[nvoice].Enabled == OFF)
- continue; //(gf) Stay the same as first note in legato.
-
- NoteVoicePar[nvoice].fixedfreq = pars->VoicePar[nvoice].Pfixedfreq;
- NoteVoicePar[nvoice].fixedfreqET = pars->VoicePar[nvoice].PfixedfreqET;
-
- //use the Globalpars.detunetype if the detunetype is 0
- if(pars->VoicePar[nvoice].PDetuneType != 0) {
- NoteVoicePar[nvoice].Detune = getdetune(
- pars->VoicePar[nvoice].PDetuneType,
- pars->VoicePar[nvoice].
- PCoarseDetune,
- 8192); //coarse detune
- NoteVoicePar[nvoice].FineDetune = getdetune(
- pars->VoicePar[nvoice].PDetuneType,
- 0,
- pars->VoicePar[nvoice].PDetune); //fine detune
- }
- else {
- NoteVoicePar[nvoice].Detune = getdetune(
- pars->GlobalPar.PDetuneType,
- pars->VoicePar[nvoice].
- PCoarseDetune,
- 8192); //coarse detune
- NoteVoicePar[nvoice].FineDetune = getdetune(
- pars->GlobalPar.PDetuneType,
- 0,
- pars->VoicePar[nvoice].PDetune); //fine detune
- }
- if(pars->VoicePar[nvoice].PFMDetuneType != 0)
- NoteVoicePar[nvoice].FMDetune = getdetune(
- pars->VoicePar[nvoice].PFMDetuneType,
- pars->VoicePar[nvoice].
- PFMCoarseDetune,
- pars->VoicePar[nvoice].PFMDetune);
- else
- NoteVoicePar[nvoice].FMDetune = getdetune(
- pars->GlobalPar.PDetuneType,
- pars->VoicePar[nvoice].
- PFMCoarseDetune,
- pars->VoicePar[nvoice].PFMDetune);
- ;
-
- //Get the voice's oscil or external's voice oscil
- int vc = nvoice;
- if(pars->VoicePar[nvoice].Pextoscil != -1)
- vc = pars->VoicePar[nvoice].Pextoscil;
- if(!pars->GlobalPar.Hrandgrouping)
- pars->VoicePar[vc].OscilSmp->newrandseed(rand());
-
- pars->VoicePar[vc].OscilSmp->get(NoteVoicePar[nvoice].OscilSmp,
- getvoicebasefreq(nvoice),
- pars->VoicePar[nvoice].Presonance); //(gf)Modif of the above line.
-
- //I store the first elments to the last position for speedups
- for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; i++)
- NoteVoicePar[nvoice].OscilSmp[OSCIL_SIZE
- + i] =
- NoteVoicePar[nvoice].OscilSmp[i];
-
-
- NoteVoicePar[nvoice].FilterCenterPitch =
- pars->VoicePar[nvoice].VoiceFilter->getfreq();
- NoteVoicePar[nvoice].filterbypass =
- pars->VoicePar[nvoice].Pfilterbypass;
-
-
- NoteVoicePar[nvoice].FMVoice = pars->VoicePar[nvoice].PFMVoice;
-
- //Compute the Voice's modulator volume (incl. damping)
- REALTYPE fmvoldamp = pow(440.0 / getvoicebasefreq(
- nvoice),
- pars->VoicePar[nvoice].PFMVolumeDamp / 64.0
- - 1.0);
-
- switch(NoteVoicePar[nvoice].FMEnabled) {
- case PHASE_MOD:
- fmvoldamp =
- pow(440.0 / getvoicebasefreq(
- nvoice), pars->VoicePar[nvoice].PFMVolumeDamp / 64.0);
- NoteVoicePar[nvoice].FMVolume =
- (exp(pars->VoicePar[nvoice].PFMVolume / 127.0
- * FM_AMP_MULTIPLIER) - 1.0) * fmvoldamp * 4.0;
- break;
- case FREQ_MOD:
- NoteVoicePar[nvoice].FMVolume =
- (exp(pars->VoicePar[nvoice].PFMVolume / 127.0
- * FM_AMP_MULTIPLIER) - 1.0) * fmvoldamp * 4.0;
- break;
- // case PITCH_MOD:NoteVoicePar[nvoice].FMVolume=(pars->VoicePar[nvoice].PFMVolume/127.0*8.0)*fmvoldamp;//???????????
- // break;
- default:
- if(fmvoldamp > 1.0)
- fmvoldamp = 1.0;
- NoteVoicePar[nvoice].FMVolume = pars->VoicePar[nvoice].PFMVolume
- / 127.0 * fmvoldamp;
- }
-
- //Voice's modulator velocity sensing
- NoteVoicePar[nvoice].FMVolume *=
- VelF(velocity,
- partparams->VoicePar[nvoice].PFMVelocityScaleFunction);
-
- NoteVoicePar[nvoice].DelayTicks =
- (int)((exp(pars->VoicePar[nvoice].PDelay / 127.0
- * log(50.0))
- - 1.0) / SOUND_BUFFER_SIZE / 10.0 * SAMPLE_RATE);
- }
-
- /// initparameters();
-
- ///////////////
- // Altered content of initparameters():
-
- int nvoice, i, tmp[NUM_VOICES];
-
- NoteGlobalPar.Volume = 4.0
- * pow(0.1, 3.0
- * (1.0 - partparams->GlobalPar.PVolume / 96.0)) //-60 dB .. 0 dB
- * VelF(
- velocity,
- partparams->GlobalPar.
- PAmpVelocityScaleFunction); //velocity sensing
-
- globalnewamplitude = NoteGlobalPar.Volume
- * NoteGlobalPar.AmpEnvelope->envout_dB()
- * NoteGlobalPar.AmpLfo->amplfoout();
-
- NoteGlobalPar.FilterQ = partparams->GlobalPar.GlobalFilter->getq();
- NoteGlobalPar.FilterFreqTracking =
- partparams->GlobalPar.GlobalFilter->getfreqtracking(basefreq);
-
- // Forbids the Modulation Voice to be greater or equal than voice
- for(i = 0; i < NUM_VOICES; i++)
- if(NoteVoicePar[i].FMVoice >= i)
- NoteVoicePar[i].FMVoice = -1;
-
- // Voice Parameter init
- for(nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- if(NoteVoicePar[nvoice].Enabled == 0)
- continue;
-
- NoteVoicePar[nvoice].noisetype = partparams->VoicePar[nvoice].Type;
- /* Voice Amplitude Parameters Init */
- NoteVoicePar[nvoice].Volume =
- pow(0.1, 3.0 * (1.0 - partparams->VoicePar[nvoice].PVolume / 127.0)) // -60 dB .. 0 dB
- * VelF(velocity,
- partparams->VoicePar[nvoice].PAmpVelocityScaleFunction); //velocity
-
- if(partparams->VoicePar[nvoice].PVolumeminus != 0)
- NoteVoicePar[nvoice].Volume = -NoteVoicePar[nvoice].Volume;
-
- if(partparams->VoicePar[nvoice].PPanning == 0)
- NoteVoicePar[nvoice].Panning = RND; // random panning
- else
- NoteVoicePar[nvoice].Panning =
- partparams->VoicePar[nvoice].PPanning / 128.0;
-
- newamplitude[nvoice] = 1.0;
- if((partparams->VoicePar[nvoice].PAmpEnvelopeEnabled != 0)
- && (NoteVoicePar[nvoice].AmpEnvelope != NULL))
- newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpEnvelope->envout_dB();
- ;
-
- if((partparams->VoicePar[nvoice].PAmpLfoEnabled != 0)
- && (NoteVoicePar[nvoice].AmpLfo != NULL))
- newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpLfo->amplfoout();
- ;
-
-
- NoteVoicePar[nvoice].FilterFreqTracking =
- partparams->VoicePar[nvoice].VoiceFilter->getfreqtracking(basefreq);
-
- /* Voice Modulation Parameters Init */
- if((NoteVoicePar[nvoice].FMEnabled != NONE)
- && (NoteVoicePar[nvoice].FMVoice < 0)) {
- partparams->VoicePar[nvoice].FMSmp->newrandseed(rand());
-
- //Perform Anti-aliasing only on MORPH or RING MODULATION
-
- int vc = nvoice;
- if(partparams->VoicePar[nvoice].PextFMoscil != -1)
- vc = partparams->VoicePar[nvoice].PextFMoscil;
-
- if(!partparams->GlobalPar.Hrandgrouping)
- partparams->VoicePar[vc].FMSmp->newrandseed(rand());
-
- ///oscposhiFM[nvoice]=(oscposhi[nvoice]+partparams->VoicePar[vc].FMSmp->get(NoteVoicePar[nvoice].FMSmp,tmp)) % OSCIL_SIZE;
- // / oscposhi[nvoice]+partparams->VoicePar[vc].FMSmp->get(NoteVoicePar[nvoice].FMSmp,tmp); //(gf) Modif of the above line.
- for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; i++)
- NoteVoicePar[nvoice].FMSmp[OSCIL_SIZE
- + i] = NoteVoicePar[nvoice].FMSmp[i];
- ///oscposhiFM[nvoice]+=(int)((partparams->VoicePar[nvoice].PFMoscilphase-64.0)/128.0*OSCIL_SIZE+OSCIL_SIZE*4);
- ///oscposhiFM[nvoice]%=OSCIL_SIZE;
- }
-
- FMnewamplitude[nvoice] = NoteVoicePar[nvoice].FMVolume
- * ctl->fmamp.relamp;
-
- if((partparams->VoicePar[nvoice].PFMAmpEnvelopeEnabled != 0)
- && (NoteVoicePar[nvoice].FMAmpEnvelope != NULL))
- FMnewamplitude[nvoice] *=
- NoteVoicePar[nvoice].FMAmpEnvelope->envout_dB();
- ;
- }
-
- for(nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- for(i = nvoice + 1; i < NUM_VOICES; i++)
- tmp[i] = 0;
- for(i = nvoice + 1; i < NUM_VOICES; i++)
- if((NoteVoicePar[i].FMVoice == nvoice) && (tmp[i] == 0))
- tmp[i] = 1;
- ;
- }
- ///////////////
-
- // End of the ADlegatonote function.
-}
-
-
-/*
- * Kill a voice of ADnote
- */
-void ADnote::KillVoice(int nvoice)
-{
- delete [] oscfreqhi[nvoice];
- delete [] oscfreqlo[nvoice];
- delete [] oscfreqhiFM[nvoice];
- delete [] oscfreqloFM[nvoice];
- delete [] oscposhi[nvoice];
- delete [] oscposlo[nvoice];
- delete [] oscposhiFM[nvoice];
- delete [] oscposloFM[nvoice];
-
- delete [] NoteVoicePar[nvoice].OscilSmp;
- delete [] unison_base_freq_rap[nvoice];
- delete [] unison_freq_rap[nvoice];
- delete [] unison_invert_phase[nvoice];
- delete [] FMoldsmp[nvoice];
- delete [] unison_vibratto[nvoice].step;
- delete [] unison_vibratto[nvoice].position;
-
- if(NoteVoicePar[nvoice].FreqEnvelope != NULL)
- delete (NoteVoicePar[nvoice].FreqEnvelope);
- NoteVoicePar[nvoice].FreqEnvelope = NULL;
-
- if(NoteVoicePar[nvoice].FreqLfo != NULL)
- delete (NoteVoicePar[nvoice].FreqLfo);
- NoteVoicePar[nvoice].FreqLfo = NULL;
-
- if(NoteVoicePar[nvoice].AmpEnvelope != NULL)
- delete (NoteVoicePar[nvoice].AmpEnvelope);
- NoteVoicePar[nvoice].AmpEnvelope = NULL;
-
- if(NoteVoicePar[nvoice].AmpLfo != NULL)
- delete (NoteVoicePar[nvoice].AmpLfo);
- NoteVoicePar[nvoice].AmpLfo = NULL;
-
- if(NoteVoicePar[nvoice].VoiceFilterL != NULL)
- delete (NoteVoicePar[nvoice].VoiceFilterL);
- NoteVoicePar[nvoice].VoiceFilterL = NULL;
-
- if(NoteVoicePar[nvoice].VoiceFilterR != NULL)
- delete (NoteVoicePar[nvoice].VoiceFilterR);
- NoteVoicePar[nvoice].VoiceFilterR = NULL;
-
- if(NoteVoicePar[nvoice].FilterEnvelope != NULL)
- delete (NoteVoicePar[nvoice].FilterEnvelope);
- NoteVoicePar[nvoice].FilterEnvelope = NULL;
-
- if(NoteVoicePar[nvoice].FilterLfo != NULL)
- delete (NoteVoicePar[nvoice].FilterLfo);
- NoteVoicePar[nvoice].FilterLfo = NULL;
-
- if(NoteVoicePar[nvoice].FMFreqEnvelope != NULL)
- delete (NoteVoicePar[nvoice].FMFreqEnvelope);
- NoteVoicePar[nvoice].FMFreqEnvelope = NULL;
-
- if(NoteVoicePar[nvoice].FMAmpEnvelope != NULL)
- delete (NoteVoicePar[nvoice].FMAmpEnvelope);
- NoteVoicePar[nvoice].FMAmpEnvelope = NULL;
-
- if((NoteVoicePar[nvoice].FMEnabled != NONE)
- && (NoteVoicePar[nvoice].FMVoice < 0))
- delete [] NoteVoicePar[nvoice].FMSmp;
-
- if(NoteVoicePar[nvoice].VoiceOut != NULL)
- memset(NoteVoicePar[nvoice].VoiceOut, 0, SOUND_BUFFER_SIZE
- * sizeof(REALTYPE));//do not delete, yet: perhaps is used by another voice
-
- NoteVoicePar[nvoice].Enabled = OFF;
-}
-
-/*
- * Kill the note
- */
-void ADnote::KillNote()
-{
- int nvoice;
- for(nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- if(NoteVoicePar[nvoice].Enabled == ON)
- KillVoice(nvoice);
-
- //delete VoiceOut
- if(NoteVoicePar[nvoice].VoiceOut != NULL)
- delete (NoteVoicePar[nvoice].VoiceOut);
- NoteVoicePar[nvoice].VoiceOut = NULL;
- }
-
- delete (NoteGlobalPar.FreqEnvelope);
- delete (NoteGlobalPar.FreqLfo);
- delete (NoteGlobalPar.AmpEnvelope);
- delete (NoteGlobalPar.AmpLfo);
- delete (NoteGlobalPar.GlobalFilterL);
- if(stereo != 0)
- delete (NoteGlobalPar.GlobalFilterR);
- delete (NoteGlobalPar.FilterEnvelope);
- delete (NoteGlobalPar.FilterLfo);
-
- NoteEnabled = OFF;
-}
-
-ADnote::~ADnote()
-{
- if(NoteEnabled == ON)
- KillNote();
- delete [] tmpwavel;
- delete [] tmpwaver;
- delete [] bypassl;
- delete [] bypassr;
- for(int k = 0; k < max_unison; k++)
- delete[] tmpwave_unison[k];
- delete[] tmpwave_unison;
-}
-
-
-/*
- * Init the parameters
- */
-void ADnote::initparameters()
-{
- int nvoice, i, tmp[NUM_VOICES];
-
- // Global Parameters
- NoteGlobalPar.FreqEnvelope = new Envelope(
- partparams->GlobalPar.FreqEnvelope,
- basefreq);
- NoteGlobalPar.FreqLfo = new LFO(partparams->GlobalPar.FreqLfo,
- basefreq);
-
- NoteGlobalPar.AmpEnvelope = new Envelope(partparams->GlobalPar.AmpEnvelope,
- basefreq);
- NoteGlobalPar.AmpLfo = new LFO(partparams->GlobalPar.AmpLfo, basefreq);
-
- NoteGlobalPar.Volume = 4.0
- * pow(0.1, 3.0
- * (1.0 - partparams->GlobalPar.PVolume / 96.0)) //-60 dB .. 0 dB
- * VelF(
- velocity,
- partparams->GlobalPar.
- PAmpVelocityScaleFunction); //velocity sensing
-
- NoteGlobalPar.AmpEnvelope->envout_dB(); //discard the first envelope output
- globalnewamplitude = NoteGlobalPar.Volume
- * NoteGlobalPar.AmpEnvelope->envout_dB()
- * NoteGlobalPar.AmpLfo->amplfoout();
-
- NoteGlobalPar.GlobalFilterL = new Filter(partparams->GlobalPar.GlobalFilter);
- if(stereo != 0)
- NoteGlobalPar.GlobalFilterR = new Filter(
- partparams->GlobalPar.GlobalFilter);
-
- NoteGlobalPar.FilterEnvelope = new Envelope(
- partparams->GlobalPar.FilterEnvelope,
- basefreq);
- NoteGlobalPar.FilterLfo = new LFO(partparams->GlobalPar.FilterLfo,
- basefreq);
- NoteGlobalPar.FilterQ = partparams->GlobalPar.GlobalFilter->getq();
- NoteGlobalPar.FilterFreqTracking =
- partparams->GlobalPar.GlobalFilter->getfreqtracking(basefreq);
-
- // Forbids the Modulation Voice to be greater or equal than voice
- for(i = 0; i < NUM_VOICES; i++)
- if(NoteVoicePar[i].FMVoice >= i)
- NoteVoicePar[i].FMVoice = -1;
-
- // Voice Parameter init
- for(nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- if(NoteVoicePar[nvoice].Enabled == 0)
- continue;
-
- NoteVoicePar[nvoice].noisetype = partparams->VoicePar[nvoice].Type;
- /* Voice Amplitude Parameters Init */
- NoteVoicePar[nvoice].Volume =
- pow(0.1, 3.0 * (1.0 - partparams->VoicePar[nvoice].PVolume / 127.0)) // -60 dB .. 0 dB
- * VelF(velocity,
- partparams->VoicePar[nvoice].PAmpVelocityScaleFunction); //velocity
-
- if(partparams->VoicePar[nvoice].PVolumeminus != 0)
- NoteVoicePar[nvoice].Volume = -NoteVoicePar[nvoice].Volume;
-
- if(partparams->VoicePar[nvoice].PPanning == 0)
- NoteVoicePar[nvoice].Panning = RND; // random panning
- else
- NoteVoicePar[nvoice].Panning =
- partparams->VoicePar[nvoice].PPanning / 128.0;
-
- newamplitude[nvoice] = 1.0;
- if(partparams->VoicePar[nvoice].PAmpEnvelopeEnabled != 0) {
- NoteVoicePar[nvoice].AmpEnvelope = new Envelope(
- partparams->VoicePar[nvoice].AmpEnvelope,
- basefreq);
- NoteVoicePar[nvoice].AmpEnvelope->envout_dB(); //discard the first envelope sample
- newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpEnvelope->envout_dB();
- }
-
- if(partparams->VoicePar[nvoice].PAmpLfoEnabled != 0) {
- NoteVoicePar[nvoice].AmpLfo = new LFO(
- partparams->VoicePar[nvoice].AmpLfo,
- basefreq);
- newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpLfo->amplfoout();
- }
-
- /* Voice Frequency Parameters Init */
- if(partparams->VoicePar[nvoice].PFreqEnvelopeEnabled != 0)
- NoteVoicePar[nvoice].FreqEnvelope = new Envelope(
- partparams->VoicePar[nvoice].FreqEnvelope,
- basefreq);
-
- if(partparams->VoicePar[nvoice].PFreqLfoEnabled != 0)
- NoteVoicePar[nvoice].FreqLfo = new LFO(
- partparams->VoicePar[nvoice].FreqLfo,
- basefreq);
-
- /* Voice Filter Parameters Init */
- if(partparams->VoicePar[nvoice].PFilterEnabled != 0) {
- NoteVoicePar[nvoice].VoiceFilterL = new Filter(
- partparams->VoicePar[nvoice].VoiceFilter);
- NoteVoicePar[nvoice].VoiceFilterR = new Filter(
- partparams->VoicePar[nvoice].VoiceFilter);
- }
-
- if(partparams->VoicePar[nvoice].PFilterEnvelopeEnabled != 0)
- NoteVoicePar[nvoice].FilterEnvelope = new Envelope(
- partparams->VoicePar[nvoice].FilterEnvelope,
- basefreq);
-
- if(partparams->VoicePar[nvoice].PFilterLfoEnabled != 0)
- NoteVoicePar[nvoice].FilterLfo =
- new LFO(partparams->VoicePar[nvoice].FilterLfo, basefreq);
-
- NoteVoicePar[nvoice].FilterFreqTracking =
- partparams->VoicePar[nvoice].VoiceFilter->getfreqtracking(basefreq);
-
- /* Voice Modulation Parameters Init */
- if((NoteVoicePar[nvoice].FMEnabled != NONE)
- && (NoteVoicePar[nvoice].FMVoice < 0)) {
- partparams->VoicePar[nvoice].FMSmp->newrandseed(rand());
- NoteVoicePar[nvoice].FMSmp =
- new REALTYPE[OSCIL_SIZE + OSCIL_SMP_EXTRA_SAMPLES];
-
- //Perform Anti-aliasing only on MORPH or RING MODULATION
-
- int vc = nvoice;
- if(partparams->VoicePar[nvoice].PextFMoscil != -1)
- vc = partparams->VoicePar[nvoice].PextFMoscil;
-
- REALTYPE tmp = 1.0;
- if((partparams->VoicePar[vc].FMSmp->Padaptiveharmonics != 0)
- || (NoteVoicePar[nvoice].FMEnabled == MORPH)
- || (NoteVoicePar[nvoice].FMEnabled == RING_MOD))
- tmp = getFMvoicebasefreq(nvoice);
- ;
- if(!partparams->GlobalPar.Hrandgrouping)
- partparams->VoicePar[vc].FMSmp->newrandseed(rand());
-
- for(int k = 0; k < unison_size[nvoice]; k++)
- oscposhiFM[nvoice][k] =
- (oscposhi[nvoice][k]
- + partparams->VoicePar[vc].FMSmp->get(NoteVoicePar[nvoice]
- .
- FMSmp,
- tmp)) % OSCIL_SIZE;
- ;
- for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; i++)
- NoteVoicePar[nvoice].FMSmp[OSCIL_SIZE
- + i] = NoteVoicePar[nvoice].FMSmp[i];
- int oscposhiFM_add =
- (int)((partparams->VoicePar[nvoice].PFMoscilphase
- - 64.0) / 128.0 * OSCIL_SIZE + OSCIL_SIZE * 4);
- for(int k = 0; k < unison_size[nvoice]; k++) {
- oscposhiFM[nvoice][k] += oscposhiFM_add;
- oscposhiFM[nvoice][k] %= OSCIL_SIZE;
- }
- }
-
- if(partparams->VoicePar[nvoice].PFMFreqEnvelopeEnabled != 0)
- NoteVoicePar[nvoice].FMFreqEnvelope = new Envelope(
- partparams->VoicePar[nvoice].FMFreqEnvelope,
- basefreq);
-
- FMnewamplitude[nvoice] = NoteVoicePar[nvoice].FMVolume
- * ctl->fmamp.relamp;
-
- if(partparams->VoicePar[nvoice].PFMAmpEnvelopeEnabled != 0) {
- NoteVoicePar[nvoice].FMAmpEnvelope = new Envelope(
- partparams->VoicePar[nvoice].FMAmpEnvelope,
- basefreq);
- FMnewamplitude[nvoice] *=
- NoteVoicePar[nvoice].FMAmpEnvelope->envout_dB();
- }
- }
-
- for(nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- for(i = nvoice + 1; i < NUM_VOICES; i++)
- tmp[i] = 0;
- for(i = nvoice + 1; i < NUM_VOICES; i++)
- if((NoteVoicePar[i].FMVoice == nvoice) && (tmp[i] == 0)) {
- NoteVoicePar[nvoice].VoiceOut = new REALTYPE[SOUND_BUFFER_SIZE];
- tmp[i] = 1;
- }
- ;
- if(NoteVoicePar[nvoice].VoiceOut != NULL)
- memset(NoteVoicePar[nvoice].VoiceOut, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- }
-}
-
-
-/*
- * Computes the relative frequency of each unison voice and it's vibratto
- * This must be called before setfreq* functions
- */
-void ADnote::compute_unison_freq_rap(int nvoice) {
- if(unison_size[nvoice] == 1) { //no unison
- unison_freq_rap[nvoice][0] = 1.0;
- return;
- }
- REALTYPE relbw = ctl->bandwidth.relbw * bandwidthDetuneMultiplier;
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE pos = unison_vibratto[nvoice].position[k];
- REALTYPE step = unison_vibratto[nvoice].step[k];
- pos += step;
- if(pos <= -1.0) {
- pos = -1.0;
- step = -step;
- }
- if(pos >= 1.0) {
- pos = 1.0;
- step = -step;
- }
- REALTYPE vibratto_val = (pos - 0.333333333 * pos * pos * pos) * 1.5; //make the vibratto lfo smoother
- unison_freq_rap[nvoice][k] = 1.0
- + ((unison_base_freq_rap[nvoice][k]
- - 1.0) + vibratto_val
- * unison_vibratto[nvoice].amplitude)
- * relbw;
-
- unison_vibratto[nvoice].position[k] = pos;
- step = unison_vibratto[nvoice].step[k] = step;
- }
-}
-
-
-/*
- * Computes the frequency of an oscillator
- */
-void ADnote::setfreq(int nvoice, REALTYPE in_freq)
-{
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE freq = fabs(in_freq) * unison_freq_rap[nvoice][k];
- REALTYPE speed = freq * REALTYPE(OSCIL_SIZE) / (REALTYPE) SAMPLE_RATE;
- if(speed > OSCIL_SIZE)
- speed = OSCIL_SIZE;
-
- F2I(speed, oscfreqhi[nvoice][k]);
- oscfreqlo[nvoice][k] = speed - floor(speed);
- }
-}
-
-/*
- * Computes the frequency of an modullator oscillator
- */
-void ADnote::setfreqFM(int nvoice, REALTYPE in_freq)
-{
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE freq = fabs(in_freq) * unison_freq_rap[nvoice][k];
- REALTYPE speed = freq * REALTYPE(OSCIL_SIZE) / (REALTYPE) SAMPLE_RATE;
- if(speed > OSCIL_SIZE)
- speed = OSCIL_SIZE;
-
- F2I(speed, oscfreqhiFM[nvoice][k]);
- oscfreqloFM[nvoice][k] = speed - floor(speed);
- }
-}
-
-/*
- * Get Voice base frequency
- */
-REALTYPE ADnote::getvoicebasefreq(int nvoice) const
-{
- REALTYPE detune = NoteVoicePar[nvoice].Detune / 100.0
- + NoteVoicePar[nvoice].FineDetune / 100.0
- * ctl->bandwidth.relbw * bandwidthDetuneMultiplier
- + NoteGlobalPar.Detune / 100.0;
-
- if(NoteVoicePar[nvoice].fixedfreq == 0)
- return this->basefreq * pow(2, detune / 12.0);
- else { //the fixed freq is enabled
- REALTYPE fixedfreq = 440.0;
- int fixedfreqET = NoteVoicePar[nvoice].fixedfreqET;
- if(fixedfreqET != 0) { //if the frequency varies according the keyboard note
- REALTYPE tmp =
- (midinote
- - 69.0) / 12.0 * (pow(2.0, (fixedfreqET - 1) / 63.0) - 1.0);
- if(fixedfreqET <= 64)
- fixedfreq *= pow(2.0, tmp);
- else
- fixedfreq *= pow(3.0, tmp);
- }
- return fixedfreq * pow(2.0, detune / 12.0);
- }
-}
-
-/*
- * Get Voice's Modullator base frequency
- */
-REALTYPE ADnote::getFMvoicebasefreq(int nvoice) const
-{
- REALTYPE detune = NoteVoicePar[nvoice].FMDetune / 100.0;
- return getvoicebasefreq(nvoice) * pow(2, detune / 12.0);
-}
-
-/*
- * Computes all the parameters for each tick
- */
-void ADnote::computecurrentparameters()
-{
- int nvoice;
- REALTYPE voicefreq, voicepitch, filterpitch, filterfreq, FMfreq,
- FMrelativepitch, globalpitch, globalfilterpitch;
- globalpitch = 0.01 * (NoteGlobalPar.FreqEnvelope->envout()
- + NoteGlobalPar.FreqLfo->lfoout()
- * ctl->modwheel.relmod);
- globaloldamplitude = globalnewamplitude;
- globalnewamplitude = NoteGlobalPar.Volume
- * NoteGlobalPar.AmpEnvelope->envout_dB()
- * NoteGlobalPar.AmpLfo->amplfoout();
-
- globalfilterpitch = NoteGlobalPar.FilterEnvelope->envout()
- + NoteGlobalPar.FilterLfo->lfoout()
- + NoteGlobalPar.FilterCenterPitch;
-
- REALTYPE tmpfilterfreq = globalfilterpitch + ctl->filtercutoff.relfreq
- + NoteGlobalPar.FilterFreqTracking;
-
- tmpfilterfreq = NoteGlobalPar.GlobalFilterL->getrealfreq(tmpfilterfreq);
-
- REALTYPE globalfilterq = NoteGlobalPar.FilterQ * ctl->filterq.relq;
- NoteGlobalPar.GlobalFilterL->setfreq_and_q(tmpfilterfreq, globalfilterq);
- if(stereo != 0)
- NoteGlobalPar.GlobalFilterR->setfreq_and_q(tmpfilterfreq, globalfilterq);
-
- //compute the portamento, if it is used by this note
- REALTYPE portamentofreqrap = 1.0;
- if(portamento != 0) { //this voice use portamento
- portamentofreqrap = ctl->portamento.freqrap;
- if(ctl->portamento.used == 0) //the portamento has finished
- portamento = 0; //this note is no longer "portamented"
- ;
- }
-
- //compute parameters for all voices
- for(nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- if(NoteVoicePar[nvoice].Enabled != ON)
- continue;
- NoteVoicePar[nvoice].DelayTicks -= 1;
- if(NoteVoicePar[nvoice].DelayTicks > 0)
- continue;
-
- compute_unison_freq_rap(nvoice);
-
- /*******************/
- /* Voice Amplitude */
- /*******************/
- oldamplitude[nvoice] = newamplitude[nvoice];
- newamplitude[nvoice] = 1.0;
-
- if(NoteVoicePar[nvoice].AmpEnvelope != NULL)
- newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpEnvelope->envout_dB();
-
- if(NoteVoicePar[nvoice].AmpLfo != NULL)
- newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpLfo->amplfoout();
-
- /****************/
- /* Voice Filter */
- /****************/
- if(NoteVoicePar[nvoice].VoiceFilterL != NULL) {
- filterpitch = NoteVoicePar[nvoice].FilterCenterPitch;
-
- if(NoteVoicePar[nvoice].FilterEnvelope != NULL)
- filterpitch += NoteVoicePar[nvoice].FilterEnvelope->envout();
-
- if(NoteVoicePar[nvoice].FilterLfo != NULL)
- filterpitch += NoteVoicePar[nvoice].FilterLfo->lfoout();
-
- filterfreq = filterpitch + NoteVoicePar[nvoice].FilterFreqTracking;
- filterfreq = NoteVoicePar[nvoice].VoiceFilterL->getrealfreq(
- filterfreq);
-
- NoteVoicePar[nvoice].VoiceFilterL->setfreq(filterfreq);
- if(stereo && NoteVoicePar[nvoice].VoiceFilterR)
- NoteVoicePar[nvoice].VoiceFilterR->setfreq(filterfreq);
- }
-
- if(NoteVoicePar[nvoice].noisetype == 0) { //compute only if the voice isn't noise
- /*******************/
- /* Voice Frequency */
- /*******************/
- voicepitch = 0.0;
- if(NoteVoicePar[nvoice].FreqLfo != NULL)
- voicepitch += NoteVoicePar[nvoice].FreqLfo->lfoout() / 100.0
- * ctl->bandwidth.relbw;
-
- if(NoteVoicePar[nvoice].FreqEnvelope != NULL)
- voicepitch += NoteVoicePar[nvoice].FreqEnvelope->envout()
- / 100.0;
- voicefreq = getvoicebasefreq(nvoice)
- * pow(2, (voicepitch + globalpitch) / 12.0); //Hz frequency
- voicefreq *= ctl->pitchwheel.relfreq; //change the frequency by the controller
- setfreq(nvoice, voicefreq * portamentofreqrap);
-
- /***************/
- /* Modulator */
- /***************/
- if(NoteVoicePar[nvoice].FMEnabled != NONE) {
- FMrelativepitch = NoteVoicePar[nvoice].FMDetune / 100.0;
- if(NoteVoicePar[nvoice].FMFreqEnvelope != NULL)
- FMrelativepitch +=
- NoteVoicePar[nvoice].FMFreqEnvelope->envout() / 100;
- FMfreq =
- pow(2.0, FMrelativepitch
- / 12.0) * voicefreq * portamentofreqrap;
- setfreqFM(nvoice, FMfreq);
-
- FMoldamplitude[nvoice] = FMnewamplitude[nvoice];
- FMnewamplitude[nvoice] = NoteVoicePar[nvoice].FMVolume
- * ctl->fmamp.relamp;
- if(NoteVoicePar[nvoice].FMAmpEnvelope != NULL)
- FMnewamplitude[nvoice] *=
- NoteVoicePar[nvoice].FMAmpEnvelope->envout_dB();
- }
- }
- }
- time += (REALTYPE)SOUND_BUFFER_SIZE / (REALTYPE)SAMPLE_RATE;
-}
-
-
-/*
- * Fadein in a way that removes clicks but keep sound "punchy"
- */
-inline void ADnote::fadein(REALTYPE *smps) const
-{
- int zerocrossings = 0;
- for(int i = 1; i < SOUND_BUFFER_SIZE; i++)
- if((smps[i - 1] < 0.0) && (smps[i] > 0.0))
- zerocrossings++; //this is only the possitive crossings
-
- REALTYPE tmp = (SOUND_BUFFER_SIZE - 1.0) / (zerocrossings + 1) / 3.0;
- if(tmp < 8.0)
- tmp = 8.0;
-
- int n;
- F2I(tmp, n); //how many samples is the fade-in
- if(n > SOUND_BUFFER_SIZE)
- n = SOUND_BUFFER_SIZE;
- for(int i = 0; i < n; i++) { //fade-in
- REALTYPE tmp = 0.5 - cos((REALTYPE)i / (REALTYPE) n * PI) * 0.5;
- smps[i] *= tmp;
- }
-}
-
-/*
- * Computes the Oscillator (Without Modulation) - LinearInterpolation
- */
-inline void ADnote::ComputeVoiceOscillator_LinearInterpolation(int nvoice)
-{
- int i, poshi;
- REALTYPE poslo;
-
- for(int k = 0; k < unison_size[nvoice]; k++) {
- poshi = oscposhi[nvoice][k];
- poslo = oscposlo[nvoice][k];
- int freqhi = oscfreqhi[nvoice][k];
- REALTYPE freqlo = oscfreqlo[nvoice][k];
- REALTYPE *smps = NoteVoicePar[nvoice].OscilSmp;
- REALTYPE *tw = tmpwave_unison[k];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tw[i] = smps[poshi] * (1.0 - poslo) + smps[poshi + 1] * poslo;
- poslo += freqlo;
- if(poslo >= 1.0) {
- poslo -= 1.0;
- poshi++;
- }
- poshi += freqhi;
- poshi &= OSCIL_SIZE - 1;
- }
- oscposhi[nvoice][k] = poshi;
- oscposlo[nvoice][k] = poslo;
- }
-}
-
-
-
-/*
- * Computes the Oscillator (Without Modulation) - CubicInterpolation
- *
- The differences from the Linear are to little to deserve to be used. This is because I am using a large OSCIL_SIZE (>512)
-inline void ADnote::ComputeVoiceOscillator_CubicInterpolation(int nvoice){
- int i,poshi;
- REALTYPE poslo;
-
- poshi=oscposhi[nvoice];
- poslo=oscposlo[nvoice];
- REALTYPE *smps=NoteVoicePar[nvoice].OscilSmp;
- REALTYPE xm1,x0,x1,x2,a,b,c;
- for (i=0;i<SOUND_BUFFER_SIZE;i++){
- xm1=smps[poshi];
- x0=smps[poshi+1];
- x1=smps[poshi+2];
- x2=smps[poshi+3];
- a=(3.0 * (x0-x1) - xm1 + x2) / 2.0;
- b = 2.0*x1 + xm1 - (5.0*x0 + x2) / 2.0;
- c = (x1 - xm1) / 2.0;
- tmpwave[i]=(((a * poslo) + b) * poslo + c) * poslo + x0;
- printf("a\n");
- //tmpwave[i]=smps[poshi]*(1.0-poslo)+smps[poshi+1]*poslo;
- poslo+=oscfreqlo[nvoice];
- if (poslo>=1.0) {
- poslo-=1.0;
- poshi++;
- };
- poshi+=oscfreqhi[nvoice];
- poshi&=OSCIL_SIZE-1;
- };
- oscposhi[nvoice]=poshi;
- oscposlo[nvoice]=poslo;
-};
-*/
-/*
- * Computes the Oscillator (Morphing)
- */
-inline void ADnote::ComputeVoiceOscillatorMorph(int nvoice)
-{
- int i;
- REALTYPE amp;
- ComputeVoiceOscillator_LinearInterpolation(nvoice);
- if(FMnewamplitude[nvoice] > 1.0)
- FMnewamplitude[nvoice] = 1.0;
- if(FMoldamplitude[nvoice] > 1.0)
- FMoldamplitude[nvoice] = 1.0;
-
- if(NoteVoicePar[nvoice].FMVoice >= 0) {
- //if I use VoiceOut[] as modullator
- int FMVoice = NoteVoicePar[nvoice].FMVoice;
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
- FMnewamplitude[nvoice],
- i,
- SOUND_BUFFER_SIZE);
- tw[i] = tw[i]
- * (1.0 - amp) + amp * NoteVoicePar[FMVoice].VoiceOut[i];
- }
- }
- }
- else {
- for(int k = 0; k < unison_size[nvoice]; k++) {
- int poshiFM = oscposhiFM[nvoice][k];
- REALTYPE posloFM = oscposloFM[nvoice][k];
- int freqhiFM = oscfreqhiFM[nvoice][k];
- REALTYPE freqloFM = oscfreqloFM[nvoice][k];
- REALTYPE *tw = tmpwave_unison[k];
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
- FMnewamplitude[nvoice],
- i,
- SOUND_BUFFER_SIZE);
- tw[i] = tw[i] * (1.0 - amp) + amp
- * (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1 - posloFM)
- + NoteVoicePar[nvoice].FMSmp[poshiFM + 1] * posloFM);
- posloFM += freqloFM;
- if(posloFM >= 1.0) {
- posloFM -= 1.0;
- poshiFM++;
- }
- poshiFM += freqhiFM;
- poshiFM &= OSCIL_SIZE - 1;
- }
- oscposhiFM[nvoice][k] = poshiFM;
- oscposloFM[nvoice][k] = posloFM;
- }
- }
-}
-
-/*
- * Computes the Oscillator (Ring Modulation)
- */
-inline void ADnote::ComputeVoiceOscillatorRingModulation(int nvoice)
-{
- int i;
- REALTYPE amp;
- ComputeVoiceOscillator_LinearInterpolation(nvoice);
- if(FMnewamplitude[nvoice] > 1.0)
- FMnewamplitude[nvoice] = 1.0;
- if(FMoldamplitude[nvoice] > 1.0)
- FMoldamplitude[nvoice] = 1.0;
- if(NoteVoicePar[nvoice].FMVoice >= 0) {
- // if I use VoiceOut[] as modullator
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
- FMnewamplitude[nvoice],
- i,
- SOUND_BUFFER_SIZE);
- int FMVoice = NoteVoicePar[nvoice].FMVoice;
- tw[i] *= (1.0 - amp) + amp * NoteVoicePar[FMVoice].VoiceOut[i];
- }
- }
- }
- else {
- for(int k = 0; k < unison_size[nvoice]; k++) {
- int poshiFM = oscposhiFM[nvoice][k];
- REALTYPE posloFM = oscposloFM[nvoice][k];
- int freqhiFM = oscfreqhiFM[nvoice][k];
- REALTYPE freqloFM = oscfreqloFM[nvoice][k];
- REALTYPE *tw = tmpwave_unison[k];
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
- FMnewamplitude[nvoice],
- i,
- SOUND_BUFFER_SIZE);
- tw[i] *= (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1.0 - posloFM)
- + NoteVoicePar[nvoice].FMSmp[poshiFM
- + 1] * posloFM) * amp
- + (1.0 - amp);
- posloFM += freqloFM;
- if(posloFM >= 1.0) {
- posloFM -= 1.0;
- poshiFM++;
- }
- poshiFM += freqhiFM;
- poshiFM &= OSCIL_SIZE - 1;
- }
- oscposhiFM[nvoice][k] = poshiFM;
- oscposloFM[nvoice][k] = posloFM;
- }
- }
-}
-
-
-
-/*
- * Computes the Oscillator (Phase Modulation or Frequency Modulation)
- */
-inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice,
- int FMmode)
-{
- int carposhi = 0;
- int i, FMmodfreqhi = 0;
- REALTYPE FMmodfreqlo = 0, carposlo = 0;
-
- if(NoteVoicePar[nvoice].FMVoice >= 0) {
- //if I use VoiceOut[] as modulator
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- memcpy(tw, NoteVoicePar[NoteVoicePar[nvoice].FMVoice].VoiceOut,
- SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- }
- }
- else {
- //Compute the modulator and store it in tmpwave_unison[][]
- for(int k = 0; k < unison_size[nvoice]; k++) {
- int poshiFM = oscposhiFM[nvoice][k];
- REALTYPE posloFM = oscposloFM[nvoice][k];
- int freqhiFM = oscfreqhiFM[nvoice][k];
- REALTYPE freqloFM = oscfreqloFM[nvoice][k];
- REALTYPE *tw = tmpwave_unison[k];
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- tw[i] =
- (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1.0 - posloFM)
- + NoteVoicePar[nvoice].FMSmp[poshiFM + 1] * posloFM);
- posloFM += freqloFM;
- if(posloFM >= 1.0) {
- posloFM = fmod(posloFM, 1.0);
- poshiFM++;
- }
- poshiFM += freqhiFM;
- poshiFM &= OSCIL_SIZE - 1;
- }
- oscposhiFM[nvoice][k] = poshiFM;
- oscposloFM[nvoice][k] = posloFM;
- }
- }
- // Amplitude interpolation
- if(ABOVE_AMPLITUDE_THRESHOLD(FMoldamplitude[nvoice],
- FMnewamplitude[nvoice])) {
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tw[i] *= INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
- FMnewamplitude[nvoice],
- i,
- SOUND_BUFFER_SIZE);
- ;
- }
- }
- else {
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tw[i] *= FMnewamplitude[nvoice];
- }
- }
-
-
- //normalize: makes all sample-rates, oscil_sizes to produce same sound
- if(FMmode != 0) { //Frequency modulation
- REALTYPE normalize = OSCIL_SIZE / 262144.0 * 44100.0
- / (REALTYPE)SAMPLE_RATE;
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- REALTYPE fmold = FMoldsmp[nvoice][k];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- fmold = fmod(fmold + tw[i] * normalize, OSCIL_SIZE);
- tw[i] = fmold;
- }
- FMoldsmp[nvoice][k] = fmold;
- }
- }
- else { //Phase modulation
- REALTYPE normalize = OSCIL_SIZE / 262144.0;
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tw[i] *= normalize;
- }
- }
-
- //do the modulation
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- int poshi = oscposhi[nvoice][k];
- REALTYPE poslo = oscposlo[nvoice][k];
- int freqhi = oscfreqhi[nvoice][k];
- REALTYPE freqlo = oscfreqlo[nvoice][k];
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- F2I(tw[i], FMmodfreqhi);
- FMmodfreqlo = fmod(tw[i] + 0.0000000001, 1.0);
- if(FMmodfreqhi < 0)
- FMmodfreqlo++;
-
- //carrier
- carposhi = poshi + FMmodfreqhi;
- carposlo = poslo + FMmodfreqlo;
-
- if(carposlo >= 1.0) {
- carposhi++;
- carposlo = fmod(carposlo, 1.0);
- }
- carposhi &= (OSCIL_SIZE - 1);
-
- tw[i] = NoteVoicePar[nvoice].OscilSmp[carposhi]
- * (1.0 - carposlo)
- + NoteVoicePar[nvoice].OscilSmp[carposhi
- + 1] * carposlo;
-
- poslo += freqlo;
- if(poslo >= 1.0) {
- poslo = fmod(poslo, 1.0);
- poshi++;
- }
-
- poshi += freqhi;
- poshi &= OSCIL_SIZE - 1;
- }
- oscposhi[nvoice][k] = poshi;
- oscposlo[nvoice][k] = poslo;
- }
-}
-
-
-/*Calculeaza Oscilatorul cu PITCH MODULATION*/
-inline void ADnote::ComputeVoiceOscillatorPitchModulation(int nvoice)
-{
-//TODO
-}
-
-/*
- * Computes the Noise
- */
-inline void ADnote::ComputeVoiceNoise(int nvoice)
-{
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++)
- tw[i] = RND * 2.0 - 1.0;
- }
-}
-
-
-
-/*
- * Compute the ADnote samples
- * Returns 0 if the note is finished
- */
-int ADnote::noteout(REALTYPE *outl, REALTYPE *outr)
-{
- int i, nvoice;
-
- memcpy(outl, denormalkillbuf, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- memcpy(outr, denormalkillbuf, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
-
- if(NoteEnabled == OFF)
- return 0;
-
- memset(bypassl, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- memset(bypassr, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- computecurrentparameters();
-
- for(nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- if((NoteVoicePar[nvoice].Enabled != ON)
- || (NoteVoicePar[nvoice].DelayTicks > 0))
- continue;
- if(NoteVoicePar[nvoice].noisetype == 0) //voice mode=sound
- switch(NoteVoicePar[nvoice].FMEnabled) {
- case MORPH:
- ComputeVoiceOscillatorMorph(nvoice);
- break;
- case RING_MOD:
- ComputeVoiceOscillatorRingModulation(nvoice);
- break;
- case PHASE_MOD:
- ComputeVoiceOscillatorFrequencyModulation(nvoice, 0);
- break;
- case FREQ_MOD:
- ComputeVoiceOscillatorFrequencyModulation(nvoice, 1);
- break;
- //case PITCH_MOD:ComputeVoiceOscillatorPitchModulation(nvoice);break;
- default:
- ComputeVoiceOscillator_LinearInterpolation(nvoice);
- //if (config.cfg.Interpolation) ComputeVoiceOscillator_CubicInterpolation(nvoice);
- }
- else
- ComputeVoiceNoise(nvoice);
- // Voice Processing
-
-
- //mix subvoices into voice
- memset(tmpwavel, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- if(stereo)
- memset(tmpwaver, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- for(int k = 0; k < unison_size[nvoice]; k++) {
- REALTYPE *tw = tmpwave_unison[k];
- if(stereo) {
- REALTYPE stereo_pos = 0;
- if(unison_size[nvoice] > 1)
- stereo_pos = k
- / (REALTYPE)(unison_size[nvoice]
- - 1) * 2.0 - 1.0;
- REALTYPE stereo_spread = unison_stereo_spread[nvoice] * 2.0; //between 0 and 2.0
- if(stereo_spread > 1.0) {
- REALTYPE stereo_pos_1 = (stereo_pos >= 0.0) ? 1.0 : -1.0;
- stereo_pos =
- (2.0
- - stereo_spread) * stereo_pos
- + (stereo_spread - 1.0) * stereo_pos_1;
- }
- else
- stereo_pos *= stereo_spread;
- ;
- if(unison_size[nvoice] == 1)
- stereo_pos = 0.0;
- REALTYPE panning = (stereo_pos + 1.0) * 0.5;
-
-
- REALTYPE lvol = (1.0 - panning) * 2.0;
- if(lvol > 1.0)
- lvol = 1.0;
-
- REALTYPE rvol = panning * 2.0;
- if(rvol > 1.0)
- rvol = 1.0;
-
- if(unison_invert_phase[nvoice][k]) {
- lvol = -lvol;
- rvol = -rvol;
- }
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmpwavel[i] += tw[i] * lvol;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmpwaver[i] += tw[i] * rvol;
- }
- else
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmpwavel[i] += tw[i];
- ;
- }
-
-
- REALTYPE unison_amplitude = 1.0 / sqrt(unison_size[nvoice]); //reduce the amplitude for large unison sizes
- // Amplitude
- REALTYPE oldam = oldamplitude[nvoice] * unison_amplitude;
- REALTYPE newam = newamplitude[nvoice] * unison_amplitude;
-
- if(ABOVE_AMPLITUDE_THRESHOLD(oldam, newam)) {
- int rest = SOUND_BUFFER_SIZE;
- //test if the amplitude if raising and the difference is high
- if((newam > oldam) && ((newam - oldam) > 0.25)) {
- rest = 10;
- if(rest > SOUND_BUFFER_SIZE)
- rest = SOUND_BUFFER_SIZE;
- for(int i = 0; i < SOUND_BUFFER_SIZE - rest; i++)
- tmpwavel[i] *= oldam;
- if(stereo)
- for(int i = 0; i < SOUND_BUFFER_SIZE - rest; i++)
- tmpwaver[i] *= oldam;
- }
- // Amplitude interpolation
- for(i = 0; i < rest; i++) {
- REALTYPE amp = INTERPOLATE_AMPLITUDE(oldam, newam, i, rest);
- tmpwavel[i + (SOUND_BUFFER_SIZE - rest)] *= amp;
- if(stereo)
- tmpwaver[i + (SOUND_BUFFER_SIZE - rest)] *= amp;
- }
- }
- else {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmpwavel[i] *= newam;
- if(stereo)
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmpwaver[i] *= newam;
- }
-
- // Fade in
- if(firsttick[nvoice] != 0) {
- fadein(&tmpwavel[0]);
- if(stereo)
- fadein(&tmpwaver[0]);
- firsttick[nvoice] = 0;
- }
-
-
- // Filter
- if(NoteVoicePar[nvoice].VoiceFilterL != NULL)
- NoteVoicePar[nvoice].VoiceFilterL->filterout(&tmpwavel[0]);
- if((stereo) && (NoteVoicePar[nvoice].VoiceFilterR != NULL))
- NoteVoicePar[nvoice].VoiceFilterR->filterout(&tmpwaver[0]);
-
- //check if the amplitude envelope is finished, if yes, the voice will be fadeout
- if(NoteVoicePar[nvoice].AmpEnvelope != NULL) {
- if(NoteVoicePar[nvoice].AmpEnvelope->finished() != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmpwavel[i] *= 1.0 - (REALTYPE)i
- / (REALTYPE)SOUND_BUFFER_SIZE;
- if(stereo)
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmpwaver[i] *= 1.0 - (REALTYPE)i
- / (REALTYPE)SOUND_BUFFER_SIZE;
- }
- //the voice is killed later
- }
-
-
- // Put the ADnote samples in VoiceOut (without appling Global volume, because I wish to use this voice as a modullator)
- if(NoteVoicePar[nvoice].VoiceOut != NULL) {
- if(stereo)
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- NoteVoicePar[nvoice].VoiceOut[i] = tmpwavel[i]
- + tmpwaver[i];
- else //mono
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- NoteVoicePar[nvoice].VoiceOut[i] = tmpwavel[i];
- ;
- }
-
-
- // Add the voice that do not bypass the filter to out
- if(NoteVoicePar[nvoice].filterbypass == 0) { //no bypass
- if(stereo) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //stereo
- outl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume
- * NoteVoicePar[nvoice].Panning * 2.0;
- outr[i] += tmpwaver[i] * NoteVoicePar[nvoice].Volume
- * (1.0 - NoteVoicePar[nvoice].Panning) * 2.0;
- }
- }
- else
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- outl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume; //mono
- ;
- }
- else { //bypass the filter
- if(stereo) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //stereo
- bypassl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume
- * NoteVoicePar[nvoice].Panning * 2.0;
- bypassr[i] += tmpwaver[i] * NoteVoicePar[nvoice].Volume
- * (1.0 - NoteVoicePar[nvoice].Panning) * 2.0;
- }
- }
- else
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- bypassl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume; //mono
- ;
- }
- // chech if there is necesary to proces the voice longer (if the Amplitude envelope isn't finished)
- if(NoteVoicePar[nvoice].AmpEnvelope != NULL)
- if(NoteVoicePar[nvoice].AmpEnvelope->finished() != 0)
- KillVoice(nvoice);
- ;
- }
-
-
- //Processing Global parameters
- NoteGlobalPar.GlobalFilterL->filterout(&outl[0]);
-
- if(stereo == 0) { //set the right channel=left channel
- memcpy(outr, outl, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- memcpy(bypassr, bypassl, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- }
- else
- NoteGlobalPar.GlobalFilterR->filterout(&outr[0]);
-
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] += bypassl[i];
- outr[i] += bypassr[i];
- }
-
- if(ABOVE_AMPLITUDE_THRESHOLD(globaloldamplitude, globalnewamplitude)) {
- // Amplitude Interpolation
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE tmpvol = INTERPOLATE_AMPLITUDE(globaloldamplitude,
- globalnewamplitude,
- i,
- SOUND_BUFFER_SIZE);
- outl[i] *= tmpvol * NoteGlobalPar.Panning;
- outr[i] *= tmpvol * (1.0 - NoteGlobalPar.Panning);
- }
- }
- else {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] *= globalnewamplitude * NoteGlobalPar.Panning;
- outr[i] *= globalnewamplitude * (1.0 - NoteGlobalPar.Panning);
- }
- }
-
-//Apply the punch
- if(NoteGlobalPar.Punch.Enabled != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE punchamp = NoteGlobalPar.Punch.initialvalue
- * NoteGlobalPar.Punch.t + 1.0;
- outl[i] *= punchamp;
- outr[i] *= punchamp;
- NoteGlobalPar.Punch.t -= NoteGlobalPar.Punch.dt;
- if(NoteGlobalPar.Punch.t < 0.0) {
- NoteGlobalPar.Punch.Enabled = 0;
- break;
- }
- }
- }
-
-
- // Apply legato-specific sound signal modifications
- if(Legato.silent) // Silencer
- if(Legato.msg != LM_FadeIn) {
- memset(outl, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- memset(outr, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- }
- switch(Legato.msg) {
- case LM_CatchUp: // Continue the catch-up...
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //Yea, could be done without the loop...
- Legato.decounter--;
- if(Legato.decounter < 1) {
- // Catching-up done, we can finally set
- // the note to the actual parameters.
- Legato.decounter = -10;
- Legato.msg = LM_ToNorm;
- ADlegatonote(Legato.param.freq,
- Legato.param.vel,
- Legato.param.portamento,
- Legato.param.midinote,
- false);
- break;
- }
- }
- break;
- case LM_FadeIn: // Fade-in
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- Legato.silent = false;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- Legato.decounter--;
- if(Legato.decounter < 1) {
- Legato.decounter = -10;
- Legato.msg = LM_Norm;
- break;
- }
- Legato.fade.m += Legato.fade.step;
- outl[i] *= Legato.fade.m;
- outr[i] *= Legato.fade.m;
- }
- break;
- case LM_FadeOut: // Fade-out, then set the catch-up
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- Legato.decounter--;
- if(Legato.decounter < 1) {
- for(int j = i; j < SOUND_BUFFER_SIZE; j++) {
- outl[j] = 0.0;
- outr[j] = 0.0;
- }
- Legato.decounter = -10;
- Legato.silent = true;
- // Fading-out done, now set the catch-up :
- Legato.decounter = Legato.fade.length;
- Legato.msg = LM_CatchUp;
- REALTYPE catchupfreq = Legato.param.freq
- * (Legato.param.freq / Legato.lastfreq); //This freq should make this now silent note to catch-up (or should I say resync ?) with the heard note for the same length it stayed at the previous freq during the fadeout.
- ADlegatonote(catchupfreq,
- Legato.param.vel,
- Legato.param.portamento,
- Legato.param.midinote,
- false);
- break;
- }
- Legato.fade.m -= Legato.fade.step;
- outl[i] *= Legato.fade.m;
- outr[i] *= Legato.fade.m;
- }
- break;
- default:
- break;
- }
-
-
-// Check if the global amplitude is finished.
-// If it does, disable the note
- if(NoteGlobalPar.AmpEnvelope->finished() != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //fade-out
- REALTYPE tmp = 1.0 - (REALTYPE)i / (REALTYPE)SOUND_BUFFER_SIZE;
- outl[i] *= tmp;
- outr[i] *= tmp;
- }
- KillNote();
- }
- return 1;
-}
-
-
-/*
- * Relase the key (NoteOff)
- */
-void ADnote::relasekey()
-{
- int nvoice;
- for(nvoice = 0; nvoice < NUM_VOICES; nvoice++) {
- if(NoteVoicePar[nvoice].Enabled == 0)
- continue;
- if(NoteVoicePar[nvoice].AmpEnvelope != NULL)
- NoteVoicePar[nvoice].AmpEnvelope->relasekey();
- if(NoteVoicePar[nvoice].FreqEnvelope != NULL)
- NoteVoicePar[nvoice].FreqEnvelope->relasekey();
- if(NoteVoicePar[nvoice].FilterEnvelope != NULL)
- NoteVoicePar[nvoice].FilterEnvelope->relasekey();
- if(NoteVoicePar[nvoice].FMFreqEnvelope != NULL)
- NoteVoicePar[nvoice].FMFreqEnvelope->relasekey();
- if(NoteVoicePar[nvoice].FMAmpEnvelope != NULL)
- NoteVoicePar[nvoice].FMAmpEnvelope->relasekey();
- }
- NoteGlobalPar.FreqEnvelope->relasekey();
- NoteGlobalPar.FilterEnvelope->relasekey();
- NoteGlobalPar.AmpEnvelope->relasekey();
-}
-
-/*
- * Check if the note is finished
- */
-int ADnote::finished() const
-{
- if(NoteEnabled == ON)
- return 0;
- else
- return 1;
-}
-
diff --git a/plugins/zynaddsubfx/src/Synth/ADnote.h b/plugins/zynaddsubfx/src/Synth/ADnote.h
deleted file mode 100644
index 9f494a9..0000000
--- a/plugins/zynaddsubfx/src/Synth/ADnote.h
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- ADnote.h - The "additive" synthesizer
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef AD_NOTE_H
-#define AD_NOTE_H
-
-#include "../globals.h"
-#include "Envelope.h"
-#include "LFO.h"
-#include "../DSP/Filter.h"
-#include "../Params/ADnoteParameters.h"
-#include "../Params/Controller.h"
-
-//Globals
-
-/**FM amplitude tune*/
-#define FM_AMP_MULTIPLIER 14.71280603
-
-#define OSCIL_SMP_EXTRA_SAMPLES 5
-
-/**The "additive" synthesizer*/
-class ADnote //ADDitive note
-{
- public:
- /**Constructor.
- * @param pars Note Parameters
- * @param ctl_ Pointer to system Controller
- * @param freq Base frequency for note
- * @param velocity Velocity of note
- * @param portamento_ 1 if the note has portamento
- * @param midinote_ The midi number of the note
- * @param besilent Start silent note if true*/
- ADnote(ADnoteParameters *pars, Controller *ctl_, REALTYPE freq,
- REALTYPE velocity, int portamento_, int midinote_,
- bool besilent);
- /**Destructor*/
- ~ADnote();
-
- /**Alters the playing note for legato effect*/
- void ADlegatonote(REALTYPE freq, REALTYPE velocity, int portamento_,
- int midinote_, bool externcall);
-
- /**Compute ADnote Samples.
- * @return 0 if note is finished*/
- int noteout(REALTYPE *outl, REALTYPE *outr);
-
- /**Release the key for the note and start release portion of envelopes.*/
- void relasekey();
- /**Return if note is finished.
- * @return finished=1 unfinished=0*/
- int finished() const;
-
-
- /**Nonzero when ready for output(the parameters has been computed)
- * zero when parameters need to be computed.*/
- char ready;
-
- private:
-
- /**Changes the frequency of an oscillator.
- * @param nvoice voice to run computations on
- * @param in_freq new frequency*/
- void setfreq(int nvoice, REALTYPE in_freq);
- /**Set the frequency of the modulator oscillator*/
- void setfreqFM(int nvoice, REALTYPE in_freq);
- /**Computes relative frequency for unison and unison's vibratto.
- * Note: Must be called before setfreq* functions.*/
- void compute_unison_freq_rap(int nvoice);
- /**Compute parameters for next tick*/
- void computecurrentparameters();
- /**Initializes All Parameters*/
- void initparameters();
- /**Deallocate/Cleanup given voice*/
- void KillVoice(int nvoice);
- /**Deallocate Note resources and voice resources*/
- void KillNote();
- /**Get the Voice's base frequency*/
- inline REALTYPE getvoicebasefreq(int nvoice) const;
- /**Get modulator's base frequency*/
- inline REALTYPE getFMvoicebasefreq(int nvoice) const;
- /**Compute the Oscillator's samples.
- * Affects tmpwave_unison and updates oscposhi/oscposlo*/
- inline void ComputeVoiceOscillator_LinearInterpolation(int nvoice);
- /**Compute the Oscillator's samples.
- * Affects tmpwave_unison and updates oscposhi/oscposlo
- * @todo remove this declaration if it is commented out*/
- inline void ComputeVoiceOscillator_CubicInterpolation(int nvoice);
- /**Computes the Oscillator samples with morphing.
- * updates tmpwave_unison*/
- inline void ComputeVoiceOscillatorMorph(int nvoice);
- /**Computes the Ring Modulated Oscillator.*/
- inline void ComputeVoiceOscillatorRingModulation(int nvoice);
- /**Computes the Frequency Modulated Oscillator.
- * @param FMmode modulation type 0=Phase 1=Frequency*/
- inline void ComputeVoiceOscillatorFrequencyModulation(int nvoice,
- int FMmode); //FMmode=0 for phase modulation, 1 for Frequency modulation
- // inline void ComputeVoiceOscillatorFrequencyModulation(int nvoice);
- /**TODO*/
- inline void ComputeVoiceOscillatorPitchModulation(int nvoice);
-
- /**Generate Noise Samples for Voice*/
- inline void ComputeVoiceNoise(int nvoice);
-
- /**Fadein in a way that removes clicks but keep sound "punchy"*/
- inline void fadein(REALTYPE *smps) const;
-
-
- //GLOBALS
- ADnoteParameters *partparams;
- unsigned char stereo; //if the note is stereo (allows note Panning)
- int midinote;
- REALTYPE velocity, basefreq;
-
- ONOFFTYPE NoteEnabled;
- Controller *ctl;
-
- /*****************************************************************/
- /* GLOBAL PARAMETERS */
- /*****************************************************************/
-
- struct ADnoteGlobal {
- /******************************************
- * FREQUENCY GLOBAL PARAMETERS *
- ******************************************/
- REALTYPE Detune; //cents
-
- Envelope *FreqEnvelope;
- LFO *FreqLfo;
-
- /********************************************
- * AMPLITUDE GLOBAL PARAMETERS *
- ********************************************/
- REALTYPE Volume; // [ 0 .. 1 ]
-
- REALTYPE Panning; // [ 0 .. 1 ]
-
- Envelope *AmpEnvelope;
- LFO *AmpLfo;
-
- struct {
- int Enabled;
- REALTYPE initialvalue, dt, t;
- } Punch;
-
- /******************************************
- * FILTER GLOBAL PARAMETERS *
- ******************************************/
- Filter *GlobalFilterL, *GlobalFilterR;
-
- REALTYPE FilterCenterPitch; //octaves
- REALTYPE FilterQ;
- REALTYPE FilterFreqTracking;
-
- Envelope *FilterEnvelope;
-
- LFO *FilterLfo;
- } NoteGlobalPar;
-
-
-
- /***********************************************************/
- /* VOICE PARAMETERS */
- /***********************************************************/
- struct ADnoteVoice {
- /* If the voice is enabled */
- ONOFFTYPE Enabled;
-
- /* Voice Type (sound/noise)*/
- int noisetype;
-
- /* Filter Bypass */
- int filterbypass;
-
- /* Delay (ticks) */
- int DelayTicks;
-
- /* Waveform of the Voice */
- REALTYPE *OscilSmp;
-
- /************************************
- * FREQUENCY PARAMETERS *
- ************************************/
- int fixedfreq; //if the frequency is fixed to 440 Hz
- int fixedfreqET; //if the "fixed" frequency varies according to the note (ET)
-
- // cents = basefreq*VoiceDetune
- REALTYPE Detune, FineDetune;
-
- Envelope *FreqEnvelope;
- LFO *FreqLfo;
-
-
- /***************************
- * AMPLITUDE PARAMETERS *
- ***************************/
-
- /* Panning 0.0=left, 0.5 - center, 1.0 = right */
- REALTYPE Panning;
- REALTYPE Volume; // [-1.0 .. 1.0]
-
- Envelope *AmpEnvelope;
- LFO *AmpLfo;
-
- /*************************
- * FILTER PARAMETERS *
- *************************/
-
- Filter *VoiceFilterL;
- Filter *VoiceFilterR;
-
- REALTYPE FilterCenterPitch; /* Filter center Pitch*/
- REALTYPE FilterFreqTracking;
-
- Envelope *FilterEnvelope;
- LFO *FilterLfo;
-
-
- /****************************
- * MODULLATOR PARAMETERS *
- ****************************/
-
- FMTYPE FMEnabled;
-
- int FMVoice;
-
- // Voice Output used by other voices if use this as modullator
- REALTYPE *VoiceOut;
-
- /* Wave of the Voice */
- REALTYPE *FMSmp;
-
- REALTYPE FMVolume;
- REALTYPE FMDetune; //in cents
-
- Envelope *FMFreqEnvelope;
- Envelope *FMAmpEnvelope;
- } NoteVoicePar[NUM_VOICES];
-
-
- /********************************************************/
- /* INTERNAL VALUES OF THE NOTE AND OF THE VOICES */
- /********************************************************/
-
- //time from the start of the note
- REALTYPE time;
-
- //the size of unison for a single voice
- int unison_size[NUM_VOICES];
-
- //the stereo spread of the unison subvoices (0.0=mono,1.0=max)
- REALTYPE unison_stereo_spread[NUM_VOICES];
-
- //fractional part (skip)
- REALTYPE *oscposlo[NUM_VOICES], *oscfreqlo[NUM_VOICES];
-
- //integer part (skip)
- int *oscposhi[NUM_VOICES], *oscfreqhi[NUM_VOICES];
-
- //fractional part (skip) of the Modullator
- REALTYPE *oscposloFM[NUM_VOICES], *oscfreqloFM[NUM_VOICES];
-
- //the unison base_value
- REALTYPE *unison_base_freq_rap[NUM_VOICES];
-
- //how the unison subvoice's frequency is changed (1.0 for no change)
- REALTYPE *unison_freq_rap[NUM_VOICES];
-
- //which subvoice has phase inverted
- bool *unison_invert_phase[NUM_VOICES];
-
- //unison vibratto
- struct {
- REALTYPE amplitude; //amplitude which be added to unison_freq_rap
- REALTYPE *step; //value which increments the position
- REALTYPE *position; //between -1.0 and 1.0
- } unison_vibratto[NUM_VOICES];
-
-
- //integer part (skip) of the Modullator
- unsigned int *oscposhiFM[NUM_VOICES], *oscfreqhiFM[NUM_VOICES];
-
- //used to compute and interpolate the amplitudes of voices and modullators
- REALTYPE oldamplitude[NUM_VOICES],
- newamplitude[NUM_VOICES],
- FMoldamplitude[NUM_VOICES],
- FMnewamplitude[NUM_VOICES];
-
- //used by Frequency Modulation (for integration)
- REALTYPE *FMoldsmp[NUM_VOICES];
-
- //temporary buffer
- REALTYPE *tmpwavel;
- REALTYPE *tmpwaver;
- int max_unison;
- REALTYPE **tmpwave_unison;
-
- //Filter bypass samples
- REALTYPE *bypassl, *bypassr;
-
- //interpolate the amplitudes
- REALTYPE globaloldamplitude, globalnewamplitude;
-
- //1 - if it is the fitst tick (used to fade in the sound)
- char firsttick[NUM_VOICES];
-
- //1 if the note has portamento
- int portamento;
-
- //how the fine detunes are made bigger or smaller
- REALTYPE bandwidthDetuneMultiplier;
-
- // Legato vars
- struct {
- bool silent;
- REALTYPE lastfreq;
- LegatoMsg msg;
- int decounter;
- struct { // Fade In/Out vars
- int length;
- REALTYPE m, step;
- } fade;
- struct { // Note parameters
- REALTYPE freq, vel;
- int portamento, midinote;
- } param;
- } Legato;
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Synth/CMakeLists.txt b/plugins/zynaddsubfx/src/Synth/CMakeLists.txt
deleted file mode 100644
index 486554b..0000000
--- a/plugins/zynaddsubfx/src/Synth/CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-set(zynaddsubfx_synth_SRCS
- ADnote.cpp
- Envelope.cpp
- LFO.cpp
- OscilGen.cpp
- PADnote.cpp
- Resonance.cpp
- SUBnote.cpp
-)
-
-add_library(zynaddsubfx_synth STATIC
- ${zynaddsubfx_synth_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_synth)
-
diff --git a/plugins/zynaddsubfx/src/Synth/Envelope.cpp b/plugins/zynaddsubfx/src/Synth/Envelope.cpp
deleted file mode 100644
index 86ea311..0000000
--- a/plugins/zynaddsubfx/src/Synth/Envelope.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Envelope.cpp - Envelope implementation
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <cmath>
-#include "Envelope.h"
-#include "../Params/EnvelopeParams.h"
-
-Envelope::Envelope(EnvelopeParams *envpars, REALTYPE basefreq)
-{
- int i;
- envpoints = envpars->Penvpoints;
- if(envpoints > MAX_ENVELOPE_POINTS)
- envpoints = MAX_ENVELOPE_POINTS;
- envsustain = (envpars->Penvsustain == 0) ? -1 : envpars->Penvsustain;
- forcedrelase = envpars->Pforcedrelease;
- envstretch = pow(440.0 / basefreq, envpars->Penvstretch / 64.0);
- linearenvelope = envpars->Plinearenvelope;
-
- if(envpars->Pfreemode == 0)
- envpars->converttofree();
-
- REALTYPE bufferdt = SOUND_BUFFER_SIZE / (REALTYPE)SAMPLE_RATE;
-
- int mode = envpars->Envmode;
-
- //for amplitude envelopes
- if((mode == 1) && (linearenvelope == 0))
- mode = 2; //change to log envelope
- if((mode == 2) && (linearenvelope != 0))
- mode = 1; //change to linear
-
- for(i = 0; i < MAX_ENVELOPE_POINTS; i++) {
- REALTYPE tmp = envpars->getdt(i) / 1000.0 * envstretch;
- if(tmp > bufferdt)
- envdt[i] = bufferdt / tmp;
- else
- envdt[i] = 2.0; //any value larger than 1
-
- switch(mode) {
- case 2:
- envval[i] = (1.0 - envpars->Penvval[i] / 127.0) * -40;
- break;
- case 3:
- envval[i] =
- (pow(2, 6.0
- * fabs(envpars->Penvval[i] - 64.0) / 64.0) - 1.0) * 100.0;
- if(envpars->Penvval[i] < 64)
- envval[i] = -envval[i];
- break;
- case 4:
- envval[i] = (envpars->Penvval[i] - 64.0) / 64.0 * 6.0; //6 octaves (filtru)
- break;
- case 5:
- envval[i] = (envpars->Penvval[i] - 64.0) / 64.0 * 10;
- break;
- default:
- envval[i] = envpars->Penvval[i] / 127.0;
- }
- }
-
- envdt[0] = 1.0;
-
- currentpoint = 1; //the envelope starts from 1
- keyreleased = 0;
- t = 0.0;
- envfinish = 0;
- inct = envdt[1];
- envoutval = 0.0;
-}
-
-Envelope::~Envelope()
-{}
-
-
-/*
- * Relase the key (note envelope)
- */
-void Envelope::relasekey()
-{
- if(keyreleased == 1)
- return;
- keyreleased = 1;
- if(forcedrelase != 0)
- t = 0.0;
-}
-
-/*
- * Envelope Output
- */
-REALTYPE Envelope::envout()
-{
- REALTYPE out;
-
- if(envfinish != 0) { //if the envelope is finished
- envoutval = envval[envpoints - 1];
- return envoutval;
- }
- if((currentpoint == envsustain + 1) && (keyreleased == 0)) { //if it is sustaining now
- envoutval = envval[envsustain];
- return envoutval;
- }
-
- if((keyreleased != 0) && (forcedrelase != 0)) { //do the forced release
- int tmp = (envsustain < 0) ? (envpoints - 1) : (envsustain + 1); //if there is no sustain point, use the last point for release
-
- if(envdt[tmp] < 0.00000001)
- out = envval[tmp];
- else
- out = envoutval + (envval[tmp] - envoutval) * t;
- t += envdt[tmp] * envstretch;
-
- if(t >= 1.0) {
- currentpoint = envsustain + 2;
- forcedrelase = 0;
- t = 0.0;
- inct = envdt[currentpoint];
- if((currentpoint >= envpoints) || (envsustain < 0))
- envfinish = 1;
- }
- return out;
- }
- if(inct >= 1.0)
- out = envval[currentpoint];
- else
- out =
- envval[currentpoint
- - 1] + (envval[currentpoint] - envval[currentpoint - 1]) * t;
-
- t += inct;
- if(t >= 1.0) {
- if(currentpoint >= envpoints - 1)
- envfinish = 1;
- else
- currentpoint++;
- t = 0.0;
- inct = envdt[currentpoint];
- }
-
- envoutval = out;
- return out;
-}
-
-/*
- * Envelope Output (dB)
- */
-REALTYPE Envelope::envout_dB()
-{
- REALTYPE out;
- if(linearenvelope != 0)
- return envout();
-
- if((currentpoint == 1) && ((keyreleased == 0) || (forcedrelase == 0))) { //first point is always lineary interpolated
- REALTYPE v1 = dB2rap(envval[0]);
- REALTYPE v2 = dB2rap(envval[1]);
- out = v1 + (v2 - v1) * t;
-
- t += inct;
- if(t >= 1.0) {
- t = 0.0;
- inct = envdt[2];
- currentpoint++;
- out = v2;
- }
-
- if(out > 0.001)
- envoutval = rap2dB(out);
- else
- envoutval = MIN_ENVELOPE_DB;
- }
- else
- out = dB2rap(envout());
-
- return out;
-}
-
-int Envelope::finished()
-{
- return envfinish;
-}
-
diff --git a/plugins/zynaddsubfx/src/Synth/Envelope.h b/plugins/zynaddsubfx/src/Synth/Envelope.h
deleted file mode 100644
index dc3b6f2..0000000
--- a/plugins/zynaddsubfx/src/Synth/Envelope.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Envelope.h - Envelope implementation
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef ENVELOPE_H
-#define ENVELOPE_H
-
-#include "../globals.h"
-#include "../Params/EnvelopeParams.h"
-
-/**Implementation of a general Envelope*/
-class Envelope
-{
- public:
-
- /**Constructor*/
- Envelope(class EnvelopeParams *envpars, REALTYPE basefreq);
- /**Destructor*/
- ~Envelope();
- void relasekey();
- REALTYPE envout();
- REALTYPE envout_dB();
- /**Determines the status of the Envelope
- *
- *\todo see if this can be changed to use a boolean
- * @return returns 1 if the envelope is finished*/
- int finished();
- private:
- int envpoints;
- int envsustain; //"-1" means disabled
- REALTYPE envdt[MAX_ENVELOPE_POINTS]; //millisecons
- REALTYPE envval[MAX_ENVELOPE_POINTS]; // [0.0 .. 1.0]
- REALTYPE envstretch;
- int linearenvelope;
-
- int currentpoint; //current envelope point (starts from 1)
- int forcedrelase;
- char keyreleased; //if the key was released /** \todo figure out WHY IS THIS A CHAR*/
- char envfinish; /** \todo figure out WHY IS THIS A CHAR*/
- REALTYPE t; // the time from the last point
- REALTYPE inct; // the time increment
- REALTYPE envoutval; //used to do the forced release
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Synth/LFO.cpp b/plugins/zynaddsubfx/src/Synth/LFO.cpp
deleted file mode 100644
index 6dcf47f..0000000
--- a/plugins/zynaddsubfx/src/Synth/LFO.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- LFO.cpp - LFO implementation
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-
-#include "LFO.h"
-
-
-LFO::LFO(LFOParams *lfopars, REALTYPE basefreq)
-{
- if(lfopars->Pstretch == 0)
- lfopars->Pstretch = 1;
- REALTYPE lfostretch = pow(basefreq / 440.0,
- (lfopars->Pstretch - 64.0) / 63.0); //max 2x/octave
-
- REALTYPE lfofreq =
- (pow(2, lfopars->Pfreq * 10.0) - 1.0) / 12.0 * lfostretch;
- incx = fabs(lfofreq) * (REALTYPE)SOUND_BUFFER_SIZE / (REALTYPE)SAMPLE_RATE;
-
- if(lfopars->Pcontinous == 0) {
- if(lfopars->Pstartphase == 0)
- x = RND;
- else
- x = fmod((lfopars->Pstartphase - 64.0) / 127.0 + 1.0, 1.0);
- }
- else {
- REALTYPE tmp = fmod(lfopars->time * incx, 1.0);
- x = fmod((lfopars->Pstartphase - 64.0) / 127.0 + 1.0 + tmp, 1.0);
- }
-
- //Limit the Frequency(or else...)
- if(incx > 0.49999999)
- incx = 0.499999999;
-
-
- lfornd = lfopars->Prandomness / 127.0;
- if(lfornd < 0.0)
- lfornd = 0.0;
- else
- if(lfornd > 1.0)
- lfornd = 1.0;
-
-// lfofreqrnd=pow(lfopars->Pfreqrand/127.0,2.0)*2.0*4.0;
- lfofreqrnd = pow(lfopars->Pfreqrand / 127.0, 2.0) * 4.0;
-
- switch(lfopars->fel) {
- case 1:
- lfointensity = lfopars->Pintensity / 127.0;
- break;
- case 2:
- lfointensity = lfopars->Pintensity / 127.0 * 4.0;
- break; //in octave
- default:
- lfointensity = pow(2, lfopars->Pintensity / 127.0 * 11.0) - 1.0; //in centi
- x -= 0.25; //chance the starting phase
- break;
- }
-
- amp1 = (1 - lfornd) + lfornd * RND;
- amp2 = (1 - lfornd) + lfornd * RND;
- lfotype = lfopars->PLFOtype;
- lfodelay = lfopars->Pdelay / 127.0 * 4.0; //0..4 sec
- incrnd = nextincrnd = 1.0;
- freqrndenabled = (lfopars->Pfreqrand != 0);
- computenextincrnd();
- computenextincrnd(); //twice because I want incrnd & nextincrnd to be random
-}
-
-LFO::~LFO()
-{}
-
-/*
- * LFO out
- */
-REALTYPE LFO::lfoout()
-{
- REALTYPE out;
- switch(lfotype) {
- case 1: //LFO_TRIANGLE
- if((x >= 0.0) && (x < 0.25))
- out = 4.0 * x;
- else
- if((x > 0.25) && (x < 0.75))
- out = 2 - 4 * x;
- else
- out = 4.0 * x - 4.0;
- break;
- case 2: //LFO_SQUARE
- if(x < 0.5)
- out = -1;
- else
- out = 1;
- break;
- case 3: //LFO_RAMPUP
- out = (x - 0.5) * 2.0;
- break;
- case 4: //LFO_RAMPDOWN
- out = (0.5 - x) * 2.0;
- break;
- case 5: //LFO_EXP_DOWN 1
- out = pow(0.05, x) * 2.0 - 1.0;
- break;
- case 6: //LFO_EXP_DOWN 2
- out = pow(0.001, x) * 2.0 - 1.0;
- break;
- default:
- out = cos(x * 2.0 * PI); //LFO_SINE
- }
-
-
- if((lfotype == 0) || (lfotype == 1))
- out *= lfointensity * (amp1 + x * (amp2 - amp1));
- else
- out *= lfointensity * amp2;
- if(lfodelay < 0.00001) {
- if(freqrndenabled == 0)
- x += incx;
- else {
- float tmp = (incrnd * (1.0 - x) + nextincrnd * x);
- if(tmp > 1.0)
- tmp = 1.0;
- else
- if(tmp < 0.0)
- tmp = 0.0;
- x += incx * tmp;
- }
- if(x >= 1) {
- x = fmod(x, 1.0);
- amp1 = amp2;
- amp2 = (1 - lfornd) + lfornd * RND;
-
- computenextincrnd();
- }
- }
- else
- lfodelay -= (REALTYPE)SOUND_BUFFER_SIZE / (REALTYPE)SAMPLE_RATE;
- return out;
-}
-
-/*
- * LFO out (for amplitude)
- */
-REALTYPE LFO::amplfoout()
-{
- REALTYPE out;
- out = 1.0 - lfointensity + lfoout();
- if(out < -1.0)
- out = -1.0;
- else
- if(out > 1.0)
- out = 1.0;
- return out;
-}
-
-
-void LFO::computenextincrnd()
-{
- if(freqrndenabled == 0)
- return;
- incrnd = nextincrnd;
- nextincrnd = pow(0.5, lfofreqrnd) + RND * (pow(2.0, lfofreqrnd) - 1.0);
-}
-
diff --git a/plugins/zynaddsubfx/src/Synth/LFO.h b/plugins/zynaddsubfx/src/Synth/LFO.h
deleted file mode 100644
index 9dd984b..0000000
--- a/plugins/zynaddsubfx/src/Synth/LFO.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- LFO.h - LFO implementation
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef LFO_H
-#define LFO_H
-
-#include "../globals.h"
-#include "../Params/LFOParams.h"
-
-/**Class for creating Low Frequency Ocillators*/
-class LFO
-{
- public:
- /**Constructor
- *
- * @param lfopars pointer to a LFOParams object
- * @param basefreq base frequency of LFO
- */
- LFO(LFOParams *lfopars, REALTYPE basefreq);
- /**Deconstructor*/
- ~LFO();
- REALTYPE lfoout();
- REALTYPE amplfoout();
- private:
- REALTYPE x;
- REALTYPE incx, incrnd, nextincrnd;
- REALTYPE amp1, amp2; // used for randomness
- REALTYPE lfointensity;
- REALTYPE lfornd, lfofreqrnd;
- REALTYPE lfodelay;
- /**\todo see if an enum would be better here*/
- char lfotype;
- int freqrndenabled;
-
-
- void computenextincrnd();
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Synth/OscilGen.cpp b/plugins/zynaddsubfx/src/Synth/OscilGen.cpp
deleted file mode 100644
index 47a1ec2..0000000
--- a/plugins/zynaddsubfx/src/Synth/OscilGen.cpp
+++ /dev/null
@@ -1,1475 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- OscilGen.cpp - Waveform generator for ADnote
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <stdlib.h>
-#include <math.h>
-#include <stdio.h>
-
-#include "OscilGen.h"
-#include "../Effects/Distorsion.h"
-
-OscilGen::OscilGen(FFTwrapper *fft_, Resonance *res_):Presets()
-{
- setpresettype("Poscilgen");
- fft = fft_;
- res = res_;
-
- tmpsmps = new REALTYPE[OSCIL_SIZE];
- newFFTFREQS(&outoscilFFTfreqs, OSCIL_SIZE / 2);
- newFFTFREQS(&oscilFFTfreqs, OSCIL_SIZE / 2);
- newFFTFREQS(&basefuncFFTfreqs, OSCIL_SIZE / 2);
-
- randseed = 1;
- ADvsPAD = false;
-
- defaults();
-}
-
-OscilGen::~OscilGen()
-{
- delete[] tmpsmps;
- deleteFFTFREQS(&outoscilFFTfreqs);
- deleteFFTFREQS(&basefuncFFTfreqs);
- deleteFFTFREQS(&oscilFFTfreqs);
-}
-
-
-void OscilGen::defaults()
-{
- oldbasefunc = 0;
- oldbasepar = 64;
- oldhmagtype = 0;
- oldwaveshapingfunction = 0;
- oldwaveshaping = 64;
- oldbasefuncmodulation = 0;
- oldharmonicshift = 0;
- oldbasefuncmodulationpar1 = 0;
- oldbasefuncmodulationpar2 = 0;
- oldbasefuncmodulationpar3 = 0;
- oldmodulation = 0;
- oldmodulationpar1 = 0;
- oldmodulationpar2 = 0;
- oldmodulationpar3 = 0;
-
- for(int i = 0; i < MAX_AD_HARMONICS; i++) {
- hmag[i] = 0.0;
- hphase[i] = 0.0;
- Phmag[i] = 64;
- Phphase[i] = 64;
- }
- Phmag[0] = 127;
- Phmagtype = 0;
- if(ADvsPAD)
- Prand = 127; //max phase randomness (usefull if the oscil will be imported to a ADsynth from a PADsynth
- else
- Prand = 64; //no randomness
-
- Pcurrentbasefunc = 0;
- Pbasefuncpar = 64;
-
- Pbasefuncmodulation = 0;
- Pbasefuncmodulationpar1 = 64;
- Pbasefuncmodulationpar2 = 64;
- Pbasefuncmodulationpar3 = 32;
-
- Pmodulation = 0;
- Pmodulationpar1 = 64;
- Pmodulationpar2 = 64;
- Pmodulationpar3 = 32;
-
- Pwaveshapingfunction = 0;
- Pwaveshaping = 64;
- Pfiltertype = 0;
- Pfilterpar1 = 64;
- Pfilterpar2 = 64;
- Pfilterbeforews = 0;
- Psatype = 0;
- Psapar = 64;
-
- Pamprandpower = 64;
- Pamprandtype = 0;
-
- Pharmonicshift = 0;
- Pharmonicshiftfirst = 0;
-
- Padaptiveharmonics = 0;
- Padaptiveharmonicspower = 100;
- Padaptiveharmonicsbasefreq = 128;
- Padaptiveharmonicspar = 50;
-
- for(int i = 0; i < OSCIL_SIZE / 2; i++) {
- oscilFFTfreqs.s[i] = 0.0;
- oscilFFTfreqs.c[i] = 0.0;
- basefuncFFTfreqs.s[i] = 0.0;
- basefuncFFTfreqs.c[i] = 0.0;
- }
- oscilprepared = 0;
- oldfilterpars = 0;
- oldsapars = 0;
- prepare();
-}
-
-void OscilGen::convert2sine(int magtype)
-{
- REALTYPE mag[MAX_AD_HARMONICS], phase[MAX_AD_HARMONICS];
- REALTYPE oscil[OSCIL_SIZE];
- FFTFREQS freqs;
- newFFTFREQS(&freqs, OSCIL_SIZE / 2);
-
- get(oscil, -1.0);
- FFTwrapper *fft = new FFTwrapper(OSCIL_SIZE);
- fft->smps2freqs(oscil, freqs);
- delete (fft);
-
- REALTYPE max = 0.0;
-
- mag[0] = 0;
- phase[0] = 0;
- for(int i = 0; i < MAX_AD_HARMONICS; i++) {
- mag[i] = sqrt(pow(freqs.s[i + 1], 2) + pow(freqs.c[i + 1], 2.0));
- phase[i] = atan2(freqs.c[i + 1], freqs.s[i + 1]);
- if(max < mag[i])
- max = mag[i];
- }
- if(max < 0.00001)
- max = 1.0;
-
- defaults();
-
- for(int i = 0; i < MAX_AD_HARMONICS - 1; i++) {
- REALTYPE newmag = mag[i] / max;
- REALTYPE newphase = phase[i];
-
- Phmag[i] = (int) ((newmag) * 64.0) + 64;
-
- Phphase[i] = 64 - (int) (64.0 * newphase / PI);
- if(Phphase[i] > 127)
- Phphase[i] = 127;
-
- if(Phmag[i] == 64)
- Phphase[i] = 64;
- }
- deleteFFTFREQS(&freqs);
- prepare();
-}
-
-/*
- * Base Functions - START
- */
-REALTYPE OscilGen::basefunc_pulse(REALTYPE x, REALTYPE a)
-{
- return (fmod(x, 1.0) < a) ? -1.0 : 1.0;
-}
-
-REALTYPE OscilGen::basefunc_saw(REALTYPE x, REALTYPE a)
-{
- if(a < 0.00001)
- a = 0.00001;
- else
- if(a > 0.99999)
- a = 0.99999;
- x = fmod(x, 1);
- if(x < a)
- return x / a * 2.0 - 1.0;
- else
- return (1.0 - x) / (1.0 - a) * 2.0 - 1.0;
-}
-
-REALTYPE OscilGen::basefunc_triangle(REALTYPE x, REALTYPE a)
-{
- x = fmod(x + 0.25, 1);
- a = 1 - a;
- if(a < 0.00001)
- a = 0.00001;
- if(x < 0.5)
- x = x * 4 - 1.0;
- else
- x = (1.0 - x) * 4 - 1.0;
- x /= -a;
- if(x < -1.0)
- x = -1.0;
- if(x > 1.0)
- x = 1.0;
- return x;
-}
-
-REALTYPE OscilGen::basefunc_power(REALTYPE x, REALTYPE a)
-{
- x = fmod(x, 1);
- if(a < 0.00001)
- a = 0.00001;
- else
- if(a > 0.99999)
- a = 0.99999;
- return pow(x, exp((a - 0.5) * 10.0)) * 2.0 - 1.0;
-}
-
-REALTYPE OscilGen::basefunc_gauss(REALTYPE x, REALTYPE a)
-{
- x = fmod(x, 1) * 2.0 - 1.0;
- if(a < 0.00001)
- a = 0.00001;
- return exp(-x * x * (exp(a * 8) + 5.0)) * 2.0 - 1.0;
-}
-
-REALTYPE OscilGen::basefunc_diode(REALTYPE x, REALTYPE a)
-{
- if(a < 0.00001)
- a = 0.00001;
- else
- if(a > 0.99999)
- a = 0.99999;
- a = a * 2.0 - 1.0;
- x = cos((x + 0.5) * 2.0 * PI) - a;
- if(x < 0.0)
- x = 0.0;
- return x / (1.0 - a) * 2 - 1.0;
-}
-
-REALTYPE OscilGen::basefunc_abssine(REALTYPE x, REALTYPE a)
-{
- x = fmod(x, 1);
- if(a < 0.00001)
- a = 0.00001;
- else
- if(a > 0.99999)
- a = 0.99999;
- return sin(pow(x, exp((a - 0.5) * 5.0)) * PI) * 2.0 - 1.0;
-}
-
-REALTYPE OscilGen::basefunc_pulsesine(REALTYPE x, REALTYPE a)
-{
- if(a < 0.00001)
- a = 0.00001;
- x = (fmod(x, 1) - 0.5) * exp((a - 0.5) * log(128));
- if(x < -0.5)
- x = -0.5;
- else
- if(x > 0.5)
- x = 0.5;
- x = sin(x * PI * 2.0);
- return x;
-}
-
-REALTYPE OscilGen::basefunc_stretchsine(REALTYPE x, REALTYPE a)
-{
- x = fmod(x + 0.5, 1) * 2.0 - 1.0;
- a = (a - 0.5) * 4;
- if(a > 0.0)
- a *= 2;
- a = pow(3.0, a);
- REALTYPE b = pow(fabs(x), a);
- if(x < 0)
- b = -b;
- return -sin(b * PI);
-}
-
-REALTYPE OscilGen::basefunc_chirp(REALTYPE x, REALTYPE a)
-{
- x = fmod(x, 1.0) * 2.0 * PI;
- a = (a - 0.5) * 4;
- if(a < 0.0)
- a *= 2.0;
- a = pow(3.0, a);
- return sin(x / 2.0) * sin(a * x * x);
-}
-
-REALTYPE OscilGen::basefunc_absstretchsine(REALTYPE x, REALTYPE a)
-{
- x = fmod(x + 0.5, 1) * 2.0 - 1.0;
- a = (a - 0.5) * 9;
- a = pow(3.0, a);
- REALTYPE b = pow(fabs(x), a);
- if(x < 0)
- b = -b;
- return -pow(sin(b * PI), 2);
-}
-
-REALTYPE OscilGen::basefunc_chebyshev(REALTYPE x, REALTYPE a)
-{
- a = a * a * a * 30.0 + 1.0;
- return cos(acos(x * 2.0 - 1.0) * a);
-}
-
-REALTYPE OscilGen::basefunc_sqr(REALTYPE x, REALTYPE a)
-{
- a = a * a * a * a * 160.0 + 0.001;
- return -atan(sin(x * 2.0 * PI) * a);
-}
-/*
- * Base Functions - END
- */
-
-
-/*
- * Get the base function
- */
-void OscilGen::getbasefunction(REALTYPE *smps)
-{
- int i;
- REALTYPE par = (Pbasefuncpar + 0.5) / 128.0;
- if(Pbasefuncpar == 64)
- par = 0.5;
-
- REALTYPE basefuncmodulationpar1 = Pbasefuncmodulationpar1 / 127.0,
- basefuncmodulationpar2 = Pbasefuncmodulationpar2 / 127.0,
- basefuncmodulationpar3 = Pbasefuncmodulationpar3 / 127.0;
-
- switch(Pbasefuncmodulation) {
- case 1:
- basefuncmodulationpar1 =
- (pow(2, basefuncmodulationpar1 * 5.0) - 1.0) / 10.0;
- basefuncmodulationpar3 =
- floor((pow(2, basefuncmodulationpar3 * 5.0) - 1.0));
- if(basefuncmodulationpar3 < 0.9999)
- basefuncmodulationpar3 = -1.0;
- break;
- case 2:
- basefuncmodulationpar1 =
- (pow(2, basefuncmodulationpar1 * 5.0) - 1.0) / 10.0;
- basefuncmodulationpar3 = 1.0
- + floor((pow(2, basefuncmodulationpar3
- * 5.0) - 1.0));
- break;
- case 3:
- basefuncmodulationpar1 =
- (pow(2, basefuncmodulationpar1 * 7.0) - 1.0) / 10.0;
- basefuncmodulationpar3 = 0.01
- + (pow(2, basefuncmodulationpar3
- * 16.0) - 1.0) / 10.0;
- break;
- }
-
-// printf("%.5f %.5f\n",basefuncmodulationpar1,basefuncmodulationpar3);
-
- for(i = 0; i < OSCIL_SIZE; i++) {
- REALTYPE t = i * 1.0 / OSCIL_SIZE;
-
- switch(Pbasefuncmodulation) {
- case 1:
- t = t * basefuncmodulationpar3 + sin(
- (t
- + basefuncmodulationpar2) * 2.0 * PI) * basefuncmodulationpar1; //rev
- break;
- case 2:
- t = t + sin(
- (t * basefuncmodulationpar3
- + basefuncmodulationpar2) * 2.0 * PI) * basefuncmodulationpar1; //sine
- break;
- case 3:
- t = t + pow((1.0 - cos(
- (t + basefuncmodulationpar2) * 2.0 * PI)) * 0.5,
- basefuncmodulationpar3) * basefuncmodulationpar1; //power
- break;
- }
-
- t = t - floor(t);
-
- switch(Pcurrentbasefunc) {
- case 1:
- smps[i] = basefunc_triangle(t, par);
- break;
- case 2:
- smps[i] = basefunc_pulse(t, par);
- break;
- case 3:
- smps[i] = basefunc_saw(t, par);
- break;
- case 4:
- smps[i] = basefunc_power(t, par);
- break;
- case 5:
- smps[i] = basefunc_gauss(t, par);
- break;
- case 6:
- smps[i] = basefunc_diode(t, par);
- break;
- case 7:
- smps[i] = basefunc_abssine(t, par);
- break;
- case 8:
- smps[i] = basefunc_pulsesine(t, par);
- break;
- case 9:
- smps[i] = basefunc_stretchsine(t, par);
- break;
- case 10:
- smps[i] = basefunc_chirp(t, par);
- break;
- case 11:
- smps[i] = basefunc_absstretchsine(t, par);
- break;
- case 12:
- smps[i] = basefunc_chebyshev(t, par);
- break;
- case 13:
- smps[i] = basefunc_sqr(t, par);
- break;
- default:
- smps[i] = -sin(2.0 * PI * i / OSCIL_SIZE);
- }
- }
-}
-
-/*
- * Filter the oscillator
- */
-void OscilGen::oscilfilter()
-{
- if(Pfiltertype == 0)
- return;
- REALTYPE par = 1.0 - Pfilterpar1 / 128.0;
- REALTYPE par2 = Pfilterpar2 / 127.0;
- REALTYPE max = 0.0, tmp = 0.0, p2, x;
- for(int i = 1; i < OSCIL_SIZE / 2; i++) {
- REALTYPE gain = 1.0;
- switch(Pfiltertype) {
- case 1:
- gain = pow(1.0 - par * par * par * 0.99, i); //lp
- tmp = par2 * par2 * par2 * par2 * 0.5 + 0.0001;
- if(gain < tmp)
- gain = pow(gain, 10.0) / pow(tmp, 9.0);
- break;
- case 2:
- gain = 1.0 - pow(1.0 - par * par, i + 1); //hp1
- gain = pow(gain, par2 * 2.0 + 0.1);
- break;
- case 3:
- if(par < 0.2)
- par = par * 0.25 + 0.15;
- gain = 1.0 - pow(1.0 - par * par * 0.999 + 0.001,
- i * 0.05 * i + 1.0); //hp1b
- tmp = pow(5.0, par2 * 2.0);
- gain = pow(gain, tmp);
- break;
- case 4:
- gain = i + 1 - pow(2, (1.0 - par) * 7.5); //bp1
- gain = 1.0 / (1.0 + gain * gain / (i + 1.0));
- tmp = pow(5.0, par2 * 2.0);
- gain = pow(gain, tmp);
- if(gain < 1e-5)
- gain = 1e-5;
- break;
- case 5:
- gain = i + 1 - pow(2, (1.0 - par) * 7.5); //bs1
- gain = pow(atan(gain / (i / 10.0 + 1)) / 1.57, 6);
- gain = pow(gain, par2 * par2 * 3.9 + 0.1);
- break;
- case 6:
- tmp = pow(par2, 0.33);
- gain =
- (i + 1 >
- pow(2, (1.0 - par) * 10) ? 0.0 : 1.0) * par2 + (1.0 - par2); //lp2
- break;
- case 7:
- tmp = pow(par2, 0.33);
- //tmp=1.0-(1.0-par2)*(1.0-par2);
- gain =
- (i + 1 >
- pow(2, (1.0 - par) * 7) ? 1.0 : 0.0) * par2 + (1.0 - par2); //hp2
- if(Pfilterpar1 == 0)
- gain = 1.0;
- break;
- case 8:
- tmp = pow(par2, 0.33);
- //tmp=1.0-(1.0-par2)*(1.0-par2);
- gain =
- (fabs(pow(2,
- (1.0
- - par)
- * 7) - i) > i / 2 + 1 ? 0.0 : 1.0) * par2 + (1.0 - par2); //bp2
- break;
- case 9:
- tmp = pow(par2, 0.33);
- gain =
- (fabs(pow(2,
- (1.0
- - par)
- * 7) - i) < i / 2 + 1 ? 0.0 : 1.0) * par2 + (1.0 - par2); //bs2
- break;
- case 10:
- tmp = pow(5.0, par2 * 2.0 - 1.0);
- tmp = pow(i / 32.0, tmp) * 32.0;
- if(Pfilterpar2 == 64)
- tmp = i;
- gain = cos(par * par * PI / 2.0 * tmp); //cos
- gain *= gain;
- break;
- case 11:
- tmp = pow(5.0, par2 * 2.0 - 1.0);
- tmp = pow(i / 32.0, tmp) * 32.0;
- if(Pfilterpar2 == 64)
- tmp = i;
- gain = sin(par * par * PI / 2.0 * tmp); //sin
- gain *= gain;
- break;
- case 12:
- p2 = 1.0 - par + 0.2;
- x = i / (64.0 * p2 * p2);
- if(x < 0.0)
- x = 0.0;
- else
- if(x > 1.0)
- x = 1.0;
- tmp = pow(1.0 - par2, 2.0);
- gain = cos(x * PI) * (1.0 - tmp) + 1.01 + tmp; //low shelf
- break;
- case 13:
- tmp = (int) (pow(2.0, (1.0 - par) * 7.2));
- gain = 1.0;
- if(i == (int) (tmp))
- gain = pow(2.0, par2 * par2 * 8.0);
- break;
- }
-
-
- oscilFFTfreqs.s[i] *= gain;
- oscilFFTfreqs.c[i] *= gain;
- REALTYPE tmp = oscilFFTfreqs.s[i] * oscilFFTfreqs.s[i]
- + oscilFFTfreqs.c[i] * oscilFFTfreqs.c[i];
- if(max < tmp)
- max = tmp;
- }
-
- max = sqrt(max);
- if(max < 1e-10)
- max = 1.0;
- REALTYPE imax = 1.0 / max;
- for(int i = 1; i < OSCIL_SIZE / 2; i++) {
- oscilFFTfreqs.s[i] *= imax;
- oscilFFTfreqs.c[i] *= imax;
- }
-}
-
-/*
- * Change the base function
- */
-void OscilGen::changebasefunction()
-{
- if(Pcurrentbasefunc != 0) {
- getbasefunction(tmpsmps);
- fft->smps2freqs(tmpsmps, basefuncFFTfreqs);
- basefuncFFTfreqs.c[0] = 0.0;
- }
- else {
- for(int i = 0; i < OSCIL_SIZE / 2; i++) {
- basefuncFFTfreqs.s[i] = 0.0;
- basefuncFFTfreqs.c[i] = 0.0;
- }
- //in this case basefuncFFTfreqs_ are not used
- }
- oscilprepared = 0;
- oldbasefunc = Pcurrentbasefunc;
- oldbasepar = Pbasefuncpar;
- oldbasefuncmodulation = Pbasefuncmodulation;
- oldbasefuncmodulationpar1 = Pbasefuncmodulationpar1;
- oldbasefuncmodulationpar2 = Pbasefuncmodulationpar2;
- oldbasefuncmodulationpar3 = Pbasefuncmodulationpar3;
-}
-
-/*
- * Waveshape
- */
-void OscilGen::waveshape()
-{
- int i;
-
- oldwaveshapingfunction = Pwaveshapingfunction;
- oldwaveshaping = Pwaveshaping;
- if(Pwaveshapingfunction == 0)
- return;
-
- oscilFFTfreqs.c[0] = 0.0; //remove the DC
- //reduce the amplitude of the freqs near the nyquist
- for(i = 1; i < OSCIL_SIZE / 8; i++) {
- REALTYPE tmp = i / (OSCIL_SIZE / 8.0);
- oscilFFTfreqs.s[OSCIL_SIZE / 2 - i] *= tmp;
- oscilFFTfreqs.c[OSCIL_SIZE / 2 - i] *= tmp;
- }
- fft->freqs2smps(oscilFFTfreqs, tmpsmps);
-
- //Normalize
- REALTYPE max = 0.0;
- for(i = 0; i < OSCIL_SIZE; i++)
- if(max < fabs(tmpsmps[i]))
- max = fabs(tmpsmps[i]);
- if(max < 0.00001)
- max = 1.0;
- max = 1.0 / max;
- for(i = 0; i < OSCIL_SIZE; i++)
- tmpsmps[i] *= max;
-
- //Do the waveshaping
- waveshapesmps(OSCIL_SIZE, tmpsmps, Pwaveshapingfunction, Pwaveshaping);
-
- fft->smps2freqs(tmpsmps, oscilFFTfreqs); //perform FFT
-}
-
-
-/*
- * Do the Frequency Modulation of the Oscil
- */
-void OscilGen::modulation()
-{
- int i;
-
- oldmodulation = Pmodulation;
- oldmodulationpar1 = Pmodulationpar1;
- oldmodulationpar2 = Pmodulationpar2;
- oldmodulationpar3 = Pmodulationpar3;
- if(Pmodulation == 0)
- return;
-
-
- REALTYPE modulationpar1 = Pmodulationpar1 / 127.0,
- modulationpar2 = 0.5 - Pmodulationpar2 / 127.0,
- modulationpar3 = Pmodulationpar3 / 127.0;
-
- switch(Pmodulation) {
- case 1:
- modulationpar1 = (pow(2, modulationpar1 * 7.0) - 1.0) / 100.0;
- modulationpar3 = floor((pow(2, modulationpar3 * 5.0) - 1.0));
- if(modulationpar3 < 0.9999)
- modulationpar3 = -1.0;
- break;
- case 2:
- modulationpar1 = (pow(2, modulationpar1 * 7.0) - 1.0) / 100.0;
- modulationpar3 = 1.0 + floor((pow(2, modulationpar3 * 5.0) - 1.0));
- break;
- case 3:
- modulationpar1 = (pow(2, modulationpar1 * 9.0) - 1.0) / 100.0;
- modulationpar3 = 0.01 + (pow(2, modulationpar3 * 16.0) - 1.0) / 10.0;
- break;
- }
-
- oscilFFTfreqs.c[0] = 0.0; //remove the DC
- //reduce the amplitude of the freqs near the nyquist
- for(i = 1; i < OSCIL_SIZE / 8; i++) {
- REALTYPE tmp = i / (OSCIL_SIZE / 8.0);
- oscilFFTfreqs.s[OSCIL_SIZE / 2 - i] *= tmp;
- oscilFFTfreqs.c[OSCIL_SIZE / 2 - i] *= tmp;
- }
- fft->freqs2smps(oscilFFTfreqs, tmpsmps);
- int extra_points = 2;
- REALTYPE *in = new REALTYPE[OSCIL_SIZE + extra_points];
-
- //Normalize
- REALTYPE max = 0.0;
- for(i = 0; i < OSCIL_SIZE; i++)
- if(max < fabs(tmpsmps[i]))
- max = fabs(tmpsmps[i]);
- if(max < 0.00001)
- max = 1.0;
- max = 1.0 / max;
- for(i = 0; i < OSCIL_SIZE; i++)
- in[i] = tmpsmps[i] * max;
- for(i = 0; i < extra_points; i++)
- in[i + OSCIL_SIZE] = tmpsmps[i] * max;
-
- //Do the modulation
- for(i = 0; i < OSCIL_SIZE; i++) {
- REALTYPE t = i * 1.0 / OSCIL_SIZE;
-
- switch(Pmodulation) {
- case 1:
- t = t * modulationpar3
- + sin((t + modulationpar2) * 2.0 * PI) * modulationpar1; //rev
- break;
- case 2:
- t = t
- + sin((t * modulationpar3
- + modulationpar2) * 2.0 * PI) * modulationpar1; //sine
- break;
- case 3:
- t = t + pow((1.0 - cos(
- (t + modulationpar2) * 2.0 * PI)) * 0.5,
- modulationpar3) * modulationpar1; //power
- break;
- }
-
- t = (t - floor(t)) * OSCIL_SIZE;
-
- int poshi = (int) t;
- REALTYPE poslo = t - floor(t);
-
- tmpsmps[i] = in[poshi] * (1.0 - poslo) + in[poshi + 1] * poslo;
- }
-
- delete [] in;
- fft->smps2freqs(tmpsmps, oscilFFTfreqs); //perform FFT
-}
-
-
-
-/*
- * Adjust the spectrum
- */
-void OscilGen::spectrumadjust()
-{
- if(Psatype == 0)
- return;
- REALTYPE par = Psapar / 127.0;
- switch(Psatype) {
- case 1:
- par = 1.0 - par * 2.0;
- if(par >= 0.0)
- par = pow(5.0, par);
- else
- par = pow(8.0, par);
- break;
- case 2:
- par = pow(10.0, (1.0 - par) * 3.0) * 0.25;
- break;
- case 3:
- par = pow(10.0, (1.0 - par) * 3.0) * 0.25;
- break;
- }
-
-
- REALTYPE max = 0.0;
- for(int i = 0; i < OSCIL_SIZE / 2; i++) {
- REALTYPE tmp = pow(oscilFFTfreqs.c[i], 2) + pow(oscilFFTfreqs.s[i], 2.0);
- if(max < tmp)
- max = tmp;
- }
- max = sqrt(max) / OSCIL_SIZE * 2.0;
- if(max < 1e-8)
- max = 1.0;
-
-
- for(int i = 0; i < OSCIL_SIZE / 2; i++) {
- REALTYPE mag =
- sqrt(pow(oscilFFTfreqs.s[i],
- 2) + pow(oscilFFTfreqs.c[i], 2.0)) / max;
- REALTYPE phase = atan2(oscilFFTfreqs.s[i], oscilFFTfreqs.c[i]);
-
- switch(Psatype) {
- case 1:
- mag = pow(mag, par);
- break;
- case 2:
- if(mag < par)
- mag = 0.0;
- break;
- case 3:
- mag /= par;
- if(mag > 1.0)
- mag = 1.0;
- break;
- }
- oscilFFTfreqs.c[i] = mag * cos(phase);
- oscilFFTfreqs.s[i] = mag * sin(phase);
- }
-}
-
-void OscilGen::shiftharmonics()
-{
- if(Pharmonicshift == 0)
- return;
-
- REALTYPE hc, hs;
- int harmonicshift = -Pharmonicshift;
-
- if(harmonicshift > 0) {
- for(int i = OSCIL_SIZE / 2 - 2; i >= 0; i--) {
- int oldh = i - harmonicshift;
- if(oldh < 0) {
- hc = 0.0;
- hs = 0.0;
- }
- else {
- hc = oscilFFTfreqs.c[oldh + 1];
- hs = oscilFFTfreqs.s[oldh + 1];
- }
- oscilFFTfreqs.c[i + 1] = hc;
- oscilFFTfreqs.s[i + 1] = hs;
- }
- }
- else {
- for(int i = 0; i < OSCIL_SIZE / 2 - 1; i++) {
- int oldh = i + abs(harmonicshift);
- if(oldh >= (OSCIL_SIZE / 2 - 1)) {
- hc = 0.0;
- hs = 0.0;
- }
- else {
- hc = oscilFFTfreqs.c[oldh + 1];
- hs = oscilFFTfreqs.s[oldh + 1];
- if(fabs(hc) < 0.000001)
- hc = 0.0;
- if(fabs(hs) < 0.000001)
- hs = 0.0;
- }
-
- oscilFFTfreqs.c[i + 1] = hc;
- oscilFFTfreqs.s[i + 1] = hs;
- }
- }
-
- oscilFFTfreqs.c[0] = 0.0;
-}
-
-/*
- * Prepare the Oscillator
- */
-void OscilGen::prepare()
-{
- int i, j, k;
- REALTYPE a, b, c, d, hmagnew;
-
- if((oldbasepar != Pbasefuncpar) || (oldbasefunc != Pcurrentbasefunc)
- || (oldbasefuncmodulation != Pbasefuncmodulation)
- || (oldbasefuncmodulationpar1 != Pbasefuncmodulationpar1)
- || (oldbasefuncmodulationpar2 != Pbasefuncmodulationpar2)
- || (oldbasefuncmodulationpar3 != Pbasefuncmodulationpar3))
- changebasefunction();
-
- for(i = 0; i < MAX_AD_HARMONICS; i++)
- hphase[i] = (Phphase[i] - 64.0) / 64.0 * PI / (i + 1);
-
- for(i = 0; i < MAX_AD_HARMONICS; i++) {
- hmagnew = 1.0 - fabs(Phmag[i] / 64.0 - 1.0);
- switch(Phmagtype) {
- case 1:
- hmag[i] = exp(hmagnew * log(0.01));
- break;
- case 2:
- hmag[i] = exp(hmagnew * log(0.001));
- break;
- case 3:
- hmag[i] = exp(hmagnew * log(0.0001));
- break;
- case 4:
- hmag[i] = exp(hmagnew * log(0.00001));
- break;
- default:
- hmag[i] = 1.0 - hmagnew;
- break;
- }
-
- if(Phmag[i] < 64)
- hmag[i] = -hmag[i];
- }
-
- //remove the harmonics where Phmag[i]==64
- for(i = 0; i < MAX_AD_HARMONICS; i++)
- if(Phmag[i] == 64)
- hmag[i] = 0.0;
-
-
- for(i = 0; i < OSCIL_SIZE / 2; i++) {
- oscilFFTfreqs.c[i] = 0.0;
- oscilFFTfreqs.s[i] = 0.0;
- }
- if(Pcurrentbasefunc == 0) { //the sine case
- for(i = 0; i < MAX_AD_HARMONICS; i++) {
- oscilFFTfreqs.c[i + 1] = -hmag[i] * sin(hphase[i] * (i + 1)) / 2.0;
- oscilFFTfreqs.s[i + 1] = hmag[i] * cos(hphase[i] * (i + 1)) / 2.0;
- }
- }
- else {
- for(j = 0; j < MAX_AD_HARMONICS; j++) {
- if(Phmag[j] == 64)
- continue;
- for(i = 1; i < OSCIL_SIZE / 2; i++) {
- k = i * (j + 1);
- if(k >= OSCIL_SIZE / 2)
- break;
- a = basefuncFFTfreqs.c[i];
- b = basefuncFFTfreqs.s[i];
- c = hmag[j] * cos(hphase[j] * k);
- d = hmag[j] * sin(hphase[j] * k);
- oscilFFTfreqs.c[k] += a * c - b * d;
- oscilFFTfreqs.s[k] += a * d + b * c;
- }
- }
- }
-
- if(Pharmonicshiftfirst != 0)
- shiftharmonics();
-
-
-
- if(Pfilterbeforews == 0) {
- waveshape();
- oscilfilter();
- }
- else {
- oscilfilter();
- waveshape();
- }
-
- modulation();
- spectrumadjust();
- if(Pharmonicshiftfirst == 0)
- shiftharmonics();
-
- oscilFFTfreqs.c[0] = 0.0;
-
- oldhmagtype = Phmagtype;
- oldharmonicshift = Pharmonicshift + Pharmonicshiftfirst * 256;
-
- oscilprepared = 1;
-}
-
-void OscilGen::adaptiveharmonic(FFTFREQS f, REALTYPE freq)
-{
- if(Padaptiveharmonics == 0 /*||(freq<1.0)*/)
- return;
- if(freq < 1.0)
- freq = 440.0;
-
- FFTFREQS inf;
- newFFTFREQS(&inf, OSCIL_SIZE / 2);
- for(int i = 0; i < OSCIL_SIZE / 2; i++) {
- inf.s[i] = f.s[i];
- inf.c[i] = f.c[i];
- f.s[i] = 0.0;
- f.c[i] = 0.0;
- }
- inf.c[0] = 0.0;
- inf.s[0] = 0.0;
-
- REALTYPE hc = 0.0, hs = 0.0;
- REALTYPE basefreq = 30.0 * pow(10.0, Padaptiveharmonicsbasefreq / 128.0);
- REALTYPE power = (Padaptiveharmonicspower + 1.0) / 101.0;
-
- REALTYPE rap = freq / basefreq;
-
- rap = pow(rap, power);
-
- bool down = false;
- if(rap > 1.0) {
- rap = 1.0 / rap;
- down = true;
- }
-
- for(int i = 0; i < OSCIL_SIZE / 2 - 2; i++) {
- REALTYPE h = i * rap;
- int high = (int)(i * rap);
- REALTYPE low = fmod(h, 1.0);
-
- if(high >= (OSCIL_SIZE / 2 - 2))
- break;
- else {
- if(down) {
- f.c[high] += inf.c[i] * (1.0 - low);
- f.s[high] += inf.s[i] * (1.0 - low);
- f.c[high + 1] += inf.c[i] * low;
- f.s[high + 1] += inf.s[i] * low;
- }
- else {
- hc = inf.c[high] * (1.0 - low) + inf.c[high + 1] * low;
- hs = inf.s[high] * (1.0 - low) + inf.s[high + 1] * low;
- }
- if(fabs(hc) < 0.000001)
- hc = 0.0;
- if(fabs(hs) < 0.000001)
- hs = 0.0;
- }
-
- if(!down) {
- if(i == 0) { //corect the aplitude of the first harmonic
- hc *= rap;
- hs *= rap;
- }
- f.c[i] = hc;
- f.s[i] = hs;
- }
- }
-
- f.c[1] += f.c[0];
- f.s[1] += f.s[0];
- f.c[0] = 0.0;
- f.s[0] = 0.0;
- deleteFFTFREQS(&inf);
-}
-
-void OscilGen::adaptiveharmonicpostprocess(REALTYPE *f, int size)
-{
- if(Padaptiveharmonics <= 1)
- return;
- REALTYPE *inf = new REALTYPE[size];
- REALTYPE par = Padaptiveharmonicspar * 0.01;
- par = 1.0 - pow((1.0 - par), 1.5);
-
- for(int i = 0; i < size; i++) {
- inf[i] = f[i] * par;
- f[i] = f[i] * (1.0 - par);
- }
-
-
- if(Padaptiveharmonics == 2) { //2n+1
- for(int i = 0; i < size; i++)
- if((i % 2) == 0)
- f[i] += inf[i]; //i=0 pt prima armonica,etc.
- }
- else { //celelalte moduri
- int nh = (Padaptiveharmonics - 3) / 2 + 2;
- int sub_vs_add = (Padaptiveharmonics - 3) % 2;
- if(sub_vs_add == 0) {
- for(int i = 0; i < size; i++) {
- if(((i + 1) % nh) == 0)
- f[i] += inf[i];
- ;
- }
- }
- else {
- for(int i = 0; i < size / nh - 1; i++)
- f[(i + 1) * nh - 1] += inf[i];
- ;
- }
- }
-
- delete[] inf;
-}
-
-
-
-/*
- * Get the oscillator function
- */
-short int OscilGen::get(REALTYPE *smps, REALTYPE freqHz)
-{
- return this->get(smps, freqHz, 0);
-}
-
-void OscilGen::newrandseed(unsigned int randseed)
-{
- this->randseed = randseed;
-}
-
-/*
- * Get the oscillator function
- */
-short int OscilGen::get(REALTYPE *smps, REALTYPE freqHz, int resonance)
-{
- int i;
- int nyquist, outpos;
-
- if((oldbasepar != Pbasefuncpar) || (oldbasefunc != Pcurrentbasefunc)
- || (oldhmagtype != Phmagtype)
- || (oldwaveshaping != Pwaveshaping)
- || (oldwaveshapingfunction != Pwaveshapingfunction))
- oscilprepared = 0;
- if(oldfilterpars != Pfiltertype * 256 + Pfilterpar1 + Pfilterpar2 * 65536
- + Pfilterbeforews * 16777216) {
- oscilprepared = 0;
- oldfilterpars = Pfiltertype * 256 + Pfilterpar1 + Pfilterpar2 * 65536
- + Pfilterbeforews * 16777216;
- }
- if(oldsapars != Psatype * 256 + Psapar) {
- oscilprepared = 0;
- oldsapars = Psatype * 256 + Psapar;
- }
-
- if((oldbasefuncmodulation != Pbasefuncmodulation)
- || (oldbasefuncmodulationpar1 != Pbasefuncmodulationpar1)
- || (oldbasefuncmodulationpar2 != Pbasefuncmodulationpar2)
- || (oldbasefuncmodulationpar3 != Pbasefuncmodulationpar3))
- oscilprepared = 0;
-
- if((oldmodulation != Pmodulation)
- || (oldmodulationpar1 != Pmodulationpar1)
- || (oldmodulationpar2 != Pmodulationpar2)
- || (oldmodulationpar3 != Pmodulationpar3))
- oscilprepared = 0;
-
- if(oldharmonicshift != Pharmonicshift + Pharmonicshiftfirst * 256)
- oscilprepared = 0;
-
- if(oscilprepared != 1)
- prepare();
-
- outpos =
- (int)((RND * 2.0 - 1.0) * (REALTYPE) OSCIL_SIZE * (Prand - 64.0) / 64.0);
- outpos = (outpos + 2 * OSCIL_SIZE) % OSCIL_SIZE;
-
-
- for(i = 0; i < OSCIL_SIZE / 2; i++) {
- outoscilFFTfreqs.c[i] = 0.0;
- outoscilFFTfreqs.s[i] = 0.0;
- }
-
- nyquist = (int)(0.5 * SAMPLE_RATE / fabs(freqHz)) + 2;
- if(ADvsPAD)
- nyquist = (int)(OSCIL_SIZE / 2);
- if(nyquist > OSCIL_SIZE / 2)
- nyquist = OSCIL_SIZE / 2;
-
-
- int realnyquist = nyquist;
-
- if(Padaptiveharmonics != 0)
- nyquist = OSCIL_SIZE / 2;
- for(i = 1; i < nyquist - 1; i++) {
- outoscilFFTfreqs.c[i] = oscilFFTfreqs.c[i];
- outoscilFFTfreqs.s[i] = oscilFFTfreqs.s[i];
- }
-
- adaptiveharmonic(outoscilFFTfreqs, freqHz);
- adaptiveharmonicpostprocess(&outoscilFFTfreqs.c[1], OSCIL_SIZE / 2 - 1);
- adaptiveharmonicpostprocess(&outoscilFFTfreqs.s[1], OSCIL_SIZE / 2 - 1);
-
- nyquist = realnyquist;
- if(Padaptiveharmonics) { //do the antialiasing in the case of adaptive harmonics
- for(i = nyquist; i < OSCIL_SIZE / 2; i++) {
- outoscilFFTfreqs.s[i] = 0;
- outoscilFFTfreqs.c[i] = 0;
- }
- }
-
- // Randomness (each harmonic), the block type is computed
- // in ADnote by setting start position according to this setting
- if((Prand > 64) && (freqHz >= 0.0) && (!ADvsPAD)) {
- REALTYPE rnd, angle, a, b, c, d;
- rnd = PI * pow((Prand - 64.0) / 64.0, 2.0);
- for(i = 1; i < nyquist - 1; i++) { //to Nyquist only for AntiAliasing
- angle = rnd * i * RND;
- a = outoscilFFTfreqs.c[i];
- b = outoscilFFTfreqs.s[i];
- c = cos(angle);
- d = sin(angle);
- outoscilFFTfreqs.c[i] = a * c - b * d;
- outoscilFFTfreqs.s[i] = a * d + b * c;
- }
- }
-
- //Harmonic Amplitude Randomness
- if((freqHz > 0.1) && (!ADvsPAD)) {
- unsigned int realrnd = rand();
- srand(randseed);
- REALTYPE power = Pamprandpower / 127.0;
- REALTYPE normalize = 1.0 / (1.2 - power);
- switch(Pamprandtype) {
- case 1:
- power = power * 2.0 - 0.5;
- power = pow(15.0, power);
- for(i = 1; i < nyquist - 1; i++) {
- REALTYPE amp = pow(RND, power) * normalize;
- outoscilFFTfreqs.c[i] *= amp;
- outoscilFFTfreqs.s[i] *= amp;
- }
- break;
- case 2:
- power = power * 2.0 - 0.5;
- power = pow(15.0, power) * 2.0;
- REALTYPE rndfreq = 2 * PI * RND;
- for(i = 1; i < nyquist - 1; i++) {
- REALTYPE amp = pow(fabs(sin(i * rndfreq)), power) * normalize;
- outoscilFFTfreqs.c[i] *= amp;
- outoscilFFTfreqs.s[i] *= amp;
- }
- break;
- }
- srand(realrnd + 1);
- }
-
- if((freqHz > 0.1) && (resonance != 0))
- res->applyres(nyquist - 1, outoscilFFTfreqs, freqHz);
-
- //Full RMS normalize
- REALTYPE sum = 0;
- for(int j = 1; j < OSCIL_SIZE / 2; j++) {
- REALTYPE term = outoscilFFTfreqs.c[j] * outoscilFFTfreqs.c[j]
- + outoscilFFTfreqs.s[j] * outoscilFFTfreqs.s[j];
- sum += term;
- }
- if(sum < 0.000001)
- sum = 1.0;
- sum = 1.0 / sqrt(sum);
- for(int j = 1; j < OSCIL_SIZE / 2; j++) {
- outoscilFFTfreqs.c[j] *= sum;
- outoscilFFTfreqs.s[j] *= sum;
- }
-
-
- if((ADvsPAD) && (freqHz > 0.1)) //in this case the smps will contain the freqs
- for(i = 1; i < OSCIL_SIZE / 2; i++)
- smps[i - 1] = sqrt(outoscilFFTfreqs.c[i] * outoscilFFTfreqs.c[i]
- + outoscilFFTfreqs.s[i] * outoscilFFTfreqs.s[i]);
- else {
- fft->freqs2smps(outoscilFFTfreqs, smps);
- for(i = 0; i < OSCIL_SIZE; i++)
- smps[i] *= 0.25; //correct the amplitude
- }
-
- if(Prand < 64)
- return outpos;
- else
- return 0;
-}
-
-
-/*
- * Get the spectrum of the oscillator for the UI
- */
-void OscilGen::getspectrum(int n, REALTYPE *spc, int what)
-{
- if(n > OSCIL_SIZE / 2)
- n = OSCIL_SIZE / 2;
-
- for(int i = 1; i < n; i++) {
- if(what == 0)
- spc[i - 1] = sqrt(oscilFFTfreqs.c[i] * oscilFFTfreqs.c[i]
- + oscilFFTfreqs.s[i] * oscilFFTfreqs.s[i]);
- else {
- if(Pcurrentbasefunc == 0)
- spc[i - 1] = ((i == 1) ? (1.0) : (0.0));
- else
- spc[i - 1] = sqrt(basefuncFFTfreqs.c[i] * basefuncFFTfreqs.c[i]
- + basefuncFFTfreqs.s[i]
- * basefuncFFTfreqs.s[i]);
- }
- }
-
- if(what == 0) {
- for(int i = 0; i < n; i++)
- outoscilFFTfreqs.s[i] = outoscilFFTfreqs.c[i] = spc[i];
- for(int i = n; i < OSCIL_SIZE / 2; i++)
- outoscilFFTfreqs.s[i] = outoscilFFTfreqs.c[i] = 0.0;
- adaptiveharmonic(outoscilFFTfreqs, 0.0);
- for(int i = 0; i < n; i++)
- spc[i] = outoscilFFTfreqs.s[i];
- adaptiveharmonicpostprocess(spc, n - 1);
- }
-}
-
-
-/*
- * Convert the oscillator as base function
- */
-void OscilGen::useasbase()
-{
- int i;
-
- for(i = 0; i < OSCIL_SIZE / 2; i++) {
- basefuncFFTfreqs.c[i] = oscilFFTfreqs.c[i];
- basefuncFFTfreqs.s[i] = oscilFFTfreqs.s[i];
- }
-
- oldbasefunc = Pcurrentbasefunc = 127;
-
- prepare();
-}
-
-
-/*
- * Get the base function for UI
- */
-void OscilGen::getcurrentbasefunction(REALTYPE *smps)
-{
- if(Pcurrentbasefunc != 0)
- fft->freqs2smps(basefuncFFTfreqs, smps);
- else
- getbasefunction(smps); //the sine case
-}
-
-
-void OscilGen::add2XML(XMLwrapper *xml)
-{
- xml->addpar("harmonic_mag_type", Phmagtype);
-
- xml->addpar("base_function", Pcurrentbasefunc);
- xml->addpar("base_function_par", Pbasefuncpar);
- xml->addpar("base_function_modulation", Pbasefuncmodulation);
- xml->addpar("base_function_modulation_par1", Pbasefuncmodulationpar1);
- xml->addpar("base_function_modulation_par2", Pbasefuncmodulationpar2);
- xml->addpar("base_function_modulation_par3", Pbasefuncmodulationpar3);
-
- xml->addpar("modulation", Pmodulation);
- xml->addpar("modulation_par1", Pmodulationpar1);
- xml->addpar("modulation_par2", Pmodulationpar2);
- xml->addpar("modulation_par3", Pmodulationpar3);
-
- xml->addpar("wave_shaping", Pwaveshaping);
- xml->addpar("wave_shaping_function", Pwaveshapingfunction);
-
- xml->addpar("filter_type", Pfiltertype);
- xml->addpar("filter_par1", Pfilterpar1);
- xml->addpar("filter_par2", Pfilterpar2);
- xml->addpar("filter_before_wave_shaping", Pfilterbeforews);
-
- xml->addpar("spectrum_adjust_type", Psatype);
- xml->addpar("spectrum_adjust_par", Psapar);
-
- xml->addpar("rand", Prand);
- xml->addpar("amp_rand_type", Pamprandtype);
- xml->addpar("amp_rand_power", Pamprandpower);
-
- xml->addpar("harmonic_shift", Pharmonicshift);
- xml->addparbool("harmonic_shift_first", Pharmonicshiftfirst);
-
- xml->addpar("adaptive_harmonics", Padaptiveharmonics);
- xml->addpar("adaptive_harmonics_base_frequency", Padaptiveharmonicsbasefreq);
- xml->addpar("adaptive_harmonics_power", Padaptiveharmonicspower);
-
- xml->beginbranch("HARMONICS");
- for(int n = 0; n < MAX_AD_HARMONICS; n++) {
- if((Phmag[n] == 64) && (Phphase[n] == 64))
- continue;
- xml->beginbranch("HARMONIC", n + 1);
- xml->addpar("mag", Phmag[n]);
- xml->addpar("phase", Phphase[n]);
- xml->endbranch();
- }
- xml->endbranch();
-
- if(Pcurrentbasefunc == 127) {
- REALTYPE max = 0.0;
-
- for(int i = 0; i < OSCIL_SIZE / 2; i++) {
- if(max < fabs(basefuncFFTfreqs.c[i]))
- max = fabs(basefuncFFTfreqs.c[i]);
- if(max < fabs(basefuncFFTfreqs.s[i]))
- max = fabs(basefuncFFTfreqs.s[i]);
- }
- if(max < 0.00000001)
- max = 1.0;
-
- xml->beginbranch("BASE_FUNCTION");
- for(int i = 1; i < OSCIL_SIZE / 2; i++) {
- REALTYPE xc = basefuncFFTfreqs.c[i] / max;
- REALTYPE xs = basefuncFFTfreqs.s[i] / max;
- if((fabs(xs) > 0.00001) && (fabs(xs) > 0.00001)) {
- xml->beginbranch("BF_HARMONIC", i);
- xml->addparreal("cos", xc);
- xml->addparreal("sin", xs);
- xml->endbranch();
- }
- }
- xml->endbranch();
- }
-}
-
-
-void OscilGen::getfromXML(XMLwrapper *xml)
-{
- Phmagtype = xml->getpar127("harmonic_mag_type", Phmagtype);
-
- Pcurrentbasefunc = xml->getpar127("base_function", Pcurrentbasefunc);
- Pbasefuncpar = xml->getpar127("base_function_par", Pbasefuncpar);
-
- Pbasefuncmodulation = xml->getpar127("base_function_modulation",
- Pbasefuncmodulation);
- Pbasefuncmodulationpar1 = xml->getpar127("base_function_modulation_par1",
- Pbasefuncmodulationpar1);
- Pbasefuncmodulationpar2 = xml->getpar127("base_function_modulation_par2",
- Pbasefuncmodulationpar2);
- Pbasefuncmodulationpar3 = xml->getpar127("base_function_modulation_par3",
- Pbasefuncmodulationpar3);
-
- Pmodulation = xml->getpar127("modulation", Pmodulation);
- Pmodulationpar1 = xml->getpar127("modulation_par1",
- Pmodulationpar1);
- Pmodulationpar2 = xml->getpar127("modulation_par2",
- Pmodulationpar2);
- Pmodulationpar3 = xml->getpar127("modulation_par3",
- Pmodulationpar3);
-
- Pwaveshaping = xml->getpar127("wave_shaping", Pwaveshaping);
- Pwaveshapingfunction = xml->getpar127("wave_shaping_function",
- Pwaveshapingfunction);
-
- Pfiltertype = xml->getpar127("filter_type", Pfiltertype);
- Pfilterpar1 = xml->getpar127("filter_par1", Pfilterpar1);
- Pfilterpar2 = xml->getpar127("filter_par2", Pfilterpar2);
- Pfilterbeforews = xml->getpar127("filter_before_wave_shaping",
- Pfilterbeforews);
-
- Psatype = xml->getpar127("spectrum_adjust_type", Psatype);
- Psapar = xml->getpar127("spectrum_adjust_par", Psapar);
-
- Prand = xml->getpar127("rand", Prand);
- Pamprandtype = xml->getpar127("amp_rand_type", Pamprandtype);
- Pamprandpower = xml->getpar127("amp_rand_power", Pamprandpower);
-
- Pharmonicshift = xml->getpar("harmonic_shift",
- Pharmonicshift,
- -64,
- 64);
- Pharmonicshiftfirst = xml->getparbool("harmonic_shift_first",
- Pharmonicshiftfirst);
-
- Padaptiveharmonics = xml->getpar("adaptive_harmonics",
- Padaptiveharmonics,
- 0,
- 127);
- Padaptiveharmonicsbasefreq = xml->getpar(
- "adaptive_harmonics_base_frequency",
- Padaptiveharmonicsbasefreq,
- 0,
- 255);
- Padaptiveharmonicspower = xml->getpar("adaptive_harmonics_power",
- Padaptiveharmonicspower,
- 0,
- 200);
-
-
- if(xml->enterbranch("HARMONICS")) {
- Phmag[0] = 64;
- Phphase[0] = 64;
- for(int n = 0; n < MAX_AD_HARMONICS; n++) {
- if(xml->enterbranch("HARMONIC", n + 1) == 0)
- continue;
- Phmag[n] = xml->getpar127("mag", 64);
- Phphase[n] = xml->getpar127("phase", 64);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(Pcurrentbasefunc != 0)
- changebasefunction();
-
-
- if(xml->enterbranch("BASE_FUNCTION")) {
- for(int i = 1; i < OSCIL_SIZE / 2; i++) {
- if(xml->enterbranch("BF_HARMONIC", i)) {
- basefuncFFTfreqs.c[i] = xml->getparreal("cos", 0.0);
- basefuncFFTfreqs.s[i] = xml->getparreal("sin", 0.0);
- xml->exitbranch();
- }
- }
- xml->exitbranch();
-
- REALTYPE max = 0.0;
-
- basefuncFFTfreqs.c[0] = 0.0;
- for(int i = 0; i < OSCIL_SIZE / 2; i++) {
- if(max < fabs(basefuncFFTfreqs.c[i]))
- max = fabs(basefuncFFTfreqs.c[i]);
- if(max < fabs(basefuncFFTfreqs.s[i]))
- max = fabs(basefuncFFTfreqs.s[i]);
- }
- if(max < 0.00000001)
- max = 1.0;
-
- for(int i = 0; i < OSCIL_SIZE / 2; i++) {
- if(basefuncFFTfreqs.c[i])
- basefuncFFTfreqs.c[i] /= max;
- if(basefuncFFTfreqs.s[i])
- basefuncFFTfreqs.s[i] /= max;
- }
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Synth/OscilGen.h b/plugins/zynaddsubfx/src/Synth/OscilGen.h
deleted file mode 100644
index 5c08d62..0000000
--- a/plugins/zynaddsubfx/src/Synth/OscilGen.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- OscilGen.h - Waveform generator for ADnote
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef OSCIL_GEN_H
-#define OSCIL_GEN_H
-
-#include "../globals.h"
-#include "../Misc/XMLwrapper.h"
-#include "Resonance.h"
-#include "../DSP/FFTwrapper.h"
-#include "../Params/Presets.h"
-
-class OscilGen:public Presets
-{
- public:
- OscilGen(FFTwrapper *fft_, Resonance *res_);
- ~OscilGen();
-
- /**computes the full spectrum of oscil from harmonics,phases and basefunc*/
- void prepare();
-
- /**do the antialiasing(cut off higher freqs.),apply randomness and do a IFFT*/
- short get(REALTYPE *smps, REALTYPE freqHz); //returns where should I start getting samples, used in block type randomness
- short get(REALTYPE *smps, REALTYPE freqHz, int resonance);
- //if freqHz is smaller than 0, return the "un-randomized" sample for UI
-
- void getbasefunction(REALTYPE *smps);
-
- //called by UI
- void getspectrum(int n, REALTYPE *spc, int what); //what=0 pt. oscil,1 pt. basefunc
- void getcurrentbasefunction(REALTYPE *smps);
- /**convert oscil to base function*/
- void useasbase();
-
- void add2XML(XMLwrapper *xml);
- void defaults();
- void getfromXML(XMLwrapper *xml);
-
- void convert2sine(int magtype);
-
- //Parameters
-
- /**
- * The hmag and hphase starts counting from 0, so the first harmonic(1) has the index 0,
- * 2-nd harmonic has index 1, ..the 128 harminic has index 127
- */
- unsigned char Phmag[MAX_AD_HARMONICS], Phphase[MAX_AD_HARMONICS]; //the MIDI parameters for mag. and phases
-
-
- /**The Type of magnitude:
- * 0 - Linear
- * 1 - dB scale (-40)
- * 2 - dB scale (-60)
- * 3 - dB scale (-80)
- * 4 - dB scale (-100)*/
- unsigned char Phmagtype;
-
- unsigned char Pcurrentbasefunc; //The base function used - 0=sin, 1=...
- unsigned char Pbasefuncpar; //the parameter of the base function
-
- unsigned char Pbasefuncmodulation; //what modulation is applied to the basefunc
- unsigned char Pbasefuncmodulationpar1, Pbasefuncmodulationpar2,
- Pbasefuncmodulationpar3; //the parameter of the base function modulation
-
- /*the Randomness:
- 64=no randomness
- 63..0 - block type randomness - 0 is maximum
- 65..127 - each harmonic randomness - 127 is maximum*/
- unsigned char Prand;
- unsigned char Pwaveshaping, Pwaveshapingfunction;
- unsigned char Pfiltertype, Pfilterpar1, Pfilterpar2;
- unsigned char Pfilterbeforews;
- unsigned char Psatype, Psapar; //spectrum adjust
-
- unsigned char Pamprandpower, Pamprandtype; //amplitude randomness
- int Pharmonicshift; //how the harmonics are shifted
- int Pharmonicshiftfirst; //if the harmonic shift is done before waveshaping and filter
-
- unsigned char Padaptiveharmonics; //the adaptive harmonics status (off=0,on=1,etc..)
- unsigned char Padaptiveharmonicsbasefreq; //the base frequency of the adaptive harmonic (30..3000Hz)
- unsigned char Padaptiveharmonicspower; //the strength of the effect (0=off,100=full)
- unsigned char Padaptiveharmonicspar; //the parameters in 2,3,4.. modes of adaptive harmonics
-
- unsigned char Pmodulation; //what modulation is applied to the oscil
- unsigned char Pmodulationpar1, Pmodulationpar2, Pmodulationpar3; //the parameter of the parameters
-
-
- //makes a new random seed for Amplitude Randomness
- //this should be called every note on event
- void newrandseed(unsigned int randseed);
-
- bool ADvsPAD; //if it is used by ADsynth or by PADsynth
-
- private:
- //This array stores some termporary data and it has OSCIL_SIZE elements
- REALTYPE *tmpsmps;
- FFTFREQS outoscilFFTfreqs;
-
- REALTYPE hmag[MAX_AD_HARMONICS], hphase[MAX_AD_HARMONICS]; //the magnituides and the phases of the sine/nonsine harmonics
-// private:
- FFTwrapper *fft;
- //computes the basefunction and make the FFT; newbasefunc<0 = same basefunc
- void changebasefunction();
- //Waveshaping
- void waveshape();
-
- //Filter the oscillator accotding to Pfiltertype and Pfilterpar
- void oscilfilter();
-
- //Adjust the spectrum
- void spectrumadjust();
-
- //Shift the harmonics
- void shiftharmonics();
-
- //Do the oscil modulation stuff
- void modulation();
-
- //Do the adaptive harmonic stuff
- void adaptiveharmonic(FFTFREQS f, REALTYPE freq);
-
- //Do the adaptive harmonic postprocessing (2n+1,2xS,2xA,etc..)
- //this function is called even for the user interface
- //this can be called for the sine and components, and for the spectrum
- //(that's why the sine and cosine components should be processed with a separate call)
- void adaptiveharmonicpostprocess(REALTYPE *f, int size);
-
- //Basic/base functions (Functiile De Baza)
- REALTYPE basefunc_pulse(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_saw(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_triangle(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_power(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_gauss(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_diode(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_abssine(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_pulsesine(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_stretchsine(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_chirp(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_absstretchsine(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_chebyshev(REALTYPE x, REALTYPE a);
- REALTYPE basefunc_sqr(REALTYPE x, REALTYPE a);
-
- //Internal Data
- unsigned char oldbasefunc, oldbasepar, oldhmagtype,
- oldwaveshapingfunction, oldwaveshaping;
- int oldfilterpars, oldsapars, oldbasefuncmodulation,
- oldbasefuncmodulationpar1, oldbasefuncmodulationpar2,
- oldbasefuncmodulationpar3, oldharmonicshift;
- int oldmodulation, oldmodulationpar1, oldmodulationpar2,
- oldmodulationpar3;
-
-
- FFTFREQS basefuncFFTfreqs; //Base Function Frequencies
- FFTFREQS oscilFFTfreqs; //Oscillator Frequencies - this is different than the hamonics set-up by the user, it may contains time-domain data if the antialiasing is turned off
- int oscilprepared; //1 if the oscil is prepared, 0 if it is not prepared and is need to call ::prepare() before ::get()
-
- Resonance *res;
-
- unsigned int randseed;
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Synth/PADnote.cpp b/plugins/zynaddsubfx/src/Synth/PADnote.cpp
deleted file mode 100644
index 699085f..0000000
--- a/plugins/zynaddsubfx/src/Synth/PADnote.cpp
+++ /dev/null
@@ -1,614 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PADnote.cpp - The "pad" synthesizer
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#include <math.h>
-#include "PADnote.h"
-#include "../Misc/Config.h"
-
-PADnote::PADnote(PADnoteParameters *parameters,
- Controller *ctl_,
- REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote,
- bool besilent)
-{
- ready = 0;
-
- // Initialise some legato-specific vars
- Legato.msg = LM_Norm;
- Legato.fade.length = (int)(SAMPLE_RATE * 0.005); // 0.005 seems ok.
- if(Legato.fade.length < 1)
- Legato.fade.length = 1; // (if something's fishy)
- Legato.fade.step = (1.0 / Legato.fade.length);
- Legato.decounter = -10;
- Legato.param.freq = freq;
- Legato.param.vel = velocity;
- Legato.param.portamento = portamento_;
- Legato.param.midinote = midinote;
- Legato.silent = besilent;
-
- pars = parameters;
- portamento = portamento_;
- ctl = ctl_;
- this->velocity = velocity;
- finished_ = false;
-
-
- if(pars->Pfixedfreq == 0)
- basefreq = freq;
- else {
- basefreq = 440.0;
- int fixedfreqET = pars->PfixedfreqET;
- if(fixedfreqET != 0) { //if the frequency varies according the keyboard note
- REALTYPE tmp =
- (midinote
- - 69.0) / 12.0 * (pow(2.0, (fixedfreqET - 1) / 63.0) - 1.0);
- if(fixedfreqET <= 64)
- basefreq *= pow(2.0, tmp);
- else
- basefreq *= pow(3.0, tmp);
- }
- }
-
- firsttime = true;
- released = false;
- realfreq = basefreq;
- NoteGlobalPar.Detune = getdetune(pars->PDetuneType,
- pars->PCoarseDetune, pars->PDetune);
-
-
- //find out the closest note
- REALTYPE logfreq = log(basefreq * pow(2.0, NoteGlobalPar.Detune / 1200.0));
- REALTYPE mindist = fabs(logfreq - log(pars->sample[0].basefreq + 0.0001));
- nsample = 0;
- for(int i = 1; i < PAD_MAX_SAMPLES; i++) {
- if(pars->sample[i].smp == NULL)
- break;
- REALTYPE dist = fabs(logfreq - log(pars->sample[i].basefreq + 0.0001));
-// printf("(mindist=%g) %i %g %g\n",mindist,i,dist,pars->sample[i].basefreq);
-
- if(dist < mindist) {
- nsample = i;
- mindist = dist;
- }
- }
-
- int size = pars->sample[nsample].size;
- if(size == 0)
- size = 1;
-
-
- poshi_l = (int)(RND * (size - 1));
- if(pars->PStereo != 0)
- poshi_r = (poshi_l + size / 2) % size;
- else
- poshi_r = poshi_l;
- poslo = 0.0;
-
- tmpwave = new REALTYPE [SOUND_BUFFER_SIZE];
-
-
-
- if(pars->PPanning == 0)
- NoteGlobalPar.Panning = RND;
- else
- NoteGlobalPar.Panning = pars->PPanning / 128.0;
-
- NoteGlobalPar.FilterCenterPitch = pars->GlobalFilter->getfreq() //center freq
- + pars->PFilterVelocityScale / 127.0
- * 6.0 //velocity sensing
- * (VelF(velocity,
- pars->
- PFilterVelocityScaleFunction) - 1);
-
- if(pars->PPunchStrength != 0) {
- NoteGlobalPar.Punch.Enabled = 1;
- NoteGlobalPar.Punch.t = 1.0; //start from 1.0 and to 0.0
- NoteGlobalPar.Punch.initialvalue =
- ((pow(10, 1.5 * pars->PPunchStrength / 127.0) - 1.0)
- * VelF(velocity,
- pars->PPunchVelocitySensing));
- REALTYPE time = pow(10, 3.0 * pars->PPunchTime / 127.0) / 10000.0; //0.1 .. 100 ms
- REALTYPE stretch = pow(440.0 / freq, pars->PPunchStretch / 64.0);
- NoteGlobalPar.Punch.dt = 1.0 / (time * SAMPLE_RATE * stretch);
- }
- else
- NoteGlobalPar.Punch.Enabled = 0;
-
-
-
- NoteGlobalPar.FreqEnvelope = new Envelope(pars->FreqEnvelope, basefreq);
- NoteGlobalPar.FreqLfo = new LFO(pars->FreqLfo, basefreq);
-
- NoteGlobalPar.AmpEnvelope = new Envelope(pars->AmpEnvelope, basefreq);
- NoteGlobalPar.AmpLfo = new LFO(pars->AmpLfo, basefreq);
-
- NoteGlobalPar.Volume = 4.0 * pow(0.1, 3.0 * (1.0 - pars->PVolume / 96.0)) //-60 dB .. 0 dB
- * VelF(velocity, pars->PAmpVelocityScaleFunction); //velocity sensing
-
- NoteGlobalPar.AmpEnvelope->envout_dB(); //discard the first envelope output
- globaloldamplitude = globalnewamplitude = NoteGlobalPar.Volume
- * NoteGlobalPar.AmpEnvelope->
- envout_dB()
- * NoteGlobalPar.AmpLfo->amplfoout();
-
- NoteGlobalPar.GlobalFilterL = new Filter(pars->GlobalFilter);
- NoteGlobalPar.GlobalFilterR = new Filter(pars->GlobalFilter);
-
- NoteGlobalPar.FilterEnvelope = new Envelope(pars->FilterEnvelope,
- basefreq);
- NoteGlobalPar.FilterLfo = new LFO(pars->FilterLfo, basefreq);
- NoteGlobalPar.FilterQ = pars->GlobalFilter->getq();
- NoteGlobalPar.FilterFreqTracking = pars->GlobalFilter->getfreqtracking(
- basefreq);
-
- ready = 1; ///sa il pun pe asta doar cand e chiar gata
-
- if(parameters->sample[nsample].smp == NULL) {
- finished_ = true;
- return;
- }
-}
-
-
-// PADlegatonote: This function is (mostly) a copy of PADnote(...)
-// with some lines removed so that it only alter the already playing
-// note (to perform legato). It is possible I left stuff that is not
-// required for this.
-void PADnote::PADlegatonote(REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote,
- bool externcall)
-{
- PADnoteParameters *parameters = pars;
- //Controller *ctl_=ctl;
-
- // Manage legato stuff
- if(externcall)
- Legato.msg = LM_Norm;
- if(Legato.msg != LM_CatchUp) {
- Legato.lastfreq = Legato.param.freq;
- Legato.param.freq = freq;
- Legato.param.vel = velocity;
- Legato.param.portamento = portamento_;
- Legato.param.midinote = midinote;
- if(Legato.msg == LM_Norm) {
- if(Legato.silent) {
- Legato.fade.m = 0.0;
- Legato.msg = LM_FadeIn;
- }
- else {
- Legato.fade.m = 1.0;
- Legato.msg = LM_FadeOut;
- return;
- }
- }
- if(Legato.msg == LM_ToNorm)
- Legato.msg = LM_Norm;
- }
-
- portamento = portamento_;
- this->velocity = velocity;
- finished_ = false;
-
- if(pars->Pfixedfreq == 0)
- basefreq = freq;
- else {
- basefreq = 440.0;
- int fixedfreqET = pars->PfixedfreqET;
- if(fixedfreqET != 0) { //if the frequency varies according the keyboard note
- REALTYPE tmp =
- (midinote
- - 69.0) / 12.0 * (pow(2.0, (fixedfreqET - 1) / 63.0) - 1.0);
- if(fixedfreqET <= 64)
- basefreq *= pow(2.0, tmp);
- else
- basefreq *= pow(3.0, tmp);
- }
- }
-
- released = false;
- realfreq = basefreq;
-
- getdetune(pars->PDetuneType, pars->PCoarseDetune, pars->PDetune);
-
-
- //find out the closest note
- REALTYPE logfreq = log(basefreq * pow(2.0, NoteGlobalPar.Detune / 1200.0));
- REALTYPE mindist = fabs(logfreq - log(pars->sample[0].basefreq + 0.0001));
- nsample = 0;
- for(int i = 1; i < PAD_MAX_SAMPLES; i++) {
- if(pars->sample[i].smp == NULL)
- break;
- REALTYPE dist = fabs(logfreq - log(pars->sample[i].basefreq + 0.0001));
-
- if(dist < mindist) {
- nsample = i;
- mindist = dist;
- }
- }
-
- int size = pars->sample[nsample].size;
- if(size == 0)
- size = 1;
-
- if(pars->PPanning == 0)
- NoteGlobalPar.Panning = RND;
- else
- NoteGlobalPar.Panning = pars->PPanning / 128.0;
-
- NoteGlobalPar.FilterCenterPitch = pars->GlobalFilter->getfreq() //center freq
- + pars->PFilterVelocityScale / 127.0
- * 6.0 //velocity sensing
- * (VelF(velocity,
- pars->
- PFilterVelocityScaleFunction) - 1);
-
-
- NoteGlobalPar.Volume = 4.0 * pow(0.1, 3.0 * (1.0 - pars->PVolume / 96.0)) //-60 dB .. 0 dB
- * VelF(velocity, pars->PAmpVelocityScaleFunction); //velocity sensing
-
- NoteGlobalPar.AmpEnvelope->envout_dB(); //discard the first envelope output
- globaloldamplitude = globalnewamplitude = NoteGlobalPar.Volume
- * NoteGlobalPar.AmpEnvelope->
- envout_dB()
- * NoteGlobalPar.AmpLfo->amplfoout();
-
- NoteGlobalPar.FilterQ = pars->GlobalFilter->getq();
- NoteGlobalPar.FilterFreqTracking = pars->GlobalFilter->getfreqtracking(
- basefreq);
-
-
- if(parameters->sample[nsample].smp == NULL) {
- finished_ = true;
- return;
- }
-
- // End of the PADlegatonote function.
-}
-
-
-PADnote::~PADnote()
-{
- delete (NoteGlobalPar.FreqEnvelope);
- delete (NoteGlobalPar.FreqLfo);
- delete (NoteGlobalPar.AmpEnvelope);
- delete (NoteGlobalPar.AmpLfo);
- delete (NoteGlobalPar.GlobalFilterL);
- delete (NoteGlobalPar.GlobalFilterR);
- delete (NoteGlobalPar.FilterEnvelope);
- delete (NoteGlobalPar.FilterLfo);
- delete [] tmpwave;
-}
-
-
-inline void PADnote::fadein(REALTYPE *smps)
-{
- int zerocrossings = 0;
- for(int i = 1; i < SOUND_BUFFER_SIZE; i++)
- if((smps[i - 1] < 0.0) && (smps[i] > 0.0))
- zerocrossings++; //this is only the possitive crossings
-
- REALTYPE tmp = (SOUND_BUFFER_SIZE - 1.0) / (zerocrossings + 1) / 3.0;
- if(tmp < 8.0)
- tmp = 8.0;
-
- int n;
- F2I(tmp, n); //how many samples is the fade-in
- if(n > SOUND_BUFFER_SIZE)
- n = SOUND_BUFFER_SIZE;
- for(int i = 0; i < n; i++) { //fade-in
- REALTYPE tmp = 0.5 - cos((REALTYPE)i / (REALTYPE) n * PI) * 0.5;
- smps[i] *= tmp;
- }
-}
-
-
-void PADnote::computecurrentparameters()
-{
- REALTYPE globalpitch, globalfilterpitch;
- globalpitch = 0.01 * (NoteGlobalPar.FreqEnvelope->envout()
- + NoteGlobalPar.FreqLfo->lfoout()
- * ctl->modwheel.relmod + NoteGlobalPar.Detune);
- globaloldamplitude = globalnewamplitude;
- globalnewamplitude = NoteGlobalPar.Volume
- * NoteGlobalPar.AmpEnvelope->envout_dB()
- * NoteGlobalPar.AmpLfo->amplfoout();
-
- globalfilterpitch = NoteGlobalPar.FilterEnvelope->envout()
- + NoteGlobalPar.FilterLfo->lfoout()
- + NoteGlobalPar.FilterCenterPitch;
-
- REALTYPE tmpfilterfreq = globalfilterpitch + ctl->filtercutoff.relfreq
- + NoteGlobalPar.FilterFreqTracking;
-
- tmpfilterfreq = NoteGlobalPar.GlobalFilterL->getrealfreq(tmpfilterfreq);
-
- REALTYPE globalfilterq = NoteGlobalPar.FilterQ * ctl->filterq.relq;
- NoteGlobalPar.GlobalFilterL->setfreq_and_q(tmpfilterfreq, globalfilterq);
- NoteGlobalPar.GlobalFilterR->setfreq_and_q(tmpfilterfreq, globalfilterq);
-
- //compute the portamento, if it is used by this note
- REALTYPE portamentofreqrap = 1.0;
- if(portamento != 0) { //this voice use portamento
- portamentofreqrap = ctl->portamento.freqrap;
- if(ctl->portamento.used == 0) //the portamento has finished
- portamento = 0; //this note is no longer "portamented"
- ;
- }
-
- realfreq = basefreq * portamentofreqrap
- * pow(2.0, globalpitch / 12.0) * ctl->pitchwheel.relfreq;
-}
-
-
-int PADnote::Compute_Linear(REALTYPE *outl,
- REALTYPE *outr,
- int freqhi,
- REALTYPE freqlo)
-{
- REALTYPE *smps = pars->sample[nsample].smp;
- if(smps == NULL) {
- finished_ = true;
- return 1;
- }
- int size = pars->sample[nsample].size;
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- poshi_l += freqhi;
- poshi_r += freqhi;
- poslo += freqlo;
- if(poslo >= 1.0) {
- poshi_l += 1;
- poshi_r += 1;
- poslo -= 1.0;
- }
- if(poshi_l >= size)
- poshi_l %= size;
- if(poshi_r >= size)
- poshi_r %= size;
-
- outl[i] = smps[poshi_l] * (1.0 - poslo) + smps[poshi_l + 1] * poslo;
- outr[i] = smps[poshi_r] * (1.0 - poslo) + smps[poshi_r + 1] * poslo;
- }
- return 1;
-}
-int PADnote::Compute_Cubic(REALTYPE *outl,
- REALTYPE *outr,
- int freqhi,
- REALTYPE freqlo)
-{
- REALTYPE *smps = pars->sample[nsample].smp;
- if(smps == NULL) {
- finished_ = true;
- return 1;
- }
- int size = pars->sample[nsample].size;
- REALTYPE xm1, x0, x1, x2, a, b, c;
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- poshi_l += freqhi;
- poshi_r += freqhi;
- poslo += freqlo;
- if(poslo >= 1.0) {
- poshi_l += 1;
- poshi_r += 1;
- poslo -= 1.0;
- }
- if(poshi_l >= size)
- poshi_l %= size;
- if(poshi_r >= size)
- poshi_r %= size;
-
-
- //left
- xm1 = smps[poshi_l];
- x0 = smps[poshi_l + 1];
- x1 = smps[poshi_l + 2];
- x2 = smps[poshi_l + 3];
- a = (3.0 * (x0 - x1) - xm1 + x2) * 0.5;
- b = 2.0 * x1 + xm1 - (5.0 * x0 + x2) * 0.5;
- c = (x1 - xm1) * 0.5;
- outl[i] = (((a * poslo) + b) * poslo + c) * poslo + x0;
- //right
- xm1 = smps[poshi_r];
- x0 = smps[poshi_r + 1];
- x1 = smps[poshi_r + 2];
- x2 = smps[poshi_r + 3];
- a = (3.0 * (x0 - x1) - xm1 + x2) * 0.5;
- b = 2.0 * x1 + xm1 - (5.0 * x0 + x2) * 0.5;
- c = (x1 - xm1) * 0.5;
- outr[i] = (((a * poslo) + b) * poslo + c) * poslo + x0;
- }
- return 1;
-}
-
-
-int PADnote::noteout(REALTYPE *outl, REALTYPE *outr)
-{
- computecurrentparameters();
- REALTYPE *smps = pars->sample[nsample].smp;
- if(smps == NULL) {
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] = 0.0;
- outr[i] = 0.0;
- }
- return 1;
- }
- REALTYPE smpfreq = pars->sample[nsample].basefreq;
-
-
- REALTYPE freqrap = realfreq / smpfreq;
- int freqhi = (int) (floor(freqrap));
- REALTYPE freqlo = freqrap - floor(freqrap);
-
-
- if(config.cfg.Interpolation)
- Compute_Cubic(outl, outr, freqhi, freqlo);
- else
- Compute_Linear(outl, outr, freqhi, freqlo);
-
-
- if(firsttime) {
- fadein(outl);
- fadein(outr);
- firsttime = false;
- }
-
- NoteGlobalPar.GlobalFilterL->filterout(outl);
- NoteGlobalPar.GlobalFilterR->filterout(outr);
-
- //Apply the punch
- if(NoteGlobalPar.Punch.Enabled != 0) {
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE punchamp = NoteGlobalPar.Punch.initialvalue
- * NoteGlobalPar.Punch.t + 1.0;
- outl[i] *= punchamp;
- outr[i] *= punchamp;
- NoteGlobalPar.Punch.t -= NoteGlobalPar.Punch.dt;
- if(NoteGlobalPar.Punch.t < 0.0) {
- NoteGlobalPar.Punch.Enabled = 0;
- break;
- }
- }
- }
-
- if(ABOVE_AMPLITUDE_THRESHOLD(globaloldamplitude, globalnewamplitude)) {
- // Amplitude Interpolation
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE tmpvol = INTERPOLATE_AMPLITUDE(globaloldamplitude,
- globalnewamplitude,
- i,
- SOUND_BUFFER_SIZE);
- outl[i] *= tmpvol * NoteGlobalPar.Panning;
- outr[i] *= tmpvol * (1.0 - NoteGlobalPar.Panning);
- }
- }
- else {
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] *= globalnewamplitude * NoteGlobalPar.Panning;
- outr[i] *= globalnewamplitude * (1.0 - NoteGlobalPar.Panning);
- }
- }
-
-
- // Apply legato-specific sound signal modifications
- if(Legato.silent) // Silencer
- if(Legato.msg != LM_FadeIn)
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] = 0.0;
- outr[i] = 0.0;
- }
- switch(Legato.msg) {
- case LM_CatchUp: // Continue the catch-up...
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) { //Yea, could be done without the loop...
- Legato.decounter--;
- if(Legato.decounter < 1) {
- // Catching-up done, we can finally set
- // the note to the actual parameters.
- Legato.decounter = -10;
- Legato.msg = LM_ToNorm;
- PADlegatonote(Legato.param.freq,
- Legato.param.vel,
- Legato.param.portamento,
- Legato.param.midinote,
- false);
- break;
- }
- }
- break;
- case LM_FadeIn: // Fade-in
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- Legato.silent = false;
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- Legato.decounter--;
- if(Legato.decounter < 1) {
- Legato.decounter = -10;
- Legato.msg = LM_Norm;
- break;
- }
- Legato.fade.m += Legato.fade.step;
- outl[i] *= Legato.fade.m;
- outr[i] *= Legato.fade.m;
- }
- break;
- case LM_FadeOut: // Fade-out, then set the catch-up
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) {
- Legato.decounter--;
- if(Legato.decounter < 1) {
- for(int j = i; j < SOUND_BUFFER_SIZE; j++) {
- outl[j] = 0.0;
- outr[j] = 0.0;
- }
- Legato.decounter = -10;
- Legato.silent = true;
- // Fading-out done, now set the catch-up :
- Legato.decounter = Legato.fade.length;
- Legato.msg = LM_CatchUp;
- REALTYPE catchupfreq = Legato.param.freq
- * (Legato.param.freq / Legato.lastfreq); //This freq should make this now silent note to catch-up (or should I say resync ?) with the heard note for the same length it stayed at the previous freq during the fadeout.
- PADlegatonote(catchupfreq,
- Legato.param.vel,
- Legato.param.portamento,
- Legato.param.midinote,
- false);
- break;
- }
- Legato.fade.m -= Legato.fade.step;
- outl[i] *= Legato.fade.m;
- outr[i] *= Legato.fade.m;
- }
- break;
- default:
- break;
- }
-
-
- // Check if the global amplitude is finished.
- // If it does, disable the note
- if(NoteGlobalPar.AmpEnvelope->finished() != 0) {
- for(int i = 0; i < SOUND_BUFFER_SIZE; i++) { //fade-out
- REALTYPE tmp = 1.0 - (REALTYPE)i / (REALTYPE)SOUND_BUFFER_SIZE;
- outl[i] *= tmp;
- outr[i] *= tmp;
- }
- finished_ = 1;
- }
-
- return 1;
-}
-
-int PADnote::finished()
-{
- return finished_;
-}
-
-void PADnote::relasekey()
-{
- NoteGlobalPar.FreqEnvelope->relasekey();
- NoteGlobalPar.FilterEnvelope->relasekey();
- NoteGlobalPar.AmpEnvelope->relasekey();
-}
-
diff --git a/plugins/zynaddsubfx/src/Synth/PADnote.h b/plugins/zynaddsubfx/src/Synth/PADnote.h
deleted file mode 100644
index 9563532..0000000
--- a/plugins/zynaddsubfx/src/Synth/PADnote.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- PADnote.h - The "pad" synthesizer
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-#ifndef PAD_NOTE_H
-#define PAD_NOTE_H
-
-#include "../globals.h"
-#include "../Params/PADnoteParameters.h"
-#include "../Params/Controller.h"
-#include "Envelope.h"
-#include "LFO.h"
-#include "../DSP/Filter.h"
-#include "../Params/Controller.h"
-
-/**The "pad" synthesizer*/
-class PADnote
-{
- public:
- PADnote(PADnoteParameters *parameters,
- Controller *ctl_,
- REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote,
- bool besilent);
- ~PADnote();
-
- void PADlegatonote(REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote,
- bool externcall);
-
- int noteout(REALTYPE *outl, REALTYPE *outr);
- int finished();
- void relasekey();
-
- int ready;
-
- private:
- void fadein(REALTYPE *smps);
- void computecurrentparameters();
- bool finished_;
- PADnoteParameters *pars;
-
- int poshi_l, poshi_r;
- REALTYPE poslo;
-
- REALTYPE basefreq;
- bool firsttime, released;
-
- int nsample, portamento;
-
- int Compute_Linear(REALTYPE *outl,
- REALTYPE *outr,
- int freqhi,
- REALTYPE freqlo);
- int Compute_Cubic(REALTYPE *outl,
- REALTYPE *outr,
- int freqhi,
- REALTYPE freqlo);
-
-
- struct {
- /******************************************
- * FREQUENCY GLOBAL PARAMETERS *
- ******************************************/
- REALTYPE Detune; //cents
-
- Envelope *FreqEnvelope;
- LFO *FreqLfo;
-
- /********************************************
- * AMPLITUDE GLOBAL PARAMETERS *
- ********************************************/
- REALTYPE Volume; // [ 0 .. 1 ]
-
- REALTYPE Panning; // [ 0 .. 1 ]
-
- Envelope *AmpEnvelope;
- LFO *AmpLfo;
-
- struct {
- int Enabled;
- REALTYPE initialvalue, dt, t;
- } Punch;
-
- /******************************************
- * FILTER GLOBAL PARAMETERS *
- ******************************************/
- Filter *GlobalFilterL, *GlobalFilterR;
-
- REALTYPE FilterCenterPitch; //octaves
- REALTYPE FilterQ;
- REALTYPE FilterFreqTracking;
-
- Envelope *FilterEnvelope;
-
- LFO *FilterLfo;
- } NoteGlobalPar;
-
-
- REALTYPE globaloldamplitude, globalnewamplitude, velocity, realfreq;
- REALTYPE *tmpwave;
- Controller *ctl;
-
- // Legato vars
- struct {
- bool silent;
- REALTYPE lastfreq;
- LegatoMsg msg;
- int decounter;
- struct { // Fade In/Out vars
- int length;
- REALTYPE m, step;
- } fade;
- struct { // Note parameters
- REALTYPE freq, vel;
- int portamento, midinote;
- } param;
- } Legato;
-};
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Synth/Resonance.cpp b/plugins/zynaddsubfx/src/Synth/Resonance.cpp
deleted file mode 100644
index 2bf8c63..0000000
--- a/plugins/zynaddsubfx/src/Synth/Resonance.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Resonance.cpp - Resonance
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include <math.h>
-#include <stdlib.h>
-#include "Resonance.h"
-
-
-#include <stdio.h>
-
-Resonance::Resonance():Presets()
-{
- setpresettype("Presonance");
- defaults();
-}
-
-Resonance::~Resonance()
-{}
-
-
-void Resonance::defaults()
-{
- Penabled = 0;
- PmaxdB = 20;
- Pcenterfreq = 64; //1 kHz
- Poctavesfreq = 64;
- Pprotectthefundamental = 0;
- ctlcenter = 1.0;
- ctlbw = 1.0;
- for(int i = 0; i < N_RES_POINTS; i++)
- Prespoints[i] = 64;
-}
-
-/*
- * Set a point of resonance function with a value
- */
-void Resonance::setpoint(int n, unsigned char p)
-{
- if((n < 0) || (n >= N_RES_POINTS))
- return;
- Prespoints[n] = p;
-}
-
-/*
- * Apply the resonance to FFT data
- */
-void Resonance::applyres(int n, FFTFREQS fftdata, REALTYPE freq)
-{
- if(Penabled == 0)
- return; //if the resonance is disabled
- REALTYPE sum = 0.0,
- l1 = log(getfreqx(0.0) * ctlcenter),
- l2 = log(2.0) * getoctavesfreq() * ctlbw;
-
- for(int i = 0; i < N_RES_POINTS; i++)
- if(sum < Prespoints[i])
- sum = Prespoints[i];
- if(sum < 1.0)
- sum = 1.0;
-
- for(int i = 1; i < n; i++) {
- REALTYPE x = (log(freq * i) - l1) / l2; //compute where the n-th hamonics fits to the graph
- if(x < 0.0)
- x = 0.0;
-
- x *= N_RES_POINTS;
- REALTYPE dx = x - floor(x);
- x = floor(x);
- int kx1 = (int)x;
- if(kx1 >= N_RES_POINTS)
- kx1 = N_RES_POINTS - 1;
- int kx2 = kx1 + 1;
- if(kx2 >= N_RES_POINTS)
- kx2 = N_RES_POINTS - 1;
- REALTYPE y =
- (Prespoints[kx1]
- * (1.0 - dx) + Prespoints[kx2] * dx) / 127.0 - sum / 127.0;
-
- y = pow(10.0, y * PmaxdB / 20.0);
-
- if((Pprotectthefundamental != 0) && (i == 1))
- y = 1.0;
-
- fftdata.c[i] *= y;
- fftdata.s[i] *= y;
- }
-}
-
-/*
- * Gets the response at the frequency "freq"
- */
-
-REALTYPE Resonance::getfreqresponse(REALTYPE freq)
-{
- REALTYPE l1 = log(getfreqx(0.0) * ctlcenter),
- l2 = log(2.0) * getoctavesfreq() * ctlbw, sum = 0.0;
-
- for(int i = 0; i < N_RES_POINTS; i++)
- if(sum < Prespoints[i])
- sum = Prespoints[i];
- if(sum < 1.0)
- sum = 1.0;
-
- REALTYPE x = (log(freq) - l1) / l2; //compute where the n-th hamonics fits to the graph
- if(x < 0.0)
- x = 0.0;
- x *= N_RES_POINTS;
- REALTYPE dx = x - floor(x);
- x = floor(x);
- int kx1 = (int)x;
- if(kx1 >= N_RES_POINTS)
- kx1 = N_RES_POINTS - 1;
- int kx2 = kx1 + 1;
- if(kx2 >= N_RES_POINTS)
- kx2 = N_RES_POINTS - 1;
- REALTYPE result =
- (Prespoints[kx1]
- * (1.0 - dx) + Prespoints[kx2] * dx) / 127.0 - sum / 127.0;
- result = pow(10.0, result * PmaxdB / 20.0);
- return result;
-}
-
-
-/*
- * Smooth the resonance function
- */
-void Resonance::smooth()
-{
- REALTYPE old = Prespoints[0];
- for(int i = 0; i < N_RES_POINTS; i++) {
- old = old * 0.4 + Prespoints[i] * 0.6;
- Prespoints[i] = (int) old;
- }
- old = Prespoints[N_RES_POINTS - 1];
- for(int i = N_RES_POINTS - 1; i > 0; i--) {
- old = old * 0.4 + Prespoints[i] * 0.6;
- Prespoints[i] = (int) old + 1;
- if(Prespoints[i] > 127)
- Prespoints[i] = 127;
- }
-}
-
-/*
- * Randomize the resonance function
- */
-void Resonance::randomize(int type)
-{
- int r = (int)(RND * 127.0);
- for(int i = 0; i < N_RES_POINTS; i++) {
- Prespoints[i] = r;
- if((RND < 0.1) && (type == 0))
- r = (int)(RND * 127.0);
- if((RND < 0.3) && (type == 1))
- r = (int)(RND * 127.0);
- if(type == 2)
- r = (int)(RND * 127.0);
- }
- smooth();
-}
-
-/*
- * Interpolate the peaks
- */
-void Resonance::interpolatepeaks(int type)
-{
- int x1 = 0, y1 = Prespoints[0];
- for(int i = 1; i < N_RES_POINTS; i++) {
- if((Prespoints[i] != 64) || (i + 1 == N_RES_POINTS)) {
- int y2 = Prespoints[i];
- for(int k = 0; k < i - x1; k++) {
- float x = (float) k / (i - x1);
- if(type == 0)
- x = (1 - cos(x * PI)) * 0.5;
- Prespoints[x1 + k] = (int)(y1 * (1.0 - x) + y2 * x);
- }
- x1 = i;
- y1 = y2;
- }
- }
-}
-
-/*
- * Get the frequency from x, where x is [0..1]; x is the x coordinate
- */
-REALTYPE Resonance::getfreqx(REALTYPE x)
-{
- if(x > 1.0)
- x = 1.0;
- REALTYPE octf = pow(2.0, getoctavesfreq());
- return getcenterfreq() / sqrt(octf) * pow(octf, x);
-}
-
-/*
- * Get the x coordinate from frequency (used by the UI)
- */
-REALTYPE Resonance::getfreqpos(REALTYPE freq)
-{
- return (log(freq) - log(getfreqx(0.0))) / log(2.0) / getoctavesfreq();
-}
-
-/*
- * Get the center frequency of the resonance graph
- */
-REALTYPE Resonance::getcenterfreq()
-{
- return 10000.0 * pow(10, -(1.0 - Pcenterfreq / 127.0) * 2.0);
-}
-
-/*
- * Get the number of octave that the resonance functions applies to
- */
-REALTYPE Resonance::getoctavesfreq()
-{
- return 0.25 + 10.0 * Poctavesfreq / 127.0;
-}
-
-void Resonance::sendcontroller(MidiControllers ctl, REALTYPE par)
-{
- if(ctl == C_resonance_center)
- ctlcenter = par;
- else
- ctlbw = par;
-}
-
-
-
-
-void Resonance::add2XML(XMLwrapper *xml)
-{
- xml->addparbool("enabled", Penabled);
-
- if((Penabled == 0) && (xml->minimal))
- return;
-
- xml->addpar("max_db", PmaxdB);
- xml->addpar("center_freq", Pcenterfreq);
- xml->addpar("octaves_freq", Poctavesfreq);
- xml->addparbool("protect_fundamental_frequency", Pprotectthefundamental);
- xml->addpar("resonance_points", N_RES_POINTS);
- for(int i = 0; i < N_RES_POINTS; i++) {
- xml->beginbranch("RESPOINT", i);
- xml->addpar("val", Prespoints[i]);
- xml->endbranch();
- }
-}
-
-
-void Resonance::getfromXML(XMLwrapper *xml)
-{
- Penabled = xml->getparbool("enabled", Penabled);
-
- PmaxdB = xml->getpar127("max_db", PmaxdB);
- Pcenterfreq = xml->getpar127("center_freq", Pcenterfreq);
- Poctavesfreq = xml->getpar127("octaves_freq", Poctavesfreq);
- Pprotectthefundamental = xml->getparbool("protect_fundamental_frequency",
- Pprotectthefundamental);
- for(int i = 0; i < N_RES_POINTS; i++) {
- if(xml->enterbranch("RESPOINT", i) == 0)
- continue;
- Prespoints[i] = xml->getpar127("val", Prespoints[i]);
- xml->exitbranch();
- }
-}
-
diff --git a/plugins/zynaddsubfx/src/Synth/Resonance.h b/plugins/zynaddsubfx/src/Synth/Resonance.h
deleted file mode 100644
index 6df4309..0000000
--- a/plugins/zynaddsubfx/src/Synth/Resonance.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Resonance.h - Resonance
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-#ifndef RESONANCE_H
-#define RESONANCE_H
-
-#include "../globals.h"
-#include "../Misc/Util.h"
-#include "../Misc/XMLwrapper.h"
-#include "../Params/Presets.h"
-
-#define N_RES_POINTS 256
-
-class Resonance:public Presets
-{
- public:
- Resonance();
- ~Resonance();
- void setpoint(int n, unsigned char p);
- void applyres(int n, FFTFREQS fftdata, REALTYPE freq);
- void smooth();
- void interpolatepeaks(int type);
- void randomize(int type);
-
- void add2XML(XMLwrapper *xml);
- void defaults();
- void getfromXML(XMLwrapper *xml);
-
-
- REALTYPE getfreqpos(REALTYPE freq);
- REALTYPE getfreqx(REALTYPE x);
- REALTYPE getfreqresponse(REALTYPE freq);
- REALTYPE getcenterfreq();
- REALTYPE getoctavesfreq();
- void sendcontroller(MidiControllers ctl, REALTYPE par);
-
- //parameters
- unsigned char Penabled; //if the ressonance is enabled
- unsigned char Prespoints[N_RES_POINTS]; //how many points define the resonance function
- unsigned char PmaxdB; //how many dB the signal may be amplified
- unsigned char Pcenterfreq, Poctavesfreq; //the center frequency of the res. func., and the number of octaves
- unsigned char Pprotectthefundamental; //the fundamental (1-st harmonic) is not damped, even it resonance function is low
-
- //controllers
- REALTYPE ctlcenter; //center frequency(relative)
- REALTYPE ctlbw; //bandwidth(relative)
-
- private:
-};
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/Synth/SUBnote.cpp b/plugins/zynaddsubfx/src/Synth/SUBnote.cpp
deleted file mode 100644
index 0ef0757..0000000
--- a/plugins/zynaddsubfx/src/Synth/SUBnote.cpp
+++ /dev/null
@@ -1,790 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- SUBnote.cpp - The "subtractive" synthesizer
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#include <math.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "../globals.h"
-#include "SUBnote.h"
-#include "../Misc/Util.h"
-
-SUBnote::SUBnote(SUBnoteParameters *parameters,
- Controller *ctl_,
- REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote,
- bool besilent)
-{
- ready = 0;
-
- tmpsmp = new REALTYPE[SOUND_BUFFER_SIZE];
- tmprnd = new REALTYPE[SOUND_BUFFER_SIZE];
-
- // Initialise some legato-specific vars
- Legato.msg = LM_Norm;
- Legato.fade.length = (int)(SAMPLE_RATE * 0.005); // 0.005 seems ok.
- if(Legato.fade.length < 1)
- Legato.fade.length = 1; // (if something's fishy)
- Legato.fade.step = (1.0 / Legato.fade.length);
- Legato.decounter = -10;
- Legato.param.freq = freq;
- Legato.param.vel = velocity;
- Legato.param.portamento = portamento_;
- Legato.param.midinote = midinote;
- Legato.silent = besilent;
-
- pars = parameters;
- ctl = ctl_;
- portamento = portamento_;
- NoteEnabled = ON;
- volume = pow(0.1, 3.0 * (1.0 - pars->PVolume / 96.0)); //-60 dB .. 0 dB
- volume *= VelF(velocity, pars->PAmpVelocityScaleFunction);
- if(pars->PPanning != 0)
- panning = pars->PPanning / 127.0;
- else
- panning = RND;
- numstages = pars->Pnumstages;
- stereo = pars->Pstereo;
- start = pars->Pstart;
- firsttick = 1;
- int pos[MAX_SUB_HARMONICS];
-
- if(pars->Pfixedfreq == 0)
- basefreq = freq;
- else {
- basefreq = 440.0;
- int fixedfreqET = pars->PfixedfreqET;
- if(fixedfreqET != 0) { //if the frequency varies according the keyboard note
- REALTYPE tmp =
- (midinote
- - 69.0) / 12.0 * (pow(2.0, (fixedfreqET - 1) / 63.0) - 1.0);
- if(fixedfreqET <= 64)
- basefreq *= pow(2.0, tmp);
- else
- basefreq *= pow(3.0, tmp);
- }
- }
- REALTYPE detune = getdetune(pars->PDetuneType,
- pars->PCoarseDetune,
- pars->PDetune);
- basefreq *= pow(2.0, detune / 1200.0); //detune
-// basefreq*=ctl->pitchwheel.relfreq;//pitch wheel
-
- //global filter
- GlobalFilterCenterPitch = pars->GlobalFilter->getfreq() //center freq
- + (pars->PGlobalFilterVelocityScale / 127.0 * 6.0) //velocity sensing
- * (VelF(velocity,
- pars->PGlobalFilterVelocityScaleFunction)
- - 1);
-
- GlobalFilterL = NULL;
- GlobalFilterR = NULL;
- GlobalFilterEnvelope = NULL;
-
- //select only harmonics that desire to compute
- numharmonics = 0;
- for(int n = 0; n < MAX_SUB_HARMONICS; n++) {
- if(pars->Phmag[n] == 0)
- continue;
- if(n * basefreq > SAMPLE_RATE / 2.0)
- break; //remove the freqs above the Nyquist freq
- pos[numharmonics++] = n;
- }
- firstnumharmonics = numharmonics; //(gf)Useful in legato mode.
-
- if(numharmonics == 0) {
- NoteEnabled = OFF;
- return;
- }
-
-
- lfilter = new bpfilter[numstages * numharmonics];
- if(stereo != 0)
- rfilter = new bpfilter[numstages * numharmonics];
-
- //how much the amplitude is normalised (because the harmonics)
- REALTYPE reduceamp = 0.0;
-
- for(int n = 0; n < numharmonics; n++) {
- REALTYPE freq = basefreq * (pos[n] + 1);
-
- //the bandwidth is not absolute(Hz); it is relative to frequency
- REALTYPE bw =
- pow(10, (pars->Pbandwidth - 127.0) / 127.0 * 4) * numstages;
-
- //Bandwidth Scale
- bw *= pow(1000 / freq, (pars->Pbwscale - 64.0) / 64.0 * 3.0);
-
- //Relative BandWidth
- bw *= pow(100, (pars->Phrelbw[pos[n]] - 64.0) / 64.0);
-
- if(bw > 25.0)
- bw = 25.0;
-
- //try to keep same amplitude on all freqs and bw. (empirically)
- REALTYPE gain = sqrt(1500.0 / (bw * freq));
-
- REALTYPE hmagnew = 1.0 - pars->Phmag[pos[n]] / 127.0;
- REALTYPE hgain;
-
- switch(pars->Phmagtype) {
- case 1:
- hgain = exp(hmagnew * log(0.01));
- break;
- case 2:
- hgain = exp(hmagnew * log(0.001));
- break;
- case 3:
- hgain = exp(hmagnew * log(0.0001));
- break;
- case 4:
- hgain = exp(hmagnew * log(0.00001));
- break;
- default:
- hgain = 1.0 - hmagnew;
- }
- gain *= hgain;
- reduceamp += hgain;
-
- for(int nph = 0; nph < numstages; nph++) {
- REALTYPE amp = 1.0;
- if(nph == 0)
- amp = gain;
- initfilter(lfilter[nph + n * numstages], freq, bw, amp, hgain);
- if(stereo != 0)
- initfilter(rfilter[nph + n * numstages], freq, bw, amp, hgain);
- }
- }
-
- if(reduceamp < 0.001)
- reduceamp = 1.0;
- volume /= reduceamp;
-
- oldpitchwheel = 0;
- oldbandwidth = 64;
- if(pars->Pfixedfreq == 0)
- initparameters(basefreq);
- else
- initparameters(basefreq / 440.0 * freq);
-
- oldamplitude = newamplitude;
- ready = 1;
-}
-
-
-// SUBlegatonote: This function is (mostly) a copy of SUBnote(...) and
-// initparameters(...) stuck together with some lines removed so that
-// it only alter the already playing note (to perform legato). It is
-// possible I left stuff that is not required for this.
-void SUBnote::SUBlegatonote(REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote,
- bool externcall)
-{
- //SUBnoteParameters *parameters=pars;
- //Controller *ctl_=ctl;
-
- // Manage legato stuff
- if(externcall)
- Legato.msg = LM_Norm;
- if(Legato.msg != LM_CatchUp) {
- Legato.lastfreq = Legato.param.freq;
- Legato.param.freq = freq;
- Legato.param.vel = velocity;
- Legato.param.portamento = portamento_;
- Legato.param.midinote = midinote;
- if(Legato.msg == LM_Norm) {
- if(Legato.silent) {
- Legato.fade.m = 0.0;
- Legato.msg = LM_FadeIn;
- }
- else {
- Legato.fade.m = 1.0;
- Legato.msg = LM_FadeOut;
- return;
- }
- }
- if(Legato.msg == LM_ToNorm)
- Legato.msg = LM_Norm;
- }
-
- portamento = portamento_;
-
- volume = pow(0.1, 3.0 * (1.0 - pars->PVolume / 96.0)); //-60 dB .. 0 dB
- volume *= VelF(velocity, pars->PAmpVelocityScaleFunction);
- if(pars->PPanning != 0)
- panning = pars->PPanning / 127.0;
- else
- panning = RND;
-
- ///start=pars->Pstart;
-
- int pos[MAX_SUB_HARMONICS];
-
- if(pars->Pfixedfreq == 0)
- basefreq = freq;
- else {
- basefreq = 440.0;
- int fixedfreqET = pars->PfixedfreqET;
- if(fixedfreqET != 0) { //if the frequency varies according the keyboard note
- REALTYPE tmp =
- (midinote
- - 69.0) / 12.0 * (pow(2.0, (fixedfreqET - 1) / 63.0) - 1.0);
- if(fixedfreqET <= 64)
- basefreq *= pow(2.0, tmp);
- else
- basefreq *= pow(3.0, tmp);
- }
- }
- REALTYPE detune = getdetune(pars->PDetuneType,
- pars->PCoarseDetune,
- pars->PDetune);
- basefreq *= pow(2.0, detune / 1200.0); //detune
-
- //global filter
- GlobalFilterCenterPitch = pars->GlobalFilter->getfreq() //center freq
- + (pars->PGlobalFilterVelocityScale / 127.0 * 6.0) //velocity sensing
- * (VelF(velocity,
- pars->PGlobalFilterVelocityScaleFunction)
- - 1);
-
-
- int legatonumharmonics = 0;
- for(int n = 0; n < MAX_SUB_HARMONICS; n++) {
- if(pars->Phmag[n] == 0)
- continue;
- if(n * basefreq > SAMPLE_RATE / 2.0)
- break; //remove the freqs above the Nyquist freq
- pos[legatonumharmonics++] = n;
- }
- if(legatonumharmonics > firstnumharmonics)
- numharmonics = firstnumharmonics;
- else
- numharmonics = legatonumharmonics;
-
- if(numharmonics == 0) {
- NoteEnabled = OFF;
- return;
- }
-
-
- //how much the amplitude is normalised (because the harmonics)
- REALTYPE reduceamp = 0.0;
-
- for(int n = 0; n < numharmonics; n++) {
- REALTYPE freq = basefreq * (pos[n] + 1);
-
- //the bandwidth is not absolute(Hz); it is relative to frequency
- REALTYPE bw =
- pow(10, (pars->Pbandwidth - 127.0) / 127.0 * 4) * numstages;
-
- //Bandwidth Scale
- bw *= pow(1000 / freq, (pars->Pbwscale - 64.0) / 64.0 * 3.0);
-
- //Relative BandWidth
- bw *= pow(100, (pars->Phrelbw[pos[n]] - 64.0) / 64.0);
-
- if(bw > 25.0)
- bw = 25.0;
-
- //try to keep same amplitude on all freqs and bw. (empirically)
- REALTYPE gain = sqrt(1500.0 / (bw * freq));
-
- REALTYPE hmagnew = 1.0 - pars->Phmag[pos[n]] / 127.0;
- REALTYPE hgain;
-
- switch(pars->Phmagtype) {
- case 1:
- hgain = exp(hmagnew * log(0.01));
- break;
- case 2:
- hgain = exp(hmagnew * log(0.001));
- break;
- case 3:
- hgain = exp(hmagnew * log(0.0001));
- break;
- case 4:
- hgain = exp(hmagnew * log(0.00001));
- break;
- default:
- hgain = 1.0 - hmagnew;
- }
- gain *= hgain;
- reduceamp += hgain;
-
- for(int nph = 0; nph < numstages; nph++) {
- REALTYPE amp = 1.0;
- if(nph == 0)
- amp = gain;
- initfilter(lfilter[nph + n * numstages], freq, bw, amp, hgain);
- if(stereo != 0)
- initfilter(rfilter[nph + n * numstages], freq, bw, amp, hgain);
- }
- }
-
- if(reduceamp < 0.001)
- reduceamp = 1.0;
- volume /= reduceamp;
-
- oldpitchwheel = 0;
- oldbandwidth = 64;
-
- if(pars->Pfixedfreq == 0)
- freq = basefreq;
- else
- freq *= basefreq / 440.0;
-
-
- ///////////////
- // Altered initparameters(...) content:
-
- if(pars->PGlobalFilterEnabled != 0) {
- globalfiltercenterq = pars->GlobalFilter->getq();
- GlobalFilterFreqTracking = pars->GlobalFilter->getfreqtracking(basefreq);
- }
-
- // end of the altered initparameters function content.
- ///////////////
-
- oldamplitude = newamplitude;
-
- // End of the SUBlegatonote function.
-}
-
-
-SUBnote::~SUBnote()
-{
- if(NoteEnabled != OFF)
- KillNote();
- delete [] tmpsmp;
- delete [] tmprnd;
-}
-
-/*
- * Kill the note
- */
-void SUBnote::KillNote()
-{
- if(NoteEnabled != OFF) {
- delete [] lfilter;
- lfilter = NULL;
- if(stereo != 0)
- delete [] rfilter;
- rfilter = NULL;
- delete (AmpEnvelope);
- if(FreqEnvelope != NULL)
- delete (FreqEnvelope);
- if(BandWidthEnvelope != NULL)
- delete (BandWidthEnvelope);
- NoteEnabled = OFF;
- }
-}
-
-
-/*
- * Compute the filters coefficients
- */
-void SUBnote::computefiltercoefs(bpfilter &filter,
- REALTYPE freq,
- REALTYPE bw,
- REALTYPE gain)
-{
- if(freq > SAMPLE_RATE / 2.0 - 200.0)
- freq = SAMPLE_RATE / 2.0 - 200.0;
- ;
-
- REALTYPE omega = 2.0 * PI * freq / SAMPLE_RATE;
- REALTYPE sn = sin(omega);
- REALTYPE cs = cos(omega);
- REALTYPE alpha = sn * sinh(LOG_2 / 2.0 * bw * omega / sn);
-
- if(alpha > 1)
- alpha = 1;
- if(alpha > bw)
- alpha = bw;
-
- filter.b0 = alpha / (1.0 + alpha) * filter.amp * gain;
- filter.b2 = -alpha / (1.0 + alpha) * filter.amp * gain;
- filter.a1 = -2.0 * cs / (1.0 + alpha);
- filter.a2 = (1.0 - alpha) / (1.0 + alpha);
-}
-
-
-/*
- * Initialise the filters
- */
-void SUBnote::initfilter(bpfilter &filter,
- REALTYPE freq,
- REALTYPE bw,
- REALTYPE amp,
- REALTYPE mag)
-{
- filter.xn1 = 0.0;
- filter.xn2 = 0.0;
-
- if(start == 0) {
- filter.yn1 = 0.0;
- filter.yn2 = 0.0;
- }
- else {
- REALTYPE a = 0.1 * mag; //empirically
- REALTYPE p = RND * 2.0 * PI;
- if(start == 1)
- a *= RND;
- filter.yn1 = a * cos(p);
- filter.yn2 = a * cos(p + freq * 2.0 * PI / SAMPLE_RATE);
-
- //correct the error of computation the start amplitude
- //at very high frequencies
- if(freq > SAMPLE_RATE * 0.96) {
- filter.yn1 = 0.0;
- filter.yn2 = 0.0;
- }
- }
-
- filter.amp = amp;
- filter.freq = freq;
- filter.bw = bw;
- computefiltercoefs(filter, freq, bw, 1.0);
-}
-
-/*
- * Do the filtering
- */
-void SUBnote::filter(bpfilter &filter, REALTYPE *smps)
-{
- int i;
- REALTYPE out;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- out = smps[i] * filter.b0 + filter.b2 * filter.xn2
- - filter.a1 * filter.yn1 - filter.a2 * filter.yn2;
- filter.xn2 = filter.xn1;
- filter.xn1 = smps[i];
- filter.yn2 = filter.yn1;
- filter.yn1 = out;
- smps[i] = out;
- }
-}
-
-/*
- * Init Parameters
- */
-void SUBnote::initparameters(REALTYPE freq)
-{
- AmpEnvelope = new Envelope(pars->AmpEnvelope, freq);
- if(pars->PFreqEnvelopeEnabled != 0)
- FreqEnvelope = new Envelope(pars->FreqEnvelope, freq);
- else
- FreqEnvelope = NULL;
- if(pars->PBandWidthEnvelopeEnabled != 0)
- BandWidthEnvelope = new Envelope(pars->BandWidthEnvelope, freq);
- else
- BandWidthEnvelope = NULL;
- if(pars->PGlobalFilterEnabled != 0) {
- globalfiltercenterq = pars->GlobalFilter->getq();
- GlobalFilterL = new Filter(pars->GlobalFilter);
- if(stereo != 0)
- GlobalFilterR = new Filter(pars->GlobalFilter);
- GlobalFilterEnvelope = new Envelope(pars->GlobalFilterEnvelope,
- freq);
- GlobalFilterFreqTracking = pars->GlobalFilter->getfreqtracking(basefreq);
- }
- computecurrentparameters();
-}
-
-
-/*
- * Compute Parameters of SUBnote for each tick
- */
-void SUBnote::computecurrentparameters()
-{
- if((FreqEnvelope != NULL) || (BandWidthEnvelope != NULL)
- || (oldpitchwheel != ctl->pitchwheel.data)
- || (oldbandwidth != ctl->bandwidth.data)
- || (portamento != 0)) {
- REALTYPE envfreq = 1.0;
- REALTYPE envbw = 1.0;
- REALTYPE gain = 1.0;
-
- if(FreqEnvelope != NULL) {
- envfreq = FreqEnvelope->envout() / 1200;
- envfreq = pow(2.0, envfreq);
- }
- envfreq *= ctl->pitchwheel.relfreq; //pitch wheel
- if(portamento != 0) { //portamento is used
- envfreq *= ctl->portamento.freqrap;
- if(ctl->portamento.used == 0) //the portamento has finished
- portamento = 0; //this note is no longer "portamented"
- ;
- }
-
- if(BandWidthEnvelope != NULL) {
- envbw = BandWidthEnvelope->envout();
- envbw = pow(2, envbw);
- }
- envbw *= ctl->bandwidth.relbw; //bandwidth controller
-
- REALTYPE tmpgain = 1.0 / sqrt(envbw * envfreq);
-
- for(int n = 0; n < numharmonics; n++) {
- for(int nph = 0; nph < numstages; nph++) {
- if(nph == 0)
- gain = tmpgain;
- else
- gain = 1.0;
- computefiltercoefs(lfilter[nph + n * numstages],
- lfilter[nph + n * numstages].freq * envfreq,
- lfilter[nph + n * numstages].bw * envbw,
- gain);
- }
- }
- if(stereo != 0)
- for(int n = 0; n < numharmonics; n++) {
- for(int nph = 0; nph < numstages; nph++) {
- if(nph == 0)
- gain = tmpgain;
- else
- gain = 1.0;
- computefiltercoefs(
- rfilter[nph + n * numstages],
- rfilter[nph + n
- * numstages].freq * envfreq,
- rfilter[nph + n * numstages].bw * envbw,
- gain);
- }
- }
- ;
- oldbandwidth = ctl->bandwidth.data;
- oldpitchwheel = ctl->pitchwheel.data;
- }
- newamplitude = volume * AmpEnvelope->envout_dB() * 2.0;
-
- //Filter
- if(GlobalFilterL != NULL) {
- REALTYPE globalfilterpitch = GlobalFilterCenterPitch
- + GlobalFilterEnvelope->envout();
- REALTYPE filterfreq = globalfilterpitch + ctl->filtercutoff.relfreq
- + GlobalFilterFreqTracking;
- filterfreq = GlobalFilterL->getrealfreq(filterfreq);
-
- GlobalFilterL->setfreq_and_q(filterfreq,
- globalfiltercenterq * ctl->filterq.relq);
- if(GlobalFilterR != NULL)
- GlobalFilterR->setfreq_and_q(
- filterfreq,
- globalfiltercenterq
- * ctl->filterq.relq);
- }
-}
-
-/*
- * Note Output
- */
-int SUBnote::noteout(REALTYPE *outl, REALTYPE *outr)
-{
- int i;
-
- memcpy(outl, denormalkillbuf, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- memcpy(outr, denormalkillbuf, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
-
- if(NoteEnabled == OFF)
- return 0;
-
- //left channel
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmprnd[i] = RND * 2.0 - 1.0;
- for(int n = 0; n < numharmonics; n++) {
- memcpy(tmpsmp, tmprnd, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- for(int nph = 0; nph < numstages; nph++)
- filter(lfilter[nph + n * numstages], tmpsmp);
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- outl[i] += tmpsmp[i];
- }
-
- if(GlobalFilterL != NULL)
- GlobalFilterL->filterout(&outl[0]);
-
- //right channel
- if(stereo != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- tmprnd[i] = RND * 2.0 - 1.0;
- for(int n = 0; n < numharmonics; n++) {
- memcpy(tmpsmp, tmprnd, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- for(int nph = 0; nph < numstages; nph++)
- filter(rfilter[nph + n * numstages], tmpsmp);
- for(i = 0; i < SOUND_BUFFER_SIZE; i++)
- outr[i] += tmpsmp[i];
- }
- if(GlobalFilterR != NULL)
- GlobalFilterR->filterout(&outr[0]);
- }
- else
- memcpy(outr, outl, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
-
- if(firsttick != 0) {
- int n = 10;
- if(n > SOUND_BUFFER_SIZE)
- n = SOUND_BUFFER_SIZE;
- for(i = 0; i < n; i++) {
- REALTYPE ampfadein = 0.5 - 0.5 * cos(
- (REALTYPE) i / (REALTYPE) n * PI);
- outl[i] *= ampfadein;
- outr[i] *= ampfadein;
- }
- firsttick = 0;
- }
-
- if(ABOVE_AMPLITUDE_THRESHOLD(oldamplitude, newamplitude)) {
- // Amplitude interpolation
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE tmpvol = INTERPOLATE_AMPLITUDE(oldamplitude,
- newamplitude,
- i,
- SOUND_BUFFER_SIZE);
- outl[i] *= tmpvol * panning;
- outr[i] *= tmpvol * (1.0 - panning);
- }
- }
- else {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] *= newamplitude * panning;
- outr[i] *= newamplitude * (1.0 - panning);
- }
- }
-
- oldamplitude = newamplitude;
- computecurrentparameters();
-
- // Apply legato-specific sound signal modifications
- if(Legato.silent) // Silencer
- if(Legato.msg != LM_FadeIn) {
- memset(outl, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- memset(outr, 0, SOUND_BUFFER_SIZE * sizeof(REALTYPE));
- }
- switch(Legato.msg) {
- case LM_CatchUp: // Continue the catch-up...
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //Yea, could be done without the loop...
- Legato.decounter--;
- if(Legato.decounter < 1) {
- // Catching-up done, we can finally set
- // the note to the actual parameters.
- Legato.decounter = -10;
- Legato.msg = LM_ToNorm;
- SUBlegatonote(Legato.param.freq,
- Legato.param.vel,
- Legato.param.portamento,
- Legato.param.midinote,
- false);
- break;
- }
- }
- break;
- case LM_FadeIn: // Fade-in
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- Legato.silent = false;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- Legato.decounter--;
- if(Legato.decounter < 1) {
- Legato.decounter = -10;
- Legato.msg = LM_Norm;
- break;
- }
- Legato.fade.m += Legato.fade.step;
- outl[i] *= Legato.fade.m;
- outr[i] *= Legato.fade.m;
- }
- break;
- case LM_FadeOut: // Fade-out, then set the catch-up
- if(Legato.decounter == -10)
- Legato.decounter = Legato.fade.length;
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) {
- Legato.decounter--;
- if(Legato.decounter < 1) {
- for(int j = i; j < SOUND_BUFFER_SIZE; j++) {
- outl[j] = 0.0;
- outr[j] = 0.0;
- }
- Legato.decounter = -10;
- Legato.silent = true;
- // Fading-out done, now set the catch-up :
- Legato.decounter = Legato.fade.length;
- Legato.msg = LM_CatchUp;
- REALTYPE catchupfreq = Legato.param.freq
- * (Legato.param.freq / Legato.lastfreq); //This freq should make this now silent note to catch-up (or should I say resync ?) with the heard note for the same length it stayed at the previous freq during the fadeout.
- SUBlegatonote(catchupfreq,
- Legato.param.vel,
- Legato.param.portamento,
- Legato.param.midinote,
- false);
- break;
- }
- Legato.fade.m -= Legato.fade.step;
- outl[i] *= Legato.fade.m;
- outr[i] *= Legato.fade.m;
- }
- break;
- default:
- break;
- }
-
- // Check if the note needs to be computed more
- if(AmpEnvelope->finished() != 0) {
- for(i = 0; i < SOUND_BUFFER_SIZE; i++) { //fade-out
- REALTYPE tmp = 1.0 - (REALTYPE)i / (REALTYPE)SOUND_BUFFER_SIZE;
- outl[i] *= tmp;
- outr[i] *= tmp;
- }
- KillNote();
- }
- return 1;
-}
-
-/*
- * Relase Key (Note Off)
- */
-void SUBnote::relasekey()
-{
- AmpEnvelope->relasekey();
- if(FreqEnvelope != NULL)
- FreqEnvelope->relasekey();
- if(BandWidthEnvelope != NULL)
- BandWidthEnvelope->relasekey();
- if(GlobalFilterEnvelope != NULL)
- GlobalFilterEnvelope->relasekey();
-}
-
-/*
- * Check if the note is finished
- */
-int SUBnote::finished()
-{
- if(NoteEnabled == OFF)
- return 1;
- else
- return 0;
-}
-
diff --git a/plugins/zynaddsubfx/src/Synth/SUBnote.h b/plugins/zynaddsubfx/src/Synth/SUBnote.h
deleted file mode 100644
index e6b875e..0000000
--- a/plugins/zynaddsubfx/src/Synth/SUBnote.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- SUBnote.h - The subtractive synthesizer
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-#ifndef SUB_NOTE_H
-#define SUB_NOTE_H
-
-#include "../globals.h"
-#include "../Params/SUBnoteParameters.h"
-#include "../Params/Controller.h"
-#include "Envelope.h"
-#include "../DSP/Filter.h"
-
-class SUBnote
-{
- public:
- SUBnote(SUBnoteParameters *parameters,
- Controller *ctl_,
- REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote,
- bool besilent);
- ~SUBnote();
-
- void SUBlegatonote(REALTYPE freq,
- REALTYPE velocity,
- int portamento_,
- int midinote,
- bool externcall);
-
- int noteout(REALTYPE *outl, REALTYPE *outr); //note output,return 0 if the note is finished
- void relasekey();
- int finished();
-
- int ready; //if I can get the sampledata
-
- private:
-
- void computecurrentparameters();
- void initparameters(REALTYPE freq);
- void KillNote();
-
- SUBnoteParameters *pars;
-
- //parameters
- int stereo;
- int numstages; //number of stages of filters
- int numharmonics; //number of harmonics (after the too higher hamonics are removed)
- int firstnumharmonics; //To keep track of the first note's numharmonics value, useful in legato mode.
- int start; //how the harmonics start
- REALTYPE basefreq;
- REALTYPE panning;
- Envelope *AmpEnvelope;
- Envelope *FreqEnvelope;
- Envelope *BandWidthEnvelope;
-
- Filter *GlobalFilterL, *GlobalFilterR;
-
- Envelope *GlobalFilterEnvelope;
-
- //internal values
- ONOFFTYPE NoteEnabled;
- int firsttick, portamento;
- REALTYPE volume, oldamplitude, newamplitude;
-
- REALTYPE GlobalFilterCenterPitch; //octaves
- REALTYPE GlobalFilterFreqTracking;
-
- struct bpfilter {
- REALTYPE freq, bw, amp; //filter parameters
- REALTYPE a1, a2, b0, b2; //filter coefs. b1=0
- REALTYPE xn1, xn2, yn1, yn2; //filter internal values
- };
-
- void initfilter(bpfilter &filter,
- REALTYPE freq,
- REALTYPE bw,
- REALTYPE amp,
- REALTYPE mag);
- void computefiltercoefs(bpfilter &filter,
- REALTYPE freq,
- REALTYPE bw,
- REALTYPE gain);
- inline void filter(bpfilter &filter, REALTYPE *smps);
-
- bpfilter *lfilter, *rfilter;
-
- REALTYPE *tmpsmp;
- REALTYPE *tmprnd; //this is filled with random numbers
-
- Controller *ctl;
- int oldpitchwheel, oldbandwidth;
- REALTYPE globalfiltercenterq;
-
- // Legato vars
- struct {
- bool silent;
- REALTYPE lastfreq;
- LegatoMsg msg;
- int decounter;
- struct { // Fade In/Out vars
- int length;
- REALTYPE m, step;
- } fade;
- struct { // Note parameters
- REALTYPE freq, vel;
- int portamento, midinote;
- } param;
- } Legato;
-};
-
-
-
-
-#endif
-
diff --git a/plugins/zynaddsubfx/src/UI/ADnoteUI.cc b/plugins/zynaddsubfx/src/UI/ADnoteUI.cc
deleted file mode 100644
index bf32baa..0000000
--- a/plugins/zynaddsubfx/src/UI/ADnoteUI.cc
+++ /dev/null
@@ -1,2202 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "ADnoteUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-void ADvoicelistitem::cb_voicevolume_i(Fl_Value_Slider* o, void*) {
- pars->VoicePar[nvoice].PVolume=(int)o->value();
-}
-void ADvoicelistitem::cb_voicevolume(Fl_Value_Slider* o, void* v) {
- ((ADvoicelistitem*)(o->parent()->parent()->user_data()))->cb_voicevolume_i(o,v);
-}
-
-void ADvoicelistitem::cb_voiceresonanceenabled_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].Presonance=(int)o->value();
-}
-void ADvoicelistitem::cb_voiceresonanceenabled(Fl_Check_Button* o, void* v) {
- ((ADvoicelistitem*)(o->parent()->parent()->user_data()))->cb_voiceresonanceenabled_i(o,v);
-}
-
-void ADvoicelistitem::cb_voicelfofreq_i(Fl_Value_Slider* o, void*) {
- pars->VoicePar[nvoice].FreqLfo->Pintensity=(int)o->value();
-}
-void ADvoicelistitem::cb_voicelfofreq(Fl_Value_Slider* o, void* v) {
- ((ADvoicelistitem*)(o->parent()->parent()->user_data()))->cb_voicelfofreq_i(o,v);
-}
-
-void ADvoicelistitem::cb_voicepanning_i(WidgetPDial* o, void*) {
- pars->VoicePar[nvoice].PPanning=(int) o->value();
-}
-void ADvoicelistitem::cb_voicepanning(WidgetPDial* o, void* v) {
- ((ADvoicelistitem*)(o->parent()->parent()->user_data()))->cb_voicepanning_i(o,v);
-}
-
-void ADvoicelistitem::cb_detunevalueoutput_i(Fl_Value_Output* o, void*) {
- o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());
-}
-void ADvoicelistitem::cb_detunevalueoutput(Fl_Value_Output* o, void* v) {
- ((ADvoicelistitem*)(o->parent()->parent()->user_data()))->cb_detunevalueoutput_i(o,v);
-}
-
-void ADvoicelistitem::cb_voicedetune_i(Fl_Slider* o, void*) {
- pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();
-}
-void ADvoicelistitem::cb_voicedetune(Fl_Slider* o, void* v) {
- ((ADvoicelistitem*)(o->parent()->parent()->user_data()))->cb_voicedetune_i(o,v);
-}
-
-void ADvoicelistitem::cb_noiselabel_i(Fl_Box* o, void*) {
- if (pars->VoicePar[nvoice].Type==0) {
- o->hide();
- voiceresonanceenabled->activate();
- detunevalueoutput->activate();
- voicedetune->activate();
- voicelfofreq->activate();
- voiceoscil->activate();
-} else {
- o->show();
- voiceresonanceenabled->deactivate();
- detunevalueoutput->deactivate();
- voicedetune->deactivate();
- voicelfofreq->deactivate();
- voiceoscil->deactivate();
-};
-}
-void ADvoicelistitem::cb_noiselabel(Fl_Box* o, void* v) {
- ((ADvoicelistitem*)(o->parent()->parent()->user_data()))->cb_noiselabel_i(o,v);
-}
-
-void ADvoicelistitem::cb_voiceenabled_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].Enabled=(int)o->value();
-if (o->value()==0) voicelistitemgroup->deactivate();
-else voicelistitemgroup->activate();
-o->redraw();
-}
-void ADvoicelistitem::cb_voiceenabled(Fl_Check_Button* o, void* v) {
- ((ADvoicelistitem*)(o->parent()->user_data()))->cb_voiceenabled_i(o,v);
-}
-
-Fl_Group* ADvoicelistitem::make_window() {
- { ADnoteVoiceListItem = new Fl_Group(0, 0, 615, 30);
- ADnoteVoiceListItem->box(FL_FLAT_BOX);
- ADnoteVoiceListItem->color(FL_BACKGROUND_COLOR);
- ADnoteVoiceListItem->selection_color(FL_BACKGROUND_COLOR);
- ADnoteVoiceListItem->labeltype(FL_NO_LABEL);
- ADnoteVoiceListItem->labelfont(0);
- ADnoteVoiceListItem->labelsize(14);
- ADnoteVoiceListItem->labelcolor(FL_FOREGROUND_COLOR);
- ADnoteVoiceListItem->user_data((void*)(this));
- ADnoteVoiceListItem->align(Fl_Align(FL_ALIGN_TOP));
- ADnoteVoiceListItem->when(FL_WHEN_RELEASE);
- { Fl_Group* o = voicelistitemgroup = new Fl_Group(50, 0, 570, 25);
- voicelistitemgroup->box(FL_FLAT_BOX);
- { Fl_Value_Slider* o = voicevolume = new Fl_Value_Slider(90, 5, 115, 20);
- voicevolume->tooltip("Volume");
- voicevolume->type(5);
- voicevolume->box(FL_FLAT_BOX);
- voicevolume->labelsize(8);
- voicevolume->maximum(127);
- voicevolume->step(1);
- voicevolume->callback((Fl_Callback*)cb_voicevolume);
- voicevolume->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(pars->VoicePar[nvoice].PVolume);
- } // Fl_Value_Slider* voicevolume
- { Fl_Check_Button* o = voiceresonanceenabled = new Fl_Check_Button(245, 7, 15, 17);
- voiceresonanceenabled->tooltip("Resonance On/Off");
- voiceresonanceenabled->down_box(FL_DOWN_BOX);
- voiceresonanceenabled->labeltype(FL_EMBOSSED_LABEL);
- voiceresonanceenabled->labelfont(1);
- voiceresonanceenabled->labelsize(11);
- voiceresonanceenabled->callback((Fl_Callback*)cb_voiceresonanceenabled);
- voiceresonanceenabled->align(Fl_Align(FL_ALIGN_LEFT));
- o->value(pars->VoicePar[nvoice].Presonance);
- } // Fl_Check_Button* voiceresonanceenabled
- { Fl_Value_Slider* o = voicelfofreq = new Fl_Value_Slider(500, 5, 115, 20);
- voicelfofreq->tooltip("Frequency LFO amount");
- voicelfofreq->type(5);
- voicelfofreq->box(FL_FLAT_BOX);
- voicelfofreq->labelsize(8);
- voicelfofreq->maximum(127);
- voicelfofreq->step(1);
- voicelfofreq->callback((Fl_Callback*)cb_voicelfofreq);
- voicelfofreq->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
- } // Fl_Value_Slider* voicelfofreq
- { WidgetPDial* o = voicepanning = new WidgetPDial(215, 5, 20, 20);
- voicepanning->tooltip("Panning (leftmost is Random)");
- voicepanning->box(FL_ROUND_UP_BOX);
- voicepanning->color(FL_BACKGROUND_COLOR);
- voicepanning->selection_color(FL_INACTIVE_COLOR);
- voicepanning->labeltype(FL_NORMAL_LABEL);
- voicepanning->labelfont(0);
- voicepanning->labelsize(10);
- voicepanning->labelcolor(FL_FOREGROUND_COLOR);
- voicepanning->maximum(127);
- voicepanning->step(1);
- voicepanning->callback((Fl_Callback*)cb_voicepanning);
- voicepanning->align(Fl_Align(FL_ALIGN_LEFT));
- voicepanning->when(FL_WHEN_CHANGED);
- o->value(pars->VoicePar[nvoice].PPanning);
- } // WidgetPDial* voicepanning
- { Fl_Group* o = voiceoscil = new Fl_Group(60, 5, 30, 20);
- voiceoscil->box(FL_THIN_DOWN_BOX);
- voiceoscil->color(FL_GRAY0);
- voiceoscil->selection_color((Fl_Color)71);
- voiceoscil->labelcolor((Fl_Color)179);
- osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
- osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
- if (pars->VoicePar[nvoice].Pextoscil != -1) {osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,master);}
- voiceoscil->end();
- } // Fl_Group* voiceoscil
- { Fl_Value_Output* o = detunevalueoutput = new Fl_Value_Output(265, 5, 45, 20);
- detunevalueoutput->labelsize(10);
- detunevalueoutput->minimum(-5000);
- detunevalueoutput->maximum(5000);
- detunevalueoutput->step(0.01);
- detunevalueoutput->textfont(1);
- detunevalueoutput->textsize(10);
- detunevalueoutput->callback((Fl_Callback*)cb_detunevalueoutput);
- detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(getdetune(pars->VoicePar[nvoice].PDetuneType,0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());
- } // Fl_Value_Output* detunevalueoutput
- { Fl_Slider* o = voicedetune = new Fl_Slider(315, 5, 185, 20);
- voicedetune->tooltip("Fine Detune (cents)");
- voicedetune->type(5);
- voicedetune->box(FL_FLAT_BOX);
- voicedetune->minimum(-8192);
- voicedetune->maximum(8191);
- voicedetune->step(1);
- voicedetune->callback((Fl_Callback*)cb_voicedetune);
- o->value(pars->VoicePar[nvoice].PDetune-8192);
- } // Fl_Slider* voicedetune
- { Fl_Box* o = noiselabel = new Fl_Box(65, 5, 20, 20, "N");
- noiselabel->labelfont(1);
- noiselabel->labelsize(13);
- noiselabel->labelcolor(FL_BACKGROUND2_COLOR);
- noiselabel->callback((Fl_Callback*)cb_noiselabel);
- if (pars->VoicePar[nvoice].Type==0) o->hide();
- } // Fl_Box* noiselabel
- if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();
- voicelistitemgroup->end();
- } // Fl_Group* voicelistitemgroup
- { Fl_Check_Button* o = voiceenabled = new Fl_Check_Button(30, 5, 20, 20, "01");
- voiceenabled->down_box(FL_DOWN_BOX);
- voiceenabled->labeltype(FL_EMBOSSED_LABEL);
- voiceenabled->labelfont(1);
- voiceenabled->labelsize(13);
- voiceenabled->callback((Fl_Callback*)cb_voiceenabled);
- voiceenabled->align(Fl_Align(FL_ALIGN_LEFT));
- char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));
- o->value(pars->VoicePar[nvoice].Enabled);
- } // Fl_Check_Button* voiceenabled
- ADnoteVoiceListItem->end();
- } // Fl_Group* ADnoteVoiceListItem
- return ADnoteVoiceListItem;
-}
-
-ADvoicelistitem::ADvoicelistitem(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- nvoice=0;
- pars=NULL;
-}
-
-void ADvoicelistitem::init(ADnoteParameters *parameters,int nvoice_,Master *master_) {
- pars=parameters;
- nvoice=nvoice_;
- master=master_;
- make_window();
- ADnoteVoiceListItem->show();
- end();
-}
-
-void ADvoicelistitem::refreshlist() {
- voiceenabled->value(pars->VoicePar[nvoice].Enabled);
- voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance);
- voicevolume->value(pars->VoicePar[nvoice].PVolume);
- voicedetune->value(pars->VoicePar[nvoice].PDetune-8192);
- voicepanning->value(pars->VoicePar[nvoice].PPanning);
- voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
- if (pars->VoicePar[nvoice].Pextoscil != -1) {
- osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
- } else
- osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
- if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate();
- else voicelistitemgroup->activate();
- detunevalueoutput->do_callback();
- noiselabel->do_callback();
- ADnoteVoiceListItem->redraw();
-}
-
-ADvoicelistitem::~ADvoicelistitem() {
- ADnoteVoiceListItem->hide();
- //delete(ADnoteVoiceListItem);
-}
-
-void ADvoiceUI::cb_Enable_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voiceFMfreqenvgroup->deactivate();
-else voiceFMfreqenvgroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Enable(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Enable_i(o,v);
-}
-
-void ADvoiceUI::cb_Coarse_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=1024;
-pars->VoicePar[nvoice].PFMCoarseDetune = k+
- (pars->VoicePar[nvoice].PFMCoarseDetune/1024)*1024;
-}
-void ADvoiceUI::cb_Coarse(Fl_Counter* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Coarse_i(o,v);
-}
-
-void ADvoiceUI::cb_Octave_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=16;
-pars->VoicePar[nvoice].PFMCoarseDetune = k*1024+
- pars->VoicePar[nvoice].PFMCoarseDetune%1024;
-}
-void ADvoiceUI::cb_Octave(Fl_Counter* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Octave_i(o,v);
-}
-
-void ADvoiceUI::cb__i(Fl_Slider* o, void*) {
- pars->VoicePar[nvoice].PFMDetune=(int)o->value()+8192;
-fmdetunevalueoutput->do_callback();
-}
-void ADvoiceUI::cb_(Fl_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb__i(o,v);
-}
-
-void ADvoiceUI::cb_fmdetunevalueoutput_i(Fl_Value_Output* o, void*) {
- o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));
-}
-void ADvoiceUI::cb_fmdetunevalueoutput(Fl_Value_Output* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_fmdetunevalueoutput_i(o,v);
-}
-
-void ADvoiceUI::cb_Detune_i(Fl_Choice* o, void*) {
- pars->VoicePar[nvoice].PFMDetuneType=(int) o->value();
-fmdetunevalueoutput->do_callback();
-}
-void ADvoiceUI::cb_Detune(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Detune_i(o,v);
-}
-
-void ADvoiceUI::cb_Vol_i(Fl_Value_Slider* o, void*) {
- pars->VoicePar[nvoice].PFMVolume=(int)o->value();
-}
-void ADvoiceUI::cb_Vol(Fl_Value_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Vol_i(o,v);
-}
-
-void ADvoiceUI::cb_V_i(Fl_Value_Slider* o, void*) {
- pars->VoicePar[nvoice].PFMVelocityScaleFunction=(int) o->value();
-}
-void ADvoiceUI::cb_V(Fl_Value_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_V_i(o,v);
-}
-
-void ADvoiceUI::cb_Enable1_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voiceFMampenvgroup->deactivate();
-else voiceFMampenvgroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Enable1(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Enable1_i(o,v);
-}
-
-void ADvoiceUI::cb_F_i(Fl_Value_Slider* o, void*) {
- pars->VoicePar[nvoice].PFMVolumeDamp=(int) o->value()+64;
-}
-void ADvoiceUI::cb_F(Fl_Value_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_F_i(o,v);
-}
-
-void ADvoiceUI::cb_changeFMoscilbutton_i(Fl_Button*, void*) {
- if (oscedit!=NULL) delete(oscedit);
-
-int nv=nvoice;
-if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;
-
-oscedit=new OscilEditor(pars->VoicePar[nv].FMSmp,fmoscil,NULL,NULL,master);
-}
-void ADvoiceUI::cb_changeFMoscilbutton(Fl_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_changeFMoscilbutton_i(o,v);
-}
-
-void ADvoiceUI::cb_Phase_i(Fl_Slider* o, void*) {
- pars->VoicePar[nvoice].PFMoscilphase=64-(int)o->value();
-oscFM->phase=64-(int) o->value();
-fmoscil->redraw();
-}
-void ADvoiceUI::cb_Phase(Fl_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Phase_i(o,v);
-}
-
-void ADvoiceUI::cb_Use_i(Fl_Choice* o, void*) {
- pars->VoicePar[nvoice].PextFMoscil=(int)o->value()-1;
-if ((int) o->value() != 0) {
- oscFM->init(pars->VoicePar[(int) o->value()-1].FMSmp,master);
- changeFMoscilbutton->labelcolor(FL_BLUE);
-} else {
- oscFM->init(pars->VoicePar[nvoice].FMSmp,master);
- changeFMoscilbutton->labelcolor(FL_BLACK);
-};
-voiceFMparametersgroup->redraw();
-}
-void ADvoiceUI::cb_Use(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Use_i(o,v);
-}
-
-void ADvoiceUI::cb_External_i(Fl_Choice* o, void*) {
- pars->VoicePar[nvoice].PFMVoice=(int)o->value()-1;
-if ((int) o->value() != 0) {
- modoscil->deactivate();
- modfrequency->deactivate();
-} else {
- modoscil->activate();
- modfrequency->activate();
-};
-voiceFMparametersgroup->redraw();
-}
-void ADvoiceUI::cb_External(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_External_i(o,v);
-}
-
-void ADvoiceUI::cb_Type_i(Fl_Choice* o, void*) {
- pars->VoicePar[nvoice].PFMEnabled=(int)o->value();
-if (o->value()==0) voiceFMparametersgroup->deactivate();
-else voiceFMparametersgroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Type(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Type_i(o,v);
-}
-
-Fl_Menu_Item ADvoiceUI::menu_Type[] = {
- {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"MORPH", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"RING", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"PM", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"FM", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"PITCH", 0, 0, 0, 1, FL_NORMAL_LABEL, 1, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void ADvoiceUI::cb_Enable2_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PFreqEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voicefreqenvgroup->deactivate();
-else voicefreqenvgroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Enable2(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Enable2_i(o,v);
-}
-
-void ADvoiceUI::cb_Enable3_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PFreqLfoEnabled=(int)o->value();
-if (o->value()==0) voicefreqlfogroup->deactivate();
-else voicefreqlfogroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Enable3(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Enable3_i(o,v);
-}
-
-void ADvoiceUI::cb_Octave1_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=16;
-pars->VoicePar[nvoice].PCoarseDetune = k*1024+
- pars->VoicePar[nvoice].PCoarseDetune%1024;
-}
-void ADvoiceUI::cb_Octave1(Fl_Counter* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Octave1_i(o,v);
-}
-
-void ADvoiceUI::cb_Coarse1_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=1024;
-pars->VoicePar[nvoice].PCoarseDetune = k+
- (pars->VoicePar[nvoice].PCoarseDetune/1024)*1024;
-}
-void ADvoiceUI::cb_Coarse1(Fl_Counter* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Coarse1_i(o,v);
-}
-
-void ADvoiceUI::cb_1_i(Fl_Slider* o, void*) {
- pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();
-}
-void ADvoiceUI::cb_1(Fl_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_1_i(o,v);
-}
-
-void ADvoiceUI::cb_detunevalueoutput1_i(Fl_Value_Output* o, void*) {
- o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());
-}
-void ADvoiceUI::cb_detunevalueoutput1(Fl_Value_Output* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_detunevalueoutput1_i(o,v);
-}
-
-void ADvoiceUI::cb_440Hz_i(Fl_Check_Button* o, void*) {
- int x=(int) o->value();
-pars->VoicePar[nvoice].Pfixedfreq=x;
-if (x==0) fixedfreqetdial->deactivate();
- else fixedfreqetdial->activate();
-}
-void ADvoiceUI::cb_440Hz(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_440Hz_i(o,v);
-}
-
-void ADvoiceUI::cb_fixedfreqetdial_i(WidgetPDial* o, void*) {
- pars->VoicePar[nvoice].PfixedfreqET=(int) o->value();
-}
-void ADvoiceUI::cb_fixedfreqetdial(WidgetPDial* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_fixedfreqetdial_i(o,v);
-}
-
-void ADvoiceUI::cb_Detune1_i(Fl_Choice* o, void*) {
- pars->VoicePar[nvoice].PDetuneType=(int) o->value();
-detunevalueoutput->do_callback();
-}
-void ADvoiceUI::cb_Detune1(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Detune1_i(o,v);
-}
-
-void ADvoiceUI::cb_changevoiceoscilbutton_i(Fl_Button*, void*) {
- if (oscedit!=NULL) delete(oscedit);
-
-int nv=nvoice;
-if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;
-
-oscedit=new OscilEditor(pars->VoicePar[nv].OscilSmp,voiceoscil,NULL,NULL,master);
-}
-void ADvoiceUI::cb_changevoiceoscilbutton(Fl_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_changevoiceoscilbutton_i(o,v);
-}
-
-void ADvoiceUI::cb_Phase1_i(Fl_Slider* o, void*) {
- pars->VoicePar[nvoice].Poscilphase=64-(int)o->value();
-osc->phase=64-(int) o->value();
-voiceoscil->redraw();
-}
-void ADvoiceUI::cb_Phase1(Fl_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Phase1_i(o,v);
-}
-
-void ADvoiceUI::cb_R_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].Presonance=(int) o->value();
-}
-void ADvoiceUI::cb_R(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_R_i(o,v);
-}
-
-void ADvoiceUI::cb_Use1_i(Fl_Choice* o, void*) {
- pars->VoicePar[nvoice].Pextoscil=(int)o->value()-1;
-if ((int) o->value() != 0) {
- osc->init(pars->VoicePar[(int) o->value()-1].OscilSmp,master);
- changevoiceoscilbutton->labelcolor(FL_BLUE);
-} else {
- osc->init(pars->VoicePar[nvoice].OscilSmp,master);
- changevoiceoscilbutton->labelcolor(FL_BLACK);
-};
-
-voiceparametersgroup->redraw();
-voiceonbutton->redraw();
-}
-void ADvoiceUI::cb_Use1(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Use1_i(o,v);
-}
-
-void ADvoiceUI::cb_Stereo_i(WidgetPDial* o, void*) {
- pars->VoicePar[nvoice].Unison_stereo_spread=(int)o->value();
-}
-void ADvoiceUI::cb_Stereo(WidgetPDial* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Stereo_i(o,v);
-}
-
-void ADvoiceUI::cb_Unison_i(Fl_Choice* o, void*) {
- pars->set_unison_size_index(nvoice,(int) o->value());
-}
-void ADvoiceUI::cb_Unison(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Unison_i(o,v);
-}
-
-void ADvoiceUI::cb_Vibratto_i(WidgetPDial* o, void*) {
- pars->VoicePar[nvoice].Unison_vibratto=(int)o->value();
-}
-void ADvoiceUI::cb_Vibratto(WidgetPDial* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Vibratto_i(o,v);
-}
-
-void ADvoiceUI::cb_Invert_i(Fl_Choice* o, void*) {
- pars->VoicePar[nvoice].Unison_invert_phase=(int) o->value();
-}
-void ADvoiceUI::cb_Invert(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Invert_i(o,v);
-}
-
-void ADvoiceUI::cb_Frequency_i(Fl_Slider* o, void*) {
- pars->VoicePar[nvoice].Unison_frequency_spread=(int)o->value();
-unisonspreadoutput->do_callback();
-}
-void ADvoiceUI::cb_Frequency(Fl_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Frequency_i(o,v);
-}
-
-void ADvoiceUI::cb_unisonspreadoutput_i(Fl_Value_Output* o, void*) {
- o->value(pars->getUnisonFrequencySpreadCents(nvoice));
-}
-void ADvoiceUI::cb_unisonspreadoutput(Fl_Value_Output* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_unisonspreadoutput_i(o,v);
-}
-
-void ADvoiceUI::cb_Vib_i(WidgetPDial* o, void*) {
- pars->VoicePar[nvoice].Unison_vibratto_speed=(int)o->value();
-}
-void ADvoiceUI::cb_Vib(WidgetPDial* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Vib_i(o,v);
-}
-
-void ADvoiceUI::cb_Vol1_i(Fl_Value_Slider* o, void*) {
- pars->VoicePar[nvoice].PVolume=(int)o->value();
-}
-void ADvoiceUI::cb_Vol1(Fl_Value_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Vol1_i(o,v);
-}
-
-void ADvoiceUI::cb_V1_i(Fl_Value_Slider* o, void*) {
- pars->VoicePar[nvoice].PAmpVelocityScaleFunction=(int) o->value();
-}
-void ADvoiceUI::cb_V1(Fl_Value_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_V1_i(o,v);
-}
-
-void ADvoiceUI::cb_Pan_i(WidgetPDial* o, void*) {
- pars->VoicePar[nvoice].PPanning=(int) o->value();
-}
-void ADvoiceUI::cb_Pan(WidgetPDial* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Pan_i(o,v);
-}
-
-void ADvoiceUI::cb_Enable4_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PAmpEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voiceampenvgroup->deactivate();
-else voiceampenvgroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Enable4(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Enable4_i(o,v);
-}
-
-void ADvoiceUI::cb_Enable5_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PAmpLfoEnabled=(int)o->value();
-if (o->value()==0) voiceamplfogroup->deactivate();
-else voiceamplfogroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Enable5(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Enable5_i(o,v);
-}
-
-void ADvoiceUI::cb_Minus_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PVolumeminus=(int)o->value();
-}
-void ADvoiceUI::cb_Minus(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Minus_i(o,v);
-}
-
-void ADvoiceUI::cb_Enable6_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PFilterEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voicefilterenvgroup->deactivate();
-else voicefilterenvgroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Enable6(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Enable6_i(o,v);
-}
-
-void ADvoiceUI::cb_Enable7_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PFilterLfoEnabled=(int)o->value();
-if (o->value()==0) voicefilterlfogroup->deactivate();
-else voicefilterlfogroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_Enable7(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Enable7_i(o,v);
-}
-
-void ADvoiceUI::cb_2_i(Fl_Choice* o, void*) {
- int x=(int) o->value();
-pars->VoicePar[nvoice].Type=x;
-if (x==0) voicemodegroup->activate();
- else voicemodegroup->deactivate();
-noiselabel->do_callback();
-}
-void ADvoiceUI::cb_2(Fl_Choice* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->user_data()))->cb_2_i(o,v);
-}
-
-Fl_Menu_Item ADvoiceUI::menu_[] = {
- {"Sound", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"NOISE", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 1},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void ADvoiceUI::cb_bypassfiltercheckbutton_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].Pfilterbypass=(int)o->value();
-}
-void ADvoiceUI::cb_bypassfiltercheckbutton(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->user_data()))->cb_bypassfiltercheckbutton_i(o,v);
-}
-
-void ADvoiceUI::cb_Delay_i(Fl_Value_Slider* o, void*) {
- pars->VoicePar[nvoice].PDelay=(int)o->value();
-}
-void ADvoiceUI::cb_Delay(Fl_Value_Slider* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->parent()->user_data()))->cb_Delay_i(o,v);
-}
-
-void ADvoiceUI::cb_Enable8_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].PFilterEnabled=(int)o->value();
-if (o->value()==0) voicefiltergroup->deactivate();
-else voicefiltergroup->activate();
-o->redraw();
-bypassfiltercheckbutton->redraw();
-}
-void ADvoiceUI::cb_Enable8(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->user_data()))->cb_Enable8_i(o,v);
-}
-
-void ADvoiceUI::cb_noiselabel1_i(Fl_Box* o, void*) {
- if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();
-}
-void ADvoiceUI::cb_noiselabel1(Fl_Box* o, void* v) {
- ((ADvoiceUI*)(o->parent()->parent()->user_data()))->cb_noiselabel1_i(o,v);
-}
-
-void ADvoiceUI::cb_voiceonbutton_i(Fl_Check_Button* o, void*) {
- pars->VoicePar[nvoice].Enabled=(int)o->value();
-if (o->value()==0) voiceparametersgroup->deactivate();
-else voiceparametersgroup->activate();
-o->redraw();
-}
-void ADvoiceUI::cb_voiceonbutton(Fl_Check_Button* o, void* v) {
- ((ADvoiceUI*)(o->parent()->user_data()))->cb_voiceonbutton_i(o,v);
-}
-
-Fl_Group* ADvoiceUI::make_window() {
- { ADnoteVoiceParameters = new Fl_Group(0, 0, 765, 575, "Voice");
- ADnoteVoiceParameters->box(FL_FLAT_BOX);
- ADnoteVoiceParameters->color(FL_BACKGROUND_COLOR);
- ADnoteVoiceParameters->selection_color(FL_BACKGROUND_COLOR);
- ADnoteVoiceParameters->labeltype(FL_NO_LABEL);
- ADnoteVoiceParameters->labelfont(0);
- ADnoteVoiceParameters->labelsize(14);
- ADnoteVoiceParameters->labelcolor(FL_FOREGROUND_COLOR);
- ADnoteVoiceParameters->user_data((void*)(this));
- ADnoteVoiceParameters->align(Fl_Align(FL_ALIGN_TOP));
- ADnoteVoiceParameters->when(FL_WHEN_RELEASE);
- { Fl_Group* o = voiceparametersgroup = new Fl_Group(0, 0, 765, 580);
- voiceparametersgroup->box(FL_THIN_UP_BOX);
- voiceparametersgroup->color((Fl_Color)48);
- { voicemodegroup = new Fl_Group(0, 5, 760, 575);
- { Fl_Group* o = voiceFMparametersgroup = new Fl_Group(530, 5, 230, 565, "MODULATOR");
- voiceFMparametersgroup->box(FL_THIN_UP_FRAME);
- voiceFMparametersgroup->color((Fl_Color)48);
- voiceFMparametersgroup->labeltype(FL_EMBOSSED_LABEL);
- voiceFMparametersgroup->labelfont(1);
- voiceFMparametersgroup->labelsize(13);
- voiceFMparametersgroup->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { modfrequency = new Fl_Group(535, 220, 220, 145, "Mod.FREQUENCY");
- modfrequency->box(FL_THIN_UP_BOX);
- modfrequency->labeltype(FL_EMBOSSED_LABEL);
- modfrequency->labelfont(1);
- modfrequency->labelsize(13);
- modfrequency->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = voiceFMfreqenvgroup = new EnvelopeUI(540, 290, 205, 70, "ADSynth Modulator - Frequency Envelope");
- voiceFMfreqenvgroup->box(FL_FLAT_BOX);
- voiceFMfreqenvgroup->color((Fl_Color)51);
- voiceFMfreqenvgroup->selection_color(FL_BACKGROUND_COLOR);
- voiceFMfreqenvgroup->labeltype(FL_NORMAL_LABEL);
- voiceFMfreqenvgroup->labelfont(0);
- voiceFMfreqenvgroup->labelsize(14);
- voiceFMfreqenvgroup->labelcolor(FL_FOREGROUND_COLOR);
- voiceFMfreqenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- voiceFMfreqenvgroup->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].FMFreqEnvelope);
- if (pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled==0) o->deactivate();
- voiceFMfreqenvgroup->end();
- } // EnvelopeUI* voiceFMfreqenvgroup
- { Fl_Check_Button* o = new Fl_Check_Button(545, 295, 50, 10, "Enable");
- o->tooltip("Forced Relase");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable);
- o->value(pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled);
- } // Fl_Check_Button* o
- { Fl_Counter* o = new Fl_Counter(685, 270, 60, 15, "Coarse Det.");
- o->tooltip("Coarse Detune");
- o->labelsize(10);
- o->minimum(-64);
- o->maximum(63);
- o->step(1);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Coarse);
- o->align(Fl_Align(FL_ALIGN_TOP));
- int k=pars->VoicePar[nvoice].PFMCoarseDetune%1024;
- if (k>=512) k-=1024;
- o->value(k);
- o->lstep(10);
- } // Fl_Counter* o
- { Fl_Counter* o = new Fl_Counter(625, 270, 45, 15, "Octave");
- o->tooltip("Octave");
- o->type(1);
- o->labelsize(10);
- o->minimum(-8);
- o->maximum(7);
- o->step(1);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Octave);
- o->align(Fl_Align(FL_ALIGN_TOP));
- int k=pars->VoicePar[nvoice].PFMCoarseDetune/1024;
- if (k>=8) k-=16;
- o->value(k);
- } // Fl_Counter* o
- { Fl_Slider* o = new Fl_Slider(590, 245, 160, 10);
- o->tooltip("Fine Detune (cents)");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->minimum(-8192);
- o->maximum(8191);
- o->step(1);
- o->callback((Fl_Callback*)cb_);
- o->value(pars->VoicePar[nvoice].PFMDetune-8192);
- } // Fl_Slider* o
- { Fl_Value_Output* o = fmdetunevalueoutput = new Fl_Value_Output(540, 245, 45, 13, "Detune");
- fmdetunevalueoutput->labelsize(8);
- fmdetunevalueoutput->minimum(-5000);
- fmdetunevalueoutput->maximum(5000);
- fmdetunevalueoutput->step(0.01);
- fmdetunevalueoutput->textfont(1);
- fmdetunevalueoutput->textsize(8);
- fmdetunevalueoutput->callback((Fl_Callback*)cb_fmdetunevalueoutput);
- fmdetunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));
- //o->value(getdetune(pars->VoicePar[nvoice].PFMDetuneType,0,pars->VoicePar[nvoice].PFMDetune));
- } // Fl_Value_Output* fmdetunevalueoutput
- { Fl_Choice* o = new Fl_Choice(540, 270, 75, 15, "Detune Type");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Detune);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
- o->value(pars->VoicePar[nvoice].PFMDetuneType);
- } // Fl_Choice* o
- modfrequency->end();
- } // Fl_Group* modfrequency
- { Fl_Group* o = new Fl_Group(535, 60, 220, 160, "Mod.AMPLITUDE");
- o->box(FL_THIN_UP_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { Fl_Value_Slider* o = new Fl_Value_Slider(540, 80, 160, 15, "Vol");
- o->tooltip("Volume");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(11);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Vol);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->VoicePar[nvoice].PFMVolume);
- } // Fl_Value_Slider* o
- { Fl_Value_Slider* o = new Fl_Value_Slider(540, 100, 160, 15, "V.Sns");
- o->tooltip("Velocity Sensing Function (rightmost to disable)");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(11);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_V);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->VoicePar[nvoice].PFMVelocityScaleFunction);
- } // Fl_Value_Slider* o
- { EnvelopeUI* o = voiceFMampenvgroup = new EnvelopeUI(540, 145, 205, 70, "ADSynth Modulator - Amplitude Envelope");
- voiceFMampenvgroup->box(FL_FLAT_BOX);
- voiceFMampenvgroup->color((Fl_Color)51);
- voiceFMampenvgroup->selection_color(FL_BACKGROUND_COLOR);
- voiceFMampenvgroup->labeltype(FL_NORMAL_LABEL);
- voiceFMampenvgroup->labelfont(0);
- voiceFMampenvgroup->labelsize(14);
- voiceFMampenvgroup->labelcolor(FL_FOREGROUND_COLOR);
- voiceFMampenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- voiceFMampenvgroup->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].FMAmpEnvelope);
- if (pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled==0) o->deactivate();
- voiceFMampenvgroup->end();
- } // EnvelopeUI* voiceFMampenvgroup
- { Fl_Check_Button* o = new Fl_Check_Button(545, 150, 50, 10, "Enable");
- o->tooltip("Forced Relase");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable1);
- o->value(pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled);
- } // Fl_Check_Button* o
- { Fl_Value_Slider* o = new Fl_Value_Slider(540, 120, 160, 15, "F.Damp");
- o->tooltip("Modulator Damp at Higher frequency");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(11);
- o->minimum(-64);
- o->maximum(63);
- o->step(1);
- o->callback((Fl_Callback*)cb_F);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->VoicePar[nvoice].PFMVolumeDamp-64);
- } // Fl_Value_Slider* o
- o->end();
- } // Fl_Group* o
- { modoscil = new Fl_Group(535, 365, 220, 200);
- { Fl_Group* o = fmoscil = new Fl_Group(535, 425, 220, 140);
- fmoscil->box(FL_THIN_DOWN_BOX);
- fmoscil->color(FL_GRAY0);
- fmoscil->selection_color((Fl_Color)71);
- fmoscil->labelcolor((Fl_Color)179);
- oscFM=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
- int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;
- oscFM->init(pars->VoicePar[nv].FMSmp,0,pars->VoicePar[nvoice].PFMoscilphase,master);
- fmoscil->end();
- } // Fl_Group* fmoscil
- { Fl_Box* o = new Fl_Box(535, 365, 155, 20, "Mod.Oscillator");
- o->labelfont(1);
- o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Button* o = changeFMoscilbutton = new Fl_Button(700, 370, 55, 15, "Change");
- changeFMoscilbutton->box(FL_THIN_UP_BOX);
- changeFMoscilbutton->labelfont(1);
- changeFMoscilbutton->labelsize(11);
- changeFMoscilbutton->callback((Fl_Callback*)cb_changeFMoscilbutton);
- if (pars->VoicePar[nvoice].PextFMoscil>=0) o->labelcolor(FL_BLUE);
- } // Fl_Button* changeFMoscilbutton
- { Fl_Slider* o = new Fl_Slider(665, 400, 65, 10, "Phase");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(10);
- o->minimum(-64);
- o->maximum(63);
- o->step(1);
- o->callback((Fl_Callback*)cb_Phase);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(64-pars->VoicePar[nvoice].PFMoscilphase);
- } // Fl_Slider* o
- { Fl_Choice* o = new Fl_Choice(560, 395, 75, 15, "Use");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Use);
- o->add("Internal");
- char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};
- o->value(pars->VoicePar[nvoice].PextFMoscil+1);
- } // Fl_Choice* o
- modoscil->end();
- } // Fl_Group* modoscil
- { Fl_Choice* o = new Fl_Choice(635, 40, 85, 20, "External Mod.");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_External);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("OFF");
- char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtMod.%2d",i+1);o->add(tmp);};
- o->value(pars->VoicePar[nvoice].PFMVoice+1);
- if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}
- } // Fl_Choice* o
- if (pars->VoicePar[nvoice].PFMEnabled==0) o->deactivate();
- voiceFMparametersgroup->end();
- } // Fl_Group* voiceFMparametersgroup
- { Fl_Choice* o = new Fl_Choice(535, 40, 80, 20, "Type:");
- o->down_box(FL_BORDER_BOX);
- o->callback((Fl_Callback*)cb_Type);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->menu(menu_Type);
- o->value(pars->VoicePar[nvoice].PFMEnabled);
- } // Fl_Choice* o
- { Fl_Group* o = new Fl_Group(5, 250, 525, 120, "FREQUENCY");
- o->box(FL_THIN_UP_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = voicefreqenvgroup = new EnvelopeUI(10, 290, 205, 70, "ADSynth Voice - Frequency Envelope");
- voicefreqenvgroup->box(FL_FLAT_BOX);
- voicefreqenvgroup->color((Fl_Color)51);
- voicefreqenvgroup->selection_color(FL_BACKGROUND_COLOR);
- voicefreqenvgroup->labeltype(FL_NORMAL_LABEL);
- voicefreqenvgroup->labelfont(0);
- voicefreqenvgroup->labelsize(14);
- voicefreqenvgroup->labelcolor(FL_FOREGROUND_COLOR);
- voicefreqenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- voicefreqenvgroup->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].FreqEnvelope);
- if (pars->VoicePar[nvoice].PFreqEnvelopeEnabled==0) o->deactivate();
- voicefreqenvgroup->end();
- } // EnvelopeUI* voicefreqenvgroup
- { Fl_Check_Button* o = new Fl_Check_Button(15, 295, 50, 10, "Enable");
- o->tooltip("Forced Relase");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable2);
- o->value(pars->VoicePar[nvoice].PFreqEnvelopeEnabled);
- } // Fl_Check_Button* o
- { LFOUI* o = voicefreqlfogroup = new LFOUI(215, 290, 230, 70, "Frequency LFO ");
- voicefreqlfogroup->box(FL_FLAT_BOX);
- voicefreqlfogroup->color(FL_DARK1);
- voicefreqlfogroup->selection_color(FL_BACKGROUND_COLOR);
- voicefreqlfogroup->labeltype(FL_NORMAL_LABEL);
- voicefreqlfogroup->labelfont(0);
- voicefreqlfogroup->labelsize(14);
- voicefreqlfogroup->labelcolor(FL_FOREGROUND_COLOR);
- voicefreqlfogroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- voicefreqlfogroup->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].FreqLfo);
- if (pars->VoicePar[nvoice].PFreqLfoEnabled==0) o->deactivate();
- voicefreqlfogroup->end();
- } // LFOUI* voicefreqlfogroup
- { Fl_Check_Button* o = new Fl_Check_Button(220, 295, 55, 10, "Enable");
- o->tooltip("Forced Relase");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable3);
- o->value(pars->VoicePar[nvoice].PFreqLfoEnabled);
- } // Fl_Check_Button* o
- { Fl_Counter* o = new Fl_Counter(470, 270, 45, 15, "Octave");
- o->tooltip("Octave");
- o->type(1);
- o->labelsize(10);
- o->minimum(-8);
- o->maximum(7);
- o->step(1);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Octave1);
- o->align(Fl_Align(FL_ALIGN_TOP));
- int k=pars->VoicePar[nvoice].PCoarseDetune/1024;
- if (k>=8) k-=16;
- o->value(k);
- } // Fl_Counter* o
- { Fl_Counter* o = new Fl_Counter(455, 340, 60, 20, "Coarse Det.");
- o->tooltip("Coarse Detune");
- o->labelsize(10);
- o->minimum(-64);
- o->maximum(63);
- o->step(1);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Coarse1);
- o->align(Fl_Align(FL_ALIGN_TOP));
- int k=pars->VoicePar[nvoice].PCoarseDetune%1024;
- if (k>=512) k-=1024;
- o->value(k);
- o->lstep(10);
- } // Fl_Counter* o
- { Fl_Slider* o = new Fl_Slider(58, 272, 392, 13);
- o->tooltip("Fine Detune (cents)");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->minimum(-8192);
- o->maximum(8191);
- o->step(1);
- o->callback((Fl_Callback*)cb_1);
- o->value(pars->VoicePar[nvoice].PDetune-8192);
- } // Fl_Slider* o
- { Fl_Value_Output* o = detunevalueoutput = new Fl_Value_Output(10, 272, 45, 15, "Detune");
- detunevalueoutput->labelsize(10);
- detunevalueoutput->minimum(-5000);
- detunevalueoutput->maximum(5000);
- detunevalueoutput->step(0.01);
- detunevalueoutput->textfont(1);
- detunevalueoutput->textsize(10);
- detunevalueoutput->callback((Fl_Callback*)cb_detunevalueoutput1);
- detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());
- } // Fl_Value_Output* detunevalueoutput
- { Fl_Check_Button* o = new Fl_Check_Button(345, 253, 55, 15, "440Hz");
- o->tooltip("Set the voice base frequency to 440Hz");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_440Hz);
- o->value(pars->VoicePar[nvoice].Pfixedfreq);
- } // Fl_Check_Button* o
- { WidgetPDial* o = fixedfreqetdial = new WidgetPDial(405, 255, 15, 15, "Eq.T.");
- fixedfreqetdial->tooltip("How the frequency varies acording to the keyboard (leftmost for fixed frequen\
-cy)");
- fixedfreqetdial->box(FL_ROUND_UP_BOX);
- fixedfreqetdial->color(FL_BACKGROUND_COLOR);
- fixedfreqetdial->selection_color(FL_INACTIVE_COLOR);
- fixedfreqetdial->labeltype(FL_NORMAL_LABEL);
- fixedfreqetdial->labelfont(0);
- fixedfreqetdial->labelsize(10);
- fixedfreqetdial->labelcolor(FL_FOREGROUND_COLOR);
- fixedfreqetdial->maximum(127);
- fixedfreqetdial->step(1);
- fixedfreqetdial->callback((Fl_Callback*)cb_fixedfreqetdial);
- fixedfreqetdial->align(Fl_Align(FL_ALIGN_RIGHT));
- fixedfreqetdial->when(FL_WHEN_CHANGED);
- o->value(pars->VoicePar[nvoice].PfixedfreqET);
- if (pars->VoicePar[nvoice].Pfixedfreq==0) o->deactivate();
- } // WidgetPDial* fixedfreqetdial
- { Fl_Choice* o = new Fl_Choice(450, 305, 75, 15, "Detune Type");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Detune1);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
- o->value(pars->VoicePar[nvoice].PDetuneType);
- } // Fl_Choice* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = voiceoscil = new Fl_Group(80, 375, 445, 145);
- voiceoscil->box(FL_THIN_DOWN_BOX);
- voiceoscil->color(FL_GRAY0);
- voiceoscil->selection_color((Fl_Color)71);
- voiceoscil->labelcolor((Fl_Color)179);
- osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
- int nv=nvoice; if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;
- osc->init(pars->VoicePar[nv].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
- voiceoscil->end();
- } // Fl_Group* voiceoscil
- { Fl_Button* o = changevoiceoscilbutton = new Fl_Button(5, 475, 65, 20, "Change");
- changevoiceoscilbutton->box(FL_THIN_UP_BOX);
- changevoiceoscilbutton->labelfont(1);
- changevoiceoscilbutton->labelsize(11);
- changevoiceoscilbutton->callback((Fl_Callback*)cb_changevoiceoscilbutton);
- if (pars->VoicePar[nvoice].Pextoscil>=0) o->labelcolor(FL_BLUE);
- } // Fl_Button* changevoiceoscilbutton
- { Fl_Box* o = new Fl_Box(5, 375, 75, 35, "Voice Oscillator");
- o->labelfont(1);
- o->labelsize(12);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Box* o
- { Fl_Slider* o = new Fl_Slider(10, 420, 65, 10, "Phase");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(10);
- o->minimum(-64);
- o->maximum(63);
- o->step(1);
- o->callback((Fl_Callback*)cb_Phase1);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(64-pars->VoicePar[nvoice].Poscilphase);
- } // Fl_Slider* o
- { Fl_Check_Button* o = new Fl_Check_Button(210, 5, 35, 35, "R.");
- o->tooltip("Resonance On/Off");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_R);
- o->value(pars->VoicePar[nvoice].Presonance);
- } // Fl_Check_Button* o
- { Fl_Choice* o = new Fl_Choice(5, 455, 65, 15, "Use Oscil.");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Use1);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("Internal");
- char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"Ext.%2d",i+1);o->add(tmp);};
- o->value(pars->VoicePar[nvoice].Pextoscil+1);
- } // Fl_Choice* o
- { Fl_Group* o = new Fl_Group(5, 525, 515, 45);
- o->box(FL_ENGRAVED_BOX);
- { WidgetPDial* o = new WidgetPDial(285, 540, 25, 25, "Stereo");
- o->tooltip("Stereo Spread");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Stereo);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->when(FL_WHEN_CHANGED);
- o->value(pars->VoicePar[nvoice].Unison_stereo_spread);
- } // WidgetPDial* o
- { Fl_Choice* o = new Fl_Choice(10, 545, 75, 20, "Unison");
- o->tooltip("Unison size");
- o->down_box(FL_BORDER_BOX);
- o->labelfont(1);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Unison);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("OFF");char tmp[100];for (int i=1;ADnote_unison_sizes[i];i++){snprintf(tmp,100,"size %d",ADnote_unison_sizes[i]);o->add(tmp);};
- o->value(pars->get_unison_size_index(nvoice));
- } // Fl_Choice* o
- { WidgetPDial* o = new WidgetPDial(340, 540, 25, 25, "Vibratto");
- o->tooltip("Vibratto");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Vibratto);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->when(FL_WHEN_CHANGED);
- o->value(pars->VoicePar[nvoice].Unison_vibratto);
- } // WidgetPDial* o
- { Fl_Choice* o = new Fl_Choice(445, 545, 65, 15, "Invert");
- o->tooltip("Phase Invert");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(11);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Invert);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("None");o->add("Random");char tmp[100];for (int i=2;i<=5;i++){snprintf(tmp,100,"%d %%",100/i);o->add(tmp);};
- o->value(pars->VoicePar[nvoice].Unison_invert_phase);
- } // Fl_Choice* o
- { Fl_Slider* o = new Fl_Slider(95, 547, 125, 13, "Frequency Spread");
- o->tooltip("Frequency Spread of the Unison");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(12);
- o->maximum(127);
- o->step(1);
- o->value(64);
- o->callback((Fl_Callback*)cb_Frequency);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->value(pars->VoicePar[nvoice].Unison_frequency_spread);
- } // Fl_Slider* o
- { Fl_Value_Output* o = unisonspreadoutput = new Fl_Value_Output(225, 545, 40, 15, "(cents)");
- unisonspreadoutput->labelsize(10);
- unisonspreadoutput->maximum(1000);
- unisonspreadoutput->step(0.1);
- unisonspreadoutput->textfont(1);
- unisonspreadoutput->textsize(10);
- unisonspreadoutput->callback((Fl_Callback*)cb_unisonspreadoutput);
- unisonspreadoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(pars->getUnisonFrequencySpreadCents(nvoice));
- } // Fl_Value_Output* unisonspreadoutput
- { WidgetPDial* o = new WidgetPDial(390, 540, 25, 25, "Vib.speed");
- o->tooltip("Vibratto Average Speed");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Vib);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->when(FL_WHEN_CHANGED);
- o->value(pars->VoicePar[nvoice].Unison_vibratto_speed);
- } // WidgetPDial* o
- o->end();
- } // Fl_Group* o
- voicemodegroup->end();
- } // Fl_Group* voicemodegroup
- { Fl_Group* o = new Fl_Group(5, 40, 240, 210, "AMPLITUDE");
- o->box(FL_THIN_UP_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { Fl_Value_Slider* o = new Fl_Value_Slider(10, 60, 160, 15, "Vol");
- o->tooltip("Volume");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(11);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Vol1);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->VoicePar[nvoice].PVolume);
- } // Fl_Value_Slider* o
- { Fl_Value_Slider* o = new Fl_Value_Slider(10, 80, 160, 15, "V.Sns");
- o->tooltip("Velocity Sensing Function (rightmost to disable)");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(11);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_V1);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->VoicePar[nvoice].PAmpVelocityScaleFunction);
- } // Fl_Value_Slider* o
- { EnvelopeUI* o = voiceampenvgroup = new EnvelopeUI(10, 105, 205, 70, "ADSynth Voice - Amplitude Envelope");
- voiceampenvgroup->box(FL_FLAT_BOX);
- voiceampenvgroup->color((Fl_Color)51);
- voiceampenvgroup->selection_color(FL_BACKGROUND_COLOR);
- voiceampenvgroup->labeltype(FL_NORMAL_LABEL);
- voiceampenvgroup->labelfont(0);
- voiceampenvgroup->labelsize(14);
- voiceampenvgroup->labelcolor(FL_FOREGROUND_COLOR);
- voiceampenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- voiceampenvgroup->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].AmpEnvelope);
- if (pars->VoicePar[nvoice].PAmpEnvelopeEnabled==0) o->deactivate();
- voiceampenvgroup->end();
- } // EnvelopeUI* voiceampenvgroup
- { WidgetPDial* o = new WidgetPDial(210, 60, 30, 30, "Pan");
- o->tooltip("Panning (leftmost is Random)");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Pan);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(pars->VoicePar[nvoice].PPanning);
- } // WidgetPDial* o
- { Fl_Check_Button* o = new Fl_Check_Button(15, 110, 50, 10, "Enable");
- o->tooltip("Forced Relase");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable4);
- o->value(pars->VoicePar[nvoice].PAmpEnvelopeEnabled);
- } // Fl_Check_Button* o
- { LFOUI* o = voiceamplfogroup = new LFOUI(10, 175, 230, 70, "Amplitude LFO ");
- voiceamplfogroup->box(FL_FLAT_BOX);
- voiceamplfogroup->color(FL_DARK1);
- voiceamplfogroup->selection_color(FL_BACKGROUND_COLOR);
- voiceamplfogroup->labeltype(FL_NORMAL_LABEL);
- voiceamplfogroup->labelfont(0);
- voiceamplfogroup->labelsize(14);
- voiceamplfogroup->labelcolor(FL_FOREGROUND_COLOR);
- voiceamplfogroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- voiceamplfogroup->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].AmpLfo);
- if (pars->VoicePar[nvoice].PAmpLfoEnabled==0) o->deactivate();
- voiceamplfogroup->end();
- } // LFOUI* voiceamplfogroup
- { Fl_Check_Button* o = new Fl_Check_Button(15, 180, 55, 10, "Enable");
- o->tooltip("Forced Relase");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable5);
- o->value(pars->VoicePar[nvoice].PAmpLfoEnabled);
- } // Fl_Check_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(10, 45, 50, 10, "Minus");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Minus);
- o->value(pars->VoicePar[nvoice].PVolumeminus);
- } // Fl_Check_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = voicefiltergroup = new Fl_Group(245, 5, 285, 245, "FILTER");
- voicefiltergroup->box(FL_THIN_UP_BOX);
- voicefiltergroup->labeltype(FL_EMBOSSED_LABEL);
- voicefiltergroup->labelfont(1);
- voicefiltergroup->labelsize(13);
- voicefiltergroup->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { FilterUI* o = new FilterUI(250, 30, 275, 75, "ADsynth Voice - Filter");
- o->box(FL_FLAT_BOX);
- o->color(FL_LIGHT1);
- o->selection_color(FL_BACKGROUND_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(14);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- o->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].VoiceFilter,NULL,NULL);
- o->end();
- } // FilterUI* o
- { EnvelopeUI* o = voicefilterenvgroup = new EnvelopeUI(250, 105, 275, 70, "ADSynth Voice - Filter Envelope");
- voicefilterenvgroup->box(FL_FLAT_BOX);
- voicefilterenvgroup->color((Fl_Color)51);
- voicefilterenvgroup->selection_color(FL_BACKGROUND_COLOR);
- voicefilterenvgroup->labeltype(FL_NORMAL_LABEL);
- voicefilterenvgroup->labelfont(0);
- voicefilterenvgroup->labelsize(14);
- voicefilterenvgroup->labelcolor(FL_FOREGROUND_COLOR);
- voicefilterenvgroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- voicefilterenvgroup->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].FilterEnvelope);
- if (pars->VoicePar[nvoice].PFilterEnvelopeEnabled==0) o->deactivate();
- voicefilterenvgroup->end();
- } // EnvelopeUI* voicefilterenvgroup
- { Fl_Check_Button* o = new Fl_Check_Button(255, 110, 55, 10, "Enable");
- o->tooltip("Forced Relase");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable6);
- o->value(pars->VoicePar[nvoice].PFilterEnvelopeEnabled);
- } // Fl_Check_Button* o
- { LFOUI* o = voicefilterlfogroup = new LFOUI(250, 175, 230, 70, "Filter LFO ");
- voicefilterlfogroup->box(FL_FLAT_BOX);
- voicefilterlfogroup->color(FL_DARK1);
- voicefilterlfogroup->selection_color(FL_BACKGROUND_COLOR);
- voicefilterlfogroup->labeltype(FL_NORMAL_LABEL);
- voicefilterlfogroup->labelfont(0);
- voicefilterlfogroup->labelsize(14);
- voicefilterlfogroup->labelcolor(FL_FOREGROUND_COLOR);
- voicefilterlfogroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- voicefilterlfogroup->when(FL_WHEN_RELEASE);
- o->init(pars->VoicePar[nvoice].FilterLfo);
- if (pars->VoicePar[nvoice].PFilterLfoEnabled==0) o->deactivate();
- voicefilterlfogroup->end();
- } // LFOUI* voicefilterlfogroup
- { Fl_Check_Button* o = new Fl_Check_Button(255, 180, 55, 10, "Enable");
- o->tooltip("Forced Relase");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable7);
- o->value(pars->VoicePar[nvoice].PFilterLfoEnabled);
- } // Fl_Check_Button* o
- if (pars->VoicePar[nvoice].PFilterEnabled==0) o->deactivate();
- voicefiltergroup->end();
- } // Fl_Group* voicefiltergroup
- { Fl_Group* o = new Fl_Group(5, 5, 55, 35, "01");
- o->box(FL_THIN_UP_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
- char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));
- o->end();
- } // Fl_Group* o
- { Fl_Choice* o = new Fl_Choice(5, 500, 65, 20);
- o->tooltip("Oscillator Type (sound/noise)");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_2);
- o->menu(menu_);
- o->value(pars->VoicePar[nvoice].Type);
- if (pars->VoicePar[nvoice].Type!=0) voicemodegroup->deactivate();
- } // Fl_Choice* o
- { Fl_Check_Button* o = bypassfiltercheckbutton = new Fl_Check_Button(425, 10, 100, 20, "Bypass Global F.");
- bypassfiltercheckbutton->down_box(FL_DOWN_BOX);
- bypassfiltercheckbutton->labelfont(1);
- bypassfiltercheckbutton->labelsize(10);
- bypassfiltercheckbutton->callback((Fl_Callback*)cb_bypassfiltercheckbutton);
- bypassfiltercheckbutton->align(Fl_Align(132|FL_ALIGN_INSIDE));
- o->value(pars->VoicePar[nvoice].Pfilterbypass);
- } // Fl_Check_Button* bypassfiltercheckbutton
- { Fl_Group* o = new Fl_Group(115, 5, 95, 35);
- o->box(FL_THIN_UP_BOX);
- { Fl_Value_Slider* o = new Fl_Value_Slider(120, 21, 84, 12, "Delay");
- o->tooltip("Volume");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(11);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Delay);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(pars->VoicePar[nvoice].PDelay);
- } // Fl_Value_Slider* o
- o->end();
- } // Fl_Group* o
- { Fl_Check_Button* o = new Fl_Check_Button(250, 15, 60, 15, "Enable");
- o->tooltip("Enable Filter");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Enable8);
- o->value(pars->VoicePar[nvoice].PFilterEnabled);
- } // Fl_Check_Button* o
- { Fl_Box* o = noiselabel = new Fl_Box(150, 415, 300, 65, "White Noise");
- noiselabel->labelfont(1);
- noiselabel->labelsize(50);
- noiselabel->labelcolor(FL_BACKGROUND2_COLOR);
- noiselabel->callback((Fl_Callback*)cb_noiselabel1);
- if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();
- } // Fl_Box* noiselabel
- if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();
- voiceparametersgroup->end();
- } // Fl_Group* voiceparametersgroup
- { Fl_Check_Button* o = voiceonbutton = new Fl_Check_Button(60, 5, 55, 35, "On");
- voiceonbutton->box(FL_THIN_UP_BOX);
- voiceonbutton->down_box(FL_DOWN_BOX);
- voiceonbutton->labelfont(1);
- voiceonbutton->labelsize(13);
- voiceonbutton->callback((Fl_Callback*)cb_voiceonbutton);
- o->value(pars->VoicePar[nvoice].Enabled);
- } // Fl_Check_Button* voiceonbutton
- ADnoteVoiceParameters->end();
- } // Fl_Group* ADnoteVoiceParameters
- return ADnoteVoiceParameters;
-}
-
-ADvoiceUI::ADvoiceUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- nvoice=0;
- pars=NULL;
- oscedit=NULL;
-}
-
-void ADvoiceUI::init(ADnoteParameters *parameters,int nvoice_,Master *master_) {
- pars=parameters;
- nvoice=nvoice_;
- master=master_;
- make_window();
- end();
- ADnoteVoiceParameters->show();
-}
-
-ADvoiceUI::~ADvoiceUI() {
- ADnoteVoiceParameters->hide();
- hide();
- if (oscedit!=NULL) {
- delete(oscedit);
- };
- //delete (ADnoteVoiceParameters);
-}
-
-void ADnoteUI::cb_octave_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=16;
-pars->GlobalPar.PCoarseDetune = k*1024+
- pars->GlobalPar.PCoarseDetune%1024;
-}
-void ADnoteUI::cb_octave(Fl_Counter* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_octave_i(o,v);
-}
-
-void ADnoteUI::cb_coarsedet_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=1024;
-pars->GlobalPar.PCoarseDetune = k+
- (pars->GlobalPar.PCoarseDetune/1024)*1024;
-}
-void ADnoteUI::cb_coarsedet(Fl_Counter* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_coarsedet_i(o,v);
-}
-
-void ADnoteUI::cb_freq_i(Fl_Slider* o, void*) {
- pars->GlobalPar.PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();
-}
-void ADnoteUI::cb_freq(Fl_Slider* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_freq_i(o,v);
-}
-
-void ADnoteUI::cb_detunevalueoutput2_i(Fl_Value_Output* o, void*) {
- o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
-}
-void ADnoteUI::cb_detunevalueoutput2(Fl_Value_Output* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_detunevalueoutput2_i(o,v);
-}
-
-void ADnoteUI::cb_detunetype_i(Fl_Choice* o, void*) {
- pars->GlobalPar.PDetuneType=(int) o->value()+1;
-detunevalueoutput->do_callback();
-}
-void ADnoteUI::cb_detunetype(Fl_Choice* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_detunetype_i(o,v);
-}
-
-void ADnoteUI::cb_relBW_i(WidgetPDial* o, void*) {
- pars->GlobalPar.PBandwidth=(int) o->value();
-
-pars->getBandwidthDetuneMultiplier();
-
-for (int i=0;i<NUM_VOICES;i++){
- voicelistitem[i]->refreshlist();
-};
-}
-void ADnoteUI::cb_relBW(WidgetPDial* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_relBW_i(o,v);
-}
-
-void ADnoteUI::cb_volume_i(Fl_Value_Slider* o, void*) {
- pars->GlobalPar.PVolume=(int)o->value();
-}
-void ADnoteUI::cb_volume(Fl_Value_Slider* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_volume_i(o,v);
-}
-
-void ADnoteUI::cb_vsns_i(Fl_Value_Slider* o, void*) {
- pars->GlobalPar.PAmpVelocityScaleFunction=(int) o->value();
-}
-void ADnoteUI::cb_vsns(Fl_Value_Slider* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_vsns_i(o,v);
-}
-
-void ADnoteUI::cb_pan_i(WidgetPDial* o, void*) {
- pars->GlobalPar.PPanning=(int) o->value();
-}
-void ADnoteUI::cb_pan(WidgetPDial* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_pan_i(o,v);
-}
-
-void ADnoteUI::cb_pstr_i(WidgetPDial* o, void*) {
- pars->GlobalPar.PPunchStrength=(int) o->value();
-}
-void ADnoteUI::cb_pstr(WidgetPDial* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_pstr_i(o,v);
-}
-
-void ADnoteUI::cb_pt_i(WidgetPDial* o, void*) {
- pars->GlobalPar.PPunchTime=(int) o->value();
-}
-void ADnoteUI::cb_pt(WidgetPDial* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_pt_i(o,v);
-}
-
-void ADnoteUI::cb_pstc_i(WidgetPDial* o, void*) {
- pars->GlobalPar.PPunchStretch=(int) o->value();
-}
-void ADnoteUI::cb_pstc(WidgetPDial* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_pstc_i(o,v);
-}
-
-void ADnoteUI::cb_pvel_i(WidgetPDial* o, void*) {
- pars->GlobalPar.PPunchVelocitySensing=(int) o->value();
-}
-void ADnoteUI::cb_pvel(WidgetPDial* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_pvel_i(o,v);
-}
-
-void ADnoteUI::cb_rndgrp_i(Fl_Check_Button* o, void*) {
- pars->GlobalPar.Hrandgrouping=(int) o->value();
-}
-void ADnoteUI::cb_rndgrp(Fl_Check_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->parent()->user_data()))->cb_rndgrp_i(o,v);
-}
-
-void ADnoteUI::cb_stereo_i(Fl_Check_Button* o, void*) {
- pars->GlobalPar.PStereo=(int) o->value();
-}
-void ADnoteUI::cb_stereo(Fl_Check_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_stereo_i(o,v);
-}
-
-void ADnoteUI::cb_Show_i(Fl_Button*, void*) {
- for (int i=0;i<NUM_VOICES;i++){
- voicelistitem[i]->refreshlist();
-}
-ADnoteVoiceList->show();
-}
-void ADnoteUI::cb_Show(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_Show_i(o,v);
-}
-
-void ADnoteUI::cb_Show1_i(Fl_Button*, void*) {
- ADnoteVoice->show();
-}
-void ADnoteUI::cb_Show1(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_Show1_i(o,v);
-}
-
-void ADnoteUI::cb_Close_i(Fl_Button*, void*) {
- ADnoteGlobalParameters->hide();
-}
-void ADnoteUI::cb_Close(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void ADnoteUI::cb_Resonance_i(Fl_Button*, void*) {
- resui->resonancewindow->redraw();
-resui->resonancewindow->show();
-}
-void ADnoteUI::cb_Resonance(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_Resonance_i(o,v);
-}
-
-void ADnoteUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(pars);
-}
-void ADnoteUI::cb_C(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void ADnoteUI::cb_P_i(Fl_Button*, void*) {
- presetsui->paste(pars,this);
-}
-void ADnoteUI::cb_P(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_P_i(o,v);
-}
-
-void ADnoteUI::cb_Close1_i(Fl_Button*, void*) {
- ADnoteVoice->hide();
-}
-void ADnoteUI::cb_Close1(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_Close1_i(o,v);
-}
-
-void ADnoteUI::cb_currentvoicecounter_i(Fl_Counter* o, void*) {
- nvoice=(int)o->value()-1;
-advoice->hide();
-ADnoteVoice->remove(advoice);
-delete advoice;
-advoice=new ADvoiceUI(0,0,765,585);
-ADnoteVoice->add(advoice);
-advoice->init(pars,nvoice,master);
-advoice->show();
-ADnoteVoice->redraw();
-}
-void ADnoteUI::cb_currentvoicecounter(Fl_Counter* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_currentvoicecounter_i(o,v);
-}
-
-void ADnoteUI::cb_C1_i(Fl_Button*, void*) {
- presetsui->copy(pars,nvoice);
-}
-void ADnoteUI::cb_C1(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_C1_i(o,v);
-}
-
-void ADnoteUI::cb_P1_i(Fl_Button*, void*) {
- presetsui->paste(pars,this,nvoice);
-}
-void ADnoteUI::cb_P1(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_P1_i(o,v);
-}
-
-void ADnoteUI::cb_Hide_i(Fl_Button*, void*) {
- ADnoteVoiceList->hide();
-}
-void ADnoteUI::cb_Hide(Fl_Button* o, void* v) {
- ((ADnoteUI*)(o->parent()->user_data()))->cb_Hide_i(o,v);
-}
-
-Fl_Double_Window* ADnoteUI::make_window() {
- { ADnoteGlobalParameters = new Fl_Double_Window(535, 405, "ADsynth Global Parameters of the Instrument");
- ADnoteGlobalParameters->user_data((void*)(this));
- { Fl_Group* o = new Fl_Group(5, 255, 525, 115, "FREQUENCY");
- o->box(FL_THIN_UP_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = freqenv = new EnvelopeUI(10, 295, 205, 70, "ADSynth Global - Frequency Envelope");
- freqenv->box(FL_FLAT_BOX);
- freqenv->color((Fl_Color)51);
- freqenv->selection_color(FL_BACKGROUND_COLOR);
- freqenv->labeltype(FL_NORMAL_LABEL);
- freqenv->labelfont(0);
- freqenv->labelsize(14);
- freqenv->labelcolor(FL_FOREGROUND_COLOR);
- freqenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- freqenv->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalPar.FreqEnvelope);
- freqenv->end();
- } // EnvelopeUI* freqenv
- { Fl_Counter* o = octave = new Fl_Counter(450, 275, 45, 15, "Octave");
- octave->tooltip("Octave");
- octave->type(1);
- octave->labelsize(10);
- octave->minimum(-8);
- octave->maximum(7);
- octave->step(1);
- octave->textfont(1);
- octave->textsize(11);
- octave->callback((Fl_Callback*)cb_octave);
- octave->align(Fl_Align(FL_ALIGN_TOP));
- int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
- o->value(k);
- } // Fl_Counter* octave
- { Fl_Counter* o = coarsedet = new Fl_Counter(455, 345, 60, 20, "Coarse det.");
- coarsedet->tooltip("Coarse Detune");
- coarsedet->labelsize(10);
- coarsedet->minimum(-64);
- coarsedet->maximum(63);
- coarsedet->step(1);
- coarsedet->textfont(1);
- coarsedet->textsize(11);
- coarsedet->callback((Fl_Callback*)cb_coarsedet);
- coarsedet->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- int k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
- o->value(k);
- o->lstep(10);
- } // Fl_Counter* coarsedet
- { LFOUI* o = freqlfo = new LFOUI(215, 295, 230, 70, "Frequency LFO ");
- freqlfo->box(FL_FLAT_BOX);
- freqlfo->color(FL_DARK1);
- freqlfo->selection_color(FL_BACKGROUND_COLOR);
- freqlfo->labeltype(FL_NORMAL_LABEL);
- freqlfo->labelfont(0);
- freqlfo->labelsize(14);
- freqlfo->labelcolor(FL_FOREGROUND_COLOR);
- freqlfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- freqlfo->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalPar.FreqLfo);
- freqlfo->end();
- } // LFOUI* freqlfo
- { Fl_Slider* o = freq = new Fl_Slider(60, 275, 385, 15);
- freq->tooltip("Fine Detune (cents)");
- freq->type(5);
- freq->box(FL_FLAT_BOX);
- freq->minimum(-8192);
- freq->maximum(8191);
- freq->step(1);
- freq->callback((Fl_Callback*)cb_freq);
- o->value(pars->GlobalPar.PDetune-8192);
- } // Fl_Slider* freq
- { Fl_Value_Output* o = detunevalueoutput = new Fl_Value_Output(12, 275, 45, 15, "Detune");
- detunevalueoutput->labelsize(10);
- detunevalueoutput->minimum(-5000);
- detunevalueoutput->maximum(5000);
- detunevalueoutput->step(0.01);
- detunevalueoutput->textfont(1);
- detunevalueoutput->textsize(10);
- detunevalueoutput->callback((Fl_Callback*)cb_detunevalueoutput2);
- detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
- } // Fl_Value_Output* detunevalueoutput
- { Fl_Choice* o = detunetype = new Fl_Choice(450, 315, 75, 15, "Detune Type");
- detunetype->down_box(FL_BORDER_BOX);
- detunetype->labelsize(10);
- detunetype->textfont(1);
- detunetype->textsize(10);
- detunetype->callback((Fl_Callback*)cb_detunetype);
- detunetype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
- o->value(pars->GlobalPar.PDetuneType-1);
- } // Fl_Choice* detunetype
- { WidgetPDial* o = new WidgetPDial(500, 270, 25, 25, "relBW");
- o->tooltip("Bandwidth - how the relative fine detune of the voice are changed");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_relBW);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->when(FL_WHEN_CHANGED);
- o->value(pars->GlobalPar.PBandwidth);
- } // WidgetPDial* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(5, 5, 240, 250, "AMPLITUDE");
- o->box(FL_THIN_UP_FRAME);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { Fl_Value_Slider* o = volume = new Fl_Value_Slider(10, 30, 160, 15, "Vol");
- volume->tooltip("Volume");
- volume->type(5);
- volume->box(FL_FLAT_BOX);
- volume->labelsize(11);
- volume->maximum(127);
- volume->step(1);
- volume->callback((Fl_Callback*)cb_volume);
- volume->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->GlobalPar.PVolume);
- } // Fl_Value_Slider* volume
- { Fl_Value_Slider* o = vsns = new Fl_Value_Slider(10, 50, 160, 15, "V.Sns");
- vsns->tooltip("Velocity Sensing Function (rightmost to disable)");
- vsns->type(5);
- vsns->box(FL_FLAT_BOX);
- vsns->labelsize(11);
- vsns->maximum(127);
- vsns->step(1);
- vsns->callback((Fl_Callback*)cb_vsns);
- vsns->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->GlobalPar.PAmpVelocityScaleFunction);
- } // Fl_Value_Slider* vsns
- { WidgetPDial* o = pan = new WidgetPDial(210, 25, 30, 30, "Pan");
- pan->tooltip("Panning (leftmost is Random)");
- pan->box(FL_ROUND_UP_BOX);
- pan->color(FL_BACKGROUND_COLOR);
- pan->selection_color(FL_INACTIVE_COLOR);
- pan->labeltype(FL_NORMAL_LABEL);
- pan->labelfont(0);
- pan->labelsize(10);
- pan->labelcolor(FL_FOREGROUND_COLOR);
- pan->maximum(127);
- pan->step(1);
- pan->callback((Fl_Callback*)cb_pan);
- pan->align(Fl_Align(FL_ALIGN_BOTTOM));
- pan->when(FL_WHEN_CHANGED);
- o->value(pars->GlobalPar.PPanning);
- } // WidgetPDial* pan
- { WidgetPDial* o = pstr = new WidgetPDial(125, 227, 25, 25, "P.Str.");
- pstr->tooltip("Punch Strength");
- pstr->box(FL_ROUND_UP_BOX);
- pstr->color(FL_BACKGROUND_COLOR);
- pstr->selection_color(FL_INACTIVE_COLOR);
- pstr->labeltype(FL_NORMAL_LABEL);
- pstr->labelfont(0);
- pstr->labelsize(10);
- pstr->labelcolor(FL_FOREGROUND_COLOR);
- pstr->maximum(127);
- pstr->step(1);
- pstr->callback((Fl_Callback*)cb_pstr);
- pstr->align(Fl_Align(FL_ALIGN_TOP));
- pstr->when(FL_WHEN_CHANGED);
- o->value(pars->GlobalPar.PPunchStrength);
- } // WidgetPDial* pstr
- { WidgetPDial* o = pt = new WidgetPDial(155, 227, 25, 25, "P.t.");
- pt->tooltip("Punch Time (duration)");
- pt->box(FL_ROUND_UP_BOX);
- pt->color(FL_BACKGROUND_COLOR);
- pt->selection_color(FL_INACTIVE_COLOR);
- pt->labeltype(FL_NORMAL_LABEL);
- pt->labelfont(0);
- pt->labelsize(10);
- pt->labelcolor(FL_FOREGROUND_COLOR);
- pt->maximum(127);
- pt->step(1);
- pt->callback((Fl_Callback*)cb_pt);
- pt->align(Fl_Align(FL_ALIGN_TOP));
- pt->when(FL_WHEN_CHANGED);
- o->value(pars->GlobalPar.PPunchTime);
- } // WidgetPDial* pt
- { WidgetPDial* o = pstc = new WidgetPDial(185, 227, 25, 25, "P.Stc.");
- pstc->tooltip("Punch Stretch");
- pstc->box(FL_ROUND_UP_BOX);
- pstc->color(FL_BACKGROUND_COLOR);
- pstc->selection_color(FL_INACTIVE_COLOR);
- pstc->labeltype(FL_NORMAL_LABEL);
- pstc->labelfont(0);
- pstc->labelsize(10);
- pstc->labelcolor(FL_FOREGROUND_COLOR);
- pstc->maximum(127);
- pstc->step(1);
- pstc->callback((Fl_Callback*)cb_pstc);
- pstc->align(Fl_Align(FL_ALIGN_TOP));
- pstc->when(FL_WHEN_CHANGED);
- o->value(pars->GlobalPar.PPunchStretch);
- } // WidgetPDial* pstc
- { WidgetPDial* o = pvel = new WidgetPDial(215, 227, 25, 25, "P.Vel.");
- pvel->tooltip("Punch Velocity Sensing");
- pvel->box(FL_ROUND_UP_BOX);
- pvel->color(FL_BACKGROUND_COLOR);
- pvel->selection_color(FL_INACTIVE_COLOR);
- pvel->labeltype(FL_NORMAL_LABEL);
- pvel->labelfont(0);
- pvel->labelsize(10);
- pvel->labelcolor(FL_FOREGROUND_COLOR);
- pvel->maximum(127);
- pvel->step(1);
- pvel->callback((Fl_Callback*)cb_pvel);
- pvel->align(Fl_Align(FL_ALIGN_TOP));
- pvel->when(FL_WHEN_CHANGED);
- o->value(pars->GlobalPar.PPunchVelocitySensing);
- } // WidgetPDial* pvel
- { EnvelopeUI* o = ampenv = new EnvelopeUI(10, 75, 205, 70, "ADSynth Global - Amplitude Envelope");
- ampenv->box(FL_FLAT_BOX);
- ampenv->color((Fl_Color)51);
- ampenv->selection_color(FL_BACKGROUND_COLOR);
- ampenv->labeltype(FL_NORMAL_LABEL);
- ampenv->labelfont(0);
- ampenv->labelsize(14);
- ampenv->labelcolor(FL_FOREGROUND_COLOR);
- ampenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- ampenv->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalPar.AmpEnvelope);
- ampenv->end();
- } // EnvelopeUI* ampenv
- { LFOUI* o = amplfo = new LFOUI(10, 145, 230, 70, "Amplitude LFO ");
- amplfo->box(FL_FLAT_BOX);
- amplfo->color(FL_DARK1);
- amplfo->selection_color(FL_BACKGROUND_COLOR);
- amplfo->labeltype(FL_NORMAL_LABEL);
- amplfo->labelfont(0);
- amplfo->labelsize(14);
- amplfo->labelcolor(FL_FOREGROUND_COLOR);
- amplfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- amplfo->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalPar.AmpLfo);
- amplfo->end();
- } // LFOUI* amplfo
- { Fl_Check_Button* o = rndgrp = new Fl_Check_Button(70, 225, 40, 25, "Rnd Grp");
- rndgrp->tooltip("How the Harmonic Amplitude is applied to voices that use the same oscillator");
- rndgrp->down_box(FL_DOWN_BOX);
- rndgrp->labelsize(10);
- rndgrp->callback((Fl_Callback*)cb_rndgrp);
- rndgrp->align(Fl_Align(132|FL_ALIGN_INSIDE));
- o->value(pars->GlobalPar.Hrandgrouping);
- } // Fl_Check_Button* rndgrp
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(245, 5, 285, 250, "FILTER");
- o->box(FL_THIN_UP_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = filterenv = new EnvelopeUI(250, 110, 275, 70, "ADSynth Global - Filter Envelope");
- filterenv->box(FL_FLAT_BOX);
- filterenv->color((Fl_Color)51);
- filterenv->selection_color(FL_BACKGROUND_COLOR);
- filterenv->labeltype(FL_NORMAL_LABEL);
- filterenv->labelfont(0);
- filterenv->labelsize(14);
- filterenv->labelcolor(FL_FOREGROUND_COLOR);
- filterenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- filterenv->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalPar.FilterEnvelope);
- filterenv->end();
- } // EnvelopeUI* filterenv
- { LFOUI* o = filterlfo = new LFOUI(250, 180, 230, 70, "Filter LFO");
- filterlfo->box(FL_FLAT_BOX);
- filterlfo->color(FL_DARK1);
- filterlfo->selection_color(FL_BACKGROUND_COLOR);
- filterlfo->labeltype(FL_NORMAL_LABEL);
- filterlfo->labelfont(0);
- filterlfo->labelsize(14);
- filterlfo->labelcolor(FL_FOREGROUND_COLOR);
- filterlfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- filterlfo->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalPar.FilterLfo);
- filterlfo->end();
- } // LFOUI* filterlfo
- { FilterUI* o = filterui = new FilterUI(250, 35, 275, 75, "ADsynth Global - Filter");
- filterui->box(FL_FLAT_BOX);
- filterui->color(FL_LIGHT1);
- filterui->selection_color(FL_BACKGROUND_COLOR);
- filterui->labeltype(FL_NORMAL_LABEL);
- filterui->labelfont(0);
- filterui->labelsize(14);
- filterui->labelcolor(FL_FOREGROUND_COLOR);
- filterui->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- filterui->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalPar.GlobalFilter,&pars->GlobalPar.PFilterVelocityScale,&pars->GlobalPar.PFilterVelocityScaleFunction);
- filterui->end();
- } // FilterUI* filterui
- o->end();
- } // Fl_Group* o
- { Fl_Check_Button* o = stereo = new Fl_Check_Button(5, 220, 65, 35, "Stereo");
- stereo->box(FL_ENGRAVED_BOX);
- stereo->down_box(FL_DOWN_BOX);
- stereo->labelfont(1);
- stereo->labelsize(11);
- stereo->callback((Fl_Callback*)cb_stereo);
- o->value(pars->GlobalPar.PStereo);
- } // Fl_Check_Button* stereo
- { Fl_Button* o = new Fl_Button(180, 375, 125, 25, "Show Voice List");
- o->callback((Fl_Callback*)cb_Show);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(5, 375, 170, 25, "Show Voice Parameters");
- o->labelfont(1);
- o->labelsize(12);
- o->callback((Fl_Callback*)cb_Show1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(470, 375, 60, 25, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(309, 375, 86, 25, "Resonance");
- o->tooltip("Resonance");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Resonance);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(405, 380, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(435, 380, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- ADnoteGlobalParameters->end();
- } // Fl_Double_Window* ADnoteGlobalParameters
- { ADnoteVoice = new Fl_Double_Window(765, 620, "ADsynth Voice Parameters");
- ADnoteVoice->user_data((void*)(this));
- { ADvoiceUI* o = advoice = new ADvoiceUI(0, 0, 760, 575);
- advoice->box(FL_BORDER_BOX);
- advoice->color(FL_BACKGROUND_COLOR);
- advoice->selection_color(FL_BACKGROUND_COLOR);
- advoice->labeltype(FL_NORMAL_LABEL);
- advoice->labelfont(0);
- advoice->labelsize(14);
- advoice->labelcolor(FL_FOREGROUND_COLOR);
- advoice->align(Fl_Align(FL_ALIGN_TOP));
- advoice->when(FL_WHEN_RELEASE);
- o->init(pars,nvoice,master);
- o->show();
- advoice->end();
- } // ADvoiceUI* advoice
- { Fl_Button* o = new Fl_Button(300, 585, 195, 25, "Close Window");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->callback((Fl_Callback*)cb_Close1);
- } // Fl_Button* o
- { Fl_Counter* o = currentvoicecounter = new Fl_Counter(5, 585, 130, 25, "Current Voice");
- currentvoicecounter->type(1);
- currentvoicecounter->labelfont(1);
- currentvoicecounter->minimum(0);
- currentvoicecounter->maximum(2);
- currentvoicecounter->step(1);
- currentvoicecounter->value(1);
- currentvoicecounter->textfont(1);
- currentvoicecounter->textsize(13);
- currentvoicecounter->callback((Fl_Callback*)cb_currentvoicecounter);
- currentvoicecounter->align(Fl_Align(FL_ALIGN_RIGHT));
- o->bounds(1,NUM_VOICES);
- } // Fl_Counter* currentvoicecounter
- { Fl_Button* o = new Fl_Button(700, 590, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(730, 590, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P1);
- } // Fl_Button* o
- ADnoteVoice->end();
- } // Fl_Double_Window* ADnoteVoice
- { ADnoteVoiceList = new Fl_Double_Window(650, 260, "ADsynth Voices list");
- ADnoteVoiceList->user_data((void*)(this));
- { Fl_Text_Display* o = new Fl_Text_Display(10, 15, 30, 10, "No.");
- o->box(FL_NO_BOX);
- o->labelfont(1);
- o->labelsize(11);
- } // Fl_Text_Display* o
- { Fl_Text_Display* o = new Fl_Text_Display(145, 15, 30, 10, "Vol");
- o->box(FL_NO_BOX);
- o->labelfont(1);
- o->labelsize(11);
- } // Fl_Text_Display* o
- { Fl_Text_Display* o = new Fl_Text_Display(384, 15, 25, 10, "Detune");
- o->box(FL_NO_BOX);
- o->labelfont(1);
- o->labelsize(11);
- } // Fl_Text_Display* o
- { Fl_Text_Display* o = new Fl_Text_Display(210, 15, 30, 10, "Pan");
- o->box(FL_NO_BOX);
- o->labelfont(1);
- o->labelsize(11);
- } // Fl_Text_Display* o
- { Fl_Text_Display* o = new Fl_Text_Display(560, 15, 30, 10, "Vib. Depth");
- o->box(FL_NO_BOX);
- o->labelfont(1);
- o->labelsize(11);
- } // Fl_Text_Display* o
- { Fl_Text_Display* o = new Fl_Text_Display(245, 15, 25, 10, "R.");
- o->box(FL_NO_BOX);
- o->labelfont(1);
- o->labelsize(11);
- } // Fl_Text_Display* o
- { Fl_Button* o = new Fl_Button(255, 237, 125, 20, "Hide Voice List");
- o->callback((Fl_Callback*)cb_Hide);
- } // Fl_Button* o
- { Fl_Scroll* o = new Fl_Scroll(0, 15, 640, 220);
- o->type(2);
- o->box(FL_THIN_UP_BOX);
- { Fl_Pack* o = new Fl_Pack(0, 20, 620, 210);
- for (int i=0;i<NUM_VOICES;i++){voicelistitem[i]=new ADvoicelistitem(0,0,620,25,"");voicelistitem[i]->init(pars,i,master);}
- o->end();
- } // Fl_Pack* o
- o->end();
- } // Fl_Scroll* o
- ADnoteVoiceList->end();
- } // Fl_Double_Window* ADnoteVoiceList
- return ADnoteVoiceList;
-}
-
-ADnoteUI::ADnoteUI(ADnoteParameters *parameters,Master *master_) {
- pars=parameters;
- master=master_;
- nvoice=0;
- resui=new ResonanceUI(pars->GlobalPar.Reson);
- make_window();
-}
-
-ADnoteUI::~ADnoteUI() {
- ADnoteVoiceList->hide();
- ADnoteGlobalParameters->hide();
- ADnoteVoice->hide();
- delete(ADnoteVoiceList);
- delete(ADnoteGlobalParameters);
- delete(ADnoteVoice);
- delete(resui);
-}
-
-void ADnoteUI::refresh() {
- volume->value(pars->GlobalPar.PVolume);
- vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction);
- pan->value(pars->GlobalPar.PPanning);
-
- stereo->value(pars->GlobalPar.PStereo);
- rndgrp->value(pars->GlobalPar.Hrandgrouping);
-
- pstr->value(pars->GlobalPar.PPunchStrength);
- pt->value(pars->GlobalPar.PPunchTime);
- pstc->value(pars->GlobalPar.PPunchStretch);
- pvel->value(pars->GlobalPar.PPunchVelocitySensing);
-
- detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
- freq->value(pars->GlobalPar.PDetune-8192);
-
- int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
- octave->value(k);
-
- detunetype->value(pars->GlobalPar.PDetuneType-1);
- k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
- coarsedet->value(k);
- amplfo->refresh();
- freqlfo->refresh();
- filterlfo->refresh();
-
- ampenv->refresh();
- freqenv->refresh();
- filterenv->refresh();
- filterui->refresh();
-
- for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
-
- resui->refresh();
- currentvoicecounter->do_callback();
-}
diff --git a/plugins/zynaddsubfx/src/UI/ADnoteUI.fl b/plugins/zynaddsubfx/src/UI/ADnoteUI.fl
deleted file mode 100644
index 748156c..0000000
--- a/plugins/zynaddsubfx/src/UI/ADnoteUI.fl
+++ /dev/null
@@ -1,1161 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0109
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include "../Params/ADnoteParameters.h"} {public
-}
-
-decl {\#include "../Misc/Util.h"} {public
-}
-
-decl {\#include "../Misc/Master.h"} {public
-}
-
-decl {\#include "ResonanceUI.h"} {public
-}
-
-decl {\#include <FL/Fl_Box.H>} {public
-}
-
-decl {\#include <FL/Fl_Group.H>} {public
-}
-
-decl {\#include <math.h>} {}
-
-decl {\#include <stdio.h>} {}
-
-decl {\#include <stdlib.h>} {}
-
-decl {\#include <string.h>} {}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include "EnvelopeUI.h"} {public
-}
-
-decl {\#include "LFOUI.h"} {public
-}
-
-decl {\#include "FilterUI.h"} {public
-}
-
-decl {\#include "OscilGenUI.h"} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class ADvoicelistitem {: {public Fl_Group}
-} {
- Function {make_window()} {private
- } {
- Fl_Window ADnoteVoiceListItem {
- private xywh {247 599 615 30} type Double hide
- class Fl_Group
- } {
- Fl_Group voicelistitemgroup {
- private xywh {50 0 570 25} box FLAT_BOX
- code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
- } {
- Fl_Value_Slider voicevolume {
- callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
- tooltip Volume xywh {90 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PVolume);}
- }
- Fl_Check_Button voiceresonanceenabled {
- callback {pars->VoicePar[nvoice].Presonance=(int)o->value();}
- tooltip {Resonance On/Off} xywh {245 7 15 17} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 11 align 4
- code0 {o->value(pars->VoicePar[nvoice].Presonance);}
- }
- Fl_Value_Slider voicelfofreq {
- callback {pars->VoicePar[nvoice].FreqLfo->Pintensity=(int)o->value();}
- tooltip {Frequency LFO amount} xywh {500 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);}
- }
- Fl_Dial voicepanning {
- callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
- tooltip {Panning (leftmost is Random)} xywh {215 5 20 20} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PPanning);}
- class WidgetPDial
- }
- Fl_Group voiceoscil {open
- xywh {60 5 30 20} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
- code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
- code2 {if (pars->VoicePar[nvoice].Pextoscil != -1) {osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,master);}}
- } {}
- Fl_Value_Output detunevalueoutput {
- callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
- xywh {265 5 45 20} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
- code0 {o->value(getdetune(pars->VoicePar[nvoice].PDetuneType,0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
- }
- Fl_Slider voicedetune {
- callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();}
- tooltip {Fine Detune (cents)} xywh {315 5 185 20} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
- code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
- }
- Fl_Box noiselabel {
- label N
- callback {if (pars->VoicePar[nvoice].Type==0) {
- o->hide();
- voiceresonanceenabled->activate();
- detunevalueoutput->activate();
- voicedetune->activate();
- voicelfofreq->activate();
- voiceoscil->activate();
-} else {
- o->show();
- voiceresonanceenabled->deactivate();
- detunevalueoutput->deactivate();
- voicedetune->deactivate();
- voicelfofreq->deactivate();
- voiceoscil->deactivate();
-};}
- xywh {65 5 20 20} labelfont 1 labelsize 13 labelcolor 7
- code0 {if (pars->VoicePar[nvoice].Type==0) o->hide();}
- }
- }
- Fl_Check_Button voiceenabled {
- label 01
- callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
-if (o->value()==0) voicelistitemgroup->deactivate();
-else voicelistitemgroup->activate();
-o->redraw();}
- private xywh {30 5 20 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 4
- code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
- code1 {o->value(pars->VoicePar[nvoice].Enabled);}
- }
- }
- }
- Function {ADvoicelistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {nvoice=0;
-pars=NULL;} {}
- }
- Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {} {
- code {pars=parameters;
-nvoice=nvoice_;
-master=master_;
-make_window();
-ADnoteVoiceListItem->show();
-end();} {}
- }
- Function {refreshlist()} {} {
- code {voiceenabled->value(pars->VoicePar[nvoice].Enabled);
-voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance);
-voicevolume->value(pars->VoicePar[nvoice].PVolume);
-voicedetune->value(pars->VoicePar[nvoice].PDetune-8192);
-voicepanning->value(pars->VoicePar[nvoice].PPanning);
-voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
-if (pars->VoicePar[nvoice].Pextoscil != -1) {
- osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
-} else
- osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
-if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate();
- else voicelistitemgroup->activate();
-detunevalueoutput->do_callback();
-noiselabel->do_callback();
-ADnoteVoiceListItem->redraw();} {}
- }
- Function {~ADvoicelistitem()} {} {
- code {ADnoteVoiceListItem->hide();
-//delete(ADnoteVoiceListItem);} {}
- }
- decl {ADnoteParameters *pars;} {}
- decl {int nvoice;} {}
- decl {Oscilloscope *osc;} {}
- decl {Master *master;} {}
-}
-
-class ADvoiceUI {open : {public Fl_Group}
-} {
- Function {make_window()} {open
- } {
- Fl_Window ADnoteVoiceParameters {
- label Voice
- xywh {69 185 765 575} type Double
- class Fl_Group visible
- } {
- Fl_Group voiceparametersgroup {open
- xywh {0 0 765 580} box THIN_UP_BOX color 48
- code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
- } {
- Fl_Group voicemodegroup {open
- xywh {0 5 760 575}
- } {
- Fl_Group voiceFMparametersgroup {
- label MODULATOR
- xywh {530 5 230 565} box THIN_UP_FRAME color 48 labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- code0 {if (pars->VoicePar[nvoice].PFMEnabled==0) o->deactivate();}
- } {
- Fl_Group modfrequency {
- label {Mod.FREQUENCY}
- xywh {535 220 220 145} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Group voiceFMfreqenvgroup {
- label {ADSynth Modulator - Frequency Envelope}
- xywh {540 290 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->VoicePar[nvoice].FMFreqEnvelope);}
- code1 {if (pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled==0) o->deactivate();}
- class EnvelopeUI
- } {}
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voiceFMfreqenvgroup->deactivate();
-else voiceFMfreqenvgroup->activate();
-o->redraw();}
- tooltip {Forced Relase} xywh {545 295 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled);}
- }
- Fl_Counter {} {
- label {Coarse Det.}
- callback {int k=(int) o->value();
-if (k<0) k+=1024;
-pars->VoicePar[nvoice].PFMCoarseDetune = k+
- (pars->VoicePar[nvoice].PFMCoarseDetune/1024)*1024;}
- tooltip {Coarse Detune} xywh {685 270 60 15} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
- code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
- code1 {if (k>=512) k-=1024;}
- code2 {o->value(k);}
- code3 {o->lstep(10);}
- }
- Fl_Counter {} {
- label Octave
- callback {int k=(int) o->value();
-if (k<0) k+=16;
-pars->VoicePar[nvoice].PFMCoarseDetune = k*1024+
- pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
- tooltip Octave xywh {625 270 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
- code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune/1024;}
- code1 {if (k>=8) k-=16;}
- code2 {o->value(k);}
- }
- Fl_Slider {} {
- callback {pars->VoicePar[nvoice].PFMDetune=(int)o->value()+8192;
-fmdetunevalueoutput->do_callback();}
- tooltip {Fine Detune (cents)} xywh {590 245 160 10} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
- code0 {o->value(pars->VoicePar[nvoice].PFMDetune-8192);}
- }
- Fl_Value_Output fmdetunevalueoutput {
- label Detune
- callback {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
- xywh {540 245 45 13} labelsize 8 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 8
- code0 {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
- code1 {//o->value(getdetune(pars->VoicePar[nvoice].PFMDetuneType,0,pars->VoicePar[nvoice].PFMDetune));}
- }
- Fl_Choice {} {
- label {Detune Type}
- callback {pars->VoicePar[nvoice].PFMDetuneType=(int) o->value();
-fmdetunevalueoutput->do_callback();} open
- xywh {540 270 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
- code1 {o->value(pars->VoicePar[nvoice].PFMDetuneType);}
- } {}
- }
- Fl_Group {} {
- label {Mod.AMPLITUDE}
- xywh {535 60 220 160} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Value_Slider {} {
- label Vol
- callback {pars->VoicePar[nvoice].PFMVolume=(int)o->value();}
- tooltip Volume xywh {540 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PFMVolume);}
- }
- Fl_Value_Slider {} {
- label {V.Sns}
- callback {pars->VoicePar[nvoice].PFMVelocityScaleFunction=(int) o->value();}
- tooltip {Velocity Sensing Function (rightmost to disable)} xywh {540 100 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PFMVelocityScaleFunction);}
- }
- Fl_Group voiceFMampenvgroup {
- label {ADSynth Modulator - Amplitude Envelope} open
- xywh {540 145 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->VoicePar[nvoice].FMAmpEnvelope);}
- code1 {if (pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled==0) o->deactivate();}
- class EnvelopeUI
- } {}
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voiceFMampenvgroup->deactivate();
-else voiceFMampenvgroup->activate();
-o->redraw();}
- tooltip {Forced Relase} xywh {545 150 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled);}
- }
- Fl_Value_Slider {} {
- label {F.Damp}
- callback {pars->VoicePar[nvoice].PFMVolumeDamp=(int) o->value()+64;}
- tooltip {Modulator Damp at Higher frequency} xywh {540 120 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 minimum -64 maximum 63 step 1
- code0 {o->value(pars->VoicePar[nvoice].PFMVolumeDamp-64);}
- }
- }
- Fl_Group modoscil {
- xywh {535 365 220 200}
- } {
- Fl_Group fmoscil {open
- xywh {535 425 220 140} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
- code0 {oscFM=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;}
- code2 {oscFM->init(pars->VoicePar[nv].FMSmp,0,pars->VoicePar[nvoice].PFMoscilphase,master);}
- } {}
- Fl_Box {} {
- label {Mod.Oscillator}
- xywh {535 365 155 20} labelfont 1 align 20
- }
- Fl_Button changeFMoscilbutton {
- label Change
- callback {if (oscedit!=NULL) delete(oscedit);
-
-int nv=nvoice;
-if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;
-
-oscedit=new OscilEditor(pars->VoicePar[nv].FMSmp,fmoscil,NULL,NULL,master);}
- xywh {700 370 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
- code0 {if (pars->VoicePar[nvoice].PextFMoscil>=0) o->labelcolor(FL_BLUE);}
- }
- Fl_Slider {} {
- label Phase
- callback {pars->VoicePar[nvoice].PFMoscilphase=64-(int)o->value();
-oscFM->phase=64-(int) o->value();
-fmoscil->redraw();}
- xywh {665 400 65 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
- code0 {o->value(64-pars->VoicePar[nvoice].PFMoscilphase);}
- }
- Fl_Choice {} {
- label Use
- callback {pars->VoicePar[nvoice].PextFMoscil=(int)o->value()-1;
-if ((int) o->value() != 0) {
- oscFM->init(pars->VoicePar[(int) o->value()-1].FMSmp,master);
- changeFMoscilbutton->labelcolor(FL_BLUE);
-} else {
- oscFM->init(pars->VoicePar[nvoice].FMSmp,master);
- changeFMoscilbutton->labelcolor(FL_BLACK);
-};
-voiceFMparametersgroup->redraw();} open
- xywh {560 395 75 15} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
- code0 {o->add("Internal");}
- code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};}
- code3 {o->value(pars->VoicePar[nvoice].PextFMoscil+1);}
- } {}
- }
- Fl_Choice {} {
- label {External Mod.}
- callback {pars->VoicePar[nvoice].PFMVoice=(int)o->value()-1;
-if ((int) o->value() != 0) {
- modoscil->deactivate();
- modfrequency->deactivate();
-} else {
- modoscil->activate();
- modfrequency->activate();
-};
-voiceFMparametersgroup->redraw();} open
- xywh {635 40 85 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {o->add("OFF");}
- code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtMod.%2d",i+1);o->add(tmp);};}
- code2 {o->value(pars->VoicePar[nvoice].PFMVoice+1);}
- code3 {if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}}
- } {}
- }
- Fl_Choice {} {
- label {Type:}
- callback {pars->VoicePar[nvoice].PFMEnabled=(int)o->value();
-if (o->value()==0) voiceFMparametersgroup->deactivate();
-else voiceFMparametersgroup->activate();
-o->redraw();}
- xywh {535 40 80 20} down_box BORDER_BOX align 5
- code0 {o->value(pars->VoicePar[nvoice].PFMEnabled);}
- } {
- MenuItem {} {
- label OFF
- xywh {40 40 100 20} labelfont 1
- }
- MenuItem {} {
- label MORPH
- xywh {50 50 100 20} labelfont 1
- }
- MenuItem {} {
- label RING
- xywh {60 60 100 20} labelfont 1
- }
- MenuItem {} {
- label PM
- xywh {70 70 100 20} labelfont 1
- }
- MenuItem {} {
- label FM
- xywh {80 80 100 20} labelfont 1
- }
- MenuItem {} {
- label PITCH
- xywh {90 90 100 20} labelfont 1 deactivate
- }
- }
- Fl_Group {} {
- label FREQUENCY
- xywh {5 250 525 120} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Group voicefreqenvgroup {
- label {ADSynth Voice - Frequency Envelope} open
- xywh {10 290 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->VoicePar[nvoice].FreqEnvelope);}
- code1 {if (pars->VoicePar[nvoice].PFreqEnvelopeEnabled==0) o->deactivate();}
- class EnvelopeUI
- } {}
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PFreqEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voicefreqenvgroup->deactivate();
-else voicefreqenvgroup->activate();
-o->redraw();}
- tooltip {Forced Relase} xywh {15 295 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PFreqEnvelopeEnabled);}
- }
- Fl_Group voicefreqlfogroup {
- label {Frequency LFO } open
- xywh {215 290 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->VoicePar[nvoice].FreqLfo);}
- code1 {if (pars->VoicePar[nvoice].PFreqLfoEnabled==0) o->deactivate();}
- class LFOUI
- } {}
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PFreqLfoEnabled=(int)o->value();
-if (o->value()==0) voicefreqlfogroup->deactivate();
-else voicefreqlfogroup->activate();
-o->redraw();}
- tooltip {Forced Relase} xywh {220 295 55 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PFreqLfoEnabled);}
- }
- Fl_Counter {} {
- label Octave
- callback {int k=(int) o->value();
-if (k<0) k+=16;
-pars->VoicePar[nvoice].PCoarseDetune = k*1024+
- pars->VoicePar[nvoice].PCoarseDetune%1024;}
- tooltip Octave xywh {470 270 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
- code0 {int k=pars->VoicePar[nvoice].PCoarseDetune/1024;}
- code1 {if (k>=8) k-=16;}
- code2 {o->value(k);}
- }
- Fl_Counter {} {
- label {Coarse Det.}
- callback {int k=(int) o->value();
-if (k<0) k+=1024;
-pars->VoicePar[nvoice].PCoarseDetune = k+
- (pars->VoicePar[nvoice].PCoarseDetune/1024)*1024;}
- tooltip {Coarse Detune} xywh {455 340 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
- code0 {int k=pars->VoicePar[nvoice].PCoarseDetune%1024;}
- code1 {if (k>=512) k-=1024;}
- code2 {o->value(k);}
- code3 {o->lstep(10);}
- }
- Fl_Slider {} {
- callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();}
- tooltip {Fine Detune (cents)} xywh {58 272 392 13} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
- code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
- }
- Fl_Value_Output detunevalueoutput {
- label Detune
- callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
- xywh {10 272 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
- code0 {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
- }
- Fl_Check_Button {} {
- label 440Hz
- callback {int x=(int) o->value();
-pars->VoicePar[nvoice].Pfixedfreq=x;
-if (x==0) fixedfreqetdial->deactivate();
- else fixedfreqetdial->activate();}
- tooltip {Set the voice base frequency to 440Hz} xywh {345 253 55 15} down_box DOWN_BOX labelfont 1 labelsize 11
- code0 {o->value(pars->VoicePar[nvoice].Pfixedfreq);}
- }
- Fl_Dial fixedfreqetdial {
- label {Eq.T.}
- callback {pars->VoicePar[nvoice].PfixedfreqET=(int) o->value();}
- tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {405 255 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PfixedfreqET);}
- code1 {if (pars->VoicePar[nvoice].Pfixedfreq==0) o->deactivate();}
- class WidgetPDial
- }
- Fl_Choice {} {
- label {Detune Type}
- callback {pars->VoicePar[nvoice].PDetuneType=(int) o->value();
-detunevalueoutput->do_callback();} open
- xywh {450 305 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
- code1 {o->value(pars->VoicePar[nvoice].PDetuneType);}
- } {}
- }
- Fl_Group voiceoscil {
- xywh {80 375 445 145} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
- code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {int nv=nvoice; if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;}
- code2 {osc->init(pars->VoicePar[nv].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
- } {}
- Fl_Button changevoiceoscilbutton {
- label Change
- callback {if (oscedit!=NULL) delete(oscedit);
-
-int nv=nvoice;
-if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;
-
-oscedit=new OscilEditor(pars->VoicePar[nv].OscilSmp,voiceoscil,NULL,NULL,master);}
- xywh {5 475 65 20} box THIN_UP_BOX labelfont 1 labelsize 11
- code0 {if (pars->VoicePar[nvoice].Pextoscil>=0) o->labelcolor(FL_BLUE);}
- }
- Fl_Box {} {
- label {Voice Oscillator}
- xywh {5 375 75 35} labelfont 1 labelsize 12 align 128
- }
- Fl_Slider {} {
- label Phase
- callback {pars->VoicePar[nvoice].Poscilphase=64-(int)o->value();
-osc->phase=64-(int) o->value();
-voiceoscil->redraw();}
- xywh {10 420 65 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
- code0 {o->value(64-pars->VoicePar[nvoice].Poscilphase);}
- }
- Fl_Check_Button {} {
- label {R.}
- callback {pars->VoicePar[nvoice].Presonance=(int) o->value();}
- tooltip {Resonance On/Off} xywh {210 5 35 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 11
- code0 {o->value(pars->VoicePar[nvoice].Presonance);}
- }
- Fl_Choice {} {
- label {Use Oscil.}
- callback {pars->VoicePar[nvoice].Pextoscil=(int)o->value()-1;
-if ((int) o->value() != 0) {
- osc->init(pars->VoicePar[(int) o->value()-1].OscilSmp,master);
- changevoiceoscilbutton->labelcolor(FL_BLUE);
-} else {
- osc->init(pars->VoicePar[nvoice].OscilSmp,master);
- changevoiceoscilbutton->labelcolor(FL_BLACK);
-};
-
-voiceparametersgroup->redraw();
-voiceonbutton->redraw();} open
- xywh {5 455 65 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {o->add("Internal");}
- code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"Ext.%2d",i+1);o->add(tmp);};}
- code3 {o->value(pars->VoicePar[nvoice].Pextoscil+1);}
- } {}
- Fl_Group {} {open
- xywh {5 525 515 45} box ENGRAVED_BOX
- } {
- Fl_Dial {} {
- label Stereo
- callback {pars->VoicePar[nvoice].Unison_stereo_spread=(int)o->value();}
- tooltip {Stereo Spread} xywh {285 540 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].Unison_stereo_spread);}
- class WidgetPDial
- }
- Fl_Choice {} {
- label Unison
- callback {pars->set_unison_size_index(nvoice,(int) o->value());} open selected
- tooltip {Unison size} xywh {10 545 75 20} down_box BORDER_BOX labelfont 1 align 5 textfont 1 textsize 10
- code0 {o->add("OFF");char tmp[100];for (int i=1;ADnote_unison_sizes[i];i++){snprintf(tmp,100,"size %d",ADnote_unison_sizes[i]);o->add(tmp);};}
- code1 {o->value(pars->get_unison_size_index(nvoice));}
- } {}
- Fl_Dial {} {
- label Vibratto
- callback {pars->VoicePar[nvoice].Unison_vibratto=(int)o->value();}
- tooltip Vibratto xywh {340 540 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto);}
- class WidgetPDial
- }
- Fl_Choice {} {
- label Invert
- callback {pars->VoicePar[nvoice].Unison_invert_phase=(int) o->value();} open
- tooltip {Phase Invert} xywh {445 545 65 15} down_box BORDER_BOX labelsize 11 align 5 textfont 1 textsize 10
- code0 {o->add("None");o->add("Random");char tmp[100];for (int i=2;i<=5;i++){snprintf(tmp,100,"%d %%",100/i);o->add(tmp);};}
- code1 {o->value(pars->VoicePar[nvoice].Unison_invert_phase);}
- } {}
- Fl_Slider {} {
- label {Frequency Spread}
- callback {pars->VoicePar[nvoice].Unison_frequency_spread=(int)o->value();
-unisonspreadoutput->do_callback();}
- tooltip {Frequency Spread of the Unison} xywh {95 547 125 13} type {Horz Knob} box FLAT_BOX labelsize 12 align 1 maximum 127 step 1 value 64
- code0 {o->value(pars->VoicePar[nvoice].Unison_frequency_spread);}
- }
- Fl_Value_Output unisonspreadoutput {
- label {(cents)}
- callback {o->value(pars->getUnisonFrequencySpreadCents(nvoice));}
- xywh {225 545 40 15} labelsize 10 align 5 maximum 1000 step 0.1 textfont 1 textsize 10
- code0 {o->value(pars->getUnisonFrequencySpreadCents(nvoice));}
- }
- Fl_Dial {} {
- label {Vib.speed}
- callback {pars->VoicePar[nvoice].Unison_vibratto_speed=(int)o->value();}
- tooltip {Vibratto Average Speed} xywh {390 540 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto_speed);}
- class WidgetPDial
- }
- }
- }
- Fl_Group {} {
- label AMPLITUDE
- xywh {5 40 240 210} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Value_Slider {} {
- label Vol
- callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
- tooltip Volume xywh {10 60 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PVolume);}
- }
- Fl_Value_Slider {} {
- label {V.Sns}
- callback {pars->VoicePar[nvoice].PAmpVelocityScaleFunction=(int) o->value();}
- tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PAmpVelocityScaleFunction);}
- }
- Fl_Group voiceampenvgroup {
- label {ADSynth Voice - Amplitude Envelope} open
- xywh {10 105 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->VoicePar[nvoice].AmpEnvelope);}
- code1 {if (pars->VoicePar[nvoice].PAmpEnvelopeEnabled==0) o->deactivate();}
- class EnvelopeUI
- } {}
- Fl_Dial {} {
- label Pan
- callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
- tooltip {Panning (leftmost is Random)} xywh {210 60 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PPanning);}
- class WidgetPDial
- }
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PAmpEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voiceampenvgroup->deactivate();
-else voiceampenvgroup->activate();
-o->redraw();}
- tooltip {Forced Relase} xywh {15 110 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PAmpEnvelopeEnabled);}
- }
- Fl_Group voiceamplfogroup {
- label {Amplitude LFO } open
- xywh {10 175 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->VoicePar[nvoice].AmpLfo);}
- code1 {if (pars->VoicePar[nvoice].PAmpLfoEnabled==0) o->deactivate();}
- class LFOUI
- } {}
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PAmpLfoEnabled=(int)o->value();
-if (o->value()==0) voiceamplfogroup->deactivate();
-else voiceamplfogroup->activate();
-o->redraw();}
- tooltip {Forced Relase} xywh {15 180 55 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PAmpLfoEnabled);}
- }
- Fl_Check_Button {} {
- label Minus
- callback {pars->VoicePar[nvoice].PVolumeminus=(int)o->value();}
- xywh {10 45 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PVolumeminus);}
- }
- }
- Fl_Group voicefiltergroup {
- label FILTER
- xywh {245 5 285 245} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- code0 {if (pars->VoicePar[nvoice].PFilterEnabled==0) o->deactivate();}
- } {
- Fl_Group {} {
- label {ADsynth Voice - Filter} open
- xywh {250 30 275 75} box FLAT_BOX color 50 align 144
- code0 {o->init(pars->VoicePar[nvoice].VoiceFilter,NULL,NULL);}
- class FilterUI
- } {}
- Fl_Group voicefilterenvgroup {
- label {ADSynth Voice - Filter Envelope} open
- xywh {250 105 275 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->VoicePar[nvoice].FilterEnvelope);}
- code1 {if (pars->VoicePar[nvoice].PFilterEnvelopeEnabled==0) o->deactivate();}
- class EnvelopeUI
- } {}
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PFilterEnvelopeEnabled=(int)o->value();
-if (o->value()==0) voicefilterenvgroup->deactivate();
-else voicefilterenvgroup->activate();
-o->redraw();}
- tooltip {Forced Relase} xywh {255 110 55 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PFilterEnvelopeEnabled);}
- }
- Fl_Group voicefilterlfogroup {
- label {Filter LFO } open
- xywh {250 175 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->VoicePar[nvoice].FilterLfo);}
- code1 {if (pars->VoicePar[nvoice].PFilterLfoEnabled==0) o->deactivate();}
- class LFOUI
- } {}
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PFilterLfoEnabled=(int)o->value();
-if (o->value()==0) voicefilterlfogroup->deactivate();
-else voicefilterlfogroup->activate();
-o->redraw();}
- tooltip {Forced Relase} xywh {255 180 55 10} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PFilterLfoEnabled);}
- }
- }
- Fl_Group {} {
- label 01
- xywh {5 5 55 35} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 16
- code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
- } {}
- Fl_Choice {} {
- callback {int x=(int) o->value();
-pars->VoicePar[nvoice].Type=x;
-if (x==0) voicemodegroup->activate();
- else voicemodegroup->deactivate();
-noiselabel->do_callback();}
- tooltip {Oscillator Type (sound/noise)} xywh {5 500 65 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
- code0 {o->value(pars->VoicePar[nvoice].Type);}
- code1 {if (pars->VoicePar[nvoice].Type!=0) voicemodegroup->deactivate();}
- } {
- MenuItem {} {
- label Sound
- xywh {5 5 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label NOISE
- xywh {15 15 100 20} labelfont 1 labelsize 11 labelcolor 1
- }
- }
- Fl_Check_Button bypassfiltercheckbutton {
- label {Bypass Global F.}
- callback {pars->VoicePar[nvoice].Pfilterbypass=(int)o->value();}
- xywh {425 10 100 20} down_box DOWN_BOX labelfont 1 labelsize 10 align 148
- code0 {o->value(pars->VoicePar[nvoice].Pfilterbypass);}
- }
- Fl_Group {} {
- xywh {115 5 95 35} box THIN_UP_BOX
- } {
- Fl_Value_Slider {} {
- label Delay
- callback {pars->VoicePar[nvoice].PDelay=(int)o->value();}
- tooltip Volume xywh {120 21 84 12} type {Horz Knob} box FLAT_BOX labelsize 11 align 5 maximum 127 step 1
- code0 {o->value(pars->VoicePar[nvoice].PDelay);}
- }
- }
- Fl_Check_Button {} {
- label Enable
- callback {pars->VoicePar[nvoice].PFilterEnabled=(int)o->value();
-if (o->value()==0) voicefiltergroup->deactivate();
-else voicefiltergroup->activate();
-o->redraw();
-bypassfiltercheckbutton->redraw();}
- tooltip {Enable Filter} xywh {250 15 60 15} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->VoicePar[nvoice].PFilterEnabled);}
- }
- Fl_Box noiselabel {
- label {White Noise}
- callback {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
- xywh {150 415 300 65} labelfont 1 labelsize 50 labelcolor 7
- code0 {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
- }
- }
- Fl_Check_Button voiceonbutton {
- label On
- callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
-if (o->value()==0) voiceparametersgroup->deactivate();
-else voiceparametersgroup->activate();
-o->redraw();}
- xywh {60 5 55 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13
- code0 {o->value(pars->VoicePar[nvoice].Enabled);}
- }
- }
- }
- Function {ADvoiceUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {nvoice=0;
-pars=NULL;
-oscedit=NULL;} {}
- }
- Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {open
- } {
- code {pars=parameters;
-nvoice=nvoice_;
-master=master_;
-make_window();
-end();
-ADnoteVoiceParameters->show();} {}
- }
- Function {~ADvoiceUI()} {} {
- code {ADnoteVoiceParameters->hide();
-hide();
-if (oscedit!=NULL) {
- delete(oscedit);
-};
-//delete (ADnoteVoiceParameters);} {}
- }
- decl {int nvoice;} {}
- decl {ADnoteParameters *pars;} {}
- decl {OscilEditor *oscedit;} {}
- decl {Oscilloscope *osc;} {}
- decl {Oscilloscope *oscFM;} {}
- decl {Master *master;} {}
-}
-
-class ADnoteUI {open : {public PresetsUI_}
-} {
- Function {make_window()} {open private
- } {
- Fl_Window ADnoteGlobalParameters {
- label {ADsynth Global Parameters of the Instrument}
- xywh {462 186 535 405} type Double hide
- } {
- Fl_Group {} {
- label FREQUENCY
- xywh {5 255 525 115} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Group freqenv {
- label {ADSynth Global - Frequency Envelope} open
- xywh {10 295 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->GlobalPar.FreqEnvelope);}
- class EnvelopeUI
- } {}
- Fl_Counter octave {
- label Octave
- callback {int k=(int) o->value();
-if (k<0) k+=16;
-pars->GlobalPar.PCoarseDetune = k*1024+
- pars->GlobalPar.PCoarseDetune%1024;}
- tooltip Octave xywh {450 275 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
- code0 {int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;}
- code2 {o->value(k);}
- }
- Fl_Counter coarsedet {
- label {Coarse det.}
- callback {int k=(int) o->value();
-if (k<0) k+=1024;
-pars->GlobalPar.PCoarseDetune = k+
- (pars->GlobalPar.PCoarseDetune/1024)*1024;}
- tooltip {Coarse Detune} xywh {455 345 60 20} labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 11
- code0 {int k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;}
- code2 {o->value(k);}
- code3 {o->lstep(10);}
- }
- Fl_Group freqlfo {
- label {Frequency LFO } open
- xywh {215 295 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->GlobalPar.FreqLfo);}
- class LFOUI
- } {}
- Fl_Slider freq {
- callback {pars->GlobalPar.PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();}
- tooltip {Fine Detune (cents)} xywh {60 275 385 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
- code0 {o->value(pars->GlobalPar.PDetune-8192);}
- }
- Fl_Value_Output detunevalueoutput {
- label Detune
- callback {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
- xywh {12 275 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
- code0 {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
- }
- Fl_Choice detunetype {
- label {Detune Type}
- callback {pars->GlobalPar.PDetuneType=(int) o->value()+1;
-detunevalueoutput->do_callback();} open
- xywh {450 315 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
- code1 {o->value(pars->GlobalPar.PDetuneType-1);}
- } {}
- Fl_Dial {} {
- label relBW
- callback {pars->GlobalPar.PBandwidth=(int) o->value();
-
-pars->getBandwidthDetuneMultiplier();
-
-for (int i=0;i<NUM_VOICES;i++){
- voicelistitem[i]->refreshlist();
-};}
- tooltip {Bandwidth - how the relative fine detune of the voice are changed} xywh {500 270 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->GlobalPar.PBandwidth);}
- class WidgetPDial
- }
- }
- Fl_Group {} {
- label AMPLITUDE
- xywh {5 5 240 250} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Value_Slider volume {
- label Vol
- callback {pars->GlobalPar.PVolume=(int)o->value();}
- tooltip Volume xywh {10 30 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->GlobalPar.PVolume);}
- }
- Fl_Value_Slider vsns {
- label {V.Sns}
- callback {pars->GlobalPar.PAmpVelocityScaleFunction=(int) o->value();}
- tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->GlobalPar.PAmpVelocityScaleFunction);}
- }
- Fl_Dial pan {
- label Pan
- callback {pars->GlobalPar.PPanning=(int) o->value();}
- tooltip {Panning (leftmost is Random)} xywh {210 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(pars->GlobalPar.PPanning);}
- class WidgetPDial
- }
- Fl_Dial pstr {
- label {P.Str.}
- callback {pars->GlobalPar.PPunchStrength=(int) o->value();}
- tooltip {Punch Strength} xywh {125 227 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->GlobalPar.PPunchStrength);}
- class WidgetPDial
- }
- Fl_Dial pt {
- label {P.t.}
- callback {pars->GlobalPar.PPunchTime=(int) o->value();}
- tooltip {Punch Time (duration)} xywh {155 227 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->GlobalPar.PPunchTime);}
- class WidgetPDial
- }
- Fl_Dial pstc {
- label {P.Stc.}
- callback {pars->GlobalPar.PPunchStretch=(int) o->value();}
- tooltip {Punch Stretch} xywh {185 227 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->GlobalPar.PPunchStretch);}
- class WidgetPDial
- }
- Fl_Dial pvel {
- label {P.Vel.}
- callback {pars->GlobalPar.PPunchVelocitySensing=(int) o->value();}
- tooltip {Punch Velocity Sensing} xywh {215 227 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->GlobalPar.PPunchVelocitySensing);}
- class WidgetPDial
- }
- Fl_Group ampenv {
- label {ADSynth Global - Amplitude Envelope} open
- xywh {10 75 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->GlobalPar.AmpEnvelope);}
- class EnvelopeUI
- } {}
- Fl_Group amplfo {
- label {Amplitude LFO } open
- xywh {10 145 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->GlobalPar.AmpLfo);}
- class LFOUI
- } {}
- Fl_Check_Button rndgrp {
- label {Rnd Grp}
- callback {pars->GlobalPar.Hrandgrouping=(int) o->value();}
- tooltip {How the Harmonic Amplitude is applied to voices that use the same oscillator} xywh {70 225 40 25} down_box DOWN_BOX labelsize 10 align 148
- code0 {o->value(pars->GlobalPar.Hrandgrouping);}
- }
- }
- Fl_Group {} {
- label FILTER
- xywh {245 5 285 250} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Group filterenv {
- label {ADSynth Global - Filter Envelope} open
- xywh {250 110 275 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->GlobalPar.FilterEnvelope);}
- class EnvelopeUI
- } {}
- Fl_Group filterlfo {
- label {Filter LFO} open
- xywh {250 180 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->GlobalPar.FilterLfo);}
- class LFOUI
- } {}
- Fl_Group filterui {
- label {ADsynth Global - Filter} open
- xywh {250 35 275 75} box FLAT_BOX color 50 align 144
- code0 {o->init(pars->GlobalPar.GlobalFilter,&pars->GlobalPar.PFilterVelocityScale,&pars->GlobalPar.PFilterVelocityScaleFunction);}
- class FilterUI
- } {}
- }
- Fl_Check_Button stereo {
- label Stereo
- callback {pars->GlobalPar.PStereo=(int) o->value();}
- xywh {5 220 65 35} box ENGRAVED_BOX down_box DOWN_BOX labelfont 1 labelsize 11
- code0 {o->value(pars->GlobalPar.PStereo);}
- }
- Fl_Button {} {
- label {Show Voice List}
- callback {for (int i=0;i<NUM_VOICES;i++){
- voicelistitem[i]->refreshlist();
-}
-ADnoteVoiceList->show();}
- xywh {180 375 125 25}
- }
- Fl_Button {} {
- label {Show Voice Parameters}
- callback {ADnoteVoice->show();}
- xywh {5 375 170 25} labelfont 1 labelsize 12
- }
- Fl_Button {} {
- label Close
- callback {ADnoteGlobalParameters->hide();}
- xywh {470 375 60 25} box THIN_UP_BOX
- }
- Fl_Button {} {
- label Resonance
- callback {resui->resonancewindow->redraw();
-resui->resonancewindow->show();}
- tooltip Resonance xywh {309 375 86 25} box THIN_UP_BOX
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(pars);}
- xywh {405 380 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(pars,this);}
- xywh {435 380 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- }
- Fl_Window ADnoteVoice {
- label {ADsynth Voice Parameters}
- xywh {152 271 765 620} type Double visible
- } {
- Fl_Group advoice {
- xywh {0 0 760 575} box BORDER_BOX
- code0 {o->init(pars,nvoice,master);}
- code1 {o->show();}
- class ADvoiceUI
- } {}
- Fl_Button {} {
- label {Close Window}
- callback {ADnoteVoice->hide();}
- xywh {300 585 195 25} box THIN_UP_BOX labelfont 1
- }
- Fl_Counter currentvoicecounter {
- label {Current Voice}
- callback {nvoice=(int)o->value()-1;
-advoice->hide();
-ADnoteVoice->remove(advoice);
-delete advoice;
-advoice=new ADvoiceUI(0,0,765,585);
-ADnoteVoice->add(advoice);
-advoice->init(pars,nvoice,master);
-advoice->show();
-ADnoteVoice->redraw();}
- xywh {5 585 130 25} type Simple labelfont 1 align 8 minimum 0 maximum 2 step 1 value 1 textfont 1 textsize 13
- code0 {o->bounds(1,NUM_VOICES);}
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(pars,nvoice);}
- xywh {700 590 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(pars,this,nvoice);}
- xywh {730 590 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- }
- Fl_Window ADnoteVoiceList {
- label {ADsynth Voices list}
- xywh {32 266 650 260} type Double hide
- } {
- Fl_Text_Display {} {
- label {No.}
- xywh {10 15 30 10} box NO_BOX labelfont 1 labelsize 11
- }
- Fl_Text_Display {} {
- label Vol
- xywh {145 15 30 10} box NO_BOX labelfont 1 labelsize 11
- }
- Fl_Text_Display {} {
- label Detune
- xywh {384 15 25 10} box NO_BOX labelfont 1 labelsize 11
- }
- Fl_Text_Display {} {
- label Pan
- xywh {210 15 30 10} box NO_BOX labelfont 1 labelsize 11
- }
- Fl_Text_Display {} {
- label {Vib. Depth}
- xywh {560 15 30 10} box NO_BOX labelfont 1 labelsize 11
- }
- Fl_Text_Display {} {
- label {R.}
- xywh {245 15 25 10} box NO_BOX labelfont 1 labelsize 11
- }
- Fl_Button {} {
- label {Hide Voice List}
- callback {ADnoteVoiceList->hide();}
- xywh {255 237 125 20}
- }
- Fl_Scroll {} {open
- xywh {0 15 640 220} type VERTICAL box THIN_UP_BOX
- } {
- Fl_Pack {} {open
- xywh {0 20 620 210}
- code0 {for (int i=0;i<NUM_VOICES;i++){voicelistitem[i]=new ADvoicelistitem(0,0,620,25,"");voicelistitem[i]->init(pars,i,master);}}
- } {}
- }
- }
- }
- Function {ADnoteUI(ADnoteParameters *parameters,Master *master_)} {} {
- code {pars=parameters;
-master=master_;
-nvoice=0;
-resui=new ResonanceUI(pars->GlobalPar.Reson);
-make_window();} {}
- }
- Function {~ADnoteUI()} {} {
- code {ADnoteVoiceList->hide();
-ADnoteGlobalParameters->hide();
-ADnoteVoice->hide();
-delete(ADnoteVoiceList);
-delete(ADnoteGlobalParameters);
-delete(ADnoteVoice);
-delete(resui);} {}
- }
- Function {refresh()} {} {
- code {volume->value(pars->GlobalPar.PVolume);
-vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction);
-pan->value(pars->GlobalPar.PPanning);
-
-stereo->value(pars->GlobalPar.PStereo);
-rndgrp->value(pars->GlobalPar.Hrandgrouping);
-
-pstr->value(pars->GlobalPar.PPunchStrength);
-pt->value(pars->GlobalPar.PPunchTime);
-pstc->value(pars->GlobalPar.PPunchStretch);
-pvel->value(pars->GlobalPar.PPunchVelocitySensing);
-
-detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
-freq->value(pars->GlobalPar.PDetune-8192);
-
-int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
-octave->value(k);
-
-detunetype->value(pars->GlobalPar.PDetuneType-1);
-k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
-coarsedet->value(k);
-amplfo->refresh();
-freqlfo->refresh();
-filterlfo->refresh();
-
-ampenv->refresh();
-freqenv->refresh();
-filterenv->refresh();
-filterui->refresh();
-
-for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
-
-resui->refresh();
-currentvoicecounter->do_callback();} {}
- }
- decl {ADnoteParameters *pars;} {}
- decl {ResonanceUI *resui;} {}
- decl {Master *master;} {}
- decl {int nvoice;} {}
- decl {ADvoicelistitem *voicelistitem[NUM_VOICES];} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/ADnoteUI.h b/plugins/zynaddsubfx/src/UI/ADnoteUI.h
deleted file mode 100644
index a9a573d..0000000
--- a/plugins/zynaddsubfx/src/UI/ADnoteUI.h
+++ /dev/null
@@ -1,387 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef ADnoteUI_h
-#define ADnoteUI_h
-#include <FL/Fl.H>
-#include "../Params/ADnoteParameters.h"
-#include "../Misc/Util.h"
-#include "../Misc/Master.h"
-#include "ResonanceUI.h"
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Group.H>
-#include "WidgetPDial.h"
-#include "EnvelopeUI.h"
-#include "LFOUI.h"
-#include "FilterUI.h"
-#include "OscilGenUI.h"
-#include "PresetsUI.h"
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Box.H>
-
-class ADvoicelistitem : public Fl_Group {
- Fl_Group* make_window();
- Fl_Group *ADnoteVoiceListItem;
- Fl_Group *voicelistitemgroup;
-public:
- Fl_Value_Slider *voicevolume;
-private:
- void cb_voicevolume_i(Fl_Value_Slider*, void*);
- static void cb_voicevolume(Fl_Value_Slider*, void*);
-public:
- Fl_Check_Button *voiceresonanceenabled;
-private:
- void cb_voiceresonanceenabled_i(Fl_Check_Button*, void*);
- static void cb_voiceresonanceenabled(Fl_Check_Button*, void*);
-public:
- Fl_Value_Slider *voicelfofreq;
-private:
- void cb_voicelfofreq_i(Fl_Value_Slider*, void*);
- static void cb_voicelfofreq(Fl_Value_Slider*, void*);
-public:
- WidgetPDial *voicepanning;
-private:
- void cb_voicepanning_i(WidgetPDial*, void*);
- static void cb_voicepanning(WidgetPDial*, void*);
-public:
- Fl_Group *voiceoscil;
- Fl_Value_Output *detunevalueoutput;
-private:
- void cb_detunevalueoutput_i(Fl_Value_Output*, void*);
- static void cb_detunevalueoutput(Fl_Value_Output*, void*);
-public:
- Fl_Slider *voicedetune;
-private:
- void cb_voicedetune_i(Fl_Slider*, void*);
- static void cb_voicedetune(Fl_Slider*, void*);
-public:
- Fl_Box *noiselabel;
-private:
- void cb_noiselabel_i(Fl_Box*, void*);
- static void cb_noiselabel(Fl_Box*, void*);
- Fl_Check_Button *voiceenabled;
- void cb_voiceenabled_i(Fl_Check_Button*, void*);
- static void cb_voiceenabled(Fl_Check_Button*, void*);
-public:
- ADvoicelistitem(int x,int y, int w, int h, const char *label=0);
- void init(ADnoteParameters *parameters,int nvoice_,Master *master_);
- void refreshlist();
- ~ADvoicelistitem();
-private:
- ADnoteParameters *pars;
- int nvoice;
- Oscilloscope *osc;
- Master *master;
-};
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Button.H>
-
-class ADvoiceUI : public Fl_Group {
-public:
- Fl_Group* make_window();
- Fl_Group *ADnoteVoiceParameters;
- Fl_Group *voiceparametersgroup;
- Fl_Group *voicemodegroup;
- Fl_Group *voiceFMparametersgroup;
- Fl_Group *modfrequency;
- EnvelopeUI *voiceFMfreqenvgroup;
-private:
- void cb_Enable_i(Fl_Check_Button*, void*);
- static void cb_Enable(Fl_Check_Button*, void*);
- void cb_Coarse_i(Fl_Counter*, void*);
- static void cb_Coarse(Fl_Counter*, void*);
- void cb_Octave_i(Fl_Counter*, void*);
- static void cb_Octave(Fl_Counter*, void*);
- void cb__i(Fl_Slider*, void*);
- static void cb_(Fl_Slider*, void*);
-public:
- Fl_Value_Output *fmdetunevalueoutput;
-private:
- void cb_fmdetunevalueoutput_i(Fl_Value_Output*, void*);
- static void cb_fmdetunevalueoutput(Fl_Value_Output*, void*);
- void cb_Detune_i(Fl_Choice*, void*);
- static void cb_Detune(Fl_Choice*, void*);
- void cb_Vol_i(Fl_Value_Slider*, void*);
- static void cb_Vol(Fl_Value_Slider*, void*);
- void cb_V_i(Fl_Value_Slider*, void*);
- static void cb_V(Fl_Value_Slider*, void*);
-public:
- EnvelopeUI *voiceFMampenvgroup;
-private:
- void cb_Enable1_i(Fl_Check_Button*, void*);
- static void cb_Enable1(Fl_Check_Button*, void*);
- void cb_F_i(Fl_Value_Slider*, void*);
- static void cb_F(Fl_Value_Slider*, void*);
-public:
- Fl_Group *modoscil;
- Fl_Group *fmoscil;
- Fl_Button *changeFMoscilbutton;
-private:
- void cb_changeFMoscilbutton_i(Fl_Button*, void*);
- static void cb_changeFMoscilbutton(Fl_Button*, void*);
- void cb_Phase_i(Fl_Slider*, void*);
- static void cb_Phase(Fl_Slider*, void*);
- void cb_Use_i(Fl_Choice*, void*);
- static void cb_Use(Fl_Choice*, void*);
- void cb_External_i(Fl_Choice*, void*);
- static void cb_External(Fl_Choice*, void*);
- void cb_Type_i(Fl_Choice*, void*);
- static void cb_Type(Fl_Choice*, void*);
- static Fl_Menu_Item menu_Type[];
-public:
- EnvelopeUI *voicefreqenvgroup;
-private:
- void cb_Enable2_i(Fl_Check_Button*, void*);
- static void cb_Enable2(Fl_Check_Button*, void*);
-public:
- LFOUI *voicefreqlfogroup;
-private:
- void cb_Enable3_i(Fl_Check_Button*, void*);
- static void cb_Enable3(Fl_Check_Button*, void*);
- void cb_Octave1_i(Fl_Counter*, void*);
- static void cb_Octave1(Fl_Counter*, void*);
- void cb_Coarse1_i(Fl_Counter*, void*);
- static void cb_Coarse1(Fl_Counter*, void*);
- void cb_1_i(Fl_Slider*, void*);
- static void cb_1(Fl_Slider*, void*);
-public:
- Fl_Value_Output *detunevalueoutput;
-private:
- void cb_detunevalueoutput1_i(Fl_Value_Output*, void*);
- static void cb_detunevalueoutput1(Fl_Value_Output*, void*);
- void cb_440Hz_i(Fl_Check_Button*, void*);
- static void cb_440Hz(Fl_Check_Button*, void*);
-public:
- WidgetPDial *fixedfreqetdial;
-private:
- void cb_fixedfreqetdial_i(WidgetPDial*, void*);
- static void cb_fixedfreqetdial(WidgetPDial*, void*);
- void cb_Detune1_i(Fl_Choice*, void*);
- static void cb_Detune1(Fl_Choice*, void*);
-public:
- Fl_Group *voiceoscil;
- Fl_Button *changevoiceoscilbutton;
-private:
- void cb_changevoiceoscilbutton_i(Fl_Button*, void*);
- static void cb_changevoiceoscilbutton(Fl_Button*, void*);
- void cb_Phase1_i(Fl_Slider*, void*);
- static void cb_Phase1(Fl_Slider*, void*);
- void cb_R_i(Fl_Check_Button*, void*);
- static void cb_R(Fl_Check_Button*, void*);
- void cb_Use1_i(Fl_Choice*, void*);
- static void cb_Use1(Fl_Choice*, void*);
- void cb_Stereo_i(WidgetPDial*, void*);
- static void cb_Stereo(WidgetPDial*, void*);
- void cb_Unison_i(Fl_Choice*, void*);
- static void cb_Unison(Fl_Choice*, void*);
- void cb_Vibratto_i(WidgetPDial*, void*);
- static void cb_Vibratto(WidgetPDial*, void*);
- void cb_Invert_i(Fl_Choice*, void*);
- static void cb_Invert(Fl_Choice*, void*);
- void cb_Frequency_i(Fl_Slider*, void*);
- static void cb_Frequency(Fl_Slider*, void*);
-public:
- Fl_Value_Output *unisonspreadoutput;
-private:
- void cb_unisonspreadoutput_i(Fl_Value_Output*, void*);
- static void cb_unisonspreadoutput(Fl_Value_Output*, void*);
- void cb_Vib_i(WidgetPDial*, void*);
- static void cb_Vib(WidgetPDial*, void*);
- void cb_Vol1_i(Fl_Value_Slider*, void*);
- static void cb_Vol1(Fl_Value_Slider*, void*);
- void cb_V1_i(Fl_Value_Slider*, void*);
- static void cb_V1(Fl_Value_Slider*, void*);
-public:
- EnvelopeUI *voiceampenvgroup;
-private:
- void cb_Pan_i(WidgetPDial*, void*);
- static void cb_Pan(WidgetPDial*, void*);
- void cb_Enable4_i(Fl_Check_Button*, void*);
- static void cb_Enable4(Fl_Check_Button*, void*);
-public:
- LFOUI *voiceamplfogroup;
-private:
- void cb_Enable5_i(Fl_Check_Button*, void*);
- static void cb_Enable5(Fl_Check_Button*, void*);
- void cb_Minus_i(Fl_Check_Button*, void*);
- static void cb_Minus(Fl_Check_Button*, void*);
-public:
- Fl_Group *voicefiltergroup;
- EnvelopeUI *voicefilterenvgroup;
-private:
- void cb_Enable6_i(Fl_Check_Button*, void*);
- static void cb_Enable6(Fl_Check_Button*, void*);
-public:
- LFOUI *voicefilterlfogroup;
-private:
- void cb_Enable7_i(Fl_Check_Button*, void*);
- static void cb_Enable7(Fl_Check_Button*, void*);
- void cb_2_i(Fl_Choice*, void*);
- static void cb_2(Fl_Choice*, void*);
- static Fl_Menu_Item menu_[];
-public:
- Fl_Check_Button *bypassfiltercheckbutton;
-private:
- void cb_bypassfiltercheckbutton_i(Fl_Check_Button*, void*);
- static void cb_bypassfiltercheckbutton(Fl_Check_Button*, void*);
- void cb_Delay_i(Fl_Value_Slider*, void*);
- static void cb_Delay(Fl_Value_Slider*, void*);
- void cb_Enable8_i(Fl_Check_Button*, void*);
- static void cb_Enable8(Fl_Check_Button*, void*);
-public:
- Fl_Box *noiselabel;
-private:
- void cb_noiselabel1_i(Fl_Box*, void*);
- static void cb_noiselabel1(Fl_Box*, void*);
-public:
- Fl_Check_Button *voiceonbutton;
-private:
- void cb_voiceonbutton_i(Fl_Check_Button*, void*);
- static void cb_voiceonbutton(Fl_Check_Button*, void*);
-public:
- ADvoiceUI(int x,int y, int w, int h, const char *label=0);
- void init(ADnoteParameters *parameters,int nvoice_,Master *master_);
- ~ADvoiceUI();
-private:
- int nvoice;
- ADnoteParameters *pars;
- OscilEditor *oscedit;
- Oscilloscope *osc;
- Oscilloscope *oscFM;
- Master *master;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Pack.H>
-
-class ADnoteUI : public PresetsUI_ {
- Fl_Double_Window* make_window();
-public:
- Fl_Double_Window *ADnoteGlobalParameters;
- EnvelopeUI *freqenv;
- Fl_Counter *octave;
-private:
- void cb_octave_i(Fl_Counter*, void*);
- static void cb_octave(Fl_Counter*, void*);
-public:
- Fl_Counter *coarsedet;
-private:
- void cb_coarsedet_i(Fl_Counter*, void*);
- static void cb_coarsedet(Fl_Counter*, void*);
-public:
- LFOUI *freqlfo;
- Fl_Slider *freq;
-private:
- void cb_freq_i(Fl_Slider*, void*);
- static void cb_freq(Fl_Slider*, void*);
-public:
- Fl_Value_Output *detunevalueoutput;
-private:
- void cb_detunevalueoutput2_i(Fl_Value_Output*, void*);
- static void cb_detunevalueoutput2(Fl_Value_Output*, void*);
-public:
- Fl_Choice *detunetype;
-private:
- void cb_detunetype_i(Fl_Choice*, void*);
- static void cb_detunetype(Fl_Choice*, void*);
- void cb_relBW_i(WidgetPDial*, void*);
- static void cb_relBW(WidgetPDial*, void*);
-public:
- Fl_Value_Slider *volume;
-private:
- void cb_volume_i(Fl_Value_Slider*, void*);
- static void cb_volume(Fl_Value_Slider*, void*);
-public:
- Fl_Value_Slider *vsns;
-private:
- void cb_vsns_i(Fl_Value_Slider*, void*);
- static void cb_vsns(Fl_Value_Slider*, void*);
-public:
- WidgetPDial *pan;
-private:
- void cb_pan_i(WidgetPDial*, void*);
- static void cb_pan(WidgetPDial*, void*);
-public:
- WidgetPDial *pstr;
-private:
- void cb_pstr_i(WidgetPDial*, void*);
- static void cb_pstr(WidgetPDial*, void*);
-public:
- WidgetPDial *pt;
-private:
- void cb_pt_i(WidgetPDial*, void*);
- static void cb_pt(WidgetPDial*, void*);
-public:
- WidgetPDial *pstc;
-private:
- void cb_pstc_i(WidgetPDial*, void*);
- static void cb_pstc(WidgetPDial*, void*);
-public:
- WidgetPDial *pvel;
-private:
- void cb_pvel_i(WidgetPDial*, void*);
- static void cb_pvel(WidgetPDial*, void*);
-public:
- EnvelopeUI *ampenv;
- LFOUI *amplfo;
- Fl_Check_Button *rndgrp;
-private:
- void cb_rndgrp_i(Fl_Check_Button*, void*);
- static void cb_rndgrp(Fl_Check_Button*, void*);
-public:
- EnvelopeUI *filterenv;
- LFOUI *filterlfo;
- FilterUI *filterui;
- Fl_Check_Button *stereo;
-private:
- void cb_stereo_i(Fl_Check_Button*, void*);
- static void cb_stereo(Fl_Check_Button*, void*);
- void cb_Show_i(Fl_Button*, void*);
- static void cb_Show(Fl_Button*, void*);
- void cb_Show1_i(Fl_Button*, void*);
- static void cb_Show1(Fl_Button*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
- void cb_Resonance_i(Fl_Button*, void*);
- static void cb_Resonance(Fl_Button*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- Fl_Double_Window *ADnoteVoice;
- ADvoiceUI *advoice;
-private:
- void cb_Close1_i(Fl_Button*, void*);
- static void cb_Close1(Fl_Button*, void*);
-public:
- Fl_Counter *currentvoicecounter;
-private:
- void cb_currentvoicecounter_i(Fl_Counter*, void*);
- static void cb_currentvoicecounter(Fl_Counter*, void*);
- void cb_C1_i(Fl_Button*, void*);
- static void cb_C1(Fl_Button*, void*);
- void cb_P1_i(Fl_Button*, void*);
- static void cb_P1(Fl_Button*, void*);
-public:
- Fl_Double_Window *ADnoteVoiceList;
-private:
- void cb_Hide_i(Fl_Button*, void*);
- static void cb_Hide(Fl_Button*, void*);
-public:
- ADnoteUI(ADnoteParameters *parameters,Master *master_);
- ~ADnoteUI();
- void refresh();
-private:
- ADnoteParameters *pars;
- ResonanceUI *resui;
- Master *master;
- int nvoice;
- ADvoicelistitem *voicelistitem[NUM_VOICES];
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/BankUI.cc b/plugins/zynaddsubfx/src/UI/BankUI.cc
deleted file mode 100644
index de79932..0000000
--- a/plugins/zynaddsubfx/src/UI/BankUI.cc
+++ /dev/null
@@ -1,421 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "BankUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-void BankProcess_::process() {
- ;
-}
-
-BankSlot::BankSlot(int x,int y, int w, int h, const char *label):Fl_Button(x,y,w,h,label) {
- what=NULL;
- whatslot=NULL;
- nslot=0;
- nselected=NULL;
-}
-
-int BankSlot::handle(int event) {
- if (what==NULL) return(0);
- if (Fl::event_inside(this)){
- *what=0;*whatslot=nslot;
- if ((event==FL_RELEASE)&&(Fl::event_button()==1))*what=1;
- if ((event==FL_RELEASE)&&(Fl::event_button()==3))*what=2;
- if (event==FL_PUSH) highlight=1;
- }else highlight=0;
-
- int tmp=Fl_Button::handle(event);
- if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)();
- return(tmp);
-}
-
-void BankSlot::init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_,int *nselected_) {
- nslot=nslot_;
- what=what_;
- whatslot=whatslot_;
- fnc=fnc_;
- bp=bp_;
- bank=bank_;
- nselected=nselected_;
- box(FL_THIN_UP_BOX);
- labelfont(0);
- labelsize(13);
- align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
-
- highlight=0;
- refresh();
-}
-
-void BankSlot::refresh() {
- if (bank->emptyslot(nslot)) {
- color(46);
- } else {
- if (bank->isPADsynth_used(nslot)) color(26);
- else color(51);
- };
-
- if (*nselected==nslot) color(6);
-
-
- label(bank->getnamenumbered(nslot));
-}
-
-void BankUI::cb_Close_i(Fl_Button*, void*) {
- bankuiwindow->hide();
-}
-void BankUI::cb_Close(Fl_Button* o, void* v) {
- ((BankUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void BankUI::cb_writebutton_i(Fl_Light_Button* o, void*) {
- if (o->value()>0.5) mode=2;
-removeselection();
-}
-void BankUI::cb_writebutton(Fl_Light_Button* o, void* v) {
- ((BankUI*)(o->parent()->parent()->user_data()))->cb_writebutton_i(o,v);
-}
-
-void BankUI::cb_readbutton_i(Fl_Light_Button* o, void*) {
- if (o->value()>0.5) mode=1;
-removeselection();
-}
-void BankUI::cb_readbutton(Fl_Light_Button* o, void* v) {
- ((BankUI*)(o->parent()->parent()->user_data()))->cb_readbutton_i(o,v);
-}
-
-void BankUI::cb_clearbutton_i(Fl_Light_Button* o, void*) {
- if (o->value()>0.5) mode=3;
-removeselection();
-}
-void BankUI::cb_clearbutton(Fl_Light_Button* o, void* v) {
- ((BankUI*)(o->parent()->parent()->user_data()))->cb_clearbutton_i(o,v);
-}
-
-void BankUI::cb_swapbutton_i(Fl_Light_Button* o, void*) {
- if (o->value()>0.5) mode=4;
-removeselection();
-}
-void BankUI::cb_swapbutton(Fl_Light_Button* o, void* v) {
- ((BankUI*)(o->parent()->parent()->user_data()))->cb_swapbutton_i(o,v);
-}
-
-void BankUI::cb_New_i(Fl_Button*, void*) {
- const char *dirname;
-
-dirname=fl_input("New empty Bank:");
-if (dirname==NULL) return;
-
-
-int result=bank->newbank(dirname);
-
-if (result!=0) fl_alert("Error: Could not make a new bank (directory)..");
-
-refreshmainwindow();
-}
-void BankUI::cb_New(Fl_Button* o, void* v) {
- ((BankUI*)(o->parent()->user_data()))->cb_New_i(o,v);
-}
-
-void BankUI::cb_auto_i(Fl_Check_Button* o, void*) {
- config.cfg.BankUIAutoClose=(int) o->value();
-}
-void BankUI::cb_auto(Fl_Check_Button* o, void* v) {
- ((BankUI*)(o->parent()->user_data()))->cb_auto_i(o,v);
-}
-
-void BankUI::cb_banklist_i(Fl_Choice* o, void*) {
- int n=o->value();
-char *dirname=bank->banks[n].dir;
-if (dirname==NULL) return;
-
-if (bank->loadbank(dirname)==2)
- fl_alert("Error: Could not load the bank from the directory\n%s.",dirname);
-for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();
-refreshmainwindow();
-}
-void BankUI::cb_banklist(Fl_Choice* o, void* v) {
- ((BankUI*)(o->parent()->user_data()))->cb_banklist_i(o,v);
-}
-
-void BankUI::cb_Refresh_i(Fl_Button*, void*) {
- rescan_for_banks();
-banklist->value(0);
-}
-void BankUI::cb_Refresh(Fl_Button* o, void* v) {
- ((BankUI*)(o->parent()->user_data()))->cb_Refresh_i(o,v);
-}
-
-void BankUI::cb_Show_i(Fl_Check_Button* o, void*) {
- config.cfg.CheckPADsynth=(int) o->value();
-refreshmainwindow();
-}
-void BankUI::cb_Show(Fl_Check_Button* o, void* v) {
- ((BankUI*)(o->parent()->user_data()))->cb_Show_i(o,v);
-}
-
-Fl_Double_Window* BankUI::make_window() {
- { Fl_Double_Window* o = bankuiwindow = new Fl_Double_Window(785, 575, "Bank");
- bankuiwindow->user_data((void*)(this));
- { Fl_Button* o = new Fl_Button(705, 546, 70, 24, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Group* o = new Fl_Group(5, 34, 772, 491);
- o->box(FL_ENGRAVED_FRAME);
- { Fl_Pack* o = new Fl_Pack(10, 39, 150, 481);
- o->box(FL_BORDER_BOX);
- o->box(FL_NO_BOX);
- for (int i=0;i<32;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};
- o->end();
- } // Fl_Pack* o
- { Fl_Pack* o = new Fl_Pack(163, 39, 150, 481);
- o->box(FL_BORDER_BOX);
- o->box(FL_NO_BOX);
- for (int i=32;i<64;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};
- o->end();
- } // Fl_Pack* o
- { Fl_Pack* o = new Fl_Pack(316, 39, 150, 481);
- o->box(FL_BORDER_BOX);
- o->box(FL_NO_BOX);
- for (int i=64;i<96;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};
- o->end();
- } // Fl_Pack* o
- { Fl_Pack* o = new Fl_Pack(469, 39, 150, 481);
- o->box(FL_BORDER_BOX);
- o->box(FL_NO_BOX);
- for (int i=96;i<128;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};
- o->end();
- } // Fl_Pack* o
- { Fl_Pack* o = new Fl_Pack(622, 39, 150, 481);
- o->box(FL_BORDER_BOX);
- o->box(FL_NO_BOX);
- for (int i=128;i<160;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};
- o->end();
- } // Fl_Pack* o
- o->end();
- } // Fl_Group* o
- { modeselect = new Fl_Group(5, 528, 425, 42);
- modeselect->box(FL_ENGRAVED_BOX);
- { Fl_Light_Button* o = writebutton = new Fl_Light_Button(116, 534, 99, 30, "WRITE");
- writebutton->type(102);
- writebutton->box(FL_PLASTIC_UP_BOX);
- writebutton->down_box(FL_THIN_DOWN_BOX);
- writebutton->selection_color((Fl_Color)1);
- writebutton->labeltype(FL_ENGRAVED_LABEL);
- writebutton->labelfont(1);
- writebutton->labelsize(13);
- writebutton->callback((Fl_Callback*)cb_writebutton);
- if (bank->locked()) o->deactivate();
- } // Fl_Light_Button* writebutton
- { Fl_Light_Button* o = readbutton = new Fl_Light_Button(11, 534, 99, 30, "READ");
- readbutton->type(102);
- readbutton->box(FL_PLASTIC_UP_BOX);
- readbutton->down_box(FL_THIN_DOWN_BOX);
- readbutton->selection_color((Fl_Color)101);
- readbutton->labeltype(FL_ENGRAVED_LABEL);
- readbutton->labelfont(1);
- readbutton->labelsize(13);
- readbutton->callback((Fl_Callback*)cb_readbutton);
- o->value(1);
- } // Fl_Light_Button* readbutton
- { Fl_Light_Button* o = clearbutton = new Fl_Light_Button(221, 534, 99, 30, "CLEAR");
- clearbutton->type(102);
- clearbutton->box(FL_PLASTIC_UP_BOX);
- clearbutton->down_box(FL_THIN_DOWN_BOX);
- clearbutton->selection_color(FL_FOREGROUND_COLOR);
- clearbutton->labeltype(FL_ENGRAVED_LABEL);
- clearbutton->labelfont(1);
- clearbutton->labelsize(13);
- clearbutton->callback((Fl_Callback*)cb_clearbutton);
- if (bank->locked()) o->deactivate();
- } // Fl_Light_Button* clearbutton
- { Fl_Light_Button* o = swapbutton = new Fl_Light_Button(325, 534, 99, 30, "SWAP");
- swapbutton->type(102);
- swapbutton->box(FL_PLASTIC_UP_BOX);
- swapbutton->down_box(FL_THIN_DOWN_BOX);
- swapbutton->selection_color((Fl_Color)227);
- swapbutton->labeltype(FL_ENGRAVED_LABEL);
- swapbutton->labelfont(1);
- swapbutton->labelsize(13);
- swapbutton->callback((Fl_Callback*)cb_swapbutton);
- if (bank->locked()) o->deactivate();
- } // Fl_Light_Button* swapbutton
- modeselect->end();
- } // Fl_Group* modeselect
- { Fl_Button* o = new Fl_Button(685, 5, 93, 25, "New Bank...");
- o->box(FL_PLASTIC_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_New);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(705, 529, 60, 15, "auto close");
- o->tooltip("automatically close the bank window if the instrument is loaded");
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_auto);
- o->value(config.cfg.BankUIAutoClose);
- } // Fl_Check_Button* o
- { banklist = new Fl_Choice(5, 8, 220, 20);
- banklist->down_box(FL_BORDER_BOX);
- banklist->labelfont(1);
- banklist->textfont(1);
- banklist->textsize(11);
- banklist->callback((Fl_Callback*)cb_banklist);
- banklist->align(Fl_Align(FL_ALIGN_CENTER));
- } // Fl_Choice* banklist
- { Fl_Button* o = new Fl_Button(230, 8, 105, 20, "Refresh bank list");
- o->tooltip("Refresh the bank list (rescan)");
- o->box(FL_THIN_UP_BOX);
- o->color(FL_LIGHT1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Refresh);
- } // Fl_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(435, 530, 150, 15, "Show PADsynth status");
- o->down_box(FL_DOWN_BOX);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Show);
- o->value(config.cfg.CheckPADsynth);
- } // Fl_Check_Button* o
- o->label(bank->bankfiletitle);
- if (bank->bankfiletitle==NULL) o->label ("Choose a bank from the bank list on the left (or go to settings if to configure the bank location) or choose 'New Bank...' to make a new bank.");
- bankuiwindow->end();
- } // Fl_Double_Window* bankuiwindow
- return bankuiwindow;
-}
-
-BankUI::BankUI(Master *master_,int *npart_) {
- fnc=&BankProcess_::process;
- master=master_;
- npart=npart_;
- bank=&master_->bank;
- what=0;
- nselected=-1;
- make_window();
- mode=1;
-}
-
-BankUI::~BankUI() {
- bankuiwindow->hide();
- delete(bankuiwindow);
-}
-
-void BankUI::show() {
- bankuiwindow->show();
- simplesetmode(config.cfg.UserInterfaceMode==2);
-}
-
-void BankUI::hide() {
- bankuiwindow->hide();
-}
-
-void BankUI::init(Fl_Valuator *cbwig_) {
- cbwig=cbwig_;
- rescan_for_banks();
-}
-
-void BankUI::process() {
- int slot=this->slot;
-
- if ((what==2)&&(bank->emptyslot(slot)==0)&&(mode!=4)) {//Rename slot
- const char *tmp=fl_input("Slot (instrument) name:",(const char *)bank->getname(slot));
- if (tmp!=NULL) bank->setname(slot,tmp,-1);
- bs[slot]->refresh();
- };
-
- if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot
- pthread_mutex_lock(&master->mutex);
- bank->loadfromslot(slot,master->part[*npart]);
- pthread_mutex_unlock(&master->mutex);
- master->part[*npart]->applyparameters();
- snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN,"%s",bank->getname(slot));
- cbwig->do_callback();
-
- if (config.cfg.BankUIAutoClose!=0)
- bankuiwindow->hide();
-
- };
-
- if ((what==1)&&(mode==2)){//save(write) to slot
- if (!bank->emptyslot(slot)){
- if (!fl_choice("Overwrite the slot no. %d ?","No","Yes",NULL,slot+1)) goto nooverwriteslot;
- };
- pthread_mutex_lock(&master->mutex);
- bank->savetoslot(slot,master->part[*npart]);
- pthread_mutex_unlock(&master->mutex);
-
- bs[slot]->refresh();
- mode=1;readbutton->value(1);writebutton->value(0);
- nooverwriteslot:;
- };
-
-
-
- if ((what==1)&&(mode==3)&&(!bank->emptyslot(slot))){//Clears the slot
- if (fl_choice("Clear the slot no. %d ?","No","Yes",NULL,slot+1)){
- bank->clearslot(slot);
- bs[slot]->refresh();
- };
- };
-
- if (mode==4){//swap
- bool done=false;
- if ((what==1)&&(nselected>=0)){
- bank->swapslot(nselected,slot);
- int ns=nselected;
- nselected=-1;
- bs[slot]->refresh();
- bs[ns]->refresh();
- done=true;
- };
- if (((nselected<0)||(what==2))&&(!done)){
- int ns=nselected;
- nselected=slot;
- if (ns>0) bs[ns]->refresh();
- bs[slot]->refresh();
- };
- };
- if (mode!=4) refreshmainwindow();
-}
-
-void BankUI::refreshmainwindow() {
- bankuiwindow->label(bank->bankfiletitle);
- mode=1;readbutton->value(1);writebutton->value(0);clearbutton->value(0);swapbutton->value(0);
- nselected=-1;
- if (bank->locked()){
- writebutton->deactivate();
- clearbutton->deactivate();
- swapbutton->deactivate();
- } else {
- writebutton->activate();
- clearbutton->activate();
- swapbutton->activate();
- };
- for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();
-}
-
-void BankUI::removeselection() {
- if (nselected>=0) {
- int ns=nselected;
- nselected=-1;
- bs[ns]->refresh();
- };
-}
-
-void BankUI::rescan_for_banks() {
- banklist->clear();
- banklist->add(" ");
- bank->rescanforbanks();
-
- for (int i=1;i<MAX_NUM_BANKS;i++) {
- if (bank->banks[i].name!=NULL) banklist->add(bank->banks[i].name);
- };
-}
-
-void BankUI::simplesetmode(bool beginnerui) {
- readbutton->value(1);
- mode=1;
- removeselection();
- if (beginnerui) modeselect->hide();
- else modeselect->show();
-}
diff --git a/plugins/zynaddsubfx/src/UI/BankUI.fl b/plugins/zynaddsubfx/src/UI/BankUI.fl
deleted file mode 100644
index 6244502..0000000
--- a/plugins/zynaddsubfx/src/UI/BankUI.fl
+++ /dev/null
@@ -1,355 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0107
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <string.h>} {public
-}
-
-decl {\#include <FL/Fl_Button.H>} {public
-}
-
-decl {\#include <FL/Fl_File_Chooser.H>} {public
-}
-
-decl {\#include "../Misc/Master.h"} {public
-}
-
-decl {\#include "../Misc/Bank.h"} {public
-}
-
-decl {\#include "../Misc/Config.h"} {public
-}
-
-class BankProcess_ {} {
- Function {process()} {open return_type {virtual void}
- } {code{;}}
- decl {Bank *bank;} {public
- }
-}
-
-class BankSlot {open : {public Fl_Button,BankProcess_}
-} {
- Function {BankSlot(int x,int y, int w, int h, const char *label=0):Fl_Button(x,y,w,h,label)} {} {
- code {what=NULL;
-whatslot=NULL;
-nslot=0;
-nselected=NULL;} {}
- }
- Function {handle(int event)} {return_type int
- } {
- code {if (what==NULL) return(0);
-if (Fl::event_inside(this)){
- *what=0;*whatslot=nslot;
- if ((event==FL_RELEASE)&&(Fl::event_button()==1))*what=1;
- if ((event==FL_RELEASE)&&(Fl::event_button()==3))*what=2;
- if (event==FL_PUSH) highlight=1;
-}else highlight=0;
-
-int tmp=Fl_Button::handle(event);
-if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)();
-return(tmp);} {}
- }
- Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_,int *nselected_)} {open
- } {
- code {nslot=nslot_;
-what=what_;
-whatslot=whatslot_;
-fnc=fnc_;
-bp=bp_;
-bank=bank_;
-nselected=nselected_;
-box(FL_THIN_UP_BOX);
-labelfont(0);
-labelsize(13);
-align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
-
-highlight=0;
-refresh();} {selected
- }
- }
- Function {refresh()} {} {
- code {if (bank->emptyslot(nslot)) {
- color(46);
-} else {
- if (bank->isPADsynth_used(nslot)) color(26);
- else color(51);
-};
-
-if (*nselected==nslot) color(6);
-
-
-label(bank->getnamenumbered(nslot));} {}
- }
- decl {int *what,*whatslot,nslot,highlight, *nselected;} {}
- decl {void (BankProcess_:: *fnc)(void);} {}
- decl {BankProcess_ *bp;} {}
-}
-
-class BankUI {: {public BankProcess_}
-} {
- Function {make_window()} {} {
- Fl_Window bankuiwindow {
- label Bank
- xywh {4 64 785 575} type Double hide
- code0 {o->label(bank->bankfiletitle);}
- code1 {if (bank->bankfiletitle==NULL) o->label ("Choose a bank from the bank list on the left (or go to settings if to configure the bank location) or choose 'New Bank...' to make a new bank.");}
- } {
- Fl_Button {} {
- label Close
- callback {bankuiwindow->hide();}
- xywh {705 546 70 24} box THIN_UP_BOX
- }
- Fl_Group {} {
- xywh {5 34 772 491} box ENGRAVED_FRAME
- } {
- Fl_Pack {} {
- xywh {10 39 150 481} box BORDER_BOX
- code0 {o->box(FL_NO_BOX);}
- code1 {for (int i=0;i<32;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
- } {}
- Fl_Pack {} {
- xywh {163 39 150 481} box BORDER_BOX
- code0 {o->box(FL_NO_BOX);}
- code1 {for (int i=32;i<64;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
- } {}
- Fl_Pack {} {
- xywh {316 39 150 481} box BORDER_BOX
- code0 {o->box(FL_NO_BOX);}
- code1 {for (int i=64;i<96;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
- } {}
- Fl_Pack {} {
- xywh {469 39 150 481} box BORDER_BOX
- code0 {o->box(FL_NO_BOX);}
- code1 {for (int i=96;i<128;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
- } {}
- Fl_Pack {} {
- xywh {622 39 150 481} box BORDER_BOX
- code0 {o->box(FL_NO_BOX);}
- code1 {for (int i=128;i<160;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
- } {}
- }
- Fl_Group modeselect {
- xywh {5 528 425 42} box ENGRAVED_BOX
- } {
- Fl_Light_Button writebutton {
- label WRITE
- callback {if (o->value()>0.5) mode=2;
-removeselection();}
- xywh {116 534 99 30} type Radio box PLASTIC_UP_BOX down_box THIN_DOWN_BOX selection_color 1 labeltype ENGRAVED_LABEL labelfont 1 labelsize 13
- code0 {if (bank->locked()) o->deactivate();}
- }
- Fl_Light_Button readbutton {
- label READ
- callback {if (o->value()>0.5) mode=1;
-removeselection();}
- xywh {11 534 99 30} type Radio box PLASTIC_UP_BOX down_box THIN_DOWN_BOX selection_color 101 labeltype ENGRAVED_LABEL labelfont 1 labelsize 13
- code0 {o->value(1);}
- }
- Fl_Light_Button clearbutton {
- label CLEAR
- callback {if (o->value()>0.5) mode=3;
-removeselection();}
- xywh {221 534 99 30} type Radio box PLASTIC_UP_BOX down_box THIN_DOWN_BOX selection_color 0 labeltype ENGRAVED_LABEL labelfont 1 labelsize 13
- code0 {if (bank->locked()) o->deactivate();}
- }
- Fl_Light_Button swapbutton {
- label SWAP
- callback {if (o->value()>0.5) mode=4;
-removeselection();}
- xywh {325 534 99 30} type Radio box PLASTIC_UP_BOX down_box THIN_DOWN_BOX selection_color 227 labeltype ENGRAVED_LABEL labelfont 1 labelsize 13
- code0 {if (bank->locked()) o->deactivate();}
- }
- }
- Fl_Button {} {
- label {New Bank...}
- callback {const char *dirname;
-
-dirname=fl_input("New empty Bank:");
-if (dirname==NULL) return;
-
-
-int result=bank->newbank(dirname);
-
-if (result!=0) fl_alert("Error: Could not make a new bank (directory)..");
-
-refreshmainwindow();}
- xywh {685 5 93 25} box PLASTIC_UP_BOX labelfont 1 labelsize 11 align 128
- }
- Fl_Check_Button {} {
- label {auto close}
- callback {config.cfg.BankUIAutoClose=(int) o->value();}
- tooltip {automatically close the bank window if the instrument is loaded} xywh {705 529 60 15} down_box DOWN_BOX labelsize 10
- code0 {o->value(config.cfg.BankUIAutoClose);}
- }
- Fl_Choice banklist {
- callback {int n=o->value();
-char *dirname=bank->banks[n].dir;
-if (dirname==NULL) return;
-
-if (bank->loadbank(dirname)==2)
- fl_alert("Error: Could not load the bank from the directory\\n%s.",dirname);
-for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();
-refreshmainwindow();} open
- xywh {5 8 220 20} down_box BORDER_BOX labelfont 1 align 0 textfont 1 textsize 11
- } {}
- Fl_Button {} {
- label {Refresh bank list}
- callback {rescan_for_banks();
-banklist->value(0);}
- tooltip {Refresh the bank list (rescan)} xywh {230 8 105 20} box THIN_UP_BOX color 50 labelsize 11
- }
- Fl_Check_Button {} {
- label {Show PADsynth status}
- callback {config.cfg.CheckPADsynth=(int) o->value();
-refreshmainwindow();}
- xywh {435 530 150 15} down_box DOWN_BOX labelsize 11
- code0 {o->value(config.cfg.CheckPADsynth);}
- }
- }
- }
- Function {BankUI(Master *master_,int *npart_)} {} {
- code {fnc=&BankProcess_::process;
-master=master_;
-npart=npart_;
-bank=&master_->bank;
-what=0;
-nselected=-1;
-make_window();
-mode=1;} {}
- }
- Function {~BankUI()} {return_type virtual
- } {
- code {bankuiwindow->hide();
-delete(bankuiwindow);} {}
- }
- Function {show()} {} {
- code {bankuiwindow->show();
-simplesetmode(config.cfg.UserInterfaceMode==2);} {}
- }
- Function {hide()} {} {
- code {bankuiwindow->hide();} {}
- }
- Function {init(Fl_Valuator *cbwig_)} {} {
- code {cbwig=cbwig_;
-rescan_for_banks();} {}
- }
- Function {process()} {return_type void
- } {
- code {int slot=this->slot;
-
-if ((what==2)&&(bank->emptyslot(slot)==0)&&(mode!=4)) {//Rename slot
- const char *tmp=fl_input("Slot (instrument) name:",(const char *)bank->getname(slot));
- if (tmp!=NULL) bank->setname(slot,tmp,-1);
- bs[slot]->refresh();
-};
-
-if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot
- pthread_mutex_lock(&master->mutex);
- bank->loadfromslot(slot,master->part[*npart]);
- pthread_mutex_unlock(&master->mutex);
- master->part[*npart]->applyparameters();
- snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN,"%s",bank->getname(slot));
- cbwig->do_callback();
-
- if (config.cfg.BankUIAutoClose!=0)
- bankuiwindow->hide();
-
-};
-
-if ((what==1)&&(mode==2)){//save(write) to slot
- if (!bank->emptyslot(slot)){
- if (!fl_choice("Overwrite the slot no. %d ?","No","Yes",NULL,slot+1)) goto nooverwriteslot;
- };
- pthread_mutex_lock(&master->mutex);
- bank->savetoslot(slot,master->part[*npart]);
- pthread_mutex_unlock(&master->mutex);
-
- bs[slot]->refresh();
- mode=1;readbutton->value(1);writebutton->value(0);
- nooverwriteslot:;
-};
-
-
-
-if ((what==1)&&(mode==3)&&(!bank->emptyslot(slot))){//Clears the slot
- if (fl_choice("Clear the slot no. %d ?","No","Yes",NULL,slot+1)){
- bank->clearslot(slot);
- bs[slot]->refresh();
- };
-};
-
-if (mode==4){//swap
- bool done=false;
- if ((what==1)&&(nselected>=0)){
- bank->swapslot(nselected,slot);
- int ns=nselected;
- nselected=-1;
- bs[slot]->refresh();
- bs[ns]->refresh();
- done=true;
- };
- if (((nselected<0)||(what==2))&&(!done)){
- int ns=nselected;
- nselected=slot;
- if (ns>0) bs[ns]->refresh();
- bs[slot]->refresh();
- };
-};
-if (mode!=4) refreshmainwindow();} {}
- }
- Function {refreshmainwindow()} {} {
- code {bankuiwindow->label(bank->bankfiletitle);
-mode=1;readbutton->value(1);writebutton->value(0);clearbutton->value(0);swapbutton->value(0);
-nselected=-1;
-if (bank->locked()){
- writebutton->deactivate();
- clearbutton->deactivate();
- swapbutton->deactivate();
-} else {
- writebutton->activate();
- clearbutton->activate();
- swapbutton->activate();
-};
-for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();} {}
- }
- Function {removeselection()} {} {
- code {if (nselected>=0) {
- int ns=nselected;
- nselected=-1;
- bs[ns]->refresh();
-};} {}
- }
- Function {rescan_for_banks()} {} {
- code {banklist->clear();
-banklist->add(" ");
-bank->rescanforbanks();
-
-for (int i=1;i<MAX_NUM_BANKS;i++) {
- if (bank->banks[i].name!=NULL) banklist->add(bank->banks[i].name);
-};} {}
- }
- Function {simplesetmode(bool beginnerui)} {} {
- code {readbutton->value(1);
-mode=1;
-removeselection();
-if (beginnerui) modeselect->hide();
- else modeselect->show();} {}
- }
- decl {BankSlot *bs[BANK_SIZE];} {}
- decl {int slot,what;//"what"=what button is pressed} {}
- decl {int mode,*npart,nselected;} {}
- decl {Master *master;} {}
- decl {void (BankProcess_::* fnc)(void);} {}
- decl {Fl_Valuator *cbwig;} {public
- }
-}
diff --git a/plugins/zynaddsubfx/src/UI/BankUI.h b/plugins/zynaddsubfx/src/UI/BankUI.h
deleted file mode 100644
index d498c79..0000000
--- a/plugins/zynaddsubfx/src/UI/BankUI.h
+++ /dev/null
@@ -1,101 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef BankUI_h
-#define BankUI_h
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_File_Chooser.H>
-#include "../Misc/Master.h"
-#include "../Misc/Bank.h"
-#include "../Misc/Config.h"
-
-class BankProcess_ {
-public:
- virtual void process();
- Bank *bank;
-};
-
-class BankSlot : public Fl_Button,BankProcess_ {
-public:
- BankSlot(int x,int y, int w, int h, const char *label=0);
- int handle(int event);
- void init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_,int *nselected_);
- void refresh();
-private:
- int *what,*whatslot,nslot,highlight, *nselected;
- void (BankProcess_:: *fnc)(void);
- BankProcess_ *bp;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Pack.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Choice.H>
-
-class BankUI : public BankProcess_ {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *bankuiwindow;
-private:
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
-public:
- Fl_Group *modeselect;
- Fl_Light_Button *writebutton;
-private:
- void cb_writebutton_i(Fl_Light_Button*, void*);
- static void cb_writebutton(Fl_Light_Button*, void*);
-public:
- Fl_Light_Button *readbutton;
-private:
- void cb_readbutton_i(Fl_Light_Button*, void*);
- static void cb_readbutton(Fl_Light_Button*, void*);
-public:
- Fl_Light_Button *clearbutton;
-private:
- void cb_clearbutton_i(Fl_Light_Button*, void*);
- static void cb_clearbutton(Fl_Light_Button*, void*);
-public:
- Fl_Light_Button *swapbutton;
-private:
- void cb_swapbutton_i(Fl_Light_Button*, void*);
- static void cb_swapbutton(Fl_Light_Button*, void*);
- void cb_New_i(Fl_Button*, void*);
- static void cb_New(Fl_Button*, void*);
- void cb_auto_i(Fl_Check_Button*, void*);
- static void cb_auto(Fl_Check_Button*, void*);
-public:
- Fl_Choice *banklist;
-private:
- void cb_banklist_i(Fl_Choice*, void*);
- static void cb_banklist(Fl_Choice*, void*);
- void cb_Refresh_i(Fl_Button*, void*);
- static void cb_Refresh(Fl_Button*, void*);
- void cb_Show_i(Fl_Check_Button*, void*);
- static void cb_Show(Fl_Check_Button*, void*);
-public:
- BankUI(Master *master_,int *npart_);
- virtual ~BankUI();
- void show();
- void hide();
- void init(Fl_Valuator *cbwig_);
- void process();
- void refreshmainwindow();
- void removeselection();
- void rescan_for_banks();
- void simplesetmode(bool beginnerui);
-private:
- BankSlot *bs[BANK_SIZE];
- int slot,what; //"what"=what button is pressed
- int mode,*npart,nselected;
- Master *master;
- void (BankProcess_::* fnc)(void);
-public:
- Fl_Valuator *cbwig;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/CMakeLists.txt b/plugins/zynaddsubfx/src/UI/CMakeLists.txt
deleted file mode 100644
index 2c959e4..0000000
--- a/plugins/zynaddsubfx/src/UI/CMakeLists.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-set(UI_fl_files
- ADnoteUI.fl
- BankUI.fl
- ConfigUI.fl
- EffUI.fl
- EnvelopeUI.fl
- FilterUI.fl
- LFOUI.fl
- MasterUI.fl
- MicrotonalUI.fl
- OscilGenUI.fl
- PADnoteUI.fl
- PartUI.fl
- PresetsUI.fl
- ResonanceUI.fl
- SeqUI.fl
- SUBnoteUI.fl
- VirKeyboard.fl
- WidgetPDial.fl
-)
-
-include_directories("${CMAKE_CURRENT_BINARY_DIR}")
-
-set_source_files_properties(UI/MasterUI.h PROPERTIES GENERATED 1)
-fltk_wrap_ui(zynaddsubfx_gui ${UI_fl_files})
-
-add_library(zynaddsubfx_gui STATIC
- ${UI_objs}
- ${zynaddsubfx_gui_FLTK_UI_SRCS}
- )
-
-target_link_libraries(zynaddsubfx_gui ${FLTK_LIBRARIES} ${MYFLTK_LIBRARIES})
diff --git a/plugins/zynaddsubfx/src/UI/ConfigUI.cc b/plugins/zynaddsubfx/src/UI/ConfigUI.cc
deleted file mode 100644
index 6619f74..0000000
--- a/plugins/zynaddsubfx/src/UI/ConfigUI.cc
+++ /dev/null
@@ -1,562 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "ConfigUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-void ConfigUI::cb_configwindow_i(Fl_Double_Window* o, void*) {
- writebankcfg();
-o->hide();
-}
-void ConfigUI::cb_configwindow(Fl_Double_Window* o, void* v) {
- ((ConfigUI*)(o->user_data()))->cb_configwindow_i(o,v);
-}
-
-void ConfigUI::cb__i(Fl_Choice* o, void*) {
- if ((int)o->value()==0) samplerateinput->activate();
- else samplerateinput->deactivate();
-
-int samplerates[8]={44100,16000,22050,32000,44100,48000,88200,96000};
-config.cfg.SampleRate=samplerates[(int)o->value()];
-
-setsamplerateinput();
-}
-void ConfigUI::cb_(Fl_Choice* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb__i(o,v);
-}
-
-Fl_Menu_Item ConfigUI::menu_[] = {
- {"Custom", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"16000Hz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"22050Hz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"32000Hz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"44100Hz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"48000Hz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"88200Hz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"96000Hz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void ConfigUI::cb_samplerateinput_i(Fl_Int_Input* o, void*) {
- char *tmp;
-config.cfg.SampleRate=strtoul(o->value(),&tmp,10);
-}
-void ConfigUI::cb_samplerateinput(Fl_Int_Input* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_samplerateinput_i(o,v);
-}
-
-void ConfigUI::cb_Buffer_i(Fl_Int_Input* o, void*) {
- char *tmp;
-config.cfg.SoundBufferSize=strtoul(o->value(),&tmp,10);
-}
-void ConfigUI::cb_Buffer(Fl_Int_Input* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_Buffer_i(o,v);
-}
-
-void ConfigUI::cb_Swap_i(Fl_Light_Button* o, void*) {
- config.cfg.SwapStereo=(int) o->value();
-}
-void ConfigUI::cb_Swap(Fl_Light_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_Swap_i(o,v);
-}
-
-void ConfigUI::cb_OscilSize_i(Fl_Choice* o, void*) {
- config.cfg.OscilSize=128<<o->value();
-}
-void ConfigUI::cb_OscilSize(Fl_Choice* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_OscilSize_i(o,v);
-}
-
-Fl_Menu_Item ConfigUI::menu_OscilSize[] = {
- {"128", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"256", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"512", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"1024", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"2048", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"4096", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"8192", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"16384", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void ConfigUI::cb_Dump_i(Fl_File_Input* o, void*) {
- snprintf(config.cfg.DumpFile,config.maxstringsize,"%s",o->value());
-}
-void ConfigUI::cb_Dump(Fl_File_Input* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Dump_i(o,v);
-}
-
-void ConfigUI::cb_Dump1_i(Fl_Check_Button* o, void*) {
- config.cfg.DumpNotesToFile=(int) o->value();
-dump.startnow();//this has effect only if this option was disabled;
-}
-void ConfigUI::cb_Dump1(Fl_Check_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Dump1_i(o,v);
-}
-
-void ConfigUI::cb_Append_i(Fl_Check_Button* o, void*) {
- config.cfg.DumpAppend=(int) o->value();
-}
-void ConfigUI::cb_Append(Fl_Check_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Append_i(o,v);
-}
-
-void ConfigUI::cb_OSS_i(Fl_File_Input* o, void*) {
- snprintf(config.cfg.LinuxOSSSeqInDev,config.maxstringsize,"%s",o->value());
-}
-void ConfigUI::cb_OSS(Fl_File_Input* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_OSS_i(o,v);
-}
-
-void ConfigUI::cb_OSS1_i(Fl_File_Input* o, void*) {
- snprintf(config.cfg.LinuxOSSWaveOutDev,config.maxstringsize,"%s",o->value());
-}
-void ConfigUI::cb_OSS1(Fl_File_Input* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_OSS1_i(o,v);
-}
-
-void ConfigUI::cb_Midi_i(Fl_Counter* o, void*) {
- config.cfg.WindowsMidiInId=(int) o->value();
-midiinputnamebox->label(config.winmididevices[config.cfg.WindowsMidiInId].name);
-}
-void ConfigUI::cb_Midi(Fl_Counter* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_Midi_i(o,v);
-}
-
-void ConfigUI::cb_XML_i(Fl_Counter* o, void*) {
- config.cfg.GzipCompression=(int) o->value();
-}
-void ConfigUI::cb_XML(Fl_Counter* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_XML_i(o,v);
-}
-
-void ConfigUI::cb_PADsynth_i(Fl_Choice* o, void*) {
- config.cfg.Interpolation=(int) o->value();
-}
-void ConfigUI::cb_PADsynth(Fl_Choice* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_PADsynth_i(o,v);
-}
-
-Fl_Menu_Item ConfigUI::menu_PADsynth[] = {
- {"Linear(fast)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Cubic(slow)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void ConfigUI::cb_Virtual_i(Fl_Choice* o, void*) {
- config.cfg.VirKeybLayout=(int) o->value();;
-}
-void ConfigUI::cb_Virtual(Fl_Choice* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_Virtual_i(o,v);
-}
-
-Fl_Menu_Item ConfigUI::menu_Virtual[] = {
- {" ", 0, 0, 0, 1, FL_NORMAL_LABEL, 1, 11, 0},
- {"QWERTY", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Dvorak", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"QWERTZ", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"AZERTY", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void ConfigUI::cb_rootsbrowse_i(Fl_Browser* o, void*) {
- activatebutton_rootdir(o->value()!=0);
-}
-void ConfigUI::cb_rootsbrowse(Fl_Browser* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_rootsbrowse_i(o,v);
-}
-
-void ConfigUI::cb_Add_i(Fl_Button*, void*) {
- const char *dirname;
-dirname=fl_dir_chooser("Add a root directory for banks:",NULL,0);
-if (dirname==NULL) return;
-
-rootsbrowse->add(dirname);
-}
-void ConfigUI::cb_Add(Fl_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_Add_i(o,v);
-}
-
-void ConfigUI::cb_removerootdirbutton_i(Fl_Button*, void*) {
- if (rootsbrowse->value()!=0) {
- rootsbrowse->remove(rootsbrowse->value());
-};
-activatebutton_rootdir(false);
-}
-void ConfigUI::cb_removerootdirbutton(Fl_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_removerootdirbutton_i(o,v);
-}
-
-void ConfigUI::cb_makedefaultrootdirbutton_i(Fl_Button*, void*) {
- int n=rootsbrowse->value();
-
-if (n!=0) {
- rootsbrowse->move(1,n);
- rootsbrowse->value(1);
- rootsbrowse->redraw();
-};
-activatebutton_rootdir(true);
-}
-void ConfigUI::cb_makedefaultrootdirbutton(Fl_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_makedefaultrootdirbutton_i(o,v);
-}
-
-void ConfigUI::cb_presetbrowse_i(Fl_Browser* o, void*) {
- activatebutton_presetdir(o->value()!=0);
-}
-void ConfigUI::cb_presetbrowse(Fl_Browser* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_presetbrowse_i(o,v);
-}
-
-void ConfigUI::cb_Add1_i(Fl_Button*, void*) {
- const char *dirname;
-dirname=fl_dir_chooser("Add a preset directory :",NULL,0);
-if (dirname==NULL) return;
-
-presetbrowse->add(dirname);
-}
-void ConfigUI::cb_Add1(Fl_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_Add1_i(o,v);
-}
-
-void ConfigUI::cb_removepresetbutton_i(Fl_Button*, void*) {
- if (presetbrowse->value()!=0) {
- presetbrowse->remove(presetbrowse->value());
-};
-activatebutton_presetdir(false);
-}
-void ConfigUI::cb_removepresetbutton(Fl_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_removepresetbutton_i(o,v);
-}
-
-void ConfigUI::cb_makedefaultpresetbutton_i(Fl_Button*, void*) {
- int n=presetbrowse->value();
-
-if (n!=0) {
- presetbrowse->move(1,n);
- presetbrowse->value(1);
- presetbrowse->redraw();
-};
-activatebutton_presetdir(true);
-}
-void ConfigUI::cb_makedefaultpresetbutton(Fl_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->parent()->parent()->user_data()))->cb_makedefaultpresetbutton_i(o,v);
-}
-
-void ConfigUI::cb_Close_i(Fl_Button*, void*) {
- configwindow->hide();
-writebankcfg();
-writepresetcfg();
-}
-void ConfigUI::cb_Close(Fl_Button* o, void* v) {
- ((ConfigUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-Fl_Double_Window* ConfigUI::make_window() {
- { configwindow = new Fl_Double_Window(510, 340, "ZynAddSubFX Settings");
- configwindow->callback((Fl_Callback*)cb_configwindow, (void*)(this));
- { Fl_Tabs* o = new Fl_Tabs(5, 5, 500, 305);
- { Fl_Group* o = new Fl_Group(5, 25, 500, 285, "Main settings");
- { Fl_Group* o = new Fl_Group(15, 45, 165, 30, "Sample Rate");
- o->box(FL_ENGRAVED_FRAME);
- { Fl_Choice* o = new Fl_Choice(20, 50, 85, 20);
- o->down_box(FL_BORDER_BOX);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_);
- o->menu(menu_);
- o->value(getsamplerateorder());
- } // Fl_Choice* o
- { Fl_Int_Input* o = samplerateinput = new Fl_Int_Input(115, 50, 60, 20);
- samplerateinput->type(2);
- samplerateinput->textfont(1);
- samplerateinput->callback((Fl_Callback*)cb_samplerateinput);
- setsamplerateinput();
- if (getsamplerateorder()!=0) o->deactivate();
- } // Fl_Int_Input* samplerateinput
- o->end();
- } // Fl_Group* o
- { Fl_Int_Input* o = new Fl_Int_Input(190, 45, 60, 20, "Buffer Size");
- o->tooltip("Internal Sound Buffer Size (samples)");
- o->type(2);
- o->labelsize(11);
- o->textfont(1);
- o->callback((Fl_Callback*)cb_Buffer);
- o->align(Fl_Align(129));
- char *tmpbuf=new char[100];o->cut(0,o->maximum_size());
- snprintf(tmpbuf,100,"%d",config.cfg.SoundBufferSize);o->insert(tmpbuf);
- delete []tmpbuf;
- } // Fl_Int_Input* o
- { Fl_Light_Button* o = new Fl_Light_Button(20, 80, 85, 20, "Swap Stereo ");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Swap);
- o->value(config.cfg.SwapStereo);
- } // Fl_Light_Button* o
- { Fl_Choice* o = new Fl_Choice(175, 80, 75, 20, "OscilSize");
- o->tooltip("ADSynth Oscillator Size (samples)");
- o->down_box(FL_BORDER_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_OscilSize);
- o->menu(menu_OscilSize);
- o->value( (int) (log(config.cfg.OscilSize/128.0-1.0)/log(2)) +1);
- } // Fl_Choice* o
- { Fl_Box* o = new Fl_Box(15, 275, 235, 30, "Most settings has effect only after ZynAddSubFX is restarted.");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(10, 255, 240, 20, "Read the Readme.txt for other settings");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Box* o
- { Fl_Group* o = new Fl_Group(15, 125, 230, 85);
- o->box(FL_ENGRAVED_BOX);
- { Fl_File_Input* o = new Fl_File_Input(20, 170, 220, 35, "Dump File");
- o->callback((Fl_Callback*)cb_Dump);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->insert(config.cfg.DumpFile);
- } // Fl_File_Input* o
- { Fl_Check_Button* o = new Fl_Check_Button(20, 130, 100, 20, "Dump notes");
- o->down_box(FL_DOWN_BOX);
- o->callback((Fl_Callback*)cb_Dump1);
- o->value(config.cfg.DumpNotesToFile);
- } // Fl_Check_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(160, 130, 80, 20, "Append");
- o->down_box(FL_DOWN_BOX);
- o->callback((Fl_Callback*)cb_Append);
- o->value(config.cfg.DumpAppend);
- } // Fl_Check_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(255, 45, 245, 260);
- o->box(FL_ENGRAVED_FRAME);
- { Fl_Box* o = new Fl_Box(260, 50, 235, 45, "Note: Not all the following settings are used (this depends on the operating \
-system, etc..)");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Box* o
- { Fl_Group* o = new Fl_Group(260, 110, 235, 115, "Linux");
- o->box(FL_ENGRAVED_BOX);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- { Fl_File_Input* o = new Fl_File_Input(265, 180, 225, 35, "OSS Sequencer Device (/dev/...)");
- o->callback((Fl_Callback*)cb_OSS);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->insert(config.cfg.LinuxOSSSeqInDev);
- } // Fl_File_Input* o
- { Fl_File_Input* o = new Fl_File_Input(265, 130, 225, 35, "OSS Wave Out Device (/dev/...)");
- o->callback((Fl_Callback*)cb_OSS1);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->insert(config.cfg.LinuxOSSWaveOutDev);
- } // Fl_File_Input* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(260, 250, 235, 50, "Windows");
- o->box(FL_ENGRAVED_BOX);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- { Fl_Counter* o = new Fl_Counter(270, 270, 65, 20, "Midi In Dev");
- o->type(1);
- o->labelsize(11);
- o->minimum(0);
- o->maximum(100);
- o->step(1);
- o->callback((Fl_Callback*)cb_Midi);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->maximum(config.winmidimax-1);
- o->value(config.cfg.WindowsMidiInId);
- } // Fl_Counter* o
- { Fl_Box* o = midiinputnamebox = new Fl_Box(340, 260, 150, 35, "Midi input device name");
- midiinputnamebox->labelfont(1);
- midiinputnamebox->labelsize(11);
- midiinputnamebox->align(Fl_Align(196|FL_ALIGN_INSIDE));
- o->label(config.winmididevices[config.cfg.WindowsMidiInId].name);
- } // Fl_Box* midiinputnamebox
- o->end();
- } // Fl_Group* o
- o->end();
- } // Fl_Group* o
- { Fl_Counter* o = new Fl_Counter(20, 215, 65, 15, "XML compression level");
- o->tooltip("gzip compression level (0 - uncompressed)");
- o->type(1);
- o->labelsize(11);
- o->minimum(0);
- o->maximum(9);
- o->step(1);
- o->callback((Fl_Callback*)cb_XML);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(config.cfg.GzipCompression);
- } // Fl_Counter* o
- { Fl_Choice* o = new Fl_Choice(175, 105, 75, 15, "PADsynth Interpolation");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_PADsynth);
- o->menu(menu_PADsynth);
- o->value(config.cfg.Interpolation);
- } // Fl_Choice* o
- { Fl_Choice* o = new Fl_Choice(155, 235, 85, 20, "Virtual Keyboard Layout");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(12);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Virtual);
- o->menu(menu_Virtual);
- o->value(config.cfg.VirKeybLayout);
- } // Fl_Choice* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(5, 25, 500, 285, "Bank root dirs");
- o->hide();
- { rootsbrowse = new Fl_Browser(15, 35, 485, 220);
- rootsbrowse->type(2);
- rootsbrowse->callback((Fl_Callback*)cb_rootsbrowse);
- } // Fl_Browser* rootsbrowse
- { Fl_Button* o = new Fl_Button(15, 265, 80, 35, "Add root directory...");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Add);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Button* o
- { Fl_Button* o = removerootdirbutton = new Fl_Button(105, 265, 80, 35, "Remove root dir...");
- removerootdirbutton->box(FL_THIN_UP_BOX);
- removerootdirbutton->callback((Fl_Callback*)cb_removerootdirbutton);
- removerootdirbutton->align(Fl_Align(FL_ALIGN_WRAP));
- o->deactivate();
- } // Fl_Button* removerootdirbutton
- { Fl_Button* o = makedefaultrootdirbutton = new Fl_Button(190, 265, 80, 35, "Make default");
- makedefaultrootdirbutton->box(FL_THIN_UP_BOX);
- makedefaultrootdirbutton->callback((Fl_Callback*)cb_makedefaultrootdirbutton);
- makedefaultrootdirbutton->align(Fl_Align(FL_ALIGN_WRAP));
- o->deactivate();
- } // Fl_Button* makedefaultrootdirbutton
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(5, 25, 500, 285, "Presets dirs");
- o->hide();
- { presetbrowse = new Fl_Browser(15, 35, 485, 220);
- presetbrowse->type(2);
- presetbrowse->callback((Fl_Callback*)cb_presetbrowse);
- } // Fl_Browser* presetbrowse
- { Fl_Button* o = new Fl_Button(15, 265, 80, 35, "Add preset directory...");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Add1);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Button* o
- { Fl_Button* o = removepresetbutton = new Fl_Button(105, 265, 80, 35, "Remove preset dir...");
- removepresetbutton->box(FL_THIN_UP_BOX);
- removepresetbutton->callback((Fl_Callback*)cb_removepresetbutton);
- removepresetbutton->align(Fl_Align(FL_ALIGN_WRAP));
- o->deactivate();
- } // Fl_Button* removepresetbutton
- { Fl_Button* o = makedefaultpresetbutton = new Fl_Button(190, 265, 80, 35, "Make default");
- makedefaultpresetbutton->box(FL_THIN_UP_BOX);
- makedefaultpresetbutton->callback((Fl_Callback*)cb_makedefaultpresetbutton);
- makedefaultpresetbutton->align(Fl_Align(FL_ALIGN_WRAP));
- o->deactivate();
- } // Fl_Button* makedefaultpresetbutton
- o->end();
- } // Fl_Group* o
- o->end();
- } // Fl_Tabs* o
- { Fl_Button* o = new Fl_Button(200, 315, 105, 20, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- configwindow->end();
- } // Fl_Double_Window* configwindow
- return configwindow;
-}
-
-ConfigUI::ConfigUI() {
- make_window();
- readbankcfg();
- readpresetcfg();
-}
-
-void ConfigUI::activatebutton_rootdir(bool active) {
- if (active) {
- removerootdirbutton->activate();
- makedefaultrootdirbutton->activate();
- }else{
- removerootdirbutton->deactivate();
- makedefaultrootdirbutton->deactivate();
- };
-}
-
-void ConfigUI::activatebutton_presetdir(bool active) {
- if (active) {
- removepresetbutton->activate();
- makedefaultpresetbutton->activate();
- }else{
- removepresetbutton->deactivate();
- makedefaultpresetbutton->deactivate();
- };
-}
-
-void ConfigUI::readbankcfg() {
- rootsbrowse->clear();
-
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
- if (config.cfg.bankRootDirList[i]!=NULL) rootsbrowse->add(config.cfg.bankRootDirList[i]);
- };
-}
-
-void ConfigUI::writebankcfg() {
- config.clearbankrootdirlist();
-
- for (int n=0;n<rootsbrowse->size();n++){
- config.cfg.bankRootDirList[n]=new char [MAX_STRING_SIZE];
- strncpy(config.cfg.bankRootDirList[n],rootsbrowse->text(n+1),MAX_STRING_SIZE);
- };
-}
-
-void ConfigUI::readpresetcfg() {
- presetbrowse->clear();
-
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
- if (config.cfg.presetsDirList[i]!=NULL) presetbrowse->add(config.cfg.presetsDirList[i]);
- };
-}
-
-void ConfigUI::writepresetcfg() {
- config.clearpresetsdirlist();
-
- for (int n=0;n<presetbrowse->size();n++){
- config.cfg.presetsDirList[n]=new char [MAX_STRING_SIZE];
- strncpy(config.cfg.presetsDirList[n],presetbrowse->text(n+1),MAX_STRING_SIZE);
- };
-}
-
-int ConfigUI::getsamplerateorder() {
- int smpr=config.cfg.SampleRate;
- int order=0;
- switch(smpr){
- case 16000:order=1;break;
- case 22050:order=2;break;
- case 32000:order=3;break;
- case 44100:order=4;break;
- case 48000:order=5;break;
- case 88200:order=6;break;
- case 96000:order=7;break;
- default:order=0;break;
- };
- return(order);
-}
-
-void ConfigUI::setsamplerateinput() {
- char *tmpbuf=new char[100];
- samplerateinput->cut(0,samplerateinput->maximum_size());
- snprintf(tmpbuf,100,"%d",config.cfg.SampleRate);
- samplerateinput->insert(tmpbuf);
- delete []tmpbuf;
-}
-
-void ConfigUI::show() {
- configwindow->show();
-}
diff --git a/plugins/zynaddsubfx/src/UI/ConfigUI.fl b/plugins/zynaddsubfx/src/UI/ConfigUI.fl
deleted file mode 100644
index ddb8e1b..0000000
--- a/plugins/zynaddsubfx/src/UI/ConfigUI.fl
+++ /dev/null
@@ -1,451 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0106
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <math.h>} {public
-}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include <FL/Fl_File_Chooser.H>} {public
-}
-
-decl {\#include "../globals.h"} {public
-}
-
-decl {\#include "../Misc/Util.h"} {public
-}
-
-decl {\#include "../Misc/Dump.h"} {public
-}
-
-decl {extern Dump dump;} {public
-}
-
-class ConfigUI {} {
- Function {make_window()} {} {
- Fl_Window configwindow {
- label {ZynAddSubFX Settings}
- callback {writebankcfg();
-o->hide();}
- xywh {88 313 510 340} type Double hide
- } {
- Fl_Tabs {} {
- xywh {5 5 500 305}
- } {
- Fl_Group {} {
- label {Main settings}
- xywh {5 25 500 285}
- } {
- Fl_Group {} {
- label {Sample Rate}
- xywh {15 45 165 30} box ENGRAVED_FRAME
- } {
- Fl_Choice {} {
- callback {if ((int)o->value()==0) samplerateinput->activate();
- else samplerateinput->deactivate();
-
-int samplerates[8]={44100,16000,22050,32000,44100,48000,88200,96000};
-config.cfg.SampleRate=samplerates[(int)o->value()];
-
-setsamplerateinput();}
- xywh {20 50 85 20} down_box BORDER_BOX textsize 10
- code0 {o->value(getsamplerateorder());}
- } {
- menuitem {} {
- label Custom
- xywh {10 10 100 20} labelfont 1
- }
- menuitem {} {
- label 16000Hz
- xywh {30 30 100 20} labelfont 1
- }
- menuitem {} {
- label 22050Hz
- xywh {20 20 100 20} labelfont 1
- }
- menuitem {} {
- label 32000Hz
- xywh {30 30 100 20} labelfont 1
- }
- menuitem {} {
- label 44100Hz
- xywh {40 40 100 20} labelfont 1
- }
- menuitem {} {
- label 48000Hz
- xywh {50 50 100 20} labelfont 1
- }
- menuitem {} {
- label 88200Hz
- xywh {60 60 100 20} labelfont 1
- }
- menuitem {} {
- label 96000Hz
- xywh {70 70 100 20} labelfont 1
- }
- }
- Fl_Input samplerateinput {
- callback {char *tmp;
-config.cfg.SampleRate=strtoul(o->value(),&tmp,10);}
- xywh {115 50 60 20} type Int textfont 1
- code0 {setsamplerateinput();}
- code1 {if (getsamplerateorder()!=0) o->deactivate();}
- }
- }
- Fl_Input {} {
- label {Buffer Size}
- callback {char *tmp;
-config.cfg.SoundBufferSize=strtoul(o->value(),&tmp,10);}
- tooltip {Internal Sound Buffer Size (samples)} xywh {190 45 60 20} type Int labelsize 11 align 129 textfont 1
- code0 {char *tmpbuf=new char[100];o->cut(0,o->maximum_size());}
- code1 {snprintf(tmpbuf,100,"%d",config.cfg.SoundBufferSize);o->insert(tmpbuf);}
- code2 {delete []tmpbuf;}
- }
- Fl_Light_Button {} {
- label {Swap Stereo }
- callback {config.cfg.SwapStereo=(int) o->value();}
- xywh {20 80 85 20} box THIN_UP_BOX labelsize 10
- code0 {o->value(config.cfg.SwapStereo);}
- }
- Fl_Choice {} {
- label OscilSize
- callback {config.cfg.OscilSize=128<<o->value();}
- tooltip {ADSynth Oscillator Size (samples)} xywh {175 80 75 20} down_box BORDER_BOX labelfont 1 labelsize 11 textsize 10
- code0 {o->value( (int) (log(config.cfg.OscilSize/128.0-1.0)/log(2)) +1);}
- } {
- menuitem {} {
- label 128
- xywh {25 25 100 20} labelfont 1
- }
- menuitem {} {
- label 256
- xywh {35 35 100 20} labelfont 1
- }
- menuitem {} {
- label 512
- xywh {45 45 100 20} labelfont 1
- }
- menuitem {} {
- label 1024
- xywh {45 45 100 20} labelfont 1
- }
- menuitem {} {
- label 2048
- xywh {55 55 100 20} labelfont 1
- }
- menuitem {} {
- label 4096
- xywh {55 55 100 20} labelfont 1
- }
- menuitem {} {
- label 8192
- xywh {65 65 100 20} labelfont 1
- }
- menuitem {} {
- label 16384
- xywh {75 75 100 20} labelfont 1
- }
- }
- Fl_Box {} {
- label {Most settings has effect only after ZynAddSubFX is restarted.}
- xywh {15 275 235 30} labelfont 1 labelsize 11 align 128
- }
- Fl_Box {} {
- label {Read the Readme.txt for other settings}
- xywh {10 255 240 20} labelfont 1 labelsize 11 align 128
- }
- Fl_Group {} {
- xywh {15 125 230 85} box ENGRAVED_BOX
- } {
- Fl_File_Input {} {
- label {Dump File}
- callback {snprintf(config.cfg.DumpFile,config.maxstringsize,"%s",o->value());}
- xywh {20 170 220 35} align 5
- code0 {o->insert(config.cfg.DumpFile);}
- }
- Fl_Check_Button {} {
- label {Dump notes}
- callback {config.cfg.DumpNotesToFile=(int) o->value();
-dump.startnow();//this has effect only if this option was disabled}
- xywh {20 130 100 20} down_box DOWN_BOX
- code0 {o->value(config.cfg.DumpNotesToFile);}
- }
- Fl_Check_Button {} {
- label Append
- callback {config.cfg.DumpAppend=(int) o->value();}
- xywh {160 130 80 20} down_box DOWN_BOX
- code0 {o->value(config.cfg.DumpAppend);}
- }
- }
- Fl_Group {} {
- xywh {255 45 245 260} box ENGRAVED_FRAME
- } {
- Fl_Box {} {
- label {Note: Not all the following settings are used (this depends on the operating system, etc..)}
- xywh {260 50 235 45} labelfont 1 labelsize 11 align 128
- }
- Fl_Group {} {
- label Linux
- xywh {260 110 235 115} box ENGRAVED_BOX labelfont 1 labelsize 13 align 5
- } {
- Fl_File_Input {} {
- label {OSS Sequencer Device (/dev/...)}
- callback {snprintf(config.cfg.LinuxOSSSeqInDev,config.maxstringsize,"%s",o->value());}
- xywh {265 180 225 35} align 5
- code0 {o->insert(config.cfg.LinuxOSSSeqInDev);}
- }
- Fl_File_Input {} {
- label {OSS Wave Out Device (/dev/...)}
- callback {snprintf(config.cfg.LinuxOSSWaveOutDev,config.maxstringsize,"%s",o->value());}
- xywh {265 130 225 35} align 5
- code0 {o->insert(config.cfg.LinuxOSSWaveOutDev);}
- }
- }
- Fl_Group {} {
- label Windows
- xywh {260 250 235 50} box ENGRAVED_BOX labelfont 1 labelsize 13 align 5
- } {
- Fl_Counter {} {
- label {Midi In Dev}
- callback {config.cfg.WindowsMidiInId=(int) o->value();
-midiinputnamebox->label(config.winmididevices[config.cfg.WindowsMidiInId].name);}
- xywh {270 270 65 20} type Simple labelsize 11 align 1 minimum 0 maximum 100 step 1
- code0 {o->maximum(config.winmidimax-1);}
- code1 {o->value(config.cfg.WindowsMidiInId);}
- }
- Fl_Box midiinputnamebox {
- label {Midi input device name}
- xywh {340 260 150 35} labelfont 1 labelsize 11 align 212
- code0 {o->label(config.winmididevices[config.cfg.WindowsMidiInId].name);}
- }
- }
- }
- Fl_Counter {} {
- label {XML compression level}
- callback {config.cfg.GzipCompression=(int) o->value();}
- tooltip {gzip compression level (0 - uncompressed)} xywh {20 215 65 15} type Simple labelsize 11 align 8 minimum 0 maximum 9 step 1
- code0 {o->value(config.cfg.GzipCompression);}
- }
- Fl_Choice {} {
- label {PADsynth Interpolation}
- callback {config.cfg.Interpolation=(int) o->value();}
- xywh {175 105 75 15} down_box BORDER_BOX labelsize 10 textsize 11
- code0 {o->value(config.cfg.Interpolation);}
- } {
- menuitem {} {
- label {Linear(fast)}
- xywh {0 0 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label {Cubic(slow)}
- xywh {10 10 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Choice {} {
- label {Virtual Keyboard Layout}
- callback {config.cfg.VirKeybLayout=(int) o->value();;} open selected
- xywh {155 235 85 20} down_box BORDER_BOX labelsize 12 textfont 1 textsize 11
- code0 {o->value(config.cfg.VirKeybLayout);}
- } {
- menuitem {} {
- label { }
- xywh {5 5 100 20} labelfont 1 labelsize 11 deactivate
- }
- menuitem {} {
- label QWERTY
- xywh {15 15 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label Dvorak
- xywh {25 25 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label QWERTZ
- xywh {35 35 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label AZERTY
- xywh {45 45 100 20} labelfont 1 labelsize 11
- }
- }
- }
- Fl_Group {} {
- label {Bank root dirs}
- xywh {5 25 500 285} hide
- } {
- Fl_Browser rootsbrowse {
- callback {activatebutton_rootdir(o->value()!=0);}
- xywh {15 35 485 220} type Hold
- }
- Fl_Button {} {
- label {Add root directory...}
- callback {const char *dirname;
-dirname=fl_dir_chooser("Add a root directory for banks:",NULL,0);
-if (dirname==NULL) return;
-
-rootsbrowse->add(dirname);}
- xywh {15 265 80 35} box THIN_UP_BOX align 128
- }
- Fl_Button removerootdirbutton {
- label {Remove root dir...}
- callback {if (rootsbrowse->value()!=0) {
- rootsbrowse->remove(rootsbrowse->value());
-};
-activatebutton_rootdir(false);}
- xywh {105 265 80 35} box THIN_UP_BOX align 128
- code0 {o->deactivate();}
- }
- Fl_Button makedefaultrootdirbutton {
- label {Make default}
- callback {int n=rootsbrowse->value();
-
-if (n!=0) {
- rootsbrowse->move(1,n);
- rootsbrowse->value(1);
- rootsbrowse->redraw();
-};
-activatebutton_rootdir(true);}
- xywh {190 265 80 35} box THIN_UP_BOX align 128
- code0 {o->deactivate();}
- }
- }
- Fl_Group {} {
- label {Presets dirs}
- xywh {5 25 500 285} hide
- } {
- Fl_Browser presetbrowse {
- callback {activatebutton_presetdir(o->value()!=0);}
- xywh {15 35 485 220} type Hold
- }
- Fl_Button {} {
- label {Add preset directory...}
- callback {const char *dirname;
-dirname=fl_dir_chooser("Add a preset directory :",NULL,0);
-if (dirname==NULL) return;
-
-presetbrowse->add(dirname);}
- xywh {15 265 80 35} box THIN_UP_BOX align 128
- }
- Fl_Button removepresetbutton {
- label {Remove preset dir...}
- callback {if (presetbrowse->value()!=0) {
- presetbrowse->remove(presetbrowse->value());
-};
-activatebutton_presetdir(false);}
- xywh {105 265 80 35} box THIN_UP_BOX align 128
- code0 {o->deactivate();}
- }
- Fl_Button makedefaultpresetbutton {
- label {Make default}
- callback {int n=presetbrowse->value();
-
-if (n!=0) {
- presetbrowse->move(1,n);
- presetbrowse->value(1);
- presetbrowse->redraw();
-};
-activatebutton_presetdir(true);}
- xywh {190 265 80 35} box THIN_UP_BOX align 128
- code0 {o->deactivate();}
- }
- }
- }
- Fl_Button {} {
- label Close
- callback {configwindow->hide();
-writebankcfg();
-writepresetcfg();}
- xywh {200 315 105 20} box THIN_UP_BOX
- }
- }
- }
- Function {ConfigUI()} {} {
- code {make_window();
-readbankcfg();
-readpresetcfg();} {}
- }
- Function {activatebutton_rootdir(bool active)} {} {
- code {if (active) {
- removerootdirbutton->activate();
- makedefaultrootdirbutton->activate();
-}else{
- removerootdirbutton->deactivate();
- makedefaultrootdirbutton->deactivate();
-};} {}
- }
- Function {activatebutton_presetdir(bool active)} {} {
- code {if (active) {
- removepresetbutton->activate();
- makedefaultpresetbutton->activate();
-}else{
- removepresetbutton->deactivate();
- makedefaultpresetbutton->deactivate();
-};} {}
- }
- Function {readbankcfg()} {} {
- code {rootsbrowse->clear();
-
-for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
- if (config.cfg.bankRootDirList[i]!=NULL) rootsbrowse->add(config.cfg.bankRootDirList[i]);
-};} {}
- }
- Function {writebankcfg()} {} {
- code {config.clearbankrootdirlist();
-
-for (int n=0;n<rootsbrowse->size();n++){
- config.cfg.bankRootDirList[n]=new char [MAX_STRING_SIZE];
- strncpy(config.cfg.bankRootDirList[n],rootsbrowse->text(n+1),MAX_STRING_SIZE);
-};} {}
- }
- Function {readpresetcfg()} {} {
- code {presetbrowse->clear();
-
-for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
- if (config.cfg.presetsDirList[i]!=NULL) presetbrowse->add(config.cfg.presetsDirList[i]);
-};} {}
- }
- Function {writepresetcfg()} {} {
- code {config.clearpresetsdirlist();
-
-for (int n=0;n<presetbrowse->size();n++){
- config.cfg.presetsDirList[n]=new char [MAX_STRING_SIZE];
- strncpy(config.cfg.presetsDirList[n],presetbrowse->text(n+1),MAX_STRING_SIZE);
-};} {}
- }
- Function {getsamplerateorder()} {return_type int
- } {
- code {int smpr=config.cfg.SampleRate;
-int order=0;
-switch(smpr){
- case 16000:order=1;break;
- case 22050:order=2;break;
- case 32000:order=3;break;
- case 44100:order=4;break;
- case 48000:order=5;break;
- case 88200:order=6;break;
- case 96000:order=7;break;
- default:order=0;break;
-};
-return(order);} {}
- }
- Function {setsamplerateinput()} {return_type void
- } {
- code {char *tmpbuf=new char[100];
-samplerateinput->cut(0,samplerateinput->maximum_size());
-snprintf(tmpbuf,100,"%d",config.cfg.SampleRate);
-samplerateinput->insert(tmpbuf);
-delete []tmpbuf;} {}
- }
- Function {show()} {} {
- code {configwindow->show();} {}
- }
-}
diff --git a/plugins/zynaddsubfx/src/UI/ConfigUI.h b/plugins/zynaddsubfx/src/UI/ConfigUI.h
deleted file mode 100644
index bc0cda5..0000000
--- a/plugins/zynaddsubfx/src/UI/ConfigUI.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef ConfigUI_h
-#define ConfigUI_h
-#include <FL/Fl.H>
-#include <stdio.h>
-#include <math.h>
-#include <stdlib.h>
-#include <FL/Fl_File_Chooser.H>
-#include "../globals.h"
-#include "../Misc/Util.h"
-#include "../Misc/Dump.h"
-extern Dump dump;
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Int_Input.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_File_Input.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Browser.H>
-#include <FL/Fl_Button.H>
-
-class ConfigUI {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *configwindow;
-private:
- void cb_configwindow_i(Fl_Double_Window*, void*);
- static void cb_configwindow(Fl_Double_Window*, void*);
- void cb__i(Fl_Choice*, void*);
- static void cb_(Fl_Choice*, void*);
- static Fl_Menu_Item menu_[];
-public:
- Fl_Int_Input *samplerateinput;
-private:
- void cb_samplerateinput_i(Fl_Int_Input*, void*);
- static void cb_samplerateinput(Fl_Int_Input*, void*);
- void cb_Buffer_i(Fl_Int_Input*, void*);
- static void cb_Buffer(Fl_Int_Input*, void*);
- void cb_Swap_i(Fl_Light_Button*, void*);
- static void cb_Swap(Fl_Light_Button*, void*);
- void cb_OscilSize_i(Fl_Choice*, void*);
- static void cb_OscilSize(Fl_Choice*, void*);
- static Fl_Menu_Item menu_OscilSize[];
- void cb_Dump_i(Fl_File_Input*, void*);
- static void cb_Dump(Fl_File_Input*, void*);
- void cb_Dump1_i(Fl_Check_Button*, void*);
- static void cb_Dump1(Fl_Check_Button*, void*);
- void cb_Append_i(Fl_Check_Button*, void*);
- static void cb_Append(Fl_Check_Button*, void*);
- void cb_OSS_i(Fl_File_Input*, void*);
- static void cb_OSS(Fl_File_Input*, void*);
- void cb_OSS1_i(Fl_File_Input*, void*);
- static void cb_OSS1(Fl_File_Input*, void*);
- void cb_Midi_i(Fl_Counter*, void*);
- static void cb_Midi(Fl_Counter*, void*);
-public:
- Fl_Box *midiinputnamebox;
-private:
- void cb_XML_i(Fl_Counter*, void*);
- static void cb_XML(Fl_Counter*, void*);
- void cb_PADsynth_i(Fl_Choice*, void*);
- static void cb_PADsynth(Fl_Choice*, void*);
- static Fl_Menu_Item menu_PADsynth[];
- void cb_Virtual_i(Fl_Choice*, void*);
- static void cb_Virtual(Fl_Choice*, void*);
- static Fl_Menu_Item menu_Virtual[];
-public:
- Fl_Browser *rootsbrowse;
-private:
- void cb_rootsbrowse_i(Fl_Browser*, void*);
- static void cb_rootsbrowse(Fl_Browser*, void*);
- void cb_Add_i(Fl_Button*, void*);
- static void cb_Add(Fl_Button*, void*);
-public:
- Fl_Button *removerootdirbutton;
-private:
- void cb_removerootdirbutton_i(Fl_Button*, void*);
- static void cb_removerootdirbutton(Fl_Button*, void*);
-public:
- Fl_Button *makedefaultrootdirbutton;
-private:
- void cb_makedefaultrootdirbutton_i(Fl_Button*, void*);
- static void cb_makedefaultrootdirbutton(Fl_Button*, void*);
-public:
- Fl_Browser *presetbrowse;
-private:
- void cb_presetbrowse_i(Fl_Browser*, void*);
- static void cb_presetbrowse(Fl_Browser*, void*);
- void cb_Add1_i(Fl_Button*, void*);
- static void cb_Add1(Fl_Button*, void*);
-public:
- Fl_Button *removepresetbutton;
-private:
- void cb_removepresetbutton_i(Fl_Button*, void*);
- static void cb_removepresetbutton(Fl_Button*, void*);
-public:
- Fl_Button *makedefaultpresetbutton;
-private:
- void cb_makedefaultpresetbutton_i(Fl_Button*, void*);
- static void cb_makedefaultpresetbutton(Fl_Button*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
-public:
- ConfigUI();
- void activatebutton_rootdir(bool active);
- void activatebutton_presetdir(bool active);
- void readbankcfg();
- void writebankcfg();
- void readpresetcfg();
- void writepresetcfg();
- int getsamplerateorder();
- void setsamplerateinput();
- void show();
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/EffUI.cc b/plugins/zynaddsubfx/src/UI/EffUI.cc
deleted file mode 100644
index aae61d9..0000000
--- a/plugins/zynaddsubfx/src/UI/EffUI.cc
+++ /dev/null
@@ -1,4113 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "EffUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-EQGraph::EQGraph(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- eff=NULL;
- maxdB=30;
-}
-
-void EQGraph::init(EffectMgr *eff_) {
- eff=eff_;
- oldx=-1;
- khzval=-1;
-}
-
-void EQGraph::draw_freq_line(REALTYPE freq,int type) {
- fl_color(FL_GRAY);
- REALTYPE freqx=getfreqpos(freq);
- switch(type){
- case 0:if (active_r()) fl_color(FL_WHITE);
- else fl_color(205,205,205);
- fl_line_style(FL_SOLID);
- break;
- case 1:fl_line_style(FL_DOT);break;
- case 2:fl_line_style(FL_DASH);break;
- };
-
-
- if ((freqx>0.0)&&(freqx<1.0))
- fl_line(x()+(int) (freqx*w()),y(),
- x()+(int) (freqx*w()),y()+h());
-}
-
-void EQGraph::draw() {
- int ox=x(),oy=y(),lx=w(),ly=h(),i,iy,oiy;
- REALTYPE freqx;
-
- if (active_r()) fl_color(0,70,150);
- else fl_color(80,120,160);
- fl_rectf(ox,oy,lx,ly);
-
-
- //draw the lines
- fl_color(FL_GRAY);
-
- fl_line_style(FL_SOLID);
- fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-
- freqx=getfreqpos(1000.0);
- if ((freqx>0.0)&&(freqx<1.0))
- fl_line(ox+(int) (freqx*lx),oy,
- ox+(int) (freqx*lx),oy+ly);
-
- for (i=1;i<10;i++){
- if(i==1){
- draw_freq_line(i*100.0,0);
- draw_freq_line(i*1000.0,0);
- }else
- if (i==5){
- draw_freq_line(i*10.0,2);
- draw_freq_line(i*100.0,2);
- draw_freq_line(i*1000.0,2);
- }else{
- draw_freq_line(i*10.0,1);
- draw_freq_line(i*100.0,1);
- draw_freq_line(i*1000.0,1);
- };
- };
-
- draw_freq_line(10000.0,0);
- draw_freq_line(20000.0,1);
-
-
- fl_line_style(FL_DOT);
- int GY=6;if (ly<GY*3) GY=-1;
- for (i=1;i<GY;i++){
- int tmp=(int)(ly/(REALTYPE)GY*i);
- fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
- };
-
-
- //draw the frequency response
- if (active_r()) fl_color(FL_YELLOW);
- else fl_color(200,200,80);
- fl_line_style(FL_SOLID);
- oiy=getresponse(ly,getfreqx(0.0));
- for (i=1;i<lx;i++){
- REALTYPE frq=getfreqx(i/(REALTYPE) lx);
- if (frq>SAMPLE_RATE/2) break;
- iy=getresponse(ly,frq);
- if ((oiy>=0) && (oiy<ly) &&
- (iy>=0) && (iy<ly) )
- fl_line(ox+i-1,oy+ly-oiy,ox+i,oy+ly-iy);
- oiy=iy;
- };
-}
-
-int EQGraph::getresponse(int maxy,REALTYPE freq) {
- REALTYPE dbresp=eff->getEQfreqresponse(freq);
- int idbresp=(int) ((dbresp/maxdB+1.0)*maxy/2.0);
-
-
- //fprintf(stderr,"%.5f\n",(dbresp/maxdB+1.0)*maxy/2.0);
-
-
- return(idbresp);
-}
-
-REALTYPE EQGraph::getfreqx(REALTYPE x) {
- if (x>1.0) x=1.0;
- return(20.0*pow((REALTYPE)1000.0,x));
-}
-
-REALTYPE EQGraph::getfreqpos(REALTYPE freq) {
- if (freq<0.00001) freq=0.00001;
- return(log(freq/20.0)/log(1000.0));
-}
-
-void EffUI::cb_revp_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-
-refresh(eff);
-}
-void EffUI::cb_revp(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_revp[] = {
- {"Cathedral 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Cathedral 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Cathedral 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Hall 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Hall 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Room 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Room 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Basement", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Tunnel", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Echoed 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Echoed 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Very Long 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Very Long 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_revp10_i(Fl_Choice* o, void*) {
- eff->seteffectpar(10,(int) o->value());
-if (eff->geteffectpar(10)==2) revp12->activate();
- else revp12->deactivate();
-}
-void EffUI::cb_revp10(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp10_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_revp10[] = {
- {"Random", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Freeverb", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Bandwidth", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_revp0_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void EffUI::cb_revp0(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp0_i(o,v);
-}
-
-void EffUI::cb_revp1_i(WidgetPDial* o, void*) {
- eff->seteffectpar(1,(int) o->value());
-}
-void EffUI::cb_revp1(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp1_i(o,v);
-}
-
-void EffUI::cb_revp2_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void EffUI::cb_revp2(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp2_i(o,v);
-}
-
-void EffUI::cb_revp3_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void EffUI::cb_revp3(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp3_i(o,v);
-}
-
-void EffUI::cb_revp4_i(WidgetPDial* o, void*) {
- eff->seteffectpar(4,(int) o->value());
-}
-void EffUI::cb_revp4(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp4_i(o,v);
-}
-
-void EffUI::cb_revp12_i(WidgetPDial* o, void*) {
- eff->seteffectpar(12,(int) o->value());
-}
-void EffUI::cb_revp12(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp12_i(o,v);
-}
-
-void EffUI::cb_revp6_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void EffUI::cb_revp6(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp6_i(o,v);
-}
-
-void EffUI::cb_revp7_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void EffUI::cb_revp7(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp7_i(o,v);
-}
-
-void EffUI::cb_revp8_i(WidgetPDial* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void EffUI::cb_revp8(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp8_i(o,v);
-}
-
-void EffUI::cb_revp9_i(WidgetPDial* o, void*) {
- eff->seteffectpar(9,(int) o->value());
-}
-void EffUI::cb_revp9(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp9_i(o,v);
-}
-
-void EffUI::cb_revp11_i(WidgetPDial* o, void*) {
- int x=64;
-if (Fl::event_button1()) x=(int)o->value();
- else o->value(x);
-eff->seteffectpar(11,x);
-}
-void EffUI::cb_revp11(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_revp11_i(o,v);
-}
-
-void EffUI::cb_echop_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void EffUI::cb_echop(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_echop_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_echop[] = {
- {"Echo 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Echo 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Echo 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Simple Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Canyon", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Panning Echo 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Panning Echo 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Panning Echo 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Feedback Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_echop0_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void EffUI::cb_echop0(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_echop0_i(o,v);
-}
-
-void EffUI::cb_echop1_i(WidgetPDial* o, void*) {
- eff->seteffectpar(1,(int) o->value());
-}
-void EffUI::cb_echop1(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_echop1_i(o,v);
-}
-
-void EffUI::cb_echop2_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void EffUI::cb_echop2(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_echop2_i(o,v);
-}
-
-void EffUI::cb_echop3_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void EffUI::cb_echop3(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_echop3_i(o,v);
-}
-
-void EffUI::cb_echop4_i(WidgetPDial* o, void*) {
- eff->seteffectpar(4,(int) o->value());
-}
-void EffUI::cb_echop4(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_echop4_i(o,v);
-}
-
-void EffUI::cb_echop5_i(WidgetPDial* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void EffUI::cb_echop5(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_echop5_i(o,v);
-}
-
-void EffUI::cb_echop6_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void EffUI::cb_echop6(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_echop6_i(o,v);
-}
-
-void EffUI::cb_chorusp_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void EffUI::cb_chorusp(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_chorusp[] = {
- {"Chorus 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Chorus 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Chorus 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Celeste 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Celeste 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_chorusp0_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void EffUI::cb_chorusp0(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp0_i(o,v);
-}
-
-void EffUI::cb_chorusp1_i(WidgetPDial* o, void*) {
- eff->seteffectpar(1,(int) o->value());
-}
-void EffUI::cb_chorusp1(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp1_i(o,v);
-}
-
-void EffUI::cb_chorusp2_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void EffUI::cb_chorusp2(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp2_i(o,v);
-}
-
-void EffUI::cb_chorusp3_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void EffUI::cb_chorusp3(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp3_i(o,v);
-}
-
-void EffUI::cb_chorusp5_i(WidgetPDial* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void EffUI::cb_chorusp5(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp5_i(o,v);
-}
-
-void EffUI::cb_chorusp6_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void EffUI::cb_chorusp6(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp6_i(o,v);
-}
-
-void EffUI::cb_chorusp7_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void EffUI::cb_chorusp7(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp7_i(o,v);
-}
-
-void EffUI::cb_chorusp8_i(WidgetPDial* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void EffUI::cb_chorusp8(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp8_i(o,v);
-}
-
-void EffUI::cb_chorusp9_i(WidgetPDial* o, void*) {
- eff->seteffectpar(9,(int) o->value());
-}
-void EffUI::cb_chorusp9(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp9_i(o,v);
-}
-
-void EffUI::cb_Flange_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(10,(int) o->value());
-}
-void EffUI::cb_Flange(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_Flange_i(o,v);
-}
-
-void EffUI::cb_chorusp11_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(11,(int) o->value());
-}
-void EffUI::cb_chorusp11(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp11_i(o,v);
-}
-
-void EffUI::cb_chorusp4_i(Fl_Choice* o, void*) {
- eff->seteffectpar(4,(int) o->value());
-}
-void EffUI::cb_chorusp4(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_chorusp4_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_chorusp4[] = {
- {"SINE", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"TRI", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_phaserp_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void EffUI::cb_phaserp(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_phaserp[] = {
- {"Phaser 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"APhaser 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"APhaser 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"APhaser 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"APhaser 4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"APhaser 5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"APhaser 6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_phaserp0_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void EffUI::cb_phaserp0(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp0_i(o,v);
-}
-
-void EffUI::cb_phaserp1_i(WidgetPDial* o, void*) {
- eff->seteffectpar(1,(int) o->value());
-}
-void EffUI::cb_phaserp1(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp1_i(o,v);
-}
-
-void EffUI::cb_phaserp2_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void EffUI::cb_phaserp2(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp2_i(o,v);
-}
-
-void EffUI::cb_phaserp3_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void EffUI::cb_phaserp3(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp3_i(o,v);
-}
-
-void EffUI::cb_phaserp4_i(Fl_Choice* o, void*) {
- eff->seteffectpar(4,(int) o->value());
-}
-void EffUI::cb_phaserp4(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp4_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_phaserp4[] = {
- {"SIN", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"TRI", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_phaserp5_i(WidgetPDial* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void EffUI::cb_phaserp5(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp5_i(o,v);
-}
-
-void EffUI::cb_phaserp6_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void EffUI::cb_phaserp6(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp6_i(o,v);
-}
-
-void EffUI::cb_phaserp7_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void EffUI::cb_phaserp7(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp7_i(o,v);
-}
-
-void EffUI::cb_phaserp8_i(Fl_Counter* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void EffUI::cb_phaserp8(Fl_Counter* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp8_i(o,v);
-}
-
-void EffUI::cb_phaserp9_i(WidgetPDial* o, void*) {
- eff->seteffectpar(9,(int) o->value());
-}
-void EffUI::cb_phaserp9(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp9_i(o,v);
-}
-
-void EffUI::cb_phaserp10_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(10,(int) o->value());
-}
-void EffUI::cb_phaserp10(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp10_i(o,v);
-}
-
-void EffUI::cb_phaserp11_i(WidgetPDial* o, void*) {
- eff->seteffectpar(11,(int) o->value());
-}
-void EffUI::cb_phaserp11(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp11_i(o,v);
-}
-
-void EffUI::cb_phaserp12_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(12,(int) o->value());
-}
-void EffUI::cb_phaserp12(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp12_i(o,v);
-}
-
-void EffUI::cb_phaserp13_i(WidgetPDial* o, void*) {
- eff->seteffectpar(13,(int) o->value());
-}
-void EffUI::cb_phaserp13(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp13_i(o,v);
-}
-
-void EffUI::cb_phaserp14_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(14,(int) o->value());
-}
-void EffUI::cb_phaserp14(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_phaserp14_i(o,v);
-}
-
-void EffUI::cb_awp_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void EffUI::cb_awp(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_awp[] = {
- {"Alienwah 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Alienwah 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Alienwah 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Alienwah 4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_awp0_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void EffUI::cb_awp0(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp0_i(o,v);
-}
-
-void EffUI::cb_awp1_i(WidgetPDial* o, void*) {
- eff->seteffectpar(1,(int) o->value());
-}
-void EffUI::cb_awp1(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp1_i(o,v);
-}
-
-void EffUI::cb_awp2_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void EffUI::cb_awp2(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp2_i(o,v);
-}
-
-void EffUI::cb_awp3_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void EffUI::cb_awp3(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp3_i(o,v);
-}
-
-void EffUI::cb_awp5_i(WidgetPDial* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void EffUI::cb_awp5(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp5_i(o,v);
-}
-
-void EffUI::cb_awp6_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void EffUI::cb_awp6(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp6_i(o,v);
-}
-
-void EffUI::cb_awp7_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void EffUI::cb_awp7(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp7_i(o,v);
-}
-
-void EffUI::cb_awp9_i(WidgetPDial* o, void*) {
- eff->seteffectpar(9,(int) o->value());
-}
-void EffUI::cb_awp9(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp9_i(o,v);
-}
-
-void EffUI::cb_awp4_i(Fl_Choice* o, void*) {
- eff->seteffectpar(4,(int) o->value());
-}
-void EffUI::cb_awp4(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp4_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_awp4[] = {
- {"SINE", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"TRI", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_awp10_i(WidgetPDial* o, void*) {
- eff->seteffectpar(10,(int) o->value());
-}
-void EffUI::cb_awp10(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp10_i(o,v);
-}
-
-void EffUI::cb_awp8_i(Fl_Counter* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void EffUI::cb_awp8(Fl_Counter* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_awp8_i(o,v);
-}
-
-void EffUI::cb_distp_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void EffUI::cb_distp(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_distp[] = {
- {"Overdrive 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Overdrive 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"A. Exciter 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"A. Exciter 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Guitar Amp", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Quantisize", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_distp0_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void EffUI::cb_distp0(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp0_i(o,v);
-}
-
-void EffUI::cb_distp1_i(WidgetPDial* o, void*) {
- eff->seteffectpar(1,(int) o->value());
-}
-void EffUI::cb_distp1(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp1_i(o,v);
-}
-
-void EffUI::cb_distp2_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void EffUI::cb_distp2(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp2_i(o,v);
-}
-
-void EffUI::cb_distp3_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void EffUI::cb_distp3(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp3_i(o,v);
-}
-
-void EffUI::cb_distp4_i(WidgetPDial* o, void*) {
- eff->seteffectpar(4,(int) o->value());
-}
-void EffUI::cb_distp4(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp4_i(o,v);
-}
-
-void EffUI::cb_distp7_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void EffUI::cb_distp7(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp7_i(o,v);
-}
-
-void EffUI::cb_distp8_i(WidgetPDial* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void EffUI::cb_distp8(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp8_i(o,v);
-}
-
-void EffUI::cb_distp5_i(Fl_Choice* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void EffUI::cb_distp5(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp5_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_distp5[] = {
- {"Atan", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Asym1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Qnts", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Zigzg", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Lmt", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LmtU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LmtL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"ILmt", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Clip", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Asym2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sgm", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_distp6_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void EffUI::cb_distp6(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp6_i(o,v);
-}
-
-void EffUI::cb_distp9_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(9,(int) o->value());
-}
-void EffUI::cb_distp9(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp9_i(o,v);
-}
-
-void EffUI::cb_distp10_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(10,(int) o->value());
-}
-void EffUI::cb_distp10(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_distp10_i(o,v);
-}
-
-void EffUI::cb_eqp0_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-eqgraph->redraw();
-}
-void EffUI::cb_eqp0(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_eqp0_i(o,v);
-}
-
-void EffUI::cb_bandcounter_i(Fl_Counter* o, void*) {
- eqband=(int) o->value();
-int npb=eqband*5+10;
-
-int type=eff->geteffectpar(npb);
-typechoice->value(type);
-
-if (type>6) gaindial->activate();
- else gaindial->deactivate();
-
-if (type==0) bandgroup->deactivate();
-else bandgroup->activate();
-
-int freq=eff->geteffectpar(npb+1);
-freqdial->value(freq);
-
-int gain=eff->geteffectpar(npb+2);
-gaindial->value(gain);
-
-int q=eff->geteffectpar(npb+3);
-qdial->value(q);
-
-int dbl=eff->geteffectpar(npb+4);
-stagescounter->value(dbl);
-}
-void EffUI::cb_bandcounter(Fl_Counter* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_bandcounter_i(o,v);
-}
-
-void EffUI::cb_freqdial_i(WidgetPDial* o, void*) {
- int np=eqband*5+11;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();
-}
-void EffUI::cb_freqdial(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->parent()->user_data()))->cb_freqdial_i(o,v);
-}
-
-void EffUI::cb_gaindial_i(WidgetPDial* o, void*) {
- int np=eqband*5+12;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();
-}
-void EffUI::cb_gaindial(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->parent()->user_data()))->cb_gaindial_i(o,v);
-}
-
-void EffUI::cb_qdial_i(WidgetPDial* o, void*) {
- int np=eqband*5+13;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();
-}
-void EffUI::cb_qdial(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->parent()->user_data()))->cb_qdial_i(o,v);
-}
-
-void EffUI::cb_stagescounter_i(Fl_Counter* o, void*) {
- int np=eqband*5+14;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();
-}
-void EffUI::cb_stagescounter(Fl_Counter* o, void* v) {
- ((EffUI*)(o->parent()->parent()->user_data()))->cb_stagescounter_i(o,v);
-}
-
-void EffUI::cb_typechoice_i(Fl_Choice* o, void*) {
- int np=eqband*5+10;
-eff->seteffectpar(np,(int) o->value());
-bandcounter->do_callback();
-eqgraph->redraw();
-}
-void EffUI::cb_typechoice(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_typechoice_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_typechoice[] = {
- {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Lp1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Hp1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Lp2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Hp2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Bp2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"N2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pk", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LSh", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"HSh", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_dfp_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void EffUI::cb_dfp(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_dfp_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_dfp[] = {
- {"WahWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"AutoWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Sweep", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"VocalMorph1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"VocalMorph2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_dfp0_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void EffUI::cb_dfp0(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_dfp0_i(o,v);
-}
-
-void EffUI::cb_dfp1_i(WidgetPDial* o, void*) {
- eff->seteffectpar(1,(int) o->value());
-}
-void EffUI::cb_dfp1(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_dfp1_i(o,v);
-}
-
-void EffUI::cb_dfp2_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void EffUI::cb_dfp2(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_dfp2_i(o,v);
-}
-
-void EffUI::cb_dfp3_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void EffUI::cb_dfp3(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_dfp3_i(o,v);
-}
-
-void EffUI::cb_dfp5_i(WidgetPDial* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void EffUI::cb_dfp5(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_dfp5_i(o,v);
-}
-
-void EffUI::cb_dfp6_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void EffUI::cb_dfp6(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_dfp6_i(o,v);
-}
-
-void EffUI::cb_dfp4_i(Fl_Choice* o, void*) {
- eff->seteffectpar(4,(int) o->value());
-}
-void EffUI::cb_dfp4(Fl_Choice* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_dfp4_i(o,v);
-}
-
-Fl_Menu_Item EffUI::menu_dfp4[] = {
- {"SINE", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"TRI", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void EffUI::cb_Filter_i(Fl_Button*, void*) {
- filterwindow->show();
-}
-void EffUI::cb_Filter(Fl_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_Filter_i(o,v);
-}
-
-void EffUI::cb_dfp7_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void EffUI::cb_dfp7(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->parent()->user_data()))->cb_dfp7_i(o,v);
-}
-
-void EffUI::cb_dfp9_i(WidgetPDial* o, void*) {
- eff->seteffectpar(9,(int) o->value());
-}
-void EffUI::cb_dfp9(WidgetPDial* o, void* v) {
- ((EffUI*)(o->parent()->parent()->user_data()))->cb_dfp9_i(o,v);
-}
-
-void EffUI::cb_dfp8_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void EffUI::cb_dfp8(Fl_Check_Button* o, void* v) {
- ((EffUI*)(o->parent()->parent()->user_data()))->cb_dfp8_i(o,v);
-}
-
-void EffUI::cb_Close_i(Fl_Button*, void*) {
- filterwindow->hide();
-}
-void EffUI::cb_Close(Fl_Button* o, void* v) {
- ((EffUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-EffUI::EffUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- eff=NULL;
- filterwindow=NULL;
-}
-
-EffUI::~EffUI() {
- effnullwindow->hide();//delete (effnullwindow);
- effreverbwindow->hide();//delete (effreverbwindow);
- effechowindow->hide();//delete (effechowindow);
- effchoruswindow->hide();//delete (effchoruswindow);
- effphaserwindow->hide();//delete (effphaserwindow);
- effalienwahwindow->hide();//delete (effalienwahwindow);
- effdistorsionwindow->hide();//delete (effdistorsionwindow);
- effeqwindow->hide();//delete (effeqwindow);
- effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);
-
- if (filterwindow!=NULL){
- filterwindow->hide();
- delete(filterwindow);
- };
-}
-
-Fl_Group* EffUI::make_null_window() {
- { effnullwindow = new Fl_Group(0, 0, 380, 95);
- effnullwindow->box(FL_PLASTIC_UP_BOX);
- effnullwindow->color((Fl_Color)221);
- effnullwindow->selection_color(FL_BACKGROUND_COLOR);
- effnullwindow->labeltype(FL_NO_LABEL);
- effnullwindow->labelfont(1);
- effnullwindow->labelsize(14);
- effnullwindow->labelcolor(FL_FOREGROUND_COLOR);
- effnullwindow->user_data((void*)(this));
- effnullwindow->align(Fl_Align(FL_ALIGN_TOP));
- effnullwindow->when(FL_WHEN_RELEASE);
- { Fl_Text_Display* o = new Fl_Text_Display(120, 35, 10, 20, "No Effect");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->labelcolor((Fl_Color)43);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- effnullwindow->end();
- } // Fl_Group* effnullwindow
- return effnullwindow;
-}
-
-Fl_Group* EffUI::make_reverb_window() {
- { effreverbwindow = new Fl_Group(0, 0, 380, 95);
- effreverbwindow->box(FL_PLASTIC_UP_BOX);
- effreverbwindow->color((Fl_Color)221);
- effreverbwindow->selection_color(FL_BACKGROUND_COLOR);
- effreverbwindow->labeltype(FL_NO_LABEL);
- effreverbwindow->labelfont(1);
- effreverbwindow->labelsize(14);
- effreverbwindow->labelcolor(FL_FOREGROUND_COLOR);
- effreverbwindow->user_data((void*)(this));
- effreverbwindow->align(Fl_Align(FL_ALIGN_TOP));
- effreverbwindow->when(FL_WHEN_RELEASE);
- { Fl_Text_Display* o = new Fl_Text_Display(275, 10, 10, 20, "Reverb ");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { revp = new Fl_Choice(10, 15, 90, 15, "Preset");
- revp->down_box(FL_BORDER_BOX);
- revp->color((Fl_Color)14);
- revp->selection_color(FL_FOREGROUND_COLOR);
- revp->labelfont(1);
- revp->labelsize(10);
- revp->textfont(1);
- revp->textsize(10);
- revp->textcolor(FL_BACKGROUND2_COLOR);
- revp->callback((Fl_Callback*)cb_revp);
- revp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- revp->menu(menu_revp);
- } // Fl_Choice* revp
- { revp10 = new Fl_Choice(110, 15, 85, 15, "Type");
- revp10->down_box(FL_BORDER_BOX);
- revp10->color((Fl_Color)14);
- revp10->labelfont(1);
- revp10->labelsize(10);
- revp10->textfont(1);
- revp10->textsize(10);
- revp10->textcolor(FL_BACKGROUND2_COLOR);
- revp10->callback((Fl_Callback*)cb_revp10);
- revp10->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- revp10->menu(menu_revp10);
- } // Fl_Choice* revp10
- { revp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- revp0->tooltip("Effect Volume");
- revp0->box(FL_ROUND_UP_BOX);
- revp0->color(FL_BACKGROUND_COLOR);
- revp0->selection_color(FL_INACTIVE_COLOR);
- revp0->labeltype(FL_NORMAL_LABEL);
- revp0->labelfont(1);
- revp0->labelsize(11);
- revp0->labelcolor(FL_FOREGROUND_COLOR);
- revp0->maximum(127);
- revp0->callback((Fl_Callback*)cb_revp0);
- revp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp0
- { revp1 = new WidgetPDial(45, 40, 30, 30, "Pan");
- revp1->box(FL_ROUND_UP_BOX);
- revp1->color(FL_BACKGROUND_COLOR);
- revp1->selection_color(FL_INACTIVE_COLOR);
- revp1->labeltype(FL_NORMAL_LABEL);
- revp1->labelfont(1);
- revp1->labelsize(11);
- revp1->labelcolor(FL_FOREGROUND_COLOR);
- revp1->maximum(127);
- revp1->callback((Fl_Callback*)cb_revp1);
- revp1->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp1
- { revp2 = new WidgetPDial(80, 40, 30, 30, "Time");
- revp2->tooltip("Duration of Effect");
- revp2->box(FL_ROUND_UP_BOX);
- revp2->color(FL_BACKGROUND_COLOR);
- revp2->selection_color(FL_INACTIVE_COLOR);
- revp2->labeltype(FL_NORMAL_LABEL);
- revp2->labelfont(1);
- revp2->labelsize(11);
- revp2->labelcolor(FL_FOREGROUND_COLOR);
- revp2->maximum(127);
- revp2->callback((Fl_Callback*)cb_revp2);
- revp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp2
- { revp3 = new WidgetPDial(120, 40, 30, 30, "I.del");
- revp3->tooltip("Initial Delay");
- revp3->box(FL_ROUND_UP_BOX);
- revp3->color(FL_BACKGROUND_COLOR);
- revp3->selection_color(FL_INACTIVE_COLOR);
- revp3->labeltype(FL_NORMAL_LABEL);
- revp3->labelfont(1);
- revp3->labelsize(11);
- revp3->labelcolor(FL_FOREGROUND_COLOR);
- revp3->maximum(127);
- revp3->callback((Fl_Callback*)cb_revp3);
- revp3->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* revp3
- { revp4 = new WidgetPDial(155, 40, 30, 30, "I.delfb");
- revp4->tooltip("Initial Delay Feedback");
- revp4->box(FL_ROUND_UP_BOX);
- revp4->color(FL_BACKGROUND_COLOR);
- revp4->selection_color(FL_INACTIVE_COLOR);
- revp4->labeltype(FL_NORMAL_LABEL);
- revp4->labelfont(1);
- revp4->labelsize(11);
- revp4->labelcolor(FL_FOREGROUND_COLOR);
- revp4->maximum(127);
- revp4->callback((Fl_Callback*)cb_revp4);
- revp4->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp4->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp4
- { WidgetPDial* o = revp12 = new WidgetPDial(200, 40, 30, 30, "bw");
- revp12->box(FL_ROUND_UP_BOX);
- revp12->color(FL_BACKGROUND_COLOR);
- revp12->selection_color(FL_INACTIVE_COLOR);
- revp12->labeltype(FL_NORMAL_LABEL);
- revp12->labelfont(1);
- revp12->labelsize(11);
- revp12->labelcolor(FL_FOREGROUND_COLOR);
- revp12->maximum(127);
- revp12->callback((Fl_Callback*)cb_revp12);
- revp12->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp12->when(FL_WHEN_RELEASE);
- revp12->deactivate();
- if (eff->geteffectpar(10)==2) o->activate();
- } // WidgetPDial* revp12
- { revp6 = new WidgetPDial(235, 40, 30, 30, "E/R");
- revp6->box(FL_ROUND_UP_BOX);
- revp6->color(FL_BACKGROUND_COLOR);
- revp6->selection_color(FL_INACTIVE_COLOR);
- revp6->labeltype(FL_NORMAL_LABEL);
- revp6->labelfont(1);
- revp6->labelsize(11);
- revp6->labelcolor(FL_FOREGROUND_COLOR);
- revp6->maximum(127);
- revp6->callback((Fl_Callback*)cb_revp6);
- revp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp6->when(FL_WHEN_CHANGED);
- revp6->deactivate();
- } // WidgetPDial* revp6
- { revp7 = new WidgetPDial(270, 40, 30, 30, "LPF");
- revp7->tooltip("Low Pass Filter");
- revp7->box(FL_ROUND_UP_BOX);
- revp7->color(FL_BACKGROUND_COLOR);
- revp7->selection_color(FL_INACTIVE_COLOR);
- revp7->labeltype(FL_NORMAL_LABEL);
- revp7->labelfont(1);
- revp7->labelsize(11);
- revp7->labelcolor(FL_FOREGROUND_COLOR);
- revp7->maximum(127);
- revp7->callback((Fl_Callback*)cb_revp7);
- revp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp7
- { revp8 = new WidgetPDial(305, 40, 30, 30, "HPF");
- revp8->tooltip("High Pass Filter");
- revp8->box(FL_ROUND_UP_BOX);
- revp8->color(FL_BACKGROUND_COLOR);
- revp8->selection_color(FL_INACTIVE_COLOR);
- revp8->labeltype(FL_NORMAL_LABEL);
- revp8->labelfont(1);
- revp8->labelsize(11);
- revp8->labelcolor(FL_FOREGROUND_COLOR);
- revp8->maximum(127);
- revp8->callback((Fl_Callback*)cb_revp8);
- revp8->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp8->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp8
- { revp9 = new WidgetPDial(340, 40, 30, 30, "Damp");
- revp9->tooltip("Dampening");
- revp9->box(FL_ROUND_UP_BOX);
- revp9->color(FL_BACKGROUND_COLOR);
- revp9->selection_color(FL_INACTIVE_COLOR);
- revp9->labeltype(FL_NORMAL_LABEL);
- revp9->labelfont(1);
- revp9->labelsize(11);
- revp9->labelcolor(FL_FOREGROUND_COLOR);
- revp9->minimum(64);
- revp9->maximum(127);
- revp9->step(1);
- revp9->callback((Fl_Callback*)cb_revp9);
- revp9->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp9->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp9
- { revp11 = new WidgetPDial(200, 10, 25, 25, "R.S.");
- revp11->tooltip("RoomSize");
- revp11->box(FL_ROUND_UP_BOX);
- revp11->color(FL_BACKGROUND_COLOR);
- revp11->selection_color(FL_INACTIVE_COLOR);
- revp11->labeltype(FL_NORMAL_LABEL);
- revp11->labelfont(1);
- revp11->labelsize(8);
- revp11->labelcolor(FL_FOREGROUND_COLOR);
- revp11->minimum(1);
- revp11->maximum(127);
- revp11->step(1);
- revp11->callback((Fl_Callback*)cb_revp11);
- revp11->align(Fl_Align(FL_ALIGN_RIGHT));
- revp11->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp11
- effreverbwindow->end();
- } // Fl_Group* effreverbwindow
- return effreverbwindow;
-}
-
-Fl_Group* EffUI::make_echo_window() {
- { effechowindow = new Fl_Group(0, 0, 380, 95);
- effechowindow->box(FL_PLASTIC_UP_BOX);
- effechowindow->color((Fl_Color)221);
- effechowindow->selection_color(FL_BACKGROUND_COLOR);
- effechowindow->labeltype(FL_NO_LABEL);
- effechowindow->labelfont(1);
- effechowindow->labelsize(14);
- effechowindow->labelcolor(FL_FOREGROUND_COLOR);
- effechowindow->user_data((void*)(this));
- effechowindow->align(Fl_Align(FL_ALIGN_TOP));
- effechowindow->when(FL_WHEN_RELEASE);
- { echop = new Fl_Choice(11, 15, 95, 15, "Preset");
- echop->down_box(FL_BORDER_BOX);
- echop->color((Fl_Color)14);
- echop->selection_color(FL_FOREGROUND_COLOR);
- echop->labelfont(1);
- echop->labelsize(10);
- echop->textfont(1);
- echop->textsize(10);
- echop->textcolor(FL_BACKGROUND2_COLOR);
- echop->callback((Fl_Callback*)cb_echop);
- echop->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- echop->menu(menu_echop);
- } // Fl_Choice* echop
- { Fl_Text_Display* o = new Fl_Text_Display(295, 10, 10, 20, "Echo");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { echop0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- echop0->tooltip("Effect Volume");
- echop0->box(FL_ROUND_UP_BOX);
- echop0->color(FL_BACKGROUND_COLOR);
- echop0->selection_color(FL_INACTIVE_COLOR);
- echop0->labeltype(FL_NORMAL_LABEL);
- echop0->labelfont(1);
- echop0->labelsize(11);
- echop0->labelcolor(FL_FOREGROUND_COLOR);
- echop0->maximum(127);
- echop0->callback((Fl_Callback*)cb_echop0);
- echop0->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* echop0
- { echop1 = new WidgetPDial(45, 40, 30, 30, "Pan");
- echop1->box(FL_ROUND_UP_BOX);
- echop1->color(FL_BACKGROUND_COLOR);
- echop1->selection_color(FL_INACTIVE_COLOR);
- echop1->labeltype(FL_NORMAL_LABEL);
- echop1->labelfont(1);
- echop1->labelsize(11);
- echop1->labelcolor(FL_FOREGROUND_COLOR);
- echop1->maximum(127);
- echop1->callback((Fl_Callback*)cb_echop1);
- echop1->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* echop1
- { echop2 = new WidgetPDial(80, 40, 30, 30, "Delay");
- echop2->box(FL_ROUND_UP_BOX);
- echop2->color(FL_BACKGROUND_COLOR);
- echop2->selection_color(FL_INACTIVE_COLOR);
- echop2->labeltype(FL_NORMAL_LABEL);
- echop2->labelfont(1);
- echop2->labelsize(11);
- echop2->labelcolor(FL_FOREGROUND_COLOR);
- echop2->maximum(127);
- echop2->callback((Fl_Callback*)cb_echop2);
- echop2->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop2->when(FL_WHEN_RELEASE);
- } // WidgetPDial* echop2
- { echop3 = new WidgetPDial(120, 40, 30, 30, "LRdl.");
- echop3->tooltip("Delay Between L/R");
- echop3->box(FL_ROUND_UP_BOX);
- echop3->color(FL_BACKGROUND_COLOR);
- echop3->selection_color(FL_INACTIVE_COLOR);
- echop3->labeltype(FL_NORMAL_LABEL);
- echop3->labelfont(1);
- echop3->labelsize(11);
- echop3->labelcolor(FL_FOREGROUND_COLOR);
- echop3->maximum(127);
- echop3->callback((Fl_Callback*)cb_echop3);
- echop3->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* echop3
- { echop4 = new WidgetPDial(155, 40, 30, 30, "LRc.");
- echop4->tooltip("L/R Crossover");
- echop4->box(FL_ROUND_UP_BOX);
- echop4->color(FL_BACKGROUND_COLOR);
- echop4->selection_color(FL_INACTIVE_COLOR);
- echop4->labeltype(FL_NORMAL_LABEL);
- echop4->labelfont(1);
- echop4->labelsize(11);
- echop4->labelcolor(FL_FOREGROUND_COLOR);
- echop4->maximum(127);
- echop4->callback((Fl_Callback*)cb_echop4);
- echop4->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop4->when(FL_WHEN_CHANGED);
- } // WidgetPDial* echop4
- { echop5 = new WidgetPDial(195, 40, 30, 30, "Fb.");
- echop5->tooltip("Feedback");
- echop5->box(FL_ROUND_UP_BOX);
- echop5->color(FL_BACKGROUND_COLOR);
- echop5->selection_color(FL_INACTIVE_COLOR);
- echop5->labeltype(FL_NORMAL_LABEL);
- echop5->labelfont(1);
- echop5->labelsize(11);
- echop5->labelcolor(FL_FOREGROUND_COLOR);
- echop5->maximum(127);
- echop5->callback((Fl_Callback*)cb_echop5);
- echop5->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop5->when(FL_WHEN_CHANGED);
- } // WidgetPDial* echop5
- { echop6 = new WidgetPDial(235, 40, 30, 30, "Damp");
- echop6->tooltip("Dampening");
- echop6->box(FL_ROUND_UP_BOX);
- echop6->color(FL_BACKGROUND_COLOR);
- echop6->selection_color(FL_INACTIVE_COLOR);
- echop6->labeltype(FL_NORMAL_LABEL);
- echop6->labelfont(1);
- echop6->labelsize(11);
- echop6->labelcolor(FL_FOREGROUND_COLOR);
- echop6->maximum(127);
- echop6->callback((Fl_Callback*)cb_echop6);
- echop6->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* echop6
- effechowindow->end();
- } // Fl_Group* effechowindow
- return effechowindow;
-}
-
-Fl_Group* EffUI::make_chorus_window() {
- { effchoruswindow = new Fl_Group(0, 0, 380, 95);
- effchoruswindow->box(FL_PLASTIC_UP_BOX);
- effchoruswindow->color((Fl_Color)221);
- effchoruswindow->selection_color(FL_BACKGROUND_COLOR);
- effchoruswindow->labeltype(FL_NO_LABEL);
- effchoruswindow->labelfont(1);
- effchoruswindow->labelsize(14);
- effchoruswindow->labelcolor(FL_FOREGROUND_COLOR);
- effchoruswindow->user_data((void*)(this));
- effchoruswindow->align(Fl_Align(FL_ALIGN_TOP));
- effchoruswindow->when(FL_WHEN_RELEASE);
- { chorusp = new Fl_Choice(10, 15, 90, 15, "Preset");
- chorusp->down_box(FL_BORDER_BOX);
- chorusp->color((Fl_Color)14);
- chorusp->selection_color(FL_FOREGROUND_COLOR);
- chorusp->labelfont(1);
- chorusp->labelsize(10);
- chorusp->textfont(1);
- chorusp->textsize(10);
- chorusp->textcolor(FL_BACKGROUND2_COLOR);
- chorusp->callback((Fl_Callback*)cb_chorusp);
- chorusp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- chorusp->menu(menu_chorusp);
- } // Fl_Choice* chorusp
- { Fl_Text_Display* o = new Fl_Text_Display(265, 10, 10, 20, "Chorus");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { chorusp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- chorusp0->box(FL_ROUND_UP_BOX);
- chorusp0->color(FL_BACKGROUND_COLOR);
- chorusp0->selection_color(FL_INACTIVE_COLOR);
- chorusp0->labeltype(FL_NORMAL_LABEL);
- chorusp0->labelfont(1);
- chorusp0->labelsize(11);
- chorusp0->labelcolor(FL_FOREGROUND_COLOR);
- chorusp0->maximum(127);
- chorusp0->callback((Fl_Callback*)cb_chorusp0);
- chorusp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp0
- { chorusp1 = new WidgetPDial(45, 40, 30, 30, "Pan");
- chorusp1->box(FL_ROUND_UP_BOX);
- chorusp1->color(FL_BACKGROUND_COLOR);
- chorusp1->selection_color(FL_INACTIVE_COLOR);
- chorusp1->labeltype(FL_NORMAL_LABEL);
- chorusp1->labelfont(1);
- chorusp1->labelsize(11);
- chorusp1->labelcolor(FL_FOREGROUND_COLOR);
- chorusp1->maximum(127);
- chorusp1->callback((Fl_Callback*)cb_chorusp1);
- chorusp1->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp1
- { chorusp2 = new WidgetPDial(85, 40, 30, 30, "Freq");
- chorusp2->tooltip("LFO Frequency");
- chorusp2->box(FL_ROUND_UP_BOX);
- chorusp2->color(FL_BACKGROUND_COLOR);
- chorusp2->selection_color(FL_INACTIVE_COLOR);
- chorusp2->labeltype(FL_NORMAL_LABEL);
- chorusp2->labelfont(1);
- chorusp2->labelsize(11);
- chorusp2->labelcolor(FL_FOREGROUND_COLOR);
- chorusp2->maximum(127);
- chorusp2->callback((Fl_Callback*)cb_chorusp2);
- chorusp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp2
- { chorusp3 = new WidgetPDial(120, 40, 30, 30, "Rnd");
- chorusp3->tooltip("LFO Randomness");
- chorusp3->box(FL_ROUND_UP_BOX);
- chorusp3->color(FL_BACKGROUND_COLOR);
- chorusp3->selection_color(FL_INACTIVE_COLOR);
- chorusp3->labeltype(FL_NORMAL_LABEL);
- chorusp3->labelfont(1);
- chorusp3->labelsize(11);
- chorusp3->labelcolor(FL_FOREGROUND_COLOR);
- chorusp3->maximum(127);
- chorusp3->callback((Fl_Callback*)cb_chorusp3);
- chorusp3->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* chorusp3
- { chorusp5 = new WidgetPDial(200, 40, 30, 30, "St.df");
- chorusp5->tooltip("L/R Phase Shift");
- chorusp5->box(FL_ROUND_UP_BOX);
- chorusp5->color(FL_BACKGROUND_COLOR);
- chorusp5->selection_color(FL_INACTIVE_COLOR);
- chorusp5->labeltype(FL_NORMAL_LABEL);
- chorusp5->labelfont(1);
- chorusp5->labelsize(11);
- chorusp5->labelcolor(FL_FOREGROUND_COLOR);
- chorusp5->maximum(127);
- chorusp5->callback((Fl_Callback*)cb_chorusp5);
- chorusp5->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp5->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp5
- { chorusp6 = new WidgetPDial(235, 40, 30, 30, "Dpth");
- chorusp6->tooltip("LFO Depth");
- chorusp6->box(FL_ROUND_UP_BOX);
- chorusp6->color(FL_BACKGROUND_COLOR);
- chorusp6->selection_color(FL_INACTIVE_COLOR);
- chorusp6->labeltype(FL_NORMAL_LABEL);
- chorusp6->labelfont(1);
- chorusp6->labelsize(11);
- chorusp6->labelcolor(FL_FOREGROUND_COLOR);
- chorusp6->maximum(127);
- chorusp6->callback((Fl_Callback*)cb_chorusp6);
- chorusp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp6
- { chorusp7 = new WidgetPDial(270, 40, 30, 30, "Delay");
- chorusp7->box(FL_ROUND_UP_BOX);
- chorusp7->color(FL_BACKGROUND_COLOR);
- chorusp7->selection_color(FL_INACTIVE_COLOR);
- chorusp7->labeltype(FL_NORMAL_LABEL);
- chorusp7->labelfont(1);
- chorusp7->labelsize(11);
- chorusp7->labelcolor(FL_FOREGROUND_COLOR);
- chorusp7->maximum(127);
- chorusp7->callback((Fl_Callback*)cb_chorusp7);
- chorusp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp7
- { chorusp8 = new WidgetPDial(305, 40, 30, 30, "Fb");
- chorusp8->tooltip("Feedback");
- chorusp8->box(FL_ROUND_UP_BOX);
- chorusp8->color(FL_BACKGROUND_COLOR);
- chorusp8->selection_color(FL_INACTIVE_COLOR);
- chorusp8->labeltype(FL_NORMAL_LABEL);
- chorusp8->labelfont(1);
- chorusp8->labelsize(11);
- chorusp8->labelcolor(FL_FOREGROUND_COLOR);
- chorusp8->maximum(127);
- chorusp8->callback((Fl_Callback*)cb_chorusp8);
- chorusp8->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp8->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp8
- { chorusp9 = new WidgetPDial(340, 40, 30, 30, "L/R");
- chorusp9->tooltip("Channel Routing");
- chorusp9->box(FL_ROUND_UP_BOX);
- chorusp9->color(FL_BACKGROUND_COLOR);
- chorusp9->selection_color(FL_INACTIVE_COLOR);
- chorusp9->labeltype(FL_NORMAL_LABEL);
- chorusp9->labelfont(1);
- chorusp9->labelsize(11);
- chorusp9->labelcolor(FL_FOREGROUND_COLOR);
- chorusp9->maximum(127);
- chorusp9->callback((Fl_Callback*)cb_chorusp9);
- chorusp9->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp9->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp9
- { Fl_Check_Button* o = new Fl_Check_Button(120, 10, 55, 20, "Flange");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->color((Fl_Color)230);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Flange);
- o->hide();
- o->deactivate();
- o->value(eff->geteffectpar(10));
- } // Fl_Check_Button* o
- { chorusp11 = new Fl_Check_Button(185, 10, 70, 20, "Substract");
- chorusp11->tooltip("inverts the output");
- chorusp11->box(FL_THIN_UP_BOX);
- chorusp11->down_box(FL_DOWN_BOX);
- chorusp11->color((Fl_Color)230);
- chorusp11->labelfont(1);
- chorusp11->labelsize(10);
- chorusp11->callback((Fl_Callback*)cb_chorusp11);
- } // Fl_Check_Button* chorusp11
- { chorusp4 = new Fl_Choice(155, 50, 40, 15, "LFO type");
- chorusp4->tooltip("LFO function");
- chorusp4->down_box(FL_BORDER_BOX);
- chorusp4->labelfont(1);
- chorusp4->labelsize(10);
- chorusp4->textsize(8);
- chorusp4->callback((Fl_Callback*)cb_chorusp4);
- chorusp4->align(Fl_Align(130));
- chorusp4->menu(menu_chorusp4);
- } // Fl_Choice* chorusp4
- effchoruswindow->end();
- } // Fl_Group* effchoruswindow
- return effchoruswindow;
-}
-
-Fl_Group* EffUI::make_phaser_window() {
- { effphaserwindow = new Fl_Group(0, 0, 380, 95);
- effphaserwindow->box(FL_PLASTIC_UP_BOX);
- effphaserwindow->color((Fl_Color)221);
- effphaserwindow->selection_color(FL_BACKGROUND_COLOR);
- effphaserwindow->labeltype(FL_NO_LABEL);
- effphaserwindow->labelfont(1);
- effphaserwindow->labelsize(14);
- effphaserwindow->labelcolor(FL_FOREGROUND_COLOR);
- effphaserwindow->user_data((void*)(this));
- effphaserwindow->align(Fl_Align(FL_ALIGN_TOP));
- effphaserwindow->when(FL_WHEN_RELEASE);
- { phaserp = new Fl_Choice(10, 15, 100, 15, "Preset");
- phaserp->down_box(FL_BORDER_BOX);
- phaserp->color((Fl_Color)14);
- phaserp->selection_color(FL_FOREGROUND_COLOR);
- phaserp->labelfont(1);
- phaserp->labelsize(10);
- phaserp->textfont(1);
- phaserp->textsize(10);
- phaserp->textcolor(FL_BACKGROUND2_COLOR);
- phaserp->callback((Fl_Callback*)cb_phaserp);
- phaserp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- phaserp->menu(menu_phaserp);
- } // Fl_Choice* phaserp
- { Fl_Text_Display* o = new Fl_Text_Display(275, 10, 10, 20, "Phaser");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { phaserp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- phaserp0->tooltip("Effect Volume");
- phaserp0->box(FL_ROUND_UP_BOX);
- phaserp0->color(FL_BACKGROUND_COLOR);
- phaserp0->selection_color(FL_INACTIVE_COLOR);
- phaserp0->labeltype(FL_NORMAL_LABEL);
- phaserp0->labelfont(1);
- phaserp0->labelsize(11);
- phaserp0->labelcolor(FL_FOREGROUND_COLOR);
- phaserp0->maximum(127);
- phaserp0->callback((Fl_Callback*)cb_phaserp0);
- phaserp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp0
- { phaserp1 = new WidgetPDial(45, 40, 30, 30, "Pan");
- phaserp1->box(FL_ROUND_UP_BOX);
- phaserp1->color(FL_BACKGROUND_COLOR);
- phaserp1->selection_color(FL_INACTIVE_COLOR);
- phaserp1->labeltype(FL_NORMAL_LABEL);
- phaserp1->labelfont(1);
- phaserp1->labelsize(11);
- phaserp1->labelcolor(FL_FOREGROUND_COLOR);
- phaserp1->maximum(127);
- phaserp1->callback((Fl_Callback*)cb_phaserp1);
- phaserp1->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp1
- { phaserp2 = new WidgetPDial(85, 45, 25, 25, "Freq");
- phaserp2->tooltip("LFO frequency");
- phaserp2->box(FL_ROUND_UP_BOX);
- phaserp2->color(FL_BACKGROUND_COLOR);
- phaserp2->selection_color(FL_INACTIVE_COLOR);
- phaserp2->labeltype(FL_NORMAL_LABEL);
- phaserp2->labelfont(1);
- phaserp2->labelsize(11);
- phaserp2->labelcolor(FL_FOREGROUND_COLOR);
- phaserp2->maximum(127);
- phaserp2->callback((Fl_Callback*)cb_phaserp2);
- phaserp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp2
- { phaserp3 = new WidgetPDial(120, 45, 25, 25, "Rnd");
- phaserp3->tooltip("LFO randomness");
- phaserp3->box(FL_ROUND_UP_BOX);
- phaserp3->color(FL_BACKGROUND_COLOR);
- phaserp3->selection_color(FL_INACTIVE_COLOR);
- phaserp3->labeltype(FL_NORMAL_LABEL);
- phaserp3->labelfont(1);
- phaserp3->labelsize(11);
- phaserp3->labelcolor(FL_FOREGROUND_COLOR);
- phaserp3->maximum(127);
- phaserp3->callback((Fl_Callback*)cb_phaserp3);
- phaserp3->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* phaserp3
- { phaserp4 = new Fl_Choice(245, 55, 40, 15, "LFO");
- phaserp4->tooltip("LFO function");
- phaserp4->down_box(FL_BORDER_BOX);
- phaserp4->labelfont(1);
- phaserp4->labelsize(10);
- phaserp4->textsize(8);
- phaserp4->callback((Fl_Callback*)cb_phaserp4);
- phaserp4->align(Fl_Align(130));
- phaserp4->menu(menu_phaserp4);
- } // Fl_Choice* phaserp4
- { phaserp5 = new WidgetPDial(155, 45, 25, 25, "St.df");
- phaserp5->tooltip("Left/Right Channel Phase Shift");
- phaserp5->box(FL_ROUND_UP_BOX);
- phaserp5->color(FL_BACKGROUND_COLOR);
- phaserp5->selection_color(FL_INACTIVE_COLOR);
- phaserp5->labeltype(FL_NORMAL_LABEL);
- phaserp5->labelfont(1);
- phaserp5->labelsize(11);
- phaserp5->labelcolor(FL_FOREGROUND_COLOR);
- phaserp5->maximum(127);
- phaserp5->callback((Fl_Callback*)cb_phaserp5);
- phaserp5->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp5->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp5
- { phaserp6 = new WidgetPDial(120, 5, 25, 25, "Dpth");
- phaserp6->tooltip("LFO Depth");
- phaserp6->box(FL_ROUND_UP_BOX);
- phaserp6->color(FL_BACKGROUND_COLOR);
- phaserp6->selection_color(FL_INACTIVE_COLOR);
- phaserp6->labeltype(FL_NORMAL_LABEL);
- phaserp6->labelfont(1);
- phaserp6->labelsize(10);
- phaserp6->labelcolor(FL_FOREGROUND_COLOR);
- phaserp6->maximum(127);
- phaserp6->callback((Fl_Callback*)cb_phaserp6);
- phaserp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp6
- { phaserp7 = new WidgetPDial(185, 45, 25, 25, "Fb");
- phaserp7->tooltip("Feedback");
- phaserp7->box(FL_ROUND_UP_BOX);
- phaserp7->color(FL_BACKGROUND_COLOR);
- phaserp7->selection_color(FL_INACTIVE_COLOR);
- phaserp7->labeltype(FL_NORMAL_LABEL);
- phaserp7->labelfont(1);
- phaserp7->labelsize(11);
- phaserp7->labelcolor(FL_FOREGROUND_COLOR);
- phaserp7->maximum(127);
- phaserp7->callback((Fl_Callback*)cb_phaserp7);
- phaserp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp7
- { Fl_Counter* o = phaserp8 = new Fl_Counter(290, 55, 35, 15, "Stages");
- phaserp8->type(1);
- phaserp8->labelfont(1);
- phaserp8->labelsize(11);
- phaserp8->minimum(0);
- phaserp8->maximum(127);
- phaserp8->step(1);
- phaserp8->callback((Fl_Callback*)cb_phaserp8);
- o->range(1,MAX_PHASER_STAGES);
- } // Fl_Counter* phaserp8
- { phaserp9 = new WidgetPDial(215, 45, 25, 25, "L/R");
- phaserp9->tooltip("Channel Routing");
- phaserp9->box(FL_ROUND_UP_BOX);
- phaserp9->color(FL_BACKGROUND_COLOR);
- phaserp9->selection_color(FL_INACTIVE_COLOR);
- phaserp9->labeltype(FL_NORMAL_LABEL);
- phaserp9->labelfont(1);
- phaserp9->labelsize(11);
- phaserp9->labelcolor(FL_FOREGROUND_COLOR);
- phaserp9->maximum(127);
- phaserp9->callback((Fl_Callback*)cb_phaserp9);
- phaserp9->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp9->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp9
- { phaserp10 = new Fl_Check_Button(200, 10, 74, 20, "Substract");
- phaserp10->tooltip("inverts output");
- phaserp10->box(FL_THIN_UP_BOX);
- phaserp10->down_box(FL_DOWN_BOX);
- phaserp10->color((Fl_Color)230);
- phaserp10->labelfont(1);
- phaserp10->labelsize(10);
- phaserp10->callback((Fl_Callback*)cb_phaserp10);
- } // Fl_Check_Button* phaserp10
- { phaserp11 = new WidgetPDial(155, 5, 25, 25, "Phase");
- phaserp11->box(FL_ROUND_UP_BOX);
- phaserp11->color(FL_BACKGROUND_COLOR);
- phaserp11->selection_color(FL_INACTIVE_COLOR);
- phaserp11->labeltype(FL_NORMAL_LABEL);
- phaserp11->labelfont(1);
- phaserp11->labelsize(10);
- phaserp11->labelcolor(FL_FOREGROUND_COLOR);
- phaserp11->maximum(127);
- phaserp11->callback((Fl_Callback*)cb_phaserp11);
- phaserp11->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp11->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp11
- { phaserp12 = new Fl_Check_Button(245, 35, 55, 15, "hyp.");
- phaserp12->tooltip("hyper");
- phaserp12->down_box(FL_DOWN_BOX);
- phaserp12->callback((Fl_Callback*)cb_phaserp12);
- } // Fl_Check_Button* phaserp12
- { phaserp13 = new WidgetPDial(340, 50, 25, 25, "dist");
- phaserp13->tooltip("Distortion");
- phaserp13->box(FL_ROUND_UP_BOX);
- phaserp13->color(FL_BACKGROUND_COLOR);
- phaserp13->selection_color(FL_INACTIVE_COLOR);
- phaserp13->labeltype(FL_NORMAL_LABEL);
- phaserp13->labelfont(1);
- phaserp13->labelsize(11);
- phaserp13->labelcolor(FL_FOREGROUND_COLOR);
- phaserp13->maximum(127);
- phaserp13->callback((Fl_Callback*)cb_phaserp13);
- phaserp13->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp13->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp13
- { phaserp14 = new Fl_Check_Button(305, 35, 70, 15, "Analog");
- phaserp14->down_box(FL_DOWN_BOX);
- phaserp14->callback((Fl_Callback*)cb_phaserp14);
- } // Fl_Check_Button* phaserp14
- effphaserwindow->end();
- } // Fl_Group* effphaserwindow
- return effphaserwindow;
-}
-
-Fl_Group* EffUI::make_alienwah_window() {
- { effalienwahwindow = new Fl_Group(0, 0, 380, 95);
- effalienwahwindow->box(FL_PLASTIC_UP_BOX);
- effalienwahwindow->color((Fl_Color)221);
- effalienwahwindow->selection_color(FL_BACKGROUND_COLOR);
- effalienwahwindow->labeltype(FL_NO_LABEL);
- effalienwahwindow->labelfont(1);
- effalienwahwindow->labelsize(14);
- effalienwahwindow->labelcolor(FL_FOREGROUND_COLOR);
- effalienwahwindow->user_data((void*)(this));
- effalienwahwindow->align(Fl_Align(FL_ALIGN_TOP));
- effalienwahwindow->when(FL_WHEN_RELEASE);
- { awp = new Fl_Choice(10, 15, 90, 15, "Preset");
- awp->down_box(FL_BORDER_BOX);
- awp->color((Fl_Color)14);
- awp->selection_color(FL_FOREGROUND_COLOR);
- awp->labelfont(1);
- awp->labelsize(10);
- awp->textfont(1);
- awp->textsize(10);
- awp->textcolor(FL_BACKGROUND2_COLOR);
- awp->callback((Fl_Callback*)cb_awp);
- awp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- awp->menu(menu_awp);
- } // Fl_Choice* awp
- { Fl_Text_Display* o = new Fl_Text_Display(245, 10, 10, 20, "AlienWah");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { awp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- awp0->tooltip("Effect Volume");
- awp0->box(FL_ROUND_UP_BOX);
- awp0->color(FL_BACKGROUND_COLOR);
- awp0->selection_color(FL_INACTIVE_COLOR);
- awp0->labeltype(FL_NORMAL_LABEL);
- awp0->labelfont(1);
- awp0->labelsize(11);
- awp0->labelcolor(FL_FOREGROUND_COLOR);
- awp0->maximum(127);
- awp0->callback((Fl_Callback*)cb_awp0);
- awp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp0
- { awp1 = new WidgetPDial(45, 40, 30, 30, "Pan");
- awp1->box(FL_ROUND_UP_BOX);
- awp1->color(FL_BACKGROUND_COLOR);
- awp1->selection_color(FL_INACTIVE_COLOR);
- awp1->labeltype(FL_NORMAL_LABEL);
- awp1->labelfont(1);
- awp1->labelsize(11);
- awp1->labelcolor(FL_FOREGROUND_COLOR);
- awp1->maximum(127);
- awp1->callback((Fl_Callback*)cb_awp1);
- awp1->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp1
- { awp2 = new WidgetPDial(85, 40, 30, 30, "Freq");
- awp2->tooltip("LFO Frequency");
- awp2->box(FL_ROUND_UP_BOX);
- awp2->color(FL_BACKGROUND_COLOR);
- awp2->selection_color(FL_INACTIVE_COLOR);
- awp2->labeltype(FL_NORMAL_LABEL);
- awp2->labelfont(1);
- awp2->labelsize(11);
- awp2->labelcolor(FL_FOREGROUND_COLOR);
- awp2->maximum(127);
- awp2->callback((Fl_Callback*)cb_awp2);
- awp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp2
- { awp3 = new WidgetPDial(120, 40, 30, 30, "Rnd");
- awp3->tooltip("LFO Randomness");
- awp3->box(FL_ROUND_UP_BOX);
- awp3->color(FL_BACKGROUND_COLOR);
- awp3->selection_color(FL_INACTIVE_COLOR);
- awp3->labeltype(FL_NORMAL_LABEL);
- awp3->labelfont(1);
- awp3->labelsize(11);
- awp3->labelcolor(FL_FOREGROUND_COLOR);
- awp3->maximum(127);
- awp3->callback((Fl_Callback*)cb_awp3);
- awp3->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* awp3
- { awp5 = new WidgetPDial(200, 40, 30, 30, "St.df");
- awp5->tooltip("Left/Right Channel Phase Shift");
- awp5->box(FL_ROUND_UP_BOX);
- awp5->color(FL_BACKGROUND_COLOR);
- awp5->selection_color(FL_INACTIVE_COLOR);
- awp5->labeltype(FL_NORMAL_LABEL);
- awp5->labelfont(1);
- awp5->labelsize(11);
- awp5->labelcolor(FL_FOREGROUND_COLOR);
- awp5->maximum(127);
- awp5->callback((Fl_Callback*)cb_awp5);
- awp5->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp5->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp5
- { awp6 = new WidgetPDial(235, 40, 30, 30, "Dpth");
- awp6->tooltip("Depth");
- awp6->box(FL_ROUND_UP_BOX);
- awp6->color(FL_BACKGROUND_COLOR);
- awp6->selection_color(FL_INACTIVE_COLOR);
- awp6->labeltype(FL_NORMAL_LABEL);
- awp6->labelfont(1);
- awp6->labelsize(11);
- awp6->labelcolor(FL_FOREGROUND_COLOR);
- awp6->maximum(127);
- awp6->callback((Fl_Callback*)cb_awp6);
- awp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp6
- { awp7 = new WidgetPDial(270, 40, 30, 30, "Fb");
- awp7->tooltip("Feedback");
- awp7->box(FL_ROUND_UP_BOX);
- awp7->color(FL_BACKGROUND_COLOR);
- awp7->selection_color(FL_INACTIVE_COLOR);
- awp7->labeltype(FL_NORMAL_LABEL);
- awp7->labelfont(1);
- awp7->labelsize(11);
- awp7->labelcolor(FL_FOREGROUND_COLOR);
- awp7->maximum(127);
- awp7->callback((Fl_Callback*)cb_awp7);
- awp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp7
- { awp9 = new WidgetPDial(345, 40, 30, 30, "L/R");
- awp9->box(FL_ROUND_UP_BOX);
- awp9->color(FL_BACKGROUND_COLOR);
- awp9->selection_color(FL_INACTIVE_COLOR);
- awp9->labeltype(FL_NORMAL_LABEL);
- awp9->labelfont(1);
- awp9->labelsize(11);
- awp9->labelcolor(FL_FOREGROUND_COLOR);
- awp9->maximum(127);
- awp9->callback((Fl_Callback*)cb_awp9);
- awp9->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp9->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp9
- { awp4 = new Fl_Choice(155, 50, 40, 15, "LFO type");
- awp4->tooltip("LFO function");
- awp4->down_box(FL_BORDER_BOX);
- awp4->labelfont(1);
- awp4->labelsize(10);
- awp4->textsize(8);
- awp4->callback((Fl_Callback*)cb_awp4);
- awp4->align(Fl_Align(130));
- awp4->menu(menu_awp4);
- } // Fl_Choice* awp4
- { awp10 = new WidgetPDial(160, 5, 30, 30, "Phase");
- awp10->box(FL_ROUND_UP_BOX);
- awp10->color(FL_BACKGROUND_COLOR);
- awp10->selection_color(FL_INACTIVE_COLOR);
- awp10->labeltype(FL_NORMAL_LABEL);
- awp10->labelfont(1);
- awp10->labelsize(11);
- awp10->labelcolor(FL_FOREGROUND_COLOR);
- awp10->maximum(127);
- awp10->callback((Fl_Callback*)cb_awp10);
- awp10->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp10->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp10
- { Fl_Counter* o = awp8 = new Fl_Counter(305, 55, 35, 15, "Delay");
- awp8->type(1);
- awp8->labelfont(1);
- awp8->labelsize(11);
- awp8->minimum(0);
- awp8->maximum(127);
- awp8->step(1);
- awp8->callback((Fl_Callback*)cb_awp8);
- o->range(1,MAX_ALIENWAH_DELAY);
- } // Fl_Counter* awp8
- effalienwahwindow->end();
- } // Fl_Group* effalienwahwindow
- return effalienwahwindow;
-}
-
-Fl_Group* EffUI::make_distorsion_window() {
- { effdistorsionwindow = new Fl_Group(0, 0, 380, 95);
- effdistorsionwindow->box(FL_PLASTIC_UP_BOX);
- effdistorsionwindow->color((Fl_Color)221);
- effdistorsionwindow->selection_color(FL_BACKGROUND_COLOR);
- effdistorsionwindow->labeltype(FL_NO_LABEL);
- effdistorsionwindow->labelfont(1);
- effdistorsionwindow->labelsize(14);
- effdistorsionwindow->labelcolor(FL_FOREGROUND_COLOR);
- effdistorsionwindow->user_data((void*)(this));
- effdistorsionwindow->align(Fl_Align(FL_ALIGN_TOP));
- effdistorsionwindow->when(FL_WHEN_RELEASE);
- { distp = new Fl_Choice(11, 15, 95, 15, "Preset");
- distp->down_box(FL_BORDER_BOX);
- distp->color((Fl_Color)14);
- distp->selection_color(FL_FOREGROUND_COLOR);
- distp->labelfont(1);
- distp->labelsize(10);
- distp->textfont(1);
- distp->textsize(10);
- distp->textcolor(FL_BACKGROUND2_COLOR);
- distp->callback((Fl_Callback*)cb_distp);
- distp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- distp->menu(menu_distp);
- } // Fl_Choice* distp
- { Fl_Text_Display* o = new Fl_Text_Display(230, 10, 10, 20, "Distortion");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { distp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- distp0->tooltip("Effect Volume");
- distp0->box(FL_ROUND_UP_BOX);
- distp0->color(FL_BACKGROUND_COLOR);
- distp0->selection_color(FL_INACTIVE_COLOR);
- distp0->labeltype(FL_NORMAL_LABEL);
- distp0->labelfont(1);
- distp0->labelsize(11);
- distp0->labelcolor(FL_FOREGROUND_COLOR);
- distp0->maximum(127);
- distp0->callback((Fl_Callback*)cb_distp0);
- distp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* distp0
- { distp1 = new WidgetPDial(45, 40, 30, 30, "Pan");
- distp1->box(FL_ROUND_UP_BOX);
- distp1->color(FL_BACKGROUND_COLOR);
- distp1->selection_color(FL_INACTIVE_COLOR);
- distp1->labeltype(FL_NORMAL_LABEL);
- distp1->labelfont(1);
- distp1->labelsize(11);
- distp1->labelcolor(FL_FOREGROUND_COLOR);
- distp1->maximum(127);
- distp1->callback((Fl_Callback*)cb_distp1);
- distp1->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* distp1
- { distp2 = new WidgetPDial(80, 40, 30, 30, "LRc.");
- distp2->tooltip("L/R Mix");
- distp2->box(FL_ROUND_UP_BOX);
- distp2->color(FL_BACKGROUND_COLOR);
- distp2->selection_color(FL_INACTIVE_COLOR);
- distp2->labeltype(FL_NORMAL_LABEL);
- distp2->labelfont(1);
- distp2->labelsize(11);
- distp2->labelcolor(FL_FOREGROUND_COLOR);
- distp2->maximum(127);
- distp2->callback((Fl_Callback*)cb_distp2);
- distp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp2->when(FL_WHEN_RELEASE);
- } // WidgetPDial* distp2
- { distp3 = new WidgetPDial(120, 40, 30, 30, "Drive");
- distp3->tooltip("Input Amplification");
- distp3->box(FL_ROUND_UP_BOX);
- distp3->color(FL_BACKGROUND_COLOR);
- distp3->selection_color(FL_INACTIVE_COLOR);
- distp3->labeltype(FL_NORMAL_LABEL);
- distp3->labelfont(1);
- distp3->labelsize(11);
- distp3->labelcolor(FL_FOREGROUND_COLOR);
- distp3->maximum(127);
- distp3->callback((Fl_Callback*)cb_distp3);
- distp3->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* distp3
- { distp4 = new WidgetPDial(155, 40, 30, 30, "Level");
- distp4->tooltip("Output Amplification");
- distp4->box(FL_ROUND_UP_BOX);
- distp4->color(FL_BACKGROUND_COLOR);
- distp4->selection_color(FL_INACTIVE_COLOR);
- distp4->labeltype(FL_NORMAL_LABEL);
- distp4->labelfont(1);
- distp4->labelsize(11);
- distp4->labelcolor(FL_FOREGROUND_COLOR);
- distp4->maximum(127);
- distp4->callback((Fl_Callback*)cb_distp4);
- distp4->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp4->when(FL_WHEN_CHANGED);
- } // WidgetPDial* distp4
- { distp7 = new WidgetPDial(285, 40, 30, 30, "LPF");
- distp7->tooltip("Low Pass Filter");
- distp7->box(FL_ROUND_UP_BOX);
- distp7->color(FL_BACKGROUND_COLOR);
- distp7->selection_color(FL_INACTIVE_COLOR);
- distp7->labeltype(FL_NORMAL_LABEL);
- distp7->labelfont(1);
- distp7->labelsize(11);
- distp7->labelcolor(FL_FOREGROUND_COLOR);
- distp7->maximum(127);
- distp7->callback((Fl_Callback*)cb_distp7);
- distp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* distp7
- { distp8 = new WidgetPDial(320, 40, 30, 30, "HPF");
- distp8->tooltip("High Pass Filter");
- distp8->box(FL_ROUND_UP_BOX);
- distp8->color(FL_BACKGROUND_COLOR);
- distp8->selection_color(FL_INACTIVE_COLOR);
- distp8->labeltype(FL_NORMAL_LABEL);
- distp8->labelfont(1);
- distp8->labelsize(11);
- distp8->labelcolor(FL_FOREGROUND_COLOR);
- distp8->maximum(127);
- distp8->callback((Fl_Callback*)cb_distp8);
- distp8->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp8->when(FL_WHEN_CHANGED);
- } // WidgetPDial* distp8
- { distp5 = new Fl_Choice(190, 50, 60, 20, "Type");
- distp5->box(FL_UP_BOX);
- distp5->down_box(FL_BORDER_BOX);
- distp5->labelfont(1);
- distp5->labelsize(11);
- distp5->textsize(10);
- distp5->callback((Fl_Callback*)cb_distp5);
- distp5->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp5->menu(menu_distp5);
- } // Fl_Choice* distp5
- { distp6 = new Fl_Check_Button(260, 55, 15, 15, "Neg.");
- distp6->down_box(FL_DOWN_BOX);
- distp6->labelfont(1);
- distp6->labelsize(11);
- distp6->callback((Fl_Callback*)cb_distp6);
- distp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- } // Fl_Check_Button* distp6
- { distp9 = new Fl_Check_Button(355, 60, 15, 15, "St.");
- distp9->tooltip("Stereo");
- distp9->down_box(FL_DOWN_BOX);
- distp9->labelfont(1);
- distp9->labelsize(11);
- distp9->callback((Fl_Callback*)cb_distp9);
- distp9->align(Fl_Align(FL_ALIGN_BOTTOM));
- } // Fl_Check_Button* distp9
- { distp10 = new Fl_Check_Button(355, 44, 15, 15, "PF");
- distp10->tooltip("Applies the filters(before or after) the distorsion");
- distp10->down_box(FL_DOWN_BOX);
- distp10->labelfont(1);
- distp10->labelsize(11);
- distp10->callback((Fl_Callback*)cb_distp10);
- distp10->align(Fl_Align(FL_ALIGN_TOP));
- } // Fl_Check_Button* distp10
- effdistorsionwindow->end();
- } // Fl_Group* effdistorsionwindow
- return effdistorsionwindow;
-}
-
-Fl_Group* EffUI::make_eq_window() {
- { effeqwindow = new Fl_Group(0, 0, 380, 95);
- effeqwindow->box(FL_PLASTIC_UP_BOX);
- effeqwindow->color((Fl_Color)221);
- effeqwindow->selection_color(FL_BACKGROUND_COLOR);
- effeqwindow->labeltype(FL_NO_LABEL);
- effeqwindow->labelfont(1);
- effeqwindow->labelsize(14);
- effeqwindow->labelcolor(FL_FOREGROUND_COLOR);
- effeqwindow->user_data((void*)(this));
- effeqwindow->align(Fl_Align(FL_ALIGN_TOP));
- effeqwindow->when(FL_WHEN_RELEASE);
- { Fl_Text_Display* o = new Fl_Text_Display(320, 10, 15, 20, "EQ");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { eqp0 = new WidgetPDial(10, 35, 30, 30, "Gain");
- eqp0->box(FL_ROUND_UP_BOX);
- eqp0->color(FL_BACKGROUND_COLOR);
- eqp0->selection_color(FL_INACTIVE_COLOR);
- eqp0->labeltype(FL_NORMAL_LABEL);
- eqp0->labelfont(1);
- eqp0->labelsize(11);
- eqp0->labelcolor(FL_FOREGROUND_COLOR);
- eqp0->maximum(127);
- eqp0->callback((Fl_Callback*)cb_eqp0);
- eqp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- eqp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* eqp0
- { Fl_Counter* o = bandcounter = new Fl_Counter(240, 20, 45, 15, "B.");
- bandcounter->tooltip("Band no.");
- bandcounter->type(1);
- bandcounter->labelfont(1);
- bandcounter->labelsize(11);
- bandcounter->minimum(0);
- bandcounter->maximum(1);
- bandcounter->step(1);
- bandcounter->textfont(1);
- bandcounter->textsize(11);
- bandcounter->callback((Fl_Callback*)cb_bandcounter);
- bandcounter->align(Fl_Align(FL_ALIGN_TOP));
- o->bounds(0,MAX_EQ_BANDS-1);
- } // Fl_Counter* bandcounter
- { Fl_Group* o = bandgroup = new Fl_Group(245, 40, 130, 50);
- bandgroup->box(FL_ENGRAVED_FRAME);
- { freqdial = new WidgetPDial(250, 50, 25, 25, "Freq");
- freqdial->box(FL_ROUND_UP_BOX);
- freqdial->color(FL_BACKGROUND_COLOR);
- freqdial->selection_color(FL_INACTIVE_COLOR);
- freqdial->labeltype(FL_NORMAL_LABEL);
- freqdial->labelfont(1);
- freqdial->labelsize(10);
- freqdial->labelcolor(FL_FOREGROUND_COLOR);
- freqdial->maximum(127);
- freqdial->callback((Fl_Callback*)cb_freqdial);
- freqdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- freqdial->when(3);
- } // WidgetPDial* freqdial
- { gaindial = new WidgetPDial(280, 50, 25, 25, "Gain");
- gaindial->box(FL_ROUND_UP_BOX);
- gaindial->color(FL_BACKGROUND_COLOR);
- gaindial->selection_color(FL_INACTIVE_COLOR);
- gaindial->labeltype(FL_NORMAL_LABEL);
- gaindial->labelfont(1);
- gaindial->labelsize(10);
- gaindial->labelcolor(FL_FOREGROUND_COLOR);
- gaindial->maximum(127);
- gaindial->step(1);
- gaindial->callback((Fl_Callback*)cb_gaindial);
- gaindial->align(Fl_Align(FL_ALIGN_BOTTOM));
- gaindial->when(3);
- } // WidgetPDial* gaindial
- { qdial = new WidgetPDial(310, 50, 25, 25, "Q");
- qdial->tooltip("Resonance/Bandwidth");
- qdial->box(FL_ROUND_UP_BOX);
- qdial->color(FL_BACKGROUND_COLOR);
- qdial->selection_color(FL_INACTIVE_COLOR);
- qdial->labeltype(FL_NORMAL_LABEL);
- qdial->labelfont(1);
- qdial->labelsize(10);
- qdial->labelcolor(FL_FOREGROUND_COLOR);
- qdial->maximum(127);
- qdial->callback((Fl_Callback*)cb_qdial);
- qdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- qdial->when(3);
- } // WidgetPDial* qdial
- { Fl_Counter* o = stagescounter = new Fl_Counter(340, 60, 30, 15, "St.");
- stagescounter->tooltip("Additional filter stages");
- stagescounter->type(1);
- stagescounter->labelfont(1);
- stagescounter->labelsize(10);
- stagescounter->minimum(1);
- stagescounter->maximum(127);
- stagescounter->step(1);
- stagescounter->textfont(1);
- stagescounter->textsize(11);
- stagescounter->callback((Fl_Callback*)cb_stagescounter);
- o->bounds(0,MAX_FILTER_STAGES-1);
- } // Fl_Counter* stagescounter
- if (eff->geteffectpar(10)==0) o->deactivate();
- bandgroup->end();
- } // Fl_Group* bandgroup
- { typechoice = new Fl_Choice(290, 20, 40, 15, "T.");
- typechoice->tooltip("Type");
- typechoice->down_box(FL_BORDER_BOX);
- typechoice->labelfont(1);
- typechoice->labelsize(10);
- typechoice->textsize(10);
- typechoice->callback((Fl_Callback*)cb_typechoice);
- typechoice->align(Fl_Align(FL_ALIGN_TOP));
- typechoice->when(FL_WHEN_RELEASE_ALWAYS);
- typechoice->menu(menu_typechoice);
- } // Fl_Choice* typechoice
- { EQGraph* o = eqgraph = new EQGraph(45, 10, 190, 75);
- eqgraph->box(FL_BORDER_BOX);
- eqgraph->color((Fl_Color)178);
- eqgraph->selection_color(FL_BACKGROUND_COLOR);
- eqgraph->labeltype(FL_NORMAL_LABEL);
- eqgraph->labelfont(0);
- eqgraph->labelsize(14);
- eqgraph->labelcolor(FL_FOREGROUND_COLOR);
- eqgraph->align(Fl_Align(FL_ALIGN_CENTER));
- eqgraph->when(FL_WHEN_RELEASE);
- o->init(eff);
- } // EQGraph* eqgraph
- effeqwindow->end();
- } // Fl_Group* effeqwindow
- return effeqwindow;
-}
-
-Fl_Group* EffUI::make_dynamicfilter_window() {
- { effdynamicfilterwindow = new Fl_Group(0, 0, 380, 95);
- effdynamicfilterwindow->box(FL_PLASTIC_UP_BOX);
- effdynamicfilterwindow->color((Fl_Color)221);
- effdynamicfilterwindow->selection_color(FL_BACKGROUND_COLOR);
- effdynamicfilterwindow->labeltype(FL_NO_LABEL);
- effdynamicfilterwindow->labelfont(1);
- effdynamicfilterwindow->labelsize(14);
- effdynamicfilterwindow->labelcolor(FL_FOREGROUND_COLOR);
- effdynamicfilterwindow->user_data((void*)(this));
- effdynamicfilterwindow->align(Fl_Align(FL_ALIGN_TOP));
- effdynamicfilterwindow->when(FL_WHEN_RELEASE);
- { dfp = new Fl_Choice(10, 15, 90, 15, "Preset");
- dfp->down_box(FL_BORDER_BOX);
- dfp->color((Fl_Color)14);
- dfp->selection_color(FL_FOREGROUND_COLOR);
- dfp->labelfont(1);
- dfp->labelsize(10);
- dfp->textfont(1);
- dfp->textsize(10);
- dfp->textcolor(FL_BACKGROUND2_COLOR);
- dfp->callback((Fl_Callback*)cb_dfp);
- dfp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- dfp->menu(menu_dfp);
- } // Fl_Choice* dfp
- { Fl_Text_Display* o = new Fl_Text_Display(245, 10, 10, 20, "DynFilter");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { dfp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- dfp0->tooltip("Effect Volume");
- dfp0->box(FL_ROUND_UP_BOX);
- dfp0->color(FL_BACKGROUND_COLOR);
- dfp0->selection_color(FL_INACTIVE_COLOR);
- dfp0->labeltype(FL_NORMAL_LABEL);
- dfp0->labelfont(1);
- dfp0->labelsize(11);
- dfp0->labelcolor(FL_FOREGROUND_COLOR);
- dfp0->maximum(127);
- dfp0->callback((Fl_Callback*)cb_dfp0);
- dfp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp0
- { dfp1 = new WidgetPDial(45, 40, 30, 30, "Pan");
- dfp1->box(FL_ROUND_UP_BOX);
- dfp1->color(FL_BACKGROUND_COLOR);
- dfp1->selection_color(FL_INACTIVE_COLOR);
- dfp1->labeltype(FL_NORMAL_LABEL);
- dfp1->labelfont(1);
- dfp1->labelsize(11);
- dfp1->labelcolor(FL_FOREGROUND_COLOR);
- dfp1->maximum(127);
- dfp1->callback((Fl_Callback*)cb_dfp1);
- dfp1->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp1
- { dfp2 = new WidgetPDial(85, 40, 30, 30, "Freq");
- dfp2->tooltip("LFO Frequency");
- dfp2->box(FL_ROUND_UP_BOX);
- dfp2->color(FL_BACKGROUND_COLOR);
- dfp2->selection_color(FL_INACTIVE_COLOR);
- dfp2->labeltype(FL_NORMAL_LABEL);
- dfp2->labelfont(1);
- dfp2->labelsize(11);
- dfp2->labelcolor(FL_FOREGROUND_COLOR);
- dfp2->maximum(127);
- dfp2->callback((Fl_Callback*)cb_dfp2);
- dfp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp2
- { dfp3 = new WidgetPDial(120, 40, 30, 30, "Rnd");
- dfp3->tooltip("LFO Randomness");
- dfp3->box(FL_ROUND_UP_BOX);
- dfp3->color(FL_BACKGROUND_COLOR);
- dfp3->selection_color(FL_INACTIVE_COLOR);
- dfp3->labeltype(FL_NORMAL_LABEL);
- dfp3->labelfont(1);
- dfp3->labelsize(11);
- dfp3->labelcolor(FL_FOREGROUND_COLOR);
- dfp3->maximum(127);
- dfp3->callback((Fl_Callback*)cb_dfp3);
- dfp3->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* dfp3
- { dfp5 = new WidgetPDial(200, 40, 30, 30, "St.df");
- dfp5->tooltip("Left/Right Channel Phase Shift");
- dfp5->box(FL_ROUND_UP_BOX);
- dfp5->color(FL_BACKGROUND_COLOR);
- dfp5->selection_color(FL_INACTIVE_COLOR);
- dfp5->labeltype(FL_NORMAL_LABEL);
- dfp5->labelfont(1);
- dfp5->labelsize(11);
- dfp5->labelcolor(FL_FOREGROUND_COLOR);
- dfp5->maximum(127);
- dfp5->callback((Fl_Callback*)cb_dfp5);
- dfp5->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp5->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp5
- { dfp6 = new WidgetPDial(235, 40, 30, 30, "LfoD");
- dfp6->tooltip("LFO Depth");
- dfp6->box(FL_ROUND_UP_BOX);
- dfp6->color(FL_BACKGROUND_COLOR);
- dfp6->selection_color(FL_INACTIVE_COLOR);
- dfp6->labeltype(FL_NORMAL_LABEL);
- dfp6->labelfont(1);
- dfp6->labelsize(11);
- dfp6->labelcolor(FL_FOREGROUND_COLOR);
- dfp6->maximum(127);
- dfp6->callback((Fl_Callback*)cb_dfp6);
- dfp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp6
- { dfp4 = new Fl_Choice(155, 50, 40, 15, "LFO type");
- dfp4->tooltip("LFO function");
- dfp4->down_box(FL_BORDER_BOX);
- dfp4->labelfont(1);
- dfp4->labelsize(10);
- dfp4->textsize(8);
- dfp4->callback((Fl_Callback*)cb_dfp4);
- dfp4->align(Fl_Align(130));
- dfp4->menu(menu_dfp4);
- } // Fl_Choice* dfp4
- { Fl_Button* o = new Fl_Button(115, 10, 55, 25, "Filter");
- o->box(FL_PLASTIC_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Filter);
- } // Fl_Button* o
- { Fl_Group* o = new Fl_Group(270, 40, 105, 45);
- o->box(FL_BORDER_BOX);
- o->color((Fl_Color)181);
- { dfp7 = new WidgetPDial(275, 45, 25, 25, "A.S.");
- dfp7->tooltip("Filter vs Amplitude");
- dfp7->box(FL_ROUND_UP_BOX);
- dfp7->color(FL_BACKGROUND_COLOR);
- dfp7->selection_color(FL_INACTIVE_COLOR);
- dfp7->labeltype(FL_NORMAL_LABEL);
- dfp7->labelfont(1);
- dfp7->labelsize(11);
- dfp7->labelcolor(FL_FOREGROUND_COLOR);
- dfp7->maximum(127);
- dfp7->callback((Fl_Callback*)cb_dfp7);
- dfp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp7
- { dfp9 = new WidgetPDial(305, 45, 25, 25, "A.M");
- dfp9->tooltip("rate that amplitude changes the filter");
- dfp9->box(FL_ROUND_UP_BOX);
- dfp9->color(FL_BACKGROUND_COLOR);
- dfp9->selection_color(FL_INACTIVE_COLOR);
- dfp9->labeltype(FL_NORMAL_LABEL);
- dfp9->labelfont(1);
- dfp9->labelsize(11);
- dfp9->labelcolor(FL_FOREGROUND_COLOR);
- dfp9->maximum(127);
- dfp9->callback((Fl_Callback*)cb_dfp9);
- dfp9->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp9->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp9
- { dfp8 = new Fl_Check_Button(345, 55, 15, 15, "A.Inv.");
- dfp8->tooltip("enable for filter frequency to lower with higher input amplitude");
- dfp8->down_box(FL_DOWN_BOX);
- dfp8->labelfont(1);
- dfp8->labelsize(11);
- dfp8->callback((Fl_Callback*)cb_dfp8);
- dfp8->align(Fl_Align(FL_ALIGN_BOTTOM));
- } // Fl_Check_Button* dfp8
- o->end();
- } // Fl_Group* o
- effdynamicfilterwindow->end();
- } // Fl_Group* effdynamicfilterwindow
- return effdynamicfilterwindow;
-}
-
-Fl_Double_Window* EffUI::make_filter_window() {
- { filterwindow = new Fl_Double_Window(290, 110, "Filter Parameters for DynFilter Eff.");
- filterwindow->user_data((void*)(this));
- { FilterUI* o = new FilterUI(5, 5, 275, 75, "DynFilter effect - Filter");
- o->box(FL_FLAT_BOX);
- o->color(FL_LIGHT1);
- o->selection_color(FL_BACKGROUND_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(14);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- o->when(FL_WHEN_RELEASE);
- o->init(eff->filterpars,NULL,NULL);
- o->use_for_dynamic_filter();
- o->end();
- } // FilterUI* o
- { Fl_Button* o = new Fl_Button(105, 85, 70, 20, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- filterwindow->end();
- } // Fl_Double_Window* filterwindow
- return filterwindow;
-}
-
-void EffUI::init(EffectMgr *eff_) {
- eff=eff_;
-
- make_null_window();
- make_reverb_window();
- make_echo_window();
- make_chorus_window();
- make_phaser_window();
- make_alienwah_window();
- make_distorsion_window();
- make_eq_window();
- make_dynamicfilter_window();
-
- int px=this->parent()->x();
- int py=this->parent()->y();
-
- effnullwindow->position(px,py);
- effreverbwindow->position(px,py);
- effechowindow->position(px,py);
- effchoruswindow->position(px,py);
- effphaserwindow->position(px,py);
- effalienwahwindow->position(px,py);
- effdistorsionwindow->position(px,py);
- effeqwindow->position(px,py);
- effdynamicfilterwindow->position(px,py);
-
- refresh(eff);
-}
-
-void EffUI::refresh(EffectMgr *eff_) {
- eff=eff_;
- this->hide();
-
- effnullwindow->hide();
- effreverbwindow->hide();
- effechowindow->hide();
- effchoruswindow->hide();
- effphaserwindow->hide();
- effalienwahwindow->hide();
- effdistorsionwindow->hide();
- effeqwindow->hide();
- effdynamicfilterwindow->hide();
-
- eqband=0;
-
- if (filterwindow!=NULL){
- filterwindow->hide();
- delete(filterwindow);
- filterwindow=NULL;
- };
-
- switch(eff->geteffect()){
- case 1:
- revp->value(eff->getpreset());
- revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
- revp1->value(eff->geteffectpar(1));
- revp2->value(eff->geteffectpar(2));
- revp3->value(eff->geteffectpar(3));
- revp4->value(eff->geteffectpar(4));
- //revp5->value(eff->geteffectpar(5));
- revp6->value(eff->geteffectpar(6));
- revp7->value(eff->geteffectpar(7));
- revp8->value(eff->geteffectpar(8));
- revp9->value(eff->geteffectpar(9));
- revp10->value(eff->geteffectpar(10));
- revp11->value(eff->geteffectpar(11));
- revp12->value(eff->geteffectpar(12));
-
- effreverbwindow->show();
- break;
- case 2:
- echop->value(eff->getpreset());
- echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
- echop1->value(eff->geteffectpar(1));
- echop2->value(eff->geteffectpar(2));
- echop3->value(eff->geteffectpar(3));
- echop4->value(eff->geteffectpar(4));
- echop5->value(eff->geteffectpar(5));
- echop6->value(eff->geteffectpar(6));
- effechowindow->show();
- break;
- case 3:
- chorusp->value(eff->getpreset());
- chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
- chorusp1->value(eff->geteffectpar(1));
- chorusp2->value(eff->geteffectpar(2));
- chorusp3->value(eff->geteffectpar(3));
- chorusp4->value(eff->geteffectpar(4));
- chorusp5->value(eff->geteffectpar(5));
- chorusp6->value(eff->geteffectpar(6));
- chorusp7->value(eff->geteffectpar(7));
- chorusp8->value(eff->geteffectpar(8));
- chorusp9->value(eff->geteffectpar(9));
- chorusp11->value(eff->geteffectpar(11));
- effchoruswindow->show();
- break;
- case 4:
- phaserp->value(eff->getpreset());
- phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
- phaserp1->value(eff->geteffectpar(1));
- phaserp2->value(eff->geteffectpar(2));
- phaserp3->value(eff->geteffectpar(3));
- phaserp4->value(eff->geteffectpar(4));
- phaserp5->value(eff->geteffectpar(5));
- phaserp6->value(eff->geteffectpar(6));
- phaserp7->value(eff->geteffectpar(7));
- phaserp8->value(eff->geteffectpar(8));
- phaserp9->value(eff->geteffectpar(9));
- phaserp10->value(eff->geteffectpar(10));
- phaserp11->value(eff->geteffectpar(11));
- phaserp12->value(eff->geteffectpar(12));
- phaserp13->value(eff->geteffectpar(13));
- phaserp14->value(eff->geteffectpar(14));
- effphaserwindow->show();
- break;
- case 5:
- awp->value(eff->getpreset());
- awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
- awp1->value(eff->geteffectpar(1));
- awp2->value(eff->geteffectpar(2));
- awp3->value(eff->geteffectpar(3));
- awp4->value(eff->geteffectpar(4));
- awp5->value(eff->geteffectpar(5));
- awp6->value(eff->geteffectpar(6));
- awp7->value(eff->geteffectpar(7));
- awp8->value(eff->geteffectpar(8));
- awp9->value(eff->geteffectpar(9));
- awp10->value(eff->geteffectpar(10));
-
- effalienwahwindow->show();
- break;
- case 6:
- distp->value(eff->getpreset());
- distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
- distp1->value(eff->geteffectpar(1));
- distp2->value(eff->geteffectpar(2));
- distp3->value(eff->geteffectpar(3));
- distp4->value(eff->geteffectpar(4));
- distp5->value(eff->geteffectpar(5));
- distp6->value(eff->geteffectpar(6));
- distp7->value(eff->geteffectpar(7));
- distp8->value(eff->geteffectpar(8));
- distp9->value(eff->geteffectpar(9));
- distp10->value(eff->geteffectpar(10));
- effdistorsionwindow->show();
- break;
- case 7:eqband=0;
- eqp0->value(eff->geteffectpar(0));
- bandcounter->value(eqband);
- bandcounter->do_callback();
- typechoice->value(eff->geteffectpar(10));
- eqgraph->redraw();
- freqdial->value(eff->geteffectpar(11));
- gaindial->value(eff->geteffectpar(12));
- if (eff->geteffectpar(10)<6) gaindial->deactivate();
- qdial->value(eff->geteffectpar(13));
- stagescounter->value(eff->geteffectpar(14));
- eqgraph->init(eff);
- effeqwindow->show();
- break;
- case 8:make_filter_window();
- dfp->value(eff->getpreset());
- dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
- dfp1->value(eff->geteffectpar(1));
- dfp2->value(eff->geteffectpar(2));
- dfp3->value(eff->geteffectpar(3));
- dfp4->value(eff->geteffectpar(4));
- dfp5->value(eff->geteffectpar(5));
- dfp6->value(eff->geteffectpar(6));
- dfp7->value(eff->geteffectpar(7));
- dfp8->value(eff->geteffectpar(8));
- dfp9->value(eff->geteffectpar(9));
-
-
- effdynamicfilterwindow->show();
- break;
- default:effnullwindow->show();
- break;
- };
-
- this->show();
-}
-
-void EffUI::refresh() {
- refresh(eff);
-}
-
-void SimpleEffUI::cb_revp5_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-
-refresh(eff);
-}
-void SimpleEffUI::cb_revp5(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_revp5_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_revp1[] = {
- {"Cathedral 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Cathedral 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Cathedral 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Hall 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Hall 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Room 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Room 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Basement", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Tunnel", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Echoed 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Echoed 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Very Long 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Very Long 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_revp01_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void SimpleEffUI::cb_revp01(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_revp01_i(o,v);
-}
-
-void SimpleEffUI::cb_revp21_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void SimpleEffUI::cb_revp21(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_revp21_i(o,v);
-}
-
-void SimpleEffUI::cb_revp31_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void SimpleEffUI::cb_revp31(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_revp31_i(o,v);
-}
-
-void SimpleEffUI::cb_revp91_i(WidgetPDial* o, void*) {
- eff->seteffectpar(9,(int) o->value());
-}
-void SimpleEffUI::cb_revp91(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_revp91_i(o,v);
-}
-
-void SimpleEffUI::cb_echop7_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void SimpleEffUI::cb_echop7(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_echop7_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_echop1[] = {
- {"Echo 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Echo 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Echo 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Simple Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Canyon", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Panning Echo 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Panning Echo 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Panning Echo 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Feedback Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_echop01_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void SimpleEffUI::cb_echop01(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_echop01_i(o,v);
-}
-
-void SimpleEffUI::cb_echop21_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void SimpleEffUI::cb_echop21(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_echop21_i(o,v);
-}
-
-void SimpleEffUI::cb_echop51_i(WidgetPDial* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void SimpleEffUI::cb_echop51(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_echop51_i(o,v);
-}
-
-void SimpleEffUI::cb_choruspa_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void SimpleEffUI::cb_choruspa(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_choruspa_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_chorusp1[] = {
- {"Chorus 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Chorus 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Chorus 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Celeste 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Celeste 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Flange 5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_chorusp01_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void SimpleEffUI::cb_chorusp01(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_chorusp01_i(o,v);
-}
-
-void SimpleEffUI::cb_chorusp21_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void SimpleEffUI::cb_chorusp21(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_chorusp21_i(o,v);
-}
-
-void SimpleEffUI::cb_chorusp61_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void SimpleEffUI::cb_chorusp61(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_chorusp61_i(o,v);
-}
-
-void SimpleEffUI::cb_chorusp71_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void SimpleEffUI::cb_chorusp71(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_chorusp71_i(o,v);
-}
-
-void SimpleEffUI::cb_chorusp81_i(WidgetPDial* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void SimpleEffUI::cb_chorusp81(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_chorusp81_i(o,v);
-}
-
-void SimpleEffUI::cb_Flange1_i(Fl_Check_Button* o, void*) {
- eff->seteffectpar(10,(int) o->value());
-}
-void SimpleEffUI::cb_Flange1(Fl_Check_Button* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_Flange1_i(o,v);
-}
-
-void SimpleEffUI::cb_phaserpa_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void SimpleEffUI::cb_phaserpa(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_phaserpa_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_phaserp1[] = {
- {"Phaser 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Phaser 6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_phaserp01_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void SimpleEffUI::cb_phaserp01(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_phaserp01_i(o,v);
-}
-
-void SimpleEffUI::cb_phaserp21_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void SimpleEffUI::cb_phaserp21(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_phaserp21_i(o,v);
-}
-
-void SimpleEffUI::cb_phaserp51_i(WidgetPDial* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void SimpleEffUI::cb_phaserp51(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_phaserp51_i(o,v);
-}
-
-void SimpleEffUI::cb_phaserp61_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void SimpleEffUI::cb_phaserp61(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_phaserp61_i(o,v);
-}
-
-void SimpleEffUI::cb_phaserp71_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void SimpleEffUI::cb_phaserp71(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_phaserp71_i(o,v);
-}
-
-void SimpleEffUI::cb_phaserp81_i(Fl_Counter* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void SimpleEffUI::cb_phaserp81(Fl_Counter* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_phaserp81_i(o,v);
-}
-
-void SimpleEffUI::cb_awpa_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void SimpleEffUI::cb_awpa(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_awpa_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_awp1[] = {
- {"Alienwah 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Alienwah 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Alienwah 3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Alienwah 4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_awp01_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void SimpleEffUI::cb_awp01(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_awp01_i(o,v);
-}
-
-void SimpleEffUI::cb_awp21_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void SimpleEffUI::cb_awp21(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_awp21_i(o,v);
-}
-
-void SimpleEffUI::cb_awp61_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void SimpleEffUI::cb_awp61(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_awp61_i(o,v);
-}
-
-void SimpleEffUI::cb_awp81_i(Fl_Counter* o, void*) {
- eff->seteffectpar(8,(int) o->value());
-}
-void SimpleEffUI::cb_awp81(Fl_Counter* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_awp81_i(o,v);
-}
-
-void SimpleEffUI::cb_distpa_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void SimpleEffUI::cb_distpa(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_distpa_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_distp1[] = {
- {"Overdrive 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Overdrive 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"A. Exciter 1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"A. Exciter 2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Guitar Amp", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Quantisize", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_distp01_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void SimpleEffUI::cb_distp01(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_distp01_i(o,v);
-}
-
-void SimpleEffUI::cb_distp31_i(WidgetPDial* o, void*) {
- eff->seteffectpar(3,(int) o->value());
-}
-void SimpleEffUI::cb_distp31(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_distp31_i(o,v);
-}
-
-void SimpleEffUI::cb_distp41_i(WidgetPDial* o, void*) {
- eff->seteffectpar(4,(int) o->value());
-}
-void SimpleEffUI::cb_distp41(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_distp41_i(o,v);
-}
-
-void SimpleEffUI::cb_distp71_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void SimpleEffUI::cb_distp71(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_distp71_i(o,v);
-}
-
-void SimpleEffUI::cb_distp51_i(Fl_Choice* o, void*) {
- eff->seteffectpar(5,(int) o->value());
-}
-void SimpleEffUI::cb_distp51(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_distp51_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_distp51[] = {
- {"Atan", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Asym1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Qnts", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Zigzg", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Lmt", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LmtU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LmtL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"ILmt", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Clip", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Asym2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sgm", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_bandcounter1_i(Fl_Counter* o, void*) {
- eqband=(int) o->value();
-int npb=eqband*5+10;
-
-int type=eff->geteffectpar(npb);
-typechoice->value(type);
-
-if (type>6) gaindial->activate();
- else gaindial->deactivate();
-
-if (type==0) bandgroup->deactivate();
-else bandgroup->activate();
-
-int freq=eff->geteffectpar(npb+1);
-freqdial->value(freq);
-
-int gain=eff->geteffectpar(npb+2);
-gaindial->value(gain);
-
-int q=eff->geteffectpar(npb+3);
-qdial->value(q);
-
-int dbl=eff->geteffectpar(npb+4);
-stagescounter->value(dbl);
-}
-void SimpleEffUI::cb_bandcounter1(Fl_Counter* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_bandcounter1_i(o,v);
-}
-
-void SimpleEffUI::cb_freqdial1_i(WidgetPDial* o, void*) {
- int np=eqband*5+11;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();
-}
-void SimpleEffUI::cb_freqdial1(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->parent()->user_data()))->cb_freqdial1_i(o,v);
-}
-
-void SimpleEffUI::cb_gaindial1_i(WidgetPDial* o, void*) {
- int np=eqband*5+12;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();
-}
-void SimpleEffUI::cb_gaindial1(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->parent()->user_data()))->cb_gaindial1_i(o,v);
-}
-
-void SimpleEffUI::cb_qdial1_i(WidgetPDial* o, void*) {
- int np=eqband*5+13;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();
-}
-void SimpleEffUI::cb_qdial1(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->parent()->user_data()))->cb_qdial1_i(o,v);
-}
-
-void SimpleEffUI::cb_stagescounter1_i(Fl_Counter* o, void*) {
- int np=eqband*5+14;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();
-}
-void SimpleEffUI::cb_stagescounter1(Fl_Counter* o, void* v) {
- ((SimpleEffUI*)(o->parent()->parent()->user_data()))->cb_stagescounter1_i(o,v);
-}
-
-void SimpleEffUI::cb_typechoice1_i(Fl_Choice* o, void*) {
- int np=eqband*5+10;
-eff->seteffectpar(np,(int) o->value());
-bandcounter->do_callback();
-eqgraph->redraw();
-}
-void SimpleEffUI::cb_typechoice1(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_typechoice1_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_typechoice1[] = {
- {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Lp1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Hp1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Lp2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Hp2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Bp2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"N2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pk", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LSh", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"HSh", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_dfpa_i(Fl_Choice* o, void*) {
- eff->changepreset((int)o->value());
-refresh(eff);
-}
-void SimpleEffUI::cb_dfpa(Fl_Choice* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_dfpa_i(o,v);
-}
-
-Fl_Menu_Item SimpleEffUI::menu_dfp1[] = {
- {"WahWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"AutoWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"Sweep", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"VocalMorph1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {"VocalMorph2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 7},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SimpleEffUI::cb_dfp01_i(WidgetPDial* o, void*) {
- eff->seteffectpar(0,(int) o->value());
-}
-void SimpleEffUI::cb_dfp01(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_dfp01_i(o,v);
-}
-
-void SimpleEffUI::cb_dfp21_i(WidgetPDial* o, void*) {
- eff->seteffectpar(2,(int) o->value());
-}
-void SimpleEffUI::cb_dfp21(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_dfp21_i(o,v);
-}
-
-void SimpleEffUI::cb_dfp61_i(WidgetPDial* o, void*) {
- eff->seteffectpar(6,(int) o->value());
-}
-void SimpleEffUI::cb_dfp61(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->user_data()))->cb_dfp61_i(o,v);
-}
-
-void SimpleEffUI::cb_dfp71_i(WidgetPDial* o, void*) {
- eff->seteffectpar(7,(int) o->value());
-}
-void SimpleEffUI::cb_dfp71(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->parent()->user_data()))->cb_dfp71_i(o,v);
-}
-
-void SimpleEffUI::cb_dfp91_i(WidgetPDial* o, void*) {
- eff->seteffectpar(9,(int) o->value());
-}
-void SimpleEffUI::cb_dfp91(WidgetPDial* o, void* v) {
- ((SimpleEffUI*)(o->parent()->parent()->user_data()))->cb_dfp91_i(o,v);
-}
-
-SimpleEffUI::SimpleEffUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- eff=NULL;
-}
-
-SimpleEffUI::~SimpleEffUI() {
- effnullwindow->hide();//delete (effnullwindow);
- effreverbwindow->hide();//delete (effreverbwindow);
- effechowindow->hide();//delete (effechowindow);
- effchoruswindow->hide();//delete (effchoruswindow);
- effphaserwindow->hide();//delete (effphaserwindow);
- effalienwahwindow->hide();//delete (effalienwahwindow);
- effdistorsionwindow->hide();//delete (effdistorsionwindow);
- effeqwindow->hide();//delete (effeqwindow);
- effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);
-}
-
-Fl_Group* SimpleEffUI::make_null_window() {
- { effnullwindow = new Fl_Group(0, 0, 230, 95);
- effnullwindow->box(FL_PLASTIC_UP_BOX);
- effnullwindow->color((Fl_Color)221);
- effnullwindow->selection_color(FL_BACKGROUND_COLOR);
- effnullwindow->labeltype(FL_NO_LABEL);
- effnullwindow->labelfont(1);
- effnullwindow->labelsize(14);
- effnullwindow->labelcolor(FL_FOREGROUND_COLOR);
- effnullwindow->user_data((void*)(this));
- effnullwindow->align(Fl_Align(FL_ALIGN_TOP));
- effnullwindow->when(FL_WHEN_RELEASE);
- { Fl_Text_Display* o = new Fl_Text_Display(25, 35, 35, 20, "No Effect");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->labelcolor((Fl_Color)43);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- effnullwindow->end();
- } // Fl_Group* effnullwindow
- return effnullwindow;
-}
-
-Fl_Group* SimpleEffUI::make_reverb_window() {
- { effreverbwindow = new Fl_Group(0, 0, 230, 95);
- effreverbwindow->box(FL_PLASTIC_UP_BOX);
- effreverbwindow->color((Fl_Color)221);
- effreverbwindow->selection_color(FL_BACKGROUND_COLOR);
- effreverbwindow->labeltype(FL_NO_LABEL);
- effreverbwindow->labelfont(1);
- effreverbwindow->labelsize(14);
- effreverbwindow->labelcolor(FL_FOREGROUND_COLOR);
- effreverbwindow->user_data((void*)(this));
- effreverbwindow->align(Fl_Align(FL_ALIGN_TOP));
- effreverbwindow->when(FL_WHEN_RELEASE);
- { Fl_Text_Display* o = new Fl_Text_Display(115, 10, 20, 20, "Reverb ");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { revp = new Fl_Choice(10, 15, 90, 15, "Preset");
- revp->down_box(FL_BORDER_BOX);
- revp->color((Fl_Color)14);
- revp->selection_color(FL_FOREGROUND_COLOR);
- revp->labelfont(1);
- revp->labelsize(10);
- revp->textfont(1);
- revp->textsize(10);
- revp->textcolor(FL_BACKGROUND2_COLOR);
- revp->callback((Fl_Callback*)cb_revp5);
- revp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- revp->menu(menu_revp1);
- } // Fl_Choice* revp
- { revp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- revp0->tooltip("Effect Volume");
- revp0->box(FL_ROUND_UP_BOX);
- revp0->color(FL_BACKGROUND_COLOR);
- revp0->selection_color(FL_INACTIVE_COLOR);
- revp0->labeltype(FL_NORMAL_LABEL);
- revp0->labelfont(1);
- revp0->labelsize(11);
- revp0->labelcolor(FL_FOREGROUND_COLOR);
- revp0->maximum(127);
- revp0->callback((Fl_Callback*)cb_revp01);
- revp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp0
- { revp2 = new WidgetPDial(45, 40, 30, 30, "Time");
- revp2->tooltip("Duration of Reverb");
- revp2->box(FL_ROUND_UP_BOX);
- revp2->color(FL_BACKGROUND_COLOR);
- revp2->selection_color(FL_INACTIVE_COLOR);
- revp2->labeltype(FL_NORMAL_LABEL);
- revp2->labelfont(1);
- revp2->labelsize(11);
- revp2->labelcolor(FL_FOREGROUND_COLOR);
- revp2->maximum(127);
- revp2->callback((Fl_Callback*)cb_revp21);
- revp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp2
- { revp3 = new WidgetPDial(85, 40, 30, 30, "I.del");
- revp3->tooltip("Initial Delay");
- revp3->box(FL_ROUND_UP_BOX);
- revp3->color(FL_BACKGROUND_COLOR);
- revp3->selection_color(FL_INACTIVE_COLOR);
- revp3->labeltype(FL_NORMAL_LABEL);
- revp3->labelfont(1);
- revp3->labelsize(11);
- revp3->labelcolor(FL_FOREGROUND_COLOR);
- revp3->maximum(127);
- revp3->callback((Fl_Callback*)cb_revp31);
- revp3->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* revp3
- { revp9 = new WidgetPDial(120, 40, 30, 30, "Damp");
- revp9->tooltip("Dampening");
- revp9->box(FL_ROUND_UP_BOX);
- revp9->color(FL_BACKGROUND_COLOR);
- revp9->selection_color(FL_INACTIVE_COLOR);
- revp9->labeltype(FL_NORMAL_LABEL);
- revp9->labelfont(1);
- revp9->labelsize(11);
- revp9->labelcolor(FL_FOREGROUND_COLOR);
- revp9->minimum(64);
- revp9->maximum(127);
- revp9->step(1);
- revp9->callback((Fl_Callback*)cb_revp91);
- revp9->align(Fl_Align(FL_ALIGN_BOTTOM));
- revp9->when(FL_WHEN_CHANGED);
- } // WidgetPDial* revp9
- effreverbwindow->end();
- } // Fl_Group* effreverbwindow
- return effreverbwindow;
-}
-
-Fl_Group* SimpleEffUI::make_echo_window() {
- { effechowindow = new Fl_Group(0, 0, 230, 95);
- effechowindow->box(FL_PLASTIC_UP_BOX);
- effechowindow->color((Fl_Color)221);
- effechowindow->selection_color(FL_BACKGROUND_COLOR);
- effechowindow->labeltype(FL_NO_LABEL);
- effechowindow->labelfont(1);
- effechowindow->labelsize(14);
- effechowindow->labelcolor(FL_FOREGROUND_COLOR);
- effechowindow->user_data((void*)(this));
- effechowindow->align(Fl_Align(FL_ALIGN_TOP));
- effechowindow->when(FL_WHEN_RELEASE);
- { echop = new Fl_Choice(11, 15, 95, 15, "Preset");
- echop->down_box(FL_BORDER_BOX);
- echop->color((Fl_Color)14);
- echop->selection_color(FL_FOREGROUND_COLOR);
- echop->labelfont(1);
- echop->labelsize(10);
- echop->textfont(1);
- echop->textsize(10);
- echop->textcolor(FL_BACKGROUND2_COLOR);
- echop->callback((Fl_Callback*)cb_echop7);
- echop->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- echop->menu(menu_echop1);
- } // Fl_Choice* echop
- { Fl_Text_Display* o = new Fl_Text_Display(145, 10, 10, 20, "Echo");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { echop0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- echop0->tooltip("Effect Volume");
- echop0->box(FL_ROUND_UP_BOX);
- echop0->color(FL_BACKGROUND_COLOR);
- echop0->selection_color(FL_INACTIVE_COLOR);
- echop0->labeltype(FL_NORMAL_LABEL);
- echop0->labelfont(1);
- echop0->labelsize(11);
- echop0->labelcolor(FL_FOREGROUND_COLOR);
- echop0->maximum(127);
- echop0->callback((Fl_Callback*)cb_echop01);
- echop0->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* echop0
- { echop2 = new WidgetPDial(45, 40, 30, 30, "Delay");
- echop2->box(FL_ROUND_UP_BOX);
- echop2->color(FL_BACKGROUND_COLOR);
- echop2->selection_color(FL_INACTIVE_COLOR);
- echop2->labeltype(FL_NORMAL_LABEL);
- echop2->labelfont(1);
- echop2->labelsize(11);
- echop2->labelcolor(FL_FOREGROUND_COLOR);
- echop2->maximum(127);
- echop2->callback((Fl_Callback*)cb_echop21);
- echop2->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop2->when(FL_WHEN_RELEASE);
- } // WidgetPDial* echop2
- { echop5 = new WidgetPDial(80, 40, 30, 30, "Fb.");
- echop5->tooltip("Feedback");
- echop5->box(FL_ROUND_UP_BOX);
- echop5->color(FL_BACKGROUND_COLOR);
- echop5->selection_color(FL_INACTIVE_COLOR);
- echop5->labeltype(FL_NORMAL_LABEL);
- echop5->labelfont(1);
- echop5->labelsize(11);
- echop5->labelcolor(FL_FOREGROUND_COLOR);
- echop5->maximum(127);
- echop5->callback((Fl_Callback*)cb_echop51);
- echop5->align(Fl_Align(FL_ALIGN_BOTTOM));
- echop5->when(FL_WHEN_CHANGED);
- } // WidgetPDial* echop5
- effechowindow->end();
- } // Fl_Group* effechowindow
- return effechowindow;
-}
-
-Fl_Group* SimpleEffUI::make_chorus_window() {
- { effchoruswindow = new Fl_Group(0, 0, 230, 95);
- effchoruswindow->box(FL_PLASTIC_UP_BOX);
- effchoruswindow->color((Fl_Color)221);
- effchoruswindow->selection_color(FL_BACKGROUND_COLOR);
- effchoruswindow->labeltype(FL_NO_LABEL);
- effchoruswindow->labelfont(1);
- effchoruswindow->labelsize(14);
- effchoruswindow->labelcolor(FL_FOREGROUND_COLOR);
- effchoruswindow->user_data((void*)(this));
- effchoruswindow->align(Fl_Align(FL_ALIGN_TOP));
- effchoruswindow->when(FL_WHEN_RELEASE);
- { chorusp = new Fl_Choice(10, 15, 90, 15, "Preset");
- chorusp->down_box(FL_BORDER_BOX);
- chorusp->color((Fl_Color)14);
- chorusp->selection_color(FL_FOREGROUND_COLOR);
- chorusp->labelfont(1);
- chorusp->labelsize(10);
- chorusp->textfont(1);
- chorusp->textsize(10);
- chorusp->textcolor(FL_BACKGROUND2_COLOR);
- chorusp->callback((Fl_Callback*)cb_choruspa);
- chorusp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- chorusp->menu(menu_chorusp1);
- } // Fl_Choice* chorusp
- { Fl_Text_Display* o = new Fl_Text_Display(120, 10, 10, 20, "Chorus");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { chorusp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- chorusp0->tooltip("Effect Volume");
- chorusp0->box(FL_ROUND_UP_BOX);
- chorusp0->color(FL_BACKGROUND_COLOR);
- chorusp0->selection_color(FL_INACTIVE_COLOR);
- chorusp0->labeltype(FL_NORMAL_LABEL);
- chorusp0->labelfont(1);
- chorusp0->labelsize(11);
- chorusp0->labelcolor(FL_FOREGROUND_COLOR);
- chorusp0->maximum(127);
- chorusp0->callback((Fl_Callback*)cb_chorusp01);
- chorusp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp0
- { chorusp2 = new WidgetPDial(45, 40, 30, 30, "Freq");
- chorusp2->tooltip("LFO Frequency");
- chorusp2->box(FL_ROUND_UP_BOX);
- chorusp2->color(FL_BACKGROUND_COLOR);
- chorusp2->selection_color(FL_INACTIVE_COLOR);
- chorusp2->labeltype(FL_NORMAL_LABEL);
- chorusp2->labelfont(1);
- chorusp2->labelsize(11);
- chorusp2->labelcolor(FL_FOREGROUND_COLOR);
- chorusp2->maximum(127);
- chorusp2->callback((Fl_Callback*)cb_chorusp21);
- chorusp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp2
- { chorusp6 = new WidgetPDial(80, 40, 30, 30, "Dpth");
- chorusp6->tooltip("Depth");
- chorusp6->box(FL_ROUND_UP_BOX);
- chorusp6->color(FL_BACKGROUND_COLOR);
- chorusp6->selection_color(FL_INACTIVE_COLOR);
- chorusp6->labeltype(FL_NORMAL_LABEL);
- chorusp6->labelfont(1);
- chorusp6->labelsize(11);
- chorusp6->labelcolor(FL_FOREGROUND_COLOR);
- chorusp6->maximum(127);
- chorusp6->callback((Fl_Callback*)cb_chorusp61);
- chorusp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp6
- { chorusp7 = new WidgetPDial(115, 40, 30, 30, "Delay");
- chorusp7->box(FL_ROUND_UP_BOX);
- chorusp7->color(FL_BACKGROUND_COLOR);
- chorusp7->selection_color(FL_INACTIVE_COLOR);
- chorusp7->labeltype(FL_NORMAL_LABEL);
- chorusp7->labelfont(1);
- chorusp7->labelsize(11);
- chorusp7->labelcolor(FL_FOREGROUND_COLOR);
- chorusp7->maximum(127);
- chorusp7->callback((Fl_Callback*)cb_chorusp71);
- chorusp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp7
- { chorusp8 = new WidgetPDial(150, 40, 30, 30, "Fb");
- chorusp8->tooltip("Feedback");
- chorusp8->box(FL_ROUND_UP_BOX);
- chorusp8->color(FL_BACKGROUND_COLOR);
- chorusp8->selection_color(FL_INACTIVE_COLOR);
- chorusp8->labeltype(FL_NORMAL_LABEL);
- chorusp8->labelfont(1);
- chorusp8->labelsize(11);
- chorusp8->labelcolor(FL_FOREGROUND_COLOR);
- chorusp8->maximum(127);
- chorusp8->callback((Fl_Callback*)cb_chorusp81);
- chorusp8->align(Fl_Align(FL_ALIGN_BOTTOM));
- chorusp8->when(FL_WHEN_CHANGED);
- } // WidgetPDial* chorusp8
- { Fl_Check_Button* o = new Fl_Check_Button(120, 10, 55, 20, "Flange");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->color((Fl_Color)230);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Flange1);
- o->hide();
- o->deactivate();
- o->value(eff->geteffectpar(10));
- } // Fl_Check_Button* o
- effchoruswindow->end();
- } // Fl_Group* effchoruswindow
- return effchoruswindow;
-}
-
-Fl_Group* SimpleEffUI::make_phaser_window() {
- { effphaserwindow = new Fl_Group(0, 0, 230, 95);
- effphaserwindow->box(FL_PLASTIC_UP_BOX);
- effphaserwindow->color((Fl_Color)221);
- effphaserwindow->selection_color(FL_BACKGROUND_COLOR);
- effphaserwindow->labeltype(FL_NO_LABEL);
- effphaserwindow->labelfont(1);
- effphaserwindow->labelsize(14);
- effphaserwindow->labelcolor(FL_FOREGROUND_COLOR);
- effphaserwindow->user_data((void*)(this));
- effphaserwindow->align(Fl_Align(FL_ALIGN_TOP));
- effphaserwindow->when(FL_WHEN_RELEASE);
- { phaserp = new Fl_Choice(10, 15, 90, 15, "Preset");
- phaserp->down_box(FL_BORDER_BOX);
- phaserp->color((Fl_Color)14);
- phaserp->selection_color(FL_FOREGROUND_COLOR);
- phaserp->labelfont(1);
- phaserp->labelsize(10);
- phaserp->textfont(1);
- phaserp->textsize(10);
- phaserp->textcolor(FL_BACKGROUND2_COLOR);
- phaserp->callback((Fl_Callback*)cb_phaserpa);
- phaserp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- phaserp->menu(menu_phaserp1);
- } // Fl_Choice* phaserp
- { Fl_Text_Display* o = new Fl_Text_Display(125, 10, 10, 20, "Phaser");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { phaserp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- phaserp0->tooltip("Effect Volume");
- phaserp0->box(FL_ROUND_UP_BOX);
- phaserp0->color(FL_BACKGROUND_COLOR);
- phaserp0->selection_color(FL_INACTIVE_COLOR);
- phaserp0->labeltype(FL_NORMAL_LABEL);
- phaserp0->labelfont(1);
- phaserp0->labelsize(11);
- phaserp0->labelcolor(FL_FOREGROUND_COLOR);
- phaserp0->maximum(127);
- phaserp0->callback((Fl_Callback*)cb_phaserp01);
- phaserp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp0
- { phaserp2 = new WidgetPDial(45, 40, 30, 30, "Freq");
- phaserp2->tooltip("LFO frequency");
- phaserp2->box(FL_ROUND_UP_BOX);
- phaserp2->color(FL_BACKGROUND_COLOR);
- phaserp2->selection_color(FL_INACTIVE_COLOR);
- phaserp2->labeltype(FL_NORMAL_LABEL);
- phaserp2->labelfont(1);
- phaserp2->labelsize(11);
- phaserp2->labelcolor(FL_FOREGROUND_COLOR);
- phaserp2->maximum(127);
- phaserp2->callback((Fl_Callback*)cb_phaserp21);
- phaserp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp2
- { phaserp5 = new WidgetPDial(80, 40, 30, 30, "St.df");
- phaserp5->tooltip("Left/Right Channel Phase Shift");
- phaserp5->box(FL_ROUND_UP_BOX);
- phaserp5->color(FL_BACKGROUND_COLOR);
- phaserp5->selection_color(FL_INACTIVE_COLOR);
- phaserp5->labeltype(FL_NORMAL_LABEL);
- phaserp5->labelfont(1);
- phaserp5->labelsize(11);
- phaserp5->labelcolor(FL_FOREGROUND_COLOR);
- phaserp5->maximum(127);
- phaserp5->callback((Fl_Callback*)cb_phaserp51);
- phaserp5->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp5->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp5
- { phaserp6 = new WidgetPDial(115, 40, 30, 30, "Dpth");
- phaserp6->tooltip("Depth");
- phaserp6->box(FL_ROUND_UP_BOX);
- phaserp6->color(FL_BACKGROUND_COLOR);
- phaserp6->selection_color(FL_INACTIVE_COLOR);
- phaserp6->labeltype(FL_NORMAL_LABEL);
- phaserp6->labelfont(1);
- phaserp6->labelsize(11);
- phaserp6->labelcolor(FL_FOREGROUND_COLOR);
- phaserp6->maximum(127);
- phaserp6->callback((Fl_Callback*)cb_phaserp61);
- phaserp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp6
- { phaserp7 = new WidgetPDial(150, 40, 30, 30, "Fb");
- phaserp7->tooltip("Feedback");
- phaserp7->box(FL_ROUND_UP_BOX);
- phaserp7->color(FL_BACKGROUND_COLOR);
- phaserp7->selection_color(FL_INACTIVE_COLOR);
- phaserp7->labeltype(FL_NORMAL_LABEL);
- phaserp7->labelfont(1);
- phaserp7->labelsize(11);
- phaserp7->labelcolor(FL_FOREGROUND_COLOR);
- phaserp7->maximum(127);
- phaserp7->callback((Fl_Callback*)cb_phaserp71);
- phaserp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- phaserp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* phaserp7
- { Fl_Counter* o = phaserp8 = new Fl_Counter(185, 55, 35, 15, "Stages");
- phaserp8->type(1);
- phaserp8->labelfont(1);
- phaserp8->labelsize(11);
- phaserp8->minimum(0);
- phaserp8->maximum(127);
- phaserp8->step(1);
- phaserp8->callback((Fl_Callback*)cb_phaserp81);
- o->range(1,MAX_PHASER_STAGES);
- } // Fl_Counter* phaserp8
- effphaserwindow->end();
- } // Fl_Group* effphaserwindow
- return effphaserwindow;
-}
-
-Fl_Group* SimpleEffUI::make_alienwah_window() {
- { effalienwahwindow = new Fl_Group(0, 0, 230, 95);
- effalienwahwindow->box(FL_PLASTIC_UP_BOX);
- effalienwahwindow->color((Fl_Color)221);
- effalienwahwindow->selection_color(FL_BACKGROUND_COLOR);
- effalienwahwindow->labeltype(FL_NO_LABEL);
- effalienwahwindow->labelfont(1);
- effalienwahwindow->labelsize(14);
- effalienwahwindow->labelcolor(FL_FOREGROUND_COLOR);
- effalienwahwindow->user_data((void*)(this));
- effalienwahwindow->align(Fl_Align(FL_ALIGN_TOP));
- effalienwahwindow->when(FL_WHEN_RELEASE);
- { awp = new Fl_Choice(10, 15, 90, 15, "Preset");
- awp->down_box(FL_BORDER_BOX);
- awp->color((Fl_Color)14);
- awp->selection_color(FL_FOREGROUND_COLOR);
- awp->labelfont(1);
- awp->labelsize(10);
- awp->textfont(1);
- awp->textsize(10);
- awp->textcolor(FL_BACKGROUND2_COLOR);
- awp->callback((Fl_Callback*)cb_awpa);
- awp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- awp->menu(menu_awp1);
- } // Fl_Choice* awp
- { Fl_Text_Display* o = new Fl_Text_Display(100, 10, 10, 20, "AlienWah");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { awp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- awp0->tooltip("Effect Volume");
- awp0->box(FL_ROUND_UP_BOX);
- awp0->color(FL_BACKGROUND_COLOR);
- awp0->selection_color(FL_INACTIVE_COLOR);
- awp0->labeltype(FL_NORMAL_LABEL);
- awp0->labelfont(1);
- awp0->labelsize(11);
- awp0->labelcolor(FL_FOREGROUND_COLOR);
- awp0->maximum(127);
- awp0->callback((Fl_Callback*)cb_awp01);
- awp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp0
- { awp2 = new WidgetPDial(45, 40, 30, 30, "Freq");
- awp2->tooltip("LFO frequency");
- awp2->box(FL_ROUND_UP_BOX);
- awp2->color(FL_BACKGROUND_COLOR);
- awp2->selection_color(FL_INACTIVE_COLOR);
- awp2->labeltype(FL_NORMAL_LABEL);
- awp2->labelfont(1);
- awp2->labelsize(11);
- awp2->labelcolor(FL_FOREGROUND_COLOR);
- awp2->maximum(127);
- awp2->callback((Fl_Callback*)cb_awp21);
- awp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp2
- { awp6 = new WidgetPDial(85, 40, 30, 30, "Dpth");
- awp6->tooltip("Depth");
- awp6->box(FL_ROUND_UP_BOX);
- awp6->color(FL_BACKGROUND_COLOR);
- awp6->selection_color(FL_INACTIVE_COLOR);
- awp6->labeltype(FL_NORMAL_LABEL);
- awp6->labelfont(1);
- awp6->labelsize(11);
- awp6->labelcolor(FL_FOREGROUND_COLOR);
- awp6->maximum(127);
- awp6->callback((Fl_Callback*)cb_awp61);
- awp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- awp6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* awp6
- { Fl_Counter* o = awp8 = new Fl_Counter(125, 55, 35, 15, "Delay");
- awp8->type(1);
- awp8->labelfont(1);
- awp8->labelsize(11);
- awp8->minimum(0);
- awp8->maximum(127);
- awp8->step(1);
- awp8->callback((Fl_Callback*)cb_awp81);
- o->range(1,MAX_ALIENWAH_DELAY);
- } // Fl_Counter* awp8
- effalienwahwindow->end();
- } // Fl_Group* effalienwahwindow
- return effalienwahwindow;
-}
-
-Fl_Group* SimpleEffUI::make_distorsion_window() {
- { effdistorsionwindow = new Fl_Group(0, 0, 230, 95);
- effdistorsionwindow->box(FL_PLASTIC_UP_BOX);
- effdistorsionwindow->color((Fl_Color)221);
- effdistorsionwindow->selection_color(FL_BACKGROUND_COLOR);
- effdistorsionwindow->labeltype(FL_NO_LABEL);
- effdistorsionwindow->labelfont(1);
- effdistorsionwindow->labelsize(14);
- effdistorsionwindow->labelcolor(FL_FOREGROUND_COLOR);
- effdistorsionwindow->user_data((void*)(this));
- effdistorsionwindow->align(Fl_Align(FL_ALIGN_TOP));
- effdistorsionwindow->when(FL_WHEN_RELEASE);
- { distp = new Fl_Choice(11, 15, 95, 15, "Preset");
- distp->down_box(FL_BORDER_BOX);
- distp->color((Fl_Color)14);
- distp->selection_color(FL_FOREGROUND_COLOR);
- distp->labelfont(1);
- distp->labelsize(10);
- distp->textfont(1);
- distp->textsize(10);
- distp->textcolor(FL_BACKGROUND2_COLOR);
- distp->callback((Fl_Callback*)cb_distpa);
- distp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- distp->menu(menu_distp1);
- } // Fl_Choice* distp
- { Fl_Text_Display* o = new Fl_Text_Display(110, 10, 10, 20, "Distortion");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(16);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { distp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- distp0->tooltip("Effect Volume");
- distp0->box(FL_ROUND_UP_BOX);
- distp0->color(FL_BACKGROUND_COLOR);
- distp0->selection_color(FL_INACTIVE_COLOR);
- distp0->labeltype(FL_NORMAL_LABEL);
- distp0->labelfont(1);
- distp0->labelsize(11);
- distp0->labelcolor(FL_FOREGROUND_COLOR);
- distp0->maximum(127);
- distp0->callback((Fl_Callback*)cb_distp01);
- distp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* distp0
- { distp3 = new WidgetPDial(45, 40, 30, 30, "Drive");
- distp3->tooltip("Input amplification");
- distp3->box(FL_ROUND_UP_BOX);
- distp3->color(FL_BACKGROUND_COLOR);
- distp3->selection_color(FL_INACTIVE_COLOR);
- distp3->labeltype(FL_NORMAL_LABEL);
- distp3->labelfont(1);
- distp3->labelsize(11);
- distp3->labelcolor(FL_FOREGROUND_COLOR);
- distp3->maximum(127);
- distp3->callback((Fl_Callback*)cb_distp31);
- distp3->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp3->when(FL_WHEN_RELEASE);
- } // WidgetPDial* distp3
- { distp4 = new WidgetPDial(80, 40, 30, 30, "Level");
- distp4->tooltip("Output Amplification");
- distp4->box(FL_ROUND_UP_BOX);
- distp4->color(FL_BACKGROUND_COLOR);
- distp4->selection_color(FL_INACTIVE_COLOR);
- distp4->labeltype(FL_NORMAL_LABEL);
- distp4->labelfont(1);
- distp4->labelsize(11);
- distp4->labelcolor(FL_FOREGROUND_COLOR);
- distp4->maximum(127);
- distp4->callback((Fl_Callback*)cb_distp41);
- distp4->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp4->when(FL_WHEN_CHANGED);
- } // WidgetPDial* distp4
- { distp7 = new WidgetPDial(190, 40, 30, 30, "LPF");
- distp7->tooltip("Low Pass Filter");
- distp7->box(FL_ROUND_UP_BOX);
- distp7->color(FL_BACKGROUND_COLOR);
- distp7->selection_color(FL_INACTIVE_COLOR);
- distp7->labeltype(FL_NORMAL_LABEL);
- distp7->labelfont(1);
- distp7->labelsize(11);
- distp7->labelcolor(FL_FOREGROUND_COLOR);
- distp7->maximum(127);
- distp7->callback((Fl_Callback*)cb_distp71);
- distp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* distp7
- { distp5 = new Fl_Choice(120, 50, 60, 20, "Type");
- distp5->box(FL_UP_BOX);
- distp5->down_box(FL_BORDER_BOX);
- distp5->labelfont(1);
- distp5->labelsize(11);
- distp5->textsize(10);
- distp5->callback((Fl_Callback*)cb_distp51);
- distp5->align(Fl_Align(FL_ALIGN_BOTTOM));
- distp5->menu(menu_distp51);
- } // Fl_Choice* distp5
- effdistorsionwindow->end();
- } // Fl_Group* effdistorsionwindow
- return effdistorsionwindow;
-}
-
-Fl_Group* SimpleEffUI::make_eq_window() {
- { effeqwindow = new Fl_Group(0, 0, 230, 95);
- effeqwindow->box(FL_PLASTIC_UP_BOX);
- effeqwindow->color((Fl_Color)221);
- effeqwindow->selection_color(FL_BACKGROUND_COLOR);
- effeqwindow->labeltype(FL_NO_LABEL);
- effeqwindow->labelfont(1);
- effeqwindow->labelsize(14);
- effeqwindow->labelcolor(FL_FOREGROUND_COLOR);
- effeqwindow->user_data((void*)(this));
- effeqwindow->align(Fl_Align(FL_ALIGN_TOP));
- effeqwindow->when(FL_WHEN_RELEASE);
- { Fl_Text_Display* o = new Fl_Text_Display(170, 5, 15, 25, "EQ");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { Fl_Counter* o = bandcounter = new Fl_Counter(85, 15, 45, 15, "Band");
- bandcounter->tooltip("Band no.");
- bandcounter->type(1);
- bandcounter->labelfont(1);
- bandcounter->labelsize(11);
- bandcounter->minimum(0);
- bandcounter->maximum(1);
- bandcounter->step(1);
- bandcounter->textfont(1);
- bandcounter->textsize(11);
- bandcounter->callback((Fl_Callback*)cb_bandcounter1);
- bandcounter->align(Fl_Align(FL_ALIGN_TOP));
- o->bounds(0,MAX_EQ_BANDS-1);
- } // Fl_Counter* bandcounter
- { Fl_Group* o = bandgroup = new Fl_Group(5, 5, 75, 85);
- bandgroup->box(FL_ENGRAVED_FRAME);
- { freqdial = new WidgetPDial(10, 10, 25, 25, "Freq");
- freqdial->box(FL_ROUND_UP_BOX);
- freqdial->color(FL_BACKGROUND_COLOR);
- freqdial->selection_color(FL_INACTIVE_COLOR);
- freqdial->labeltype(FL_NORMAL_LABEL);
- freqdial->labelfont(1);
- freqdial->labelsize(10);
- freqdial->labelcolor(FL_FOREGROUND_COLOR);
- freqdial->maximum(127);
- freqdial->callback((Fl_Callback*)cb_freqdial1);
- freqdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- freqdial->when(3);
- } // WidgetPDial* freqdial
- { gaindial = new WidgetPDial(45, 10, 25, 25, "Gain");
- gaindial->box(FL_ROUND_UP_BOX);
- gaindial->color(FL_BACKGROUND_COLOR);
- gaindial->selection_color(FL_INACTIVE_COLOR);
- gaindial->labeltype(FL_NORMAL_LABEL);
- gaindial->labelfont(1);
- gaindial->labelsize(10);
- gaindial->labelcolor(FL_FOREGROUND_COLOR);
- gaindial->maximum(127);
- gaindial->step(1);
- gaindial->callback((Fl_Callback*)cb_gaindial1);
- gaindial->align(Fl_Align(FL_ALIGN_BOTTOM));
- gaindial->when(3);
- } // WidgetPDial* gaindial
- { qdial = new WidgetPDial(10, 50, 25, 25, "Q");
- qdial->tooltip("Bandwidth/Resonance");
- qdial->box(FL_ROUND_UP_BOX);
- qdial->color(FL_BACKGROUND_COLOR);
- qdial->selection_color(FL_INACTIVE_COLOR);
- qdial->labeltype(FL_NORMAL_LABEL);
- qdial->labelfont(1);
- qdial->labelsize(10);
- qdial->labelcolor(FL_FOREGROUND_COLOR);
- qdial->maximum(127);
- qdial->callback((Fl_Callback*)cb_qdial1);
- qdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- qdial->when(3);
- } // WidgetPDial* qdial
- { Fl_Counter* o = stagescounter = new Fl_Counter(40, 55, 30, 15, "Stages");
- stagescounter->tooltip("Additional filter stages");
- stagescounter->type(1);
- stagescounter->labelfont(1);
- stagescounter->labelsize(10);
- stagescounter->minimum(1);
- stagescounter->maximum(127);
- stagescounter->step(1);
- stagescounter->textfont(1);
- stagescounter->textsize(11);
- stagescounter->callback((Fl_Callback*)cb_stagescounter1);
- o->bounds(0,MAX_FILTER_STAGES-1);
- } // Fl_Counter* stagescounter
- if (eff->geteffectpar(10)==0) o->deactivate();
- bandgroup->end();
- } // Fl_Group* bandgroup
- { typechoice = new Fl_Choice(135, 15, 40, 15, "Type");
- typechoice->tooltip("Type");
- typechoice->down_box(FL_BORDER_BOX);
- typechoice->labelfont(1);
- typechoice->labelsize(10);
- typechoice->textsize(10);
- typechoice->callback((Fl_Callback*)cb_typechoice1);
- typechoice->align(Fl_Align(FL_ALIGN_TOP));
- typechoice->when(FL_WHEN_RELEASE_ALWAYS);
- typechoice->menu(menu_typechoice1);
- } // Fl_Choice* typechoice
- { EQGraph* o = eqgraph = new EQGraph(85, 35, 140, 55);
- eqgraph->box(FL_BORDER_BOX);
- eqgraph->color((Fl_Color)178);
- eqgraph->selection_color(FL_BACKGROUND_COLOR);
- eqgraph->labeltype(FL_NORMAL_LABEL);
- eqgraph->labelfont(0);
- eqgraph->labelsize(14);
- eqgraph->labelcolor(FL_FOREGROUND_COLOR);
- eqgraph->align(Fl_Align(FL_ALIGN_CENTER));
- eqgraph->when(FL_WHEN_RELEASE);
- o->init(eff);
- } // EQGraph* eqgraph
- effeqwindow->end();
- } // Fl_Group* effeqwindow
- return effeqwindow;
-}
-
-Fl_Group* SimpleEffUI::make_dynamicfilter_window() {
- { effdynamicfilterwindow = new Fl_Group(0, 0, 230, 95);
- effdynamicfilterwindow->box(FL_PLASTIC_UP_BOX);
- effdynamicfilterwindow->color((Fl_Color)221);
- effdynamicfilterwindow->selection_color(FL_BACKGROUND_COLOR);
- effdynamicfilterwindow->labeltype(FL_NO_LABEL);
- effdynamicfilterwindow->labelfont(1);
- effdynamicfilterwindow->labelsize(14);
- effdynamicfilterwindow->labelcolor(FL_FOREGROUND_COLOR);
- effdynamicfilterwindow->user_data((void*)(this));
- effdynamicfilterwindow->align(Fl_Align(FL_ALIGN_TOP));
- effdynamicfilterwindow->when(FL_WHEN_RELEASE);
- { dfp = new Fl_Choice(10, 15, 90, 15, "Preset");
- dfp->down_box(FL_BORDER_BOX);
- dfp->color((Fl_Color)14);
- dfp->selection_color(FL_FOREGROUND_COLOR);
- dfp->labelfont(1);
- dfp->labelsize(10);
- dfp->textfont(1);
- dfp->textsize(10);
- dfp->textcolor(FL_BACKGROUND2_COLOR);
- dfp->callback((Fl_Callback*)cb_dfpa);
- dfp->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- dfp->menu(menu_dfp1);
- } // Fl_Choice* dfp
- { Fl_Text_Display* o = new Fl_Text_Display(100, 10, 10, 20, "DynFilter");
- o->box(FL_NO_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Text_Display* o
- { dfp0 = new WidgetPDial(10, 40, 30, 30, "Vol");
- dfp0->tooltip("Effect Volume");
- dfp0->box(FL_ROUND_UP_BOX);
- dfp0->color(FL_BACKGROUND_COLOR);
- dfp0->selection_color(FL_INACTIVE_COLOR);
- dfp0->labeltype(FL_NORMAL_LABEL);
- dfp0->labelfont(1);
- dfp0->labelsize(11);
- dfp0->labelcolor(FL_FOREGROUND_COLOR);
- dfp0->maximum(127);
- dfp0->callback((Fl_Callback*)cb_dfp01);
- dfp0->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp0->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp0
- { dfp2 = new WidgetPDial(45, 40, 30, 30, "Freq");
- dfp2->tooltip("LFO frequency");
- dfp2->box(FL_ROUND_UP_BOX);
- dfp2->color(FL_BACKGROUND_COLOR);
- dfp2->selection_color(FL_INACTIVE_COLOR);
- dfp2->labeltype(FL_NORMAL_LABEL);
- dfp2->labelfont(1);
- dfp2->labelsize(11);
- dfp2->labelcolor(FL_FOREGROUND_COLOR);
- dfp2->maximum(127);
- dfp2->callback((Fl_Callback*)cb_dfp21);
- dfp2->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp2
- { dfp6 = new WidgetPDial(80, 40, 30, 30, "LfoD");
- dfp6->tooltip("LFO depth");
- dfp6->box(FL_ROUND_UP_BOX);
- dfp6->color(FL_BACKGROUND_COLOR);
- dfp6->selection_color(FL_INACTIVE_COLOR);
- dfp6->labeltype(FL_NORMAL_LABEL);
- dfp6->labelfont(1);
- dfp6->labelsize(11);
- dfp6->labelcolor(FL_FOREGROUND_COLOR);
- dfp6->maximum(127);
- dfp6->callback((Fl_Callback*)cb_dfp61);
- dfp6->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp6->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp6
- { Fl_Group* o = new Fl_Group(115, 40, 65, 45);
- o->box(FL_BORDER_BOX);
- o->color((Fl_Color)181);
- { dfp7 = new WidgetPDial(120, 45, 25, 25, "A.S.");
- dfp7->tooltip("how filter varies with amplitude");
- dfp7->box(FL_ROUND_UP_BOX);
- dfp7->color(FL_BACKGROUND_COLOR);
- dfp7->selection_color(FL_INACTIVE_COLOR);
- dfp7->labeltype(FL_NORMAL_LABEL);
- dfp7->labelfont(1);
- dfp7->labelsize(11);
- dfp7->labelcolor(FL_FOREGROUND_COLOR);
- dfp7->maximum(127);
- dfp7->callback((Fl_Callback*)cb_dfp71);
- dfp7->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp7->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp7
- { dfp9 = new WidgetPDial(150, 45, 25, 25, "A.M");
- dfp9->tooltip("how quickly the filter varies with amplitude");
- dfp9->box(FL_ROUND_UP_BOX);
- dfp9->color(FL_BACKGROUND_COLOR);
- dfp9->selection_color(FL_INACTIVE_COLOR);
- dfp9->labeltype(FL_NORMAL_LABEL);
- dfp9->labelfont(1);
- dfp9->labelsize(11);
- dfp9->labelcolor(FL_FOREGROUND_COLOR);
- dfp9->maximum(127);
- dfp9->callback((Fl_Callback*)cb_dfp91);
- dfp9->align(Fl_Align(FL_ALIGN_BOTTOM));
- dfp9->when(FL_WHEN_CHANGED);
- } // WidgetPDial* dfp9
- o->end();
- } // Fl_Group* o
- effdynamicfilterwindow->end();
- } // Fl_Group* effdynamicfilterwindow
- return effdynamicfilterwindow;
-}
-
-void SimpleEffUI::init(EffectMgr *eff_) {
- eff=eff_;
-
- make_null_window();
- make_reverb_window();
- make_echo_window();
- make_chorus_window();
- make_phaser_window();
- make_alienwah_window();
- make_distorsion_window();
- make_eq_window();
- make_dynamicfilter_window();
-
- int px=this->parent()->x();
- int py=this->parent()->y();
-
- effnullwindow->position(px,py);
- effreverbwindow->position(px,py);
- effechowindow->position(px,py);
- effchoruswindow->position(px,py);
- effphaserwindow->position(px,py);
- effalienwahwindow->position(px,py);
- effdistorsionwindow->position(px,py);
- effeqwindow->position(px,py);
- effdynamicfilterwindow->position(px,py);
-
- refresh(eff);
-}
-
-void SimpleEffUI::refresh(EffectMgr *eff_) {
- eff=eff_;
- this->hide();
-
- effnullwindow->hide();
- effreverbwindow->hide();
- effechowindow->hide();
- effchoruswindow->hide();
- effphaserwindow->hide();
- effalienwahwindow->hide();
- effdistorsionwindow->hide();
- effeqwindow->hide();
- effdynamicfilterwindow->hide();
-
- eqband=0;
-
-
- switch(eff->geteffect()){
- case 1:
- revp->value(eff->getpreset());
- revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
- revp2->value(eff->geteffectpar(2));
- revp3->value(eff->geteffectpar(3));
- revp9->value(eff->geteffectpar(9));
- effreverbwindow->show();
- break;
- case 2:
- echop->value(eff->getpreset());
- echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
- echop2->value(eff->geteffectpar(2));
- echop5->value(eff->geteffectpar(5));
- effechowindow->show();
- break;
- case 3:
- chorusp->value(eff->getpreset());
- chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
- chorusp2->value(eff->geteffectpar(2));
- chorusp6->value(eff->geteffectpar(6));
- chorusp7->value(eff->geteffectpar(7));
- chorusp8->value(eff->geteffectpar(8));
- effchoruswindow->show();
- break;
- case 4:
- phaserp->value(eff->getpreset());
- phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
- phaserp2->value(eff->geteffectpar(2));
- phaserp5->value(eff->geteffectpar(5));
- phaserp6->value(eff->geteffectpar(6));
- phaserp7->value(eff->geteffectpar(7));
- phaserp8->value(eff->geteffectpar(8));
- effphaserwindow->show();
- break;
- case 5:
- awp->value(eff->getpreset());
- awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
- awp2->value(eff->geteffectpar(2));
- awp6->value(eff->geteffectpar(6));
- awp8->value(eff->geteffectpar(8));
- effalienwahwindow->show();
- break;
- case 6:
- distp->value(eff->getpreset());
- distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
- distp3->value(eff->geteffectpar(3));
- distp4->value(eff->geteffectpar(4));
- distp5->value(eff->geteffectpar(5));
- distp7->value(eff->geteffectpar(7));
- effdistorsionwindow->show();
- break;
- case 7:
- bandcounter->value(eqband);
- bandcounter->do_callback();
- typechoice->value(eff->geteffectpar(10));
- eqgraph->redraw();
- freqdial->value(eff->geteffectpar(11));
- gaindial->value(eff->geteffectpar(12));
- if (eff->geteffectpar(10)<6) gaindial->deactivate();
- qdial->value(eff->geteffectpar(13));
- stagescounter->value(eff->geteffectpar(14));
- eqgraph->init(eff);
- effeqwindow->show();
- break;
- case 8:
- dfp->value(eff->getpreset());
- dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
- dfp2->value(eff->geteffectpar(2));
- dfp6->value(eff->geteffectpar(6));
- dfp7->value(eff->geteffectpar(7));
- dfp9->value(eff->geteffectpar(9));
-
-
- effdynamicfilterwindow->show();
- break;
- default:effnullwindow->show();
- break;
- };
-
- this->show();
-}
-
-void SimpleEffUI::refresh() {
- refresh(eff);
-}
diff --git a/plugins/zynaddsubfx/src/UI/EffUI.fl b/plugins/zynaddsubfx/src/UI/EffUI.fl
deleted file mode 100644
index d82099c..0000000
--- a/plugins/zynaddsubfx/src/UI/EffUI.fl
+++ /dev/null
@@ -1,2361 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0107
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <string.h>} {public
-}
-
-decl {\#include "../globals.h"} {public
-}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include "EnvelopeUI.h"} {public
-}
-
-decl {\#include "FilterUI.h"} {public
-}
-
-decl {\#include "../Misc/Util.h"} {public
-}
-
-decl {\#include "../Effects/EffectMgr.h"} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class EQGraph {: {public Fl_Box}
-} {
- Function {EQGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {eff=NULL;
-maxdB=30;} {}
- }
- Function {init(EffectMgr *eff_)} {} {
- code {eff=eff_;
-oldx=-1;
-khzval=-1;} {}
- }
- Function {draw_freq_line(REALTYPE freq,int type)} {} {
- code {fl_color(FL_GRAY);
-REALTYPE freqx=getfreqpos(freq);
-switch(type){
- case 0:if (active_r()) fl_color(FL_WHITE);
- else fl_color(205,205,205);
- fl_line_style(FL_SOLID);
- break;
- case 1:fl_line_style(FL_DOT);break;
- case 2:fl_line_style(FL_DASH);break;
-};
-
-
-if ((freqx>0.0)&&(freqx<1.0))
- fl_line(x()+(int) (freqx*w()),y(),
- x()+(int) (freqx*w()),y()+h());} {}
- }
- Function {draw()} {} {
- code {int ox=x(),oy=y(),lx=w(),ly=h(),i,iy,oiy;
-REALTYPE freqx;
-
-if (active_r()) fl_color(0,70,150);
- else fl_color(80,120,160);
-fl_rectf(ox,oy,lx,ly);
-
-
-//draw the lines
-fl_color(FL_GRAY);
-
-fl_line_style(FL_SOLID);
-fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-
-freqx=getfreqpos(1000.0);
-if ((freqx>0.0)&&(freqx<1.0))
- fl_line(ox+(int) (freqx*lx),oy,
- ox+(int) (freqx*lx),oy+ly);
-
-for (i=1;i<10;i++){
- if(i==1){
- draw_freq_line(i*100.0,0);
- draw_freq_line(i*1000.0,0);
- }else
- if (i==5){
- draw_freq_line(i*10.0,2);
- draw_freq_line(i*100.0,2);
- draw_freq_line(i*1000.0,2);
- }else{
- draw_freq_line(i*10.0,1);
- draw_freq_line(i*100.0,1);
- draw_freq_line(i*1000.0,1);
- };
-};
-
-draw_freq_line(10000.0,0);
-draw_freq_line(20000.0,1);
-
-
-fl_line_style(FL_DOT);
-int GY=6;if (ly<GY*3) GY=-1;
-for (i=1;i<GY;i++){
- int tmp=(int)(ly/(REALTYPE)GY*i);
- fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
-};
-
-
-//draw the frequency response
-if (active_r()) fl_color(FL_YELLOW);
- else fl_color(200,200,80);
-fl_line_style(FL_SOLID);
-oiy=getresponse(ly,getfreqx(0.0));
-for (i=1;i<lx;i++){
- REALTYPE frq=getfreqx(i/(REALTYPE) lx);
- if (frq>SAMPLE_RATE/2) break;
- iy=getresponse(ly,frq);
- if ((oiy>=0) && (oiy<ly) &&
- (iy>=0) && (iy<ly) )
- fl_line(ox+i-1,oy+ly-oiy,ox+i,oy+ly-iy);
- oiy=iy;
-};} {}
- }
- Function {getresponse(int maxy,REALTYPE freq)} {return_type int
- } {
- code {REALTYPE dbresp=eff->getEQfreqresponse(freq);
-int idbresp=(int) ((dbresp/maxdB+1.0)*maxy/2.0);
-
-
-//fprintf(stderr,"%.5f\\n",(dbresp/maxdB+1.0)*maxy/2.0);
-
-
-return(idbresp);} {}
- }
- Function {getfreqx(REALTYPE x)} {return_type REALTYPE
- } {
- code {if (x>1.0) x=1.0;
-return(20.0*pow((REALTYPE)1000.0,x));} {}
- }
- Function {getfreqpos(REALTYPE freq)} {return_type REALTYPE
- } {
- code {if (freq<0.00001) freq=0.00001;
-return(log(freq/20.0)/log(1000.0));} {}
- }
- decl {int oldx;} {}
- decl {REALTYPE khzval;} {public
- }
- decl {EffectMgr *eff;} {}
- decl {int maxdB;} {}
-}
-
-class EffUI {: {public Fl_Group,public PresetsUI_}
-} {
- Function {EffUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {eff=NULL;
-filterwindow=NULL;} {}
- }
- Function {~EffUI()} {} {
- code {effnullwindow->hide();//delete (effnullwindow);
-effreverbwindow->hide();//delete (effreverbwindow);
-effechowindow->hide();//delete (effechowindow);
-effchoruswindow->hide();//delete (effchoruswindow);
-effphaserwindow->hide();//delete (effphaserwindow);
-effalienwahwindow->hide();//delete (effalienwahwindow);
-effdistorsionwindow->hide();//delete (effdistorsionwindow);
-effeqwindow->hide();//delete (effeqwindow);
-effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);
-
-if (filterwindow!=NULL){
- filterwindow->hide();
- delete(filterwindow);
-};} {}
- }
- Function {make_null_window()} {} {
- Fl_Window effnullwindow {
- xywh {216 539 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Text_Display {} {
- label {No Effect}
- xywh {120 35 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 labelcolor 43 align 8
- }
- }
- }
- Function {make_reverb_window()} {} {
- Fl_Window effreverbwindow {
- xywh {343 337 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Text_Display {} {
- label {Reverb }
- xywh {275 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Choice revp {
- label Preset
- callback {eff->changepreset((int)o->value());
-
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Cathedral 1}
- xywh {10 10 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Cathedral 2}
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Cathedral 3}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Hall 1}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Hall 2}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Room 1}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Room 2}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Basement
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Tunnel
- xywh {90 90 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Echoed 1}
- xywh {100 100 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Echoed 2}
- xywh {110 110 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Very Long 1}
- xywh {120 120 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Very Long 2}
- xywh {130 130 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Choice revp10 {
- label Type
- callback {eff->seteffectpar(10,(int) o->value());
-if (eff->geteffectpar(10)==2) revp12->activate();
- else revp12->deactivate();}
- xywh {110 15 85 15} down_box BORDER_BOX color 14 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label Random
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Freeverb
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Bandwidth
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Dial revp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp1 {
- label Pan
- callback {eff->seteffectpar(1,(int) o->value());}
- xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp2 {
- label Time
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {Duration of Effect} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp3 {
- label {I.del}
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {Initial Delay} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp4 {
- label {I.delfb}
- callback {eff->seteffectpar(4,(int) o->value());}
- tooltip {Initial Delay Feedback} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp12 {
- label bw
- callback {eff->seteffectpar(12,(int) o->value());}
- xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 deactivate
- code0 {if (eff->geteffectpar(10)==2) o->activate();}
- class WidgetPDial
- }
- Fl_Dial revp6 {
- label {E/R}
- callback {eff->seteffectpar(6,(int) o->value());}
- xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 deactivate
- class WidgetPDial
- }
- Fl_Dial revp7 {
- label LPF
- callback {eff->seteffectpar(7,(int) o->value());}
- tooltip {Low Pass Filter} xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp8 {
- label HPF
- callback {eff->seteffectpar(8,(int) o->value());}
- tooltip {High Pass Filter} xywh {305 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp9 {
- label Damp
- callback {eff->seteffectpar(9,(int) o->value());}
- tooltip Dampening xywh {340 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 minimum 64 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial revp11 {
- label {R.S.}
- callback {int x=64;
-if (Fl::event_button1()) x=(int)o->value();
- else o->value(x);
-eff->seteffectpar(11,x);}
- tooltip RoomSize xywh {200 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 8 align 8 minimum 1 maximum 127 step 1
- class WidgetPDial
- }
- }
- }
- Function {make_echo_window()} {} {
- Fl_Window effechowindow {
- xywh {318 364 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice echop {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {11 15 95 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Echo 1}
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Echo 2}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Echo 3}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Simple Echo}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Canyon
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Panning Echo 1}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Panning Echo 2}
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Panning Echo 3}
- xywh {90 90 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Feedback Echo}
- xywh {100 100 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label Echo
- xywh {295 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial echop0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial echop1 {
- label Pan
- callback {eff->seteffectpar(1,(int) o->value());}
- xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial echop2 {
- label Delay
- callback {eff->seteffectpar(2,(int) o->value());}
- xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial echop3 {
- label {LRdl.}
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {Delay Between L/R} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial echop4 {
- label {LRc.}
- callback {eff->seteffectpar(4,(int) o->value());}
- tooltip {L/R Crossover} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial echop5 {
- label {Fb.}
- callback {eff->seteffectpar(5,(int) o->value());}
- tooltip Feedback xywh {195 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial echop6 {
- label Damp
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip Dampening xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- }
- }
- Function {make_chorus_window()} {} {
- Fl_Window effchoruswindow {
- xywh {372 287 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice chorusp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Chorus 1}
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Chorus 2}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Chorus 3}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Celeste 1}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Celeste 2}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 1}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 2}
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 3}
- xywh {90 90 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 4}
- xywh {100 100 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 5}
- xywh {110 110 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label Chorus
- xywh {265 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial chorusp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp1 {
- label Pan
- callback {eff->seteffectpar(1,(int) o->value());}
- xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp2 {
- label Freq
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp3 {
- label Rnd
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp5 {
- label {St.df}
- callback {eff->seteffectpar(5,(int) o->value());}
- tooltip {L/R Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp6 {
- label Dpth
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip {LFO Depth} xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp7 {
- label Delay
- callback {eff->seteffectpar(7,(int) o->value());}
- xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp8 {
- label Fb
- callback {eff->seteffectpar(8,(int) o->value());}
- tooltip Feedback xywh {305 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp9 {
- label {L/R}
- callback {eff->seteffectpar(9,(int) o->value());}
- tooltip {Channel Routing} xywh {340 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Check_Button {} {
- label Flange
- callback {eff->seteffectpar(10,(int) o->value());}
- xywh {120 10 55 20} box THIN_UP_BOX down_box DOWN_BOX color 230 labelfont 1 labelsize 10 hide deactivate
- code0 {o->value(eff->geteffectpar(10));}
- }
- Fl_Check_Button chorusp11 {
- label Substract
- callback {eff->seteffectpar(11,(int) o->value());}
- tooltip {inverts the output} xywh {185 10 70 20} box THIN_UP_BOX down_box DOWN_BOX color 230 labelfont 1 labelsize 10
- }
- Fl_Choice chorusp4 {
- label {LFO type}
- callback {eff->seteffectpar(4,(int) o->value());}
- tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8
- } {
- MenuItem {} {
- label SINE
- xywh {15 15 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label TRI
- xywh {25 25 100 20} labelfont 1 labelsize 10
- }
- }
- }
- }
- Function {make_phaser_window()} {} {
- Fl_Window effphaserwindow {
- xywh {75 25 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice phaserp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {10 15 100 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Phaser 1}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 2}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 3}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 4}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 5}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 6}
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {APhaser 1}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {APhaser 2}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {APhaser 3}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {APhaser 4}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {APhaser 5}
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {APhaser 6} selected
- xywh {90 90 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label Phaser
- xywh {275 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial phaserp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp1 {
- label Pan
- callback {eff->seteffectpar(1,(int) o->value());}
- xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp2 {
- label Freq
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {LFO frequency} xywh {85 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp3 {
- label Rnd
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {LFO randomness} xywh {120 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Choice phaserp4 {
- label LFO
- callback {eff->seteffectpar(4,(int) o->value());}
- tooltip {LFO function} xywh {245 55 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8
- } {
- MenuItem {} {
- label SIN
- xywh {15 15 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label TRI
- xywh {25 25 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial phaserp5 {
- label {St.df}
- callback {eff->seteffectpar(5,(int) o->value());}
- tooltip {Left/Right Channel Phase Shift} xywh {155 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp6 {
- label Dpth
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip {LFO Depth} xywh {120 5 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp7 {
- label Fb
- callback {eff->seteffectpar(7,(int) o->value());}
- tooltip Feedback xywh {185 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Counter phaserp8 {
- label Stages
- callback {eff->seteffectpar(8,(int) o->value());}
- xywh {290 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1
- code0 {o->range(1,MAX_PHASER_STAGES);}
- }
- Fl_Dial phaserp9 {
- label {L/R}
- callback {eff->seteffectpar(9,(int) o->value());}
- tooltip {Channel Routing} xywh {215 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Check_Button phaserp10 {
- label Substract
- callback {eff->seteffectpar(10,(int) o->value());}
- tooltip {inverts output} xywh {200 10 74 20} box THIN_UP_BOX down_box DOWN_BOX color 230 labelfont 1 labelsize 10
- }
- Fl_Dial phaserp11 {
- label Phase
- callback {eff->seteffectpar(11,(int) o->value());}
- xywh {155 5 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 maximum 127
- class WidgetPDial
- }
- Fl_Check_Button phaserp12 {
- label {hyp.}
- callback {eff->seteffectpar(12,(int) o->value());}
- tooltip hyper xywh {245 35 55 15} down_box DOWN_BOX
- }
- Fl_Dial phaserp13 {
- label dist
- callback {eff->seteffectpar(13,(int) o->value());}
- tooltip Distortion xywh {340 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Check_Button phaserp14 {
- label Analog
- callback {eff->seteffectpar(14,(int) o->value());}
- xywh {305 35 70 15} down_box DOWN_BOX
- }
- }
- }
- Function {make_alienwah_window()} {} {
- Fl_Window effalienwahwindow {
- xywh {538 250 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice awp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Alienwah 1}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Alienwah 2}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Alienwah 3}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Alienwah 4}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label AlienWah
- xywh {245 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial awp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp1 {
- label Pan
- callback {eff->seteffectpar(1,(int) o->value());}
- xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp2 {
- label Freq
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp3 {
- label Rnd
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp5 {
- label {St.df}
- callback {eff->seteffectpar(5,(int) o->value());}
- tooltip {Left/Right Channel Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp6 {
- label Dpth
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip Depth xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp7 {
- label Fb
- callback {eff->seteffectpar(7,(int) o->value());}
- tooltip Feedback xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp9 {
- label {L/R}
- callback {eff->seteffectpar(9,(int) o->value());}
- xywh {345 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Choice awp4 {
- label {LFO type}
- callback {eff->seteffectpar(4,(int) o->value());}
- tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8
- } {
- MenuItem {} {
- label SINE
- xywh {15 15 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label TRI
- xywh {25 25 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial awp10 {
- label Phase
- callback {eff->seteffectpar(10,(int) o->value());}
- xywh {160 5 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Counter awp8 {
- label Delay
- callback {eff->seteffectpar(8,(int) o->value());}
- xywh {305 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1
- code0 {o->range(1,MAX_ALIENWAH_DELAY);}
- }
- }
- }
- Function {make_distorsion_window()} {} {
- Fl_Window effdistorsionwindow {
- xywh {409 143 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice distp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {11 15 95 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Overdrive 1}
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Overdrive 2}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {A. Exciter 1}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {A. Exciter 2}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Guitar Amp}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Quantisize
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label Distortion
- xywh {230 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial distp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp1 {
- label Pan
- callback {eff->seteffectpar(1,(int) o->value());}
- xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp2 {
- label {LRc.}
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {L/R Mix} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp3 {
- label Drive
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {Input Amplification} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp4 {
- label Level
- callback {eff->seteffectpar(4,(int) o->value());}
- tooltip {Output Amplification} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp7 {
- label LPF
- callback {eff->seteffectpar(7,(int) o->value());}
- tooltip {Low Pass Filter} xywh {285 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp8 {
- label HPF
- callback {eff->seteffectpar(8,(int) o->value());}
- tooltip {High Pass Filter} xywh {320 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Choice distp5 {
- label Type
- callback {eff->seteffectpar(5,(int) o->value());}
- xywh {190 50 60 20} box UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 align 2 textsize 10
- } {
- MenuItem {} {
- label Atan
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Asym1
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sine
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Qnts
- xywh {95 95 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Zigzg
- xywh {105 105 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Lmt
- xywh {115 115 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LmtU
- xywh {125 125 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LmtL
- xywh {135 135 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label ILmt
- xywh {147 147 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Clip
- xywh {157 157 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Asym2
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow2
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sgm
- xywh {95 95 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Check_Button distp6 {
- label {Neg.}
- callback {eff->seteffectpar(6,(int) o->value());}
- xywh {260 55 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2
- }
- Fl_Check_Button distp9 {
- label {St.}
- callback {eff->seteffectpar(9,(int) o->value());}
- tooltip Stereo xywh {355 60 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2
- }
- Fl_Check_Button distp10 {
- label PF
- callback {eff->seteffectpar(10,(int) o->value());}
- tooltip {Applies the filters(before or after) the distorsion} xywh {355 44 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 1
- }
- }
- }
- Function {make_eq_window()} {} {
- Fl_Window effeqwindow {
- xywh {258 307 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Text_Display {} {
- label EQ
- xywh {320 10 15 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial eqp0 {
- label Gain
- callback {eff->seteffectpar(0,(int) o->value());
-eqgraph->redraw();}
- xywh {10 35 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Counter bandcounter {
- label {B.}
- callback {eqband=(int) o->value();
-int npb=eqband*5+10;
-
-int type=eff->geteffectpar(npb);
-typechoice->value(type);
-
-if (type>6) gaindial->activate();
- else gaindial->deactivate();
-
-if (type==0) bandgroup->deactivate();
-else bandgroup->activate();
-
-int freq=eff->geteffectpar(npb+1);
-freqdial->value(freq);
-
-int gain=eff->geteffectpar(npb+2);
-gaindial->value(gain);
-
-int q=eff->geteffectpar(npb+3);
-qdial->value(q);
-
-int dbl=eff->geteffectpar(npb+4);
-stagescounter->value(dbl);}
- tooltip {Band no.} xywh {240 20 45 15} type Simple labelfont 1 labelsize 11 align 1 minimum 0 maximum 1 step 1 textfont 1 textsize 11
- code0 {o->bounds(0,MAX_EQ_BANDS-1);}
- }
- Fl_Group bandgroup {
- xywh {245 40 130 50} box ENGRAVED_FRAME
- code0 {if (eff->geteffectpar(10)==0) o->deactivate();}
- } {
- Fl_Dial freqdial {
- label Freq
- callback {int np=eqband*5+11;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();}
- xywh {250 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127
- class WidgetPDial
- }
- Fl_Dial gaindial {
- label Gain
- callback {int np=eqband*5+12;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();}
- xywh {280 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial qdial {
- label Q
- callback {int np=eqband*5+13;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();}
- tooltip {Resonance/Bandwidth} xywh {310 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127
- class WidgetPDial
- }
- Fl_Counter stagescounter {
- label {St.}
- callback {int np=eqband*5+14;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();}
- tooltip {Additional filter stages} xywh {340 60 30 15} type Simple labelfont 1 labelsize 10 minimum 1 maximum 127 step 1 textfont 1 textsize 11
- code0 {o->bounds(0,MAX_FILTER_STAGES-1);}
- }
- }
- Fl_Choice typechoice {
- label {T.}
- callback {int np=eqband*5+10;
-eff->seteffectpar(np,(int) o->value());
-bandcounter->do_callback();
-eqgraph->redraw();}
- tooltip Type xywh {290 20 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 when 6 textsize 10
- } {
- MenuItem {} {
- label OFF
- xywh {0 0 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Lp1
- xywh {10 10 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Hp1
- xywh {20 20 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Lp2
- xywh {30 30 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Hp2
- xywh {40 40 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Bp2
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label N2
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pk
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LSh
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label HSh
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Box eqgraph {
- xywh {45 10 190 75} box BORDER_BOX color 178
- code0 {o->init(eff);}
- class EQGraph
- }
- }
- }
- Function {make_dynamicfilter_window()} {} {
- Fl_Window effdynamicfilterwindow {
- xywh {570 56 380 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice dfp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label WahWah
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label AutoWah
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Sweep
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label VocalMorph1
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label VocalMorph2
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label DynFilter
- xywh {245 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial dfp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp1 {
- label Pan
- callback {eff->seteffectpar(1,(int) o->value());}
- xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp2 {
- label Freq
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp3 {
- label Rnd
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp5 {
- label {St.df}
- callback {eff->seteffectpar(5,(int) o->value());}
- tooltip {Left/Right Channel Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp6 {
- label LfoD
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip {LFO Depth} xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Choice dfp4 {
- label {LFO type}
- callback {eff->seteffectpar(4,(int) o->value());}
- tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8
- } {
- MenuItem {} {
- label SINE
- xywh {15 15 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label TRI
- xywh {25 25 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Button {} {
- label Filter
- callback {filterwindow->show();}
- xywh {115 10 55 25} box PLASTIC_THIN_UP_BOX
- }
- Fl_Group {} {
- xywh {270 40 105 45} box BORDER_BOX color 181
- } {
- Fl_Dial dfp7 {
- label {A.S.}
- callback {eff->seteffectpar(7,(int) o->value());}
- tooltip {Filter vs Amplitude} xywh {275 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp9 {
- label {A.M}
- callback {eff->seteffectpar(9,(int) o->value());}
- tooltip {rate that amplitude changes the filter} xywh {305 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Check_Button dfp8 {
- label {A.Inv.}
- callback {eff->seteffectpar(8,(int) o->value());}
- tooltip {enable for filter frequency to lower with higher input amplitude} xywh {345 55 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2
- }
- }
- }
- }
- Function {make_filter_window()} {} {
- Fl_Window filterwindow {
- label {Filter Parameters for DynFilter Eff.}
- xywh {212 170 290 110} type Double hide
- } {
- Fl_Group {} {
- label {DynFilter effect - Filter}
- xywh {5 5 275 75} box FLAT_BOX color 50 align 144
- code0 {o->init(eff->filterpars,NULL,NULL);}
- code1 {o->use_for_dynamic_filter();}
- class FilterUI
- } {}
- Fl_Button {} {
- label Close
- callback {filterwindow->hide();}
- xywh {105 85 70 20} box THIN_UP_BOX
- }
- }
- }
- Function {init(EffectMgr *eff_)} {} {
- code {eff=eff_;
-
-make_null_window();
-make_reverb_window();
-make_echo_window();
-make_chorus_window();
-make_phaser_window();
-make_alienwah_window();
-make_distorsion_window();
-make_eq_window();
-make_dynamicfilter_window();
-
-int px=this->parent()->x();
-int py=this->parent()->y();
-
-effnullwindow->position(px,py);
-effreverbwindow->position(px,py);
-effechowindow->position(px,py);
-effchoruswindow->position(px,py);
-effphaserwindow->position(px,py);
-effalienwahwindow->position(px,py);
-effdistorsionwindow->position(px,py);
-effeqwindow->position(px,py);
-effdynamicfilterwindow->position(px,py);
-
-refresh(eff);} {}
- }
- Function {refresh(EffectMgr *eff_)} {open
- } {
- code {eff=eff_;
-this->hide();
-
-effnullwindow->hide();
-effreverbwindow->hide();
-effechowindow->hide();
-effchoruswindow->hide();
-effphaserwindow->hide();
-effalienwahwindow->hide();
-effdistorsionwindow->hide();
-effeqwindow->hide();
-effdynamicfilterwindow->hide();
-
-eqband=0;
-
-if (filterwindow!=NULL){
- filterwindow->hide();
- delete(filterwindow);
- filterwindow=NULL;
-};
-
-switch(eff->geteffect()){
- case 1:
- revp->value(eff->getpreset());
- revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
- revp1->value(eff->geteffectpar(1));
- revp2->value(eff->geteffectpar(2));
- revp3->value(eff->geteffectpar(3));
- revp4->value(eff->geteffectpar(4));
- //revp5->value(eff->geteffectpar(5));
- revp6->value(eff->geteffectpar(6));
- revp7->value(eff->geteffectpar(7));
- revp8->value(eff->geteffectpar(8));
- revp9->value(eff->geteffectpar(9));
- revp10->value(eff->geteffectpar(10));
- revp11->value(eff->geteffectpar(11));
- revp12->value(eff->geteffectpar(12));
-
- effreverbwindow->show();
- break;
- case 2:
- echop->value(eff->getpreset());
- echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
- echop1->value(eff->geteffectpar(1));
- echop2->value(eff->geteffectpar(2));
- echop3->value(eff->geteffectpar(3));
- echop4->value(eff->geteffectpar(4));
- echop5->value(eff->geteffectpar(5));
- echop6->value(eff->geteffectpar(6));
- effechowindow->show();
- break;
- case 3:
- chorusp->value(eff->getpreset());
- chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
- chorusp1->value(eff->geteffectpar(1));
- chorusp2->value(eff->geteffectpar(2));
- chorusp3->value(eff->geteffectpar(3));
- chorusp4->value(eff->geteffectpar(4));
- chorusp5->value(eff->geteffectpar(5));
- chorusp6->value(eff->geteffectpar(6));
- chorusp7->value(eff->geteffectpar(7));
- chorusp8->value(eff->geteffectpar(8));
- chorusp9->value(eff->geteffectpar(9));
- chorusp11->value(eff->geteffectpar(11));
- effchoruswindow->show();
- break;
- case 4:
- phaserp->value(eff->getpreset());
- phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
- phaserp1->value(eff->geteffectpar(1));
- phaserp2->value(eff->geteffectpar(2));
- phaserp3->value(eff->geteffectpar(3));
- phaserp4->value(eff->geteffectpar(4));
- phaserp5->value(eff->geteffectpar(5));
- phaserp6->value(eff->geteffectpar(6));
- phaserp7->value(eff->geteffectpar(7));
- phaserp8->value(eff->geteffectpar(8));
- phaserp9->value(eff->geteffectpar(9));
- phaserp10->value(eff->geteffectpar(10));
- phaserp11->value(eff->geteffectpar(11));
- phaserp12->value(eff->geteffectpar(12));
- phaserp13->value(eff->geteffectpar(13));
- phaserp14->value(eff->geteffectpar(14));
- effphaserwindow->show();
- break;
- case 5:
- awp->value(eff->getpreset());
- awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
- awp1->value(eff->geteffectpar(1));
- awp2->value(eff->geteffectpar(2));
- awp3->value(eff->geteffectpar(3));
- awp4->value(eff->geteffectpar(4));
- awp5->value(eff->geteffectpar(5));
- awp6->value(eff->geteffectpar(6));
- awp7->value(eff->geteffectpar(7));
- awp8->value(eff->geteffectpar(8));
- awp9->value(eff->geteffectpar(9));
- awp10->value(eff->geteffectpar(10));
-
- effalienwahwindow->show();
- break;
- case 6:
- distp->value(eff->getpreset());
- distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
- distp1->value(eff->geteffectpar(1));
- distp2->value(eff->geteffectpar(2));
- distp3->value(eff->geteffectpar(3));
- distp4->value(eff->geteffectpar(4));
- distp5->value(eff->geteffectpar(5));
- distp6->value(eff->geteffectpar(6));
- distp7->value(eff->geteffectpar(7));
- distp8->value(eff->geteffectpar(8));
- distp9->value(eff->geteffectpar(9));
- distp10->value(eff->geteffectpar(10));
- effdistorsionwindow->show();
- break;
- case 7:eqband=0;
- eqp0->value(eff->geteffectpar(0));
- bandcounter->value(eqband);
- bandcounter->do_callback();
- typechoice->value(eff->geteffectpar(10));
- eqgraph->redraw();
- freqdial->value(eff->geteffectpar(11));
- gaindial->value(eff->geteffectpar(12));
- if (eff->geteffectpar(10)<6) gaindial->deactivate();
- qdial->value(eff->geteffectpar(13));
- stagescounter->value(eff->geteffectpar(14));
- eqgraph->init(eff);
- effeqwindow->show();
- break;
- case 8:make_filter_window();
- dfp->value(eff->getpreset());
- dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
- dfp1->value(eff->geteffectpar(1));
- dfp2->value(eff->geteffectpar(2));
- dfp3->value(eff->geteffectpar(3));
- dfp4->value(eff->geteffectpar(4));
- dfp5->value(eff->geteffectpar(5));
- dfp6->value(eff->geteffectpar(6));
- dfp7->value(eff->geteffectpar(7));
- dfp8->value(eff->geteffectpar(8));
- dfp9->value(eff->geteffectpar(9));
-
-
- effdynamicfilterwindow->show();
- break;
- default:effnullwindow->show();
- break;
-};
-
-this->show();} {}
- }
- Function {refresh()} {open
- } {
- code {refresh(eff);} {}
- }
- decl {EffectMgr *eff;} {}
- decl {int eqband;} {}
-}
-
-class SimpleEffUI {: {public Fl_Group,public PresetsUI_}
-} {
- Function {SimpleEffUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {eff=NULL;} {}
- }
- Function {~SimpleEffUI()} {} {
- code {effnullwindow->hide();//delete (effnullwindow);
-effreverbwindow->hide();//delete (effreverbwindow);
-effechowindow->hide();//delete (effechowindow);
-effchoruswindow->hide();//delete (effchoruswindow);
-effphaserwindow->hide();//delete (effphaserwindow);
-effalienwahwindow->hide();//delete (effalienwahwindow);
-effdistorsionwindow->hide();//delete (effdistorsionwindow);
-effeqwindow->hide();//delete (effeqwindow);
-effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);} {}
- }
- Function {make_null_window()} {} {
- Fl_Window effnullwindow {
- xywh {539 150 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Text_Display {} {
- label {No Effect}
- xywh {25 35 35 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 labelcolor 43 align 8
- }
- }
- }
- Function {make_reverb_window()} {} {
- Fl_Window effreverbwindow {
- xywh {398 298 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Text_Display {} {
- label {Reverb }
- xywh {115 10 20 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Choice revp {
- label Preset
- callback {eff->changepreset((int)o->value());
-
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Cathedral 1}
- xywh {10 10 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Cathedral 2}
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Cathedral 3}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Hall 1}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Hall 2}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Room 1}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Room 2}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Basement
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Tunnel
- xywh {90 90 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Echoed 1}
- xywh {100 100 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Echoed 2}
- xywh {110 110 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Very Long 1}
- xywh {120 120 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Very Long 2}
- xywh {130 130 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Dial revp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp2 {
- label Time
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {Duration of Reverb} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp3 {
- label {I.del}
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {Initial Delay} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial revp9 {
- label Damp
- callback {eff->seteffectpar(9,(int) o->value());}
- tooltip Dampening xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 minimum 64 maximum 127 step 1
- class WidgetPDial
- }
- }
- }
- Function {make_echo_window()} {} {
- Fl_Window effechowindow {
- xywh {243 350 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice echop {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {11 15 95 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Echo 1}
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Echo 2}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Echo 3}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Simple Echo}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Canyon
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Panning Echo 1}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Panning Echo 2}
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Panning Echo 3}
- xywh {90 90 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Feedback Echo}
- xywh {100 100 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label Echo
- xywh {145 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial echop0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial echop2 {
- label Delay
- callback {eff->seteffectpar(2,(int) o->value());}
- xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial echop5 {
- label {Fb.}
- callback {eff->seteffectpar(5,(int) o->value());}
- tooltip Feedback xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- }
- }
- Function {make_chorus_window()} {} {
- Fl_Window effchoruswindow {
- xywh {234 353 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice chorusp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Chorus 1}
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Chorus 2}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Chorus 3}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Celeste 1}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Celeste 2}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 1}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 2}
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 3}
- xywh {90 90 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 4}
- xywh {100 100 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Flange 5}
- xywh {110 110 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label Chorus
- xywh {120 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial chorusp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp2 {
- label Freq
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {LFO Frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp6 {
- label Dpth
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip Depth xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp7 {
- label Delay
- callback {eff->seteffectpar(7,(int) o->value());}
- xywh {115 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial chorusp8 {
- label Fb
- callback {eff->seteffectpar(8,(int) o->value());}
- tooltip Feedback xywh {150 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Check_Button {} {
- label Flange
- callback {eff->seteffectpar(10,(int) o->value());}
- xywh {120 10 55 20} box THIN_UP_BOX down_box DOWN_BOX color 230 labelfont 1 labelsize 10 hide deactivate
- code0 {o->value(eff->geteffectpar(10));}
- }
- }
- }
- Function {make_phaser_window()} {} {
- Fl_Window effphaserwindow {
- xywh {661 430 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice phaserp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Phaser 1}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 2}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 3}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 4}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 5}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Phaser 6}
- xywh {80 80 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label Phaser
- xywh {125 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial phaserp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp2 {
- label Freq
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp5 {
- label {St.df}
- callback {eff->seteffectpar(5,(int) o->value());}
- tooltip {Left/Right Channel Phase Shift} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp6 {
- label Dpth
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip Depth xywh {115 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial phaserp7 {
- label Fb
- callback {eff->seteffectpar(7,(int) o->value());}
- tooltip Feedback xywh {150 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Counter phaserp8 {
- label Stages
- callback {eff->seteffectpar(8,(int) o->value());}
- xywh {185 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1
- code0 {o->range(1,MAX_PHASER_STAGES);}
- }
- }
- }
- Function {make_alienwah_window()} {} {
- Fl_Window effalienwahwindow {
- xywh {367 170 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice awp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Alienwah 1}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Alienwah 2}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Alienwah 3}
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Alienwah 4}
- xywh {70 70 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label AlienWah
- xywh {100 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial awp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp2 {
- label Freq
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial awp6 {
- label Dpth
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip Depth xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Counter awp8 {
- label Delay
- callback {eff->seteffectpar(8,(int) o->value());}
- xywh {125 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1
- code0 {o->range(1,MAX_ALIENWAH_DELAY);}
- }
- }
- }
- Function {make_distorsion_window()} {} {
- Fl_Window effdistorsionwindow {
- xywh {353 412 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice distp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {11 15 95 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label {Overdrive 1}
- xywh {20 20 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Overdrive 2}
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {A. Exciter 1}
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {A. Exciter 2}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label {Guitar Amp}
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Quantisize
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label Distortion
- xywh {110 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 8
- }
- Fl_Dial distp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp3 {
- label Drive
- callback {eff->seteffectpar(3,(int) o->value());}
- tooltip {Input amplification} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp4 {
- label Level
- callback {eff->seteffectpar(4,(int) o->value());}
- tooltip {Output Amplification} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial distp7 {
- label LPF
- callback {eff->seteffectpar(7,(int) o->value());}
- tooltip {Low Pass Filter} xywh {190 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Choice distp5 {
- label Type
- callback {eff->seteffectpar(5,(int) o->value());}
- xywh {120 50 60 20} box UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 align 2 textsize 10
- } {
- MenuItem {} {
- label Atan
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Asym1
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sine
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Qnts
- xywh {95 95 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Zigzg
- xywh {105 105 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Lmt
- xywh {115 115 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LmtU
- xywh {125 125 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LmtL
- xywh {135 135 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label ILmt
- xywh {147 147 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Clip
- xywh {157 157 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Asym2
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow2
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sgm
- xywh {95 95 100 20} labelfont 1 labelsize 10
- }
- }
- }
- }
- Function {make_eq_window()} {} {
- Fl_Window effeqwindow {
- xywh {318 309 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Text_Display {} {
- label EQ
- xywh {170 5 15 25} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Counter bandcounter {
- label Band
- callback {eqband=(int) o->value();
-int npb=eqband*5+10;
-
-int type=eff->geteffectpar(npb);
-typechoice->value(type);
-
-if (type>6) gaindial->activate();
- else gaindial->deactivate();
-
-if (type==0) bandgroup->deactivate();
-else bandgroup->activate();
-
-int freq=eff->geteffectpar(npb+1);
-freqdial->value(freq);
-
-int gain=eff->geteffectpar(npb+2);
-gaindial->value(gain);
-
-int q=eff->geteffectpar(npb+3);
-qdial->value(q);
-
-int dbl=eff->geteffectpar(npb+4);
-stagescounter->value(dbl);}
- tooltip {Band no.} xywh {85 15 45 15} type Simple labelfont 1 labelsize 11 align 1 minimum 0 maximum 1 step 1 textfont 1 textsize 11
- code0 {o->bounds(0,MAX_EQ_BANDS-1);}
- }
- Fl_Group bandgroup {
- xywh {5 5 75 85} box ENGRAVED_FRAME
- code0 {if (eff->geteffectpar(10)==0) o->deactivate();}
- } {
- Fl_Dial freqdial {
- label Freq
- callback {int np=eqband*5+11;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();}
- xywh {10 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127
- class WidgetPDial
- }
- Fl_Dial gaindial {
- label Gain
- callback {int np=eqband*5+12;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();}
- xywh {45 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial qdial {
- label Q
- callback {int np=eqband*5+13;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();}
- tooltip {Bandwidth/Resonance} xywh {10 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127
- class WidgetPDial
- }
- Fl_Counter stagescounter {
- label Stages
- callback {int np=eqband*5+14;
-eff->seteffectpar(np,(int) o->value());
-eqgraph->redraw();}
- tooltip {Additional filter stages} xywh {40 55 30 15} type Simple labelfont 1 labelsize 10 minimum 1 maximum 127 step 1 textfont 1 textsize 11
- code0 {o->bounds(0,MAX_FILTER_STAGES-1);}
- }
- }
- Fl_Choice typechoice {
- label Type
- callback {int np=eqband*5+10;
-eff->seteffectpar(np,(int) o->value());
-bandcounter->do_callback();
-eqgraph->redraw();}
- tooltip Type xywh {135 15 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 when 6 textsize 10
- } {
- MenuItem {} {
- label OFF
- xywh {10 10 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Lp1
- xywh {20 20 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Hp1
- xywh {30 30 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Lp2
- xywh {40 40 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Hp2
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Bp2
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label N2
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pk
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LSh
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label HSh
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Box eqgraph {
- xywh {85 35 140 55} box BORDER_BOX color 178
- code0 {o->init(eff);}
- class EQGraph
- }
- }
- }
- Function {make_dynamicfilter_window()} {} {
- Fl_Window effdynamicfilterwindow {
- xywh {475 471 230 95} type Double box PLASTIC_UP_BOX color 221 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Choice dfp {
- label Preset
- callback {eff->changepreset((int)o->value());
-refresh(eff);}
- xywh {10 15 90 15} down_box BORDER_BOX color 14 selection_color 0 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10 textcolor 7
- } {
- MenuItem {} {
- label WahWah
- xywh {30 30 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label AutoWah
- xywh {40 40 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label Sweep
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label VocalMorph1
- xywh {50 50 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- MenuItem {} {
- label VocalMorph2
- xywh {60 60 100 20} labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Text_Display {} {
- label DynFilter
- xywh {100 10 10 20} box NO_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 8
- }
- Fl_Dial dfp0 {
- label Vol
- callback {eff->seteffectpar(0,(int) o->value());}
- tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp2 {
- label Freq
- callback {eff->seteffectpar(2,(int) o->value());}
- tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp6 {
- label LfoD
- callback {eff->seteffectpar(6,(int) o->value());}
- tooltip {LFO depth} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Group {} {
- xywh {115 40 65 45} box BORDER_BOX color 181
- } {
- Fl_Dial dfp7 {
- label {A.S.}
- callback {eff->seteffectpar(7,(int) o->value());}
- tooltip {how filter varies with amplitude} xywh {120 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- Fl_Dial dfp9 {
- label {A.M}
- callback {eff->seteffectpar(9,(int) o->value());}
- tooltip {how quickly the filter varies with amplitude} xywh {150 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
- class WidgetPDial
- }
- }
- }
- }
- Function {init(EffectMgr *eff_)} {} {
- code {eff=eff_;
-
-make_null_window();
-make_reverb_window();
-make_echo_window();
-make_chorus_window();
-make_phaser_window();
-make_alienwah_window();
-make_distorsion_window();
-make_eq_window();
-make_dynamicfilter_window();
-
-int px=this->parent()->x();
-int py=this->parent()->y();
-
-effnullwindow->position(px,py);
-effreverbwindow->position(px,py);
-effechowindow->position(px,py);
-effchoruswindow->position(px,py);
-effphaserwindow->position(px,py);
-effalienwahwindow->position(px,py);
-effdistorsionwindow->position(px,py);
-effeqwindow->position(px,py);
-effdynamicfilterwindow->position(px,py);
-
-refresh(eff);} {}
- }
- Function {refresh(EffectMgr *eff_)} {} {
- code {eff=eff_;
-this->hide();
-
-effnullwindow->hide();
-effreverbwindow->hide();
-effechowindow->hide();
-effchoruswindow->hide();
-effphaserwindow->hide();
-effalienwahwindow->hide();
-effdistorsionwindow->hide();
-effeqwindow->hide();
-effdynamicfilterwindow->hide();
-
-eqband=0;
-
-
-switch(eff->geteffect()){
- case 1:
- revp->value(eff->getpreset());
- revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
- revp2->value(eff->geteffectpar(2));
- revp3->value(eff->geteffectpar(3));
- revp9->value(eff->geteffectpar(9));
- effreverbwindow->show();
- break;
- case 2:
- echop->value(eff->getpreset());
- echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
- echop2->value(eff->geteffectpar(2));
- echop5->value(eff->geteffectpar(5));
- effechowindow->show();
- break;
- case 3:
- chorusp->value(eff->getpreset());
- chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
- chorusp2->value(eff->geteffectpar(2));
- chorusp6->value(eff->geteffectpar(6));
- chorusp7->value(eff->geteffectpar(7));
- chorusp8->value(eff->geteffectpar(8));
- effchoruswindow->show();
- break;
- case 4:
- phaserp->value(eff->getpreset());
- phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
- phaserp2->value(eff->geteffectpar(2));
- phaserp5->value(eff->geteffectpar(5));
- phaserp6->value(eff->geteffectpar(6));
- phaserp7->value(eff->geteffectpar(7));
- phaserp8->value(eff->geteffectpar(8));
- effphaserwindow->show();
- break;
- case 5:
- awp->value(eff->getpreset());
- awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
- awp2->value(eff->geteffectpar(2));
- awp6->value(eff->geteffectpar(6));
- awp8->value(eff->geteffectpar(8));
- effalienwahwindow->show();
- break;
- case 6:
- distp->value(eff->getpreset());
- distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
- distp3->value(eff->geteffectpar(3));
- distp4->value(eff->geteffectpar(4));
- distp5->value(eff->geteffectpar(5));
- distp7->value(eff->geteffectpar(7));
- effdistorsionwindow->show();
- break;
- case 7:
- bandcounter->value(eqband);
- bandcounter->do_callback();
- typechoice->value(eff->geteffectpar(10));
- eqgraph->redraw();
- freqdial->value(eff->geteffectpar(11));
- gaindial->value(eff->geteffectpar(12));
- if (eff->geteffectpar(10)<6) gaindial->deactivate();
- qdial->value(eff->geteffectpar(13));
- stagescounter->value(eff->geteffectpar(14));
- eqgraph->init(eff);
- effeqwindow->show();
- break;
- case 8:
- dfp->value(eff->getpreset());
- dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
- dfp2->value(eff->geteffectpar(2));
- dfp6->value(eff->geteffectpar(6));
- dfp7->value(eff->geteffectpar(7));
- dfp9->value(eff->geteffectpar(9));
-
-
- effdynamicfilterwindow->show();
- break;
- default:effnullwindow->show();
- break;
-};
-
-this->show();} {}
- }
- Function {refresh()} {} {
- code {refresh(eff);} {}
- }
- decl {EffectMgr *eff;} {}
- decl {int eqband;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/EffUI.h b/plugins/zynaddsubfx/src/UI/EffUI.h
deleted file mode 100644
index 92af395..0000000
--- a/plugins/zynaddsubfx/src/UI/EffUI.h
+++ /dev/null
@@ -1,820 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef EffUI_h
-#define EffUI_h
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "../globals.h"
-#include "WidgetPDial.h"
-#include "EnvelopeUI.h"
-#include "FilterUI.h"
-#include "../Misc/Util.h"
-#include "../Effects/EffectMgr.h"
-#include "PresetsUI.h"
-
-class EQGraph : public Fl_Box {
-public:
- EQGraph(int x,int y, int w, int h, const char *label=0);
- void init(EffectMgr *eff_);
- void draw_freq_line(REALTYPE freq,int type);
- void draw();
- int getresponse(int maxy,REALTYPE freq);
- REALTYPE getfreqx(REALTYPE x);
- REALTYPE getfreqpos(REALTYPE freq);
-private:
- int oldx;
-public:
- REALTYPE khzval;
-private:
- EffectMgr *eff;
- int maxdB;
-};
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Double_Window.H>
-
-class EffUI : public Fl_Group,public PresetsUI_ {
-public:
- EffUI(int x,int y, int w, int h, const char *label=0);
- ~EffUI();
- Fl_Group* make_null_window();
- Fl_Group *effnullwindow;
- Fl_Group* make_reverb_window();
- Fl_Group *effreverbwindow;
- Fl_Choice *revp;
-private:
- void cb_revp_i(Fl_Choice*, void*);
- static void cb_revp(Fl_Choice*, void*);
- static Fl_Menu_Item menu_revp[];
-public:
- Fl_Choice *revp10;
-private:
- void cb_revp10_i(Fl_Choice*, void*);
- static void cb_revp10(Fl_Choice*, void*);
- static Fl_Menu_Item menu_revp10[];
-public:
- WidgetPDial *revp0;
-private:
- void cb_revp0_i(WidgetPDial*, void*);
- static void cb_revp0(WidgetPDial*, void*);
-public:
- WidgetPDial *revp1;
-private:
- void cb_revp1_i(WidgetPDial*, void*);
- static void cb_revp1(WidgetPDial*, void*);
-public:
- WidgetPDial *revp2;
-private:
- void cb_revp2_i(WidgetPDial*, void*);
- static void cb_revp2(WidgetPDial*, void*);
-public:
- WidgetPDial *revp3;
-private:
- void cb_revp3_i(WidgetPDial*, void*);
- static void cb_revp3(WidgetPDial*, void*);
-public:
- WidgetPDial *revp4;
-private:
- void cb_revp4_i(WidgetPDial*, void*);
- static void cb_revp4(WidgetPDial*, void*);
-public:
- WidgetPDial *revp12;
-private:
- void cb_revp12_i(WidgetPDial*, void*);
- static void cb_revp12(WidgetPDial*, void*);
-public:
- WidgetPDial *revp6;
-private:
- void cb_revp6_i(WidgetPDial*, void*);
- static void cb_revp6(WidgetPDial*, void*);
-public:
- WidgetPDial *revp7;
-private:
- void cb_revp7_i(WidgetPDial*, void*);
- static void cb_revp7(WidgetPDial*, void*);
-public:
- WidgetPDial *revp8;
-private:
- void cb_revp8_i(WidgetPDial*, void*);
- static void cb_revp8(WidgetPDial*, void*);
-public:
- WidgetPDial *revp9;
-private:
- void cb_revp9_i(WidgetPDial*, void*);
- static void cb_revp9(WidgetPDial*, void*);
-public:
- WidgetPDial *revp11;
-private:
- void cb_revp11_i(WidgetPDial*, void*);
- static void cb_revp11(WidgetPDial*, void*);
-public:
- Fl_Group* make_echo_window();
- Fl_Group *effechowindow;
- Fl_Choice *echop;
-private:
- void cb_echop_i(Fl_Choice*, void*);
- static void cb_echop(Fl_Choice*, void*);
- static Fl_Menu_Item menu_echop[];
-public:
- WidgetPDial *echop0;
-private:
- void cb_echop0_i(WidgetPDial*, void*);
- static void cb_echop0(WidgetPDial*, void*);
-public:
- WidgetPDial *echop1;
-private:
- void cb_echop1_i(WidgetPDial*, void*);
- static void cb_echop1(WidgetPDial*, void*);
-public:
- WidgetPDial *echop2;
-private:
- void cb_echop2_i(WidgetPDial*, void*);
- static void cb_echop2(WidgetPDial*, void*);
-public:
- WidgetPDial *echop3;
-private:
- void cb_echop3_i(WidgetPDial*, void*);
- static void cb_echop3(WidgetPDial*, void*);
-public:
- WidgetPDial *echop4;
-private:
- void cb_echop4_i(WidgetPDial*, void*);
- static void cb_echop4(WidgetPDial*, void*);
-public:
- WidgetPDial *echop5;
-private:
- void cb_echop5_i(WidgetPDial*, void*);
- static void cb_echop5(WidgetPDial*, void*);
-public:
- WidgetPDial *echop6;
-private:
- void cb_echop6_i(WidgetPDial*, void*);
- static void cb_echop6(WidgetPDial*, void*);
-public:
- Fl_Group* make_chorus_window();
- Fl_Group *effchoruswindow;
- Fl_Choice *chorusp;
-private:
- void cb_chorusp_i(Fl_Choice*, void*);
- static void cb_chorusp(Fl_Choice*, void*);
- static Fl_Menu_Item menu_chorusp[];
-public:
- WidgetPDial *chorusp0;
-private:
- void cb_chorusp0_i(WidgetPDial*, void*);
- static void cb_chorusp0(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp1;
-private:
- void cb_chorusp1_i(WidgetPDial*, void*);
- static void cb_chorusp1(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp2;
-private:
- void cb_chorusp2_i(WidgetPDial*, void*);
- static void cb_chorusp2(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp3;
-private:
- void cb_chorusp3_i(WidgetPDial*, void*);
- static void cb_chorusp3(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp5;
-private:
- void cb_chorusp5_i(WidgetPDial*, void*);
- static void cb_chorusp5(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp6;
-private:
- void cb_chorusp6_i(WidgetPDial*, void*);
- static void cb_chorusp6(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp7;
-private:
- void cb_chorusp7_i(WidgetPDial*, void*);
- static void cb_chorusp7(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp8;
-private:
- void cb_chorusp8_i(WidgetPDial*, void*);
- static void cb_chorusp8(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp9;
-private:
- void cb_chorusp9_i(WidgetPDial*, void*);
- static void cb_chorusp9(WidgetPDial*, void*);
- void cb_Flange_i(Fl_Check_Button*, void*);
- static void cb_Flange(Fl_Check_Button*, void*);
-public:
- Fl_Check_Button *chorusp11;
-private:
- void cb_chorusp11_i(Fl_Check_Button*, void*);
- static void cb_chorusp11(Fl_Check_Button*, void*);
-public:
- Fl_Choice *chorusp4;
-private:
- void cb_chorusp4_i(Fl_Choice*, void*);
- static void cb_chorusp4(Fl_Choice*, void*);
- static Fl_Menu_Item menu_chorusp4[];
-public:
- Fl_Group* make_phaser_window();
- Fl_Group *effphaserwindow;
- Fl_Choice *phaserp;
-private:
- void cb_phaserp_i(Fl_Choice*, void*);
- static void cb_phaserp(Fl_Choice*, void*);
- static Fl_Menu_Item menu_phaserp[];
-public:
- WidgetPDial *phaserp0;
-private:
- void cb_phaserp0_i(WidgetPDial*, void*);
- static void cb_phaserp0(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp1;
-private:
- void cb_phaserp1_i(WidgetPDial*, void*);
- static void cb_phaserp1(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp2;
-private:
- void cb_phaserp2_i(WidgetPDial*, void*);
- static void cb_phaserp2(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp3;
-private:
- void cb_phaserp3_i(WidgetPDial*, void*);
- static void cb_phaserp3(WidgetPDial*, void*);
-public:
- Fl_Choice *phaserp4;
-private:
- void cb_phaserp4_i(Fl_Choice*, void*);
- static void cb_phaserp4(Fl_Choice*, void*);
- static Fl_Menu_Item menu_phaserp4[];
-public:
- WidgetPDial *phaserp5;
-private:
- void cb_phaserp5_i(WidgetPDial*, void*);
- static void cb_phaserp5(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp6;
-private:
- void cb_phaserp6_i(WidgetPDial*, void*);
- static void cb_phaserp6(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp7;
-private:
- void cb_phaserp7_i(WidgetPDial*, void*);
- static void cb_phaserp7(WidgetPDial*, void*);
-public:
- Fl_Counter *phaserp8;
-private:
- void cb_phaserp8_i(Fl_Counter*, void*);
- static void cb_phaserp8(Fl_Counter*, void*);
-public:
- WidgetPDial *phaserp9;
-private:
- void cb_phaserp9_i(WidgetPDial*, void*);
- static void cb_phaserp9(WidgetPDial*, void*);
-public:
- Fl_Check_Button *phaserp10;
-private:
- void cb_phaserp10_i(Fl_Check_Button*, void*);
- static void cb_phaserp10(Fl_Check_Button*, void*);
-public:
- WidgetPDial *phaserp11;
-private:
- void cb_phaserp11_i(WidgetPDial*, void*);
- static void cb_phaserp11(WidgetPDial*, void*);
-public:
- Fl_Check_Button *phaserp12;
-private:
- void cb_phaserp12_i(Fl_Check_Button*, void*);
- static void cb_phaserp12(Fl_Check_Button*, void*);
-public:
- WidgetPDial *phaserp13;
-private:
- void cb_phaserp13_i(WidgetPDial*, void*);
- static void cb_phaserp13(WidgetPDial*, void*);
-public:
- Fl_Check_Button *phaserp14;
-private:
- void cb_phaserp14_i(Fl_Check_Button*, void*);
- static void cb_phaserp14(Fl_Check_Button*, void*);
-public:
- Fl_Group* make_alienwah_window();
- Fl_Group *effalienwahwindow;
- Fl_Choice *awp;
-private:
- void cb_awp_i(Fl_Choice*, void*);
- static void cb_awp(Fl_Choice*, void*);
- static Fl_Menu_Item menu_awp[];
-public:
- WidgetPDial *awp0;
-private:
- void cb_awp0_i(WidgetPDial*, void*);
- static void cb_awp0(WidgetPDial*, void*);
-public:
- WidgetPDial *awp1;
-private:
- void cb_awp1_i(WidgetPDial*, void*);
- static void cb_awp1(WidgetPDial*, void*);
-public:
- WidgetPDial *awp2;
-private:
- void cb_awp2_i(WidgetPDial*, void*);
- static void cb_awp2(WidgetPDial*, void*);
-public:
- WidgetPDial *awp3;
-private:
- void cb_awp3_i(WidgetPDial*, void*);
- static void cb_awp3(WidgetPDial*, void*);
-public:
- WidgetPDial *awp5;
-private:
- void cb_awp5_i(WidgetPDial*, void*);
- static void cb_awp5(WidgetPDial*, void*);
-public:
- WidgetPDial *awp6;
-private:
- void cb_awp6_i(WidgetPDial*, void*);
- static void cb_awp6(WidgetPDial*, void*);
-public:
- WidgetPDial *awp7;
-private:
- void cb_awp7_i(WidgetPDial*, void*);
- static void cb_awp7(WidgetPDial*, void*);
-public:
- WidgetPDial *awp9;
-private:
- void cb_awp9_i(WidgetPDial*, void*);
- static void cb_awp9(WidgetPDial*, void*);
-public:
- Fl_Choice *awp4;
-private:
- void cb_awp4_i(Fl_Choice*, void*);
- static void cb_awp4(Fl_Choice*, void*);
- static Fl_Menu_Item menu_awp4[];
-public:
- WidgetPDial *awp10;
-private:
- void cb_awp10_i(WidgetPDial*, void*);
- static void cb_awp10(WidgetPDial*, void*);
-public:
- Fl_Counter *awp8;
-private:
- void cb_awp8_i(Fl_Counter*, void*);
- static void cb_awp8(Fl_Counter*, void*);
-public:
- Fl_Group* make_distorsion_window();
- Fl_Group *effdistorsionwindow;
- Fl_Choice *distp;
-private:
- void cb_distp_i(Fl_Choice*, void*);
- static void cb_distp(Fl_Choice*, void*);
- static Fl_Menu_Item menu_distp[];
-public:
- WidgetPDial *distp0;
-private:
- void cb_distp0_i(WidgetPDial*, void*);
- static void cb_distp0(WidgetPDial*, void*);
-public:
- WidgetPDial *distp1;
-private:
- void cb_distp1_i(WidgetPDial*, void*);
- static void cb_distp1(WidgetPDial*, void*);
-public:
- WidgetPDial *distp2;
-private:
- void cb_distp2_i(WidgetPDial*, void*);
- static void cb_distp2(WidgetPDial*, void*);
-public:
- WidgetPDial *distp3;
-private:
- void cb_distp3_i(WidgetPDial*, void*);
- static void cb_distp3(WidgetPDial*, void*);
-public:
- WidgetPDial *distp4;
-private:
- void cb_distp4_i(WidgetPDial*, void*);
- static void cb_distp4(WidgetPDial*, void*);
-public:
- WidgetPDial *distp7;
-private:
- void cb_distp7_i(WidgetPDial*, void*);
- static void cb_distp7(WidgetPDial*, void*);
-public:
- WidgetPDial *distp8;
-private:
- void cb_distp8_i(WidgetPDial*, void*);
- static void cb_distp8(WidgetPDial*, void*);
-public:
- Fl_Choice *distp5;
-private:
- void cb_distp5_i(Fl_Choice*, void*);
- static void cb_distp5(Fl_Choice*, void*);
- static Fl_Menu_Item menu_distp5[];
-public:
- Fl_Check_Button *distp6;
-private:
- void cb_distp6_i(Fl_Check_Button*, void*);
- static void cb_distp6(Fl_Check_Button*, void*);
-public:
- Fl_Check_Button *distp9;
-private:
- void cb_distp9_i(Fl_Check_Button*, void*);
- static void cb_distp9(Fl_Check_Button*, void*);
-public:
- Fl_Check_Button *distp10;
-private:
- void cb_distp10_i(Fl_Check_Button*, void*);
- static void cb_distp10(Fl_Check_Button*, void*);
-public:
- Fl_Group* make_eq_window();
- Fl_Group *effeqwindow;
- WidgetPDial *eqp0;
-private:
- void cb_eqp0_i(WidgetPDial*, void*);
- static void cb_eqp0(WidgetPDial*, void*);
-public:
- Fl_Counter *bandcounter;
-private:
- void cb_bandcounter_i(Fl_Counter*, void*);
- static void cb_bandcounter(Fl_Counter*, void*);
-public:
- Fl_Group *bandgroup;
- WidgetPDial *freqdial;
-private:
- void cb_freqdial_i(WidgetPDial*, void*);
- static void cb_freqdial(WidgetPDial*, void*);
-public:
- WidgetPDial *gaindial;
-private:
- void cb_gaindial_i(WidgetPDial*, void*);
- static void cb_gaindial(WidgetPDial*, void*);
-public:
- WidgetPDial *qdial;
-private:
- void cb_qdial_i(WidgetPDial*, void*);
- static void cb_qdial(WidgetPDial*, void*);
-public:
- Fl_Counter *stagescounter;
-private:
- void cb_stagescounter_i(Fl_Counter*, void*);
- static void cb_stagescounter(Fl_Counter*, void*);
-public:
- Fl_Choice *typechoice;
-private:
- void cb_typechoice_i(Fl_Choice*, void*);
- static void cb_typechoice(Fl_Choice*, void*);
- static Fl_Menu_Item menu_typechoice[];
-public:
- EQGraph *eqgraph;
- Fl_Group* make_dynamicfilter_window();
- Fl_Group *effdynamicfilterwindow;
- Fl_Choice *dfp;
-private:
- void cb_dfp_i(Fl_Choice*, void*);
- static void cb_dfp(Fl_Choice*, void*);
- static Fl_Menu_Item menu_dfp[];
-public:
- WidgetPDial *dfp0;
-private:
- void cb_dfp0_i(WidgetPDial*, void*);
- static void cb_dfp0(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp1;
-private:
- void cb_dfp1_i(WidgetPDial*, void*);
- static void cb_dfp1(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp2;
-private:
- void cb_dfp2_i(WidgetPDial*, void*);
- static void cb_dfp2(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp3;
-private:
- void cb_dfp3_i(WidgetPDial*, void*);
- static void cb_dfp3(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp5;
-private:
- void cb_dfp5_i(WidgetPDial*, void*);
- static void cb_dfp5(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp6;
-private:
- void cb_dfp6_i(WidgetPDial*, void*);
- static void cb_dfp6(WidgetPDial*, void*);
-public:
- Fl_Choice *dfp4;
-private:
- void cb_dfp4_i(Fl_Choice*, void*);
- static void cb_dfp4(Fl_Choice*, void*);
- static Fl_Menu_Item menu_dfp4[];
- void cb_Filter_i(Fl_Button*, void*);
- static void cb_Filter(Fl_Button*, void*);
-public:
- WidgetPDial *dfp7;
-private:
- void cb_dfp7_i(WidgetPDial*, void*);
- static void cb_dfp7(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp9;
-private:
- void cb_dfp9_i(WidgetPDial*, void*);
- static void cb_dfp9(WidgetPDial*, void*);
-public:
- Fl_Check_Button *dfp8;
-private:
- void cb_dfp8_i(Fl_Check_Button*, void*);
- static void cb_dfp8(Fl_Check_Button*, void*);
-public:
- Fl_Double_Window* make_filter_window();
- Fl_Double_Window *filterwindow;
-private:
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
-public:
- void init(EffectMgr *eff_);
- void refresh(EffectMgr *eff_);
- void refresh();
-private:
- EffectMgr *eff;
- int eqband;
-};
-
-class SimpleEffUI : public Fl_Group,public PresetsUI_ {
-public:
- SimpleEffUI(int x,int y, int w, int h, const char *label=0);
- ~SimpleEffUI();
- Fl_Group* make_null_window();
- Fl_Group *effnullwindow;
- Fl_Group* make_reverb_window();
- Fl_Group *effreverbwindow;
- Fl_Choice *revp;
-private:
- void cb_revp5_i(Fl_Choice*, void*);
- static void cb_revp5(Fl_Choice*, void*);
- static Fl_Menu_Item menu_revp1[];
-public:
- WidgetPDial *revp0;
-private:
- void cb_revp01_i(WidgetPDial*, void*);
- static void cb_revp01(WidgetPDial*, void*);
-public:
- WidgetPDial *revp2;
-private:
- void cb_revp21_i(WidgetPDial*, void*);
- static void cb_revp21(WidgetPDial*, void*);
-public:
- WidgetPDial *revp3;
-private:
- void cb_revp31_i(WidgetPDial*, void*);
- static void cb_revp31(WidgetPDial*, void*);
-public:
- WidgetPDial *revp9;
-private:
- void cb_revp91_i(WidgetPDial*, void*);
- static void cb_revp91(WidgetPDial*, void*);
-public:
- Fl_Group* make_echo_window();
- Fl_Group *effechowindow;
- Fl_Choice *echop;
-private:
- void cb_echop7_i(Fl_Choice*, void*);
- static void cb_echop7(Fl_Choice*, void*);
- static Fl_Menu_Item menu_echop1[];
-public:
- WidgetPDial *echop0;
-private:
- void cb_echop01_i(WidgetPDial*, void*);
- static void cb_echop01(WidgetPDial*, void*);
-public:
- WidgetPDial *echop2;
-private:
- void cb_echop21_i(WidgetPDial*, void*);
- static void cb_echop21(WidgetPDial*, void*);
-public:
- WidgetPDial *echop5;
-private:
- void cb_echop51_i(WidgetPDial*, void*);
- static void cb_echop51(WidgetPDial*, void*);
-public:
- Fl_Group* make_chorus_window();
- Fl_Group *effchoruswindow;
- Fl_Choice *chorusp;
-private:
- void cb_choruspa_i(Fl_Choice*, void*);
- static void cb_choruspa(Fl_Choice*, void*);
- static Fl_Menu_Item menu_chorusp1[];
-public:
- WidgetPDial *chorusp0;
-private:
- void cb_chorusp01_i(WidgetPDial*, void*);
- static void cb_chorusp01(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp2;
-private:
- void cb_chorusp21_i(WidgetPDial*, void*);
- static void cb_chorusp21(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp6;
-private:
- void cb_chorusp61_i(WidgetPDial*, void*);
- static void cb_chorusp61(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp7;
-private:
- void cb_chorusp71_i(WidgetPDial*, void*);
- static void cb_chorusp71(WidgetPDial*, void*);
-public:
- WidgetPDial *chorusp8;
-private:
- void cb_chorusp81_i(WidgetPDial*, void*);
- static void cb_chorusp81(WidgetPDial*, void*);
- void cb_Flange1_i(Fl_Check_Button*, void*);
- static void cb_Flange1(Fl_Check_Button*, void*);
-public:
- Fl_Group* make_phaser_window();
- Fl_Group *effphaserwindow;
- Fl_Choice *phaserp;
-private:
- void cb_phaserpa_i(Fl_Choice*, void*);
- static void cb_phaserpa(Fl_Choice*, void*);
- static Fl_Menu_Item menu_phaserp1[];
-public:
- WidgetPDial *phaserp0;
-private:
- void cb_phaserp01_i(WidgetPDial*, void*);
- static void cb_phaserp01(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp2;
-private:
- void cb_phaserp21_i(WidgetPDial*, void*);
- static void cb_phaserp21(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp5;
-private:
- void cb_phaserp51_i(WidgetPDial*, void*);
- static void cb_phaserp51(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp6;
-private:
- void cb_phaserp61_i(WidgetPDial*, void*);
- static void cb_phaserp61(WidgetPDial*, void*);
-public:
- WidgetPDial *phaserp7;
-private:
- void cb_phaserp71_i(WidgetPDial*, void*);
- static void cb_phaserp71(WidgetPDial*, void*);
-public:
- Fl_Counter *phaserp8;
-private:
- void cb_phaserp81_i(Fl_Counter*, void*);
- static void cb_phaserp81(Fl_Counter*, void*);
-public:
- Fl_Group* make_alienwah_window();
- Fl_Group *effalienwahwindow;
- Fl_Choice *awp;
-private:
- void cb_awpa_i(Fl_Choice*, void*);
- static void cb_awpa(Fl_Choice*, void*);
- static Fl_Menu_Item menu_awp1[];
-public:
- WidgetPDial *awp0;
-private:
- void cb_awp01_i(WidgetPDial*, void*);
- static void cb_awp01(WidgetPDial*, void*);
-public:
- WidgetPDial *awp2;
-private:
- void cb_awp21_i(WidgetPDial*, void*);
- static void cb_awp21(WidgetPDial*, void*);
-public:
- WidgetPDial *awp6;
-private:
- void cb_awp61_i(WidgetPDial*, void*);
- static void cb_awp61(WidgetPDial*, void*);
-public:
- Fl_Counter *awp8;
-private:
- void cb_awp81_i(Fl_Counter*, void*);
- static void cb_awp81(Fl_Counter*, void*);
-public:
- Fl_Group* make_distorsion_window();
- Fl_Group *effdistorsionwindow;
- Fl_Choice *distp;
-private:
- void cb_distpa_i(Fl_Choice*, void*);
- static void cb_distpa(Fl_Choice*, void*);
- static Fl_Menu_Item menu_distp1[];
-public:
- WidgetPDial *distp0;
-private:
- void cb_distp01_i(WidgetPDial*, void*);
- static void cb_distp01(WidgetPDial*, void*);
-public:
- WidgetPDial *distp3;
-private:
- void cb_distp31_i(WidgetPDial*, void*);
- static void cb_distp31(WidgetPDial*, void*);
-public:
- WidgetPDial *distp4;
-private:
- void cb_distp41_i(WidgetPDial*, void*);
- static void cb_distp41(WidgetPDial*, void*);
-public:
- WidgetPDial *distp7;
-private:
- void cb_distp71_i(WidgetPDial*, void*);
- static void cb_distp71(WidgetPDial*, void*);
-public:
- Fl_Choice *distp5;
-private:
- void cb_distp51_i(Fl_Choice*, void*);
- static void cb_distp51(Fl_Choice*, void*);
- static Fl_Menu_Item menu_distp51[];
-public:
- Fl_Group* make_eq_window();
- Fl_Group *effeqwindow;
- Fl_Counter *bandcounter;
-private:
- void cb_bandcounter1_i(Fl_Counter*, void*);
- static void cb_bandcounter1(Fl_Counter*, void*);
-public:
- Fl_Group *bandgroup;
- WidgetPDial *freqdial;
-private:
- void cb_freqdial1_i(WidgetPDial*, void*);
- static void cb_freqdial1(WidgetPDial*, void*);
-public:
- WidgetPDial *gaindial;
-private:
- void cb_gaindial1_i(WidgetPDial*, void*);
- static void cb_gaindial1(WidgetPDial*, void*);
-public:
- WidgetPDial *qdial;
-private:
- void cb_qdial1_i(WidgetPDial*, void*);
- static void cb_qdial1(WidgetPDial*, void*);
-public:
- Fl_Counter *stagescounter;
-private:
- void cb_stagescounter1_i(Fl_Counter*, void*);
- static void cb_stagescounter1(Fl_Counter*, void*);
-public:
- Fl_Choice *typechoice;
-private:
- void cb_typechoice1_i(Fl_Choice*, void*);
- static void cb_typechoice1(Fl_Choice*, void*);
- static Fl_Menu_Item menu_typechoice1[];
-public:
- EQGraph *eqgraph;
- Fl_Group* make_dynamicfilter_window();
- Fl_Group *effdynamicfilterwindow;
- Fl_Choice *dfp;
-private:
- void cb_dfpa_i(Fl_Choice*, void*);
- static void cb_dfpa(Fl_Choice*, void*);
- static Fl_Menu_Item menu_dfp1[];
-public:
- WidgetPDial *dfp0;
-private:
- void cb_dfp01_i(WidgetPDial*, void*);
- static void cb_dfp01(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp2;
-private:
- void cb_dfp21_i(WidgetPDial*, void*);
- static void cb_dfp21(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp6;
-private:
- void cb_dfp61_i(WidgetPDial*, void*);
- static void cb_dfp61(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp7;
-private:
- void cb_dfp71_i(WidgetPDial*, void*);
- static void cb_dfp71(WidgetPDial*, void*);
-public:
- WidgetPDial *dfp9;
-private:
- void cb_dfp91_i(WidgetPDial*, void*);
- static void cb_dfp91(WidgetPDial*, void*);
-public:
- void init(EffectMgr *eff_);
- void refresh(EffectMgr *eff_);
- void refresh();
-private:
- EffectMgr *eff;
- int eqband;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/EnvelopeUI.cc b/plugins/zynaddsubfx/src/UI/EnvelopeUI.cc
deleted file mode 100644
index 78d2b17..0000000
--- a/plugins/zynaddsubfx/src/UI/EnvelopeUI.cc
+++ /dev/null
@@ -1,1525 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "EnvelopeUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-EnvelopeFreeEdit::EnvelopeFreeEdit(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- env=NULL;
- pair=NULL;
-}
-
-void EnvelopeFreeEdit::init(EnvelopeParams *env_) {
- env=env_;
- oldx=-1;
- currentpoint=-1;
- cpx=0;
- lastpoint=-1;
-}
-
-void EnvelopeFreeEdit::setpair(Fl_Box *pair_) {
- pair=pair_;
-}
-
-int EnvelopeFreeEdit::getpointx(int n) {
- int lx=w()-10;
- int npoints=env->Penvpoints;
-
- float sum=0;
- for (int i=1;i<npoints;i++) sum+=env->getdt(i)+1;
-
- float sumbefore=0;//the sum of all points before the computed point
- for (int i=1;i<=n;i++) sumbefore+=env->getdt(i)+1;
-
- return((int) (sumbefore/(REALTYPE) sum*lx));
-}
-
-int EnvelopeFreeEdit::getpointy(int n) {
- int ly=h()-10;
-
- return((int) ((1.0-env->Penvval[n]/127.0)*ly));
-}
-
-int EnvelopeFreeEdit::getnearest(int x,int y) {
- x-=5;y-=5;
-
- int nearestpoint=0;
- int nearestval=1000000;//a big value
- for (int i=0;i<env->Penvpoints;i++){
- int distance=abs(x-getpointx(i))+abs(y-getpointy(i));
- if (distance<nearestval) {
- nearestpoint=i;
- nearestval=distance;
- };
- };
- return(nearestpoint);
-}
-
-void EnvelopeFreeEdit::draw() {
- int ox=x(),oy=y(),lx=w(),ly=h();
- if (env->Pfreemode==0) env->converttofree();
- int npoints=env->Penvpoints;
-
- if (active_r()) fl_color(FL_BLACK);
- else fl_color(90,90,90);
- if (!active_r()) currentpoint=-1;
-
- fl_rectf(ox,oy,lx,ly);
-
- ox+=5;oy+=5;lx-=10;ly-=10;
-
- //draw the lines
- fl_color(FL_GRAY);
-
- fl_line_style(FL_SOLID);
- fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-
- //draws the evelope points and lines
- Fl_Color alb=FL_WHITE;
- if (!active_r()) alb=fl_rgb_color(180,180,180);
- fl_color(alb);
- int oldxx=0,xx=0,oldyy=0,yy=getpointy(0);
- fl_rectf(ox-3,oy+yy-3,6,6);
- for (int i=1;i<npoints;i++){
- oldxx=xx;oldyy=yy;
- xx=getpointx(i);yy=getpointy(i);
- if (i==currentpoint) fl_color(FL_RED);
- else fl_color(alb);
- fl_line(ox+oldxx,oy+oldyy,ox+xx,oy+yy);
- fl_rectf(ox+xx-3,oy+yy-3,6,6);
- };
-
- //draw the last moved point point (if exists)
- if (lastpoint>=0){
- fl_color(FL_CYAN);
- fl_rectf(ox+getpointx(lastpoint)-5,oy+getpointy(lastpoint)-5,10,10);
- };
-
- //draw the sustain position
- if (env->Penvsustain>0){
- fl_color(FL_YELLOW);
- xx=getpointx(env->Penvsustain);
- fl_line(ox+xx,oy+0,ox+xx,oy+ly);
- };
-
- //Show the envelope duration and the current line duration
- fl_font(FL_HELVETICA|FL_BOLD,10);
- float time=0.0;
- if (currentpoint<=0){
- fl_color(alb);
- for (int i=1;i<npoints;i++) time+=env->getdt(i);
- } else {
- fl_color(255,0,0);
- time=env->getdt(currentpoint);
- };
- char tmpstr[20];
- if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time);
- else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0);
- fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0);
-}
-
-int EnvelopeFreeEdit::handle(int event) {
- int x_=Fl::event_x()-x();
- int y_=Fl::event_y()-y();
-
- if (event==FL_PUSH) {
- currentpoint=getnearest(x_,y_);
- cpx=x_;
- cpdt=env->Penvdt[currentpoint];
- lastpoint=currentpoint;
- redraw();
- if (pair!=NULL) pair->redraw();
- };
-
- if (event==FL_RELEASE){
- currentpoint=-1;
- redraw();
- if (pair!=NULL) pair->redraw();
- };
-
- if ((event==FL_DRAG)&&(currentpoint>=0)){
- int ny=127-(int) (y_*127.0/h());
- if (ny<0) ny=0;if (ny>127) ny=127;
- env->Penvval[currentpoint]=ny;
-
- int dx=(int)((x_-cpx)*0.1);
- int newdt=cpdt+dx;
- if (newdt<0) newdt=0;if (newdt>127) newdt=127;
- if (currentpoint!=0) env->Penvdt[currentpoint]=newdt;
- else env->Penvdt[currentpoint]=0;
-
- redraw();
- if (pair!=NULL) pair->redraw();
- };
-
-
- return(1);
-}
-
-void EnvelopeUI::cb_addpoint_i(Fl_Button*, void*) {
- int curpoint=freeedit->lastpoint;
-if (curpoint<0) return;
-//if (curpoint>=env->Penvpoints-1) return;
-if (env->Penvpoints>=MAX_ENVELOPE_POINTS) return;
-
-for (int i=env->Penvpoints;i>=curpoint+1;i--){
- env->Penvdt[i]=env->Penvdt[i-1];
- env->Penvval[i]=env->Penvval[i-1];
-};
-
-if (curpoint==0) {
- env->Penvdt[1]=64;
-};
-
-env->Penvpoints++;
-if (curpoint<=env->Penvsustain) env->Penvsustain++;
-
-freeedit->lastpoint+=1;
-freeedit->redraw();
-envfree->redraw();
-
-sustaincounter->value(env->Penvsustain);
-sustaincounter->maximum(env->Penvpoints-2);
-}
-void EnvelopeUI::cb_addpoint(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_addpoint_i(o,v);
-}
-
-void EnvelopeUI::cb_deletepoint_i(Fl_Button*, void*) {
- int curpoint=freeedit->lastpoint;
-if (curpoint<1) return;
-if (curpoint>=env->Penvpoints-1) return;
-if (env->Penvpoints<=3) return;
-
-for (int i=curpoint+1;i<env->Penvpoints;i++){
- env->Penvdt[i-1]=env->Penvdt[i];
- env->Penvval[i-1]=env->Penvval[i];
-};
-
-env->Penvpoints--;
-
-if (curpoint<=env->Penvsustain) env->Penvsustain--;
-
-
-freeedit->lastpoint-=1;
-freeedit->redraw();
-envfree->redraw();
-
-sustaincounter->value(env->Penvsustain);
-sustaincounter->maximum(env->Penvpoints-2);
-}
-void EnvelopeUI::cb_deletepoint(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_deletepoint_i(o,v);
-}
-
-void EnvelopeUI::cb_freemodebutton_i(Fl_Light_Button*, void*) {
- reinit();
-
-freeedit->lastpoint=-1;
-freeedit->redraw();
-}
-void EnvelopeUI::cb_freemodebutton(Fl_Light_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_freemodebutton_i(o,v);
-}
-
-void EnvelopeUI::cb_forcedreleasecheck_i(Fl_Check_Button* o, void*) {
- env->Pforcedrelease=(int)o->value();
-}
-void EnvelopeUI::cb_forcedreleasecheck(Fl_Check_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_forcedreleasecheck_i(o,v);
-}
-
-void EnvelopeUI::cb_envstretchdial_i(WidgetPDial* o, void*) {
- env->Penvstretch=(int)o->value();
-}
-void EnvelopeUI::cb_envstretchdial(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_envstretchdial_i(o,v);
-}
-
-void EnvelopeUI::cb_Close_i(Fl_Button*, void*) {
- freemodeeditwindow->hide();
-}
-void EnvelopeUI::cb_Close(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void EnvelopeUI::cb_linearenvelopecheck_i(Fl_Check_Button* o, void*) {
- env->Plinearenvelope=(int)o->value();
-}
-void EnvelopeUI::cb_linearenvelopecheck(Fl_Check_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_linearenvelopecheck_i(o,v);
-}
-
-void EnvelopeUI::cb_sustaincounter_i(Fl_Counter* o, void*) {
- env->Penvsustain=(int) o->value();
-freeedit->redraw();
-envfree->redraw();
-}
-void EnvelopeUI::cb_sustaincounter(Fl_Counter* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_sustaincounter_i(o,v);
-}
-
-void EnvelopeUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(env);
-}
-void EnvelopeUI::cb_C(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void EnvelopeUI::cb_P_i(Fl_Button*, void*) {
- presetsui->paste(env,this);
-}
-void EnvelopeUI::cb_P(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_P_i(o,v);
-}
-
-void EnvelopeUI::cb_e1adt_i(WidgetPDial* o, void*) {
- env->PA_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e1adt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1adt_i(o,v);
-}
-
-void EnvelopeUI::cb_e1ddt_i(WidgetPDial* o, void*) {
- env->PD_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e1ddt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1ddt_i(o,v);
-}
-
-void EnvelopeUI::cb_e1rdt_i(WidgetPDial* o, void*) {
- env->PR_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e1rdt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1rdt_i(o,v);
-}
-
-void EnvelopeUI::cb_e1sval_i(WidgetPDial* o, void*) {
- env->PS_val=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e1sval(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1sval_i(o,v);
-}
-
-void EnvelopeUI::cb_e1forcedrelease_i(Fl_Check_Button* o, void*) {
- env->Pforcedrelease=(int)o->value();
-}
-void EnvelopeUI::cb_e1forcedrelease(Fl_Check_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1forcedrelease_i(o,v);
-}
-
-void EnvelopeUI::cb_e1envstretch_i(WidgetPDial* o, void*) {
- env->Penvstretch=(int)o->value();
-}
-void EnvelopeUI::cb_e1envstretch(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1envstretch_i(o,v);
-}
-
-void EnvelopeUI::cb_E_i(Fl_Button*, void*) {
- freemodeeditwindow->show();
-}
-void EnvelopeUI::cb_E(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_E_i(o,v);
-}
-
-void EnvelopeUI::cb_e1linearenvelope_i(Fl_Check_Button* o, void*) {
- env->Plinearenvelope=(int)o->value();
-}
-void EnvelopeUI::cb_e1linearenvelope(Fl_Check_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e1linearenvelope_i(o,v);
-}
-
-void EnvelopeUI::cb_C1_i(Fl_Button*, void*) {
- presetsui->copy(env);
-}
-void EnvelopeUI::cb_C1(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C1_i(o,v);
-}
-
-void EnvelopeUI::cb_P1_i(Fl_Button*, void*) {
- presetsui->paste(env,this);
-}
-void EnvelopeUI::cb_P1(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P1_i(o,v);
-}
-
-void EnvelopeUI::cb_e2aval_i(WidgetPDial* o, void*) {
- env->PA_val=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e2aval(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2aval_i(o,v);
-}
-
-void EnvelopeUI::cb_e2adt_i(WidgetPDial* o, void*) {
- env->PA_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e2adt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2adt_i(o,v);
-}
-
-void EnvelopeUI::cb_e2rval_i(WidgetPDial* o, void*) {
- env->PR_val=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e2rval(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2rval_i(o,v);
-}
-
-void EnvelopeUI::cb_e2rdt_i(WidgetPDial* o, void*) {
- env->PR_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e2rdt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2rdt_i(o,v);
-}
-
-void EnvelopeUI::cb_e2envstretch_i(WidgetPDial* o, void*) {
- env->Penvstretch=(int)o->value();
-}
-void EnvelopeUI::cb_e2envstretch(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2envstretch_i(o,v);
-}
-
-void EnvelopeUI::cb_e2forcedrelease_i(Fl_Check_Button* o, void*) {
- env->Pforcedrelease=(int)o->value();
-}
-void EnvelopeUI::cb_e2forcedrelease(Fl_Check_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e2forcedrelease_i(o,v);
-}
-
-void EnvelopeUI::cb_C2_i(Fl_Button*, void*) {
- presetsui->copy(env);
-}
-void EnvelopeUI::cb_C2(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C2_i(o,v);
-}
-
-void EnvelopeUI::cb_P2_i(Fl_Button*, void*) {
- presetsui->paste(env,this);
-}
-void EnvelopeUI::cb_P2(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P2_i(o,v);
-}
-
-void EnvelopeUI::cb_E1_i(Fl_Button*, void*) {
- freemodeeditwindow->show();
-}
-void EnvelopeUI::cb_E1(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_E1_i(o,v);
-}
-
-void EnvelopeUI::cb_e3aval_i(WidgetPDial* o, void*) {
- env->PA_val=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e3aval(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3aval_i(o,v);
-}
-
-void EnvelopeUI::cb_e3adt_i(WidgetPDial* o, void*) {
- env->PA_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e3adt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3adt_i(o,v);
-}
-
-void EnvelopeUI::cb_e3dval_i(WidgetPDial* o, void*) {
- env->PD_val=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e3dval(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3dval_i(o,v);
-}
-
-void EnvelopeUI::cb_e3ddt_i(WidgetPDial* o, void*) {
- env->PD_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e3ddt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3ddt_i(o,v);
-}
-
-void EnvelopeUI::cb_e3rdt_i(WidgetPDial* o, void*) {
- env->PR_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e3rdt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3rdt_i(o,v);
-}
-
-void EnvelopeUI::cb_e3rval_i(WidgetPDial* o, void*) {
- env->PR_val=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e3rval(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3rval_i(o,v);
-}
-
-void EnvelopeUI::cb_e3envstretch_i(WidgetPDial* o, void*) {
- env->Penvstretch=(int)o->value();
-}
-void EnvelopeUI::cb_e3envstretch(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3envstretch_i(o,v);
-}
-
-void EnvelopeUI::cb_e3forcedrelease_i(Fl_Check_Button* o, void*) {
- env->Pforcedrelease=(int)o->value();
-}
-void EnvelopeUI::cb_e3forcedrelease(Fl_Check_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e3forcedrelease_i(o,v);
-}
-
-void EnvelopeUI::cb_E2_i(Fl_Button*, void*) {
- freemodeeditwindow->show();
-}
-void EnvelopeUI::cb_E2(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_E2_i(o,v);
-}
-
-void EnvelopeUI::cb_C3_i(Fl_Button*, void*) {
- presetsui->copy(env);
-}
-void EnvelopeUI::cb_C3(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C3_i(o,v);
-}
-
-void EnvelopeUI::cb_P3_i(Fl_Button*, void*) {
- presetsui->paste(env,this);
-}
-void EnvelopeUI::cb_P3(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P3_i(o,v);
-}
-
-void EnvelopeUI::cb_e4aval_i(WidgetPDial* o, void*) {
- env->PA_val=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e4aval(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4aval_i(o,v);
-}
-
-void EnvelopeUI::cb_e4adt_i(WidgetPDial* o, void*) {
- env->PA_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e4adt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4adt_i(o,v);
-}
-
-void EnvelopeUI::cb_e4rval_i(WidgetPDial* o, void*) {
- env->PR_val=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e4rval(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4rval_i(o,v);
-}
-
-void EnvelopeUI::cb_e4rdt_i(WidgetPDial* o, void*) {
- env->PR_dt=(int)o->value();
-freeedit->redraw();
-}
-void EnvelopeUI::cb_e4rdt(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4rdt_i(o,v);
-}
-
-void EnvelopeUI::cb_e4envstretch_i(WidgetPDial* o, void*) {
- env->Penvstretch=(int)o->value();
-}
-void EnvelopeUI::cb_e4envstretch(WidgetPDial* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4envstretch_i(o,v);
-}
-
-void EnvelopeUI::cb_e4forcedrelease_i(Fl_Check_Button* o, void*) {
- env->Pforcedrelease=(int)o->value();
-}
-void EnvelopeUI::cb_e4forcedrelease(Fl_Check_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_e4forcedrelease_i(o,v);
-}
-
-void EnvelopeUI::cb_C4_i(Fl_Button*, void*) {
- presetsui->copy(env);
-}
-void EnvelopeUI::cb_C4(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C4_i(o,v);
-}
-
-void EnvelopeUI::cb_P4_i(Fl_Button*, void*) {
- presetsui->paste(env,this);
-}
-void EnvelopeUI::cb_P4(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P4_i(o,v);
-}
-
-void EnvelopeUI::cb_E3_i(Fl_Button*, void*) {
- freemodeeditwindow->show();
-}
-void EnvelopeUI::cb_E3(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->user_data()))->cb_E3_i(o,v);
-}
-
-void EnvelopeUI::cb_freeeditsmall_i(EnvelopeFreeEdit*, void*) {
- envfree->redraw();
-}
-void EnvelopeUI::cb_freeeditsmall(EnvelopeFreeEdit* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_freeeditsmall_i(o,v);
-}
-
-void EnvelopeUI::cb_E4_i(Fl_Button*, void*) {
- freemodeeditwindow->show();
-}
-void EnvelopeUI::cb_E4(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_E4_i(o,v);
-}
-
-void EnvelopeUI::cb_C5_i(Fl_Button*, void*) {
- presetsui->copy(env);
-}
-void EnvelopeUI::cb_C5(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_C5_i(o,v);
-}
-
-void EnvelopeUI::cb_P5_i(Fl_Button*, void*) {
- presetsui->paste(env,this);
-}
-void EnvelopeUI::cb_P5(Fl_Button* o, void* v) {
- ((EnvelopeUI*)(o->parent()->parent()->user_data()))->cb_P5_i(o,v);
-}
-
-EnvelopeUI::EnvelopeUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- env=NULL;
- freemodeeditwindow=NULL;
- envADSR=NULL;
- envASR=NULL;
- envADSRfilter=NULL;
- envASRbw=NULL;
- envfree=NULL;
-}
-
-EnvelopeUI::~EnvelopeUI() {
- envwindow->hide();
- hide();
- freemodeeditwindow->hide();
- delete (freemodeeditwindow);
-}
-
-Fl_Double_Window* EnvelopeUI::make_freemode_edit_window() {
- { freemodeeditwindow = new Fl_Double_Window(575, 180, "Envelope");
- freemodeeditwindow->user_data((void*)(this));
- { EnvelopeFreeEdit* o = freeedit = new EnvelopeFreeEdit(5, 5, 565, 145, "Envelope");
- freeedit->box(FL_FLAT_BOX);
- freeedit->color(FL_FOREGROUND_COLOR);
- freeedit->selection_color(FL_BACKGROUND_COLOR);
- freeedit->labeltype(FL_NORMAL_LABEL);
- freeedit->labelfont(0);
- freeedit->labelsize(14);
- freeedit->labelcolor(FL_FOREGROUND_COLOR);
- freeedit->align(Fl_Align(FL_ALIGN_CENTER));
- freeedit->when(FL_WHEN_RELEASE);
- o->init(env);
- } // EnvelopeFreeEdit* freeedit
- { Fl_Button* o = addpoint = new Fl_Button(115, 155, 80, 20, "Add point");
- addpoint->box(FL_THIN_UP_BOX);
- addpoint->callback((Fl_Callback*)cb_addpoint);
- if (env->Pfreemode==0) o->hide();
- } // Fl_Button* addpoint
- { Fl_Button* o = deletepoint = new Fl_Button(200, 155, 80, 20, "Delete point");
- deletepoint->box(FL_THIN_UP_BOX);
- deletepoint->callback((Fl_Callback*)cb_deletepoint);
- if (env->Pfreemode==0) o->hide();
- } // Fl_Button* deletepoint
- { freemodebutton = new Fl_Light_Button(10, 155, 95, 25, "FreeMode");
- freemodebutton->tooltip("Enable or disable the freemode");
- freemodebutton->box(FL_PLASTIC_UP_BOX);
- freemodebutton->callback((Fl_Callback*)cb_freemodebutton);
- } // Fl_Light_Button* freemodebutton
- { Fl_Check_Button* o = forcedreleasecheck = new Fl_Check_Button(410, 165, 40, 15, "frcR");
- forcedreleasecheck->tooltip("Forced Relase");
- forcedreleasecheck->down_box(FL_DOWN_BOX);
- forcedreleasecheck->labelsize(10);
- forcedreleasecheck->callback((Fl_Callback*)cb_forcedreleasecheck);
- o->value(env->Pforcedrelease);
- if (env->Pfreemode==0) o->hide();
- } // Fl_Check_Button* forcedreleasecheck
- { WidgetPDial* o = envstretchdial = new WidgetPDial(380, 155, 25, 25, "Str.");
- envstretchdial->tooltip("Envelope stretch (on lower notes make the envelope longer)");
- envstretchdial->box(FL_ROUND_UP_BOX);
- envstretchdial->color(FL_BACKGROUND_COLOR);
- envstretchdial->selection_color(FL_INACTIVE_COLOR);
- envstretchdial->labeltype(FL_NORMAL_LABEL);
- envstretchdial->labelfont(0);
- envstretchdial->labelsize(10);
- envstretchdial->labelcolor(FL_FOREGROUND_COLOR);
- envstretchdial->maximum(127);
- envstretchdial->step(1);
- envstretchdial->callback((Fl_Callback*)cb_envstretchdial);
- envstretchdial->align(Fl_Align(FL_ALIGN_LEFT));
- envstretchdial->when(FL_WHEN_CHANGED);
- o->value(env->Penvstretch);
- if (env->Pfreemode==0) o->hide();
- } // WidgetPDial* envstretchdial
- { Fl_Button* o = new Fl_Button(510, 155, 60, 25, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Check_Button* o = linearenvelopecheck = new Fl_Check_Button(410, 151, 30, 15, "L");
- linearenvelopecheck->tooltip("Linear Envelope");
- linearenvelopecheck->down_box(FL_DOWN_BOX);
- linearenvelopecheck->labelsize(10);
- linearenvelopecheck->callback((Fl_Callback*)cb_linearenvelopecheck);
- o->value(env->Plinearenvelope);
- if ((env->Pfreemode==0)||(env->Envmode>2)) o->hide();
- } // Fl_Check_Button* linearenvelopecheck
- { Fl_Counter* o = sustaincounter = new Fl_Counter(315, 155, 40, 15, "Sust");
- sustaincounter->tooltip("Sustain (0 is disabled)");
- sustaincounter->type(1);
- sustaincounter->labelsize(11);
- sustaincounter->minimum(0);
- sustaincounter->maximum(127);
- sustaincounter->step(1);
- sustaincounter->callback((Fl_Callback*)cb_sustaincounter);
- sustaincounter->align(Fl_Align(FL_ALIGN_LEFT));
- o->value(env->Penvsustain);
- if (env->Pfreemode==0) o->hide();
- o->maximum(env->Penvpoints-2);
- } // Fl_Counter* sustaincounter
- { Fl_Button* o = new Fl_Button(465, 160, 15, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(482, 160, 15, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- freemodeeditwindow->end();
- } // Fl_Double_Window* freemodeeditwindow
- return freemodeeditwindow;
-}
-
-Fl_Group* EnvelopeUI::make_ADSR_window() {
- { envADSR = new Fl_Group(0, 0, 205, 70);
- envADSR->box(FL_FLAT_BOX);
- envADSR->color(FL_LIGHT1);
- envADSR->selection_color(FL_BACKGROUND_COLOR);
- envADSR->labeltype(FL_NO_LABEL);
- envADSR->labelfont(1);
- envADSR->labelsize(14);
- envADSR->labelcolor(FL_FOREGROUND_COLOR);
- envADSR->user_data((void*)(this));
- envADSR->align(Fl_Align(FL_ALIGN_TOP));
- envADSR->when(FL_WHEN_RELEASE);
- { Fl_Group* o = new Fl_Group(0, 0, 205, 70, "Amplitude Envelope");
- o->box(FL_PLASTIC_UP_BOX);
- o->color(FL_CYAN);
- o->labeltype(FL_ENGRAVED_LABEL);
- o->labelsize(10);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { WidgetPDial* o = e1adt = new WidgetPDial(5, 20, 30, 30, "A.dt");
- e1adt->tooltip("Attack time");
- e1adt->box(FL_ROUND_UP_BOX);
- e1adt->color(FL_BACKGROUND_COLOR);
- e1adt->selection_color(FL_INACTIVE_COLOR);
- e1adt->labeltype(FL_NORMAL_LABEL);
- e1adt->labelfont(0);
- e1adt->labelsize(10);
- e1adt->labelcolor(FL_FOREGROUND_COLOR);
- e1adt->maximum(127);
- e1adt->step(1);
- e1adt->callback((Fl_Callback*)cb_e1adt);
- e1adt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e1adt->when(FL_WHEN_CHANGED);
- o->value(env->PA_dt);
- } // WidgetPDial* e1adt
- { WidgetPDial* o = e1ddt = new WidgetPDial(40, 20, 30, 30, "D.dt");
- e1ddt->tooltip("Decay time");
- e1ddt->box(FL_ROUND_UP_BOX);
- e1ddt->color(FL_BACKGROUND_COLOR);
- e1ddt->selection_color(FL_INACTIVE_COLOR);
- e1ddt->labeltype(FL_NORMAL_LABEL);
- e1ddt->labelfont(0);
- e1ddt->labelsize(10);
- e1ddt->labelcolor(FL_FOREGROUND_COLOR);
- e1ddt->maximum(127);
- e1ddt->step(1);
- e1ddt->callback((Fl_Callback*)cb_e1ddt);
- e1ddt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e1ddt->when(FL_WHEN_CHANGED);
- o->value(env->PD_dt);
- } // WidgetPDial* e1ddt
- { WidgetPDial* o = e1rdt = new WidgetPDial(110, 20, 30, 30, "R.dt");
- e1rdt->tooltip("Release time");
- e1rdt->box(FL_ROUND_UP_BOX);
- e1rdt->color(FL_BACKGROUND_COLOR);
- e1rdt->selection_color(FL_INACTIVE_COLOR);
- e1rdt->labeltype(FL_NORMAL_LABEL);
- e1rdt->labelfont(0);
- e1rdt->labelsize(10);
- e1rdt->labelcolor(FL_FOREGROUND_COLOR);
- e1rdt->maximum(127);
- e1rdt->step(1);
- e1rdt->callback((Fl_Callback*)cb_e1rdt);
- e1rdt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e1rdt->when(FL_WHEN_CHANGED);
- o->value(env->PR_dt);
- } // WidgetPDial* e1rdt
- { WidgetPDial* o = e1sval = new WidgetPDial(75, 20, 30, 30, "S.val");
- e1sval->tooltip("Sustain value");
- e1sval->box(FL_ROUND_UP_BOX);
- e1sval->color(FL_BACKGROUND_COLOR);
- e1sval->selection_color(FL_INACTIVE_COLOR);
- e1sval->labeltype(FL_NORMAL_LABEL);
- e1sval->labelfont(0);
- e1sval->labelsize(10);
- e1sval->labelcolor(FL_FOREGROUND_COLOR);
- e1sval->maximum(127);
- e1sval->step(1);
- e1sval->callback((Fl_Callback*)cb_e1sval);
- e1sval->align(Fl_Align(FL_ALIGN_BOTTOM));
- e1sval->when(FL_WHEN_CHANGED);
- o->value(env->PS_val);
- } // WidgetPDial* e1sval
- { Fl_Check_Button* o = e1forcedrelease = new Fl_Check_Button(180, 35, 20, 15, "frcR");
- e1forcedrelease->tooltip("Forced Relase");
- e1forcedrelease->down_box(FL_DOWN_BOX);
- e1forcedrelease->labelsize(10);
- e1forcedrelease->callback((Fl_Callback*)cb_e1forcedrelease);
- e1forcedrelease->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- o->value(env->Pforcedrelease);
- } // Fl_Check_Button* e1forcedrelease
- { WidgetPDial* o = e1envstretch = new WidgetPDial(145, 25, 25, 25, "Stretch");
- e1envstretch->tooltip("Envelope stretch (on lower notes makes the envelope longer)");
- e1envstretch->box(FL_ROUND_UP_BOX);
- e1envstretch->color(FL_BACKGROUND_COLOR);
- e1envstretch->selection_color(FL_INACTIVE_COLOR);
- e1envstretch->labeltype(FL_NORMAL_LABEL);
- e1envstretch->labelfont(0);
- e1envstretch->labelsize(10);
- e1envstretch->labelcolor(FL_FOREGROUND_COLOR);
- e1envstretch->maximum(127);
- e1envstretch->step(1);
- e1envstretch->callback((Fl_Callback*)cb_e1envstretch);
- e1envstretch->align(Fl_Align(FL_ALIGN_BOTTOM));
- e1envstretch->when(FL_WHEN_CHANGED);
- o->value(env->Penvstretch);
- } // WidgetPDial* e1envstretch
- { Fl_Button* o = new Fl_Button(185, 5, 15, 15, "E");
- o->tooltip("Envelope window");
- o->box(FL_PLASTIC_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_E);
- } // Fl_Button* o
- { Fl_Check_Button* o = e1linearenvelope = new Fl_Check_Button(180, 20, 15, 15, "L");
- e1linearenvelope->tooltip("The evelope is linear");
- e1linearenvelope->down_box(FL_DOWN_BOX);
- e1linearenvelope->labelsize(10);
- e1linearenvelope->callback((Fl_Callback*)cb_e1linearenvelope);
- e1linearenvelope->align(Fl_Align(FL_ALIGN_LEFT));
- o->value(env->Plinearenvelope);
- } // Fl_Check_Button* e1linearenvelope
- { Fl_Button* o = new Fl_Button(150, 5, 15, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(167, 5, 15, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P1);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- envADSR->end();
- } // Fl_Group* envADSR
- return envADSR;
-}
-
-Fl_Group* EnvelopeUI::make_ASR_window() {
- { envASR = new Fl_Group(0, 0, 210, 70);
- envASR->box(FL_FLAT_BOX);
- envASR->color(FL_BACKGROUND_COLOR);
- envASR->selection_color(FL_BACKGROUND_COLOR);
- envASR->labeltype(FL_NO_LABEL);
- envASR->labelfont(0);
- envASR->labelsize(14);
- envASR->labelcolor(FL_FOREGROUND_COLOR);
- envASR->user_data((void*)(this));
- envASR->align(Fl_Align(FL_ALIGN_TOP));
- envASR->when(FL_WHEN_RELEASE);
- { Fl_Group* o = new Fl_Group(0, 0, 210, 70, "Frequency Envelope");
- o->box(FL_PLASTIC_UP_BOX);
- o->color(FL_CYAN);
- o->labeltype(FL_ENGRAVED_LABEL);
- o->labelsize(10);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { WidgetPDial* o = e2aval = new WidgetPDial(5, 20, 30, 30, "A.val");
- e2aval->tooltip("Starting value");
- e2aval->box(FL_ROUND_UP_BOX);
- e2aval->color(FL_BACKGROUND_COLOR);
- e2aval->selection_color(FL_INACTIVE_COLOR);
- e2aval->labeltype(FL_NORMAL_LABEL);
- e2aval->labelfont(0);
- e2aval->labelsize(10);
- e2aval->labelcolor(FL_FOREGROUND_COLOR);
- e2aval->maximum(127);
- e2aval->step(1);
- e2aval->callback((Fl_Callback*)cb_e2aval);
- e2aval->align(Fl_Align(FL_ALIGN_BOTTOM));
- e2aval->when(FL_WHEN_CHANGED);
- o->value(env->PA_val);
- } // WidgetPDial* e2aval
- { WidgetPDial* o = e2adt = new WidgetPDial(40, 20, 30, 30, "A.dt");
- e2adt->tooltip("Attack time");
- e2adt->box(FL_ROUND_UP_BOX);
- e2adt->color(FL_BACKGROUND_COLOR);
- e2adt->selection_color(FL_INACTIVE_COLOR);
- e2adt->labeltype(FL_NORMAL_LABEL);
- e2adt->labelfont(0);
- e2adt->labelsize(10);
- e2adt->labelcolor(FL_FOREGROUND_COLOR);
- e2adt->maximum(127);
- e2adt->step(1);
- e2adt->callback((Fl_Callback*)cb_e2adt);
- e2adt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e2adt->when(FL_WHEN_CHANGED);
- o->value(env->PA_dt);
- } // WidgetPDial* e2adt
- { WidgetPDial* o = e2rval = new WidgetPDial(110, 20, 30, 30, "R.val");
- e2rval->tooltip("Release value");
- e2rval->box(FL_ROUND_UP_BOX);
- e2rval->color(FL_BACKGROUND_COLOR);
- e2rval->selection_color(FL_INACTIVE_COLOR);
- e2rval->labeltype(FL_NORMAL_LABEL);
- e2rval->labelfont(0);
- e2rval->labelsize(10);
- e2rval->labelcolor(FL_FOREGROUND_COLOR);
- e2rval->maximum(127);
- e2rval->step(1);
- e2rval->callback((Fl_Callback*)cb_e2rval);
- e2rval->align(Fl_Align(FL_ALIGN_BOTTOM));
- e2rval->when(FL_WHEN_CHANGED);
- o->value(env->PR_val);
- } // WidgetPDial* e2rval
- { WidgetPDial* o = e2rdt = new WidgetPDial(75, 20, 30, 30, "R.dt");
- e2rdt->tooltip("Release time");
- e2rdt->box(FL_ROUND_UP_BOX);
- e2rdt->color(FL_BACKGROUND_COLOR);
- e2rdt->selection_color(FL_INACTIVE_COLOR);
- e2rdt->labeltype(FL_NORMAL_LABEL);
- e2rdt->labelfont(0);
- e2rdt->labelsize(10);
- e2rdt->labelcolor(FL_FOREGROUND_COLOR);
- e2rdt->maximum(127);
- e2rdt->step(1);
- e2rdt->callback((Fl_Callback*)cb_e2rdt);
- e2rdt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e2rdt->when(FL_WHEN_CHANGED);
- o->value(env->PR_dt);
- } // WidgetPDial* e2rdt
- { WidgetPDial* o = e2envstretch = new WidgetPDial(145, 25, 25, 25, "Stretch");
- e2envstretch->tooltip("Envelope stretch (on lower notes makes the envelope longer)");
- e2envstretch->box(FL_ROUND_UP_BOX);
- e2envstretch->color(FL_BACKGROUND_COLOR);
- e2envstretch->selection_color(FL_INACTIVE_COLOR);
- e2envstretch->labeltype(FL_NORMAL_LABEL);
- e2envstretch->labelfont(0);
- e2envstretch->labelsize(10);
- e2envstretch->labelcolor(FL_FOREGROUND_COLOR);
- e2envstretch->maximum(127);
- e2envstretch->step(1);
- e2envstretch->callback((Fl_Callback*)cb_e2envstretch);
- e2envstretch->align(Fl_Align(FL_ALIGN_BOTTOM));
- e2envstretch->when(FL_WHEN_CHANGED);
- o->value(env->Penvstretch);
- } // WidgetPDial* e2envstretch
- { Fl_Check_Button* o = e2forcedrelease = new Fl_Check_Button(180, 25, 15, 25, "frcR");
- e2forcedrelease->tooltip("Forced release");
- e2forcedrelease->down_box(FL_DOWN_BOX);
- e2forcedrelease->labelsize(10);
- e2forcedrelease->callback((Fl_Callback*)cb_e2forcedrelease);
- e2forcedrelease->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- o->value(env->Pforcedrelease);
- } // Fl_Check_Button* e2forcedrelease
- { Fl_Button* o = new Fl_Button(155, 5, 15, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C2);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(172, 5, 15, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P2);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(190, 5, 15, 15, "E");
- o->tooltip("Envelope window");
- o->box(FL_PLASTIC_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_E1);
- } // Fl_Button* o
- envASR->end();
- } // Fl_Group* envASR
- return envASR;
-}
-
-Fl_Group* EnvelopeUI::make_ADSRfilter_window() {
- { envADSRfilter = new Fl_Group(0, 0, 275, 70);
- envADSRfilter->box(FL_FLAT_BOX);
- envADSRfilter->color(FL_LIGHT1);
- envADSRfilter->selection_color(FL_BACKGROUND_COLOR);
- envADSRfilter->labeltype(FL_NO_LABEL);
- envADSRfilter->labelfont(1);
- envADSRfilter->labelsize(14);
- envADSRfilter->labelcolor(FL_FOREGROUND_COLOR);
- envADSRfilter->user_data((void*)(this));
- envADSRfilter->align(Fl_Align(FL_ALIGN_TOP));
- envADSRfilter->when(FL_WHEN_RELEASE);
- { Fl_Group* o = new Fl_Group(0, 0, 275, 70, "Filter Envelope");
- o->box(FL_PLASTIC_UP_BOX);
- o->color(FL_CYAN);
- o->labeltype(FL_ENGRAVED_LABEL);
- o->labelsize(10);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { WidgetPDial* o = e3aval = new WidgetPDial(5, 20, 30, 30, "A.val");
- e3aval->tooltip("Starting value");
- e3aval->box(FL_ROUND_UP_BOX);
- e3aval->color(FL_BACKGROUND_COLOR);
- e3aval->selection_color(FL_INACTIVE_COLOR);
- e3aval->labeltype(FL_NORMAL_LABEL);
- e3aval->labelfont(0);
- e3aval->labelsize(10);
- e3aval->labelcolor(FL_FOREGROUND_COLOR);
- e3aval->maximum(127);
- e3aval->step(1);
- e3aval->callback((Fl_Callback*)cb_e3aval);
- e3aval->align(Fl_Align(FL_ALIGN_BOTTOM));
- e3aval->when(FL_WHEN_CHANGED);
- o->value(env->PA_val);
- } // WidgetPDial* e3aval
- { WidgetPDial* o = e3adt = new WidgetPDial(40, 20, 30, 30, "A.dt");
- e3adt->tooltip("Attack time");
- e3adt->box(FL_ROUND_UP_BOX);
- e3adt->color(FL_BACKGROUND_COLOR);
- e3adt->selection_color(FL_INACTIVE_COLOR);
- e3adt->labeltype(FL_NORMAL_LABEL);
- e3adt->labelfont(0);
- e3adt->labelsize(10);
- e3adt->labelcolor(FL_FOREGROUND_COLOR);
- e3adt->maximum(127);
- e3adt->step(1);
- e3adt->callback((Fl_Callback*)cb_e3adt);
- e3adt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e3adt->when(FL_WHEN_CHANGED);
- o->value(env->PA_dt);
- } // WidgetPDial* e3adt
- { WidgetPDial* o = e3dval = new WidgetPDial(75, 20, 30, 30, "D.val");
- e3dval->tooltip("decay value");
- e3dval->box(FL_ROUND_UP_BOX);
- e3dval->color(FL_BACKGROUND_COLOR);
- e3dval->selection_color(FL_INACTIVE_COLOR);
- e3dval->labeltype(FL_NORMAL_LABEL);
- e3dval->labelfont(0);
- e3dval->labelsize(10);
- e3dval->labelcolor(FL_FOREGROUND_COLOR);
- e3dval->maximum(127);
- e3dval->step(1);
- e3dval->callback((Fl_Callback*)cb_e3dval);
- e3dval->align(Fl_Align(FL_ALIGN_BOTTOM));
- e3dval->when(FL_WHEN_CHANGED);
- o->value(env->PD_val);
- } // WidgetPDial* e3dval
- { WidgetPDial* o = e3ddt = new WidgetPDial(110, 20, 30, 30, "D.dt");
- e3ddt->tooltip("decay time");
- e3ddt->box(FL_ROUND_UP_BOX);
- e3ddt->color(FL_BACKGROUND_COLOR);
- e3ddt->selection_color(FL_INACTIVE_COLOR);
- e3ddt->labeltype(FL_NORMAL_LABEL);
- e3ddt->labelfont(0);
- e3ddt->labelsize(10);
- e3ddt->labelcolor(FL_FOREGROUND_COLOR);
- e3ddt->maximum(127);
- e3ddt->step(1);
- e3ddt->callback((Fl_Callback*)cb_e3ddt);
- e3ddt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e3ddt->when(FL_WHEN_CHANGED);
- o->value(env->PD_dt);
- } // WidgetPDial* e3ddt
- { WidgetPDial* o = e3rdt = new WidgetPDial(145, 20, 30, 30, "R.dt");
- e3rdt->tooltip("Release time");
- e3rdt->box(FL_ROUND_UP_BOX);
- e3rdt->color(FL_BACKGROUND_COLOR);
- e3rdt->selection_color(FL_INACTIVE_COLOR);
- e3rdt->labeltype(FL_NORMAL_LABEL);
- e3rdt->labelfont(0);
- e3rdt->labelsize(10);
- e3rdt->labelcolor(FL_FOREGROUND_COLOR);
- e3rdt->maximum(127);
- e3rdt->step(1);
- e3rdt->callback((Fl_Callback*)cb_e3rdt);
- e3rdt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e3rdt->when(FL_WHEN_CHANGED);
- o->value(env->PR_dt);
- } // WidgetPDial* e3rdt
- { WidgetPDial* o = e3rval = new WidgetPDial(180, 20, 30, 30, "R.val");
- e3rval->tooltip("Release value");
- e3rval->box(FL_ROUND_UP_BOX);
- e3rval->color(FL_BACKGROUND_COLOR);
- e3rval->selection_color(FL_INACTIVE_COLOR);
- e3rval->labeltype(FL_NORMAL_LABEL);
- e3rval->labelfont(0);
- e3rval->labelsize(10);
- e3rval->labelcolor(FL_FOREGROUND_COLOR);
- e3rval->maximum(127);
- e3rval->step(1);
- e3rval->callback((Fl_Callback*)cb_e3rval);
- e3rval->align(Fl_Align(FL_ALIGN_BOTTOM));
- e3rval->when(FL_WHEN_CHANGED);
- o->value(env->PR_val);
- } // WidgetPDial* e3rval
- { WidgetPDial* o = e3envstretch = new WidgetPDial(215, 25, 25, 25, "Stretch");
- e3envstretch->tooltip("Envelope stretch (on lower notes makes the envelope longer)");
- e3envstretch->box(FL_ROUND_UP_BOX);
- e3envstretch->color(FL_BACKGROUND_COLOR);
- e3envstretch->selection_color(FL_INACTIVE_COLOR);
- e3envstretch->labeltype(FL_NORMAL_LABEL);
- e3envstretch->labelfont(0);
- e3envstretch->labelsize(10);
- e3envstretch->labelcolor(FL_FOREGROUND_COLOR);
- e3envstretch->maximum(127);
- e3envstretch->step(1);
- e3envstretch->callback((Fl_Callback*)cb_e3envstretch);
- e3envstretch->align(Fl_Align(FL_ALIGN_BOTTOM));
- e3envstretch->when(FL_WHEN_CHANGED);
- o->value(env->Penvstretch);
- } // WidgetPDial* e3envstretch
- { Fl_Check_Button* o = e3forcedrelease = new Fl_Check_Button(250, 30, 15, 20, "frcR");
- e3forcedrelease->tooltip("Forced Relase");
- e3forcedrelease->down_box(FL_DOWN_BOX);
- e3forcedrelease->labelsize(10);
- e3forcedrelease->callback((Fl_Callback*)cb_e3forcedrelease);
- e3forcedrelease->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- o->value(env->Pforcedrelease);
- } // Fl_Check_Button* e3forcedrelease
- { Fl_Button* o = new Fl_Button(255, 5, 15, 15, "E");
- o->box(FL_PLASTIC_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_E2);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(220, 5, 15, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C3);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(237, 5, 15, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P3);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- envADSRfilter->end();
- } // Fl_Group* envADSRfilter
- return envADSRfilter;
-}
-
-Fl_Group* EnvelopeUI::make_ASRbw_window() {
- { envASRbw = new Fl_Group(0, 0, 210, 70);
- envASRbw->box(FL_FLAT_BOX);
- envASRbw->color(FL_BACKGROUND_COLOR);
- envASRbw->selection_color(FL_BACKGROUND_COLOR);
- envASRbw->labeltype(FL_NO_LABEL);
- envASRbw->labelfont(0);
- envASRbw->labelsize(14);
- envASRbw->labelcolor(FL_FOREGROUND_COLOR);
- envASRbw->user_data((void*)(this));
- envASRbw->align(Fl_Align(FL_ALIGN_TOP));
- envASRbw->when(FL_WHEN_RELEASE);
- { Fl_Group* o = new Fl_Group(0, 0, 210, 70, "BandWidth Envelope");
- o->box(FL_PLASTIC_UP_BOX);
- o->color(FL_CYAN);
- o->labeltype(FL_ENGRAVED_LABEL);
- o->labelsize(10);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { WidgetPDial* o = e4aval = new WidgetPDial(5, 20, 30, 30, "A.val");
- e4aval->tooltip("Starting value");
- e4aval->box(FL_ROUND_UP_BOX);
- e4aval->color(FL_BACKGROUND_COLOR);
- e4aval->selection_color(FL_INACTIVE_COLOR);
- e4aval->labeltype(FL_NORMAL_LABEL);
- e4aval->labelfont(0);
- e4aval->labelsize(10);
- e4aval->labelcolor(FL_FOREGROUND_COLOR);
- e4aval->maximum(127);
- e4aval->step(1);
- e4aval->callback((Fl_Callback*)cb_e4aval);
- e4aval->align(Fl_Align(FL_ALIGN_BOTTOM));
- e4aval->when(FL_WHEN_CHANGED);
- o->value(env->PA_val);
- } // WidgetPDial* e4aval
- { WidgetPDial* o = e4adt = new WidgetPDial(40, 20, 30, 30, "A.dt");
- e4adt->tooltip("Attack time");
- e4adt->box(FL_ROUND_UP_BOX);
- e4adt->color(FL_BACKGROUND_COLOR);
- e4adt->selection_color(FL_INACTIVE_COLOR);
- e4adt->labeltype(FL_NORMAL_LABEL);
- e4adt->labelfont(0);
- e4adt->labelsize(10);
- e4adt->labelcolor(FL_FOREGROUND_COLOR);
- e4adt->maximum(127);
- e4adt->step(1);
- e4adt->callback((Fl_Callback*)cb_e4adt);
- e4adt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e4adt->when(FL_WHEN_CHANGED);
- o->value(env->PA_dt);
- } // WidgetPDial* e4adt
- { WidgetPDial* o = e4rval = new WidgetPDial(110, 20, 30, 30, "R.val");
- e4rval->tooltip("Release value");
- e4rval->box(FL_ROUND_UP_BOX);
- e4rval->color(FL_BACKGROUND_COLOR);
- e4rval->selection_color(FL_INACTIVE_COLOR);
- e4rval->labeltype(FL_NORMAL_LABEL);
- e4rval->labelfont(0);
- e4rval->labelsize(10);
- e4rval->labelcolor(FL_FOREGROUND_COLOR);
- e4rval->maximum(127);
- e4rval->step(1);
- e4rval->callback((Fl_Callback*)cb_e4rval);
- e4rval->align(Fl_Align(FL_ALIGN_BOTTOM));
- e4rval->when(FL_WHEN_CHANGED);
- o->value(env->PR_val);
- } // WidgetPDial* e4rval
- { WidgetPDial* o = e4rdt = new WidgetPDial(75, 20, 30, 30, "R.dt");
- e4rdt->tooltip("Release time");
- e4rdt->box(FL_ROUND_UP_BOX);
- e4rdt->color(FL_BACKGROUND_COLOR);
- e4rdt->selection_color(FL_INACTIVE_COLOR);
- e4rdt->labeltype(FL_NORMAL_LABEL);
- e4rdt->labelfont(0);
- e4rdt->labelsize(10);
- e4rdt->labelcolor(FL_FOREGROUND_COLOR);
- e4rdt->maximum(127);
- e4rdt->step(1);
- e4rdt->callback((Fl_Callback*)cb_e4rdt);
- e4rdt->align(Fl_Align(FL_ALIGN_BOTTOM));
- e4rdt->when(FL_WHEN_CHANGED);
- o->value(env->PR_dt);
- } // WidgetPDial* e4rdt
- { WidgetPDial* o = e4envstretch = new WidgetPDial(145, 25, 25, 25, "Stretch");
- e4envstretch->tooltip("Envelope stretch (on lower notes makes the envelope longer)");
- e4envstretch->box(FL_ROUND_UP_BOX);
- e4envstretch->color(FL_BACKGROUND_COLOR);
- e4envstretch->selection_color(FL_INACTIVE_COLOR);
- e4envstretch->labeltype(FL_NORMAL_LABEL);
- e4envstretch->labelfont(0);
- e4envstretch->labelsize(10);
- e4envstretch->labelcolor(FL_FOREGROUND_COLOR);
- e4envstretch->maximum(127);
- e4envstretch->step(1);
- e4envstretch->callback((Fl_Callback*)cb_e4envstretch);
- e4envstretch->align(Fl_Align(FL_ALIGN_BOTTOM));
- e4envstretch->when(FL_WHEN_CHANGED);
- o->value(env->Penvstretch);
- } // WidgetPDial* e4envstretch
- { Fl_Check_Button* o = e4forcedrelease = new Fl_Check_Button(180, 25, 15, 25, "frcR");
- e4forcedrelease->tooltip("Forced release");
- e4forcedrelease->down_box(FL_DOWN_BOX);
- e4forcedrelease->labelsize(10);
- e4forcedrelease->callback((Fl_Callback*)cb_e4forcedrelease);
- e4forcedrelease->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- o->value(env->Pforcedrelease);
- } // Fl_Check_Button* e4forcedrelease
- { Fl_Button* o = new Fl_Button(155, 5, 15, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C4);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(172, 5, 15, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P4);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(190, 5, 15, 15, "E");
- o->box(FL_PLASTIC_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_E3);
- } // Fl_Button* o
- envASRbw->end();
- } // Fl_Group* envASRbw
- return envASRbw;
-}
-
-Fl_Group* EnvelopeUI::make_free_window() {
- { envfree = new Fl_Group(0, 0, 205, 70);
- envfree->box(FL_FLAT_BOX);
- envfree->color(FL_LIGHT1);
- envfree->selection_color(FL_BACKGROUND_COLOR);
- envfree->labeltype(FL_NO_LABEL);
- envfree->labelfont(1);
- envfree->labelsize(14);
- envfree->labelcolor(FL_FOREGROUND_COLOR);
- envfree->user_data((void*)(this));
- envfree->align(Fl_Align(FL_ALIGN_TOP));
- envfree->when(FL_WHEN_RELEASE);
- { envfreegroup = new Fl_Group(0, 0, 205, 70, "Amplitude Envelope");
- envfreegroup->box(FL_PLASTIC_UP_BOX);
- envfreegroup->color(FL_CYAN);
- envfreegroup->labeltype(FL_ENGRAVED_LABEL);
- envfreegroup->labelsize(10);
- envfreegroup->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeFreeEdit* o = freeeditsmall = new EnvelopeFreeEdit(5, 20, 195, 45, "Envelope");
- freeeditsmall->box(FL_FLAT_BOX);
- freeeditsmall->color(FL_FOREGROUND_COLOR);
- freeeditsmall->selection_color(FL_BACKGROUND_COLOR);
- freeeditsmall->labeltype(FL_NORMAL_LABEL);
- freeeditsmall->labelfont(0);
- freeeditsmall->labelsize(14);
- freeeditsmall->labelcolor(FL_FOREGROUND_COLOR);
- freeeditsmall->callback((Fl_Callback*)cb_freeeditsmall);
- freeeditsmall->align(Fl_Align(FL_ALIGN_CENTER));
- freeeditsmall->when(FL_WHEN_RELEASE);
- Fl_Group::current()->resizable(freeeditsmall);
- o->init(env);
- } // EnvelopeFreeEdit* freeeditsmall
- { Fl_Button* o = new Fl_Button(185, 5, 15, 15, "E");
- o->box(FL_PLASTIC_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_E4);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(150, 5, 15, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C5);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(167, 5, 15, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P5);
- } // Fl_Button* o
- envfreegroup->end();
- Fl_Group::current()->resizable(envfreegroup);
- } // Fl_Group* envfreegroup
- envfree->end();
- } // Fl_Group* envfree
- return envfree;
-}
-
-void EnvelopeUI::init(EnvelopeParams *env_) {
- env=env_;
- make_ADSR_window();
- make_ASR_window();
- make_ADSRfilter_window();
- make_ASRbw_window();
- make_free_window();
-
- make_freemode_edit_window();
-
- envwindow=NULL;
- if (env->Envmode==3) envfreegroup->label("Frequency Envelope");
- if (env->Envmode==4) envfreegroup->label("Filter Envelope");
- if (env->Envmode==5) envfreegroup->label("Bandwidth Envelope");
-
- freemodeeditwindow->label(this->label());
-
-
- freeeditsmall->setpair(freeedit);
- freeedit->setpair(freeeditsmall);
-
-
- refresh();
-}
-
-void EnvelopeUI::reinit() {
- if (env->Pfreemode!=0){
- int answer=fl_choice("Disable the free mode of the Envelope?","No","Yes",NULL);
- if (env->Pfreemode!=0) freemodebutton->value(1);
- else freemodebutton->value(0);
- if (answer==0) return;
- };
-
- if (env->Pfreemode==0) env->Pfreemode=1;
- else env->Pfreemode=0;
-
- hide();
- int winx=freemodeeditwindow->x();
- int winy=freemodeeditwindow->y();
-
- freemodeeditwindow->hide();
-
- envwindow->hide();
- Fl_Group *par=envwindow->parent();
- par->hide();
-
-
- refresh();
- envwindow->show();
- par->redraw();
-
- par->show();
- show();
- freemodeeditwindow->position(winx,winy);
- freemodeeditwindow->show();
-
- if (env->Pfreemode!=0) {
- freemodebutton->value(1);
- addpoint->show();
- deletepoint->show();
- forcedreleasecheck->show();
- }else{
- freemodebutton->value(0);
- addpoint->hide();
- deletepoint->hide();
- forcedreleasecheck->hide();
- };
-}
-
-void EnvelopeUI::refresh() {
- freemodebutton->value(env->Pfreemode);
-
- sustaincounter->value(env->Penvsustain);
- if (env->Pfreemode==0) sustaincounter->hide();
- else sustaincounter->show();
- sustaincounter->maximum(env->Penvpoints-2);
-
- envstretchdial->value(env->Penvstretch);
- if (env->Pfreemode==0) envstretchdial->hide();
- else envstretchdial->show();
-
- linearenvelopecheck->value(env->Plinearenvelope);
- if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide();
- else linearenvelopecheck->show();
-
- forcedreleasecheck->value(env->Pforcedrelease);
- if (env->Pfreemode==0) forcedreleasecheck->hide();
-
- freeedit->redraw();
-
-
- if (env->Pfreemode==0){
- switch(env->Envmode){
- case(1):
- case(2):
- e1adt->value(env->PA_dt);
- e1ddt->value(env->PD_dt);
- e1sval->value(env->PS_val);
- e1rdt->value(env->PR_dt);
- e1envstretch->value(env->Penvstretch);
- e1linearenvelope->value(env->Plinearenvelope);
- e1forcedrelease->value(env->Pforcedrelease);
- break;
- case(3):
- e2aval->value(env->PA_val);
- e2adt->value(env->PA_dt);
- e2rdt->value(env->PR_dt);
- e2rval->value(env->PR_val);
- e2envstretch->value(env->Penvstretch);
- e2forcedrelease->value(env->Pforcedrelease);
- break;
- case(4):
- e3aval->value(env->PA_val);
- e3adt->value(env->PA_dt);
- e3dval->value(env->PD_val);
- e3ddt->value(env->PD_dt);
- e3rdt->value(env->PR_dt);
- e3rval->value(env->PR_val);
- e3envstretch->value(env->Penvstretch);
- e3forcedrelease->value(env->Pforcedrelease);
- break;
- case(5):
- e4aval->value(env->PA_val);
- e4adt->value(env->PA_dt);
- e4rdt->value(env->PR_dt);
- e4rval->value(env->PR_val);
- e4envstretch->value(env->Penvstretch);
- e4forcedrelease->value(env->Pforcedrelease);
- break;
- default:
- break;
- };
- }else{
- envfree->redraw();
- };
-
-
- envADSR->hide();
- envASR->hide();
- envADSRfilter->hide();
- envASRbw->hide();
- envfree->hide();
-
- if (env->Pfreemode==0){
- switch(env->Envmode){
- case(1):
- case(2):
- envwindow=envADSR;
- break;
- case(3):
- envwindow=envASR;
- break;
- case(4):
- envwindow=envADSRfilter;
- break;
- case(5):
- envwindow=envASRbw;
- break;
- default:
- break;
- };
- }else{
- envwindow=envfree;
- };
-
- envwindow->resize(this->x(),this->y(),this->w(),this->h());
-
- envwindow->show();
-}
diff --git a/plugins/zynaddsubfx/src/UI/EnvelopeUI.fl b/plugins/zynaddsubfx/src/UI/EnvelopeUI.fl
deleted file mode 100644
index 3b49da3..0000000
--- a/plugins/zynaddsubfx/src/UI/EnvelopeUI.fl
+++ /dev/null
@@ -1,851 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0106
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include "../globals.h"} {public
-}
-
-decl {\#include <FL/Fl_Group.H>} {public
-}
-
-decl {\#include "../Params/EnvelopeParams.h"} {public
-}
-
-decl {\#include <FL/Fl_Box.H>} {public
-}
-
-decl {\#include <FL/fl_draw.H>} {public
-}
-
-decl {\#include <FL/fl_ask.H>} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class EnvelopeFreeEdit {: {public Fl_Box}
-} {
- Function {EnvelopeFreeEdit(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {env=NULL;
-pair=NULL;} {}
- }
- Function {init(EnvelopeParams *env_)} {} {
- code {env=env_;
-oldx=-1;
-currentpoint=-1;
-cpx=0;
-lastpoint=-1;} {}
- }
- Function {setpair(Fl_Box *pair_)} {} {
- code {pair=pair_;} {}
- }
- Function {getpointx(int n)} {return_type int
- } {
- code {int lx=w()-10;
-int npoints=env->Penvpoints;
-
-float sum=0;
-for (int i=1;i<npoints;i++) sum+=env->getdt(i)+1;
-
-float sumbefore=0;//the sum of all points before the computed point
-for (int i=1;i<=n;i++) sumbefore+=env->getdt(i)+1;
-
-return((int) (sumbefore/(REALTYPE) sum*lx));} {}
- }
- Function {getpointy(int n)} {return_type int
- } {
- code {int ly=h()-10;
-
-return((int) ((1.0-env->Penvval[n]/127.0)*ly));} {}
- }
- Function {getnearest(int x,int y)} {return_type int
- } {
- code {x-=5;y-=5;
-
-int nearestpoint=0;
-int nearestval=1000000;//a big value
-for (int i=0;i<env->Penvpoints;i++){
- int distance=abs(x-getpointx(i))+abs(y-getpointy(i));
- if (distance<nearestval) {
- nearestpoint=i;
- nearestval=distance;
- };
-};
-return(nearestpoint);} {}
- }
- Function {draw()} {private
- } {
- code {int ox=x(),oy=y(),lx=w(),ly=h();
-if (env->Pfreemode==0) env->converttofree();
-int npoints=env->Penvpoints;
-
-if (active_r()) fl_color(FL_BLACK);
- else fl_color(90,90,90);
-if (!active_r()) currentpoint=-1;
-
-fl_rectf(ox,oy,lx,ly);
-
-ox+=5;oy+=5;lx-=10;ly-=10;
-
-//draw the lines
-fl_color(FL_GRAY);
-
-fl_line_style(FL_SOLID);
-fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-
-//draws the evelope points and lines
-Fl_Color alb=FL_WHITE;
-if (!active_r()) alb=fl_rgb_color(180,180,180);
-fl_color(alb);
-int oldxx=0,xx=0,oldyy=0,yy=getpointy(0);
-fl_rectf(ox-3,oy+yy-3,6,6);
-for (int i=1;i<npoints;i++){
- oldxx=xx;oldyy=yy;
- xx=getpointx(i);yy=getpointy(i);
- if (i==currentpoint) fl_color(FL_RED);
- else fl_color(alb);
- fl_line(ox+oldxx,oy+oldyy,ox+xx,oy+yy);
- fl_rectf(ox+xx-3,oy+yy-3,6,6);
-};
-
-//draw the last moved point point (if exists)
-if (lastpoint>=0){
- fl_color(FL_CYAN);
- fl_rectf(ox+getpointx(lastpoint)-5,oy+getpointy(lastpoint)-5,10,10);
-};
-
-//draw the sustain position
-if (env->Penvsustain>0){
- fl_color(FL_YELLOW);
- xx=getpointx(env->Penvsustain);
- fl_line(ox+xx,oy+0,ox+xx,oy+ly);
-};
-
-//Show the envelope duration and the current line duration
-fl_font(FL_HELVETICA|FL_BOLD,10);
-float time=0.0;
-if (currentpoint<=0){
- fl_color(alb);
- for (int i=1;i<npoints;i++) time+=env->getdt(i);
-} else {
- fl_color(255,0,0);
- time=env->getdt(currentpoint);
-};
-char tmpstr[20];
-if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time);
- else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0);
-fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0);} {}
- }
- Function {handle(int event)} {return_type int
- } {
- code {int x_=Fl::event_x()-x();
-int y_=Fl::event_y()-y();
-
-if (event==FL_PUSH) {
- currentpoint=getnearest(x_,y_);
- cpx=x_;
- cpdt=env->Penvdt[currentpoint];
- lastpoint=currentpoint;
- redraw();
- if (pair!=NULL) pair->redraw();
-};
-
-if (event==FL_RELEASE){
- currentpoint=-1;
- redraw();
- if (pair!=NULL) pair->redraw();
-};
-
-if ((event==FL_DRAG)&&(currentpoint>=0)){
- int ny=127-(int) (y_*127.0/h());
- if (ny<0) ny=0;if (ny>127) ny=127;
- env->Penvval[currentpoint]=ny;
-
- int dx=(int)((x_-cpx)*0.1);
- int newdt=cpdt+dx;
- if (newdt<0) newdt=0;if (newdt>127) newdt=127;
- if (currentpoint!=0) env->Penvdt[currentpoint]=newdt;
- else env->Penvdt[currentpoint]=0;
-
- redraw();
- if (pair!=NULL) pair->redraw();
-};
-
-
-return(1);} {}
- }
- decl {Fl_Box *pair;} {}
- decl {EnvelopeParams *env;} {}
- decl {int oldx;} {}
- decl {int currentpoint,cpx,cpdt;} {}
- decl {int lastpoint;} {public
- }
-}
-
-class EnvelopeUI {: {public Fl_Group,PresetsUI_}
-} {
- Function {EnvelopeUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {env=NULL;
-freemodeeditwindow=NULL;
-envADSR=NULL;
-envASR=NULL;
-envADSRfilter=NULL;
-envASRbw=NULL;
-envfree=NULL;} {}
- }
- Function {~EnvelopeUI()} {} {
- code {envwindow->hide();
-hide();
-freemodeeditwindow->hide();
-delete (freemodeeditwindow);} {}
- }
- Function {make_freemode_edit_window()} {} {
- Fl_Window freemodeeditwindow {
- label Envelope
- xywh {60 308 575 180} type Double hide
- } {
- Fl_Box freeedit {
- label Envelope
- xywh {5 5 565 145} box FLAT_BOX color 0
- code0 {o->init(env);}
- class EnvelopeFreeEdit
- }
- Fl_Button addpoint {
- label {Add point}
- callback {int curpoint=freeedit->lastpoint;
-if (curpoint<0) return;
-//if (curpoint>=env->Penvpoints-1) return;
-if (env->Penvpoints>=MAX_ENVELOPE_POINTS) return;
-
-for (int i=env->Penvpoints;i>=curpoint+1;i--){
- env->Penvdt[i]=env->Penvdt[i-1];
- env->Penvval[i]=env->Penvval[i-1];
-};
-
-if (curpoint==0) {
- env->Penvdt[1]=64;
-};
-
-env->Penvpoints++;
-if (curpoint<=env->Penvsustain) env->Penvsustain++;
-
-freeedit->lastpoint+=1;
-freeedit->redraw();
-envfree->redraw();
-
-sustaincounter->value(env->Penvsustain);
-sustaincounter->maximum(env->Penvpoints-2);}
- xywh {115 155 80 20} box THIN_UP_BOX
- code0 {if (env->Pfreemode==0) o->hide();}
- }
- Fl_Button deletepoint {
- label {Delete point}
- callback {int curpoint=freeedit->lastpoint;
-if (curpoint<1) return;
-if (curpoint>=env->Penvpoints-1) return;
-if (env->Penvpoints<=3) return;
-
-for (int i=curpoint+1;i<env->Penvpoints;i++){
- env->Penvdt[i-1]=env->Penvdt[i];
- env->Penvval[i-1]=env->Penvval[i];
-};
-
-env->Penvpoints--;
-
-if (curpoint<=env->Penvsustain) env->Penvsustain--;
-
-
-freeedit->lastpoint-=1;
-freeedit->redraw();
-envfree->redraw();
-
-sustaincounter->value(env->Penvsustain);
-sustaincounter->maximum(env->Penvpoints-2);}
- xywh {200 155 80 20} box THIN_UP_BOX
- code0 {if (env->Pfreemode==0) o->hide();}
- }
- Fl_Light_Button freemodebutton {
- label FreeMode
- callback {reinit();
-
-freeedit->lastpoint=-1;
-freeedit->redraw();}
- tooltip {Enable or disable the freemode} xywh {10 155 95 25} box PLASTIC_UP_BOX
- }
- Fl_Check_Button forcedreleasecheck {
- label frcR
- callback {env->Pforcedrelease=(int)o->value();}
- tooltip {Forced Relase} xywh {410 165 40 15} down_box DOWN_BOX labelsize 10
- code0 {o->value(env->Pforcedrelease);}
- code1 {if (env->Pfreemode==0) o->hide();}
- }
- Fl_Dial envstretchdial {
- label {Str.}
- callback {env->Penvstretch=(int)o->value();}
- tooltip {Envelope stretch (on lower notes make the envelope longer)} xywh {380 155 25 25} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1
- code0 {o->value(env->Penvstretch);}
- code1 {if (env->Pfreemode==0) o->hide();}
- class WidgetPDial
- }
- Fl_Button {} {
- label Close
- callback {freemodeeditwindow->hide();}
- xywh {510 155 60 25} box THIN_UP_BOX
- }
- Fl_Check_Button linearenvelopecheck {
- label L
- callback {env->Plinearenvelope=(int)o->value();}
- tooltip {Linear Envelope} xywh {410 151 30 15} down_box DOWN_BOX labelsize 10
- code0 {o->value(env->Plinearenvelope);}
- code1 {if ((env->Pfreemode==0)||(env->Envmode>2)) o->hide();}
- }
- Fl_Counter sustaincounter {
- label Sust
- callback {env->Penvsustain=(int) o->value();
-freeedit->redraw();
-envfree->redraw();}
- tooltip {Sustain (0 is disabled)} xywh {315 155 40 15} type Simple labelsize 11 align 4 minimum 0 maximum 127 step 1
- code0 {o->value(env->Penvsustain);}
- code1 {if (env->Pfreemode==0) o->hide();}
- code2 {o->maximum(env->Penvpoints-2);}
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(env);}
- xywh {465 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(env,this);}
- xywh {482 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- }
- }
- Function {make_ADSR_window()} {} {
- Fl_Window envADSR {
- xywh {108 336 205 70} type Double color 50 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Group {} {
- label {Amplitude Envelope}
- xywh {0 0 205 70} box PLASTIC_UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
- } {
- Fl_Dial e1adt {
- label {A.dt}
- callback {env->PA_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Attack time} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PA_dt);}
- class WidgetPDial
- }
- Fl_Dial e1ddt {
- label {D.dt}
- callback {env->PD_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Decay time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PD_dt);}
- class WidgetPDial
- }
- Fl_Dial e1rdt {
- label {R.dt}
- callback {env->PR_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Release time} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PR_dt);}
- class WidgetPDial
- }
- Fl_Dial e1sval {
- label {S.val}
- callback {env->PS_val=(int)o->value();
-freeedit->redraw();}
- tooltip {Sustain value} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PS_val);}
- class WidgetPDial
- }
- Fl_Check_Button e1forcedrelease {
- label frcR
- callback {env->Pforcedrelease=(int)o->value();}
- tooltip {Forced Relase} xywh {180 35 20 15} down_box DOWN_BOX labelsize 10 align 6
- code0 {o->value(env->Pforcedrelease);}
- }
- Fl_Dial e1envstretch {
- label Stretch
- callback {env->Penvstretch=(int)o->value();}
- tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->Penvstretch);}
- class WidgetPDial
- }
- Fl_Button {} {
- label E
- callback {freemodeeditwindow->show();}
- tooltip {Envelope window} xywh {185 5 15 15} box PLASTIC_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Check_Button e1linearenvelope {
- label L
- callback {env->Plinearenvelope=(int)o->value();}
- tooltip {The evelope is linear} xywh {180 20 15 15} down_box DOWN_BOX labelsize 10 align 4
- code0 {o->value(env->Plinearenvelope);}
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(env);}
- xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(env,this);}
- xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- }
- }
- }
- Function {make_ASR_window()} {} {
- Fl_Window envASR {
- xywh {71 320 210 70} type Double hide
- class Fl_Group
- } {
- Fl_Group {} {
- label {Frequency Envelope}
- xywh {0 0 210 70} box PLASTIC_UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
- } {
- Fl_Dial e2aval {
- label {A.val}
- callback {env->PA_val=(int)o->value();
-freeedit->redraw();}
- tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PA_val);}
- class WidgetPDial
- }
- Fl_Dial e2adt {
- label {A.dt}
- callback {env->PA_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PA_dt);}
- class WidgetPDial
- }
- Fl_Dial e2rval {
- label {R.val}
- callback {env->PR_val=(int)o->value();
-freeedit->redraw();}
- tooltip {Release value} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PR_val);}
- class WidgetPDial
- }
- Fl_Dial e2rdt {
- label {R.dt}
- callback {env->PR_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Release time} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PR_dt);}
- class WidgetPDial
- }
- Fl_Dial e2envstretch {
- label Stretch
- callback {env->Penvstretch=(int)o->value();}
- tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->Penvstretch);}
- class WidgetPDial
- }
- Fl_Check_Button e2forcedrelease {
- label frcR
- callback {env->Pforcedrelease=(int)o->value();}
- tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 10 align 6
- code0 {o->value(env->Pforcedrelease);}
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(env);}
- xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(env,this);}
- xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Button {} {
- label E
- callback {freemodeeditwindow->show();}
- tooltip {Envelope window} xywh {190 5 15 15} box PLASTIC_UP_BOX labelfont 1 labelsize 10
- }
- }
- }
- Function {make_ADSRfilter_window()} {} {
- Fl_Window envADSRfilter {
- xywh {87 143 275 70} type Double color 50 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Group {} {
- label {Filter Envelope}
- xywh {0 0 275 70} box PLASTIC_UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
- } {
- Fl_Dial e3aval {
- label {A.val}
- callback {env->PA_val=(int)o->value();
-freeedit->redraw();}
- tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PA_val);}
- class WidgetPDial
- }
- Fl_Dial e3adt {
- label {A.dt}
- callback {env->PA_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PA_dt);}
- class WidgetPDial
- }
- Fl_Dial e3dval {
- label {D.val}
- callback {env->PD_val=(int)o->value();
-freeedit->redraw();}
- tooltip {decay value} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PD_val);}
- class WidgetPDial
- }
- Fl_Dial e3ddt {
- label {D.dt}
- callback {env->PD_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {decay time} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PD_dt);}
- class WidgetPDial
- }
- Fl_Dial e3rdt {
- label {R.dt}
- callback {env->PR_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Release time} xywh {145 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PR_dt);}
- class WidgetPDial
- }
- Fl_Dial e3rval {
- label {R.val}
- callback {env->PR_val=(int)o->value();
-freeedit->redraw();}
- tooltip {Release value} xywh {180 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PR_val);}
- class WidgetPDial
- }
- Fl_Dial e3envstretch {
- label Stretch
- callback {env->Penvstretch=(int)o->value();}
- tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {215 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->Penvstretch);}
- class WidgetPDial
- }
- Fl_Check_Button e3forcedrelease {
- label frcR
- callback {env->Pforcedrelease=(int)o->value();}
- tooltip {Forced Relase} xywh {250 30 15 20} down_box DOWN_BOX labelsize 10 align 6
- code0 {o->value(env->Pforcedrelease);}
- }
- Fl_Button {} {
- label E
- callback {freemodeeditwindow->show();}
- xywh {255 5 15 15} box PLASTIC_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(env);}
- xywh {220 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(env,this);}
- xywh {237 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- }
- }
- }
- Function {make_ASRbw_window()} {} {
- Fl_Window envASRbw {
- xywh {224 539 210 70} type Double hide
- class Fl_Group
- } {
- Fl_Group {} {
- label {BandWidth Envelope}
- xywh {0 0 210 70} box PLASTIC_UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
- } {
- Fl_Dial e4aval {
- label {A.val}
- callback {env->PA_val=(int)o->value();
-freeedit->redraw();}
- tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PA_val);}
- class WidgetPDial
- }
- Fl_Dial e4adt {
- label {A.dt}
- callback {env->PA_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PA_dt);}
- class WidgetPDial
- }
- Fl_Dial e4rval {
- label {R.val}
- callback {env->PR_val=(int)o->value();
-freeedit->redraw();}
- tooltip {Release value} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PR_val);}
- class WidgetPDial
- }
- Fl_Dial e4rdt {
- label {R.dt}
- callback {env->PR_dt=(int)o->value();
-freeedit->redraw();}
- tooltip {Release time} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->PR_dt);}
- class WidgetPDial
- }
- Fl_Dial e4envstretch {
- label Stretch
- callback {env->Penvstretch=(int)o->value();}
- tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(env->Penvstretch);}
- class WidgetPDial
- }
- Fl_Check_Button e4forcedrelease {
- label frcR
- callback {env->Pforcedrelease=(int)o->value();}
- tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 10 align 6
- code0 {o->value(env->Pforcedrelease);}
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(env);}
- xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(env,this);}
- xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- }
- Fl_Button {} {
- label E
- callback {freemodeeditwindow->show();}
- xywh {190 5 15 15} box PLASTIC_UP_BOX labelfont 1 labelsize 10
- }
- }
- }
- Function {make_free_window()} {} {
- Fl_Window envfree {
- xywh {373 413 205 70} type Double color 50 labelfont 1 hide resizable
- class Fl_Group
- } {
- Fl_Group envfreegroup {
- label {Amplitude Envelope}
- xywh {0 0 205 70} box PLASTIC_UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 resizable
- } {
- Fl_Box freeeditsmall {
- label Envelope
- callback {envfree->redraw();}
- xywh {5 20 195 45} box FLAT_BOX color 0 resizable
- code0 {o->init(env);}
- class EnvelopeFreeEdit
- }
- Fl_Button {} {
- label E
- callback {freemodeeditwindow->show();}
- xywh {185 5 15 15} box PLASTIC_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(env);}
- xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(env,this);}
- xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- }
- }
- }
- Function {init(EnvelopeParams *env_)} {} {
- code {env=env_;
-make_ADSR_window();
-make_ASR_window();
-make_ADSRfilter_window();
-make_ASRbw_window();
-make_free_window();
-
-make_freemode_edit_window();
-
-envwindow=NULL;
-if (env->Envmode==3) envfreegroup->label("Frequency Envelope");
-if (env->Envmode==4) envfreegroup->label("Filter Envelope");
-if (env->Envmode==5) envfreegroup->label("Bandwidth Envelope");
-
-freemodeeditwindow->label(this->label());
-
-
-freeeditsmall->setpair(freeedit);
-freeedit->setpair(freeeditsmall);
-
-
-refresh();} {}
- }
- Function {reinit()} {} {
- code {if (env->Pfreemode!=0){
- int answer=fl_choice("Disable the free mode of the Envelope?","No","Yes",NULL);
- if (env->Pfreemode!=0) freemodebutton->value(1);
- else freemodebutton->value(0);
- if (answer==0) return;
-};
-
-if (env->Pfreemode==0) env->Pfreemode=1;
- else env->Pfreemode=0;
-
-hide();
-int winx=freemodeeditwindow->x();
-int winy=freemodeeditwindow->y();
-
-freemodeeditwindow->hide();
-
-envwindow->hide();
-Fl_Group *par=envwindow->parent();
-par->hide();
-
-
-refresh();
-envwindow->show();
-par->redraw();
-
-par->show();
-show();
-freemodeeditwindow->position(winx,winy);
-freemodeeditwindow->show();
-
-if (env->Pfreemode!=0) {
- freemodebutton->value(1);
- addpoint->show();
- deletepoint->show();
- forcedreleasecheck->show();
-}else{
- freemodebutton->value(0);
- addpoint->hide();
- deletepoint->hide();
- forcedreleasecheck->hide();
-};} {selected
- }
- }
- Function {refresh()} {} {
- code {freemodebutton->value(env->Pfreemode);
-
-sustaincounter->value(env->Penvsustain);
-if (env->Pfreemode==0) sustaincounter->hide();
- else sustaincounter->show();
-sustaincounter->maximum(env->Penvpoints-2);
-
-envstretchdial->value(env->Penvstretch);
-if (env->Pfreemode==0) envstretchdial->hide();
- else envstretchdial->show();
-
-linearenvelopecheck->value(env->Plinearenvelope);
-if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide();
- else linearenvelopecheck->show();
-
-forcedreleasecheck->value(env->Pforcedrelease);
-if (env->Pfreemode==0) forcedreleasecheck->hide();
-
-freeedit->redraw();
-
-
-if (env->Pfreemode==0){
- switch(env->Envmode){
- case(1):
- case(2):
- e1adt->value(env->PA_dt);
- e1ddt->value(env->PD_dt);
- e1sval->value(env->PS_val);
- e1rdt->value(env->PR_dt);
- e1envstretch->value(env->Penvstretch);
- e1linearenvelope->value(env->Plinearenvelope);
- e1forcedrelease->value(env->Pforcedrelease);
- break;
- case(3):
- e2aval->value(env->PA_val);
- e2adt->value(env->PA_dt);
- e2rdt->value(env->PR_dt);
- e2rval->value(env->PR_val);
- e2envstretch->value(env->Penvstretch);
- e2forcedrelease->value(env->Pforcedrelease);
- break;
- case(4):
- e3aval->value(env->PA_val);
- e3adt->value(env->PA_dt);
- e3dval->value(env->PD_val);
- e3ddt->value(env->PD_dt);
- e3rdt->value(env->PR_dt);
- e3rval->value(env->PR_val);
- e3envstretch->value(env->Penvstretch);
- e3forcedrelease->value(env->Pforcedrelease);
- break;
- case(5):
- e4aval->value(env->PA_val);
- e4adt->value(env->PA_dt);
- e4rdt->value(env->PR_dt);
- e4rval->value(env->PR_val);
- e4envstretch->value(env->Penvstretch);
- e4forcedrelease->value(env->Pforcedrelease);
- break;
- default:
- break;
- };
-}else{
- envfree->redraw();
-};
-
-
-envADSR->hide();
-envASR->hide();
-envADSRfilter->hide();
-envASRbw->hide();
-envfree->hide();
-
-if (env->Pfreemode==0){
- switch(env->Envmode){
- case(1):
- case(2):
- envwindow=envADSR;
- break;
- case(3):
- envwindow=envASR;
- break;
- case(4):
- envwindow=envADSRfilter;
- break;
- case(5):
- envwindow=envASRbw;
- break;
- default:
- break;
- };
-}else{
- envwindow=envfree;
-};
-
-envwindow->resize(this->x(),this->y(),this->w(),this->h());
-
-envwindow->show();} {}
- }
- decl {EnvelopeParams *env;} {}
- decl {Fl_Group *envwindow;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/EnvelopeUI.h b/plugins/zynaddsubfx/src/UI/EnvelopeUI.h
deleted file mode 100644
index 724745c..0000000
--- a/plugins/zynaddsubfx/src/UI/EnvelopeUI.h
+++ /dev/null
@@ -1,280 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef EnvelopeUI_h
-#define EnvelopeUI_h
-#include <FL/Fl.H>
-#include "WidgetPDial.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "../globals.h"
-#include <FL/Fl_Group.H>
-#include "../Params/EnvelopeParams.h"
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
-#include "PresetsUI.h"
-
-class EnvelopeFreeEdit : public Fl_Box {
-public:
- EnvelopeFreeEdit(int x,int y, int w, int h, const char *label=0);
- void init(EnvelopeParams *env_);
- void setpair(Fl_Box *pair_);
- int getpointx(int n);
- int getpointy(int n);
- int getnearest(int x,int y);
-private:
- void draw();
-public:
- int handle(int event);
-private:
- Fl_Box *pair;
- EnvelopeParams *env;
- int oldx;
- int currentpoint,cpx,cpdt;
-public:
- int lastpoint;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Group.H>
-
-class EnvelopeUI : public Fl_Group,PresetsUI_ {
-public:
- EnvelopeUI(int x,int y, int w, int h, const char *label=0);
- ~EnvelopeUI();
- Fl_Double_Window* make_freemode_edit_window();
- Fl_Double_Window *freemodeeditwindow;
- EnvelopeFreeEdit *freeedit;
- Fl_Button *addpoint;
-private:
- void cb_addpoint_i(Fl_Button*, void*);
- static void cb_addpoint(Fl_Button*, void*);
-public:
- Fl_Button *deletepoint;
-private:
- void cb_deletepoint_i(Fl_Button*, void*);
- static void cb_deletepoint(Fl_Button*, void*);
-public:
- Fl_Light_Button *freemodebutton;
-private:
- void cb_freemodebutton_i(Fl_Light_Button*, void*);
- static void cb_freemodebutton(Fl_Light_Button*, void*);
-public:
- Fl_Check_Button *forcedreleasecheck;
-private:
- void cb_forcedreleasecheck_i(Fl_Check_Button*, void*);
- static void cb_forcedreleasecheck(Fl_Check_Button*, void*);
-public:
- WidgetPDial *envstretchdial;
-private:
- void cb_envstretchdial_i(WidgetPDial*, void*);
- static void cb_envstretchdial(WidgetPDial*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
-public:
- Fl_Check_Button *linearenvelopecheck;
-private:
- void cb_linearenvelopecheck_i(Fl_Check_Button*, void*);
- static void cb_linearenvelopecheck(Fl_Check_Button*, void*);
-public:
- Fl_Counter *sustaincounter;
-private:
- void cb_sustaincounter_i(Fl_Counter*, void*);
- static void cb_sustaincounter(Fl_Counter*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- Fl_Group* make_ADSR_window();
- Fl_Group *envADSR;
- WidgetPDial *e1adt;
-private:
- void cb_e1adt_i(WidgetPDial*, void*);
- static void cb_e1adt(WidgetPDial*, void*);
-public:
- WidgetPDial *e1ddt;
-private:
- void cb_e1ddt_i(WidgetPDial*, void*);
- static void cb_e1ddt(WidgetPDial*, void*);
-public:
- WidgetPDial *e1rdt;
-private:
- void cb_e1rdt_i(WidgetPDial*, void*);
- static void cb_e1rdt(WidgetPDial*, void*);
-public:
- WidgetPDial *e1sval;
-private:
- void cb_e1sval_i(WidgetPDial*, void*);
- static void cb_e1sval(WidgetPDial*, void*);
-public:
- Fl_Check_Button *e1forcedrelease;
-private:
- void cb_e1forcedrelease_i(Fl_Check_Button*, void*);
- static void cb_e1forcedrelease(Fl_Check_Button*, void*);
-public:
- WidgetPDial *e1envstretch;
-private:
- void cb_e1envstretch_i(WidgetPDial*, void*);
- static void cb_e1envstretch(WidgetPDial*, void*);
- void cb_E_i(Fl_Button*, void*);
- static void cb_E(Fl_Button*, void*);
-public:
- Fl_Check_Button *e1linearenvelope;
-private:
- void cb_e1linearenvelope_i(Fl_Check_Button*, void*);
- static void cb_e1linearenvelope(Fl_Check_Button*, void*);
- void cb_C1_i(Fl_Button*, void*);
- static void cb_C1(Fl_Button*, void*);
- void cb_P1_i(Fl_Button*, void*);
- static void cb_P1(Fl_Button*, void*);
-public:
- Fl_Group* make_ASR_window();
- Fl_Group *envASR;
- WidgetPDial *e2aval;
-private:
- void cb_e2aval_i(WidgetPDial*, void*);
- static void cb_e2aval(WidgetPDial*, void*);
-public:
- WidgetPDial *e2adt;
-private:
- void cb_e2adt_i(WidgetPDial*, void*);
- static void cb_e2adt(WidgetPDial*, void*);
-public:
- WidgetPDial *e2rval;
-private:
- void cb_e2rval_i(WidgetPDial*, void*);
- static void cb_e2rval(WidgetPDial*, void*);
-public:
- WidgetPDial *e2rdt;
-private:
- void cb_e2rdt_i(WidgetPDial*, void*);
- static void cb_e2rdt(WidgetPDial*, void*);
-public:
- WidgetPDial *e2envstretch;
-private:
- void cb_e2envstretch_i(WidgetPDial*, void*);
- static void cb_e2envstretch(WidgetPDial*, void*);
-public:
- Fl_Check_Button *e2forcedrelease;
-private:
- void cb_e2forcedrelease_i(Fl_Check_Button*, void*);
- static void cb_e2forcedrelease(Fl_Check_Button*, void*);
- void cb_C2_i(Fl_Button*, void*);
- static void cb_C2(Fl_Button*, void*);
- void cb_P2_i(Fl_Button*, void*);
- static void cb_P2(Fl_Button*, void*);
- void cb_E1_i(Fl_Button*, void*);
- static void cb_E1(Fl_Button*, void*);
-public:
- Fl_Group* make_ADSRfilter_window();
- Fl_Group *envADSRfilter;
- WidgetPDial *e3aval;
-private:
- void cb_e3aval_i(WidgetPDial*, void*);
- static void cb_e3aval(WidgetPDial*, void*);
-public:
- WidgetPDial *e3adt;
-private:
- void cb_e3adt_i(WidgetPDial*, void*);
- static void cb_e3adt(WidgetPDial*, void*);
-public:
- WidgetPDial *e3dval;
-private:
- void cb_e3dval_i(WidgetPDial*, void*);
- static void cb_e3dval(WidgetPDial*, void*);
-public:
- WidgetPDial *e3ddt;
-private:
- void cb_e3ddt_i(WidgetPDial*, void*);
- static void cb_e3ddt(WidgetPDial*, void*);
-public:
- WidgetPDial *e3rdt;
-private:
- void cb_e3rdt_i(WidgetPDial*, void*);
- static void cb_e3rdt(WidgetPDial*, void*);
-public:
- WidgetPDial *e3rval;
-private:
- void cb_e3rval_i(WidgetPDial*, void*);
- static void cb_e3rval(WidgetPDial*, void*);
-public:
- WidgetPDial *e3envstretch;
-private:
- void cb_e3envstretch_i(WidgetPDial*, void*);
- static void cb_e3envstretch(WidgetPDial*, void*);
-public:
- Fl_Check_Button *e3forcedrelease;
-private:
- void cb_e3forcedrelease_i(Fl_Check_Button*, void*);
- static void cb_e3forcedrelease(Fl_Check_Button*, void*);
- void cb_E2_i(Fl_Button*, void*);
- static void cb_E2(Fl_Button*, void*);
- void cb_C3_i(Fl_Button*, void*);
- static void cb_C3(Fl_Button*, void*);
- void cb_P3_i(Fl_Button*, void*);
- static void cb_P3(Fl_Button*, void*);
-public:
- Fl_Group* make_ASRbw_window();
- Fl_Group *envASRbw;
- WidgetPDial *e4aval;
-private:
- void cb_e4aval_i(WidgetPDial*, void*);
- static void cb_e4aval(WidgetPDial*, void*);
-public:
- WidgetPDial *e4adt;
-private:
- void cb_e4adt_i(WidgetPDial*, void*);
- static void cb_e4adt(WidgetPDial*, void*);
-public:
- WidgetPDial *e4rval;
-private:
- void cb_e4rval_i(WidgetPDial*, void*);
- static void cb_e4rval(WidgetPDial*, void*);
-public:
- WidgetPDial *e4rdt;
-private:
- void cb_e4rdt_i(WidgetPDial*, void*);
- static void cb_e4rdt(WidgetPDial*, void*);
-public:
- WidgetPDial *e4envstretch;
-private:
- void cb_e4envstretch_i(WidgetPDial*, void*);
- static void cb_e4envstretch(WidgetPDial*, void*);
-public:
- Fl_Check_Button *e4forcedrelease;
-private:
- void cb_e4forcedrelease_i(Fl_Check_Button*, void*);
- static void cb_e4forcedrelease(Fl_Check_Button*, void*);
- void cb_C4_i(Fl_Button*, void*);
- static void cb_C4(Fl_Button*, void*);
- void cb_P4_i(Fl_Button*, void*);
- static void cb_P4(Fl_Button*, void*);
- void cb_E3_i(Fl_Button*, void*);
- static void cb_E3(Fl_Button*, void*);
-public:
- Fl_Group* make_free_window();
- Fl_Group *envfree;
- Fl_Group *envfreegroup;
- EnvelopeFreeEdit *freeeditsmall;
-private:
- void cb_freeeditsmall_i(EnvelopeFreeEdit*, void*);
- static void cb_freeeditsmall(EnvelopeFreeEdit*, void*);
- void cb_E4_i(Fl_Button*, void*);
- static void cb_E4(Fl_Button*, void*);
- void cb_C5_i(Fl_Button*, void*);
- static void cb_C5(Fl_Button*, void*);
- void cb_P5_i(Fl_Button*, void*);
- static void cb_P5(Fl_Button*, void*);
-public:
- void init(EnvelopeParams *env_);
- void reinit();
- void refresh();
-private:
- EnvelopeParams *env;
- Fl_Group *envwindow;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/FilterUI.cc b/plugins/zynaddsubfx/src/UI/FilterUI.cc
deleted file mode 100644
index 935f2f5..0000000
--- a/plugins/zynaddsubfx/src/UI/FilterUI.cc
+++ /dev/null
@@ -1,987 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "FilterUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-FormantFilterGraph::FormantFilterGraph(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- pars=NULL;
- nvowel=NULL;
- nformant=NULL;
- graphpoints=NULL;
-}
-
-void FormantFilterGraph::init(FilterParams *pars_,int *nvowel_,int *nformant_) {
- pars=pars_;
- nvowel=nvowel_;
- nformant=nformant_;
- oldx=-1;
- graphpoints=new REALTYPE [w()];
-}
-
-void FormantFilterGraph::draw_freq_line(REALTYPE freq,int type) {
- REALTYPE freqx=pars->getfreqpos(freq);
- switch(type){
- case 0:fl_line_style(FL_SOLID);break;
- case 1:fl_line_style(FL_DOT);break;
- case 2:fl_line_style(FL_DASH);break;
- };
-
-
- if ((freqx>0.0)&&(freqx<1.0))
- fl_line(x()+(int) (freqx*w()),y(),
- x()+(int) (freqx*w()),y()+h());
-}
-
-void FormantFilterGraph::draw() {
- int maxdB=30;
- int ox=x(),oy=y(),lx=w(),ly=h(),i,oiy;
- REALTYPE freqx;
-
- fl_color(FL_BLACK);
- fl_rectf(ox,oy,lx,ly);
-
-
- //draw the lines
- fl_color(FL_GRAY);
-
- fl_line_style(FL_SOLID);
- //fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-
- freqx=pars->getfreqpos(1000.0);
- if ((freqx>0.0)&&(freqx<1.0))
- fl_line(ox+(int) (freqx*lx),oy,
- ox+(int) (freqx*lx),oy+ly);
-
- for (i=1;i<10;i++){
- if(i==1){
- draw_freq_line(i*100.0,0);
- draw_freq_line(i*1000.0,0);
- }else
- if (i==5){
- draw_freq_line(i*100.0,2);
- draw_freq_line(i*1000.0,2);
- }else{
- draw_freq_line(i*100.0,1);
- draw_freq_line(i*1000.0,1);
- };
- };
-
- draw_freq_line(10000.0,0);
- draw_freq_line(20000.0,1);
-
- fl_line_style(FL_DOT);
- int GY=10;if (ly<GY*3) GY=-1;
- for (i=1;i<GY;i++){
- int tmp=(int)(ly/(REALTYPE)GY*i);
- fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
- };
-
- fl_color(FL_YELLOW);
- fl_font(FL_HELVETICA,10);
- if (*nformant<pars->Pnumformants){
- draw_freq_line(pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq),2);
-
- //show some information (like current formant frequency,amplitude)
- char tmpstr[20];
-
- snprintf(tmpstr,20,"%.2f kHz",pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq)*0.001);
- fl_draw(tmpstr,ox+1,oy+1,40,12,FL_ALIGN_LEFT,NULL,0);
-
- snprintf(tmpstr,20,"%d dB",(int)( rap2dB(1e-9 + pars->getformantamp(pars->Pvowels[*nvowel].formants[*nformant].amp)) + pars->getgain() ));
- fl_draw(tmpstr,ox+1,oy+15,40,12,FL_ALIGN_LEFT,NULL,0);
-
- };
-
- //draw the data
-
- fl_color(FL_RED);
- fl_line_style(FL_SOLID);
-
- pars->formantfilterH(*nvowel,lx,graphpoints);
-
- oiy=(int) ((graphpoints[0]/maxdB+1.0)*ly/2.0);
- for (i=1;i<lx;i++){
- int iy=(int) ((graphpoints[i]/maxdB+1.0)*ly/2.0);
- if ((iy>=0)&&(oiy>=0)&&(iy<ly)&&(oiy<lx))
- fl_line(ox+i-1,oy+ly-oiy,ox+i,oy+ly-iy);
- oiy=iy;
- };
-}
-
-FormantFilterGraph::~FormantFilterGraph() {
- delete [] graphpoints;
-}
-
-void FilterUI::cb_analogfiltertypechoice_i(Fl_Choice* o, void*) {
- pars->Ptype=(int)o->value();
-pars->changed=true;
-}
-void FilterUI::cb_analogfiltertypechoice(Fl_Choice* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_analogfiltertypechoice_i(o,v);
-}
-
-Fl_Menu_Item FilterUI::menu_analogfiltertypechoice[] = {
- {"LPF1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"HPF1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"HPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"BPF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"NF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"PkF2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LSh2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"HSh2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void FilterUI::cb_svfiltertypechoice_i(Fl_Choice* o, void*) {
- pars->Ptype=(int)o->value();
-pars->changed=true;
-}
-void FilterUI::cb_svfiltertypechoice(Fl_Choice* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_svfiltertypechoice_i(o,v);
-}
-
-Fl_Menu_Item FilterUI::menu_svfiltertypechoice[] = {
- {"1LPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"1HPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"1BPF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"1NF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void FilterUI::cb_filtertype_i(Fl_Choice* o, void*) {
- switchcategory((int)o->value());
-pars->changed=true;
-}
-void FilterUI::cb_filtertype(Fl_Choice* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_filtertype_i(o,v);
-}
-
-Fl_Menu_Item FilterUI::menu_filtertype[] = {
- {"Analog", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Formant", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"StVarF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void FilterUI::cb_cfreqdial_i(WidgetPDial* o, void*) {
- pars->Pfreq=(int)o->value();
-}
-void FilterUI::cb_cfreqdial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_cfreqdial_i(o,v);
-}
-
-void FilterUI::cb_qdial_i(WidgetPDial* o, void*) {
- pars->Pq=(int)o->value();
-formantfiltergraph->redraw();
-}
-void FilterUI::cb_qdial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_qdial_i(o,v);
-}
-
-void FilterUI::cb_freqtrdial_i(WidgetPDial* o, void*) {
- pars->Pfreqtrack=(int) o->value();
-}
-void FilterUI::cb_freqtrdial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_freqtrdial_i(o,v);
-}
-
-void FilterUI::cb_vsnsadial_i(WidgetPDial* o, void*) {
- if (velsnsamp!=NULL) *velsnsamp=(int)o->value();
-}
-void FilterUI::cb_vsnsadial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_vsnsadial_i(o,v);
-}
-
-void FilterUI::cb_vsnsdial_i(WidgetPDial* o, void*) {
- if (velsns!=NULL) *velsns=(int)o->value();
-}
-void FilterUI::cb_vsnsdial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_vsnsdial_i(o,v);
-}
-
-void FilterUI::cb_gaindial_i(WidgetPDial* o, void*) {
- pars->Pgain=(int)o->value();
-formantfiltergraph->redraw();
-pars->changed=true;
-}
-void FilterUI::cb_gaindial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_gaindial_i(o,v);
-}
-
-void FilterUI::cb_stcounter_i(Fl_Choice* o, void*) {
- pars->Pstages=(int)o->value();
-formantfiltergraph->redraw();
-pars->changed=true;
-}
-void FilterUI::cb_stcounter(Fl_Choice* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_stcounter_i(o,v);
-}
-
-void FilterUI::cb_editbutton_i(Fl_Button*, void*) {
- formantparswindow->show();
-}
-void FilterUI::cb_editbutton(Fl_Button* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_editbutton_i(o,v);
-}
-
-void FilterUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(pars);
-}
-void FilterUI::cb_C(Fl_Button* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void FilterUI::cb_P_i(Fl_Button*, void*) {
- presetsui->paste(pars,this);
-}
-void FilterUI::cb_P(Fl_Button* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_P_i(o,v);
-}
-
-void FilterUI::cb_Formant_i(Fl_Counter* o, void*) {
- nformant=(int) o->value();
-update_formant_window();
-formantfiltergraph->redraw();
-}
-void FilterUI::cb_Formant(Fl_Counter* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_Formant_i(o,v);
-}
-
-void FilterUI::cb_Vowel_i(Fl_Counter* o, void*) {
- nvowel=(int) o->value();
-update_formant_window();
-formantfiltergraph->redraw();
-}
-void FilterUI::cb_Vowel(Fl_Counter* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_Vowel_i(o,v);
-}
-
-void FilterUI::cb_formant_freq_dial_i(WidgetPDial* o, void*) {
- pars->Pvowels[nvowel].formants[nformant].freq=(int) o->value();
-formantfiltergraph->redraw();
-pars->changed=true;
-}
-void FilterUI::cb_formant_freq_dial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_freq_dial_i(o,v);
-}
-
-void FilterUI::cb_formant_q_dial_i(WidgetPDial* o, void*) {
- pars->Pvowels[nvowel].formants[nformant].q=(int) o->value();
-formantfiltergraph->redraw();
-pars->changed=true;
-}
-void FilterUI::cb_formant_q_dial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_q_dial_i(o,v);
-}
-
-void FilterUI::cb_formant_amp_dial_i(WidgetPDial* o, void*) {
- pars->Pvowels[nvowel].formants[nformant].amp=(int) o->value();
-formantfiltergraph->redraw();
-pars->changed=true;
-}
-void FilterUI::cb_formant_amp_dial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->parent()->user_data()))->cb_formant_amp_dial_i(o,v);
-}
-
-void FilterUI::cb_Seq_i(Fl_Counter* o, void*) {
- pars->Psequencesize=(int) o->value();
-update_formant_window();
-pars->changed=true;
-}
-void FilterUI::cb_Seq(Fl_Counter* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_Seq_i(o,v);
-}
-
-void FilterUI::cb_S_i(Fl_Counter* o, void*) {
- nseqpos=(int) o->value();
-update_formant_window();
-pars->changed=true;
-}
-void FilterUI::cb_S(Fl_Counter* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_S_i(o,v);
-}
-
-void FilterUI::cb_vowel_counter_i(Fl_Counter* o, void*) {
- pars->Psequence[nseqpos].nvowel=(int) o->value();
-pars->changed=true;
-}
-void FilterUI::cb_vowel_counter(Fl_Counter* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_vowel_counter_i(o,v);
-}
-
-void FilterUI::cb_Neg_i(Fl_Check_Button* o, void*) {
- pars->Psequencereversed=(int) o->value();
-pars->changed=true;
-}
-void FilterUI::cb_Neg(Fl_Check_Button* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_Neg_i(o,v);
-}
-
-void FilterUI::cb_strchdial_i(WidgetPDial* o, void*) {
- pars->Psequencestretch=(int) o->value();
-pars->changed=true;
-}
-void FilterUI::cb_strchdial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->parent()->user_data()))->cb_strchdial_i(o,v);
-}
-
-void FilterUI::cb_Num_i(Fl_Counter* o, void*) {
- pars->Pnumformants=(int) o->value();
-update_formant_window();
-pars->changed=true;
-formantfiltergraph->redraw();
-}
-void FilterUI::cb_Num(Fl_Counter* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_Num_i(o,v);
-}
-
-void FilterUI::cb_frsldial_i(WidgetPDial* o, void*) {
- pars->Pformantslowness=(int) o->value();
-pars->changed=true;
-}
-void FilterUI::cb_frsldial(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_frsldial_i(o,v);
-}
-
-void FilterUI::cb_centerfreqvo_i(Fl_Value_Output* o, void*) {
- o->value(pars->getcenterfreq()/1000.0);
-}
-void FilterUI::cb_centerfreqvo(Fl_Value_Output* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_centerfreqvo_i(o,v);
-}
-
-void FilterUI::cb_octavesfreqvo_i(Fl_Value_Output* o, void*) {
- o->value(pars->getoctavesfreq());
-}
-void FilterUI::cb_octavesfreqvo(Fl_Value_Output* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_octavesfreqvo_i(o,v);
-}
-
-void FilterUI::cb_cfknob_i(Fl_Slider* o, void*) {
- pars->Pcenterfreq=(int)o->value();
-centerfreqvo->do_callback();
-formantfiltergraph->redraw();
-pars->changed=true;
-}
-void FilterUI::cb_cfknob(Fl_Slider* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_cfknob_i(o,v);
-}
-
-void FilterUI::cb_octknob_i(Fl_Slider* o, void*) {
- pars->Poctavesfreq=(int)o->value();
-octavesfreqvo->do_callback();
-formantfiltergraph->redraw();
-}
-void FilterUI::cb_octknob(Fl_Slider* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_octknob_i(o,v);
-}
-
-void FilterUI::cb_wvknob_i(WidgetPDial* o, void*) {
- pars->Pvowelclearness=(int) o->value();
-pars->changed=true;
-}
-void FilterUI::cb_wvknob(WidgetPDial* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_wvknob_i(o,v);
-}
-
-void FilterUI::cb_Close_i(Fl_Button*, void*) {
- formantparswindow->hide();
-}
-void FilterUI::cb_Close(Fl_Button* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void FilterUI::cb_C1_i(Fl_Button*, void*) {
- presetsui->copy(pars,nvowel);
-}
-void FilterUI::cb_C1(Fl_Button* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_C1_i(o,v);
-}
-
-void FilterUI::cb_P1_i(Fl_Button*, void*) {
- presetsui->paste(pars,this,nvowel);
-}
-void FilterUI::cb_P1(Fl_Button* o, void* v) {
- ((FilterUI*)(o->parent()->user_data()))->cb_P1_i(o,v);
-}
-
-FilterUI::FilterUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- pars=NULL;
- velsnsamp=NULL;
- velsns=NULL;
- nvowel=0;nformant=0;nseqpos=0;
-}
-
-FilterUI::~FilterUI() {
- filterui->hide();
- formantparswindow->hide();
- hide();
- //delete (filterui);
- delete (formantparswindow);
-}
-
-Fl_Group* FilterUI::make_window() {
- { filterui = new Fl_Group(0, 0, 275, 75);
- filterui->box(FL_FLAT_BOX);
- filterui->color(FL_LIGHT1);
- filterui->selection_color(FL_BACKGROUND_COLOR);
- filterui->labeltype(FL_NO_LABEL);
- filterui->labelfont(1);
- filterui->labelsize(14);
- filterui->labelcolor(FL_FOREGROUND_COLOR);
- filterui->user_data((void*)(this));
- filterui->align(Fl_Align(FL_ALIGN_TOP));
- filterui->when(FL_WHEN_RELEASE);
- { filterparamswindow = new Fl_Group(0, 0, 275, 75, "Filter Parameters");
- filterparamswindow->box(FL_PLASTIC_UP_BOX);
- filterparamswindow->color((Fl_Color)183);
- filterparamswindow->labeltype(FL_ENGRAVED_LABEL);
- filterparamswindow->labelsize(10);
- filterparamswindow->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { Fl_Choice* o = analogfiltertypechoice = new Fl_Choice(10, 50, 50, 15, "FilterType");
- analogfiltertypechoice->tooltip("The Filter type");
- analogfiltertypechoice->down_box(FL_BORDER_BOX);
- analogfiltertypechoice->labelsize(10);
- analogfiltertypechoice->textsize(10);
- analogfiltertypechoice->callback((Fl_Callback*)cb_analogfiltertypechoice);
- analogfiltertypechoice->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- analogfiltertypechoice->menu(menu_analogfiltertypechoice);
- o->value(pars->Ptype);
- } // Fl_Choice* analogfiltertypechoice
- { Fl_Choice* o = svfiltertypechoice = new Fl_Choice(10, 50, 50, 15, "FilterType");
- svfiltertypechoice->tooltip("The Filter type");
- svfiltertypechoice->down_box(FL_BORDER_BOX);
- svfiltertypechoice->labelsize(10);
- svfiltertypechoice->textsize(10);
- svfiltertypechoice->callback((Fl_Callback*)cb_svfiltertypechoice);
- svfiltertypechoice->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- svfiltertypechoice->menu(menu_svfiltertypechoice);
- o->value(pars->Ptype);
- } // Fl_Choice* svfiltertypechoice
- { Fl_Choice* o = filtertype = new Fl_Choice(10, 20, 60, 15, "Category");
- filtertype->tooltip("The Category of the Filter (Analog/Formantic/etc.)");
- filtertype->down_box(FL_BORDER_BOX);
- filtertype->labelsize(10);
- filtertype->textsize(10);
- filtertype->callback((Fl_Callback*)cb_filtertype);
- filtertype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- filtertype->menu(menu_filtertype);
- o->value(pars->Pcategory);
- } // Fl_Choice* filtertype
- { WidgetPDial* o = cfreqdial = new WidgetPDial(75, 25, 30, 30, "C.Freq");
- cfreqdial->tooltip("Center Frequency of the Filter or the base position in the vowel\'s sequence");
- cfreqdial->box(FL_ROUND_UP_BOX);
- cfreqdial->color(FL_BACKGROUND_COLOR);
- cfreqdial->selection_color(FL_INACTIVE_COLOR);
- cfreqdial->labeltype(FL_NORMAL_LABEL);
- cfreqdial->labelfont(0);
- cfreqdial->labelsize(10);
- cfreqdial->labelcolor(FL_FOREGROUND_COLOR);
- cfreqdial->maximum(127);
- cfreqdial->step(1);
- cfreqdial->callback((Fl_Callback*)cb_cfreqdial);
- cfreqdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- cfreqdial->when(FL_WHEN_CHANGED);
- o->value(pars->Pfreq);
- } // WidgetPDial* cfreqdial
- { WidgetPDial* o = qdial = new WidgetPDial(110, 25, 30, 30, "Q");
- qdial->tooltip("Filter resonance or bandwidth");
- qdial->box(FL_ROUND_UP_BOX);
- qdial->color(FL_BACKGROUND_COLOR);
- qdial->selection_color(FL_INACTIVE_COLOR);
- qdial->labeltype(FL_NORMAL_LABEL);
- qdial->labelfont(0);
- qdial->labelsize(10);
- qdial->labelcolor(FL_FOREGROUND_COLOR);
- qdial->maximum(127);
- qdial->step(1);
- qdial->callback((Fl_Callback*)cb_qdial);
- qdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- qdial->when(FL_WHEN_CHANGED);
- o->value(pars->Pq);
- } // WidgetPDial* qdial
- { WidgetPDial* o = freqtrdial = new WidgetPDial(215, 25, 30, 30, "freq.tr.");
- freqtrdial->tooltip("Filter frequency tracking (left is negative, middle is 0, and right is positi\
-ve)");
- freqtrdial->box(FL_ROUND_UP_BOX);
- freqtrdial->color(FL_BACKGROUND_COLOR);
- freqtrdial->selection_color(FL_INACTIVE_COLOR);
- freqtrdial->labeltype(FL_NORMAL_LABEL);
- freqtrdial->labelfont(0);
- freqtrdial->labelsize(10);
- freqtrdial->labelcolor(FL_FOREGROUND_COLOR);
- freqtrdial->maximum(127);
- freqtrdial->step(1);
- freqtrdial->callback((Fl_Callback*)cb_freqtrdial);
- freqtrdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- freqtrdial->when(FL_WHEN_CHANGED);
- o->value(pars->Pfreqtrack);
- } // WidgetPDial* freqtrdial
- { vsnsadial = new WidgetPDial(145, 25, 30, 30, "V.SnsA.");
- vsnsadial->tooltip("Velocity sensing amount of the Filter");
- vsnsadial->box(FL_ROUND_UP_BOX);
- vsnsadial->color(FL_BACKGROUND_COLOR);
- vsnsadial->selection_color(FL_INACTIVE_COLOR);
- vsnsadial->labeltype(FL_NORMAL_LABEL);
- vsnsadial->labelfont(0);
- vsnsadial->labelsize(10);
- vsnsadial->labelcolor(FL_FOREGROUND_COLOR);
- vsnsadial->maximum(127);
- vsnsadial->step(1);
- vsnsadial->callback((Fl_Callback*)cb_vsnsadial);
- vsnsadial->align(Fl_Align(FL_ALIGN_BOTTOM));
- vsnsadial->when(FL_WHEN_CHANGED);
- } // WidgetPDial* vsnsadial
- { vsnsdial = new WidgetPDial(180, 25, 30, 30, "V.Sns.");
- vsnsdial->tooltip("Velocity Sensing Function of the Filter");
- vsnsdial->box(FL_ROUND_UP_BOX);
- vsnsdial->color(FL_BACKGROUND_COLOR);
- vsnsdial->selection_color(FL_INACTIVE_COLOR);
- vsnsdial->labeltype(FL_NORMAL_LABEL);
- vsnsdial->labelfont(0);
- vsnsdial->labelsize(10);
- vsnsdial->labelcolor(FL_FOREGROUND_COLOR);
- vsnsdial->maximum(127);
- vsnsdial->step(1);
- vsnsdial->callback((Fl_Callback*)cb_vsnsdial);
- vsnsdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- vsnsdial->when(FL_WHEN_CHANGED);
- } // WidgetPDial* vsnsdial
- { WidgetPDial* o = gaindial = new WidgetPDial(250, 35, 20, 20, "gain");
- gaindial->tooltip("Filter output gain/damp");
- gaindial->box(FL_ROUND_UP_BOX);
- gaindial->color(FL_BACKGROUND_COLOR);
- gaindial->selection_color(FL_INACTIVE_COLOR);
- gaindial->labeltype(FL_NORMAL_LABEL);
- gaindial->labelfont(0);
- gaindial->labelsize(10);
- gaindial->labelcolor(FL_FOREGROUND_COLOR);
- gaindial->maximum(127);
- gaindial->step(1);
- gaindial->callback((Fl_Callback*)cb_gaindial);
- gaindial->align(Fl_Align(FL_ALIGN_BOTTOM));
- gaindial->when(FL_WHEN_CHANGED);
- o->value(pars->Pgain);
- } // WidgetPDial* gaindial
- { Fl_Choice* o = stcounter = new Fl_Choice(235, 5, 35, 15, "St");
- stcounter->tooltip("Filter stages (in order to increase dB/oct. value and the order of the filter\
-)");
- stcounter->down_box(FL_BORDER_BOX);
- stcounter->labelsize(10);
- stcounter->textfont(1);
- stcounter->textsize(10);
- stcounter->callback((Fl_Callback*)cb_stcounter);
- for (int i=0;i<MAX_FILTER_STAGES;i++) {char tmp[10];snprintf(tmp,10,"%dx",i+1);o->add(tmp);};
- o->value(pars->Pstages);
- } // Fl_Choice* stcounter
- filterparamswindow->end();
- } // Fl_Group* filterparamswindow
- { editbutton = new Fl_Button(15, 40, 50, 25, "Edit");
- editbutton->box(FL_PLASTIC_UP_BOX);
- editbutton->labelfont(1);
- editbutton->labelsize(11);
- editbutton->callback((Fl_Callback*)cb_editbutton);
- } // Fl_Button* editbutton
- { Fl_Button* o = new Fl_Button(186, 5, 15, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(203, 5, 15, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- filterui->end();
- } // Fl_Group* filterui
- return filterui;
-}
-
-Fl_Double_Window* FilterUI::make_formant_window() {
- { formantparswindow = new Fl_Double_Window(700, 205, "Formant Filter Parameters");
- formantparswindow->user_data((void*)(this));
- { Fl_Group* o = new Fl_Group(485, 47, 105, 113);
- o->box(FL_THIN_UP_BOX);
- { Fl_Counter* o = new Fl_Counter(545, 80, 40, 15, "Formant ");
- o->type(1);
- o->labelfont(1);
- o->labelsize(10);
- o->minimum(0);
- o->maximum(127);
- o->step(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Formant);
- o->align(Fl_Align(FL_ALIGN_LEFT));
- o->bounds(0,FF_MAX_FORMANTS-1);
- o->value(nformant);
- } // Fl_Counter* o
- { Fl_Counter* o = new Fl_Counter(545, 55, 40, 20, "Vowel no.");
- o->type(1);
- o->labelfont(1);
- o->labelsize(10);
- o->minimum(0);
- o->maximum(127);
- o->step(1);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Vowel);
- o->align(Fl_Align(FL_ALIGN_LEFT));
- o->bounds(0,FF_MAX_VOWELS-1);
- o->value(nvowel);
- } // Fl_Counter* o
- { formantparsgroup = new Fl_Group(490, 105, 95, 50);
- formantparsgroup->box(FL_ENGRAVED_FRAME);
- { formant_freq_dial = new WidgetPDial(495, 115, 25, 25, "freq");
- formant_freq_dial->tooltip("Formant frequency");
- formant_freq_dial->box(FL_ROUND_UP_BOX);
- formant_freq_dial->color(FL_BACKGROUND_COLOR);
- formant_freq_dial->selection_color(FL_INACTIVE_COLOR);
- formant_freq_dial->labeltype(FL_NORMAL_LABEL);
- formant_freq_dial->labelfont(0);
- formant_freq_dial->labelsize(10);
- formant_freq_dial->labelcolor(FL_FOREGROUND_COLOR);
- formant_freq_dial->maximum(127);
- formant_freq_dial->step(1);
- formant_freq_dial->callback((Fl_Callback*)cb_formant_freq_dial);
- formant_freq_dial->align(Fl_Align(FL_ALIGN_BOTTOM));
- formant_freq_dial->when(FL_WHEN_CHANGED);
- } // WidgetPDial* formant_freq_dial
- { formant_q_dial = new WidgetPDial(525, 115, 24, 25, "Q");
- formant_q_dial->tooltip("Formant\'s Q");
- formant_q_dial->box(FL_ROUND_UP_BOX);
- formant_q_dial->color(FL_BACKGROUND_COLOR);
- formant_q_dial->selection_color(FL_INACTIVE_COLOR);
- formant_q_dial->labeltype(FL_NORMAL_LABEL);
- formant_q_dial->labelfont(0);
- formant_q_dial->labelsize(10);
- formant_q_dial->labelcolor(FL_FOREGROUND_COLOR);
- formant_q_dial->maximum(127);
- formant_q_dial->step(1);
- formant_q_dial->callback((Fl_Callback*)cb_formant_q_dial);
- formant_q_dial->align(Fl_Align(FL_ALIGN_BOTTOM));
- formant_q_dial->when(FL_WHEN_CHANGED);
- } // WidgetPDial* formant_q_dial
- { formant_amp_dial = new WidgetPDial(555, 115, 24, 25, "amp");
- formant_amp_dial->tooltip("Formant amplitude");
- formant_amp_dial->box(FL_ROUND_UP_BOX);
- formant_amp_dial->color(FL_BACKGROUND_COLOR);
- formant_amp_dial->selection_color(FL_INACTIVE_COLOR);
- formant_amp_dial->labeltype(FL_NORMAL_LABEL);
- formant_amp_dial->labelfont(0);
- formant_amp_dial->labelsize(10);
- formant_amp_dial->labelcolor(FL_FOREGROUND_COLOR);
- formant_amp_dial->maximum(127);
- formant_amp_dial->step(1);
- formant_amp_dial->callback((Fl_Callback*)cb_formant_amp_dial);
- formant_amp_dial->align(Fl_Align(FL_ALIGN_BOTTOM));
- formant_amp_dial->when(FL_WHEN_CHANGED);
- } // WidgetPDial* formant_amp_dial
- formantparsgroup->end();
- } // Fl_Group* formantparsgroup
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(590, 47, 100, 113);
- o->box(FL_THIN_UP_BOX);
- { Fl_Counter* o = new Fl_Counter(595, 62, 55, 20, "Seq.Size");
- o->type(1);
- o->labelfont(1);
- o->labelsize(10);
- o->minimum(0);
- o->maximum(127);
- o->step(1);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Seq);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->bounds(1,FF_MAX_SEQUENCE-1);
- o->value(pars->Psequencesize);
- } // Fl_Counter* o
- { Fl_Counter* o = new Fl_Counter(595, 97, 40, 15, "S.Pos.");
- o->tooltip("Current position from the sequence");
- o->type(1);
- o->labelfont(1);
- o->labelsize(10);
- o->minimum(0);
- o->maximum(127);
- o->step(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_S);
- o->align(Fl_Align(FL_ALIGN_TOP_RIGHT));
- o->bounds(0,FF_MAX_SEQUENCE-2);
- o->value(nseqpos);
- } // Fl_Counter* o
- { Fl_Counter* o = vowel_counter = new Fl_Counter(640, 97, 40, 15, "Vowel");
- vowel_counter->type(1);
- vowel_counter->labelsize(10);
- vowel_counter->minimum(0);
- vowel_counter->maximum(127);
- vowel_counter->step(1);
- vowel_counter->textsize(10);
- vowel_counter->callback((Fl_Callback*)cb_vowel_counter);
- vowel_counter->align(Fl_Align(FL_ALIGN_TOP));
- o->bounds(0,FF_MAX_VOWELS-1);
- } // Fl_Counter* vowel_counter
- { Fl_Check_Button* o = new Fl_Check_Button(625, 132, 60, 20, "Neg.Input");
- o->tooltip("Negate the input from LFO/envelopes/etc.");
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Neg);
- o->value(pars->Psequencereversed);
- } // Fl_Check_Button* o
- { WidgetPDial* o = strchdial = new WidgetPDial(595, 130, 25, 25, "Strch");
- strchdial->tooltip("Sequence Stretch");
- strchdial->box(FL_ROUND_UP_BOX);
- strchdial->color(FL_BACKGROUND_COLOR);
- strchdial->selection_color(FL_INACTIVE_COLOR);
- strchdial->labeltype(FL_NORMAL_LABEL);
- strchdial->labelfont(0);
- strchdial->labelsize(10);
- strchdial->labelcolor(FL_FOREGROUND_COLOR);
- strchdial->maximum(127);
- strchdial->step(1);
- strchdial->callback((Fl_Callback*)cb_strchdial);
- strchdial->align(Fl_Align(FL_ALIGN_TOP));
- strchdial->when(FL_WHEN_CHANGED);
- o->value(pars->Psequencestretch);
- } // WidgetPDial* strchdial
- o->end();
- } // Fl_Group* o
- { Fl_Counter* o = new Fl_Counter(485, 15, 65, 20, "Num.Formants");
- o->type(1);
- o->labelfont(1);
- o->labelsize(10);
- o->minimum(0);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Num);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->bounds(1,FF_MAX_FORMANTS);
- o->value(pars->Pnumformants);
- } // Fl_Counter* o
- { WidgetPDial* o = frsldial = new WidgetPDial(565, 15, 25, 25, "Fr.Sl.");
- frsldial->tooltip("Formant\'s Slowness (Morphing)");
- frsldial->box(FL_ROUND_UP_BOX);
- frsldial->color(FL_BACKGROUND_COLOR);
- frsldial->selection_color(FL_INACTIVE_COLOR);
- frsldial->labeltype(FL_NORMAL_LABEL);
- frsldial->labelfont(1);
- frsldial->labelsize(10);
- frsldial->labelcolor(FL_FOREGROUND_COLOR);
- frsldial->maximum(127);
- frsldial->step(1);
- frsldial->callback((Fl_Callback*)cb_frsldial);
- frsldial->align(Fl_Align(FL_ALIGN_TOP));
- frsldial->when(FL_WHEN_CHANGED);
- o->value(pars->Pformantslowness);
- } // WidgetPDial* frsldial
- { Fl_Value_Output* o = centerfreqvo = new Fl_Value_Output(515, 164, 33, 18, "C.f.");
- centerfreqvo->tooltip("Center Frequency (kHz)");
- centerfreqvo->minimum(1);
- centerfreqvo->maximum(10);
- centerfreqvo->step(0.01);
- centerfreqvo->value(1);
- centerfreqvo->textfont(1);
- centerfreqvo->callback((Fl_Callback*)cb_centerfreqvo);
- centerfreqvo->when(3);
- o->value(pars->getcenterfreq()/1000.0);
- } // Fl_Value_Output* centerfreqvo
- { Fl_Value_Output* o = octavesfreqvo = new Fl_Value_Output(515, 182, 33, 18, "Oct.");
- octavesfreqvo->tooltip("No. of octaves");
- octavesfreqvo->minimum(1);
- octavesfreqvo->maximum(127);
- octavesfreqvo->step(1);
- octavesfreqvo->value(5);
- octavesfreqvo->textfont(1);
- octavesfreqvo->callback((Fl_Callback*)cb_octavesfreqvo);
- octavesfreqvo->when(3);
- o->value(pars->getoctavesfreq());
- } // Fl_Value_Output* octavesfreqvo
- { Fl_Slider* o = cfknob = new Fl_Slider(551, 167, 84, 15);
- cfknob->type(5);
- cfknob->box(FL_FLAT_BOX);
- cfknob->maximum(127);
- cfknob->callback((Fl_Callback*)cb_cfknob);
- o->value(pars->Pcenterfreq);
- } // Fl_Slider* cfknob
- { Fl_Slider* o = octknob = new Fl_Slider(551, 185, 84, 15);
- octknob->type(5);
- octknob->box(FL_FLAT_BOX);
- octknob->maximum(127);
- octknob->callback((Fl_Callback*)cb_octknob);
- o->value(pars->Poctavesfreq);
- } // Fl_Slider* octknob
- { FormantFilterGraph* o = formantfiltergraph = new FormantFilterGraph(5, 5, 475, 195);
- formantfiltergraph->box(FL_BORDER_BOX);
- formantfiltergraph->color(FL_BACKGROUND_COLOR);
- formantfiltergraph->selection_color(FL_BACKGROUND_COLOR);
- formantfiltergraph->labeltype(FL_NORMAL_LABEL);
- formantfiltergraph->labelfont(0);
- formantfiltergraph->labelsize(14);
- formantfiltergraph->labelcolor(FL_FOREGROUND_COLOR);
- formantfiltergraph->align(Fl_Align(FL_ALIGN_CENTER));
- formantfiltergraph->when(FL_WHEN_RELEASE);
- o->init(pars,&nvowel,&nformant);
- } // FormantFilterGraph* formantfiltergraph
- { WidgetPDial* o = wvknob = new WidgetPDial(600, 15, 25, 25, "Vw.Cl.");
- wvknob->tooltip("Vowel \"clearness\" (how the mixed vowels are avoided)");
- wvknob->box(FL_ROUND_UP_BOX);
- wvknob->color(FL_BACKGROUND_COLOR);
- wvknob->selection_color(FL_INACTIVE_COLOR);
- wvknob->labeltype(FL_NORMAL_LABEL);
- wvknob->labelfont(1);
- wvknob->labelsize(10);
- wvknob->labelcolor(FL_FOREGROUND_COLOR);
- wvknob->maximum(127);
- wvknob->step(1);
- wvknob->callback((Fl_Callback*)cb_wvknob);
- wvknob->align(Fl_Align(FL_ALIGN_TOP));
- wvknob->when(FL_WHEN_CHANGED);
- o->value(pars->Pvowelclearness);
- } // WidgetPDial* wvknob
- { Fl_Button* o = new Fl_Button(645, 180, 50, 25, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(635, 25, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(665, 25, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P1);
- } // Fl_Button* o
- { new Fl_Box(635, 10, 55, 15, "Vowel");
- } // Fl_Box* o
- formantparswindow->end();
- } // Fl_Double_Window* formantparswindow
- return formantparswindow;
-}
-
-void FilterUI::update_formant_window() {
- formant_freq_dial->value(pars->Pvowels[nvowel].formants[nformant].freq);
- formant_q_dial->value(pars->Pvowels[nvowel].formants[nformant].q);
- formant_amp_dial->value(pars->Pvowels[nvowel].formants[nformant].amp);
- if (nformant<pars->Pnumformants) formantparsgroup->activate();
- else formantparsgroup->deactivate();
-
- if (nseqpos<pars->Psequencesize) vowel_counter->activate();
- else vowel_counter->deactivate();
-
-
- vowel_counter->value(pars->Psequence[nseqpos].nvowel);
-}
-
-void FilterUI::refresh() {
- update_formant_window();
- formantfiltergraph->redraw();
-
- if (pars->Pcategory==0) svfiltertypechoice->value(pars->Ptype);
- if (pars->Pcategory==2) analogfiltertypechoice->value(pars->Ptype);
-
- filtertype->value(pars->Pcategory);
-
- cfreqdial->value(pars->Pfreq);
- qdial->value(pars->Pq);
-
- freqtrdial->value(pars->Pfreqtrack);
- gaindial->value(pars->Pgain);
-
- stcounter->value(pars->Pstages);
-
- int categ=pars->Pcategory;
- if ((categ==0)||(categ==2)) {
- if (categ==0) {
- analogfiltertypechoice->show();
- svfiltertypechoice->hide();
- } else {
- svfiltertypechoice->show();
- analogfiltertypechoice->hide();
- };
- editbutton->hide();
- formantparswindow->hide();
- cfreqdial->label("C.freq");
- } else {
- analogfiltertypechoice->hide();
- svfiltertypechoice->hide();
- editbutton->show();
- cfreqdial->label("BS.pos");
- };
-
- filterparamswindow->redraw();
-}
-
-void FilterUI::init(FilterParams *filterpars_,unsigned char *velsnsamp_,unsigned char *velsns_) {
- pars=filterpars_;
- velsnsamp=velsnsamp_;
- velsns=velsns_;
-
- make_window();
- end();
- make_formant_window();
-
-
- filterui->resize(this->x(),this->y(),this->w(),this->h());
-
-
- if (velsnsamp==NULL){
- vsnsadial->deactivate();
- vsnsadial->value(127);
- } else vsnsadial->value(*velsnsamp);
-
- if (velsns==NULL){
- vsnsdial->deactivate();
- vsnsdial->value(127);
- } else vsnsdial->value(*velsns);
-
- switchcategory(pars->Pcategory);
-
-
- formantparswindow->label(this->label());
-
- update_formant_window();
-}
-
-void FilterUI::switchcategory(int newcat) {
- if (pars->Pcategory!=newcat){
- pars->Pgain=64;
- gaindial->value(64);
- analogfiltertypechoice->value(0);
- analogfiltertypechoice->do_callback();
- svfiltertypechoice->value(0);
- svfiltertypechoice->do_callback();
- };
- pars->Pcategory=newcat;
-
- refresh();
-}
-
-void FilterUI::use_for_dynamic_filter() {
- freqtrdial->deactivate();
- gaindial->when(0);
-
- cfknob->when(FL_WHEN_RELEASE);
- octknob->when(FL_WHEN_RELEASE);
-
- frsldial->when(0);
- wvknob->when(0);
- formant_freq_dial->when(0);
- formant_q_dial->when(0);
- formant_amp_dial->when(0);
- strchdial->when(0);
-}
diff --git a/plugins/zynaddsubfx/src/UI/FilterUI.fl b/plugins/zynaddsubfx/src/UI/FilterUI.fl
deleted file mode 100644
index 298d140..0000000
--- a/plugins/zynaddsubfx/src/UI/FilterUI.fl
+++ /dev/null
@@ -1,624 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0106
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include "../globals.h"} {public
-}
-
-decl {\#include <FL/Fl_Group.H>} {public
-}
-
-decl {\#include "../Params/FilterParams.h"} {public
-}
-
-decl {\#include <FL/Fl_Box.H>} {public
-}
-
-decl {\#include <FL/fl_draw.H>} {public
-}
-
-decl {\#include <FL/fl_ask.H>} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class FormantFilterGraph {: {public Fl_Box}
-} {
- Function {FormantFilterGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {pars=NULL;
-nvowel=NULL;
-nformant=NULL;
-graphpoints=NULL;} {}
- }
- Function {init(FilterParams *pars_,int *nvowel_,int *nformant_)} {} {
- code {pars=pars_;
-nvowel=nvowel_;
-nformant=nformant_;
-oldx=-1;
-graphpoints=new REALTYPE [w()];} {}
- }
- Function {draw_freq_line(REALTYPE freq,int type)} {} {
- code {REALTYPE freqx=pars->getfreqpos(freq);
-switch(type){
- case 0:fl_line_style(FL_SOLID);break;
- case 1:fl_line_style(FL_DOT);break;
- case 2:fl_line_style(FL_DASH);break;
-};
-
-
-if ((freqx>0.0)&&(freqx<1.0))
- fl_line(x()+(int) (freqx*w()),y(),
- x()+(int) (freqx*w()),y()+h());} {}
- }
- Function {draw()} {open
- } {
- code {int maxdB=30;
-int ox=x(),oy=y(),lx=w(),ly=h(),i,oiy;
-REALTYPE freqx;
-
-fl_color(FL_BLACK);
-fl_rectf(ox,oy,lx,ly);
-
-
-//draw the lines
-fl_color(FL_GRAY);
-
-fl_line_style(FL_SOLID);
-//fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-
-freqx=pars->getfreqpos(1000.0);
-if ((freqx>0.0)&&(freqx<1.0))
- fl_line(ox+(int) (freqx*lx),oy,
- ox+(int) (freqx*lx),oy+ly);
-
-for (i=1;i<10;i++){
- if(i==1){
- draw_freq_line(i*100.0,0);
- draw_freq_line(i*1000.0,0);
- }else
- if (i==5){
- draw_freq_line(i*100.0,2);
- draw_freq_line(i*1000.0,2);
- }else{
- draw_freq_line(i*100.0,1);
- draw_freq_line(i*1000.0,1);
- };
-};
-
-draw_freq_line(10000.0,0);
-draw_freq_line(20000.0,1);
-
-fl_line_style(FL_DOT);
-int GY=10;if (ly<GY*3) GY=-1;
-for (i=1;i<GY;i++){
- int tmp=(int)(ly/(REALTYPE)GY*i);
- fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
-};
-
-fl_color(FL_YELLOW);
-fl_font(FL_HELVETICA,10);
-if (*nformant<pars->Pnumformants){
- draw_freq_line(pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq),2);
-
-//show some information (like current formant frequency,amplitude)
- char tmpstr[20];
-
- snprintf(tmpstr,20,"%.2f kHz",pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq)*0.001);
- fl_draw(tmpstr,ox+1,oy+1,40,12,FL_ALIGN_LEFT,NULL,0);
-
- snprintf(tmpstr,20,"%d dB",(int)( rap2dB(1e-9 + pars->getformantamp(pars->Pvowels[*nvowel].formants[*nformant].amp)) + pars->getgain() ));
- fl_draw(tmpstr,ox+1,oy+15,40,12,FL_ALIGN_LEFT,NULL,0);
-
-};
-
-//draw the data
-
-fl_color(FL_RED);
-fl_line_style(FL_SOLID);
-
-pars->formantfilterH(*nvowel,lx,graphpoints);
-
-oiy=(int) ((graphpoints[0]/maxdB+1.0)*ly/2.0);
-for (i=1;i<lx;i++){
- int iy=(int) ((graphpoints[i]/maxdB+1.0)*ly/2.0);
- if ((iy>=0)&&(oiy>=0)&&(iy<ly)&&(oiy<lx))
- fl_line(ox+i-1,oy+ly-oiy,ox+i,oy+ly-iy);
- oiy=iy;
-};} {}
- }
- Function {~FormantFilterGraph()} {} {
- code {delete [] graphpoints;} {}
- }
- decl {FilterParams *pars;} {}
- decl {int oldx;} {}
- decl {int *nvowel,*nformant;} {}
- decl {REALTYPE *graphpoints;} {}
-}
-
-class FilterUI {: {public Fl_Group,PresetsUI_}
-} {
- Function {FilterUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {pars=NULL;
-velsnsamp=NULL;
-velsns=NULL;
-nvowel=0;nformant=0;nseqpos=0;} {}
- }
- Function {~FilterUI()} {} {
- code {filterui->hide();
-formantparswindow->hide();
-hide();
-//delete (filterui);
-delete (formantparswindow);} {}
- }
- Function {make_window()} {} {
- Fl_Window filterui {
- xywh {211 312 275 75} type Double color 50 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Group filterparamswindow {
- label {Filter Parameters}
- xywh {0 0 275 75} box PLASTIC_UP_BOX color 183 labeltype ENGRAVED_LABEL labelsize 10 align 17
- } {
- Fl_Choice analogfiltertypechoice {
- label FilterType
- callback {pars->Ptype=(int)o->value();
-pars->changed=true;}
- tooltip {The Filter type} xywh {10 50 50 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
- code1 {o->value(pars->Ptype);}
- } {
- menuitem {} {
- label LPF1
- xywh {40 40 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label HPF1
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label LPF2
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label HPF2
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label BPF2
- xywh {82 82 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label NF2
- xywh {94 94 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label PkF2
- xywh {104 104 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label LSh2
- xywh {114 114 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label HSh2
- xywh {124 124 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Choice svfiltertypechoice {
- label FilterType
- callback {pars->Ptype=(int)o->value();
-pars->changed=true;}
- tooltip {The Filter type} xywh {10 50 50 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
- code1 {o->value(pars->Ptype);}
- } {
- menuitem {} {
- label 1LPF
- xywh {134 134 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label 1HPF
- xywh {144 144 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label 1BPF
- xywh {154 154 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label 1NF
- xywh {164 164 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Choice filtertype {
- label Category
- callback {switchcategory((int)o->value());
-pars->changed=true;}
- tooltip {The Category of the Filter (Analog/Formantic/etc.)} xywh {10 20 60 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
- code0 {o->value(pars->Pcategory);}
- } {
- menuitem {} {
- label Analog
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label Formant
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label StVarF
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial cfreqdial {
- label {C.Freq}
- callback {pars->Pfreq=(int)o->value();}
- tooltip {Center Frequency of the Filter or the base position in the vowel's sequence} xywh {75 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(pars->Pfreq);}
- class WidgetPDial
- }
- Fl_Dial qdial {
- label Q
- callback {pars->Pq=(int)o->value();
-formantfiltergraph->redraw();}
- tooltip {Filter resonance or bandwidth} xywh {110 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(pars->Pq);}
- class WidgetPDial
- }
- Fl_Dial freqtrdial {
- label {freq.tr.}
- callback {pars->Pfreqtrack=(int) o->value();}
- tooltip {Filter frequency tracking (left is negative, middle is 0, and right is positive)} xywh {215 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(pars->Pfreqtrack);}
- class WidgetPDial
- }
- Fl_Dial vsnsadial {
- label {V.SnsA.}
- callback {if (velsnsamp!=NULL) *velsnsamp=(int)o->value();}
- tooltip {Velocity sensing amount of the Filter} xywh {145 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial vsnsdial {
- label {V.Sns.}
- callback {if (velsns!=NULL) *velsns=(int)o->value();}
- tooltip {Velocity Sensing Function of the Filter} xywh {180 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial gaindial {
- label gain
- callback {pars->Pgain=(int)o->value();
-formantfiltergraph->redraw();
-pars->changed=true;}
- tooltip {Filter output gain/damp} xywh {250 35 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(pars->Pgain);}
- class WidgetPDial
- }
- Fl_Choice stcounter {
- label St
- callback {pars->Pstages=(int)o->value();
-formantfiltergraph->redraw();
-pars->changed=true;} open
- tooltip {Filter stages (in order to increase dB/oct. value and the order of the filter)} xywh {235 5 35 15} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
- code1 {for (int i=0;i<MAX_FILTER_STAGES;i++) {char tmp[10];snprintf(tmp,10,"%dx",i+1);o->add(tmp);};}
- code2 {o->value(pars->Pstages);}
- } {}
- }
- Fl_Button editbutton {
- label Edit
- callback {formantparswindow->show();}
- xywh {15 40 50 25} box PLASTIC_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(pars);}
- xywh {186 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(pars,this);}
- xywh {203 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- }
- }
- Function {make_formant_window()} {} {
- Fl_Window formantparswindow {
- label {Formant Filter Parameters}
- xywh {47 301 700 205} type Double hide
- } {
- Fl_Group {} {
- xywh {485 47 105 113} box THIN_UP_BOX
- } {
- Fl_Counter {} {
- label {Formant }
- callback {nformant=(int) o->value();
-update_formant_window();
-formantfiltergraph->redraw();}
- xywh {545 80 40 15} type Simple labelfont 1 labelsize 10 align 4 minimum 0 maximum 127 step 1 textsize 10
- code0 {o->bounds(0,FF_MAX_FORMANTS-1);}
- code1 {o->value(nformant);}
- }
- Fl_Counter {} {
- label {Vowel no.}
- callback {nvowel=(int) o->value();
-update_formant_window();
-formantfiltergraph->redraw();}
- xywh {545 55 40 20} type Simple labelfont 1 labelsize 10 align 4 minimum 0 maximum 127 step 1 textfont 1 textsize 11
- code0 {o->bounds(0,FF_MAX_VOWELS-1);}
- code1 {o->value(nvowel);}
- }
- Fl_Group formantparsgroup {
- xywh {490 105 95 50} box ENGRAVED_FRAME
- } {
- Fl_Dial formant_freq_dial {
- label freq
- callback {pars->Pvowels[nvowel].formants[nformant].freq=(int) o->value();
-formantfiltergraph->redraw();
-pars->changed=true;}
- tooltip {Formant frequency} xywh {495 115 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial formant_q_dial {
- label Q
- callback {pars->Pvowels[nvowel].formants[nformant].q=(int) o->value();
-formantfiltergraph->redraw();
-pars->changed=true;}
- tooltip {Formant's Q} xywh {525 115 24 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial formant_amp_dial {
- label amp
- callback {pars->Pvowels[nvowel].formants[nformant].amp=(int) o->value();
-formantfiltergraph->redraw();
-pars->changed=true;}
- tooltip {Formant amplitude} xywh {555 115 24 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- }
- }
- Fl_Group {} {
- xywh {590 47 100 113} box THIN_UP_BOX
- } {
- Fl_Counter {} {
- label {Seq.Size}
- callback {pars->Psequencesize=(int) o->value();
-update_formant_window();
-pars->changed=true;}
- xywh {595 62 55 20} type Simple labelfont 1 labelsize 10 align 5 minimum 0 maximum 127 step 1 textfont 1 textsize 11
- code0 {o->bounds(1,FF_MAX_SEQUENCE-1);}
- code1 {o->value(pars->Psequencesize);}
- }
- Fl_Counter {} {
- label {S.Pos.}
- callback {nseqpos=(int) o->value();
-update_formant_window();
-pars->changed=true;}
- tooltip {Current position from the sequence} xywh {595 97 40 15} type Simple labelfont 1 labelsize 10 align 9 minimum 0 maximum 127 step 1 textsize 10
- code0 {o->bounds(0,FF_MAX_SEQUENCE-2);}
- code1 {o->value(nseqpos);}
- }
- Fl_Counter vowel_counter {
- label Vowel
- callback {pars->Psequence[nseqpos].nvowel=(int) o->value();
-pars->changed=true;}
- xywh {640 97 40 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textsize 10
- code0 {o->bounds(0,FF_MAX_VOWELS-1);}
- }
- Fl_Check_Button {} {
- label {Neg.Input}
- callback {pars->Psequencereversed=(int) o->value();
-pars->changed=true;}
- tooltip {Negate the input from LFO/envelopes/etc.} xywh {625 132 60 20} down_box DOWN_BOX labelsize 10
- code0 {o->value(pars->Psequencereversed);}
- }
- Fl_Dial strchdial {
- label Strch
- callback {pars->Psequencestretch=(int) o->value();
-pars->changed=true;}
- tooltip {Sequence Stretch} xywh {595 130 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Psequencestretch);}
- class WidgetPDial
- }
- }
- Fl_Counter {} {
- label {Num.Formants}
- callback {pars->Pnumformants=(int) o->value();
-update_formant_window();
-pars->changed=true;
-formantfiltergraph->redraw();}
- xywh {485 15 65 20} type Simple labelfont 1 labelsize 10 align 5 minimum 0 maximum 127 step 1
- code0 {o->bounds(1,FF_MAX_FORMANTS);}
- code1 {o->value(pars->Pnumformants);}
- }
- Fl_Dial frsldial {
- label {Fr.Sl.}
- callback {pars->Pformantslowness=(int) o->value();
-pars->changed=true;}
- tooltip {Formant's Slowness (Morphing)} xywh {565 15 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Pformantslowness);}
- class WidgetPDial
- }
- Fl_Value_Output centerfreqvo {
- label {C.f.}
- callback {o->value(pars->getcenterfreq()/1000.0);}
- tooltip {Center Frequency (kHz)} xywh {515 164 33 18} when 3 minimum 1 maximum 10 step 0.01 value 1 textfont 1
- code0 {o->value(pars->getcenterfreq()/1000.0);}
- }
- Fl_Value_Output octavesfreqvo {
- label {Oct.}
- callback {o->value(pars->getoctavesfreq());}
- tooltip {No. of octaves} xywh {515 182 33 18} when 3 minimum 1 maximum 127 step 1 value 5 textfont 1
- code0 {o->value(pars->getoctavesfreq());}
- }
- Fl_Slider cfknob {
- callback {pars->Pcenterfreq=(int)o->value();
-centerfreqvo->do_callback();
-formantfiltergraph->redraw();
-pars->changed=true;}
- xywh {551 167 84 15} type {Horz Knob} box FLAT_BOX maximum 127
- code0 {o->value(pars->Pcenterfreq);}
- }
- Fl_Slider octknob {
- callback {pars->Poctavesfreq=(int)o->value();
-octavesfreqvo->do_callback();
-formantfiltergraph->redraw();}
- xywh {551 185 84 15} type {Horz Knob} box FLAT_BOX maximum 127
- code0 {o->value(pars->Poctavesfreq);}
- }
- Fl_Box formantfiltergraph {
- xywh {5 5 475 195} box BORDER_BOX
- code0 {o->init(pars,&nvowel,&nformant);}
- class FormantFilterGraph
- }
- Fl_Dial wvknob {
- label {Vw.Cl.}
- callback {pars->Pvowelclearness=(int) o->value();
-pars->changed=true;}
- tooltip {Vowel "clearness" (how the mixed vowels are avoided)} xywh {600 15 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Pvowelclearness);}
- class WidgetPDial
- }
- Fl_Button {} {
- label Close
- callback {formantparswindow->hide();}
- xywh {645 180 50 25} box THIN_UP_BOX
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(pars,nvowel);}
- xywh {635 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(pars,this,nvowel);}
- xywh {665 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Box {} {
- label Vowel
- xywh {635 10 55 15}
- }
- }
- }
- Function {update_formant_window()} {} {
- code {formant_freq_dial->value(pars->Pvowels[nvowel].formants[nformant].freq);
-formant_q_dial->value(pars->Pvowels[nvowel].formants[nformant].q);
-formant_amp_dial->value(pars->Pvowels[nvowel].formants[nformant].amp);
-if (nformant<pars->Pnumformants) formantparsgroup->activate();
- else formantparsgroup->deactivate();
-
-if (nseqpos<pars->Psequencesize) vowel_counter->activate();
- else vowel_counter->deactivate();
-
-
-vowel_counter->value(pars->Psequence[nseqpos].nvowel);} {}
- }
- Function {refresh()} {} {
- code {update_formant_window();
-formantfiltergraph->redraw();
-
-if (pars->Pcategory==0) svfiltertypechoice->value(pars->Ptype);
-if (pars->Pcategory==2) analogfiltertypechoice->value(pars->Ptype);
-
-filtertype->value(pars->Pcategory);
-
-cfreqdial->value(pars->Pfreq);
-qdial->value(pars->Pq);
-
-freqtrdial->value(pars->Pfreqtrack);
-gaindial->value(pars->Pgain);
-
-stcounter->value(pars->Pstages);
-
-int categ=pars->Pcategory;
-if ((categ==0)||(categ==2)) {
- if (categ==0) {
- analogfiltertypechoice->show();
- svfiltertypechoice->hide();
- } else {
- svfiltertypechoice->show();
- analogfiltertypechoice->hide();
- };
- editbutton->hide();
- formantparswindow->hide();
- cfreqdial->label("C.freq");
-} else {
- analogfiltertypechoice->hide();
- svfiltertypechoice->hide();
- editbutton->show();
- cfreqdial->label("BS.pos");
-};
-
-filterparamswindow->redraw();} {selected
- }
- }
- Function {init(FilterParams *filterpars_,unsigned char *velsnsamp_,unsigned char *velsns_)} {} {
- code {pars=filterpars_;
-velsnsamp=velsnsamp_;
-velsns=velsns_;
-
-make_window();
-end();
-make_formant_window();
-
-
-filterui->resize(this->x(),this->y(),this->w(),this->h());
-
-
-if (velsnsamp==NULL){
- vsnsadial->deactivate();
- vsnsadial->value(127);
- } else vsnsadial->value(*velsnsamp);
-
-if (velsns==NULL){
- vsnsdial->deactivate();
- vsnsdial->value(127);
- } else vsnsdial->value(*velsns);
-
-switchcategory(pars->Pcategory);
-
-
-formantparswindow->label(this->label());
-
-update_formant_window();} {}
- }
- Function {switchcategory(int newcat)} {} {
- code {if (pars->Pcategory!=newcat){
- pars->Pgain=64;
- gaindial->value(64);
- analogfiltertypechoice->value(0);
- analogfiltertypechoice->do_callback();
- svfiltertypechoice->value(0);
- svfiltertypechoice->do_callback();
-};
-pars->Pcategory=newcat;
-
-refresh();} {}
- }
- Function {use_for_dynamic_filter()} {} {
- code {freqtrdial->deactivate();
-gaindial->when(0);
-
-cfknob->when(FL_WHEN_RELEASE);
-octknob->when(FL_WHEN_RELEASE);
-
-frsldial->when(0);
-wvknob->when(0);
-formant_freq_dial->when(0);
-formant_q_dial->when(0);
-formant_amp_dial->when(0);
-strchdial->when(0);} {}
- }
- decl {FilterParams *pars;} {}
- decl {unsigned char *velsnsamp,*velsns;} {}
- decl {int nvowel,nformant,nseqpos;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/FilterUI.h b/plugins/zynaddsubfx/src/UI/FilterUI.h
deleted file mode 100644
index 60f292b..0000000
--- a/plugins/zynaddsubfx/src/UI/FilterUI.h
+++ /dev/null
@@ -1,198 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef FilterUI_h
-#define FilterUI_h
-#include <FL/Fl.H>
-#include "WidgetPDial.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "../globals.h"
-#include <FL/Fl_Group.H>
-#include "../Params/FilterParams.h"
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
-#include "PresetsUI.h"
-
-class FormantFilterGraph : public Fl_Box {
-public:
- FormantFilterGraph(int x,int y, int w, int h, const char *label=0);
- void init(FilterParams *pars_,int *nvowel_,int *nformant_);
- void draw_freq_line(REALTYPE freq,int type);
- void draw();
- ~FormantFilterGraph();
-private:
- FilterParams *pars;
- int oldx;
- int *nvowel,*nformant;
- REALTYPE *graphpoints;
-};
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Box.H>
-
-class FilterUI : public Fl_Group,PresetsUI_ {
-public:
- FilterUI(int x,int y, int w, int h, const char *label=0);
- ~FilterUI();
- Fl_Group* make_window();
- Fl_Group *filterui;
- Fl_Group *filterparamswindow;
- Fl_Choice *analogfiltertypechoice;
-private:
- void cb_analogfiltertypechoice_i(Fl_Choice*, void*);
- static void cb_analogfiltertypechoice(Fl_Choice*, void*);
- static Fl_Menu_Item menu_analogfiltertypechoice[];
-public:
- Fl_Choice *svfiltertypechoice;
-private:
- void cb_svfiltertypechoice_i(Fl_Choice*, void*);
- static void cb_svfiltertypechoice(Fl_Choice*, void*);
- static Fl_Menu_Item menu_svfiltertypechoice[];
-public:
- Fl_Choice *filtertype;
-private:
- void cb_filtertype_i(Fl_Choice*, void*);
- static void cb_filtertype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_filtertype[];
-public:
- WidgetPDial *cfreqdial;
-private:
- void cb_cfreqdial_i(WidgetPDial*, void*);
- static void cb_cfreqdial(WidgetPDial*, void*);
-public:
- WidgetPDial *qdial;
-private:
- void cb_qdial_i(WidgetPDial*, void*);
- static void cb_qdial(WidgetPDial*, void*);
-public:
- WidgetPDial *freqtrdial;
-private:
- void cb_freqtrdial_i(WidgetPDial*, void*);
- static void cb_freqtrdial(WidgetPDial*, void*);
-public:
- WidgetPDial *vsnsadial;
-private:
- void cb_vsnsadial_i(WidgetPDial*, void*);
- static void cb_vsnsadial(WidgetPDial*, void*);
-public:
- WidgetPDial *vsnsdial;
-private:
- void cb_vsnsdial_i(WidgetPDial*, void*);
- static void cb_vsnsdial(WidgetPDial*, void*);
-public:
- WidgetPDial *gaindial;
-private:
- void cb_gaindial_i(WidgetPDial*, void*);
- static void cb_gaindial(WidgetPDial*, void*);
-public:
- Fl_Choice *stcounter;
-private:
- void cb_stcounter_i(Fl_Choice*, void*);
- static void cb_stcounter(Fl_Choice*, void*);
-public:
- Fl_Button *editbutton;
-private:
- void cb_editbutton_i(Fl_Button*, void*);
- static void cb_editbutton(Fl_Button*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- Fl_Double_Window* make_formant_window();
- Fl_Double_Window *formantparswindow;
-private:
- void cb_Formant_i(Fl_Counter*, void*);
- static void cb_Formant(Fl_Counter*, void*);
- void cb_Vowel_i(Fl_Counter*, void*);
- static void cb_Vowel(Fl_Counter*, void*);
-public:
- Fl_Group *formantparsgroup;
- WidgetPDial *formant_freq_dial;
-private:
- void cb_formant_freq_dial_i(WidgetPDial*, void*);
- static void cb_formant_freq_dial(WidgetPDial*, void*);
-public:
- WidgetPDial *formant_q_dial;
-private:
- void cb_formant_q_dial_i(WidgetPDial*, void*);
- static void cb_formant_q_dial(WidgetPDial*, void*);
-public:
- WidgetPDial *formant_amp_dial;
-private:
- void cb_formant_amp_dial_i(WidgetPDial*, void*);
- static void cb_formant_amp_dial(WidgetPDial*, void*);
- void cb_Seq_i(Fl_Counter*, void*);
- static void cb_Seq(Fl_Counter*, void*);
- void cb_S_i(Fl_Counter*, void*);
- static void cb_S(Fl_Counter*, void*);
-public:
- Fl_Counter *vowel_counter;
-private:
- void cb_vowel_counter_i(Fl_Counter*, void*);
- static void cb_vowel_counter(Fl_Counter*, void*);
- void cb_Neg_i(Fl_Check_Button*, void*);
- static void cb_Neg(Fl_Check_Button*, void*);
-public:
- WidgetPDial *strchdial;
-private:
- void cb_strchdial_i(WidgetPDial*, void*);
- static void cb_strchdial(WidgetPDial*, void*);
- void cb_Num_i(Fl_Counter*, void*);
- static void cb_Num(Fl_Counter*, void*);
-public:
- WidgetPDial *frsldial;
-private:
- void cb_frsldial_i(WidgetPDial*, void*);
- static void cb_frsldial(WidgetPDial*, void*);
-public:
- Fl_Value_Output *centerfreqvo;
-private:
- void cb_centerfreqvo_i(Fl_Value_Output*, void*);
- static void cb_centerfreqvo(Fl_Value_Output*, void*);
-public:
- Fl_Value_Output *octavesfreqvo;
-private:
- void cb_octavesfreqvo_i(Fl_Value_Output*, void*);
- static void cb_octavesfreqvo(Fl_Value_Output*, void*);
-public:
- Fl_Slider *cfknob;
-private:
- void cb_cfknob_i(Fl_Slider*, void*);
- static void cb_cfknob(Fl_Slider*, void*);
-public:
- Fl_Slider *octknob;
-private:
- void cb_octknob_i(Fl_Slider*, void*);
- static void cb_octknob(Fl_Slider*, void*);
-public:
- FormantFilterGraph *formantfiltergraph;
- WidgetPDial *wvknob;
-private:
- void cb_wvknob_i(WidgetPDial*, void*);
- static void cb_wvknob(WidgetPDial*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
- void cb_C1_i(Fl_Button*, void*);
- static void cb_C1(Fl_Button*, void*);
- void cb_P1_i(Fl_Button*, void*);
- static void cb_P1(Fl_Button*, void*);
-public:
- void update_formant_window();
- void refresh();
- void init(FilterParams *filterpars_,unsigned char *velsnsamp_,unsigned char *velsns_);
- void switchcategory(int newcat);
- void use_for_dynamic_filter();
-private:
- FilterParams *pars;
- unsigned char *velsnsamp,*velsns;
- int nvowel,nformant,nseqpos;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/LFOUI.cc b/plugins/zynaddsubfx/src/UI/LFOUI.cc
deleted file mode 100644
index 1206008..0000000
--- a/plugins/zynaddsubfx/src/UI/LFOUI.cc
+++ /dev/null
@@ -1,289 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "LFOUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-void LFOUI::cb_freq_i(WidgetPDial* o, void*) {
- pars->Pfreq=o->value();
-}
-void LFOUI::cb_freq(WidgetPDial* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_freq_i(o,v);
-}
-
-void LFOUI::cb_intensity_i(WidgetPDial* o, void*) {
- pars->Pintensity=(int)o->value();
-}
-void LFOUI::cb_intensity(WidgetPDial* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_intensity_i(o,v);
-}
-
-void LFOUI::cb_delay_i(WidgetPDial* o, void*) {
- pars->Pdelay=(int)o->value();
-}
-void LFOUI::cb_delay(WidgetPDial* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_delay_i(o,v);
-}
-
-void LFOUI::cb_startphase_i(WidgetPDial* o, void*) {
- pars->Pstartphase=(int)o->value();
-}
-void LFOUI::cb_startphase(WidgetPDial* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_startphase_i(o,v);
-}
-
-void LFOUI::cb_randomness_i(WidgetPDial* o, void*) {
- pars->Prandomness=(int)o->value();
-}
-void LFOUI::cb_randomness(WidgetPDial* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_randomness_i(o,v);
-}
-
-void LFOUI::cb_LFOtype_i(Fl_Choice* o, void*) {
- pars->PLFOtype=(int)o->value();
-}
-void LFOUI::cb_LFOtype(Fl_Choice* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_LFOtype_i(o,v);
-}
-
-Fl_Menu_Item LFOUI::menu_LFOtype[] = {
- {"SINE", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"TRI", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"SQR", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"R.up", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"R.dn", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"E1dn", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"E2dn", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void LFOUI::cb_continous_i(Fl_Check_Button* o, void*) {
- pars->Pcontinous=(int)o->value();
-}
-void LFOUI::cb_continous(Fl_Check_Button* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_continous_i(o,v);
-}
-
-void LFOUI::cb_freqrand_i(WidgetPDial* o, void*) {
- pars->Pfreqrand=(int)o->value();
-}
-void LFOUI::cb_freqrand(WidgetPDial* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_freqrand_i(o,v);
-}
-
-void LFOUI::cb_stretch_i(WidgetPDial* o, void*) {
- pars->Pstretch=(int)o->value();
-}
-void LFOUI::cb_stretch(WidgetPDial* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_stretch_i(o,v);
-}
-
-void LFOUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(pars);
-}
-void LFOUI::cb_C(Fl_Button* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void LFOUI::cb_P_i(Fl_Button*, void*) {
- presetsui->paste(pars,this);
-}
-void LFOUI::cb_P(Fl_Button* o, void* v) {
- ((LFOUI*)(o->parent()->parent()->user_data()))->cb_P_i(o,v);
-}
-
-LFOUI::LFOUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- pars=NULL;
-}
-
-LFOUI::~LFOUI() {
- lfoui->hide();
- hide();
- //delete (lfoui);
-}
-
-Fl_Group* LFOUI::make_window() {
- { lfoui = new Fl_Group(0, 0, 230, 70);
- lfoui->box(FL_FLAT_BOX);
- lfoui->color(FL_LIGHT1);
- lfoui->selection_color(FL_BACKGROUND_COLOR);
- lfoui->labeltype(FL_NO_LABEL);
- lfoui->labelfont(1);
- lfoui->labelsize(14);
- lfoui->labelcolor(FL_FOREGROUND_COLOR);
- lfoui->user_data((void*)(this));
- lfoui->align(Fl_Align(FL_ALIGN_TOP));
- lfoui->when(FL_WHEN_RELEASE);
- { lfoparamswindow = new Fl_Group(0, 0, 230, 70, "LFO");
- lfoparamswindow->box(FL_PLASTIC_UP_BOX);
- lfoparamswindow->color(FL_CYAN);
- lfoparamswindow->labeltype(FL_ENGRAVED_LABEL);
- lfoparamswindow->labelsize(10);
- lfoparamswindow->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { freq = new WidgetPDial(5, 20, 30, 30, "Freq.");
- freq->tooltip("LFO Frequency");
- freq->box(FL_ROUND_UP_BOX);
- freq->color(FL_BACKGROUND_COLOR);
- freq->selection_color(FL_INACTIVE_COLOR);
- freq->labeltype(FL_NORMAL_LABEL);
- freq->labelfont(0);
- freq->labelsize(10);
- freq->labelcolor(FL_FOREGROUND_COLOR);
- freq->step(1e-05);
- freq->callback((Fl_Callback*)cb_freq);
- freq->align(Fl_Align(FL_ALIGN_BOTTOM));
- freq->when(FL_WHEN_CHANGED);
- } // WidgetPDial* freq
- { intensity = new WidgetPDial(40, 20, 30, 30, "Depth");
- intensity->tooltip("LFO Amount");
- intensity->box(FL_ROUND_UP_BOX);
- intensity->color(FL_BACKGROUND_COLOR);
- intensity->selection_color(FL_INACTIVE_COLOR);
- intensity->labeltype(FL_NORMAL_LABEL);
- intensity->labelfont(0);
- intensity->labelsize(10);
- intensity->labelcolor(FL_FOREGROUND_COLOR);
- intensity->maximum(127);
- intensity->step(1);
- intensity->callback((Fl_Callback*)cb_intensity);
- intensity->align(Fl_Align(FL_ALIGN_BOTTOM));
- intensity->when(FL_WHEN_CHANGED);
- } // WidgetPDial* intensity
- { delay = new WidgetPDial(110, 20, 30, 30, "Delay");
- delay->tooltip("LFO delay");
- delay->box(FL_ROUND_UP_BOX);
- delay->color(FL_BACKGROUND_COLOR);
- delay->selection_color(FL_INACTIVE_COLOR);
- delay->labeltype(FL_NORMAL_LABEL);
- delay->labelfont(0);
- delay->labelsize(10);
- delay->labelcolor(FL_FOREGROUND_COLOR);
- delay->maximum(127);
- delay->step(1);
- delay->callback((Fl_Callback*)cb_delay);
- delay->align(Fl_Align(FL_ALIGN_BOTTOM));
- delay->when(FL_WHEN_CHANGED);
- } // WidgetPDial* delay
- { startphase = new WidgetPDial(75, 20, 30, 30, "Start");
- startphase->tooltip("LFO Startphase (leftmost is Random)");
- startphase->box(FL_ROUND_UP_BOX);
- startphase->color(FL_BACKGROUND_COLOR);
- startphase->selection_color(FL_INACTIVE_COLOR);
- startphase->labeltype(FL_NORMAL_LABEL);
- startphase->labelfont(0);
- startphase->labelsize(10);
- startphase->labelcolor(FL_FOREGROUND_COLOR);
- startphase->maximum(127);
- startphase->step(1);
- startphase->callback((Fl_Callback*)cb_startphase);
- startphase->align(Fl_Align(FL_ALIGN_BOTTOM));
- startphase->when(FL_WHEN_CHANGED);
- } // WidgetPDial* startphase
- { randomness = new WidgetPDial(180, 7, 20, 20, "A.R.");
- randomness->tooltip("LFO Amplitude Randomness");
- randomness->box(FL_ROUND_UP_BOX);
- randomness->color(FL_BACKGROUND_COLOR);
- randomness->selection_color(FL_INACTIVE_COLOR);
- randomness->labeltype(FL_NORMAL_LABEL);
- randomness->labelfont(0);
- randomness->labelsize(10);
- randomness->labelcolor(FL_FOREGROUND_COLOR);
- randomness->maximum(127);
- randomness->step(1);
- randomness->callback((Fl_Callback*)cb_randomness);
- randomness->align(Fl_Align(FL_ALIGN_BOTTOM));
- randomness->when(FL_WHEN_CHANGED);
- } // WidgetPDial* randomness
- { LFOtype = new Fl_Choice(180, 40, 45, 15, "Type");
- LFOtype->tooltip("LFO function");
- LFOtype->down_box(FL_BORDER_BOX);
- LFOtype->labelsize(10);
- LFOtype->textsize(8);
- LFOtype->callback((Fl_Callback*)cb_LFOtype);
- LFOtype->align(Fl_Align(FL_ALIGN_BOTTOM));
- LFOtype->menu(menu_LFOtype);
- } // Fl_Choice* LFOtype
- { continous = new Fl_Check_Button(165, 35, 15, 15, "C.");
- continous->tooltip("Continous LFO");
- continous->down_box(FL_DOWN_BOX);
- continous->labelsize(10);
- continous->callback((Fl_Callback*)cb_continous);
- continous->align(Fl_Align(FL_ALIGN_BOTTOM));
- } // Fl_Check_Button* continous
- { freqrand = new WidgetPDial(205, 7, 20, 20, "F.R.");
- freqrand->tooltip("LFO Frequency Randomness");
- freqrand->box(FL_ROUND_UP_BOX);
- freqrand->color(FL_BACKGROUND_COLOR);
- freqrand->selection_color(FL_INACTIVE_COLOR);
- freqrand->labeltype(FL_NORMAL_LABEL);
- freqrand->labelfont(0);
- freqrand->labelsize(10);
- freqrand->labelcolor(FL_FOREGROUND_COLOR);
- freqrand->maximum(127);
- freqrand->step(1);
- freqrand->callback((Fl_Callback*)cb_freqrand);
- freqrand->align(Fl_Align(FL_ALIGN_BOTTOM));
- freqrand->when(FL_WHEN_CHANGED);
- } // WidgetPDial* freqrand
- { stretch = new WidgetPDial(144, 30, 20, 20, "Str.");
- stretch->tooltip("LFO stretch");
- stretch->box(FL_ROUND_UP_BOX);
- stretch->color(FL_BACKGROUND_COLOR);
- stretch->selection_color(FL_INACTIVE_COLOR);
- stretch->labeltype(FL_NORMAL_LABEL);
- stretch->labelfont(0);
- stretch->labelsize(10);
- stretch->labelcolor(FL_FOREGROUND_COLOR);
- stretch->maximum(127);
- stretch->step(1);
- stretch->callback((Fl_Callback*)cb_stretch);
- stretch->align(Fl_Align(FL_ALIGN_BOTTOM));
- stretch->when(FL_WHEN_CHANGED);
- } // WidgetPDial* stretch
- { Fl_Button* o = new Fl_Button(145, 10, 15, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(162, 10, 15, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- lfoparamswindow->end();
- } // Fl_Group* lfoparamswindow
- lfoui->end();
- } // Fl_Group* lfoui
- return lfoui;
-}
-
-void LFOUI::refresh() {
- freq->value(pars->Pfreq);
- intensity->value(pars->Pintensity);
- startphase->value(pars->Pstartphase);
- delay->value(pars->Pdelay);
- continous->value(pars->Pcontinous);
- stretch->value(pars->Pstretch);
- randomness->value(pars->Prandomness);
- freqrand->value(pars->Pfreqrand);
- LFOtype->value(pars->PLFOtype);
-}
-
-void LFOUI::init(LFOParams *lfopars_) {
- pars=lfopars_;
-
- make_window();
- end();
-
- refresh();
-
- lfoui->resize(this->x(),this->y(),this->w(),this->h());
-
- lfoparamswindow->label(this->label());
-}
diff --git a/plugins/zynaddsubfx/src/UI/LFOUI.fl b/plugins/zynaddsubfx/src/UI/LFOUI.fl
deleted file mode 100644
index ca0433a..0000000
--- a/plugins/zynaddsubfx/src/UI/LFOUI.fl
+++ /dev/null
@@ -1,176 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0105
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include "../globals.h"} {public
-}
-
-decl {\#include <FL/Fl_Group.H>} {public
-}
-
-decl {\#include "../Params/LFOParams.h"} {public
-}
-
-decl {\#include <FL/Fl_Box.H>} {public
-}
-
-decl {\#include <FL/fl_draw.H>} {public
-}
-
-decl {\#include <FL/fl_ask.H>} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class LFOUI {: {public Fl_Group, PresetsUI_}
-} {
- Function {LFOUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {pars=NULL;} {}
- }
- Function {~LFOUI()} {} {
- code {lfoui->hide();
-hide();
-//delete (lfoui);} {}
- }
- Function {make_window()} {} {
- Fl_Window lfoui {
- xywh {66 328 230 70} type Double color 50 labelfont 1 hide
- class Fl_Group
- } {
- Fl_Group lfoparamswindow {
- label LFO
- xywh {0 0 230 70} box PLASTIC_UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
- } {
- Fl_Dial freq {
- label {Freq.}
- callback {pars->Pfreq=o->value();}
- tooltip {LFO Frequency} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 step 1e-05
- class WidgetPDial
- }
- Fl_Dial intensity {
- label Depth
- callback {pars->Pintensity=(int)o->value();}
- tooltip {LFO Amount} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial delay {
- label Delay
- callback {pars->Pdelay=(int)o->value();}
- tooltip {LFO delay} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial startphase {
- label Start
- callback {pars->Pstartphase=(int)o->value();}
- tooltip {LFO Startphase (leftmost is Random)} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial randomness {
- label {A.R.}
- callback {pars->Prandomness=(int)o->value();}
- tooltip {LFO Amplitude Randomness} xywh {180 7 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Choice LFOtype {
- label Type
- callback {pars->PLFOtype=(int)o->value();}
- tooltip {LFO function} xywh {180 40 45 15} down_box BORDER_BOX labelsize 10 align 2 textsize 8
- } {
- menuitem {} {
- label SINE
- xywh {20 20 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label TRI
- xywh {30 30 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label SQR
- xywh {30 30 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label {R.up}
- xywh {40 40 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label {R.dn}
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label E1dn
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- menuitem {} {
- label E2dn
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Check_Button continous {
- label {C.}
- callback {pars->Pcontinous=(int)o->value();}
- tooltip {Continous LFO} xywh {165 35 15 15} down_box DOWN_BOX labelsize 10 align 2
- }
- Fl_Dial freqrand {
- label {F.R.}
- callback {pars->Pfreqrand=(int)o->value();}
- tooltip {LFO Frequency Randomness} xywh {205 7 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial stretch {
- label {Str.}
- callback {pars->Pstretch=(int)o->value();}
- tooltip {LFO stretch} xywh {144 30 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- class WidgetPDial
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(pars);} selected
- xywh {145 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(pars,this);} selected
- xywh {162 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 7
- }
- }
- }
- }
- Function {refresh()} {} {
- code {freq->value(pars->Pfreq);
-intensity->value(pars->Pintensity);
-startphase->value(pars->Pstartphase);
-delay->value(pars->Pdelay);
-continous->value(pars->Pcontinous);
-stretch->value(pars->Pstretch);
-randomness->value(pars->Prandomness);
-freqrand->value(pars->Pfreqrand);
-LFOtype->value(pars->PLFOtype);} {}
- }
- Function {init(LFOParams *lfopars_)} {} {
- code {pars=lfopars_;
-
-make_window();
-end();
-
-refresh();
-
-lfoui->resize(this->x(),this->y(),this->w(),this->h());
-
-lfoparamswindow->label(this->label());} {}
- }
- decl {LFOParams *pars;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/LFOUI.h b/plugins/zynaddsubfx/src/UI/LFOUI.h
deleted file mode 100644
index 6959fe3..0000000
--- a/plugins/zynaddsubfx/src/UI/LFOUI.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef LFOUI_h
-#define LFOUI_h
-#include <FL/Fl.H>
-#include "WidgetPDial.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "../globals.h"
-#include <FL/Fl_Group.H>
-#include "../Params/LFOParams.h"
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
-#include "PresetsUI.h"
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Button.H>
-
-class LFOUI : public Fl_Group, PresetsUI_ {
-public:
- LFOUI(int x,int y, int w, int h, const char *label=0);
- ~LFOUI();
- Fl_Group* make_window();
- Fl_Group *lfoui;
- Fl_Group *lfoparamswindow;
- WidgetPDial *freq;
-private:
- void cb_freq_i(WidgetPDial*, void*);
- static void cb_freq(WidgetPDial*, void*);
-public:
- WidgetPDial *intensity;
-private:
- void cb_intensity_i(WidgetPDial*, void*);
- static void cb_intensity(WidgetPDial*, void*);
-public:
- WidgetPDial *delay;
-private:
- void cb_delay_i(WidgetPDial*, void*);
- static void cb_delay(WidgetPDial*, void*);
-public:
- WidgetPDial *startphase;
-private:
- void cb_startphase_i(WidgetPDial*, void*);
- static void cb_startphase(WidgetPDial*, void*);
-public:
- WidgetPDial *randomness;
-private:
- void cb_randomness_i(WidgetPDial*, void*);
- static void cb_randomness(WidgetPDial*, void*);
-public:
- Fl_Choice *LFOtype;
-private:
- void cb_LFOtype_i(Fl_Choice*, void*);
- static void cb_LFOtype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_LFOtype[];
-public:
- Fl_Check_Button *continous;
-private:
- void cb_continous_i(Fl_Check_Button*, void*);
- static void cb_continous(Fl_Check_Button*, void*);
-public:
- WidgetPDial *freqrand;
-private:
- void cb_freqrand_i(WidgetPDial*, void*);
- static void cb_freqrand(WidgetPDial*, void*);
-public:
- WidgetPDial *stretch;
-private:
- void cb_stretch_i(WidgetPDial*, void*);
- static void cb_stretch(WidgetPDial*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- void refresh();
- void init(LFOParams *lfopars_);
-private:
- LFOParams *pars;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/MasterUI.cc b/plugins/zynaddsubfx/src/UI/MasterUI.cc
deleted file mode 100644
index 9660884..0000000
--- a/plugins/zynaddsubfx/src/UI/MasterUI.cc
+++ /dev/null
@@ -1,2504 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "MasterUI.h"
-//Copyright (c) 2002-2009 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-VUMeter::VUMeter(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- master=NULL;
- npart=-1;
-}
-
-void VUMeter::init(Master *master_,int part_) {
- //the "part_" parameters sets the part (if it is >=0), else it sets the master
- master=master_;
- label(NULL);
- npart=part_;
- olddbl=0.0;
- olddbr=0.0;
- oldrmsdbl=0.0;
- oldrmsdbr=0.0;
-}
-
-void VUMeter::draw_master() {
- #define MIN_DB (-48)
-
- int ox=x(); int oy=y(); int lx=w(); int ly=h();
-
- pthread_mutex_lock(&master->mutex);
- REALTYPE dbl=rap2dB(master->vuoutpeakl);
- REALTYPE dbr=rap2dB(master->vuoutpeakr);
- REALTYPE rmsdbl=rap2dB(master->vurmspeakl);
- REALTYPE rmsdbr=rap2dB(master->vurmspeakr);
- REALTYPE maxdbl=rap2dB(master->vumaxoutpeakl);
- REALTYPE maxdbr=rap2dB(master->vumaxoutpeakr);
- int clipped=master->vuclipped;
- pthread_mutex_unlock(&master->mutex);
-
- dbl=(MIN_DB-dbl)/MIN_DB;
- if (dbl<0.0) dbl=0.0;
- else if (dbl>1.0)dbl=1.0;
-
- dbr=(MIN_DB-dbr)/MIN_DB;
- if (dbr<0.0) dbr=0.0;
- else if (dbr>1.0) dbr=1.0;
-
- dbl=dbl*0.4+olddbl*0.6;
- dbr=dbr*0.4+olddbr*0.6;
-
- olddbl=dbl;
- olddbr=dbr;
-
- #define VULENX (lx-35)
- #define VULENY (ly/2-3)
-
- dbl*=VULENX;dbr*=VULENX;
-
- int idbl=(int) dbl;
- int idbr=(int) dbr;
-
- //compute RMS - start
- rmsdbl=(MIN_DB-rmsdbl)/MIN_DB;
- if (rmsdbl<0.0) rmsdbl=0.0;
- else if (rmsdbl>1.0) rmsdbl=1.0;
-
- rmsdbr=(MIN_DB-rmsdbr)/MIN_DB;
- if (rmsdbr<0.0) rmsdbr=0.0;
- else if (rmsdbr>1.0) rmsdbr=1.0;
-
- rmsdbl=rmsdbl*0.4+oldrmsdbl*0.6;
- rmsdbr=rmsdbr*0.4+oldrmsdbr*0.6;
-
- oldrmsdbl=rmsdbl;
- oldrmsdbr=rmsdbr;
-
-
- rmsdbl*=VULENX;rmsdbr*=VULENX;
-
- int irmsdbl=(int) rmsdbl;
- int irmsdbr=(int) rmsdbr;
- //compute RMS - end
-
-
-
- //draw the vu-meter lines
- //db
- fl_rectf(ox,oy,idbr,VULENY,0,200,255);
- fl_rectf(ox,oy+ly/2,idbl,VULENY,0,200,255);
- //black
- fl_rectf(ox+idbr,oy,VULENX-idbr,VULENY,0,0,0);
- fl_rectf(ox+idbl,oy+ly/2,VULENX-idbl,VULENY,0,0,0);
-
- //draw the scales
- REALTYPE tmp=VULENX*1.0/MIN_DB;
- for (int i=1;i<1-MIN_DB;i++){
- int tx=VULENX+(int) (tmp*i);
- fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,160,200);
- if (i%5==0) fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,230,240);
- if (i%10==0) fl_rectf(ox+tx-1,oy,2,VULENY+ly/2,0,225,255);
- };
-
- //rms
- if (irmsdbr>2) fl_rectf(ox+irmsdbr-1,oy,3,VULENY,255,255,0);
- if (irmsdbl>2) fl_rectf(ox+irmsdbl-1,oy+ly/2,3,VULENY,255,255,0);
-
-
- //draw the red box if clipping has occured
- if (clipped==0) fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,0,0,10);
- else fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,250,10,10);
-
- //draw the maxdB
- fl_font(FL_HELVETICA|FL_BOLD,10);
- fl_color(255,255,255);
- char tmpstr[10];
- if ((maxdbl>MIN_DB-20)){
- snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbr);
- fl_draw(tmpstr,ox+VULENX+1,oy+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
- };
- if ((maxdbr>MIN_DB-20)){
- snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbl);
- fl_draw(tmpstr,ox+VULENX+1,oy+ly/2+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
- };
-}
-
-void VUMeter::draw_part() {
- #define MIN_DB (-48)
- int ox=x(); int oy=y(); int lx=w(); int ly=h();
-
- if (!active_r()){
- pthread_mutex_lock(&master->mutex);
- int fakedb=master->fakepeakpart[npart];
- pthread_mutex_unlock(&master->mutex);
- fl_rectf(ox,oy,lx,ly,140,140,140);
- if (fakedb>0){
- fakedb=(int)(fakedb/255.0*ly)+4;
- fl_rectf(ox+2,oy+ly-fakedb,lx-4,fakedb,0,0,0);
- };
-
- return;
- };
-
- //draw the vu lines
- pthread_mutex_lock(&master->mutex);
- REALTYPE db=rap2dB(master->vuoutpeakpart[npart]);
- pthread_mutex_unlock(&master->mutex);
-
- db=(MIN_DB-db)/MIN_DB;
- if (db<0.0) db=0.0;
- else if (db>1.0) db=1.0;
-
- db*=ly-2;
-
- int idb=(int) db;
-
- fl_rectf(ox,oy+ly-idb,lx,idb,0,200,255);
- fl_rectf(ox,oy,lx,ly-idb,0,0,0);
-
-
- //draw the scales
- REALTYPE tmp=ly*1.0/MIN_DB;
- for (int i=1;i<1-MIN_DB;i++){
- int ty=ly+(int) (tmp*i);
- if (i%5==0) fl_rectf(ox,oy+ly-ty,lx,1,0,160,200);
- if (i%10==0) fl_rectf(ox,oy+ly-ty,lx,1,0,230,240);
- };
-}
-
-void VUMeter::draw() {
- if (npart>=0) draw_part();
- else draw_master();
-}
-
-void VUMeter::tickdraw(VUMeter *o) {
- o->redraw();
-}
-
-void VUMeter::tick(void *v) {
- tickdraw((VUMeter *) v);
- Fl::add_timeout(1.0/25.0,tick,v);//25 fps
-}
-
-int VUMeter::handle(int event) {
- switch(event){
- case FL_SHOW:
- tick(this);
- break;
- case FL_HIDE:
- Fl::remove_timeout(tick,this);
- break;
- case FL_PUSH:
- if (npart>=0) break;
- pthread_mutex_lock(&master->mutex);
- master->vuresetpeaks();
- pthread_mutex_unlock(&master->mutex);
- break;
- };
- return(1);
-}
-
-SysEffSend::SysEffSend(int x,int y, int w, int h, const char *label):WidgetPDial(x,y,w,h,label) {
- master=NULL;
- neff1=0;
- neff2=0;
-}
-
-void SysEffSend::init(Master *master_,int neff1_,int neff2_) {
- neff1=neff1_;
- neff2=neff2_;
- master=master_;
- minimum(0);
- maximum(127);
- step(1);
- labelfont(1);
- labelsize(10);
- align(FL_ALIGN_TOP);
-
- value(master->Psysefxsend[neff1][neff2]);
- char tmp[20];snprintf(tmp,20,"%d->%d",neff1+1,neff2+1);
- this->copy_label(tmp);
-}
-
-SysEffSend::~SysEffSend() {
- hide();
-}
-
-int SysEffSend::handle(int event) {
- if ((event==FL_PUSH) || (event==FL_DRAG)){
- master->setPsysefxsend(neff1,neff2,(int) value());
- };
-
- return(WidgetPDial::handle(event));
-}
-
-void Panellistitem::cb_partname_i(Fl_Button*, void*) {
- if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
-};
-bankui->show();
-}
-void Panellistitem::cb_partname(Fl_Button* o, void* v) {
- ((Panellistitem*)(o->parent()->parent()->user_data()))->cb_partname_i(o,v);
-}
-
-void Panellistitem::cb_partvolume_i(Fl_Slider* o, void*) {
- master->part[npart]->setPvolume((int) o->value());
-}
-void Panellistitem::cb_partvolume(Fl_Slider* o, void* v) {
- ((Panellistitem*)(o->parent()->parent()->user_data()))->cb_partvolume_i(o,v);
-}
-
-void Panellistitem::cb_partpanning_i(WidgetPDial* o, void*) {
- master->part[npart]->setPpanning((int) o->value());
-}
-void Panellistitem::cb_partpanning(WidgetPDial* o, void* v) {
- ((Panellistitem*)(o->parent()->parent()->user_data()))->cb_partpanning_i(o,v);
-}
-
-void Panellistitem::cb_edit_i(Fl_Button*, void*) {
- if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
-};
-}
-void Panellistitem::cb_edit(Fl_Button* o, void* v) {
- ((Panellistitem*)(o->parent()->parent()->user_data()))->cb_edit_i(o,v);
-}
-
-void Panellistitem::cb_partrcv_i(Fl_Choice* o, void*) {
- master->part[npart]->Prcvchn=(int) o->value();
-}
-void Panellistitem::cb_partrcv(Fl_Choice* o, void* v) {
- ((Panellistitem*)(o->parent()->parent()->user_data()))->cb_partrcv_i(o,v);
-}
-
-void Panellistitem::cb_partenabled_i(Fl_Check_Button* o, void*) {
- pthread_mutex_lock(&master->mutex);
- master->partonoff(npart,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-
-if ((int) o->value()==0) panellistitemgroup->deactivate();
- else {
- panellistitemgroup->activate();
- if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
- };
-};
-
-o->redraw();
-}
-void Panellistitem::cb_partenabled(Fl_Check_Button* o, void* v) {
- ((Panellistitem*)(o->parent()->user_data()))->cb_partenabled_i(o,v);
-}
-
-Fl_Group* Panellistitem::make_window() {
- { panellistitem = new Fl_Group(0, 0, 70, 260);
- panellistitem->box(FL_FLAT_BOX);
- panellistitem->color(FL_BACKGROUND_COLOR);
- panellistitem->selection_color(FL_BACKGROUND_COLOR);
- panellistitem->labeltype(FL_NO_LABEL);
- panellistitem->labelfont(0);
- panellistitem->labelsize(14);
- panellistitem->labelcolor(FL_FOREGROUND_COLOR);
- panellistitem->user_data((void*)(this));
- panellistitem->align(Fl_Align(FL_ALIGN_TOP));
- panellistitem->when(FL_WHEN_RELEASE);
- { Fl_Group* o = panellistitemgroup = new Fl_Group(0, 20, 70, 240);
- panellistitemgroup->box(FL_PLASTIC_THIN_UP_BOX);
- { Fl_Group* o = new Fl_Group(45, 65, 15, 110);
- o->box(FL_ENGRAVED_FRAME);
- { VUMeter* o = new VUMeter(45, 65, 15, 110, "V U");
- o->box(FL_FLAT_BOX);
- o->color(FL_FOREGROUND_COLOR);
- o->selection_color((Fl_Color)75);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(14);
- o->labelcolor((Fl_Color)55);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- o->when(FL_WHEN_RELEASE);
- o->init(master,npart);
- } // VUMeter* o
- o->end();
- } // Fl_Group* o
- { partname = new Fl_Button(5, 27, 60, 30, " ");
- partname->box(FL_THIN_DOWN_BOX);
- partname->down_box(FL_FLAT_BOX);
- partname->labelfont(1);
- partname->labelsize(10);
- partname->callback((Fl_Callback*)cb_partname);
- partname->align(Fl_Align(192|FL_ALIGN_INSIDE));
- } // Fl_Button* partname
- { Fl_Slider* o = partvolume = new Fl_Slider(10, 65, 30, 110);
- partvolume->type(4);
- partvolume->box(FL_FLAT_BOX);
- partvolume->minimum(127);
- partvolume->maximum(0);
- partvolume->step(1);
- partvolume->value(127);
- partvolume->callback((Fl_Callback*)cb_partvolume);
- o->value(master->part[npart]->Pvolume);
- } // Fl_Slider* partvolume
- { WidgetPDial* o = partpanning = new WidgetPDial(20, 180, 30, 30);
- partpanning->box(FL_OVAL_BOX);
- partpanning->color(FL_BACKGROUND_COLOR);
- partpanning->selection_color(FL_INACTIVE_COLOR);
- partpanning->labeltype(FL_NORMAL_LABEL);
- partpanning->labelfont(0);
- partpanning->labelsize(14);
- partpanning->labelcolor(FL_FOREGROUND_COLOR);
- partpanning->maximum(127);
- partpanning->step(1);
- partpanning->callback((Fl_Callback*)cb_partpanning);
- partpanning->align(Fl_Align(FL_ALIGN_BOTTOM));
- partpanning->when(FL_WHEN_CHANGED);
- o->value(master->part[npart]->Ppanning);
- } // WidgetPDial* partpanning
- { Fl_Button* o = new Fl_Button(15, 235, 40, 20, "edit");
- o->box(FL_PLASTIC_UP_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_edit);
- } // Fl_Button* o
- { Fl_Choice* o = partrcv = new Fl_Choice(10, 213, 50, 15);
- partrcv->tooltip("receive from Midi channel");
- partrcv->down_box(FL_BORDER_BOX);
- partrcv->labelsize(10);
- partrcv->textfont(1);
- partrcv->textsize(10);
- partrcv->callback((Fl_Callback*)cb_partrcv);
- partrcv->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Ch%d",i+1);if (i!=9) o->add(nrstr); else o->add("Dr10");};
- o->value(master->part[npart]->Prcvchn);
- } // Fl_Choice* partrcv
- if (master->part[npart]->Penabled==0) o->deactivate();
- panellistitemgroup->end();
- } // Fl_Group* panellistitemgroup
- { Fl_Check_Button* o = partenabled = new Fl_Check_Button(5, 0, 45, 20, "01");
- partenabled->down_box(FL_DOWN_BOX);
- partenabled->labeltype(FL_EMBOSSED_LABEL);
- partenabled->labelfont(1);
- partenabled->labelsize(13);
- partenabled->callback((Fl_Callback*)cb_partenabled);
- partenabled->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
- char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);
- o->value(master->part[npart]->Penabled);
- } // Fl_Check_Button* partenabled
- panellistitem->end();
- } // Fl_Group* panellistitem
- return panellistitem;
-}
-
-Panellistitem::Panellistitem(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- npart=0;
- master=NULL;
- bankui=NULL;
-}
-
-void Panellistitem::init(Master *master_, int npart_,BankUI *bankui_) {
- npart=npart_;
- master=master_;
- bankui=bankui_;
-
- make_window();
- panellistitem->show();
- end();
-}
-
-void Panellistitem::refresh() {
- partenabled->value(master->part[npart]->Penabled);
- if (master->part[npart]->Penabled!=0) panellistitemgroup->activate();
- else panellistitemgroup->deactivate();
-
- partvolume->value(master->part[npart]->Pvolume);
- partpanning->value(master->part[npart]->Ppanning);
- partrcv->value(master->part[npart]->Prcvchn);
-
- partname->label((char *)master->part[npart]->Pname);
-
- if ((int)bankui->cbwig->value()!=(npart+1))
- panellistitemgroup->color(fl_rgb_color(160,160,160));
- else
- panellistitemgroup->color(fl_rgb_color(50,190,240));
-
- panellistitemgroup->redraw();
-}
-
-Panellistitem::~Panellistitem() {
- panellistitem->hide();
- //delete(panellistitem);
-}
-
-void MasterUI::cb_masterwindow_i(Fl_Double_Window*, void*) {
- #ifdef VSTAUDIOOUT
-fl_alert("ZynAddSubFX could not be closed this way, because it's a VST plugin. Please use the host aplication to close it.");
-#else
-//if (fl_choice("Exit and leave the unsaved data?","No","Yes",NULL)) {
- config.save();
- *exitprogram=1;
-//};
-#endif
-}
-void MasterUI::cb_masterwindow(Fl_Double_Window* o, void* v) {
- ((MasterUI*)(o->user_data()))->cb_masterwindow_i(o,v);
-}
-
-void MasterUI::cb_New_i(Fl_Menu_*, void*) {
- do_new_master();
-}
-void MasterUI::cb_New(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_New_i(o,v);
-}
-
-void MasterUI::cb_Open_i(Fl_Menu_*, void*) {
- do_load_master();
-}
-void MasterUI::cb_Open(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Open_i(o,v);
-}
-
-void MasterUI::cb_Save_i(Fl_Menu_*, void*) {
- do_save_master();
-}
-void MasterUI::cb_Save(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Save_i(o,v);
-}
-
-void MasterUI::cb_Load_i(Fl_Menu_*, void*) {
- char *filename;
-filename=fl_file_chooser("Open:","({*.xsz})",NULL,0);
-if (filename==NULL) return;
-
-pthread_mutex_lock(&master->mutex);
- //clear all parameters
- master->microtonal.defaults();
-
- //load the data
- int result=master->microtonal.loadXML(filename);
-pthread_mutex_unlock(&master->mutex);
-
-
- delete microtonalui;
- microtonalui=new MicrotonalUI(&master->microtonal);
-
-if (result==-10) fl_alert("Error: Could not load the file\nbecause it is not a scale file.");
- else if (result<0) fl_alert("Error: Could not load the file.");
-}
-void MasterUI::cb_Load(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Load_i(o,v);
-}
-
-void MasterUI::cb_Save1_i(Fl_Menu_*, void*) {
- char *filename;
-int result=0;
-
-filename=fl_file_chooser("Save:","({*.xsz})",NULL,0);
-if (filename==NULL) return;
-filename=fl_filename_setext(filename,".xsz");
-
-result=fileexists(filename);
-if (result) {
- result=0;
- if (!fl_choice("The file exists. \nOverwrite it?","No","Yes",NULL)) return;
-
-};
-
-
-pthread_mutex_lock(&master->mutex);
-result=master->microtonal.saveXML(filename);
-pthread_mutex_unlock(&master->mutex);
-
-if (result<0) fl_alert("Error: Could not save the file.");
-
-
-updatepanel();
-}
-void MasterUI::cb_Save1(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Save1_i(o,v);
-}
-
-void MasterUI::cb_Show_i(Fl_Menu_*, void*) {
- microtonalui->show();
-}
-void MasterUI::cb_Show(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Show_i(o,v);
-}
-
-void MasterUI::cb_Settings_i(Fl_Menu_*, void*) {
- configui->show();
-}
-void MasterUI::cb_Settings(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Settings_i(o,v);
-}
-
-void MasterUI::cb_Copyright_i(Fl_Menu_*, void*) {
- aboutwindow->show();
-}
-void MasterUI::cb_Copyright(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Copyright_i(o,v);
-}
-
-void MasterUI::cb_E_i(Fl_Menu_*, void*) {
- masterwindow->do_callback();
-}
-void MasterUI::cb_E(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_E_i(o,v);
-}
-
-void MasterUI::cb_Clear_i(Fl_Menu_*, void*) {
- if (fl_choice("Clear instrument's parameters ?","No","Yes",NULL)){
-// int npart=(int)npartcounter->value()-1;
- pthread_mutex_lock(&master->mutex);
- master->part[npart]->defaultsinstrument();
- pthread_mutex_unlock(&master->mutex);
-
- npartcounter->do_callback();
-};
-
-updatepanel();
-}
-void MasterUI::cb_Clear(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Clear_i(o,v);
-}
-
-void MasterUI::cb_Open1_i(Fl_Menu_*, void*) {
- const char *filename;
-filename=fl_file_chooser("Load:","({*.xiz})",NULL,0);
-if (filename==NULL) return;
-
-
-pthread_mutex_lock(&master->mutex);
-// int npart=(int)npartcounter->value()-1;
-
- //clear all instrument parameters, first
- master->part[npart]->defaultsinstrument();
-
- //load the instr. parameters
- int result=master->part[npart]->loadXMLinstrument(filename);
-
-pthread_mutex_unlock(&master->mutex);
-master->part[npart]->applyparameters();
-
-npartcounter->do_callback();
-updatepanel();
-
-if (result==-10) fl_alert("Error: Could not load the file\nbecause it is not an instrument file.");
- else if (result<0) fl_alert("Error: Could not load the file.");
-}
-void MasterUI::cb_Open1(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Open1_i(o,v);
-}
-
-void MasterUI::cb_Save2_i(Fl_Menu_*, void*) {
- char *filename;
-
-filename=fl_file_chooser("Save:","({*.xiz})",NULL,0);
-if (filename==NULL) return;
-filename=fl_filename_setext(filename,".xiz");
-
-int result=fileexists(filename);
-if (result) {
- result=0;
- if (!fl_choice("The file exists. \nOverwrite it?","No","Yes",NULL)) return;
-
-};
-
-
-pthread_mutex_lock(&master->mutex);
-result=master->part[npart]->saveXML(filename);
-pthread_mutex_unlock(&master->mutex);
-
-if (result<0) fl_alert("Error: Could not save the file.");
-
-updatepanel();
-}
-void MasterUI::cb_Save2(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Save2_i(o,v);
-}
-
-void MasterUI::cb_Show1_i(Fl_Menu_*, void*) {
- bankui->show();
-}
-void MasterUI::cb_Show1(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Show1_i(o,v);
-}
-
-void MasterUI::cb_Virtual_i(Fl_Menu_*, void*) {
- virkeyboard->show();
-}
-void MasterUI::cb_Virtual(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Virtual_i(o,v);
-}
-
-void MasterUI::cb_Choose_i(Fl_Menu_*, void*) {
- char *filename;
-recordbutton->deactivate();
-pausebutton->deactivate();
-pauselabel->deactivate();
-stopbutton->deactivate();
-filename=fl_file_chooser("Record to audio file:","(*.wav)",NULL,0);
-if (filename==NULL) return;
-fl_filename_setext(filename,".wav");
-
-int result=master->HDDRecorder.preparefile(filename,0);
-if (result==1) {
- result=0;
- if (fl_choice("The file exists. \nOverwrite it?","No","Yes",NULL))
- master->HDDRecorder.preparefile(filename,1);
-};
-if (result==0) recordbutton->activate();
-
-if (result!=0) fl_alert("Error: Could not save the file.");
-}
-void MasterUI::cb_Choose(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Choose_i(o,v);
-}
-
-void MasterUI::cb_Show2_i(Fl_Menu_*, void*) {
- sequi->show();
-}
-void MasterUI::cb_Show2(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Show2_i(o,v);
-}
-
-void MasterUI::cb_Switch_i(Fl_Menu_*, void*) {
- if (fl_choice("Switch the User Interface to Beginner mode ?","No","Yes",NULL)){
- masterwindow->hide();
- refresh_master_ui();
- simplemasterwindow->show();
- config.cfg.UserInterfaceMode=2;
-};
-}
-void MasterUI::cb_Switch(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Switch_i(o,v);
-}
-
-Fl_Menu_Item MasterUI::menu_mastermenu[] = {
- {"&File", 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
- {"&New (erase all)...", 0, (Fl_Callback*)MasterUI::cb_New, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Open Parameters...", 0, (Fl_Callback*)MasterUI::cb_Open, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Save All Parameters...", 0, (Fl_Callback*)MasterUI::cb_Save, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Load Scale Settings...", 0, (Fl_Callback*)MasterUI::cb_Load, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"Save Sc&ale Settings ..", 0, (Fl_Callback*)MasterUI::cb_Save1, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"Show Scale Settings...", 0, (Fl_Callback*)MasterUI::cb_Show, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Settings...", 0, (Fl_Callback*)MasterUI::cb_Settings, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Copyright...", 0, (Fl_Callback*)MasterUI::cb_Copyright, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"E&xit", 0, (Fl_Callback*)MasterUI::cb_E, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0},
- {"&Instrument", 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Clear Instrument...", 0, (Fl_Callback*)MasterUI::cb_Clear, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Open Instrument...", 0, (Fl_Callback*)MasterUI::cb_Open1, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Save Instrument ...", 0, (Fl_Callback*)MasterUI::cb_Save2, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"Show Instrument &Bank...", 0, (Fl_Callback*)MasterUI::cb_Show1, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Virtual Keyboard...", 0, (Fl_Callback*)MasterUI::cb_Virtual, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0},
- {"&Record", 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Choose WAV file...", 0, (Fl_Callback*)MasterUI::cb_Choose, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0},
- {"&Sequencer", 0, 0, 0, 80, FL_NORMAL_LABEL, 0, 14, 0},
- {"Show &Sequencer...", 0, (Fl_Callback*)MasterUI::cb_Show2, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0},
- {"Misc", 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
- {"Switch User Interface Mode", 0, (Fl_Callback*)MasterUI::cb_Switch, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0}
-};
-Fl_Menu_Item* MasterUI::recordmenu = MasterUI::menu_mastermenu + 18;
-
-void MasterUI::cb_mastervolumedial_i(WidgetPDial* o, void*) {
- master->setPvolume((int) o->value());
-}
-void MasterUI::cb_mastervolumedial(WidgetPDial* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_mastervolumedial_i(o,v);
-}
-
-void MasterUI::cb_masterkeyshiftcounter_i(Fl_Counter* o, void*) {
- master->setPkeyshift((int) o->value()+64);
-}
-void MasterUI::cb_masterkeyshiftcounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_masterkeyshiftcounter_i(o,v);
-}
-
-void MasterUI::cb_Panic_i(Fl_Button*, void*) {
- virkeyboard->relaseallkeys();
-pthread_mutex_lock(&master->mutex);
-master->shutup=1;
-pthread_mutex_unlock(&master->mutex);
-}
-void MasterUI::cb_Panic(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Panic_i(o,v);
-}
-
-void MasterUI::cb_syseffnocounter_i(Fl_Counter* o, void*) {
- nsyseff=(int) o->value()-1;
-sysefftype->value(master->sysefx[nsyseff]->geteffect());
-syseffectui->refresh(master->sysefx[nsyseff]);
-}
-void MasterUI::cb_syseffnocounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_syseffnocounter_i(o,v);
-}
-
-void MasterUI::cb_sysefftype_i(Fl_Choice* o, void*) {
- pthread_mutex_lock(&master->mutex);
-master->sysefx[nsyseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(&master->mutex);
-syseffectui->refresh(master->sysefx[nsyseff]);
-}
-void MasterUI::cb_sysefftype(Fl_Choice* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_sysefftype_i(o,v);
-}
-
-Fl_Menu_Item MasterUI::menu_sysefftype[] = {
- {"No Effect", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Reverb", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Chorus", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Phaser", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"AlienWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Distortion", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"EQ", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"DynFilter", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void MasterUI::cb_Send_i(Fl_Button*, void*) {
- syseffsendwindow->show();
-}
-void MasterUI::cb_Send(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_Send_i(o,v);
-}
-
-void MasterUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(master->sysefx[nsyseff]);
-}
-void MasterUI::cb_C(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void MasterUI::cb_P_i(Fl_Button*, void*) {
- pthread_mutex_lock(&master->mutex);
-presetsui->paste(master->sysefx[nsyseff],syseffectui);
-pthread_mutex_unlock(&master->mutex);
-}
-void MasterUI::cb_P(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_P_i(o,v);
-}
-
-void MasterUI::cb_inseffnocounter_i(Fl_Counter* o, void*) {
- ninseff=(int) o->value()-1;
-insefftype->value(master->insefx[ninseff]->geteffect());
-inseffpart->value(master->Pinsparts[ninseff]+2);
-inseffectui->refresh(master->insefx[ninseff]);
-
-if (master->Pinsparts[ninseff]!=-1) {
- insefftype->activate();
- inseffectui->activate();
- inseffectuigroup->activate();
-} else {
- insefftype->deactivate();
- inseffectui->deactivate();
- inseffectuigroup->deactivate();
-};
-}
-void MasterUI::cb_inseffnocounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_inseffnocounter_i(o,v);
-}
-
-void MasterUI::cb_insefftype_i(Fl_Choice* o, void*) {
- pthread_mutex_lock(&master->mutex);
-master->insefx[ninseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(&master->mutex);
-inseffectui->refresh(master->insefx[ninseff]);
-inseffectui->show();
-}
-void MasterUI::cb_insefftype(Fl_Choice* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_insefftype_i(o,v);
-}
-
-Fl_Menu_Item MasterUI::menu_insefftype[] = {
- {"No Effect", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Reverb", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Chorus", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Phaser", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"AlienWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Distortion", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"EQ", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"DynFilter", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void MasterUI::cb_inseffpart_i(Fl_Choice* o, void*) {
- master->Pinsparts[ninseff]=(int) o->value()-2;
-if ((int) o->value()==1){
- inseffectuigroup->deactivate();
- insefftype->deactivate();
- inseffectui->deactivate();
-} else {
- inseffectuigroup->activate();
- insefftype->activate();
- inseffectui->activate();
-};
-master->insefx[ninseff]->cleanup();
-}
-void MasterUI::cb_inseffpart(Fl_Choice* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_inseffpart_i(o,v);
-}
-
-void MasterUI::cb_C1_i(Fl_Button*, void*) {
- presetsui->copy(master->insefx[ninseff]);
-}
-void MasterUI::cb_C1(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_C1_i(o,v);
-}
-
-void MasterUI::cb_P1_i(Fl_Button*, void*) {
- pthread_mutex_lock(&master->mutex);
-presetsui->paste(master->insefx[ninseff],inseffectui);
-pthread_mutex_unlock(&master->mutex);
-}
-void MasterUI::cb_P1(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->user_data()))->cb_P1_i(o,v);
-}
-
-void MasterUI::cb_Scales_i(Fl_Button*, void*) {
- microtonalui->show();
-}
-void MasterUI::cb_Scales(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Scales_i(o,v);
-}
-
-void MasterUI::cb_recordbutton_i(Fl_Button* o, void*) {
- o->deactivate();
-recordmenu->deactivate();
-recordmenu->label("&Record(*)");
-stopbutton->activate();
-pausebutton->activate();
-pauselabel->activate();
-master->HDDRecorder.start();
-master->vuresetpeaks();
-mastermenu->redraw();
-}
-void MasterUI::cb_recordbutton(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_recordbutton_i(o,v);
-}
-
-void MasterUI::cb_stopbutton_i(Fl_Button* o, void*) {
- o->deactivate();
-master->HDDRecorder.stop();
-recordbutton->deactivate();
-pausebutton->deactivate();
-pauselabel->deactivate();
-recordmenu->activate();
-recordmenu->label("&Record");
-mastermenu->redraw();
-}
-void MasterUI::cb_stopbutton(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_stopbutton_i(o,v);
-}
-
-void MasterUI::cb_pausebutton_i(Fl_Button* o, void*) {
- o->deactivate();
-master->HDDRecorder.pause();
-recordbutton->activate();
-mastermenu->redraw();
-}
-void MasterUI::cb_pausebutton(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_pausebutton_i(o,v);
-}
-
-void MasterUI::cb_nrpnbutton_i(Fl_Check_Button* o, void*) {
- master->ctl.NRPN.receive=(int) o->value();
-}
-void MasterUI::cb_nrpnbutton(Fl_Check_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_nrpnbutton_i(o,v);
-}
-
-void MasterUI::cb_npartcounter_i(Fl_Counter* o, void*) {
- int nval=(int) o->value()-1;
-partuigroup->remove(partui);
-delete partui;
-partui=new PartUI(0,0,765,525);
-partuigroup->add(partui);
-partui->init(master->part[nval],master,nval,bankui);
-partui->redraw();
-o->redraw();
-npart=nval;
-
-updatepanel();
-simplenpartcounter->value(nval+1);
-simplenpartcounter->do_callback();
-}
-void MasterUI::cb_npartcounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_npartcounter_i(o,v);
-}
-
-void MasterUI::cb_vK_i(Fl_Button*, void*) {
- virkeyboard->show();
-}
-void MasterUI::cb_vK(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_vK_i(o,v);
-}
-
-void MasterUI::cb_R_i(Fl_Button*, void*) {
- globalfinedetuneslider->value(64.0);
-globalfinedetuneslider->do_callback();
-}
-void MasterUI::cb_R(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_R_i(o,v);
-}
-
-void MasterUI::cb_globalfinedetuneslider_i(WidgetPDial* o, void*) {
- master->microtonal.Pglobalfinedetune=(int) o->value();
-}
-void MasterUI::cb_globalfinedetuneslider(WidgetPDial* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_globalfinedetuneslider_i(o,v);
-}
-
-void MasterUI::cb_Panel_i(Fl_Button*, void*) {
- updatepanel();
-panelwindow->show();
-}
-void MasterUI::cb_Panel(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Panel_i(o,v);
-}
-
-void MasterUI::cb_Close_i(Fl_Button*, void*) {
- aboutwindow->hide();
-}
-void MasterUI::cb_Close(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void MasterUI::cb_Close1_i(Fl_Button*, void*) {
- syseffsendwindow->hide();
-}
-void MasterUI::cb_Close1(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Close1_i(o,v);
-}
-
-void MasterUI::cb_Close2_i(Fl_Button*, void*) {
- panelwindow->hide();
-updatepanel();
-}
-void MasterUI::cb_Close2(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Close2_i(o,v);
-}
-
-void MasterUI::cb_Refresh_i(Fl_Button*, void*) {
- updatepanel();
-}
-void MasterUI::cb_Refresh(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Refresh_i(o,v);
-}
-
-void MasterUI::cb_simplemasterwindow_i(Fl_Double_Window*, void*) {
- #ifdef VSTAUDIOOUT
-fl_alert("ZynAddSubFX could not be closed this way, because it's a VST plugin. Please use the host aplication to close it.");
-#else
-//if (fl_choice("Exit and leave the unsaved data?","No","Yes",NULL)) {
- config.save();
- *exitprogram=1;
-//};
-#endif
-}
-void MasterUI::cb_simplemasterwindow(Fl_Double_Window* o, void* v) {
- ((MasterUI*)(o->user_data()))->cb_simplemasterwindow_i(o,v);
-}
-
-void MasterUI::cb_New1_i(Fl_Menu_*, void*) {
- do_new_master();
-}
-void MasterUI::cb_New1(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_New1_i(o,v);
-}
-
-void MasterUI::cb_Open2_i(Fl_Menu_*, void*) {
- do_load_master();
-}
-void MasterUI::cb_Open2(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Open2_i(o,v);
-}
-
-void MasterUI::cb_Save3_i(Fl_Menu_*, void*) {
- do_save_master();
-}
-void MasterUI::cb_Save3(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Save3_i(o,v);
-}
-
-void MasterUI::cb_Settings1_i(Fl_Menu_*, void*) {
- configui->show();
-}
-void MasterUI::cb_Settings1(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Settings1_i(o,v);
-}
-
-void MasterUI::cb_Copyright1_i(Fl_Menu_*, void*) {
- aboutwindow->show();
-}
-void MasterUI::cb_Copyright1(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Copyright1_i(o,v);
-}
-
-void MasterUI::cb_E1_i(Fl_Menu_*, void*) {
- masterwindow->do_callback();
-}
-void MasterUI::cb_E1(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_E1_i(o,v);
-}
-
-void MasterUI::cb_Open3_i(Fl_Menu_*, void*) {
- const char *filename;
-filename=fl_file_chooser("Load:","({*.xiz})",NULL,0);
-if (filename==NULL) return;
-
-
-pthread_mutex_lock(&master->mutex);
-// int npart=(int)npartcounter->value()-1;
-
- //clear all instrument parameters, first
- master->part[npart]->defaultsinstrument();
-
- //load the instr. parameters
- int result=master->part[npart]->loadXMLinstrument(filename);
-
-pthread_mutex_unlock(&master->mutex);
-master->part[npart]->applyparameters();
-
-simplenpartcounter->do_callback();
-
-if (result==-10) fl_alert("Error: Could not load the file\nbecause it is not an instrument file.");
- else if (result<0) fl_alert("Error: Could not load the file.");
-}
-void MasterUI::cb_Open3(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Open3_i(o,v);
-}
-
-void MasterUI::cb_Show3_i(Fl_Menu_*, void*) {
- bankui->show();
-}
-void MasterUI::cb_Show3(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Show3_i(o,v);
-}
-
-void MasterUI::cb_Switch1_i(Fl_Menu_*, void*) {
- if (fl_choice("Switch the User Interface to Advanced mode ?","No","Yes",NULL)){
- simplemasterwindow->hide();
- refresh_master_ui();
- masterwindow->show();
- config.cfg.UserInterfaceMode=1;
-};
-}
-void MasterUI::cb_Switch1(Fl_Menu_* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Switch1_i(o,v);
-}
-
-Fl_Menu_Item MasterUI::menu_[] = {
- {"&File", 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
- {"&New (erase all)...", 0, (Fl_Callback*)MasterUI::cb_New1, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Open Parameters...", 0, (Fl_Callback*)MasterUI::cb_Open2, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Save All Parameters...", 0, (Fl_Callback*)MasterUI::cb_Save3, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Settings...", 0, (Fl_Callback*)MasterUI::cb_Settings1, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Copyright...", 0, (Fl_Callback*)MasterUI::cb_Copyright1, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {"E&xit", 0, (Fl_Callback*)MasterUI::cb_E1, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0},
- {"&Instrument", 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
- {"&Open Instrument...", 0, (Fl_Callback*)MasterUI::cb_Open3, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {"Show Instrument &Bank...", 0, (Fl_Callback*)MasterUI::cb_Show3, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0},
- {"Misc", 0, 0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
- {"Switch User Interface Mode", 0, (Fl_Callback*)MasterUI::cb_Switch1, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void MasterUI::cb_partname1_i(Fl_Button*, void*) {
- if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
-};
-bankui->show();
-}
-void MasterUI::cb_partname1(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_partname1_i(o,v);
-}
-
-void MasterUI::cb_partpanning1_i(Fl_Slider* o, void*) {
- master->part[npart]->setPpanning((int) o->value());
-}
-void MasterUI::cb_partpanning1(Fl_Slider* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_partpanning1_i(o,v);
-}
-
-void MasterUI::cb_partrcv1_i(Fl_Choice* o, void*) {
- virkeys->relaseallkeys(0);
-master->part[npart]->Prcvchn=(int) o->value();
-virkeys->midich=(int) o->value();
-}
-void MasterUI::cb_partrcv1(Fl_Choice* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_partrcv1_i(o,v);
-}
-
-void MasterUI::cb_partvolume1_i(WidgetPDial* o, void*) {
- master->part[npart]->setPvolume((int) o->value());
-}
-void MasterUI::cb_partvolume1(WidgetPDial* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_partvolume1_i(o,v);
-}
-
-void MasterUI::cb_simplepartportamento_i(Fl_Check_Button* o, void*) {
- master->part[npart]->ctl.portamento.portamento=(int) o->value();
-}
-void MasterUI::cb_simplepartportamento(Fl_Check_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_simplepartportamento_i(o,v);
-}
-
-void MasterUI::cb_simpleminkcounter_i(Fl_Counter* o, void*) {
- master->part[npart]->Pminkey=(int) o->value();
-if (master->part[npart]->Pminkey>master->part[npart]->Pmaxkey) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);
-}
-void MasterUI::cb_simpleminkcounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_simpleminkcounter_i(o,v);
-}
-
-void MasterUI::cb_simplemaxkcounter_i(Fl_Counter* o, void*) {
- master->part[npart]->Pmaxkey=(int) o->value();
-
-if (master->part[npart]->Pminkey>master->part[npart]->Pmaxkey) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);
-}
-void MasterUI::cb_simplemaxkcounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_simplemaxkcounter_i(o,v);
-}
-
-void MasterUI::cb_m_i(Fl_Button*, void*) {
- if (master->part[npart]->lastnote>=0) simpleminkcounter->value(master->part[npart]->lastnote);
-simpleminkcounter->do_callback();
-simplemaxkcounter->do_callback();
-}
-void MasterUI::cb_m(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_m_i(o,v);
-}
-
-void MasterUI::cb_M_i(Fl_Button*, void*) {
- if (master->part[npart]->lastnote>=0) simplemaxkcounter->value(master->part[npart]->lastnote);
-simplemaxkcounter->do_callback();
-simpleminkcounter->do_callback();
-}
-void MasterUI::cb_M(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_M_i(o,v);
-}
-
-void MasterUI::cb_R1_i(Fl_Button*, void*) {
- simpleminkcounter->value(0);
-simpleminkcounter->do_callback();
-simplemaxkcounter->value(127);
-simplemaxkcounter->do_callback();
-}
-void MasterUI::cb_R1(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_R1_i(o,v);
-}
-
-void MasterUI::cb_simplepartkeyshiftcounter_i(Fl_Counter* o, void*) {
- master->part[npart]->Pkeyshift=(int) o->value()+64;
-}
-void MasterUI::cb_simplepartkeyshiftcounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_simplepartkeyshiftcounter_i(o,v);
-}
-
-void MasterUI::cb_simplesyseffsend_i(WidgetPDial* o, void*) {
- master->setPsysefxvol(npart,nsyseff,(int) o->value());
-}
-void MasterUI::cb_simplesyseffsend(WidgetPDial* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->user_data()))->cb_simplesyseffsend_i(o,v);
-}
-
-void MasterUI::cb_partenabled1_i(Fl_Check_Button* o, void*) {
- pthread_mutex_lock(&master->mutex);
- master->partonoff(npart,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-
-if ((int) o->value()==0) simplelistitemgroup->deactivate();
- else {
- simplelistitemgroup->activate();
- if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
- };
-};
-
-o->redraw();
-}
-void MasterUI::cb_partenabled1(Fl_Check_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_partenabled1_i(o,v);
-}
-
-void MasterUI::cb_simplesyseffnocounter_i(Fl_Counter* o, void*) {
- nsyseff=(int) o->value()-1;
-simplesysefftype->value(master->sysefx[nsyseff]->geteffect());
-simplesyseffectui->refresh(master->sysefx[nsyseff]);
-simplerefresh();
-}
-void MasterUI::cb_simplesyseffnocounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_simplesyseffnocounter_i(o,v);
-}
-
-void MasterUI::cb_simplesysefftype_i(Fl_Choice* o, void*) {
- pthread_mutex_lock(&master->mutex);
-master->sysefx[nsyseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(&master->mutex);
-simplesyseffectui->refresh(master->sysefx[nsyseff]);
-}
-void MasterUI::cb_simplesysefftype(Fl_Choice* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_simplesysefftype_i(o,v);
-}
-
-Fl_Menu_Item MasterUI::menu_simplesysefftype[] = {
- {"No Effect", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Reverb", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Chorus", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Phaser", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"AlienWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Distortion", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"EQ", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"DynFilter", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void MasterUI::cb_Send1_i(Fl_Button*, void*) {
- syseffsendwindow->show();
-}
-void MasterUI::cb_Send1(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_Send1_i(o,v);
-}
-
-void MasterUI::cb_P2_i(Fl_Button*, void*) {
- pthread_mutex_lock(&master->mutex);
-presetsui->paste(master->sysefx[nsyseff],simplesyseffectui);
-pthread_mutex_unlock(&master->mutex);
-}
-void MasterUI::cb_P2(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_P2_i(o,v);
-}
-
-void MasterUI::cb_simpleinseffnocounter_i(Fl_Counter* o, void*) {
- ninseff=(int) o->value()-1;
-simpleinsefftype->value(master->insefx[ninseff]->geteffect());
-simpleinseffpart->value(master->Pinsparts[ninseff]+2);
-simpleinseffectui->refresh(master->insefx[ninseff]);
-
-if (master->Pinsparts[ninseff]!=-1) {
- simpleinsefftype->activate();
- simpleinseffectui->activate();
- simpleinseffectuigroup->activate();
-} else {
- simpleinsefftype->deactivate();
- simpleinseffectui->deactivate();
- simpleinseffectuigroup->deactivate();
-};
-}
-void MasterUI::cb_simpleinseffnocounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_simpleinseffnocounter_i(o,v);
-}
-
-void MasterUI::cb_simpleinsefftype_i(Fl_Choice* o, void*) {
- pthread_mutex_lock(&master->mutex);
-master->insefx[ninseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(&master->mutex);
-simpleinseffectui->refresh(master->insefx[ninseff]);
-simpleinseffectui->show();
-}
-void MasterUI::cb_simpleinsefftype(Fl_Choice* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_simpleinsefftype_i(o,v);
-}
-
-Fl_Menu_Item MasterUI::menu_simpleinsefftype[] = {
- {"No Effect", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Reverb", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Chorus", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Phaser", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"AlienWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Distortion", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"EQ", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"DynFilter", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void MasterUI::cb_simpleinseffpart_i(Fl_Choice* o, void*) {
- master->Pinsparts[ninseff]=(int) o->value()-2;
-if ((int) o->value()==1){
- simpleinseffectuigroup->deactivate();
- simpleinsefftype->deactivate();
- simpleinseffectui->deactivate();
-} else {
- simpleinseffectuigroup->activate();
- simpleinsefftype->activate();
- simpleinseffectui->activate();
-};
-master->insefx[ninseff]->cleanup();
-}
-void MasterUI::cb_simpleinseffpart(Fl_Choice* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_simpleinseffpart_i(o,v);
-}
-
-void MasterUI::cb_P3_i(Fl_Button*, void*) {
- pthread_mutex_lock(&master->mutex);
-presetsui->paste(master->insefx[ninseff],simpleinseffectui);
-pthread_mutex_unlock(&master->mutex);
-}
-void MasterUI::cb_P3(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_P3_i(o,v);
-}
-
-void MasterUI::cb_simplemastervolumedial_i(WidgetPDial* o, void*) {
- master->setPvolume((int) o->value());
-}
-void MasterUI::cb_simplemastervolumedial(WidgetPDial* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_simplemastervolumedial_i(o,v);
-}
-
-void MasterUI::cb_simplemasterkeyshiftcounter_i(Fl_Counter* o, void*) {
- master->setPkeyshift((int) o->value()+64);
-}
-void MasterUI::cb_simplemasterkeyshiftcounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_simplemasterkeyshiftcounter_i(o,v);
-}
-
-void MasterUI::cb_Stop_i(Fl_Button*, void*) {
- virkeyboard->relaseallkeys();
-pthread_mutex_lock(&master->mutex);
-master->shutup=1;
-pthread_mutex_unlock(&master->mutex);
-}
-void MasterUI::cb_Stop(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Stop_i(o,v);
-}
-
-void MasterUI::cb_Reset_i(Fl_Button*, void*) {
- simpleglobalfinedetuneslider->value(64.0);
-simpleglobalfinedetuneslider->do_callback();
-}
-void MasterUI::cb_Reset(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Reset_i(o,v);
-}
-
-void MasterUI::cb_simpleglobalfinedetuneslider_i(WidgetPDial* o, void*) {
- master->microtonal.Pglobalfinedetune=(int) o->value();
-}
-void MasterUI::cb_simpleglobalfinedetuneslider(WidgetPDial* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_simpleglobalfinedetuneslider_i(o,v);
-}
-
-void MasterUI::cb_simplenpartcounter_i(Fl_Counter* o, void*) {
- virkeys->relaseallkeys(0);
-npartcounter->value(o->value());
-npart=(int) o->value()-1;
-
-simplerefresh();
-virkeys->midich=master->part[npart]->Prcvchn;
-}
-void MasterUI::cb_simplenpartcounter(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_simplenpartcounter_i(o,v);
-}
-
-void MasterUI::cb_Keyb_i(Fl_Counter* o, void*) {
- virkeys->relaseallkeys(0);
-virkeys->midioct=(int) o->value();
-virkeys->take_focus();
-}
-void MasterUI::cb_Keyb(Fl_Counter* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Keyb_i(o,v);
-}
-
-void MasterUI::cb_selectuiwindow_i(Fl_Double_Window*, void*) {
- *exitprogram=1;
-}
-void MasterUI::cb_selectuiwindow(Fl_Double_Window* o, void* v) {
- ((MasterUI*)(o->user_data()))->cb_selectuiwindow_i(o,v);
-}
-
-void MasterUI::cb_Advanced_i(Fl_Button*, void*) {
- config.cfg.UserInterfaceMode=1;
-masterwindow->show();
-selectuiwindow->hide();
-}
-void MasterUI::cb_Advanced(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Advanced_i(o,v);
-}
-
-void MasterUI::cb_Beginner_i(Fl_Button*, void*) {
- simplemasterwindow->show();
-selectuiwindow->hide();
-config.cfg.UserInterfaceMode=2;
-}
-void MasterUI::cb_Beginner(Fl_Button* o, void* v) {
- ((MasterUI*)(o->parent()->user_data()))->cb_Beginner_i(o,v);
-}
-
-Fl_Double_Window* MasterUI::make_window() {
- { masterwindow = new Fl_Double_Window(390, 465, "zynaddsubfx");
- masterwindow->callback((Fl_Callback*)cb_masterwindow, (void*)(this));
- { mastermenu = new Fl_Menu_Bar(-5, 0, 690, 25);
- mastermenu->menu(menu_mastermenu);
- } // Fl_Menu_Bar* mastermenu
- { WidgetPDial* o = mastervolumedial = new WidgetPDial(5, 30, 30, 30, "M.Vol");
- mastervolumedial->tooltip("Master Volume");
- mastervolumedial->box(FL_ROUND_UP_BOX);
- mastervolumedial->color(FL_BACKGROUND_COLOR);
- mastervolumedial->selection_color(FL_INACTIVE_COLOR);
- mastervolumedial->labeltype(FL_NORMAL_LABEL);
- mastervolumedial->labelfont(1);
- mastervolumedial->labelsize(11);
- mastervolumedial->labelcolor(FL_FOREGROUND_COLOR);
- mastervolumedial->maximum(127);
- mastervolumedial->step(1);
- mastervolumedial->callback((Fl_Callback*)cb_mastervolumedial);
- mastervolumedial->align(Fl_Align(130));
- mastervolumedial->when(FL_WHEN_CHANGED);
- o->value(master->Pvolume);
- } // WidgetPDial* mastervolumedial
- { Fl_Counter* o = masterkeyshiftcounter = new Fl_Counter(45, 31, 90, 20, "Master KeyShift");
- masterkeyshiftcounter->labelsize(11);
- masterkeyshiftcounter->minimum(-64);
- masterkeyshiftcounter->maximum(64);
- masterkeyshiftcounter->step(1);
- masterkeyshiftcounter->callback((Fl_Callback*)cb_masterkeyshiftcounter);
- o->lstep(12);
- o->value(master->Pkeyshift-64);
- } // Fl_Counter* masterkeyshiftcounter
- { Fl_Button* o = new Fl_Button(293, 29, 92, 31, "Panic!");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)231);
- o->labelfont(1);
- o->callback((Fl_Callback*)cb_Panic);
- } // Fl_Button* o
- { partuigroup = new Fl_Group(0, 242, 390, 183);
- partuigroup->box(FL_ENGRAVED_FRAME);
- { PartUI* o = partui = new PartUI(4, 245, 383, 175);
- partui->box(FL_FLAT_BOX);
- partui->color(FL_BACKGROUND_COLOR);
- partui->selection_color(FL_BACKGROUND_COLOR);
- partui->labeltype(FL_NORMAL_LABEL);
- partui->labelfont(0);
- partui->labelsize(14);
- partui->labelcolor(FL_FOREGROUND_COLOR);
- partui->align(Fl_Align(FL_ALIGN_TOP));
- partui->when(FL_WHEN_RELEASE);
- o->init(master->part[0],master,0,bankui);
- o->show();
- partui->end();
- } // PartUI* partui
- partuigroup->end();
- } // Fl_Group* partuigroup
- { Fl_Tabs* o = new Fl_Tabs(0, 80, 390, 160);
- { Fl_Group* o = new Fl_Group(0, 100, 390, 140, "System Effects");
- o->box(FL_ENGRAVED_FRAME);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelsize(15);
- o->align(Fl_Align(FL_ALIGN_TOP_RIGHT|FL_ALIGN_INSIDE));
- { Fl_Counter* o = syseffnocounter = new Fl_Counter(5, 120, 80, 20, "Sys.Effect No.");
- syseffnocounter->type(1);
- syseffnocounter->labelfont(1);
- syseffnocounter->labelsize(10);
- syseffnocounter->minimum(0);
- syseffnocounter->maximum(127);
- syseffnocounter->step(1);
- syseffnocounter->value(1);
- syseffnocounter->textfont(1);
- syseffnocounter->callback((Fl_Callback*)cb_syseffnocounter);
- syseffnocounter->align(Fl_Align(FL_ALIGN_TOP));
- o->bounds(1,NUM_SYS_EFX);
- o->value(nsyseff+1);
- } // Fl_Counter* syseffnocounter
- { Fl_Choice* o = sysefftype = new Fl_Choice(315, 125, 70, 15, "EffType");
- sysefftype->down_box(FL_BORDER_BOX);
- sysefftype->labelsize(10);
- sysefftype->callback((Fl_Callback*)cb_sysefftype);
- sysefftype->menu(menu_sysefftype);
- o->value(master->sysefx[nsyseff]->geteffect());
- } // Fl_Choice* sysefftype
- { syseffectuigroup = new Fl_Group(5, 140, 380, 95);
- syseffectuigroup->box(FL_FLAT_BOX);
- syseffectuigroup->color((Fl_Color)48);
- { EffUI* o = syseffectui = new EffUI(5, 140, 380, 95);
- syseffectui->box(FL_NO_BOX);
- syseffectui->color(FL_BACKGROUND_COLOR);
- syseffectui->selection_color(FL_BACKGROUND_COLOR);
- syseffectui->labeltype(FL_NORMAL_LABEL);
- syseffectui->labelfont(0);
- syseffectui->labelsize(14);
- syseffectui->labelcolor(FL_FOREGROUND_COLOR);
- syseffectui->align(Fl_Align(FL_ALIGN_TOP));
- syseffectui->when(FL_WHEN_RELEASE);
- o->init(master->sysefx[nsyseff]);
- syseffectui->end();
- } // EffUI* syseffectui
- syseffectuigroup->end();
- } // Fl_Group* syseffectuigroup
- { Fl_Button* o = new Fl_Button(95, 120, 75, 20, "Send to...");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Send);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(215, 124, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(245, 124, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(0, 100, 390, 140, "Insertion Effects");
- o->box(FL_ENGRAVED_FRAME);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelsize(15);
- o->align(Fl_Align(FL_ALIGN_TOP_RIGHT|FL_ALIGN_INSIDE));
- o->hide();
- { Fl_Counter* o = inseffnocounter = new Fl_Counter(5, 120, 80, 20, "Ins.Effect No.");
- inseffnocounter->type(1);
- inseffnocounter->labelfont(1);
- inseffnocounter->labelsize(10);
- inseffnocounter->minimum(0);
- inseffnocounter->maximum(127);
- inseffnocounter->step(1);
- inseffnocounter->value(1);
- inseffnocounter->textfont(1);
- inseffnocounter->callback((Fl_Callback*)cb_inseffnocounter);
- inseffnocounter->align(Fl_Align(FL_ALIGN_TOP));
- o->bounds(1,NUM_INS_EFX);
- o->value(ninseff+1);
- } // Fl_Counter* inseffnocounter
- { Fl_Choice* o = insefftype = new Fl_Choice(315, 125, 70, 15, "EffType");
- insefftype->down_box(FL_BORDER_BOX);
- insefftype->labelsize(10);
- insefftype->callback((Fl_Callback*)cb_insefftype);
- insefftype->menu(menu_insefftype);
- o->value(master->insefx[ninseff]->geteffect());
- if (master->Pinsparts[ninseff]== -1) o->deactivate();
- } // Fl_Choice* insefftype
- { inseffectuigroup = new Fl_Group(5, 140, 380, 95);
- inseffectuigroup->box(FL_FLAT_BOX);
- inseffectuigroup->color((Fl_Color)48);
- { EffUI* o = inseffectui = new EffUI(5, 140, 380, 95);
- inseffectui->box(FL_NO_BOX);
- inseffectui->color(FL_BACKGROUND_COLOR);
- inseffectui->selection_color(FL_BACKGROUND_COLOR);
- inseffectui->labeltype(FL_NORMAL_LABEL);
- inseffectui->labelfont(0);
- inseffectui->labelsize(14);
- inseffectui->labelcolor(FL_FOREGROUND_COLOR);
- inseffectui->align(Fl_Align(FL_ALIGN_TOP));
- inseffectui->when(FL_WHEN_RELEASE);
- o->init(master->insefx[ninseff]);
- if (master->Pinsparts[ninseff]== -1) o->deactivate();
- inseffectui->end();
- } // EffUI* inseffectui
- inseffectuigroup->end();
- } // Fl_Group* inseffectuigroup
- { Fl_Choice* o = inseffpart = new Fl_Choice(95, 120, 80, 20, "Insert To.");
- inseffpart->down_box(FL_BORDER_BOX);
- inseffpart->labelfont(1);
- inseffpart->labelsize(10);
- inseffpart->textsize(10);
- inseffpart->callback((Fl_Callback*)cb_inseffpart);
- inseffpart->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("Master Out");o->add("Off");
- char tmp[50]; for (int i=0;i<NUM_MIDI_PARTS;i++) {sprintf(tmp,"Part %2d",i+1);o->add(tmp);};
- o->value(master->Pinsparts[ninseff]+2);
- } // Fl_Choice* inseffpart
- { Fl_Button* o = new Fl_Button(215, 124, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(245, 124, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P1);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- o->end();
- } // Fl_Tabs* o
- { Fl_Button* o = new Fl_Button(330, 80, 56, 19, "Scales");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)231);
- o->labeltype(FL_ENGRAVED_LABEL);
- o->labelfont(1);
- o->callback((Fl_Callback*)cb_Scales);
- } // Fl_Button* o
- { Fl_Group* o = new Fl_Group(172, 30, 117, 45);
- o->box(FL_ENGRAVED_BOX);
- { recordbutton = new Fl_Button(181, 36, 21, 21, "Rec.");
- recordbutton->tooltip("Start Recording");
- recordbutton->box(FL_ROUND_UP_BOX);
- recordbutton->color(FL_RED);
- recordbutton->labelfont(1);
- recordbutton->labelsize(10);
- recordbutton->callback((Fl_Callback*)cb_recordbutton);
- recordbutton->align(Fl_Align(FL_ALIGN_BOTTOM));
- recordbutton->deactivate();
- } // Fl_Button* recordbutton
- { stopbutton = new Fl_Button(259, 36, 21, 21, "Stop");
- stopbutton->tooltip("Stop Recording and close the audio file");
- stopbutton->box(FL_THIN_UP_BOX);
- stopbutton->color((Fl_Color)4);
- stopbutton->labelfont(1);
- stopbutton->labelsize(10);
- stopbutton->callback((Fl_Callback*)cb_stopbutton);
- stopbutton->align(Fl_Align(FL_ALIGN_BOTTOM));
- stopbutton->deactivate();
- } // Fl_Button* stopbutton
- { pausebutton = new Fl_Button(220, 36, 21, 21, "@||");
- pausebutton->tooltip("Pause Recording");
- pausebutton->box(FL_THIN_UP_BOX);
- pausebutton->color((Fl_Color)4);
- pausebutton->selection_color((Fl_Color)4);
- pausebutton->labelfont(1);
- pausebutton->labelcolor((Fl_Color)3);
- pausebutton->callback((Fl_Callback*)cb_pausebutton);
- pausebutton->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
- pausebutton->deactivate();
- } // Fl_Button* pausebutton
- { pauselabel = new Fl_Box(214, 56, 30, 15, "Pause");
- pauselabel->labelfont(1);
- pauselabel->labelsize(10);
- pauselabel->deactivate();
- } // Fl_Box* pauselabel
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(1, 427, 389, 33);
- o->box(FL_ENGRAVED_FRAME);
- { VUMeter* o = new VUMeter(4, 430, 384, 30, "VU-Meter");
- o->box(FL_FLAT_BOX);
- o->color((Fl_Color)48);
- o->selection_color((Fl_Color)75);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(14);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->align(Fl_Align(FL_ALIGN_CENTER));
- o->when(FL_WHEN_RELEASE);
- o->init(master,-1);
- } // VUMeter* o
- o->end();
- } // Fl_Group* o
- { Fl_Check_Button* o = nrpnbutton = new Fl_Check_Button(45, 65, 47, 10, "NRPN");
- nrpnbutton->tooltip("Receive NRPNs");
- nrpnbutton->down_box(FL_DOWN_BOX);
- nrpnbutton->labelsize(10);
- nrpnbutton->callback((Fl_Callback*)cb_nrpnbutton);
- o->value(master->ctl.NRPN.receive);
- } // Fl_Check_Button* nrpnbutton
- { Fl_Counter* o = npartcounter = new Fl_Counter(5, 247, 70, 23);
- npartcounter->tooltip("The part number");
- npartcounter->type(1);
- npartcounter->labelfont(1);
- npartcounter->minimum(0);
- npartcounter->maximum(127);
- npartcounter->step(1);
- npartcounter->value(1);
- npartcounter->textfont(1);
- npartcounter->callback((Fl_Callback*)cb_npartcounter);
- o->bounds(1,NUM_MIDI_PARTS);
- bankui->init(o);
- } // Fl_Counter* npartcounter
- { Fl_Button* o = new Fl_Button(292, 80, 35, 19, "vK");
- o->tooltip("Virtual Keyboard");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)231);
- o->labeltype(FL_ENGRAVED_LABEL);
- o->labelfont(1);
- o->callback((Fl_Callback*)cb_vK);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(140, 65, 30, 10, "R.D.");
- o->tooltip("Master fine detune reset");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_R);
- } // Fl_Button* o
- { WidgetPDial* o = globalfinedetuneslider = new WidgetPDial(143, 30, 20, 20, "F.Det.");
- globalfinedetuneslider->tooltip("global fine detune");
- globalfinedetuneslider->box(FL_ROUND_UP_BOX);
- globalfinedetuneslider->color(FL_BACKGROUND_COLOR);
- globalfinedetuneslider->selection_color(FL_INACTIVE_COLOR);
- globalfinedetuneslider->labeltype(FL_NORMAL_LABEL);
- globalfinedetuneslider->labelfont(0);
- globalfinedetuneslider->labelsize(10);
- globalfinedetuneslider->labelcolor(FL_FOREGROUND_COLOR);
- globalfinedetuneslider->maximum(127);
- globalfinedetuneslider->step(1);
- globalfinedetuneslider->value(64);
- globalfinedetuneslider->callback((Fl_Callback*)cb_globalfinedetuneslider);
- globalfinedetuneslider->align(Fl_Align(130));
- globalfinedetuneslider->when(FL_WHEN_CHANGED);
- o->value(master->microtonal.Pglobalfinedetune);
- } // WidgetPDial* globalfinedetuneslider
- { Fl_Button* o = new Fl_Button(293, 62, 92, 16, "Panel Window");
- o->tooltip("Panel Window");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)183);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Panel);
- } // Fl_Button* o
- masterwindow->xclass("zynaddsubfx");
- masterwindow->end();
- } // Fl_Double_Window* masterwindow
- { aboutwindow = new Fl_Double_Window(365, 280, "Copyright...");
- aboutwindow->user_data((void*)(this));
- { Fl_Box* o = new Fl_Box(15, 35, 335, 55, "Copyright (c) 2002-2009 Nasca O. PAUL and others. Please read AUTHORS.txt");
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelsize(15);
- o->align(Fl_Align(192|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(15, 90, 335, 145, "This is free software; you may redistribute it and/or modify it under the ter\
-ms of the \nversion 2 (or any later version) of the GNU General Public License\
- as published by the Free Software Fundation.\n This program comes with\n ABS\
-OLUTELY NO WARRANTY. \n See the version 2 (or any later version) of the \nGNU \
-General Public License for details.");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Button* o = new Fl_Button(80, 245, 190, 25, "Close this window");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Box* o = new Fl_Box(15, 5, 335, 30, "ZynAddSubFX");
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(20);
- o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- aboutwindow->end();
- } // Fl_Double_Window* aboutwindow
- { syseffsendwindow = new Fl_Double_Window(120, 250, "System Effects Send");
- syseffsendwindow->user_data((void*)(this));
- { Fl_Scroll* o = new Fl_Scroll(0, 45, 120, 170);
- o->box(FL_FLAT_BOX);
- for (int neff1=0;neff1<NUM_SYS_EFX;neff1++) for (int neff2=neff1+1;neff2<NUM_SYS_EFX;neff2++)
- {syseffsend[neff1][neff2]=new SysEffSend(o->x()+(neff2-1)*35,o->y()+15+neff1*50,30,30);syseffsend[neff1][neff2]->label("aaa");syseffsend[neff1][neff2]->init(master,neff1,neff2);};
- o->end();
- Fl_Group::current()->resizable(o);
- } // Fl_Scroll* o
- { Fl_Button* o = new Fl_Button(25, 220, 80, 25, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close1);
- } // Fl_Button* o
- { Fl_Box* o = new Fl_Box(5, 5, 110, 35, "Send system effect\'s output to other system effects");
- o->labelsize(10);
- o->align(Fl_Align(192));
- } // Fl_Box* o
- syseffsendwindow->end();
- } // Fl_Double_Window* syseffsendwindow
- { panelwindow = new Fl_Double_Window(630, 635, "ZynAddSubFX Panel");
- panelwindow->user_data((void*)(this));
- { Fl_Scroll* o = new Fl_Scroll(0, 5, 570, 310);
- o->type(1);
- o->box(FL_THIN_UP_BOX);
- { Fl_Pack* o = new Fl_Pack(5, 10, 560, 285);
- o->type(1);
- for (int i=0;i<NUM_MIDI_PARTS/2;i++){panellistitem[i]=new Panellistitem(0,0,70,260,"");panellistitem[i]->init(master,i,bankui);}
- o->end();
- } // Fl_Pack* o
- o->end();
- } // Fl_Scroll* o
- { Fl_Scroll* o = new Fl_Scroll(0, 320, 570, 310);
- o->type(1);
- o->box(FL_THIN_UP_BOX);
- { Fl_Pack* o = new Fl_Pack(5, 325, 560, 285);
- o->type(1);
- for (int i=NUM_MIDI_PARTS/2;i<NUM_MIDI_PARTS;i++){panellistitem[i]=new Panellistitem(0,0,70,260,"");panellistitem[i]->init(master,i,bankui);}
- o->end();
- } // Fl_Pack* o
- o->end();
- } // Fl_Scroll* o
- { Fl_Button* o = new Fl_Button(575, 605, 50, 25, "Close");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(13);
- o->callback((Fl_Callback*)cb_Close2);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(575, 570, 55, 25, "Refresh");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(13);
- o->callback((Fl_Callback*)cb_Refresh);
- } // Fl_Button* o
- panelwindow->end();
- } // Fl_Double_Window* panelwindow
- { simplemasterwindow = new Fl_Double_Window(600, 335, "ZynAddSubFX");
- simplemasterwindow->callback((Fl_Callback*)cb_simplemasterwindow, (void*)(this));
- { Fl_Menu_Bar* o = new Fl_Menu_Bar(0, 0, 690, 25);
- o->menu(menu_);
- } // Fl_Menu_Bar* o
- { Fl_Group* o = simplelistitemgroup = new Fl_Group(125, 65, 215, 150);
- simplelistitemgroup->box(FL_ENGRAVED_BOX);
- { partname = new Fl_Button(130, 72, 205, 18);
- partname->box(FL_PLASTIC_THIN_DOWN_BOX);
- partname->down_box(FL_FLAT_BOX);
- partname->color((Fl_Color)247);
- partname->labelfont(1);
- partname->labelsize(11);
- partname->callback((Fl_Callback*)cb_partname1);
- partname->align(Fl_Align(192|FL_ALIGN_INSIDE));
- } // Fl_Button* partname
- { Fl_Slider* o = partpanning = new Fl_Slider(185, 95, 70, 15, "Pan");
- partpanning->type(5);
- partpanning->box(FL_FLAT_BOX);
- partpanning->maximum(127);
- partpanning->step(1);
- partpanning->value(64);
- partpanning->callback((Fl_Callback*)cb_partpanning1);
- o->value(master->part[npart]->Ppanning);
- } // Fl_Slider* partpanning
- { Fl_Choice* o = partrcv = new Fl_Choice(140, 157, 65, 18, "Midi Channel Receive");
- partrcv->tooltip("receive from Midi channel");
- partrcv->down_box(FL_BORDER_BOX);
- partrcv->labelsize(10);
- partrcv->textfont(1);
- partrcv->callback((Fl_Callback*)cb_partrcv1);
- partrcv->align(Fl_Align(130));
- char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Ch%d",i+1);if (i!=9) o->add(nrstr); else o->add("Dr10");};
- o->value(master->part[npart]->Prcvchn);
- } // Fl_Choice* partrcv
- { WidgetPDial* o = partvolume = new WidgetPDial(145, 95, 30, 30);
- partvolume->box(FL_OVAL_BOX);
- partvolume->color(FL_BACKGROUND_COLOR);
- partvolume->selection_color(FL_INACTIVE_COLOR);
- partvolume->labeltype(FL_NORMAL_LABEL);
- partvolume->labelfont(0);
- partvolume->labelsize(14);
- partvolume->labelcolor(FL_FOREGROUND_COLOR);
- partvolume->maximum(127);
- partvolume->step(1);
- partvolume->callback((Fl_Callback*)cb_partvolume1);
- partvolume->align(Fl_Align(FL_ALIGN_BOTTOM));
- partvolume->when(FL_WHEN_CHANGED);
- o->value(master->part[npart]->Pvolume);
- } // WidgetPDial* partvolume
- { new Fl_Box(130, 125, 60, 15, "Volume");
- } // Fl_Box* o
- { Fl_Check_Button* o = simplepartportamento = new Fl_Check_Button(260, 95, 75, 20, "Portamento");
- simplepartportamento->tooltip("Enable/Disable the portamento");
- simplepartportamento->down_box(FL_DOWN_BOX);
- simplepartportamento->labelfont(1);
- simplepartportamento->labelsize(10);
- simplepartportamento->callback((Fl_Callback*)cb_simplepartportamento);
- o->value(master->part[npart]->ctl.portamento.portamento);
- } // Fl_Check_Button* simplepartportamento
- { Fl_Counter* o = simpleminkcounter = new Fl_Counter(210, 158, 40, 15, "Min.key");
- simpleminkcounter->tooltip("Minimum key (that the part receives NoteOn messages)");
- simpleminkcounter->type(1);
- simpleminkcounter->labelfont(1);
- simpleminkcounter->labelsize(10);
- simpleminkcounter->minimum(0);
- simpleminkcounter->maximum(127);
- simpleminkcounter->step(1);
- simpleminkcounter->textsize(10);
- simpleminkcounter->callback((Fl_Callback*)cb_simpleminkcounter);
- o->value(master->part[npart]->Pminkey);
- } // Fl_Counter* simpleminkcounter
- { Fl_Counter* o = simplemaxkcounter = new Fl_Counter(255, 158, 40, 15, "Max.key");
- simplemaxkcounter->tooltip("Maximum key (that the part receives NoteOn messages)");
- simplemaxkcounter->type(1);
- simplemaxkcounter->labelfont(1);
- simplemaxkcounter->labelsize(10);
- simplemaxkcounter->minimum(0);
- simplemaxkcounter->maximum(127);
- simplemaxkcounter->step(1);
- simplemaxkcounter->textsize(10);
- simplemaxkcounter->callback((Fl_Callback*)cb_simplemaxkcounter);
- o->value(master->part[npart]->Pmaxkey);
- } // Fl_Counter* simplemaxkcounter
- { Fl_Button* o = new Fl_Button(230, 188, 15, 12, "m");
- o->tooltip("set the minimum key to the last pressed key");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_m);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(260, 188, 15, 12, "M");
- o->tooltip("set the maximum key to the last pressed key");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_M);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(245, 188, 15, 12, "R");
- o->tooltip("reset the minimum key to 0 and maximum key to 127");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_R1);
- } // Fl_Button* o
- { Fl_Counter* o = simplepartkeyshiftcounter = new Fl_Counter(240, 120, 90, 20, "KeyShift");
- simplepartkeyshiftcounter->labelsize(11);
- simplepartkeyshiftcounter->minimum(-64);
- simplepartkeyshiftcounter->maximum(64);
- simplepartkeyshiftcounter->step(1);
- simplepartkeyshiftcounter->callback((Fl_Callback*)cb_simplepartkeyshiftcounter);
- o->lstep(12);
- o->value(master->part[npart]->Pkeyshift-64);
- } // Fl_Counter* simplepartkeyshiftcounter
- { simplesyseffsend = new WidgetPDial(300, 160, 30, 30);
- simplesyseffsend->box(FL_OVAL_BOX);
- simplesyseffsend->color(FL_BACKGROUND_COLOR);
- simplesyseffsend->selection_color(FL_INACTIVE_COLOR);
- simplesyseffsend->labeltype(FL_NORMAL_LABEL);
- simplesyseffsend->labelfont(0);
- simplesyseffsend->labelsize(14);
- simplesyseffsend->labelcolor(FL_FOREGROUND_COLOR);
- simplesyseffsend->maximum(127);
- simplesyseffsend->step(1);
- simplesyseffsend->callback((Fl_Callback*)cb_simplesyseffsend);
- simplesyseffsend->align(Fl_Align(FL_ALIGN_BOTTOM));
- simplesyseffsend->when(FL_WHEN_CHANGED);
- } // WidgetPDial* simplesyseffsend
- { new Fl_Box(295, 190, 40, 15, "Effect");
- } // Fl_Box* o
- if (master->part[npart]->Penabled==0) o->deactivate();
- simplelistitemgroup->end();
- } // Fl_Group* simplelistitemgroup
- { Fl_Check_Button* o = partenabled = new Fl_Check_Button(250, 40, 85, 20, "Enabled");
- partenabled->down_box(FL_DOWN_BOX);
- partenabled->labeltype(FL_EMBOSSED_LABEL);
- partenabled->labelfont(1);
- partenabled->labelsize(13);
- partenabled->callback((Fl_Callback*)cb_partenabled1);
- partenabled->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
- //char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);
- o->value(master->part[npart]->Penabled);
- } // Fl_Check_Button* partenabled
- { VirKeys* o = virkeys = new VirKeys(5, 215, 590, 80, "Keyboard");
- virkeys->box(FL_BORDER_BOX);
- virkeys->color((Fl_Color)17);
- virkeys->selection_color(FL_BACKGROUND_COLOR);
- virkeys->labeltype(FL_NORMAL_LABEL);
- virkeys->labelfont(0);
- virkeys->labelsize(14);
- virkeys->labelcolor(FL_FOREGROUND_COLOR);
- virkeys->align(Fl_Align(FL_ALIGN_CENTER));
- virkeys->when(FL_WHEN_RELEASE);
- o->init(master);
- } // VirKeys* virkeys
- { Fl_Group* o = new Fl_Group(340, 30, 255, 185);
- o->box(FL_ENGRAVED_BOX);
- { Fl_Tabs* o = new Fl_Tabs(345, 35, 245, 175);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- { Fl_Group* o = new Fl_Group(345, 55, 245, 155, "System Effects");
- o->box(FL_ENGRAVED_FRAME);
- o->labelfont(1);
- o->labelsize(12);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- o->hide();
- { Fl_Counter* o = simplesyseffnocounter = new Fl_Counter(350, 75, 80, 20, "Sys.Effect No.");
- simplesyseffnocounter->type(1);
- simplesyseffnocounter->labelfont(1);
- simplesyseffnocounter->labelsize(10);
- simplesyseffnocounter->minimum(0);
- simplesyseffnocounter->maximum(127);
- simplesyseffnocounter->step(1);
- simplesyseffnocounter->value(1);
- simplesyseffnocounter->textfont(1);
- simplesyseffnocounter->callback((Fl_Callback*)cb_simplesyseffnocounter);
- simplesyseffnocounter->align(Fl_Align(FL_ALIGN_TOP));
- o->bounds(1,NUM_SYS_EFX);
- o->value(nsyseff+1);
- } // Fl_Counter* simplesyseffnocounter
- { Fl_Choice* o = simplesysefftype = new Fl_Choice(515, 80, 70, 15, "EffType");
- simplesysefftype->down_box(FL_BORDER_BOX);
- simplesysefftype->labelsize(10);
- simplesysefftype->callback((Fl_Callback*)cb_simplesysefftype);
- simplesysefftype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- simplesysefftype->menu(menu_simplesysefftype);
- o->value(master->sysefx[nsyseff]->geteffect());
- } // Fl_Choice* simplesysefftype
- { simplesyseffectuigroup = new Fl_Group(350, 95, 235, 95);
- simplesyseffectuigroup->box(FL_FLAT_BOX);
- simplesyseffectuigroup->color((Fl_Color)48);
- { SimpleEffUI* o = simplesyseffectui = new SimpleEffUI(350, 95, 234, 95);
- simplesyseffectui->box(FL_NO_BOX);
- simplesyseffectui->color(FL_BACKGROUND_COLOR);
- simplesyseffectui->selection_color(FL_BACKGROUND_COLOR);
- simplesyseffectui->labeltype(FL_NORMAL_LABEL);
- simplesyseffectui->labelfont(0);
- simplesyseffectui->labelsize(14);
- simplesyseffectui->labelcolor(FL_FOREGROUND_COLOR);
- simplesyseffectui->align(Fl_Align(FL_ALIGN_TOP));
- simplesyseffectui->when(FL_WHEN_RELEASE);
- o->init(master->sysefx[nsyseff]);
- simplesyseffectui->end();
- } // SimpleEffUI* simplesyseffectui
- simplesyseffectuigroup->end();
- } // Fl_Group* simplesyseffectuigroup
- { Fl_Button* o = new Fl_Button(435, 75, 75, 20, "Send to...");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Send1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(560, 65, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P2);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(345, 55, 245, 155, "Insertion Effects");
- o->box(FL_ENGRAVED_FRAME);
- o->labelfont(1);
- o->labelsize(12);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- { Fl_Counter* o = simpleinseffnocounter = new Fl_Counter(350, 75, 80, 20, "Ins.Effect No.");
- simpleinseffnocounter->type(1);
- simpleinseffnocounter->labelfont(1);
- simpleinseffnocounter->labelsize(10);
- simpleinseffnocounter->minimum(0);
- simpleinseffnocounter->maximum(127);
- simpleinseffnocounter->step(1);
- simpleinseffnocounter->value(1);
- simpleinseffnocounter->textfont(1);
- simpleinseffnocounter->callback((Fl_Callback*)cb_simpleinseffnocounter);
- simpleinseffnocounter->align(Fl_Align(FL_ALIGN_TOP));
- o->bounds(1,NUM_INS_EFX);
- o->value(ninseff+1);
- } // Fl_Counter* simpleinseffnocounter
- { Fl_Choice* o = simpleinsefftype = new Fl_Choice(515, 80, 70, 15, "EffType");
- simpleinsefftype->down_box(FL_BORDER_BOX);
- simpleinsefftype->labelsize(10);
- simpleinsefftype->callback((Fl_Callback*)cb_simpleinsefftype);
- simpleinsefftype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- simpleinsefftype->menu(menu_simpleinsefftype);
- o->value(master->insefx[ninseff]->geteffect());
- if (master->Pinsparts[ninseff]== -1) o->deactivate();
- } // Fl_Choice* simpleinsefftype
- { simpleinseffectuigroup = new Fl_Group(350, 95, 234, 95);
- simpleinseffectuigroup->box(FL_FLAT_BOX);
- simpleinseffectuigroup->color((Fl_Color)48);
- { SimpleEffUI* o = simpleinseffectui = new SimpleEffUI(350, 95, 234, 95);
- simpleinseffectui->box(FL_NO_BOX);
- simpleinseffectui->color(FL_BACKGROUND_COLOR);
- simpleinseffectui->selection_color(FL_BACKGROUND_COLOR);
- simpleinseffectui->labeltype(FL_NORMAL_LABEL);
- simpleinseffectui->labelfont(0);
- simpleinseffectui->labelsize(14);
- simpleinseffectui->labelcolor(FL_FOREGROUND_COLOR);
- simpleinseffectui->align(Fl_Align(FL_ALIGN_TOP));
- simpleinseffectui->when(FL_WHEN_RELEASE);
- o->init(master->insefx[ninseff]);
- if (master->Pinsparts[ninseff]== -1) o->deactivate();
- simpleinseffectui->end();
- } // SimpleEffUI* simpleinseffectui
- simpleinseffectuigroup->end();
- } // Fl_Group* simpleinseffectuigroup
- { Fl_Choice* o = simpleinseffpart = new Fl_Choice(435, 75, 80, 20, "Insert To.");
- simpleinseffpart->down_box(FL_BORDER_BOX);
- simpleinseffpart->labelfont(1);
- simpleinseffpart->labelsize(10);
- simpleinseffpart->textsize(10);
- simpleinseffpart->callback((Fl_Callback*)cb_simpleinseffpart);
- simpleinseffpart->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("Master Out");o->add("Off");
- char tmp[50]; for (int i=0;i<NUM_MIDI_PARTS;i++) {sprintf(tmp,"Part %2d",i+1);o->add(tmp);};
- o->value(master->Pinsparts[ninseff]+2);
- } // Fl_Choice* simpleinseffpart
- { Fl_Button* o = new Fl_Button(560, 65, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P3);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- o->end();
- } // Fl_Tabs* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(5, 300, 590, 30);
- o->box(FL_ENGRAVED_FRAME);
- { VUMeter* o = new VUMeter(5, 300, 590, 30, "VU-Meter");
- o->box(FL_FLAT_BOX);
- o->color((Fl_Color)41);
- o->selection_color((Fl_Color)75);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(14);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->align(Fl_Align(FL_ALIGN_CENTER));
- o->when(FL_WHEN_RELEASE);
- o->init(master,-1);
- } // VUMeter* o
- o->end();
- } // Fl_Group* o
- { WidgetPDial* o = simplemastervolumedial = new WidgetPDial(10, 35, 40, 40, "Master Volume");
- simplemastervolumedial->tooltip("Master Volume");
- simplemastervolumedial->box(FL_ROUND_UP_BOX);
- simplemastervolumedial->color(FL_BACKGROUND_COLOR);
- simplemastervolumedial->selection_color(FL_INACTIVE_COLOR);
- simplemastervolumedial->labeltype(FL_NORMAL_LABEL);
- simplemastervolumedial->labelfont(1);
- simplemastervolumedial->labelsize(11);
- simplemastervolumedial->labelcolor(FL_FOREGROUND_COLOR);
- simplemastervolumedial->maximum(127);
- simplemastervolumedial->step(1);
- simplemastervolumedial->callback((Fl_Callback*)cb_simplemastervolumedial);
- simplemastervolumedial->align(Fl_Align(130));
- simplemastervolumedial->when(FL_WHEN_CHANGED);
- o->value(master->Pvolume);
- } // WidgetPDial* simplemastervolumedial
- { Fl_Counter* o = simplemasterkeyshiftcounter = new Fl_Counter(25, 110, 90, 20, "Master KeyShift");
- simplemasterkeyshiftcounter->labelsize(11);
- simplemasterkeyshiftcounter->minimum(-64);
- simplemasterkeyshiftcounter->maximum(64);
- simplemasterkeyshiftcounter->step(1);
- simplemasterkeyshiftcounter->callback((Fl_Callback*)cb_simplemasterkeyshiftcounter);
- o->lstep(12);
- o->value(master->Pkeyshift-64);
- } // Fl_Counter* simplemasterkeyshiftcounter
- { Fl_Button* o = new Fl_Button(5, 149, 115, 31, "Stop ALL sounds!");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)231);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Stop);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(70, 32, 50, 10, "Reset");
- o->tooltip("Master fine detune reset");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Reset);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Button* o
- { WidgetPDial* o = simpleglobalfinedetuneslider = new WidgetPDial(80, 45, 30, 30, "Fine Detune");
- simpleglobalfinedetuneslider->tooltip("global fine detune");
- simpleglobalfinedetuneslider->box(FL_ROUND_UP_BOX);
- simpleglobalfinedetuneslider->color(FL_BACKGROUND_COLOR);
- simpleglobalfinedetuneslider->selection_color(FL_INACTIVE_COLOR);
- simpleglobalfinedetuneslider->labeltype(FL_NORMAL_LABEL);
- simpleglobalfinedetuneslider->labelfont(0);
- simpleglobalfinedetuneslider->labelsize(11);
- simpleglobalfinedetuneslider->labelcolor(FL_FOREGROUND_COLOR);
- simpleglobalfinedetuneslider->maximum(127);
- simpleglobalfinedetuneslider->step(1);
- simpleglobalfinedetuneslider->value(64);
- simpleglobalfinedetuneslider->callback((Fl_Callback*)cb_simpleglobalfinedetuneslider);
- simpleglobalfinedetuneslider->align(Fl_Align(130));
- simpleglobalfinedetuneslider->when(FL_WHEN_CHANGED);
- o->value(master->microtonal.Pglobalfinedetune);
- } // WidgetPDial* simpleglobalfinedetuneslider
- { Fl_Counter* o = simplenpartcounter = new Fl_Counter(170, 40, 70, 20, "Part");
- simplenpartcounter->tooltip("The part number");
- simplenpartcounter->type(1);
- simplenpartcounter->labelfont(1);
- simplenpartcounter->minimum(0);
- simplenpartcounter->maximum(127);
- simplenpartcounter->step(1);
- simplenpartcounter->value(1);
- simplenpartcounter->textfont(1);
- simplenpartcounter->callback((Fl_Callback*)cb_simplenpartcounter);
- simplenpartcounter->align(Fl_Align(FL_ALIGN_LEFT));
- o->bounds(1,NUM_MIDI_PARTS);
- } // Fl_Counter* simplenpartcounter
- { Fl_Counter* o = new Fl_Counter(5, 195, 55, 20, "Keyb.Oct.");
- o->tooltip("Midi Octave");
- o->type(1);
- o->labelsize(11);
- o->minimum(0);
- o->maximum(5);
- o->step(1);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Keyb);
- o->align(Fl_Align(FL_ALIGN_RIGHT));
- o->when(FL_WHEN_RELEASE_ALWAYS);
- o->value(virkeys->midioct);
- } // Fl_Counter* o
- simplemasterwindow->end();
- } // Fl_Double_Window* simplemasterwindow
- { selectuiwindow = new Fl_Double_Window(430, 250, "User Interface mode");
- selectuiwindow->callback((Fl_Callback*)cb_selectuiwindow, (void*)(this));
- { Fl_Box* o = new Fl_Box(5, 5, 425, 40, "Welcome to ZynAddSubFX");
- o->labeltype(FL_SHADOW_LABEL);
- o->labelfont(1);
- o->labelsize(26);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(10, 50, 265, 25, "Please choose the interface mode:");
- o->labelfont(1);
- o->labelsize(13);
- } // Fl_Box* o
- { Fl_Button* o = new Fl_Button(10, 165, 100, 35, "Advanced");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)229);
- o->labelfont(1);
- o->labelsize(16);
- o->callback((Fl_Callback*)cb_Advanced);
- } // Fl_Button* o
- { Fl_Box* o = new Fl_Box(110, 165, 310, 35, ".. if you have used ZynAddSubFX before, or you like to have full controll to \
-all parameters.");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Button* o = new Fl_Button(10, 80, 100, 65, "Beginner");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)238);
- o->labelfont(1);
- o->labelsize(16);
- o->callback((Fl_Callback*)cb_Beginner);
- } // Fl_Button* o
- { Fl_Box* o = new Fl_Box(110, 75, 320, 75, "..if you are a beginner, you prefer using presets or you prefer to use simple\
-r user interfaces. Most functionality of ZynAddSubFX will be hidden in this mo\
-de to make simple the learning/using it.");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(30, 215, 360, 25, "You can switch the interface modes anytime you want.");
- o->box(FL_BORDER_BOX);
- o->color((Fl_Color)51);
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- selectuiwindow->set_non_modal();
- selectuiwindow->end();
- } // Fl_Double_Window* selectuiwindow
- return selectuiwindow;
-}
-
-void MasterUI::updatesendwindow() {
- for (int neff1=0;neff1<NUM_SYS_EFX;neff1++)
- for (int neff2=neff1+1;neff2<NUM_SYS_EFX;neff2++)
- syseffsend[neff1][neff2]->value(master->Psysefxsend[neff1][neff2]);
-}
-
-void MasterUI::updatepanel() {
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- panellistitem[npart]->refresh();
- };
-}
-
-void MasterUI::setfilelabel(const char *filename) {
- if (filename!=NULL) snprintf(&masterwindowlabel[0],100,"%s - ZynAddSubFX",fl_filename_name(filename));
- else snprintf(&masterwindowlabel[0],100,"%s","ZynAddSubFX");
- masterwindowlabel[99]='\0';
- masterwindow->label(&masterwindowlabel[0]);
- simplemasterwindow->label(&masterwindowlabel[0]);
-}
-
-MasterUI::MasterUI(Master *master_,int *exitprogram_) {
- master=master_;
- exitprogram=exitprogram_;
- ninseff=0;
- nsyseff=0;
- npart=0;
-
- for (int i=0;i<NUM_SYS_EFX;i++)
- for (int j=0;j<NUM_SYS_EFX;j++)
- syseffsend[i][j]=NULL;
-
- microtonalui=new MicrotonalUI(&master->microtonal);
- virkeyboard=new VirKeyboard(master);
- bankui=new BankUI(master,&npart);
- configui=new ConfigUI();
- sequi=new SeqUI(master);
-
- make_window();
- #ifdef OS_WINDOWS
- masterwindow->icon((char *)LoadIcon(GetModuleHandle(NULL), "zynaddsubfx_icon"));
- #endif
- presetsui=new PresetsUI();
- setfilelabel(NULL);
- swapefftype=0;
- simplerefresh();
-}
-
-MasterUI::~MasterUI() {
- masterwindow->hide();
- delete masterwindow;
- simplemasterwindow->hide();
- delete simplemasterwindow;
- aboutwindow->hide();
- delete aboutwindow;
- syseffsendwindow->hide();
- delete syseffsendwindow;
-
- delete virkeyboard;
- delete microtonalui;
- delete bankui;
- delete configui;
- delete sequi;
-
- delete presetsui;
- delete panelwindow;
- delete selectuiwindow;
-}
-
-void MasterUI::showUI() {
- switch (config.cfg.UserInterfaceMode){
- case 0:selectuiwindow->show();
- break;
- case 1:masterwindow->show();
- break;
- case 2:simplemasterwindow->show();
- break;
- };
-}
-
-void MasterUI::simplerefresh() {
- partenabled->value(master->part[npart]->Penabled);
- if (master->part[npart]->Penabled!=0) simplelistitemgroup->activate();
- else simplelistitemgroup->deactivate();
-
- partvolume->value(master->part[npart]->Pvolume);
- partpanning->value(master->part[npart]->Ppanning);
- partrcv->value(master->part[npart]->Prcvchn);
-
- if (master->part[npart]->Pname[0]!=0) partname->label((char *)master->part[npart]->Pname);
- else partname->label("Click here to load a instrument");
-
- simplelistitemgroup->redraw();
- simplepartportamento->value(master->part[npart]->ctl.portamento.portamento);
- simpleminkcounter->value(master->part[npart]->Pminkey);
- simplemaxkcounter->value(master->part[npart]->Pmaxkey);
-
- simplepartkeyshiftcounter->value(master->part[npart]->Pkeyshift-64);
- simplesyseffsend->value(master->Psysefxvol[nsyseff][npart]);
-}
-
-void MasterUI::do_new_master() {
- if (fl_choice("Clear *ALL* the parameters ?","No","Yes",NULL)){
- delete microtonalui;
-
- pthread_mutex_lock(&master->mutex);
- master->defaults();
- pthread_mutex_unlock(&master->mutex);
-
- npartcounter->value(1);
- refresh_master_ui();
-
- };
-
- updatepanel();
-}
-
-void MasterUI::do_load_master(const char* file ) {
- const char *filename;
- if (file == NULL) {
- filename=fl_file_chooser("Open:","({*.xmz})",NULL,0);
- if (filename==NULL) return;
- }
- else {
- filename = file;
- }
-
-
- pthread_mutex_lock(&master->mutex);
- //clear all parameters
- master->defaults();
-
- //load the data
- int result=master->loadXML(filename);
- pthread_mutex_unlock(&master->mutex);
- master->applyparameters();
-
- npartcounter->value(1);
- refresh_master_ui();
- updatepanel();
- if (result>=0) setfilelabel(filename);
-
-
- if (result==-10) fl_alert("Error: Could not load the file\nbecause it is not a zynaddsubfx parameters file.");
- else if (result<0) fl_alert("Error: Could not load the file.");
-}
-
-void MasterUI::do_save_master(const char* file ) {
- const char *filename;
- char *tmp;
- int result=0;
- if (file == NULL) {
- tmp=fl_file_chooser("Save:","({*.xmz})",NULL,0);
- if (tmp==NULL) return;
- tmp=fl_filename_setext(tmp,".xmz");
- filename=tmp;
- result=fileexists(tmp);
- if (result) {
- result=0;
- if (!fl_choice("The file exists. Overwrite it?","No","Yes",NULL)) return;
-
- }
- }
- else {
- filename = file;
- }
-
-
- pthread_mutex_lock(&master->mutex);
- result=master->saveXML(filename);
- pthread_mutex_unlock(&master->mutex);
-
- if (result<0) fl_alert("Error: Could not save the file.");
- else setfilelabel(filename);
-
- updatepanel();
-}
-
-void MasterUI::refresh_master_ui() {
- ninseff=0;
- nsyseff=0;
- npart=0;
-
- //the Master UI
- npartcounter->do_callback();
- syseffnocounter->do_callback();
- inseffnocounter->do_callback();
- masterkeyshiftcounter->value(master->Pkeyshift-64);
- mastervolumedial->value(master->Pvolume);
- globalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
- microtonalui=new MicrotonalUI(&master->microtonal);
- nrpnbutton->value(master->ctl.NRPN.receive);
- updatesendwindow();
- updatepanel();
-
- //the simle MasterUI
- simplenpartcounter->value(1);
- simplesyseffnocounter->value(1);
- simpleinseffnocounter->value(1);
- simplenpartcounter->do_callback();
- simplesyseffnocounter->do_callback();
- simpleinseffnocounter->do_callback();
- simplemasterkeyshiftcounter->value(master->Pkeyshift-64);
- simplemastervolumedial->value(master->Pvolume);
- simpleglobalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
- virkeys->midich=master->part[npart]->Prcvchn;
-
- simplerefresh();
- bankui->hide();
-}
diff --git a/plugins/zynaddsubfx/src/UI/MasterUI.fl b/plugins/zynaddsubfx/src/UI/MasterUI.fl
deleted file mode 100644
index b97b773..0000000
--- a/plugins/zynaddsubfx/src/UI/MasterUI.fl
+++ /dev/null
@@ -1,1815 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0110
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2009 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <string.h>} {public
-}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include "ADnoteUI.h"} {public
-}
-
-decl {\#include "SUBnoteUI.h"} {public
-}
-
-decl {\#include "EffUI.h"} {public
-}
-
-decl {\#include "VirKeyboard.h"} {public
-}
-
-decl {\#include "ConfigUI.h"} {public
-}
-
-decl {\#include "BankUI.h"} {public
-}
-
-decl {\#include "PartUI.h"} {public
-}
-
-decl {\#include "MicrotonalUI.h"} {public
-}
-
-decl {\#include "SeqUI.h"} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-decl {\#include "../Misc/Master.h"} {public
-}
-
-decl {\#include "../Misc/Part.h"} {public
-}
-
-decl {\#include "../Misc/Util.h"} {public
-}
-
-decl {\#include "../globals.h"} {public
-}
-
-class VUMeter {: {public Fl_Box}
-} {
- Function {VUMeter(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {master=NULL;
-npart=-1;} {}
- }
- Function {init(Master *master_,int part_)} {} {
- code {//the "part_" parameters sets the part (if it is >=0), else it sets the master
-master=master_;
-label(NULL);
-npart=part_;
-olddbl=0.0;
-olddbr=0.0;
-oldrmsdbl=0.0;
-oldrmsdbr=0.0;} {}
- }
- Function {draw_master()} {} {
- code {\#define MIN_DB (-48)
-
-int ox=x(); int oy=y(); int lx=w(); int ly=h();
-
-pthread_mutex_lock(&master->mutex);
-REALTYPE dbl=rap2dB(master->vuoutpeakl);
-REALTYPE dbr=rap2dB(master->vuoutpeakr);
-REALTYPE rmsdbl=rap2dB(master->vurmspeakl);
-REALTYPE rmsdbr=rap2dB(master->vurmspeakr);
-REALTYPE maxdbl=rap2dB(master->vumaxoutpeakl);
-REALTYPE maxdbr=rap2dB(master->vumaxoutpeakr);
-int clipped=master->vuclipped;
-pthread_mutex_unlock(&master->mutex);
-
-dbl=(MIN_DB-dbl)/MIN_DB;
-if (dbl<0.0) dbl=0.0;
- else if (dbl>1.0)dbl=1.0;
-
-dbr=(MIN_DB-dbr)/MIN_DB;
-if (dbr<0.0) dbr=0.0;
- else if (dbr>1.0) dbr=1.0;
-
-dbl=dbl*0.4+olddbl*0.6;
-dbr=dbr*0.4+olddbr*0.6;
-
-olddbl=dbl;
-olddbr=dbr;
-
-\#define VULENX (lx-35)
-\#define VULENY (ly/2-3)
-
-dbl*=VULENX;dbr*=VULENX;
-
-int idbl=(int) dbl;
-int idbr=(int) dbr;
-
-//compute RMS - start
-rmsdbl=(MIN_DB-rmsdbl)/MIN_DB;
-if (rmsdbl<0.0) rmsdbl=0.0;
- else if (rmsdbl>1.0) rmsdbl=1.0;
-
-rmsdbr=(MIN_DB-rmsdbr)/MIN_DB;
-if (rmsdbr<0.0) rmsdbr=0.0;
- else if (rmsdbr>1.0) rmsdbr=1.0;
-
-rmsdbl=rmsdbl*0.4+oldrmsdbl*0.6;
-rmsdbr=rmsdbr*0.4+oldrmsdbr*0.6;
-
-oldrmsdbl=rmsdbl;
-oldrmsdbr=rmsdbr;
-
-
-rmsdbl*=VULENX;rmsdbr*=VULENX;
-
-int irmsdbl=(int) rmsdbl;
-int irmsdbr=(int) rmsdbr;
-//compute RMS - end
-
-
-
-//draw the vu-meter lines
-//db
-fl_rectf(ox,oy,idbr,VULENY,0,200,255);
-fl_rectf(ox,oy+ly/2,idbl,VULENY,0,200,255);
-//black
-fl_rectf(ox+idbr,oy,VULENX-idbr,VULENY,0,0,0);
-fl_rectf(ox+idbl,oy+ly/2,VULENX-idbl,VULENY,0,0,0);
-
-//draw the scales
-REALTYPE tmp=VULENX*1.0/MIN_DB;
-for (int i=1;i<1-MIN_DB;i++){
- int tx=VULENX+(int) (tmp*i);
- fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,160,200);
- if (i%5==0) fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,230,240);
- if (i%10==0) fl_rectf(ox+tx-1,oy,2,VULENY+ly/2,0,225,255);
-};
-
-//rms
-if (irmsdbr>2) fl_rectf(ox+irmsdbr-1,oy,3,VULENY,255,255,0);
-if (irmsdbl>2) fl_rectf(ox+irmsdbl-1,oy+ly/2,3,VULENY,255,255,0);
-
-
-//draw the red box if clipping has occured
-if (clipped==0) fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,0,0,10);
- else fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,250,10,10);
-
-//draw the maxdB
-fl_font(FL_HELVETICA|FL_BOLD,10);
-fl_color(255,255,255);
-char tmpstr[10];
-if ((maxdbl>MIN_DB-20)){
- snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbr);
- fl_draw(tmpstr,ox+VULENX+1,oy+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
-};
-if ((maxdbr>MIN_DB-20)){
- snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbl);
- fl_draw(tmpstr,ox+VULENX+1,oy+ly/2+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
-};} {}
- }
- Function {draw_part()} {} {
- code {\#define MIN_DB (-48)
-int ox=x(); int oy=y(); int lx=w(); int ly=h();
-
-if (!active_r()){
- pthread_mutex_lock(&master->mutex);
- int fakedb=master->fakepeakpart[npart];
- pthread_mutex_unlock(&master->mutex);
- fl_rectf(ox,oy,lx,ly,140,140,140);
- if (fakedb>0){
- fakedb=(int)(fakedb/255.0*ly)+4;
- fl_rectf(ox+2,oy+ly-fakedb,lx-4,fakedb,0,0,0);
- };
-
- return;
-};
-
-//draw the vu lines
-pthread_mutex_lock(&master->mutex);
- REALTYPE db=rap2dB(master->vuoutpeakpart[npart]);
-pthread_mutex_unlock(&master->mutex);
-
-db=(MIN_DB-db)/MIN_DB;
-if (db<0.0) db=0.0;
- else if (db>1.0) db=1.0;
-
-db*=ly-2;
-
-int idb=(int) db;
-
-fl_rectf(ox,oy+ly-idb,lx,idb,0,200,255);
-fl_rectf(ox,oy,lx,ly-idb,0,0,0);
-
-
-//draw the scales
-REALTYPE tmp=ly*1.0/MIN_DB;
- for (int i=1;i<1-MIN_DB;i++){
- int ty=ly+(int) (tmp*i);
- if (i%5==0) fl_rectf(ox,oy+ly-ty,lx,1,0,160,200);
- if (i%10==0) fl_rectf(ox,oy+ly-ty,lx,1,0,230,240);
-};} {}
- }
- Function {draw()} {} {
- code {if (npart>=0) draw_part();
- else draw_master();} {}
- }
- Function {tickdraw(VUMeter *o)} {return_type {static void}
- } {
- code {o->redraw();} {}
- }
- Function {tick(void *v)} {return_type {static void}
- } {
- code {tickdraw((VUMeter *) v);
-Fl::add_timeout(1.0/25.0,tick,v);//25 fps} {}
- }
- Function {handle(int event)} {return_type int
- } {
- code {switch(event){
- case FL_SHOW:
- tick(this);
- break;
- case FL_HIDE:
- Fl::remove_timeout(tick,this);
- break;
- case FL_PUSH:
- if (npart>=0) break;
- pthread_mutex_lock(&master->mutex);
- master->vuresetpeaks();
- pthread_mutex_unlock(&master->mutex);
- break;
-};
-return(1);} {}
- }
- decl {Master *master;} {}
- decl {int npart;} {}
- decl {float olddbl,olddbr;} {}
- decl {float oldrmsdbl,oldrmsdbr;} {}
-}
-
-class SysEffSend {: {public WidgetPDial}
-} {
- Function {SysEffSend(int x,int y, int w, int h, const char *label=0):WidgetPDial(x,y,w,h,label)} {} {
- code {master=NULL;
-neff1=0;
-neff2=0;} {}
- }
- Function {init(Master *master_,int neff1_,int neff2_)} {} {
- code {neff1=neff1_;
-neff2=neff2_;
-master=master_;
-minimum(0);
-maximum(127);
-step(1);
-labelfont(1);
-labelsize(10);
-align(FL_ALIGN_TOP);
-
-value(master->Psysefxsend[neff1][neff2]);
-char tmp[20];snprintf(tmp,20,"%d->%d",neff1+1,neff2+1);
-this->copy_label(tmp);} {}
- }
- Function {~SysEffSend()} {} {
- code {hide();} {}
- }
- Function {handle(int event)} {return_type int
- } {
- code {if ((event==FL_PUSH) || (event==FL_DRAG)){
- master->setPsysefxsend(neff1,neff2,(int) value());
-};
-
-return(WidgetPDial::handle(event));} {}
- }
- decl {Master *master;} {}
- decl {int neff1;} {}
- decl {int neff2;} {}
-}
-
-class Panellistitem {: {public Fl_Group}
-} {
- Function {make_window()} {private
- } {
- Fl_Window panellistitem {
- private xywh {315 213 70 260} type Double hide
- class Fl_Group
- } {
- Fl_Group panellistitemgroup {
- private xywh {0 20 70 240} box PLASTIC_THIN_UP_BOX
- code0 {if (master->part[npart]->Penabled==0) o->deactivate();}
- } {
- Fl_Group {} {
- xywh {45 65 15 110} box ENGRAVED_FRAME
- } {
- Fl_Box {} {
- label {V U}
- xywh {45 65 15 110} box FLAT_BOX color 0 selection_color 75 labelcolor 55 align 128
- code0 {o->init(master,npart);}
- class VUMeter
- }
- }
- Fl_Button partname {
- label { }
- callback {if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
-};
-bankui->show();}
- xywh {5 27 60 30} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 10 align 208
- }
- Fl_Slider partvolume {
- callback {master->part[npart]->setPvolume((int) o->value());}
- xywh {10 65 30 110} type {Vert Knob} box FLAT_BOX minimum 127 maximum 0 step 1 value 127
- code0 {o->value(master->part[npart]->Pvolume);}
- }
- Fl_Dial partpanning {
- callback {master->part[npart]->setPpanning((int) o->value());}
- xywh {20 180 30 30} maximum 127 step 1
- code0 {o->value(master->part[npart]->Ppanning);}
- class WidgetPDial
- }
- Fl_Button {} {
- label edit
- callback {if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
-};}
- xywh {15 235 40 20} box PLASTIC_UP_BOX labelsize 10
- }
- Fl_Choice partrcv {
- callback {master->part[npart]->Prcvchn=(int) o->value();}
- tooltip {receive from Midi channel} xywh {10 213 50 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Ch%d",i+1);if (i!=9) o->add(nrstr); else o->add("Dr10");};}
- code1 {o->value(master->part[npart]->Prcvchn);}
- } {}
- }
- Fl_Check_Button partenabled {
- label 01
- callback {pthread_mutex_lock(&master->mutex);
- master->partonoff(npart,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-
-if ((int) o->value()==0) panellistitemgroup->deactivate();
- else {
- panellistitemgroup->activate();
- if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
- };
-};
-
-o->redraw();}
- private xywh {5 0 45 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 24
- code0 {char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);}
- code1 {o->value(master->part[npart]->Penabled);}
- }
- }
- }
- Function {Panellistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {npart=0;
-master=NULL;
-bankui=NULL;} {}
- }
- Function {init(Master *master_, int npart_,BankUI *bankui_)} {} {
- code {npart=npart_;
-master=master_;
-bankui=bankui_;
-
-make_window();
-panellistitem->show();
-end();} {}
- }
- Function {refresh()} {} {
- code {partenabled->value(master->part[npart]->Penabled);
-if (master->part[npart]->Penabled!=0) panellistitemgroup->activate();
- else panellistitemgroup->deactivate();
-
-partvolume->value(master->part[npart]->Pvolume);
-partpanning->value(master->part[npart]->Ppanning);
-partrcv->value(master->part[npart]->Prcvchn);
-
-partname->label((char *)master->part[npart]->Pname);
-
-if ((int)bankui->cbwig->value()!=(npart+1))
- panellistitemgroup->color(fl_rgb_color(160,160,160));
-else
- panellistitemgroup->color(fl_rgb_color(50,190,240));
-
-panellistitemgroup->redraw();} {}
- }
- Function {~Panellistitem()} {} {
- code {panellistitem->hide();
-//delete(panellistitem);} {}
- }
- decl {int npart;} {}
- decl {Master *master;} {}
- decl {BankUI *bankui;} {}
-}
-
-class MasterUI {} {
- Function {make_window()} {} {
- Fl_Window masterwindow {
- label zynaddsubfx
- callback {\#ifdef VSTAUDIOOUT
-fl_alert("ZynAddSubFX could not be closed this way, because it's a VST plugin. Please use the host aplication to close it.");
-\#else
-//if (fl_choice("Exit and leave the unsaved data?","No","Yes",NULL)) {
- config.save();
- *exitprogram=1;
-//};
-\#endif}
- xywh {585 104 390 465} type Double xclass zynaddsubfx visible
- } {
- Fl_Menu_Bar mastermenu {
- xywh {-5 0 690 25}
- } {
- Submenu {} {
- label {&File}
- xywh {0 0 100 20}
- } {
- MenuItem {} {
- label {&New (erase all)...}
- callback {do_new_master();}
- xywh {20 20 100 20}
- }
- MenuItem {} {
- label {&Open Parameters...}
- callback {do_load_master();}
- xywh {20 20 100 20}
- }
- MenuItem {} {
- label {&Save All Parameters...}
- callback {do_save_master();}
- xywh {10 10 100 20} divider
- }
- MenuItem {} {
- label {&Load Scale Settings...}
- callback {char *filename;
-filename=fl_file_chooser("Open:","({*.xsz})",NULL,0);
-if (filename==NULL) return;
-
-pthread_mutex_lock(&master->mutex);
- //clear all parameters
- master->microtonal.defaults();
-
- //load the data
- int result=master->microtonal.loadXML(filename);
-pthread_mutex_unlock(&master->mutex);
-
-
- delete microtonalui;
- microtonalui=new MicrotonalUI(&master->microtonal);
-
-if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a scale file.");
- else if (result<0) fl_alert("Error: Could not load the file.");}
- xywh {35 35 100 20}
- }
- MenuItem {} {
- label {Save Sc&ale Settings ..}
- callback {char *filename;
-int result=0;
-
-filename=fl_file_chooser("Save:","({*.xsz})",NULL,0);
-if (filename==NULL) return;
-filename=fl_filename_setext(filename,".xsz");
-
-result=fileexists(filename);
-if (result) {
- result=0;
- if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return;
-
-};
-
-
-pthread_mutex_lock(&master->mutex);
-result=master->microtonal.saveXML(filename);
-pthread_mutex_unlock(&master->mutex);
-
-if (result<0) fl_alert("Error: Could not save the file.");
-
-
-updatepanel();}
- xywh {25 25 100 20}
- }
- MenuItem {} {
- label {Show Scale Settings...}
- callback {microtonalui->show();}
- xywh {0 0 100 20} divider
- }
- MenuItem {} {
- label {&Settings...}
- callback {configui->show();}
- xywh {25 25 100 20} divider
- }
- MenuItem {} {
- label {&Copyright...}
- callback {aboutwindow->show();}
- xywh {15 15 100 20} divider
- }
- MenuItem {} {
- label {E&xit}
- callback {masterwindow->do_callback();}
- xywh {10 10 100 20}
- }
- }
- Submenu {} {
- label {&Instrument}
- xywh {10 10 100 20}
- } {
- MenuItem {} {
- label {&Clear Instrument...}
- callback {if (fl_choice("Clear instrument's parameters ?","No","Yes",NULL)){
-// int npart=(int)npartcounter->value()-1;
- pthread_mutex_lock(&master->mutex);
- master->part[npart]->defaultsinstrument();
- pthread_mutex_unlock(&master->mutex);
-
- npartcounter->do_callback();
-};
-
-updatepanel();}
- xywh {35 35 100 20}
- }
- MenuItem {} {
- label {&Open Instrument...}
- callback {const char *filename;
-filename=fl_file_chooser("Load:","({*.xiz})",NULL,0);
-if (filename==NULL) return;
-
-
-pthread_mutex_lock(&master->mutex);
-// int npart=(int)npartcounter->value()-1;
-
- //clear all instrument parameters, first
- master->part[npart]->defaultsinstrument();
-
- //load the instr. parameters
- int result=master->part[npart]->loadXMLinstrument(filename);
-
-pthread_mutex_unlock(&master->mutex);
-master->part[npart]->applyparameters();
-
-npartcounter->do_callback();
-updatepanel();
-
-if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file.");
- else if (result<0) fl_alert("Error: Could not load the file.");}
- xywh {30 30 100 20}
- }
- MenuItem {} {
- label {&Save Instrument ...}
- callback {char *filename;
-
-filename=fl_file_chooser("Save:","({*.xiz})",NULL,0);
-if (filename==NULL) return;
-filename=fl_filename_setext(filename,".xiz");
-
-int result=fileexists(filename);
-if (result) {
- result=0;
- if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return;
-
-};
-
-
-pthread_mutex_lock(&master->mutex);
-result=master->part[npart]->saveXML(filename);
-pthread_mutex_unlock(&master->mutex);
-
-if (result<0) fl_alert("Error: Could not save the file.");
-
-updatepanel();}
- xywh {20 20 100 20} divider
- }
- MenuItem {} {
- label {Show Instrument &Bank...}
- callback {bankui->show();}
- xywh {0 0 100 20} divider
- }
- MenuItem {} {
- label {&Virtual Keyboard...}
- callback {virkeyboard->show();}
- xywh {10 10 100 20}
- }
- }
- Submenu recordmenu {
- label {&Record}
- xywh {0 0 100 20}
- } {
- MenuItem {} {
- label {&Choose WAV file...}
- callback {char *filename;
-recordbutton->deactivate();
-pausebutton->deactivate();
-pauselabel->deactivate();
-stopbutton->deactivate();
-filename=fl_file_chooser("Record to audio file:","(*.wav)",NULL,0);
-if (filename==NULL) return;
-fl_filename_setext(filename,".wav");
-
-int result=master->HDDRecorder.preparefile(filename,0);
-if (result==1) {
- result=0;
- if (fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL))
- master->HDDRecorder.preparefile(filename,1);
-};
-if (result==0) recordbutton->activate();
-
-if (result!=0) fl_alert("Error: Could not save the file.");}
- xywh {0 0 100 20}
- }
- }
- Submenu {} {
- label {&Sequencer}
- xywh {0 0 100 20} hide
- } {
- MenuItem {} {
- label {Show &Sequencer...}
- callback {sequi->show();}
- xywh {0 0 100 20}
- }
- }
- Submenu {} {
- label Misc
- xywh {10 10 100 20}
- } {
- MenuItem {} {
- label {Switch User Interface Mode}
- callback {if (fl_choice("Switch the User Interface to Beginner mode ?","No","Yes",NULL)){
- masterwindow->hide();
- refresh_master_ui();
- simplemasterwindow->show();
- config.cfg.UserInterfaceMode=2;
-};}
- xywh {10 10 100 20}
- }
- }
- }
- Fl_Dial mastervolumedial {
- label {M.Vol}
- callback {master->setPvolume((int) o->value());}
- tooltip {Master Volume} xywh {5 30 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 align 130 maximum 127 step 1
- code0 {o->value(master->Pvolume);}
- class WidgetPDial
- }
- Fl_Counter masterkeyshiftcounter {
- label {Master KeyShift}
- callback {master->setPkeyshift((int) o->value()+64);}
- xywh {45 31 90 20} labelsize 11 minimum -64 maximum 64 step 1
- code0 {o->lstep(12);}
- code1 {o->value(master->Pkeyshift-64);}
- }
- Fl_Button {} {
- label {Panic!}
- callback {virkeyboard->relaseallkeys();
-pthread_mutex_lock(&master->mutex);
-master->shutup=1;
-pthread_mutex_unlock(&master->mutex);}
- xywh {293 29 92 31} box PLASTIC_UP_BOX color 231 labelfont 1
- }
- Fl_Group partuigroup {
- xywh {0 242 390 183} box ENGRAVED_FRAME
- } {
- Fl_Group partui {
- xywh {4 245 383 175} box FLAT_BOX
- code0 {o->init(master->part[0],master,0,bankui);}
- code1 {o->show();}
- class PartUI
- } {}
- }
- Fl_Tabs {} {
- xywh {0 80 390 160}
- } {
- Fl_Group {} {
- label {System Effects}
- xywh {0 100 390 140} box ENGRAVED_FRAME labeltype EMBOSSED_LABEL labelsize 15 align 25
- } {
- Fl_Counter syseffnocounter {
- label {Sys.Effect No.}
- callback {nsyseff=(int) o->value()-1;
-sysefftype->value(master->sysefx[nsyseff]->geteffect());
-syseffectui->refresh(master->sysefx[nsyseff]);}
- xywh {5 120 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1
- code0 {o->bounds(1,NUM_SYS_EFX);}
- code1 {o->value(nsyseff+1);}
- }
- Fl_Choice sysefftype {
- label EffType
- callback {pthread_mutex_lock(&master->mutex);
-master->sysefx[nsyseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(&master->mutex);
-syseffectui->refresh(master->sysefx[nsyseff]);}
- xywh {315 125 70 15} down_box BORDER_BOX labelsize 10
- code0 {o->value(master->sysefx[nsyseff]->geteffect());}
- } {
- MenuItem {} {
- label {No Effect}
- xywh {10 10 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Reverb
- xywh {20 20 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Echo
- xywh {30 30 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Chorus
- xywh {40 40 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Phaser
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label AlienWah
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Distortion
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label EQ
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label DynFilter
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Group syseffectuigroup {
- xywh {5 140 380 95} box FLAT_BOX color 48
- } {
- Fl_Group syseffectui {
- xywh {5 140 380 95}
- code0 {o->init(master->sysefx[nsyseff]);}
- class EffUI
- } {}
- }
- Fl_Button {} {
- label {Send to...}
- callback {syseffsendwindow->show();}
- xywh {95 120 75 20} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(master->sysefx[nsyseff]);}
- xywh {215 124 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {pthread_mutex_lock(&master->mutex);
-presetsui->paste(master->sysefx[nsyseff],syseffectui);
-pthread_mutex_unlock(&master->mutex);}
- xywh {245 124 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- }
- Fl_Group {} {
- label {Insertion Effects}
- xywh {0 100 390 140} box ENGRAVED_FRAME labeltype EMBOSSED_LABEL labelsize 15 align 25 hide
- } {
- Fl_Counter inseffnocounter {
- label {Ins.Effect No.}
- callback {ninseff=(int) o->value()-1;
-insefftype->value(master->insefx[ninseff]->geteffect());
-inseffpart->value(master->Pinsparts[ninseff]+2);
-inseffectui->refresh(master->insefx[ninseff]);
-
-if (master->Pinsparts[ninseff]!=-1) {
- insefftype->activate();
- inseffectui->activate();
- inseffectuigroup->activate();
-} else {
- insefftype->deactivate();
- inseffectui->deactivate();
- inseffectuigroup->deactivate();
-};}
- xywh {5 120 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1
- code0 {o->bounds(1,NUM_INS_EFX);}
- code1 {o->value(ninseff+1);}
- }
- Fl_Choice insefftype {
- label EffType
- callback {pthread_mutex_lock(&master->mutex);
-master->insefx[ninseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(&master->mutex);
-inseffectui->refresh(master->insefx[ninseff]);
-inseffectui->show();}
- xywh {315 125 70 15} down_box BORDER_BOX labelsize 10
- code0 {o->value(master->insefx[ninseff]->geteffect());}
- code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();}
- } {
- MenuItem {} {
- label {No Effect}
- xywh {25 25 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Reverb
- xywh {35 35 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Echo
- xywh {45 45 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Chorus
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Phaser
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label AlienWah
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Distortion
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label EQ
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label DynFilter
- xywh {100 100 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Group inseffectuigroup {
- xywh {5 140 380 95} box FLAT_BOX color 48
- } {
- Fl_Group inseffectui {
- xywh {5 140 380 95}
- code0 {o->init(master->insefx[ninseff]);}
- code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();}
- class EffUI
- } {}
- }
- Fl_Choice inseffpart {
- label {Insert To.}
- callback {master->Pinsparts[ninseff]=(int) o->value()-2;
-if ((int) o->value()==1){
- inseffectuigroup->deactivate();
- insefftype->deactivate();
- inseffectui->deactivate();
-} else {
- inseffectuigroup->activate();
- insefftype->activate();
- inseffectui->activate();
-};
-master->insefx[ninseff]->cleanup();} open
- xywh {95 120 80 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 10
- code0 {o->add("Master Out");o->add("Off");}
- code1 {char tmp[50]; for (int i=0;i<NUM_MIDI_PARTS;i++) {sprintf(tmp,"Part %2d",i+1);o->add(tmp);};}
- code3 {o->value(master->Pinsparts[ninseff]+2);}
- } {}
- Fl_Button {} {
- label C
- callback {presetsui->copy(master->insefx[ninseff]);}
- xywh {215 124 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {pthread_mutex_lock(&master->mutex);
-presetsui->paste(master->insefx[ninseff],inseffectui);
-pthread_mutex_unlock(&master->mutex);}
- xywh {245 124 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- }
- }
- Fl_Button {} {
- label Scales
- callback {microtonalui->show();}
- xywh {330 80 56 19} box PLASTIC_UP_BOX color 231 labeltype ENGRAVED_LABEL labelfont 1
- }
- Fl_Group {} {
- xywh {172 30 117 45} box ENGRAVED_BOX
- } {
- Fl_Button recordbutton {
- label {Rec.}
- callback {o->deactivate();
-recordmenu->deactivate();
-recordmenu->label("&Record(*)");
-stopbutton->activate();
-pausebutton->activate();
-pauselabel->activate();
-master->HDDRecorder.start();
-master->vuresetpeaks();
-mastermenu->redraw();}
- tooltip {Start Recording} xywh {181 36 21 21} box ROUND_UP_BOX color 88 labelfont 1 labelsize 10 align 2 deactivate
- }
- Fl_Button stopbutton {
- label Stop
- callback {o->deactivate();
-master->HDDRecorder.stop();
-recordbutton->deactivate();
-pausebutton->deactivate();
-pauselabel->deactivate();
-recordmenu->activate();
-recordmenu->label("&Record");
-mastermenu->redraw();}
- tooltip {Stop Recording and close the audio file} xywh {259 36 21 21} box THIN_UP_BOX color 4 labelfont 1 labelsize 10 align 2 deactivate
- }
- Fl_Button pausebutton {
- label {@||}
- callback {o->deactivate();
-master->HDDRecorder.pause();
-recordbutton->activate();
-mastermenu->redraw();}
- tooltip {Pause Recording} xywh {220 36 21 21} box THIN_UP_BOX color 4 selection_color 4 labelfont 1 labelcolor 3 align 16 deactivate
- }
- Fl_Box pauselabel {
- label Pause
- xywh {214 56 30 15} labelfont 1 labelsize 10 deactivate
- }
- }
- Fl_Group {} {
- xywh {1 427 389 33} box ENGRAVED_FRAME
- } {
- Fl_Box {} {
- label {VU-Meter}
- xywh {4 430 384 30} box FLAT_BOX color 48 selection_color 75
- code0 {o->init(master,-1);}
- class VUMeter
- }
- }
- Fl_Check_Button nrpnbutton {
- label NRPN
- callback {master->ctl.NRPN.receive=(int) o->value();}
- tooltip {Receive NRPNs} xywh {45 65 47 10} down_box DOWN_BOX labelsize 10
- code0 {o->value(master->ctl.NRPN.receive);}
- }
- Fl_Counter npartcounter {
- callback {int nval=(int) o->value()-1;
-partuigroup->remove(partui);
-delete partui;
-partui=new PartUI(0,0,765,525);
-partuigroup->add(partui);
-partui->init(master->part[nval],master,nval,bankui);
-partui->redraw();
-o->redraw();
-npart=nval;
-
-updatepanel();
-simplenpartcounter->value(nval+1);
-simplenpartcounter->do_callback();}
- tooltip {The part number} xywh {5 247 70 23} type Simple labelfont 1 minimum 0 maximum 127 step 1 value 1 textfont 1
- code0 {o->bounds(1,NUM_MIDI_PARTS);}
- code1 {bankui->init(o);}
- }
- Fl_Button {} {
- label vK
- callback {virkeyboard->show();}
- tooltip {Virtual Keyboard} xywh {292 80 35 19} box PLASTIC_UP_BOX color 231 labeltype ENGRAVED_LABEL labelfont 1
- }
- Fl_Button {} {
- label {R.D.}
- callback {globalfinedetuneslider->value(64.0);
-globalfinedetuneslider->do_callback();}
- tooltip {Master fine detune reset} xywh {140 65 30 10} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Dial globalfinedetuneslider {
- label {F.Det.}
- callback {master->microtonal.Pglobalfinedetune=(int) o->value();}
- tooltip {global fine detune} xywh {143 30 20 20} box ROUND_UP_BOX labelsize 10 align 130 maximum 127 step 1 value 64
- code0 {o->value(master->microtonal.Pglobalfinedetune);}
- class WidgetPDial
- }
- Fl_Button {} {
- label {Panel Window}
- callback {updatepanel();
-panelwindow->show();}
- tooltip {Panel Window} xywh {293 62 92 16} box PLASTIC_UP_BOX color 183 labelfont 1 labelsize 10
- }
- }
- Fl_Window aboutwindow {
- label {Copyright...}
- xywh {411 344 365 280} type Double hide
- } {
- Fl_Box {} {
- label {Copyright (c) 2002-2009 Nasca O. PAUL and others. Please read AUTHORS.txt}
- xywh {15 35 335 55} labeltype EMBOSSED_LABEL labelsize 15 align 208
- }
- Fl_Box {} {
- label {This is free software; you may redistribute it and/or modify it under the terms of the
-version 2 (or any later version) of the GNU General Public License as published by the Free Software Fundation.
- This program comes with
- ABSOLUTELY NO WARRANTY.
- See the version 2 (or any later version) of the
-GNU General Public License for details.}
- xywh {15 90 335 145} labelfont 1 labelsize 11 align 144
- }
- Fl_Button {} {
- label {Close this window}
- callback {aboutwindow->hide();}
- xywh {80 245 190 25} box THIN_UP_BOX labelsize 11
- }
- Fl_Box {} {
- label ZynAddSubFX
- xywh {15 5 335 30} labeltype EMBOSSED_LABEL labelfont 1 labelsize 20 align 16
- }
- }
- Fl_Window syseffsendwindow {
- label {System Effects Send}
- xywh {171 234 120 250} type Double hide resizable
- } {
- Fl_Scroll {} {open
- xywh {0 45 120 170} box FLAT_BOX resizable
- code0 {for (int neff1=0;neff1<NUM_SYS_EFX;neff1++) for (int neff2=neff1+1;neff2<NUM_SYS_EFX;neff2++)}
- code1 {{syseffsend[neff1][neff2]=new SysEffSend(o->x()+(neff2-1)*35,o->y()+15+neff1*50,30,30);syseffsend[neff1][neff2]->label("aaa");syseffsend[neff1][neff2]->init(master,neff1,neff2);};}
- } {}
- Fl_Button {} {
- label Close
- callback {syseffsendwindow->hide();}
- xywh {25 220 80 25} box THIN_UP_BOX
- }
- Fl_Box {} {
- label {Send system effect's output to other system effects}
- xywh {5 5 110 35} labelsize 10 align 192
- }
- }
- Fl_Window panelwindow {
- label {ZynAddSubFX Panel}
- xywh {89 59 630 635} type Double hide
- } {
- Fl_Scroll {} {
- xywh {0 5 570 310} type HORIZONTAL box THIN_UP_BOX
- } {
- Fl_Pack {} {
- xywh {5 10 560 285} type HORIZONTAL
- code0 {for (int i=0;i<NUM_MIDI_PARTS/2;i++){panellistitem[i]=new Panellistitem(0,0,70,260,"");panellistitem[i]->init(master,i,bankui);}}
- } {}
- }
- Fl_Scroll {} {
- xywh {0 320 570 310} type HORIZONTAL box THIN_UP_BOX
- } {
- Fl_Pack {} {
- xywh {5 325 560 285} type HORIZONTAL
- code0 {for (int i=NUM_MIDI_PARTS/2;i<NUM_MIDI_PARTS;i++){panellistitem[i]=new Panellistitem(0,0,70,260,"");panellistitem[i]->init(master,i,bankui);}}
- } {}
- }
- Fl_Button {} {
- label Close
- callback {panelwindow->hide();
-updatepanel();}
- xywh {575 605 50 25} box THIN_UP_BOX labelsize 13
- }
- Fl_Button {} {
- label Refresh
- callback {updatepanel();}
- xywh {575 570 55 25} box THIN_UP_BOX labelsize 13
- }
- }
- Fl_Window simplemasterwindow {
- label ZynAddSubFX
- callback {\#ifdef VSTAUDIOOUT
-fl_alert("ZynAddSubFX could not be closed this way, because it's a VST plugin. Please use the host aplication to close it.");
-\#else
-//if (fl_choice("Exit and leave the unsaved data?","No","Yes",NULL)) {
- config.save();
- *exitprogram=1;
-//};
-\#endif}
- xywh {400 405 600 335} type Double hide
- } {
- Fl_Menu_Bar {} {
- xywh {0 0 690 25}
- } {
- Submenu {} {
- label {&File}
- xywh {10 10 100 20}
- } {
- MenuItem {} {
- label {&New (erase all)...}
- callback {do_new_master();}
- xywh {30 30 100 20}
- }
- MenuItem {} {
- label {&Open Parameters...}
- callback {do_load_master();}
- xywh {30 30 100 20}
- }
- MenuItem {} {
- label {&Save All Parameters...}
- callback {do_save_master();}
- xywh {20 20 100 20} divider
- }
- MenuItem {} {
- label {&Settings...}
- callback {configui->show();}
- xywh {35 35 100 20} divider
- }
- MenuItem {} {
- label {&Copyright...}
- callback {aboutwindow->show();}
- xywh {25 25 100 20} divider
- }
- MenuItem {} {
- label {E&xit}
- callback {masterwindow->do_callback();}
- xywh {20 20 100 20}
- }
- }
- Submenu {} {
- label {&Instrument}
- xywh {20 20 100 20}
- } {
- MenuItem {} {
- label {&Open Instrument...}
- callback {const char *filename;
-filename=fl_file_chooser("Load:","({*.xiz})",NULL,0);
-if (filename==NULL) return;
-
-
-pthread_mutex_lock(&master->mutex);
-// int npart=(int)npartcounter->value()-1;
-
- //clear all instrument parameters, first
- master->part[npart]->defaultsinstrument();
-
- //load the instr. parameters
- int result=master->part[npart]->loadXMLinstrument(filename);
-
-pthread_mutex_unlock(&master->mutex);
-master->part[npart]->applyparameters();
-
-simplenpartcounter->do_callback();
-
-if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file.");
- else if (result<0) fl_alert("Error: Could not load the file.");}
- xywh {40 40 100 20}
- }
- MenuItem {} {
- label {Show Instrument &Bank...}
- callback {bankui->show();}
- xywh {10 10 100 20} divider
- }
- }
- Submenu {} {
- label Misc
- xywh {0 0 100 20}
- } {
- MenuItem {} {
- label {Switch User Interface Mode}
- callback {if (fl_choice("Switch the User Interface to Advanced mode ?","No","Yes",NULL)){
- simplemasterwindow->hide();
- refresh_master_ui();
- masterwindow->show();
- config.cfg.UserInterfaceMode=1;
-};}
- xywh {0 0 100 20}
- }
- }
- }
- Fl_Group simplelistitemgroup {
- private xywh {125 65 215 150} box ENGRAVED_BOX
- code0 {if (master->part[npart]->Penabled==0) o->deactivate();}
- } {
- Fl_Button partname {
- callback {if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
-};
-bankui->show();}
- xywh {130 72 205 18} box PLASTIC_THIN_DOWN_BOX down_box FLAT_BOX color 247 labelfont 1 labelsize 11 align 208
- }
- Fl_Slider partpanning {
- label Pan
- callback {master->part[npart]->setPpanning((int) o->value());}
- xywh {185 95 70 15} type {Horz Knob} box FLAT_BOX maximum 127 step 1 value 64
- code0 {o->value(master->part[npart]->Ppanning);}
- }
- Fl_Choice partrcv {
- label {Midi Channel Receive}
- callback {virkeys->relaseallkeys(0);
-master->part[npart]->Prcvchn=(int) o->value();
-virkeys->midich=(int) o->value();} open
- tooltip {receive from Midi channel} xywh {140 157 65 18} down_box BORDER_BOX labelsize 10 align 130 textfont 1
- code0 {char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Ch%d",i+1);if (i!=9) o->add(nrstr); else o->add("Dr10");};}
- code1 {o->value(master->part[npart]->Prcvchn);}
- } {}
- Fl_Dial partvolume {
- callback {master->part[npart]->setPvolume((int) o->value());}
- xywh {145 95 30 30} maximum 127 step 1
- code0 {o->value(master->part[npart]->Pvolume);}
- class WidgetPDial
- }
- Fl_Box {} {
- label Volume
- xywh {130 125 60 15}
- }
- Fl_Check_Button simplepartportamento {
- label Portamento
- callback {master->part[npart]->ctl.portamento.portamento=(int) o->value();}
- tooltip {Enable/Disable the portamento} xywh {260 95 75 20} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(master->part[npart]->ctl.portamento.portamento);}
- }
- Fl_Counter simpleminkcounter {
- label {Min.key}
- callback {master->part[npart]->Pminkey=(int) o->value();
-if (master->part[npart]->Pminkey>master->part[npart]->Pmaxkey) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);}
- tooltip {Minimum key (that the part receives NoteOn messages)} xywh {210 158 40 15} type Simple labelfont 1 labelsize 10 minimum 0 maximum 127 step 1 textsize 10
- code0 {o->value(master->part[npart]->Pminkey);}
- }
- Fl_Counter simplemaxkcounter {
- label {Max.key}
- callback {master->part[npart]->Pmaxkey=(int) o->value();
-
-if (master->part[npart]->Pminkey>master->part[npart]->Pmaxkey) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);}
- tooltip {Maximum key (that the part receives NoteOn messages)} xywh {255 158 40 15} type Simple labelfont 1 labelsize 10 minimum 0 maximum 127 step 1 textsize 10
- code0 {o->value(master->part[npart]->Pmaxkey);}
- }
- Fl_Button {} {
- label m
- callback {if (master->part[npart]->lastnote>=0) simpleminkcounter->value(master->part[npart]->lastnote);
-simpleminkcounter->do_callback();
-simplemaxkcounter->do_callback();}
- tooltip {set the minimum key to the last pressed key} xywh {230 188 15 12} box THIN_UP_BOX labelsize 10
- }
- Fl_Button {} {
- label M
- callback {if (master->part[npart]->lastnote>=0) simplemaxkcounter->value(master->part[npart]->lastnote);
-simplemaxkcounter->do_callback();
-simpleminkcounter->do_callback();}
- tooltip {set the maximum key to the last pressed key} xywh {260 188 15 12} box THIN_UP_BOX labelsize 10
- }
- Fl_Button {} {
- label R
- callback {simpleminkcounter->value(0);
-simpleminkcounter->do_callback();
-simplemaxkcounter->value(127);
-simplemaxkcounter->do_callback();}
- tooltip {reset the minimum key to 0 and maximum key to 127} xywh {245 188 15 12} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Counter simplepartkeyshiftcounter {
- label KeyShift
- callback {master->part[npart]->Pkeyshift=(int) o->value()+64;}
- xywh {240 120 90 20} labelsize 11 minimum -64 maximum 64 step 1
- code0 {o->lstep(12);}
- code1 {o->value(master->part[npart]->Pkeyshift-64);}
- }
- Fl_Dial simplesyseffsend {
- callback {master->setPsysefxvol(npart,nsyseff,(int) o->value());}
- xywh {300 160 30 30} maximum 127 step 1
- class WidgetPDial
- }
- Fl_Box {} {
- label Effect
- xywh {295 190 40 15}
- }
- }
- Fl_Check_Button partenabled {
- label Enabled
- callback {pthread_mutex_lock(&master->mutex);
- master->partonoff(npart,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-
-if ((int) o->value()==0) simplelistitemgroup->deactivate();
- else {
- simplelistitemgroup->activate();
- if ((int)bankui->cbwig->value()!=(npart+1)){
- bankui->cbwig->value(npart+1);
- bankui->cbwig->do_callback();
- };
-};
-
-o->redraw();}
- private xywh {250 40 85 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 24
- code0 {//char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);}
- code1 {o->value(master->part[npart]->Penabled);}
- }
- Fl_Box virkeys {
- label Keyboard
- xywh {5 215 590 80} box BORDER_BOX color 17
- code0 {o->init(master);}
- class VirKeys
- }
- Fl_Group {} {
- xywh {340 30 255 185} box ENGRAVED_BOX
- } {
- Fl_Tabs {} {
- xywh {345 35 245 175} align 18
- } {
- Fl_Group {} {
- label {System Effects}
- xywh {345 55 245 155} box ENGRAVED_FRAME labelfont 1 labelsize 12 align 18 hide
- } {
- Fl_Counter simplesyseffnocounter {
- label {Sys.Effect No.}
- callback {nsyseff=(int) o->value()-1;
-simplesysefftype->value(master->sysefx[nsyseff]->geteffect());
-simplesyseffectui->refresh(master->sysefx[nsyseff]);
-simplerefresh();}
- xywh {350 75 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1
- code0 {o->bounds(1,NUM_SYS_EFX);}
- code1 {o->value(nsyseff+1);}
- }
- Fl_Choice simplesysefftype {
- label EffType
- callback {pthread_mutex_lock(&master->mutex);
-master->sysefx[nsyseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(&master->mutex);
-simplesyseffectui->refresh(master->sysefx[nsyseff]);}
- xywh {515 80 70 15} down_box BORDER_BOX labelsize 10 align 5
- code0 {o->value(master->sysefx[nsyseff]->geteffect());}
- } {
- MenuItem {} {
- label {No Effect}
- xywh {20 20 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Reverb
- xywh {30 30 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Echo
- xywh {40 40 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Chorus
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Phaser
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label AlienWah
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Distortion
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label EQ
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label DynFilter
- xywh {100 100 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Group simplesyseffectuigroup {
- xywh {350 95 235 95} box FLAT_BOX color 48
- } {
- Fl_Group simplesyseffectui {
- xywh {350 95 234 95}
- code0 {o->init(master->sysefx[nsyseff]);}
- class SimpleEffUI
- } {}
- }
- Fl_Button {} {
- label {Send to...}
- callback {syseffsendwindow->show();}
- xywh {435 75 75 20} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Button {} {
- label P
- callback {pthread_mutex_lock(&master->mutex);
-presetsui->paste(master->sysefx[nsyseff],simplesyseffectui);
-pthread_mutex_unlock(&master->mutex);}
- xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- }
- Fl_Group {} {
- label {Insertion Effects}
- xywh {345 55 245 155} box ENGRAVED_FRAME labelfont 1 labelsize 12 align 18
- } {
- Fl_Counter simpleinseffnocounter {
- label {Ins.Effect No.}
- callback {ninseff=(int) o->value()-1;
-simpleinsefftype->value(master->insefx[ninseff]->geteffect());
-simpleinseffpart->value(master->Pinsparts[ninseff]+2);
-simpleinseffectui->refresh(master->insefx[ninseff]);
-
-if (master->Pinsparts[ninseff]!=-1) {
- simpleinsefftype->activate();
- simpleinseffectui->activate();
- simpleinseffectuigroup->activate();
-} else {
- simpleinsefftype->deactivate();
- simpleinseffectui->deactivate();
- simpleinseffectuigroup->deactivate();
-};}
- xywh {350 75 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1
- code0 {o->bounds(1,NUM_INS_EFX);}
- code1 {o->value(ninseff+1);}
- }
- Fl_Choice simpleinsefftype {
- label EffType
- callback {pthread_mutex_lock(&master->mutex);
-master->insefx[ninseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(&master->mutex);
-simpleinseffectui->refresh(master->insefx[ninseff]);
-simpleinseffectui->show();} selected
- xywh {515 80 70 15} down_box BORDER_BOX labelsize 10 align 5
- code0 {o->value(master->insefx[ninseff]->geteffect());}
- code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();}
- } {
- MenuItem {} {
- label {No Effect}
- xywh {35 35 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Reverb
- xywh {45 45 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Echo
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Chorus
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Phaser
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label AlienWah
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Distortion
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label EQ
- xywh {100 100 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label DynFilter
- xywh {110 110 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Group simpleinseffectuigroup {
- xywh {350 95 234 95} box FLAT_BOX color 48
- } {
- Fl_Group simpleinseffectui {
- xywh {350 95 234 95}
- code0 {o->init(master->insefx[ninseff]);}
- code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();}
- class SimpleEffUI
- } {}
- }
- Fl_Choice simpleinseffpart {
- label {Insert To.}
- callback {master->Pinsparts[ninseff]=(int) o->value()-2;
-if ((int) o->value()==1){
- simpleinseffectuigroup->deactivate();
- simpleinsefftype->deactivate();
- simpleinseffectui->deactivate();
-} else {
- simpleinseffectuigroup->activate();
- simpleinsefftype->activate();
- simpleinseffectui->activate();
-};
-master->insefx[ninseff]->cleanup();} open
- xywh {435 75 80 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 10
- code0 {o->add("Master Out");o->add("Off");}
- code1 {char tmp[50]; for (int i=0;i<NUM_MIDI_PARTS;i++) {sprintf(tmp,"Part %2d",i+1);o->add(tmp);};}
- code3 {o->value(master->Pinsparts[ninseff]+2);}
- } {}
- Fl_Button {} {
- label P
- callback {pthread_mutex_lock(&master->mutex);
-presetsui->paste(master->insefx[ninseff],simpleinseffectui);
-pthread_mutex_unlock(&master->mutex);}
- xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- }
- }
- }
- Fl_Group {} {
- xywh {5 300 590 30} box ENGRAVED_FRAME
- } {
- Fl_Box {} {
- label {VU-Meter}
- xywh {5 300 590 30} box FLAT_BOX color 41 selection_color 75
- code0 {o->init(master,-1);}
- class VUMeter
- }
- }
- Fl_Dial simplemastervolumedial {
- label {Master Volume}
- callback {master->setPvolume((int) o->value());}
- tooltip {Master Volume} xywh {10 35 40 40} box ROUND_UP_BOX labelfont 1 labelsize 11 align 130 maximum 127 step 1
- code0 {o->value(master->Pvolume);}
- class WidgetPDial
- }
- Fl_Counter simplemasterkeyshiftcounter {
- label {Master KeyShift}
- callback {master->setPkeyshift((int) o->value()+64);}
- xywh {25 110 90 20} labelsize 11 minimum -64 maximum 64 step 1
- code0 {o->lstep(12);}
- code1 {o->value(master->Pkeyshift-64);}
- }
- Fl_Button {} {
- label {Stop ALL sounds!}
- callback {virkeyboard->relaseallkeys();
-pthread_mutex_lock(&master->mutex);
-master->shutup=1;
-pthread_mutex_unlock(&master->mutex);}
- xywh {5 149 115 31} box PLASTIC_UP_BOX color 231 labelfont 1 labelsize 11
- }
- Fl_Button {} {
- label Reset
- callback {simpleglobalfinedetuneslider->value(64.0);
-simpleglobalfinedetuneslider->do_callback();}
- tooltip {Master fine detune reset} xywh {70 32 50 10} box THIN_UP_BOX labelfont 1 labelsize 11 align 128
- }
- Fl_Dial simpleglobalfinedetuneslider {
- label {Fine Detune}
- callback {master->microtonal.Pglobalfinedetune=(int) o->value();}
- tooltip {global fine detune} xywh {80 45 30 30} box ROUND_UP_BOX labelsize 11 align 130 maximum 127 step 1 value 64
- code0 {o->value(master->microtonal.Pglobalfinedetune);}
- class WidgetPDial
- }
- Fl_Counter simplenpartcounter {
- label Part
- callback {virkeys->relaseallkeys(0);
-npartcounter->value(o->value());
-npart=(int) o->value()-1;
-
-simplerefresh();
-virkeys->midich=master->part[npart]->Prcvchn;}
- tooltip {The part number} xywh {170 40 70 20} type Simple labelfont 1 align 4 minimum 0 maximum 127 step 1 value 1 textfont 1
- code0 {o->bounds(1,NUM_MIDI_PARTS);}
- }
- Fl_Counter {} {
- label {Keyb.Oct.}
- callback {virkeys->relaseallkeys(0);
-virkeys->midioct=(int) o->value();
-virkeys->take_focus();}
- tooltip {Midi Octave} xywh {5 195 55 20} type Simple labelsize 11 align 8 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 11
- code0 {o->value(virkeys->midioct);}
- }
- }
- Fl_Window selectuiwindow {
- label {User Interface mode}
- callback {*exitprogram=1;}
- xywh {342 246 430 250} type Double hide non_modal
- } {
- Fl_Box {} {
- label {Welcome to ZynAddSubFX}
- xywh {5 5 425 40} labeltype SHADOW_LABEL labelfont 1 labelsize 26
- }
- Fl_Box {} {
- label {Please choose the interface mode:}
- xywh {10 50 265 25} labelfont 1 labelsize 13
- }
- Fl_Button {} {
- label Advanced
- callback {config.cfg.UserInterfaceMode=1;
-masterwindow->show();
-selectuiwindow->hide();}
- xywh {10 165 100 35} box PLASTIC_UP_BOX color 229 labelfont 1 labelsize 16
- }
- Fl_Box {} {
- label {.. if you have used ZynAddSubFX before, or you like to have full controll to all parameters.}
- xywh {110 165 310 35} labelfont 1 labelsize 11 align 144
- }
- Fl_Button {} {
- label Beginner
- callback {simplemasterwindow->show();
-selectuiwindow->hide();
-config.cfg.UserInterfaceMode=2;}
- xywh {10 80 100 65} box PLASTIC_UP_BOX color 238 labelfont 1 labelsize 16
- }
- Fl_Box {} {
- label {..if you are a beginner, you prefer using presets or you prefer to use simpler user interfaces. Most functionality of ZynAddSubFX will be hidden in this mode to make simple the learning/using it.}
- xywh {110 75 320 75} labelfont 1 labelsize 11 align 144
- }
- Fl_Box {} {
- label {You can switch the interface modes anytime you want.}
- xywh {30 215 360 25} box BORDER_BOX color 51 labelfont 1 labelsize 11 align 144
- }
- }
- }
- Function {updatesendwindow()} {} {
- code {for (int neff1=0;neff1<NUM_SYS_EFX;neff1++)
- for (int neff2=neff1+1;neff2<NUM_SYS_EFX;neff2++)
- syseffsend[neff1][neff2]->value(master->Psysefxsend[neff1][neff2]);} {}
- }
- Function {updatepanel()} {} {
- code {for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- panellistitem[npart]->refresh();
-};} {}
- }
- Function {setfilelabel(const char *filename)} {} {
- code {if (filename!=NULL) snprintf(&masterwindowlabel[0],100,"%s - ZynAddSubFX",fl_filename_name(filename));
- else snprintf(&masterwindowlabel[0],100,"%s","ZynAddSubFX");
-masterwindowlabel[99]='\\0';
-masterwindow->label(&masterwindowlabel[0]);
-simplemasterwindow->label(&masterwindowlabel[0]);} {}
- }
- Function {MasterUI(Master *master_,int *exitprogram_)} {} {
- code {master=master_;
-exitprogram=exitprogram_;
-ninseff=0;
-nsyseff=0;
-npart=0;
-
-for (int i=0;i<NUM_SYS_EFX;i++)
- for (int j=0;j<NUM_SYS_EFX;j++)
- syseffsend[i][j]=NULL;
-
-microtonalui=new MicrotonalUI(&master->microtonal);
-virkeyboard=new VirKeyboard(master);
-bankui=new BankUI(master,&npart);
-configui=new ConfigUI();
-sequi=new SeqUI(master);
-
-make_window();
-\#ifdef OS_WINDOWS
-masterwindow->icon((char *)LoadIcon(GetModuleHandle(NULL), "zynaddsubfx_icon"));
-\#endif
-presetsui=new PresetsUI();
-setfilelabel(NULL);
-swapefftype=0;
-simplerefresh();} {}
- }
- Function {~MasterUI()} {} {
- code {masterwindow->hide();
-delete masterwindow;
-simplemasterwindow->hide();
-delete simplemasterwindow;
-aboutwindow->hide();
-delete aboutwindow;
-syseffsendwindow->hide();
-delete syseffsendwindow;
-
-delete virkeyboard;
-delete microtonalui;
-delete bankui;
-delete configui;
-delete sequi;
-
-delete presetsui;
-delete panelwindow;
-delete selectuiwindow;} {}
- }
- Function {showUI()} {} {
- code {switch (config.cfg.UserInterfaceMode){
- case 0:selectuiwindow->show();
- break;
- case 1:masterwindow->show();
- break;
- case 2:simplemasterwindow->show();
- break;
-};} {}
- }
- Function {simplerefresh()} {} {
- code {partenabled->value(master->part[npart]->Penabled);
-if (master->part[npart]->Penabled!=0) simplelistitemgroup->activate();
- else simplelistitemgroup->deactivate();
-
-partvolume->value(master->part[npart]->Pvolume);
-partpanning->value(master->part[npart]->Ppanning);
-partrcv->value(master->part[npart]->Prcvchn);
-
-if (master->part[npart]->Pname[0]!=0) partname->label((char *)master->part[npart]->Pname);
- else partname->label("Click here to load a instrument");
-
-simplelistitemgroup->redraw();
-simplepartportamento->value(master->part[npart]->ctl.portamento.portamento);
-simpleminkcounter->value(master->part[npart]->Pminkey);
-simplemaxkcounter->value(master->part[npart]->Pmaxkey);
-
-simplepartkeyshiftcounter->value(master->part[npart]->Pkeyshift-64);
-simplesyseffsend->value(master->Psysefxvol[nsyseff][npart]);} {}
- }
- Function {do_new_master()} {} {
- code {if (fl_choice("Clear *ALL* the parameters ?","No","Yes",NULL)){
- delete microtonalui;
-
- pthread_mutex_lock(&master->mutex);
- master->defaults();
- pthread_mutex_unlock(&master->mutex);
-
- npartcounter->value(1);
- refresh_master_ui();
-
-};
-
-updatepanel();} {}
- }
- Function {do_load_master(const char* file = NULL)} {} {
- code {const char *filename;
- if (file == NULL) {
- filename=fl_file_chooser("Open:","({*.xmz})",NULL,0);
- if (filename==NULL) return;
- }
- else {
- filename = file;
- }
-
-
-pthread_mutex_lock(&master->mutex);
- //clear all parameters
- master->defaults();
-
- //load the data
- int result=master->loadXML(filename);
-pthread_mutex_unlock(&master->mutex);
-master->applyparameters();
-
-npartcounter->value(1);
-refresh_master_ui();
-updatepanel();
-if (result>=0) setfilelabel(filename);
-
-
-if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a zynaddsubfx parameters file.");
- else if (result<0) fl_alert("Error: Could not load the file.");} {}
- }
- Function {do_save_master(const char* file = NULL)} {} {
- code {const char *filename;
-char *tmp;
- int result=0;
- if (file == NULL) {
- tmp=fl_file_chooser("Save:","({*.xmz})",NULL,0);
- if (tmp==NULL) return;
- tmp=fl_filename_setext(tmp,".xmz");
- filename=tmp;
- result=fileexists(tmp);
- if (result) {
- result=0;
- if (!fl_choice("The file exists. Overwrite it?","No","Yes",NULL)) return;
-
- }
- }
- else {
- filename = file;
- }
-
-
-pthread_mutex_lock(&master->mutex);
-result=master->saveXML(filename);
-pthread_mutex_unlock(&master->mutex);
-
-if (result<0) fl_alert("Error: Could not save the file.");
- else setfilelabel(filename);
-
-updatepanel();} {}
- }
- Function {refresh_master_ui()} {} {
- code {ninseff=0;
-nsyseff=0;
-npart=0;
-
-//the Master UI
-npartcounter->do_callback();
-syseffnocounter->do_callback();
-inseffnocounter->do_callback();
-masterkeyshiftcounter->value(master->Pkeyshift-64);
-mastervolumedial->value(master->Pvolume);
-globalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
-microtonalui=new MicrotonalUI(&master->microtonal);
-nrpnbutton->value(master->ctl.NRPN.receive);
-updatesendwindow();
-updatepanel();
-
-//the simle MasterUI
-simplenpartcounter->value(1);
-simplesyseffnocounter->value(1);
-simpleinseffnocounter->value(1);
-simplenpartcounter->do_callback();
-simplesyseffnocounter->do_callback();
-simpleinseffnocounter->do_callback();
-simplemasterkeyshiftcounter->value(master->Pkeyshift-64);
-simplemastervolumedial->value(master->Pvolume);
-simpleglobalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
-virkeys->midich=master->part[npart]->Prcvchn;
-
-simplerefresh();
-bankui->hide();} {}
- }
- decl {Master *master;} {}
- decl {MicrotonalUI *microtonalui;} {}
- decl {SeqUI *sequi;} {}
- decl {BankUI *bankui;} {}
- decl {int ninseff,npart;} {}
- decl {int nsyseff;} {}
- decl {int *exitprogram;} {}
- decl {SysEffSend *syseffsend[NUM_SYS_EFX][NUM_SYS_EFX];} {}
- decl {VirKeyboard *virkeyboard;} {}
- decl {ConfigUI *configui;} {}
- decl {int swapefftype;} {}
- decl {char masterwindowlabel[100];} {}
- decl {Panellistitem *panellistitem[NUM_MIDI_PARTS];} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/MasterUI.h b/plugins/zynaddsubfx/src/UI/MasterUI.h
deleted file mode 100644
index fc1db4b..0000000
--- a/plugins/zynaddsubfx/src/UI/MasterUI.h
+++ /dev/null
@@ -1,448 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef MasterUI_h
-#define MasterUI_h
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "WidgetPDial.h"
-#include "ADnoteUI.h"
-#include "SUBnoteUI.h"
-#include "EffUI.h"
-#include "VirKeyboard.h"
-#include "ConfigUI.h"
-#include "BankUI.h"
-#include "PartUI.h"
-#include "MicrotonalUI.h"
-#include "SeqUI.h"
-#include "PresetsUI.h"
-#include "../Misc/Master.h"
-#include "../Misc/Part.h"
-#include "../Misc/Util.h"
-#include "../globals.h"
-
-class VUMeter : public Fl_Box {
-public:
- VUMeter(int x,int y, int w, int h, const char *label=0);
- void init(Master *master_,int part_);
- void draw_master();
- void draw_part();
- void draw();
- static void tickdraw(VUMeter *o);
- static void tick(void *v);
- int handle(int event);
-private:
- Master *master;
- int npart;
- float olddbl,olddbr;
- float oldrmsdbl,oldrmsdbr;
-};
-
-class SysEffSend : public WidgetPDial {
-public:
- SysEffSend(int x,int y, int w, int h, const char *label=0);
- void init(Master *master_,int neff1_,int neff2_);
- ~SysEffSend();
- int handle(int event);
-private:
- Master *master;
- int neff1;
- int neff2;
-};
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Check_Button.H>
-
-class Panellistitem : public Fl_Group {
- Fl_Group* make_window();
- Fl_Group *panellistitem;
- Fl_Group *panellistitemgroup;
-public:
- Fl_Button *partname;
-private:
- void cb_partname_i(Fl_Button*, void*);
- static void cb_partname(Fl_Button*, void*);
-public:
- Fl_Slider *partvolume;
-private:
- void cb_partvolume_i(Fl_Slider*, void*);
- static void cb_partvolume(Fl_Slider*, void*);
-public:
- WidgetPDial *partpanning;
-private:
- void cb_partpanning_i(WidgetPDial*, void*);
- static void cb_partpanning(WidgetPDial*, void*);
- void cb_edit_i(Fl_Button*, void*);
- static void cb_edit(Fl_Button*, void*);
-public:
- Fl_Choice *partrcv;
-private:
- void cb_partrcv_i(Fl_Choice*, void*);
- static void cb_partrcv(Fl_Choice*, void*);
- Fl_Check_Button *partenabled;
- void cb_partenabled_i(Fl_Check_Button*, void*);
- static void cb_partenabled(Fl_Check_Button*, void*);
-public:
- Panellistitem(int x,int y, int w, int h, const char *label=0);
- void init(Master *master_, int npart_,BankUI *bankui_);
- void refresh();
- ~Panellistitem();
-private:
- int npart;
- Master *master;
- BankUI *bankui;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Menu_Bar.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Pack.H>
-
-class MasterUI {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *masterwindow;
-private:
- void cb_masterwindow_i(Fl_Double_Window*, void*);
- static void cb_masterwindow(Fl_Double_Window*, void*);
-public:
- Fl_Menu_Bar *mastermenu;
- static Fl_Menu_Item menu_mastermenu[];
-private:
- void cb_New_i(Fl_Menu_*, void*);
- static void cb_New(Fl_Menu_*, void*);
- void cb_Open_i(Fl_Menu_*, void*);
- static void cb_Open(Fl_Menu_*, void*);
- void cb_Save_i(Fl_Menu_*, void*);
- static void cb_Save(Fl_Menu_*, void*);
- void cb_Load_i(Fl_Menu_*, void*);
- static void cb_Load(Fl_Menu_*, void*);
- void cb_Save1_i(Fl_Menu_*, void*);
- static void cb_Save1(Fl_Menu_*, void*);
- void cb_Show_i(Fl_Menu_*, void*);
- static void cb_Show(Fl_Menu_*, void*);
- void cb_Settings_i(Fl_Menu_*, void*);
- static void cb_Settings(Fl_Menu_*, void*);
- void cb_Copyright_i(Fl_Menu_*, void*);
- static void cb_Copyright(Fl_Menu_*, void*);
- void cb_E_i(Fl_Menu_*, void*);
- static void cb_E(Fl_Menu_*, void*);
- void cb_Clear_i(Fl_Menu_*, void*);
- static void cb_Clear(Fl_Menu_*, void*);
- void cb_Open1_i(Fl_Menu_*, void*);
- static void cb_Open1(Fl_Menu_*, void*);
- void cb_Save2_i(Fl_Menu_*, void*);
- static void cb_Save2(Fl_Menu_*, void*);
- void cb_Show1_i(Fl_Menu_*, void*);
- static void cb_Show1(Fl_Menu_*, void*);
- void cb_Virtual_i(Fl_Menu_*, void*);
- static void cb_Virtual(Fl_Menu_*, void*);
-public:
- static Fl_Menu_Item *recordmenu;
-private:
- void cb_Choose_i(Fl_Menu_*, void*);
- static void cb_Choose(Fl_Menu_*, void*);
- void cb_Show2_i(Fl_Menu_*, void*);
- static void cb_Show2(Fl_Menu_*, void*);
- void cb_Switch_i(Fl_Menu_*, void*);
- static void cb_Switch(Fl_Menu_*, void*);
-public:
- WidgetPDial *mastervolumedial;
-private:
- void cb_mastervolumedial_i(WidgetPDial*, void*);
- static void cb_mastervolumedial(WidgetPDial*, void*);
-public:
- Fl_Counter *masterkeyshiftcounter;
-private:
- void cb_masterkeyshiftcounter_i(Fl_Counter*, void*);
- static void cb_masterkeyshiftcounter(Fl_Counter*, void*);
- void cb_Panic_i(Fl_Button*, void*);
- static void cb_Panic(Fl_Button*, void*);
-public:
- Fl_Group *partuigroup;
- PartUI *partui;
- Fl_Counter *syseffnocounter;
-private:
- void cb_syseffnocounter_i(Fl_Counter*, void*);
- static void cb_syseffnocounter(Fl_Counter*, void*);
-public:
- Fl_Choice *sysefftype;
-private:
- void cb_sysefftype_i(Fl_Choice*, void*);
- static void cb_sysefftype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_sysefftype[];
-public:
- Fl_Group *syseffectuigroup;
- EffUI *syseffectui;
-private:
- void cb_Send_i(Fl_Button*, void*);
- static void cb_Send(Fl_Button*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- Fl_Counter *inseffnocounter;
-private:
- void cb_inseffnocounter_i(Fl_Counter*, void*);
- static void cb_inseffnocounter(Fl_Counter*, void*);
-public:
- Fl_Choice *insefftype;
-private:
- void cb_insefftype_i(Fl_Choice*, void*);
- static void cb_insefftype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_insefftype[];
-public:
- Fl_Group *inseffectuigroup;
- EffUI *inseffectui;
- Fl_Choice *inseffpart;
-private:
- void cb_inseffpart_i(Fl_Choice*, void*);
- static void cb_inseffpart(Fl_Choice*, void*);
- void cb_C1_i(Fl_Button*, void*);
- static void cb_C1(Fl_Button*, void*);
- void cb_P1_i(Fl_Button*, void*);
- static void cb_P1(Fl_Button*, void*);
- void cb_Scales_i(Fl_Button*, void*);
- static void cb_Scales(Fl_Button*, void*);
-public:
- Fl_Button *recordbutton;
-private:
- void cb_recordbutton_i(Fl_Button*, void*);
- static void cb_recordbutton(Fl_Button*, void*);
-public:
- Fl_Button *stopbutton;
-private:
- void cb_stopbutton_i(Fl_Button*, void*);
- static void cb_stopbutton(Fl_Button*, void*);
-public:
- Fl_Button *pausebutton;
-private:
- void cb_pausebutton_i(Fl_Button*, void*);
- static void cb_pausebutton(Fl_Button*, void*);
-public:
- Fl_Box *pauselabel;
- Fl_Check_Button *nrpnbutton;
-private:
- void cb_nrpnbutton_i(Fl_Check_Button*, void*);
- static void cb_nrpnbutton(Fl_Check_Button*, void*);
-public:
- Fl_Counter *npartcounter;
-private:
- void cb_npartcounter_i(Fl_Counter*, void*);
- static void cb_npartcounter(Fl_Counter*, void*);
- void cb_vK_i(Fl_Button*, void*);
- static void cb_vK(Fl_Button*, void*);
- void cb_R_i(Fl_Button*, void*);
- static void cb_R(Fl_Button*, void*);
-public:
- WidgetPDial *globalfinedetuneslider;
-private:
- void cb_globalfinedetuneslider_i(WidgetPDial*, void*);
- static void cb_globalfinedetuneslider(WidgetPDial*, void*);
- void cb_Panel_i(Fl_Button*, void*);
- static void cb_Panel(Fl_Button*, void*);
-public:
- Fl_Double_Window *aboutwindow;
-private:
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
-public:
- Fl_Double_Window *syseffsendwindow;
-private:
- void cb_Close1_i(Fl_Button*, void*);
- static void cb_Close1(Fl_Button*, void*);
-public:
- Fl_Double_Window *panelwindow;
-private:
- void cb_Close2_i(Fl_Button*, void*);
- static void cb_Close2(Fl_Button*, void*);
- void cb_Refresh_i(Fl_Button*, void*);
- static void cb_Refresh(Fl_Button*, void*);
-public:
- Fl_Double_Window *simplemasterwindow;
-private:
- void cb_simplemasterwindow_i(Fl_Double_Window*, void*);
- static void cb_simplemasterwindow(Fl_Double_Window*, void*);
- static Fl_Menu_Item menu_[];
- void cb_New1_i(Fl_Menu_*, void*);
- static void cb_New1(Fl_Menu_*, void*);
- void cb_Open2_i(Fl_Menu_*, void*);
- static void cb_Open2(Fl_Menu_*, void*);
- void cb_Save3_i(Fl_Menu_*, void*);
- static void cb_Save3(Fl_Menu_*, void*);
- void cb_Settings1_i(Fl_Menu_*, void*);
- static void cb_Settings1(Fl_Menu_*, void*);
- void cb_Copyright1_i(Fl_Menu_*, void*);
- static void cb_Copyright1(Fl_Menu_*, void*);
- void cb_E1_i(Fl_Menu_*, void*);
- static void cb_E1(Fl_Menu_*, void*);
- void cb_Open3_i(Fl_Menu_*, void*);
- static void cb_Open3(Fl_Menu_*, void*);
- void cb_Show3_i(Fl_Menu_*, void*);
- static void cb_Show3(Fl_Menu_*, void*);
- void cb_Switch1_i(Fl_Menu_*, void*);
- static void cb_Switch1(Fl_Menu_*, void*);
- Fl_Group *simplelistitemgroup;
-public:
- Fl_Button *partname;
-private:
- void cb_partname1_i(Fl_Button*, void*);
- static void cb_partname1(Fl_Button*, void*);
-public:
- Fl_Slider *partpanning;
-private:
- void cb_partpanning1_i(Fl_Slider*, void*);
- static void cb_partpanning1(Fl_Slider*, void*);
-public:
- Fl_Choice *partrcv;
-private:
- void cb_partrcv1_i(Fl_Choice*, void*);
- static void cb_partrcv1(Fl_Choice*, void*);
-public:
- WidgetPDial *partvolume;
-private:
- void cb_partvolume1_i(WidgetPDial*, void*);
- static void cb_partvolume1(WidgetPDial*, void*);
-public:
- Fl_Check_Button *simplepartportamento;
-private:
- void cb_simplepartportamento_i(Fl_Check_Button*, void*);
- static void cb_simplepartportamento(Fl_Check_Button*, void*);
-public:
- Fl_Counter *simpleminkcounter;
-private:
- void cb_simpleminkcounter_i(Fl_Counter*, void*);
- static void cb_simpleminkcounter(Fl_Counter*, void*);
-public:
- Fl_Counter *simplemaxkcounter;
-private:
- void cb_simplemaxkcounter_i(Fl_Counter*, void*);
- static void cb_simplemaxkcounter(Fl_Counter*, void*);
- void cb_m_i(Fl_Button*, void*);
- static void cb_m(Fl_Button*, void*);
- void cb_M_i(Fl_Button*, void*);
- static void cb_M(Fl_Button*, void*);
- void cb_R1_i(Fl_Button*, void*);
- static void cb_R1(Fl_Button*, void*);
-public:
- Fl_Counter *simplepartkeyshiftcounter;
-private:
- void cb_simplepartkeyshiftcounter_i(Fl_Counter*, void*);
- static void cb_simplepartkeyshiftcounter(Fl_Counter*, void*);
-public:
- WidgetPDial *simplesyseffsend;
-private:
- void cb_simplesyseffsend_i(WidgetPDial*, void*);
- static void cb_simplesyseffsend(WidgetPDial*, void*);
- Fl_Check_Button *partenabled;
- void cb_partenabled1_i(Fl_Check_Button*, void*);
- static void cb_partenabled1(Fl_Check_Button*, void*);
-public:
- VirKeys *virkeys;
- Fl_Counter *simplesyseffnocounter;
-private:
- void cb_simplesyseffnocounter_i(Fl_Counter*, void*);
- static void cb_simplesyseffnocounter(Fl_Counter*, void*);
-public:
- Fl_Choice *simplesysefftype;
-private:
- void cb_simplesysefftype_i(Fl_Choice*, void*);
- static void cb_simplesysefftype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_simplesysefftype[];
-public:
- Fl_Group *simplesyseffectuigroup;
- SimpleEffUI *simplesyseffectui;
-private:
- void cb_Send1_i(Fl_Button*, void*);
- static void cb_Send1(Fl_Button*, void*);
- void cb_P2_i(Fl_Button*, void*);
- static void cb_P2(Fl_Button*, void*);
-public:
- Fl_Counter *simpleinseffnocounter;
-private:
- void cb_simpleinseffnocounter_i(Fl_Counter*, void*);
- static void cb_simpleinseffnocounter(Fl_Counter*, void*);
-public:
- Fl_Choice *simpleinsefftype;
-private:
- void cb_simpleinsefftype_i(Fl_Choice*, void*);
- static void cb_simpleinsefftype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_simpleinsefftype[];
-public:
- Fl_Group *simpleinseffectuigroup;
- SimpleEffUI *simpleinseffectui;
- Fl_Choice *simpleinseffpart;
-private:
- void cb_simpleinseffpart_i(Fl_Choice*, void*);
- static void cb_simpleinseffpart(Fl_Choice*, void*);
- void cb_P3_i(Fl_Button*, void*);
- static void cb_P3(Fl_Button*, void*);
-public:
- WidgetPDial *simplemastervolumedial;
-private:
- void cb_simplemastervolumedial_i(WidgetPDial*, void*);
- static void cb_simplemastervolumedial(WidgetPDial*, void*);
-public:
- Fl_Counter *simplemasterkeyshiftcounter;
-private:
- void cb_simplemasterkeyshiftcounter_i(Fl_Counter*, void*);
- static void cb_simplemasterkeyshiftcounter(Fl_Counter*, void*);
- void cb_Stop_i(Fl_Button*, void*);
- static void cb_Stop(Fl_Button*, void*);
- void cb_Reset_i(Fl_Button*, void*);
- static void cb_Reset(Fl_Button*, void*);
-public:
- WidgetPDial *simpleglobalfinedetuneslider;
-private:
- void cb_simpleglobalfinedetuneslider_i(WidgetPDial*, void*);
- static void cb_simpleglobalfinedetuneslider(WidgetPDial*, void*);
-public:
- Fl_Counter *simplenpartcounter;
-private:
- void cb_simplenpartcounter_i(Fl_Counter*, void*);
- static void cb_simplenpartcounter(Fl_Counter*, void*);
- void cb_Keyb_i(Fl_Counter*, void*);
- static void cb_Keyb(Fl_Counter*, void*);
-public:
- Fl_Double_Window *selectuiwindow;
-private:
- void cb_selectuiwindow_i(Fl_Double_Window*, void*);
- static void cb_selectuiwindow(Fl_Double_Window*, void*);
- void cb_Advanced_i(Fl_Button*, void*);
- static void cb_Advanced(Fl_Button*, void*);
- void cb_Beginner_i(Fl_Button*, void*);
- static void cb_Beginner(Fl_Button*, void*);
-public:
- void updatesendwindow();
- void updatepanel();
- void setfilelabel(const char *filename);
- MasterUI(Master *master_,int *exitprogram_);
- ~MasterUI();
- void showUI();
- void simplerefresh();
- void do_new_master();
- void do_load_master(const char* file = NULL);
- void do_save_master(const char* file = NULL);
- void refresh_master_ui();
-private:
- Master *master;
- MicrotonalUI *microtonalui;
- SeqUI *sequi;
- BankUI *bankui;
- int ninseff,npart;
- int nsyseff;
- int *exitprogram;
- SysEffSend *syseffsend[NUM_SYS_EFX][NUM_SYS_EFX];
- VirKeyboard *virkeyboard;
- ConfigUI *configui;
- int swapefftype;
- char masterwindowlabel[100];
- Panellistitem *panellistitem[NUM_MIDI_PARTS];
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/MicrotonalUI.cc b/plugins/zynaddsubfx/src/UI/MicrotonalUI.cc
deleted file mode 100644
index a58bbf0..0000000
--- a/plugins/zynaddsubfx/src/UI/MicrotonalUI.cc
+++ /dev/null
@@ -1,463 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "MicrotonalUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-void MicrotonalUI::cb_Invert_i(Fl_Check_Button* o, void*) {
- microtonal->Pinvertupdown=(int) o->value();
-if (microtonal->Pinvertupdown==0) centerinvertcounter->deactivate();
- else centerinvertcounter->activate();
-}
-void MicrotonalUI::cb_Invert(Fl_Check_Button* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_Invert_i(o,v);
-}
-
-void MicrotonalUI::cb_centerinvertcounter_i(Fl_Counter* o, void*) {
- microtonal->Pinvertupdowncenter=(int) o->value();
-}
-void MicrotonalUI::cb_centerinvertcounter(Fl_Counter* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_centerinvertcounter_i(o,v);
-}
-
-void MicrotonalUI::cb_applybutton_i(Fl_Button*, void*) {
- apply();
-}
-void MicrotonalUI::cb_applybutton(Fl_Button* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_applybutton_i(o,v);
-}
-
-void MicrotonalUI::cb_octavesizeoutput_i(Fl_Value_Output* o, void*) {
- o->value(microtonal->getoctavesize());
-}
-void MicrotonalUI::cb_octavesizeoutput(Fl_Value_Output* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_octavesizeoutput_i(o,v);
-}
-
-void MicrotonalUI::cb_nameinput_i(Fl_Input* o, void*) {
- snprintf((char *)microtonal->Pname,MICROTONAL_MAX_NAME_LEN,"%s",o->value());
-}
-void MicrotonalUI::cb_nameinput(Fl_Input* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_nameinput_i(o,v);
-}
-
-void MicrotonalUI::cb_commentinput_i(Fl_Input* o, void*) {
- snprintf((char *)microtonal->Pcomment,MICROTONAL_MAX_NAME_LEN,"%s",o->value());
-}
-void MicrotonalUI::cb_commentinput(Fl_Input* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_commentinput_i(o,v);
-}
-
-void MicrotonalUI::cb_Shift_i(Fl_Counter* o, void*) {
- microtonal->Pscaleshift=(int) o->value()+64;
-}
-void MicrotonalUI::cb_Shift(Fl_Counter* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_Shift_i(o,v);
-}
-
-void MicrotonalUI::cb_Import_i(Fl_Button*, void*) {
- const char *filename;
-filename=fl_file_chooser("Open:","(*.scl)",NULL,0);
-if (filename==NULL) return;
-int result=microtonal->loadscl(filename);
-if (result==0) {
- updateTuningsInput();
- nameinput->cut(0,nameinput->maximum_size());
- nameinput->insert((char *)microtonal->Pname);
- nameinput->position(0);
- commentinput->cut(0,commentinput->maximum_size());
- commentinput->insert((char *)microtonal->Pname);
- commentinput->position(0);
- tuningsinput->position(0);
- octavesizeoutput->do_callback();
- } else {
- fl_alert("Error: Could not load the file.");
- };
-}
-void MicrotonalUI::cb_Import(Fl_Button* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_Import_i(o,v);
-}
-
-void MicrotonalUI::cb_firstnotecounter_i(Fl_Counter* o, void*) {
- microtonal->Pfirstkey=(int) o->value();
-}
-void MicrotonalUI::cb_firstnotecounter(Fl_Counter* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->parent()->user_data()))->cb_firstnotecounter_i(o,v);
-}
-
-void MicrotonalUI::cb_lastnotecounter_i(Fl_Counter* o, void*) {
- microtonal->Plastkey=(int) o->value();
-}
-void MicrotonalUI::cb_lastnotecounter(Fl_Counter* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->parent()->user_data()))->cb_lastnotecounter_i(o,v);
-}
-
-void MicrotonalUI::cb_middlenotecounter_i(Fl_Counter* o, void*) {
- microtonal->Pmiddlenote=(int) o->value();
-}
-void MicrotonalUI::cb_middlenotecounter(Fl_Counter* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->parent()->user_data()))->cb_middlenotecounter_i(o,v);
-}
-
-void MicrotonalUI::cb_mapsizeoutput_i(Fl_Value_Output* o, void*) {
- o->value(microtonal->Pmapsize);
-}
-void MicrotonalUI::cb_mapsizeoutput(Fl_Value_Output* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->parent()->user_data()))->cb_mapsizeoutput_i(o,v);
-}
-
-void MicrotonalUI::cb_mappingenabledbutton_i(Fl_Check_Button* o, void*) {
- int x=(int) o->value();
-microtonal->Pmappingenabled=x;
-if (x==0) keymappinggroup->deactivate();
- else keymappinggroup->activate();
-o->show();
-}
-void MicrotonalUI::cb_mappingenabledbutton(Fl_Check_Button* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_mappingenabledbutton_i(o,v);
-}
-
-void MicrotonalUI::cb_Import1_i(Fl_Button*, void*) {
- const char *filename;
-filename=fl_file_chooser("Open:","(*.kbm)",NULL,0);
-if (filename==NULL) return;
-int result=microtonal->loadkbm(filename);
-if (result==0) {
- updateMappingInput();
- mappinginput->position(0);
- mapsizeoutput->do_callback();
- firstnotecounter->value(microtonal->Pfirstkey);
- lastnotecounter->value(microtonal->Plastkey);
- middlenotecounter->value(microtonal->Pmiddlenote);
- mapsizeoutput->do_callback();
- mappingenabledbutton->value(microtonal->Pmappingenabled);
- mappingenabledbutton->do_callback();
- afreqinput->value(microtonal->PAfreq);
- anotecounter->value(microtonal->PAnote);
- anotecounter->do_callback();
- } else {
- fl_alert("Error: Could not load the file.");
- };
-}
-void MicrotonalUI::cb_Import1(Fl_Button* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_Import1_i(o,v);
-}
-
-void MicrotonalUI::cb_anotecounter_i(Fl_Counter* o, void*) {
- microtonal->PAnote=(int) o->value();
-if (microtonal->getnotefreq(microtonal->PAnote,0)<0.0) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);
-
-o->redraw();
-}
-void MicrotonalUI::cb_anotecounter(Fl_Counter* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_anotecounter_i(o,v);
-}
-
-void MicrotonalUI::cb_afreqinput_i(Fl_Value_Input* o, void*) {
- microtonal->PAfreq=o->value();
-}
-void MicrotonalUI::cb_afreqinput(Fl_Value_Input* o, void* v) {
- ((MicrotonalUI*)(o->parent()->parent()->user_data()))->cb_afreqinput_i(o,v);
-}
-
-void MicrotonalUI::cb_Close_i(Fl_Button*, void*) {
- microtonaluiwindow->hide();
-}
-void MicrotonalUI::cb_Close(Fl_Button* o, void* v) {
- ((MicrotonalUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void MicrotonalUI::cb_Enable_i(Fl_Check_Button* o, void*) {
- microtonal->Penabled=(int) o->value();
-if (microtonal->Penabled==0) microtonalgroup->deactivate();
- else microtonalgroup->activate();
-}
-void MicrotonalUI::cb_Enable(Fl_Check_Button* o, void* v) {
- ((MicrotonalUI*)(o->parent()->user_data()))->cb_Enable_i(o,v);
-}
-
-Fl_Double_Window* MicrotonalUI::make_window() {
- { microtonaluiwindow = new Fl_Double_Window(405, 450, "Scales");
- microtonaluiwindow->user_data((void*)(this));
- { Fl_Group* o = new Fl_Group(249, 2, 155, 45);
- o->tooltip("Center where the note\'s freqs. are turned upside-down");
- o->box(FL_ENGRAVED_FRAME);
- { Fl_Check_Button* o = new Fl_Check_Button(254, 13, 55, 30, "Invert keys");
- o->tooltip("Turn upside-down the note frequencies");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Invert);
- o->align(Fl_Align(132|FL_ALIGN_INSIDE));
- o->value(microtonal->Pinvertupdown);
- } // Fl_Check_Button* o
- { Fl_Counter* o = centerinvertcounter = new Fl_Counter(319, 13, 80, 20, "Center");
- centerinvertcounter->labelfont(1);
- centerinvertcounter->labelsize(11);
- centerinvertcounter->minimum(0);
- centerinvertcounter->maximum(127);
- centerinvertcounter->step(1);
- centerinvertcounter->textfont(1);
- centerinvertcounter->callback((Fl_Callback*)cb_centerinvertcounter);
- centerinvertcounter->align(Fl_Align(130));
- o->lstep(microtonal->getoctavesize());
- o->value(microtonal->Pinvertupdowncenter);
- if (microtonal->Pinvertupdown==0) o->deactivate();
- } // Fl_Counter* centerinvertcounter
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = microtonalgroup = new Fl_Group(3, 49, 402, 398);
- microtonalgroup->box(FL_ENGRAVED_FRAME);
- { applybutton = new Fl_Button(8, 413, 107, 28, "Retune");
- applybutton->tooltip("Retune the synth accorging to the inputs from \"Tunnings\" and \"Keyboard Map\
-pings\"");
- applybutton->box(FL_THIN_UP_BOX);
- applybutton->labeltype(FL_EMBOSSED_LABEL);
- applybutton->labelfont(1);
- applybutton->labelsize(13);
- applybutton->callback((Fl_Callback*)cb_applybutton);
- } // Fl_Button* applybutton
- { Fl_Value_Output* o = octavesizeoutput = new Fl_Value_Output(150, 423, 35, 17, "nts./oct.");
- octavesizeoutput->tooltip("Notes/Octave");
- octavesizeoutput->labelsize(10);
- octavesizeoutput->maximum(500);
- octavesizeoutput->step(1);
- octavesizeoutput->value(12);
- octavesizeoutput->textfont(1);
- octavesizeoutput->callback((Fl_Callback*)cb_octavesizeoutput);
- octavesizeoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(microtonal->getoctavesize());
- } // Fl_Value_Output* octavesizeoutput
- { Fl_Input* o = nameinput = new Fl_Input(8, 64, 285, 25, "Name:");
- nameinput->labelfont(1);
- nameinput->labelsize(11);
- nameinput->callback((Fl_Callback*)cb_nameinput);
- nameinput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->insert((char *)microtonal->Pname);
- } // Fl_Input* nameinput
- { tuningsinput = new Fl_Input(8, 144, 182, 264, "Tunings:");
- tuningsinput->type(4);
- tuningsinput->labelfont(1);
- tuningsinput->labelsize(11);
- tuningsinput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- tuningsinput->when(FL_WHEN_NEVER);
- updateTuningsInput();
- } // Fl_Input* tuningsinput
- { Fl_Input* o = commentinput = new Fl_Input(8, 104, 391, 25, "Comment:");
- commentinput->labelfont(1);
- commentinput->labelsize(11);
- commentinput->callback((Fl_Callback*)cb_commentinput);
- commentinput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->insert((char *)microtonal->Pcomment);
- } // Fl_Input* commentinput
- { Fl_Counter* o = new Fl_Counter(313, 69, 70, 20, "Shift");
- o->type(1);
- o->labelsize(11);
- o->minimum(-63);
- o->maximum(64);
- o->step(1);
- o->textfont(1);
- o->callback((Fl_Callback*)cb_Shift);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->value(microtonal->Pscaleshift-64);
- } // Fl_Counter* o
- { Fl_Button* o = new Fl_Button(243, 411, 84, 15, "Import .SCL file");
- o->tooltip("Inport Scala .scl file (tunnings)");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Import);
- } // Fl_Button* o
- { keymappinggroup = new Fl_Group(193, 144, 206, 264, "Keyboard Mapping");
- keymappinggroup->box(FL_ENGRAVED_BOX);
- keymappinggroup->labelfont(1);
- keymappinggroup->labelsize(11);
- { mappinginput = new Fl_Input(250, 147, 146, 258);
- mappinginput->type(4);
- mappinginput->labelfont(1);
- mappinginput->labelsize(11);
- mappinginput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- mappinginput->when(FL_WHEN_NEVER);
- updateMappingInput();
- } // Fl_Input* mappinginput
- { Fl_Counter* o = firstnotecounter = new Fl_Counter(199, 195, 42, 18, "First note");
- firstnotecounter->tooltip("First MIDI note number");
- firstnotecounter->type(1);
- firstnotecounter->labelsize(10);
- firstnotecounter->minimum(0);
- firstnotecounter->maximum(127);
- firstnotecounter->step(1);
- firstnotecounter->textfont(1);
- firstnotecounter->textsize(11);
- firstnotecounter->callback((Fl_Callback*)cb_firstnotecounter);
- firstnotecounter->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(microtonal->Pfirstkey);
- } // Fl_Counter* firstnotecounter
- { Fl_Counter* o = lastnotecounter = new Fl_Counter(199, 225, 42, 18, "Last note");
- lastnotecounter->tooltip("Last MIDI note number");
- lastnotecounter->type(1);
- lastnotecounter->labelsize(10);
- lastnotecounter->minimum(0);
- lastnotecounter->maximum(127);
- lastnotecounter->step(1);
- lastnotecounter->value(127);
- lastnotecounter->textfont(1);
- lastnotecounter->textsize(11);
- lastnotecounter->callback((Fl_Callback*)cb_lastnotecounter);
- lastnotecounter->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(microtonal->Plastkey);
- } // Fl_Counter* lastnotecounter
- { Fl_Counter* o = middlenotecounter = new Fl_Counter(199, 267, 42, 18, "Midle note");
- middlenotecounter->tooltip("Midle note (where scale degree 0 is mapped to)");
- middlenotecounter->type(1);
- middlenotecounter->labelsize(10);
- middlenotecounter->minimum(0);
- middlenotecounter->maximum(127);
- middlenotecounter->step(1);
- middlenotecounter->value(60);
- middlenotecounter->textfont(1);
- middlenotecounter->textsize(11);
- middlenotecounter->callback((Fl_Callback*)cb_middlenotecounter);
- middlenotecounter->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(microtonal->Pmiddlenote);
- } // Fl_Counter* middlenotecounter
- { Fl_Value_Output* o = mapsizeoutput = new Fl_Value_Output(201, 382, 44, 20, "Map Size");
- mapsizeoutput->labelsize(10);
- mapsizeoutput->maximum(500);
- mapsizeoutput->step(1);
- mapsizeoutput->value(12);
- mapsizeoutput->textfont(1);
- mapsizeoutput->callback((Fl_Callback*)cb_mapsizeoutput);
- mapsizeoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(microtonal->Pmapsize);
- } // Fl_Value_Output* mapsizeoutput
- keymappinggroup->end();
- } // Fl_Group* keymappinggroup
- { Fl_Check_Button* o = mappingenabledbutton = new Fl_Check_Button(198, 150, 48, 21, "ON");
- mappingenabledbutton->tooltip("Enable the Mapping (otherwise the mapping is linear)");
- mappingenabledbutton->box(FL_FLAT_BOX);
- mappingenabledbutton->down_box(FL_DOWN_BOX);
- mappingenabledbutton->labelfont(1);
- mappingenabledbutton->callback((Fl_Callback*)cb_mappingenabledbutton);
- o->value(microtonal->Pmappingenabled);
- if (microtonal->Pmappingenabled==0) keymappinggroup->deactivate();
- } // Fl_Check_Button* mappingenabledbutton
- { Fl_Button* o = new Fl_Button(243, 428, 84, 16, "Import .kbm file");
- o->tooltip("Inport Scala .kbm file (keyboard mapping)");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Import1);
- } // Fl_Button* o
- if (microtonal->Penabled==0) o->deactivate();
- microtonalgroup->end();
- } // Fl_Group* microtonalgroup
- { Fl_Group* o = new Fl_Group(108, 2, 140, 45);
- o->box(FL_ENGRAVED_FRAME);
- { Fl_Counter* o = anotecounter = new Fl_Counter(173, 17, 65, 20, "\"A\" Note");
- anotecounter->tooltip("The \"A\" note (the reference note for which freq. (\"A\" freq) is given)");
- anotecounter->labelfont(1);
- anotecounter->labelsize(10);
- anotecounter->minimum(0);
- anotecounter->maximum(127);
- anotecounter->step(1);
- anotecounter->value(69);
- anotecounter->textfont(1);
- anotecounter->textsize(10);
- anotecounter->callback((Fl_Callback*)cb_anotecounter);
- anotecounter->align(Fl_Align(129));
- o->lstep(12);
- o->value(microtonal->PAnote);
- } // Fl_Counter* anotecounter
- { Fl_Value_Input* o = afreqinput = new Fl_Value_Input(118, 17, 45, 20, "\"A\" Freq.");
- afreqinput->tooltip("The freq. of \"A\" note (default=440.0)");
- afreqinput->labelfont(1);
- afreqinput->labelsize(10);
- afreqinput->minimum(1);
- afreqinput->maximum(20000);
- afreqinput->step(0.001);
- afreqinput->value(440);
- afreqinput->textfont(1);
- afreqinput->textsize(10);
- afreqinput->callback((Fl_Callback*)cb_afreqinput);
- afreqinput->align(Fl_Align(FL_ALIGN_TOP));
- o->value(microtonal->PAfreq);
- } // Fl_Value_Input* afreqinput
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(333, 413, 67, 28, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(3, 3, 102, 45, "Enable Microtonal");
- o->box(FL_PLASTIC_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Enable);
- o->align(Fl_Align(132|FL_ALIGN_INSIDE));
- o->value(microtonal->Penabled);
- } // Fl_Check_Button* o
- microtonaluiwindow->end();
- } // Fl_Double_Window* microtonaluiwindow
- return microtonaluiwindow;
-}
-
-void MicrotonalUI::updateTuningsInput() {
- char *tmpbuf=new char[100];
-
- tuningsinput->cut(0,tuningsinput->maximum_size());
-
- for (int i=0;i<microtonal->getoctavesize();i++){
- if (i!=0) tuningsinput->insert("\n");
- microtonal->tuningtoline(i,tmpbuf,100);
- tuningsinput->insert(tmpbuf);
- };
-
- delete []tmpbuf;
-}
-
-void MicrotonalUI::updateMappingInput() {
- char *tmpbuf=new char[100];
-
- mappinginput->cut(0,tuningsinput->maximum_size());
-
- for (int i=0;i<microtonal->Pmapsize;i++){
- if (i!=0) mappinginput->insert("\n");
- if ((microtonal->Pmapping[i])==-1)
- snprintf(tmpbuf,100,"x");
- else snprintf(tmpbuf,100,"%d",microtonal->Pmapping[i]);
- mappinginput->insert(tmpbuf);
- };
-
- delete []tmpbuf;
-}
-
-MicrotonalUI::MicrotonalUI(Microtonal *microtonal_) {
- microtonal=microtonal_;
-
- make_window();
-}
-
-MicrotonalUI::~MicrotonalUI() {
- microtonaluiwindow->hide();
- delete(microtonaluiwindow);
-}
-
-void MicrotonalUI::show() {
- microtonaluiwindow->show();
-}
-
-void MicrotonalUI::apply() {
- int err=microtonal->texttotunings(tuningsinput->value());
- if (err>=0) fl_alert("Parse Error: The input may contain only numbers (like 232.59)\n or divisions (like 121/64).");
- if (err==-2) fl_alert("Parse Error: The input is empty.");
- octavesizeoutput->do_callback();
-
- microtonal->texttomapping(mappinginput->value());
- mapsizeoutput->do_callback();
- anotecounter->do_callback();
-
- //applybutton->color(FL_GRAY);
-}
diff --git a/plugins/zynaddsubfx/src/UI/MicrotonalUI.fl b/plugins/zynaddsubfx/src/UI/MicrotonalUI.fl
deleted file mode 100644
index adc08b5..0000000
--- a/plugins/zynaddsubfx/src/UI/MicrotonalUI.fl
+++ /dev/null
@@ -1,270 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0106
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <string.h>} {public
-}
-
-decl {\#include <FL/Fl_File_Chooser.H>} {public
-}
-
-decl {\#include <FL/fl_ask.H>} {public
-}
-
-decl {\#include "../Misc/Microtonal.h"} {public
-}
-
-class MicrotonalUI {} {
- Function {make_window()} {} {
- Fl_Window microtonaluiwindow {
- label Scales
- xywh {99 164 405 450} type Double hide
- } {
- Fl_Group {} {
- tooltip {Center where the note's freqs. are turned upside-down} xywh {249 2 155 45} box ENGRAVED_FRAME
- } {
- Fl_Check_Button {} {
- label {Invert keys}
- callback {microtonal->Pinvertupdown=(int) o->value();
-if (microtonal->Pinvertupdown==0) centerinvertcounter->deactivate();
- else centerinvertcounter->activate();}
- tooltip {Turn upside-down the note frequencies} xywh {254 13 55 30} down_box DOWN_BOX labelfont 1 labelsize 11 align 148
- code0 {o->value(microtonal->Pinvertupdown);}
- }
- Fl_Counter centerinvertcounter {
- label Center
- callback {microtonal->Pinvertupdowncenter=(int) o->value();}
- xywh {319 13 80 20} labelfont 1 labelsize 11 align 130 minimum 0 maximum 127 step 1 textfont 1
- code0 {o->lstep(microtonal->getoctavesize());}
- code1 {o->value(microtonal->Pinvertupdowncenter);}
- code2 {if (microtonal->Pinvertupdown==0) o->deactivate();}
- }
- }
- Fl_Group microtonalgroup {selected
- xywh {3 49 402 398} box ENGRAVED_FRAME
- code0 {if (microtonal->Penabled==0) o->deactivate();}
- } {
- Fl_Button applybutton {
- label Retune
- callback {apply();}
- tooltip {Retune the synth accorging to the inputs from "Tunnings" and "Keyboard Mappings"} xywh {8 413 107 28} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13
- }
- Fl_Value_Output octavesizeoutput {
- label {nts./oct.}
- callback {o->value(microtonal->getoctavesize());}
- tooltip {Notes/Octave} xywh {150 423 35 17} labelsize 10 align 5 maximum 500 step 1 value 12 textfont 1
- code0 {o->value(microtonal->getoctavesize());}
- }
- Fl_Input nameinput {
- label {Name:}
- callback {snprintf((char *)microtonal->Pname,MICROTONAL_MAX_NAME_LEN,"%s",o->value());}
- xywh {8 64 285 25} labelfont 1 labelsize 11 align 5
- code0 {o->insert((char *)microtonal->Pname);}
- }
- Fl_Input tuningsinput {
- label {Tunings:}
- xywh {8 144 182 264} type Multiline labelfont 1 labelsize 11 align 5 when 2
- code0 {updateTuningsInput();}
- }
- Fl_Input commentinput {
- label {Comment:}
- callback {snprintf((char *)microtonal->Pcomment,MICROTONAL_MAX_NAME_LEN,"%s",o->value());}
- xywh {8 104 391 25} labelfont 1 labelsize 11 align 5
- code0 {o->insert((char *)microtonal->Pcomment);}
- }
- Fl_Counter {} {
- label Shift
- callback {microtonal->Pscaleshift=(int) o->value()+64;}
- xywh {313 69 70 20} type Simple labelsize 11 align 1 minimum -63 maximum 64 step 1 textfont 1
- code0 {o->value(microtonal->Pscaleshift-64);}
- }
- Fl_Button {} {
- label {Import .SCL file}
- callback {const char *filename;
-filename=fl_file_chooser("Open:","(*.scl)",NULL,0);
-if (filename==NULL) return;
-int result=microtonal->loadscl(filename);
-if (result==0) {
- updateTuningsInput();
- nameinput->cut(0,nameinput->maximum_size());
- nameinput->insert((char *)microtonal->Pname);
- nameinput->position(0);
- commentinput->cut(0,commentinput->maximum_size());
- commentinput->insert((char *)microtonal->Pname);
- commentinput->position(0);
- tuningsinput->position(0);
- octavesizeoutput->do_callback();
- } else {
- fl_alert("Error: Could not load the file.");
- };}
- tooltip {Inport Scala .scl file (tunnings)} xywh {243 411 84 15} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Group keymappinggroup {
- label {Keyboard Mapping} open
- xywh {193 144 206 264} box ENGRAVED_BOX labelfont 1 labelsize 11
- } {
- Fl_Input mappinginput {
- xywh {250 147 146 258} type Multiline labelfont 1 labelsize 11 align 5 when 2
- code0 {updateMappingInput();}
- }
- Fl_Counter firstnotecounter {
- label {First note}
- callback {microtonal->Pfirstkey=(int) o->value();}
- tooltip {First MIDI note number} xywh {199 195 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 textfont 1 textsize 11
- code0 {o->value(microtonal->Pfirstkey);}
- }
- Fl_Counter lastnotecounter {
- label {Last note}
- callback {microtonal->Plastkey=(int) o->value();}
- tooltip {Last MIDI note number} xywh {199 225 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 value 127 textfont 1 textsize 11
- code0 {o->value(microtonal->Plastkey);}
- }
- Fl_Counter middlenotecounter {
- label {Midle note}
- callback {microtonal->Pmiddlenote=(int) o->value();}
- tooltip {Midle note (where scale degree 0 is mapped to)} xywh {199 267 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 value 60 textfont 1 textsize 11
- code0 {o->value(microtonal->Pmiddlenote);}
- }
- Fl_Value_Output mapsizeoutput {
- label {Map Size}
- callback {o->value(microtonal->Pmapsize);}
- xywh {201 382 44 20} labelsize 10 align 5 maximum 500 step 1 value 12 textfont 1
- code0 {o->value(microtonal->Pmapsize);}
- }
- }
- Fl_Check_Button mappingenabledbutton {
- label ON
- callback {int x=(int) o->value();
-microtonal->Pmappingenabled=x;
-if (x==0) keymappinggroup->deactivate();
- else keymappinggroup->activate();
-o->show();}
- tooltip {Enable the Mapping (otherwise the mapping is linear)} xywh {198 150 48 21} box FLAT_BOX down_box DOWN_BOX labelfont 1
- code0 {o->value(microtonal->Pmappingenabled);}
- code1 {if (microtonal->Pmappingenabled==0) keymappinggroup->deactivate();}
- }
- Fl_Button {} {
- label {Import .kbm file}
- callback {const char *filename;
-filename=fl_file_chooser("Open:","(*.kbm)",NULL,0);
-if (filename==NULL) return;
-int result=microtonal->loadkbm(filename);
-if (result==0) {
- updateMappingInput();
- mappinginput->position(0);
- mapsizeoutput->do_callback();
- firstnotecounter->value(microtonal->Pfirstkey);
- lastnotecounter->value(microtonal->Plastkey);
- middlenotecounter->value(microtonal->Pmiddlenote);
- mapsizeoutput->do_callback();
- mappingenabledbutton->value(microtonal->Pmappingenabled);
- mappingenabledbutton->do_callback();
- afreqinput->value(microtonal->PAfreq);
- anotecounter->value(microtonal->PAnote);
- anotecounter->do_callback();
- } else {
- fl_alert("Error: Could not load the file.");
- };}
- tooltip {Inport Scala .kbm file (keyboard mapping)} xywh {243 428 84 16} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- }
- Fl_Group {} {
- xywh {108 2 140 45} box ENGRAVED_FRAME
- } {
- Fl_Counter anotecounter {
- label {"A" Note}
- callback {microtonal->PAnote=(int) o->value();
-if (microtonal->getnotefreq(microtonal->PAnote,0)<0.0) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);
-
-o->redraw();}
- tooltip {The "A" note (the reference note for which freq. ("A" freq) is given)} xywh {173 17 65 20} labelfont 1 labelsize 10 align 129 minimum 0 maximum 127 step 1 value 69 textfont 1 textsize 10
- code0 {o->lstep(12);}
- code1 {o->value(microtonal->PAnote);}
- }
- Fl_Value_Input afreqinput {
- label {"A" Freq.}
- callback {microtonal->PAfreq=o->value();}
- tooltip {The freq. of "A" note (default=440.0)} xywh {118 17 45 20} labelfont 1 labelsize 10 align 1 minimum 1 maximum 20000 step 0.001 value 440 textfont 1 textsize 10
- code0 {o->value(microtonal->PAfreq);}
- }
- }
- Fl_Button {} {
- label Close
- callback {microtonaluiwindow->hide();}
- xywh {333 413 67 28} box THIN_UP_BOX
- }
- Fl_Check_Button {} {
- label {Enable Microtonal}
- callback {microtonal->Penabled=(int) o->value();
-if (microtonal->Penabled==0) microtonalgroup->deactivate();
- else microtonalgroup->activate();}
- xywh {3 3 102 45} box PLASTIC_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 11 align 148
- code0 {o->value(microtonal->Penabled);}
- }
- }
- }
- Function {updateTuningsInput()} {} {
- code {char *tmpbuf=new char[100];
-
-tuningsinput->cut(0,tuningsinput->maximum_size());
-
-for (int i=0;i<microtonal->getoctavesize();i++){
- if (i!=0) tuningsinput->insert("\\n");
- microtonal->tuningtoline(i,tmpbuf,100);
- tuningsinput->insert(tmpbuf);
-};
-
-delete []tmpbuf;} {}
- }
- Function {updateMappingInput()} {} {
- code {char *tmpbuf=new char[100];
-
-mappinginput->cut(0,tuningsinput->maximum_size());
-
-for (int i=0;i<microtonal->Pmapsize;i++){
- if (i!=0) mappinginput->insert("\\n");
- if ((microtonal->Pmapping[i])==-1)
- snprintf(tmpbuf,100,"x");
- else snprintf(tmpbuf,100,"%d",microtonal->Pmapping[i]);
- mappinginput->insert(tmpbuf);
-};
-
-delete []tmpbuf;} {}
- }
- Function {MicrotonalUI(Microtonal *microtonal_)} {} {
- code {microtonal=microtonal_;
-
-make_window();} {}
- }
- Function {~MicrotonalUI()} {} {
- code {microtonaluiwindow->hide();
-delete(microtonaluiwindow);} {}
- }
- Function {show()} {} {
- code {microtonaluiwindow->show();} {}
- }
- Function {apply()} {} {
- code {int err=microtonal->texttotunings(tuningsinput->value());
-if (err>=0) fl_alert("Parse Error: The input may contain only numbers (like 232.59)\\n or divisions (like 121/64).");
-if (err==-2) fl_alert("Parse Error: The input is empty.");
-octavesizeoutput->do_callback();
-
-microtonal->texttomapping(mappinginput->value());
-mapsizeoutput->do_callback();
-anotecounter->do_callback();
-
-//applybutton->color(FL_GRAY);} {}
- }
- decl {Microtonal *microtonal;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/MicrotonalUI.h b/plugins/zynaddsubfx/src/UI/MicrotonalUI.h
deleted file mode 100644
index 3668b41..0000000
--- a/plugins/zynaddsubfx/src/UI/MicrotonalUI.h
+++ /dev/null
@@ -1,112 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef MicrotonalUI_h
-#define MicrotonalUI_h
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/fl_ask.H>
-#include "../Misc/Microtonal.h"
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Value_Input.H>
-
-class MicrotonalUI {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *microtonaluiwindow;
-private:
- void cb_Invert_i(Fl_Check_Button*, void*);
- static void cb_Invert(Fl_Check_Button*, void*);
-public:
- Fl_Counter *centerinvertcounter;
-private:
- void cb_centerinvertcounter_i(Fl_Counter*, void*);
- static void cb_centerinvertcounter(Fl_Counter*, void*);
-public:
- Fl_Group *microtonalgroup;
- Fl_Button *applybutton;
-private:
- void cb_applybutton_i(Fl_Button*, void*);
- static void cb_applybutton(Fl_Button*, void*);
-public:
- Fl_Value_Output *octavesizeoutput;
-private:
- void cb_octavesizeoutput_i(Fl_Value_Output*, void*);
- static void cb_octavesizeoutput(Fl_Value_Output*, void*);
-public:
- Fl_Input *nameinput;
-private:
- void cb_nameinput_i(Fl_Input*, void*);
- static void cb_nameinput(Fl_Input*, void*);
-public:
- Fl_Input *tuningsinput;
- Fl_Input *commentinput;
-private:
- void cb_commentinput_i(Fl_Input*, void*);
- static void cb_commentinput(Fl_Input*, void*);
- void cb_Shift_i(Fl_Counter*, void*);
- static void cb_Shift(Fl_Counter*, void*);
- void cb_Import_i(Fl_Button*, void*);
- static void cb_Import(Fl_Button*, void*);
-public:
- Fl_Group *keymappinggroup;
- Fl_Input *mappinginput;
- Fl_Counter *firstnotecounter;
-private:
- void cb_firstnotecounter_i(Fl_Counter*, void*);
- static void cb_firstnotecounter(Fl_Counter*, void*);
-public:
- Fl_Counter *lastnotecounter;
-private:
- void cb_lastnotecounter_i(Fl_Counter*, void*);
- static void cb_lastnotecounter(Fl_Counter*, void*);
-public:
- Fl_Counter *middlenotecounter;
-private:
- void cb_middlenotecounter_i(Fl_Counter*, void*);
- static void cb_middlenotecounter(Fl_Counter*, void*);
-public:
- Fl_Value_Output *mapsizeoutput;
-private:
- void cb_mapsizeoutput_i(Fl_Value_Output*, void*);
- static void cb_mapsizeoutput(Fl_Value_Output*, void*);
-public:
- Fl_Check_Button *mappingenabledbutton;
-private:
- void cb_mappingenabledbutton_i(Fl_Check_Button*, void*);
- static void cb_mappingenabledbutton(Fl_Check_Button*, void*);
- void cb_Import1_i(Fl_Button*, void*);
- static void cb_Import1(Fl_Button*, void*);
-public:
- Fl_Counter *anotecounter;
-private:
- void cb_anotecounter_i(Fl_Counter*, void*);
- static void cb_anotecounter(Fl_Counter*, void*);
-public:
- Fl_Value_Input *afreqinput;
-private:
- void cb_afreqinput_i(Fl_Value_Input*, void*);
- static void cb_afreqinput(Fl_Value_Input*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
- void cb_Enable_i(Fl_Check_Button*, void*);
- static void cb_Enable(Fl_Check_Button*, void*);
-public:
- void updateTuningsInput();
- void updateMappingInput();
- MicrotonalUI(Microtonal *microtonal_);
- ~MicrotonalUI();
- void show();
- void apply();
-private:
- Microtonal *microtonal;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/OscilGenUI.cc b/plugins/zynaddsubfx/src/UI/OscilGenUI.cc
deleted file mode 100644
index 2925a1e..0000000
--- a/plugins/zynaddsubfx/src/UI/OscilGenUI.cc
+++ /dev/null
@@ -1,1410 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "OscilGenUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-OscilSpectrum::OscilSpectrum(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- oscil=NULL;
-}
-
-void OscilSpectrum::init(OscilGen *oscil_,int oscbase_,Master *master_) {
- oscil=oscil_;
- oscbase=oscbase_;
- master=master_;
-}
-
-void OscilSpectrum::draw() {
- int ox=x(),oy=y(),lx=w(),ly=h(),i;
- const int maxdb=60;//must be multiple of 10
- int GX=2;
- int n=lx/GX-1;
- if (n>OSCIL_SIZE/2) n=OSCIL_SIZE/2;
-
- REALTYPE x;
- REALTYPE* spc=new REALTYPE[n];
- for (i=0;i<n;i++) spc[i]=0.0;
-
- pthread_mutex_lock(&master->mutex);
- if (oscbase==0) oscil->getspectrum(n,spc,0);
- else oscil->getspectrum(n,spc,1);
- pthread_mutex_unlock(&master->mutex);
-
- //normalize
- REALTYPE max=0;
- for (i=0;i<n;i++){
- x=fabs(spc[i]);
- if (max<x) max=x;
- }
- if (max<0.000001) max=1.0;
- max=max*1.05;
-
- //draw
-
- if (this->active_r()) fl_color(this->parent()->selection_color());
- else fl_color(this->parent()->color());
- fl_line_style(FL_DOT);
-
- for (i=1;i<maxdb/10;i++){
- int ky=(int)((REALTYPE)i*ly*10.0/maxdb)/2;
- ky*=2;
- fl_line(ox,oy+ky-1,ox+lx-2,oy+ky-1);
- };
-
- for (i=2;i<n;i++){
- int tmp=i*GX-2;
- if (i%10==1) fl_line_style(0);
- else fl_line_style(FL_DOT);
- fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
- }
-
- if (this->active_r()) fl_color(this->parent()->labelcolor());
- else fl_color(this->parent()->color());
- fl_line_style(0);
-
- //draws the spectrum
- for (i=0;i<n;i++){
- int tmp=i*GX+2;
- x=spc[i]/max;
-
- if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
- else x=0;
-
- int val=(int) ((ly-2)*x);
- if (val>0) fl_line(ox+tmp,oy+ly-2-val,ox+tmp,oy+ly-2);
- }
- delete [] spc;
-}
-
-PSlider::PSlider(int x,int y, int w, int h, const char *label):Fl_Slider(x,y,w,h,label) {
- ;
-}
-
-int PSlider::handle(int event) {
- int X=x(),Y=y(),W=w(),H=h();
-
- if ((!Fl::event_buttons())|| (event==0)||(Fl::event_shift()==0)) return(Fl_Slider::handle(event));
-
- if (!Fl::event_inside(X,Y,W,H)) {
- if (event==FL_DRAG){
- Fl_Slider::handle(FL_RELEASE);
- Fl_Slider::handle(FL_LEAVE);
- deactivate();
- activate();
- return(1);
- }else{
- return(Fl_Slider::handle(event));
- };
- } else {
- //Fl_Slider::handle(FL_FOCUS);
- Fl_Slider::handle(FL_PUSH);
- };
-
- return(1);
-}
-
-Oscilloscope::Oscilloscope(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- oscil=NULL;
- phase=64;
- oscbase=0;
-}
-
-void Oscilloscope::init(OscilGen *oscil_,Master *master_) {
- oscil=oscil_;
- master=master_;
-}
-
-void Oscilloscope::init(OscilGen *oscil_,int oscbase_,Master *master_) {
- oscil=oscil_;
- oscbase=oscbase_;
- master=master_;
-}
-
-void Oscilloscope::init(OscilGen *oscil_,int oscbase_,int phase_,Master *master_) {
- oscil=oscil_;
- oscbase=oscbase_;
- phase=phase_;
- master=master_;
-}
-
-void Oscilloscope::draw() {
- int ox=x(),oy=y(),lx=w(),ly=h()-1,i;
- REALTYPE smps[OSCIL_SIZE];
- pthread_mutex_lock(&master->mutex);
- if (oscbase==0) oscil->get(smps,-1.0);
- else oscil->getcurrentbasefunction(smps);
- pthread_mutex_unlock(&master->mutex);
-
- if (damage()!=1){
- fl_color(0,0,0);
- fl_rectf(ox,oy,lx,ly);
- };
-
- //normalize
- REALTYPE max=0;
- for (i=0;i<OSCIL_SIZE;i++)
- if (max<fabs(smps[i])) max=fabs(smps[i]);
- //fprintf(stderr,"%.4f\n",max);
- if (max<0.00001) max=1.0;
- max=-max*1.05;
-
- //draw
- fl_line_style(FL_DASH);
- if (this->active_r()) fl_color(this->parent()->labelcolor());
- else fl_color(this->parent()->color());
- int GX=16;if (lx<GX*3) GX=-1;
- for (i=1;i<GX;i++){
- int tmp=(int)(lx/(REALTYPE)GX*i);
- fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
- };
- int GY=8;if (ly<GY*3) GY=-1;
- for (i=1;i<GY;i++){
- int tmp=(int)(ly/(REALTYPE)GY*i);
- fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
- };
-
- //draw the function
- fl_line_style(0,1);
- fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
- if (this->active_r()) fl_color(this->parent()->selection_color());
- else fl_color(this->parent()->labelcolor());
- int lw=1;
- //if ((lx<135)||(ly<135)) lw=1;
- fl_line_style(0,lw);
- int ph=(int)((phase-64.0)/128.0*OSCIL_SIZE+OSCIL_SIZE);
- for (i=1;i<lx;i++){
- int k1=(int)((REALTYPE)OSCIL_SIZE*(i-1)/lx)+ph;
- int k2=(int)((REALTYPE)OSCIL_SIZE*i/lx)+ph;
- REALTYPE y1=smps[k1%OSCIL_SIZE]/max;
- REALTYPE y2=smps[k2%OSCIL_SIZE]/max;
- fl_line(i-1+ox,(int)(y1*ly/2.0)+oy+ly/2,i+ox,(int)(y2*ly/2.0)+oy+ly/2);
- };
-}
-
-void Oscilharmonic::cb_mag_i(PSlider* o, void*) {
- int x=64;
-if (Fl::event_button3()) o->value(x);
- else x=127-(int)o->value();
-if (x==64) o->selection_color(0);
- else o->selection_color(222);
-
-pthread_mutex_lock(&master->mutex);
- oscil->Phmag[n]=x;
- if (x==64) {
- oscil->Phphase[n]=64;
- phase->value(64);
- };
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-display->redraw();
-oldosc->redraw();
-if (cbwidget!=NULL) {
- cbwidget->do_callback();
- applybutton->color(FL_RED);
- applybutton->redraw();
-};
-}
-void Oscilharmonic::cb_mag(PSlider* o, void* v) {
- ((Oscilharmonic*)(o->parent()->user_data()))->cb_mag_i(o,v);
-}
-
-void Oscilharmonic::cb_phase_i(PSlider* o, void*) {
- int x=64;
-if (Fl::event_button3()) o->value(x);
- else x=(int)o->value();
-
-pthread_mutex_lock(&master->mutex);
- oscil->Phphase[n]=x;
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-display->redraw();
-oldosc->redraw();
-if (cbwidget!=NULL) {
- cbwidget->do_callback();
- applybutton->color(FL_RED);
- applybutton->redraw();
-};
-}
-void Oscilharmonic::cb_phase(PSlider* o, void* v) {
- ((Oscilharmonic*)(o->parent()->user_data()))->cb_phase_i(o,v);
-}
-
-Fl_Group* Oscilharmonic::make_window() {
- { harmonic = new Fl_Group(0, 0, 90, 225);
- harmonic->box(FL_FLAT_BOX);
- harmonic->color(FL_BACKGROUND_COLOR);
- harmonic->selection_color(FL_BACKGROUND_COLOR);
- harmonic->labeltype(FL_NO_LABEL);
- harmonic->labelfont(0);
- harmonic->labelsize(14);
- harmonic->labelcolor(FL_FOREGROUND_COLOR);
- harmonic->user_data((void*)(this));
- harmonic->align(Fl_Align(FL_ALIGN_TOP));
- harmonic->when(FL_WHEN_RELEASE);
- { PSlider* o = mag = new PSlider(0, 15, 15, 115);
- mag->type(4);
- mag->box(FL_FLAT_BOX);
- mag->color(FL_BACKGROUND_COLOR);
- mag->selection_color((Fl_Color)222);
- mag->labeltype(FL_NORMAL_LABEL);
- mag->labelfont(0);
- mag->labelsize(14);
- mag->labelcolor(FL_FOREGROUND_COLOR);
- mag->maximum(127);
- mag->step(1);
- mag->value(64);
- mag->callback((Fl_Callback*)cb_mag);
- mag->align(Fl_Align(FL_ALIGN_BOTTOM));
- mag->when(FL_WHEN_CHANGED);
- o->value(127-oscil->Phmag[n]);
- if (oscil->Phmag[n]==64) o->selection_color(0);
- } // PSlider* mag
- { PSlider* o = phase = new PSlider(0, 135, 15, 75);
- phase->type(4);
- phase->box(FL_FLAT_BOX);
- phase->color(FL_BACKGROUND_COLOR);
- phase->selection_color((Fl_Color)222);
- phase->labeltype(FL_NORMAL_LABEL);
- phase->labelfont(0);
- phase->labelsize(14);
- phase->labelcolor(FL_FOREGROUND_COLOR);
- phase->maximum(127);
- phase->step(1);
- phase->value(64);
- phase->callback((Fl_Callback*)cb_phase);
- phase->align(Fl_Align(FL_ALIGN_BOTTOM));
- phase->when(FL_WHEN_CHANGED);
- o->value(oscil->Phphase[n]);
- } // PSlider* phase
- { Fl_Box* o = new Fl_Box(15, 70, 5, 5);
- o->box(FL_FLAT_BOX);
- o->color(FL_DARK2);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(15, 170, 5, 5);
- o->box(FL_FLAT_BOX);
- o->color(FL_DARK2);
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(0, 210, 20, 15, "01");
- o->labelfont(1);
- o->labelsize(9);
- o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(0, 0, 20, 15, "01");
- o->labelfont(1);
- o->labelsize(9);
- o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));
- } // Fl_Box* o
- harmonic->end();
- } // Fl_Group* harmonic
- return harmonic;
-}
-
-Oscilharmonic::Oscilharmonic(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- n=0;
- oscil=NULL;
- display=NULL;
- applybutton=NULL;
- cbwidget=NULL;
-}
-
-void Oscilharmonic::init(OscilGen *oscil_,int n_,Fl_Group *display_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *applybutton_, Master *master_) {
- oscil=oscil_;
- n=n_;
- display=display_;
- master=master_;
- oldosc=oldosc_;
- cbwidget=cbwidget_;
- applybutton=applybutton_;
- make_window();
- end();
- harmonic->show();
-}
-
-void Oscilharmonic::refresh() {
- mag->value(127-oscil->Phmag[n]);
- phase->value(oscil->Phphase[n]);
-
- if (oscil->Phmag[n]==64) mag->selection_color(0);
- else mag->selection_color(222);
-}
-
-Oscilharmonic::~Oscilharmonic() {
- harmonic->hide();
- //delete(harmonic);
-}
-
-void OscilEditor::cb_applybutton_i(Fl_Button*, void*) {
- applybutton->color(FL_GRAY);
-applybutton->redraw();
-if (cbapplywidget!=NULL) {
- cbapplywidget->do_callback();
- cbapplywidget->color(FL_GRAY);
- cbapplywidget->redraw();
-};
-}
-void OscilEditor::cb_applybutton(Fl_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->user_data()))->cb_applybutton_i(o,v);
-}
-
-void OscilEditor::cb_rndslider_i(Fl_Value_Slider* o, void*) {
- oscil->Prand=(int)o->value()+64;
-oscildisplaygroup->redraw();
-oldosc->redraw();
-}
-void OscilEditor::cb_rndslider(Fl_Value_Slider* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_rndslider_i(o,v);
-}
-
-void OscilEditor::cb_hrndtype_i(Fl_Choice* o, void*) {
- oscil->Pamprandtype=(int) o->value();
-}
-void OscilEditor::cb_hrndtype(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_hrndtype_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_hrndtype[] = {
- {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sin", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_hrnddial_i(WidgetPDial* o, void*) {
- oscil->Pamprandpower=(int) o->value();
-}
-void OscilEditor::cb_hrnddial(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_hrnddial_i(o,v);
-}
-
-void OscilEditor::cb_bfslider_i(WidgetPDial* o, void*) {
- oscil->Pbasefuncpar=(int)o->value()+64;
-basefuncdisplaygroup->redraw();
-bfparval->value(oscil->Pbasefuncpar-64);
-
-redrawoscil();
-}
-void OscilEditor::cb_bfslider(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_bfslider_i(o,v);
-}
-
-void OscilEditor::cb_bftype_i(Fl_Choice* o, void*) {
- oscil->Pcurrentbasefunc=(int) o->value();
-
-basefuncdisplaygroup->redraw();
-redrawoscil();
-
-if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodulation->deactivate();
- else basefuncmodulation->activate();
-}
-void OscilEditor::cb_bftype(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_bftype_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_bftype[] = {
- {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Triangle", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Pulse", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Saw", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Power", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Gauss", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Diode", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"AbsSine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"PulseSine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"StrchSine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Chirp", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"AbsStrSine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Chebyshev", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Sqr", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_bfmodtype_i(Fl_Choice* o, void*) {
- oscil->Pbasefuncmodulation=(int) o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();
-}
-void OscilEditor::cb_bfmodtype(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_bfmodtype_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_bfmodtype[] = {
- {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Rev", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_bfmodpar1_i(WidgetPDial* o, void*) {
- oscil->Pbasefuncmodulationpar1=(int)o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();
-}
-void OscilEditor::cb_bfmodpar1(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_bfmodpar1_i(o,v);
-}
-
-void OscilEditor::cb_bfmodpar2_i(WidgetPDial* o, void*) {
- oscil->Pbasefuncmodulationpar2=(int)o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();
-}
-void OscilEditor::cb_bfmodpar2(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_bfmodpar2_i(o,v);
-}
-
-void OscilEditor::cb_bfmodpar3_i(WidgetPDial* o, void*) {
- oscil->Pbasefuncmodulationpar3=(int)o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();
-}
-void OscilEditor::cb_bfmodpar3(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->parent()->user_data()))->cb_bfmodpar3_i(o,v);
-}
-
-void OscilEditor::cb_magtype_i(Fl_Choice* o, void*) {
- oscil->Phmagtype=(int) o->value();
-basefuncdisplaygroup->redraw();
-
-redrawoscil();
-}
-void OscilEditor::cb_magtype(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->user_data()))->cb_magtype_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_magtype[] = {
- {"Linear", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"-40dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"-60dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"-80dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"-100dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_Use_i(Fl_Button*, void*) {
- oscil->useasbase();
-if (autoclearbutton->value()){
- for (int i=0;i<MAX_AD_HARMONICS;i++){
- h[i]->mag->value(64);
- oscil->Phmag[i]=64;
- h[i]->phase->value(64);
- oscil->Phphase[i]=64;
- };
- oscil->Phmag[0]=127;
-
- oscil->Pharmonicshift=0;
- harmonicshiftcounter->value(0);
-
- h[0]->mag->value(0);
- wshbutton->value(0);
- wshbutton->do_callback();
- fltbutton->value(0);
- fltbutton->do_callback();
- sabutton->value(0);
- sabutton->do_callback();
-};
-
-pthread_mutex_lock(&master->mutex);
- for (int i=0;i<MAX_AD_HARMONICS;i++){
- if (oscil->Phmag[i]==64) h[i]->mag->selection_color(0);
- else h[i]->mag->selection_color(222);
- };
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-basefuncdisplaygroup->redraw();
-redrawoscil();
-}
-void OscilEditor::cb_Use(Fl_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->user_data()))->cb_Use_i(o,v);
-}
-
-void OscilEditor::cb_Close_i(Fl_Button*, void*) {
- osceditUI->hide();
-}
-void OscilEditor::cb_Close(Fl_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void OscilEditor::cb_Clear_i(Fl_Button*, void*) {
- if (!fl_choice("Clear the harmonics settings?","No","Yes",NULL)) return;
-
-for (int i=0;i<MAX_AD_HARMONICS;i++){
- h[i]->mag->value(64);
- oscil->Phmag[i]=64;
- h[i]->phase->value(64);
- oscil->Phphase[i]=64;
-};
-oscil->Phmag[0]=127;
-h[0]->mag->value(0);
-
-for (int i=0;i<MAX_AD_HARMONICS;i++){
- if (oscil->Phmag[i]==64) h[i]->mag->selection_color(0);
- else h[i]->mag->selection_color(222);
-};
-
-//harmonics->redraw();
-
-pthread_mutex_lock(&master->mutex);
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-redrawoscil();
-}
-void OscilEditor::cb_Clear(Fl_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->user_data()))->cb_Clear_i(o,v);
-}
-
-void OscilEditor::cb_wshbutton_i(Fl_Choice* o, void*) {
- oscil->Pwaveshapingfunction=(int) o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();
-}
-void OscilEditor::cb_wshbutton(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_wshbutton_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_wshbutton[] = {
- {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Atan", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Asym1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Qnts", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Zigzg", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Lmt", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LmtU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LmtL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"ILmt", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Clip", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Asym2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sgm", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_wshpar_i(WidgetPDial* o, void*) {
- oscil->Pwaveshaping=(int)o->value()+64;
-wsparval->value(oscil->Pwaveshaping-64);
-redrawoscil();
-}
-void OscilEditor::cb_wshpar(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_wshpar_i(o,v);
-}
-
-void OscilEditor::cb_fltbutton_i(Fl_Choice* o, void*) {
- oscil->Pfiltertype=(int) o->value();
-
-redrawoscil();
-}
-void OscilEditor::cb_fltbutton(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_fltbutton_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_fltbutton[] = {
- {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LP1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"HP1a", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"HP1b", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"BP1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"BS1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LP2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"HP2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"BP2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"BS2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Cos", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sin", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"LSh", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"S", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_filtervalue1_i(WidgetPDial* o, void*) {
- oscil->Pfilterpar1=(int)o->value();
-
-redrawoscil();
-}
-void OscilEditor::cb_filtervalue1(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_filtervalue1_i(o,v);
-}
-
-void OscilEditor::cb_filterpref_i(Fl_Check_Button* o, void*) {
- oscil->Pfilterbeforews=(int)o->value();
-
-redrawoscil();
-}
-void OscilEditor::cb_filterpref(Fl_Check_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_filterpref_i(o,v);
-}
-
-void OscilEditor::cb_filtervalue2_i(WidgetPDial* o, void*) {
- oscil->Pfilterpar2=(int)o->value();
-
-redrawoscil();
-}
-void OscilEditor::cb_filtervalue2(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_filtervalue2_i(o,v);
-}
-
-void OscilEditor::cb_sabutton_i(Fl_Choice* o, void*) {
- oscil->Psatype=(int) o->value();
-redrawoscil();
-}
-void OscilEditor::cb_sabutton(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_sabutton_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_sabutton[] = {
- {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"ThrsD", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"ThrsU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_sadjpar_i(WidgetPDial* o, void*) {
- oscil->Psapar=(int)o->value();
-redrawoscil();
-}
-void OscilEditor::cb_sadjpar(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_sadjpar_i(o,v);
-}
-
-void OscilEditor::cb_harmonicshiftcounter_i(Fl_Counter* o, void*) {
- oscil->Pharmonicshift=(int)o->value();
-redrawoscil();
-}
-void OscilEditor::cb_harmonicshiftcounter(Fl_Counter* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_harmonicshiftcounter_i(o,v);
-}
-
-void OscilEditor::cb_harmonicshiftpre_i(Fl_Check_Button* o, void*) {
- oscil->Pharmonicshiftfirst=(int)o->value();
-redrawoscil();
-}
-void OscilEditor::cb_harmonicshiftpre(Fl_Check_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_harmonicshiftpre_i(o,v);
-}
-
-void OscilEditor::cb_R_i(Fl_Button*, void*) {
- oscil->Pharmonicshift=0;
-harmonicshiftcounter->value(0);
-redrawoscil();
-}
-void OscilEditor::cb_R(Fl_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_R_i(o,v);
-}
-
-void OscilEditor::cb_adhrtype_i(Fl_Choice* o, void*) {
- oscil->Padaptiveharmonics=(int) o->value();
-redrawoscil();
-}
-void OscilEditor::cb_adhrtype(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_adhrtype_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_adhrtype[] = {
- {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"ON", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Square", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"2xSub", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"2xAdd", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"3xSub", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"3xAdd", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"4xSub", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"4xAdd", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_adhrpow_i(WidgetPDial* o, void*) {
- oscil->Padaptiveharmonicspower=(int)o->value();
-redrawoscil();
-}
-void OscilEditor::cb_adhrpow(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_adhrpow_i(o,v);
-}
-
-void OscilEditor::cb_adhrbf_i(WidgetPDial* o, void*) {
- oscil->Padaptiveharmonicsbasefreq=(int)o->value();
-redrawoscil();
-}
-void OscilEditor::cb_adhrbf(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_adhrbf_i(o,v);
-}
-
-void OscilEditor::cb_adhrpar_i(Fl_Slider* o, void*) {
- oscil->Padaptiveharmonicspar=(int)o->value();
-redrawoscil();
-}
-void OscilEditor::cb_adhrpar(Fl_Slider* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_adhrpar_i(o,v);
-}
-
-void OscilEditor::cb_modtype_i(Fl_Choice* o, void*) {
- oscil->Pmodulation=(int) o->value();
-
-redrawoscil();
-}
-void OscilEditor::cb_modtype(Fl_Choice* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_modtype_i(o,v);
-}
-
-Fl_Menu_Item OscilEditor::menu_modtype[] = {
- {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Rev", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Pow", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void OscilEditor::cb_modpar1_i(WidgetPDial* o, void*) {
- oscil->Pmodulationpar1=(int)o->value();
-
-redrawoscil();
-}
-void OscilEditor::cb_modpar1(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_modpar1_i(o,v);
-}
-
-void OscilEditor::cb_modpar2_i(WidgetPDial* o, void*) {
- oscil->Pmodulationpar2=(int)o->value();
-
-redrawoscil();
-}
-void OscilEditor::cb_modpar2(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_modpar2_i(o,v);
-}
-
-void OscilEditor::cb_modpar3_i(WidgetPDial* o, void*) {
- oscil->Pmodulationpar3=(int)o->value();
-redrawoscil();
-}
-void OscilEditor::cb_modpar3(WidgetPDial* o, void* v) {
- ((OscilEditor*)(o->parent()->parent()->user_data()))->cb_modpar3_i(o,v);
-}
-
-void OscilEditor::cb_Sine_i(Fl_Button*, void*) {
- if (!fl_choice("Convert to SINE?","No","Yes",NULL)) return;
-
-pthread_mutex_lock(&master->mutex);
- oscil->convert2sine(0);
-pthread_mutex_unlock(&master->mutex);
-
-redrawoscil();
-refresh();
-}
-void OscilEditor::cb_Sine(Fl_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->user_data()))->cb_Sine_i(o,v);
-}
-
-void OscilEditor::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(oscil);
-}
-void OscilEditor::cb_C(Fl_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void OscilEditor::cb_P_i(Fl_Button*, void*) {
- presetsui->paste(oscil,this);
-}
-void OscilEditor::cb_P(Fl_Button* o, void* v) {
- ((OscilEditor*)(o->parent()->user_data()))->cb_P_i(o,v);
-}
-
-Fl_Double_Window* OscilEditor::make_window() {
- { Fl_Double_Window* o = osceditUI = new Fl_Double_Window(735, 595, "ADsynth Oscillator Editor");
- osceditUI->user_data((void*)(this));
- { Fl_Button* o = applybutton = new Fl_Button(300, 280, 60, 20, "Apply");
- applybutton->box(FL_THIN_UP_BOX);
- applybutton->labelfont(1);
- applybutton->callback((Fl_Callback*)cb_applybutton);
- if (!oscil->ADvsPAD) o->hide();
- } // Fl_Button* applybutton
- { oscildisplaygroup = new Fl_Group(5, 5, 360, 300);
- oscildisplaygroup->box(FL_ENGRAVED_FRAME);
- { Fl_Group* o = new Fl_Group(10, 85, 350, 190);
- o->box(FL_THIN_DOWN_BOX);
- o->color(FL_GRAY0);
- o->selection_color((Fl_Color)71);
- o->labelcolor((Fl_Color)179);
- Oscilloscope *osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
- osc->init(oscil,master);
- o->end();
- } // Fl_Group* o
- { Fl_Box* o = new Fl_Box(120, 10, 110, 20, "Oscillator");
- o->box(FL_FLAT_BOX);
- o->labelfont(1);
- } // Fl_Box* o
- { Fl_Value_Slider* o = rndslider = new Fl_Value_Slider(140, 285, 100, 10, "rnd");
- rndslider->tooltip("Oscilator Phase Randomness: smaller than 0 is \"group\", larger than 0 is for\
- each harmonic");
- rndslider->type(5);
- rndslider->box(FL_FLAT_BOX);
- rndslider->labelsize(10);
- rndslider->minimum(-64);
- rndslider->maximum(63);
- rndslider->step(1);
- rndslider->callback((Fl_Callback*)cb_rndslider);
- rndslider->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- if (oscil->ADvsPAD) o->hide();
- } // Fl_Value_Slider* rndslider
- { Fl_Group* o = new Fl_Group(10, 30, 350, 50);
- o->box(FL_THIN_DOWN_BOX);
- o->color(FL_GRAY0);
- o->selection_color((Fl_Color)218);
- o->labelcolor(FL_GREEN);
- OscilSpectrum *spc=new OscilSpectrum(o->x(),o->y(),o->w(),o->h(),"");
- spc->init(oscil,0,master);
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(246, 277, 115, 25);
- o->box(FL_ENGRAVED_BOX);
- { hrndtype = new Fl_Choice(281, 282, 50, 15, "H.rnd");
- hrndtype->tooltip("Harmonic Amplitude Randomness");
- hrndtype->down_box(FL_BORDER_BOX);
- hrndtype->labelsize(10);
- hrndtype->textsize(10);
- hrndtype->callback((Fl_Callback*)cb_hrndtype);
- hrndtype->menu(menu_hrndtype);
- } // Fl_Choice* hrndtype
- { hrnddial = new WidgetPDial(338, 280, 18, 18);
- hrnddial->tooltip("Oscillator\'s spectrum adjust parameter");
- hrnddial->box(FL_OVAL_BOX);
- hrnddial->color(FL_BACKGROUND_COLOR);
- hrnddial->selection_color(FL_INACTIVE_COLOR);
- hrnddial->labeltype(FL_NORMAL_LABEL);
- hrnddial->labelfont(0);
- hrnddial->labelsize(14);
- hrnddial->labelcolor(FL_FOREGROUND_COLOR);
- hrnddial->maximum(127);
- hrnddial->step(1);
- hrnddial->callback((Fl_Callback*)cb_hrnddial);
- hrnddial->align(Fl_Align(FL_ALIGN_BOTTOM));
- hrnddial->when(FL_WHEN_CHANGED);
- } // WidgetPDial* hrnddial
- if (oscil->ADvsPAD) o->hide();
- o->end();
- } // Fl_Group* o
- oscildisplaygroup->end();
- } // Fl_Group* oscildisplaygroup
- { Fl_Box* o = new Fl_Box(495, 15, 110, 20, "Base Func.");
- o->box(FL_FLAT_BOX);
- o->labelfont(1);
- } // Fl_Box* o
- { basefuncdisplaygroup = new Fl_Group(365, 5, 360, 300);
- basefuncdisplaygroup->box(FL_ENGRAVED_FRAME);
- { Fl_Group* o = new Fl_Group(370, 85, 350, 190);
- o->box(FL_THIN_DOWN_BOX);
- o->color(FL_GRAY0);
- o->selection_color((Fl_Color)71);
- o->labelcolor((Fl_Color)179);
- Oscilloscope *osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
- osc->init(oscil,1,master);
- o->end();
- } // Fl_Group* o
- { bfslider = new WidgetPDial(520, 280, 20, 20);
- bfslider->tooltip("Base Function Parameter");
- bfslider->box(FL_OVAL_BOX);
- bfslider->color(FL_BACKGROUND_COLOR);
- bfslider->selection_color(FL_INACTIVE_COLOR);
- bfslider->labeltype(FL_NORMAL_LABEL);
- bfslider->labelfont(0);
- bfslider->labelsize(14);
- bfslider->labelcolor(FL_FOREGROUND_COLOR);
- bfslider->minimum(-64);
- bfslider->maximum(63);
- bfslider->step(1);
- bfslider->callback((Fl_Callback*)cb_bfslider);
- bfslider->align(Fl_Align(FL_ALIGN_BOTTOM));
- bfslider->when(FL_WHEN_CHANGED);
- } // WidgetPDial* bfslider
- { bftype = new Fl_Choice(370, 285, 90, 15, "Base.F..");
- bftype->down_box(FL_BORDER_BOX);
- bftype->labelsize(10);
- bftype->textsize(11);
- bftype->callback((Fl_Callback*)cb_bftype);
- bftype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- bftype->menu(menu_bftype);
- } // Fl_Choice* bftype
- { Fl_Box* o = new Fl_Box(480, 10, 110, 20, "Base Func.");
- o->box(FL_FLAT_BOX);
- o->labelfont(1);
- } // Fl_Box* o
- { Fl_Group* o = new Fl_Group(370, 30, 350, 50);
- o->box(FL_THIN_DOWN_BOX);
- o->color(FL_GRAY0);
- o->selection_color((Fl_Color)218);
- o->labelcolor(FL_GREEN);
- OscilSpectrum *spc=new OscilSpectrum (o->x(),o->y(),o->w(),o->h(),"");
- spc->init(oscil,1,master);
- o->end();
- } // Fl_Group* o
- { bfparval = new Fl_Value_Output(490, 285, 25, 15, "Par.");
- bfparval->labelsize(12);
- bfparval->minimum(-63);
- bfparval->maximum(63);
- bfparval->step(1);
- } // Fl_Value_Output* bfparval
- { basefuncmodulation = new Fl_Group(550, 276, 169, 25);
- basefuncmodulation->box(FL_ENGRAVED_BOX);
- { bfmodtype = new Fl_Choice(599, 281, 50, 15, "B.F.Mod.");
- bfmodtype->tooltip("Base function modulation");
- bfmodtype->down_box(FL_BORDER_BOX);
- bfmodtype->labelsize(10);
- bfmodtype->textsize(10);
- bfmodtype->callback((Fl_Callback*)cb_bfmodtype);
- bfmodtype->menu(menu_bfmodtype);
- } // Fl_Choice* bfmodtype
- { bfmodpar1 = new WidgetPDial(659, 281, 15, 15);
- bfmodpar1->tooltip("Oscillator\'s modulation parameter 1");
- bfmodpar1->box(FL_OVAL_BOX);
- bfmodpar1->color(FL_BACKGROUND_COLOR);
- bfmodpar1->selection_color(FL_INACTIVE_COLOR);
- bfmodpar1->labeltype(FL_NORMAL_LABEL);
- bfmodpar1->labelfont(0);
- bfmodpar1->labelsize(14);
- bfmodpar1->labelcolor(FL_FOREGROUND_COLOR);
- bfmodpar1->maximum(127);
- bfmodpar1->step(1);
- bfmodpar1->callback((Fl_Callback*)cb_bfmodpar1);
- bfmodpar1->align(Fl_Align(FL_ALIGN_BOTTOM));
- bfmodpar1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* bfmodpar1
- { bfmodpar2 = new WidgetPDial(679, 281, 15, 15);
- bfmodpar2->tooltip("Oscillator\'s modulation parameter 2");
- bfmodpar2->box(FL_OVAL_BOX);
- bfmodpar2->color(FL_BACKGROUND_COLOR);
- bfmodpar2->selection_color(FL_INACTIVE_COLOR);
- bfmodpar2->labeltype(FL_NORMAL_LABEL);
- bfmodpar2->labelfont(0);
- bfmodpar2->labelsize(14);
- bfmodpar2->labelcolor(FL_FOREGROUND_COLOR);
- bfmodpar2->maximum(127);
- bfmodpar2->step(1);
- bfmodpar2->callback((Fl_Callback*)cb_bfmodpar2);
- bfmodpar2->align(Fl_Align(FL_ALIGN_BOTTOM));
- bfmodpar2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* bfmodpar2
- { bfmodpar3 = new WidgetPDial(699, 281, 15, 15);
- bfmodpar3->tooltip("Oscillator\'s modulation parameter 3");
- bfmodpar3->box(FL_OVAL_BOX);
- bfmodpar3->color(FL_BACKGROUND_COLOR);
- bfmodpar3->selection_color(FL_INACTIVE_COLOR);
- bfmodpar3->labeltype(FL_NORMAL_LABEL);
- bfmodpar3->labelfont(0);
- bfmodpar3->labelsize(14);
- bfmodpar3->labelcolor(FL_FOREGROUND_COLOR);
- bfmodpar3->maximum(127);
- bfmodpar3->step(1);
- bfmodpar3->callback((Fl_Callback*)cb_bfmodpar3);
- bfmodpar3->align(Fl_Align(FL_ALIGN_BOTTOM));
- bfmodpar3->when(FL_WHEN_CHANGED);
- } // WidgetPDial* bfmodpar3
- if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodulation->deactivate();
- basefuncmodulation->end();
- } // Fl_Group* basefuncmodulation
- basefuncdisplaygroup->end();
- } // Fl_Group* basefuncdisplaygroup
- { magtype = new Fl_Choice(70, 280, 65, 20, "Mag.Type");
- magtype->down_box(FL_BORDER_BOX);
- magtype->labelsize(11);
- magtype->textsize(11);
- magtype->callback((Fl_Callback*)cb_magtype);
- magtype->menu(menu_magtype);
- } // Fl_Choice* magtype
- { Fl_Button* o = new Fl_Button(5, 313, 85, 20, "Use as base");
- o->tooltip("Use this Oscillator as base function");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Use);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(668, 565, 62, 25, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(670, 505, 55, 15, "Clear");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Clear);
- } // Fl_Button* o
- { Fl_Group* o = new Fl_Group(135, 308, 150, 30);
- o->box(FL_ENGRAVED_BOX);
- { wshbutton = new Fl_Choice(165, 313, 55, 20, "Wsh.");
- wshbutton->tooltip("Waveshaping function");
- wshbutton->down_box(FL_BORDER_BOX);
- wshbutton->labelsize(10);
- wshbutton->textsize(10);
- wshbutton->callback((Fl_Callback*)cb_wshbutton);
- wshbutton->menu(menu_wshbutton);
- } // Fl_Choice* wshbutton
- { wshpar = new WidgetPDial(260, 313, 20, 20);
- wshpar->tooltip("Waveshaping Parameter");
- wshpar->box(FL_OVAL_BOX);
- wshpar->color(FL_BACKGROUND_COLOR);
- wshpar->selection_color(FL_INACTIVE_COLOR);
- wshpar->labeltype(FL_NORMAL_LABEL);
- wshpar->labelfont(0);
- wshpar->labelsize(14);
- wshpar->labelcolor(FL_FOREGROUND_COLOR);
- wshpar->minimum(-64);
- wshpar->maximum(63);
- wshpar->step(1);
- wshpar->callback((Fl_Callback*)cb_wshpar);
- wshpar->align(Fl_Align(FL_ALIGN_BOTTOM));
- wshpar->when(FL_WHEN_CHANGED);
- } // WidgetPDial* wshpar
- { wsparval = new Fl_Value_Output(228, 316, 25, 15);
- wsparval->labelsize(12);
- wsparval->minimum(-63);
- wsparval->maximum(63);
- wsparval->step(1);
- } // Fl_Value_Output* wsparval
- o->end();
- } // Fl_Group* o
- { autoclearbutton = new Fl_Light_Button(95, 313, 35, 20, "Clr.");
- autoclearbutton->tooltip("Auto clear when using the oscillator as base function");
- autoclearbutton->box(FL_THIN_UP_BOX);
- autoclearbutton->value(1);
- autoclearbutton->labelfont(1);
- autoclearbutton->labelsize(10);
- } // Fl_Light_Button* autoclearbutton
- { Fl_Group* o = new Fl_Group(285, 308, 155, 30);
- o->box(FL_ENGRAVED_BOX);
- { fltbutton = new Fl_Choice(315, 313, 50, 20, "Filter");
- fltbutton->tooltip("Oscillator\'s filter type");
- fltbutton->down_box(FL_BORDER_BOX);
- fltbutton->labelsize(10);
- fltbutton->textsize(10);
- fltbutton->callback((Fl_Callback*)cb_fltbutton);
- fltbutton->menu(menu_fltbutton);
- } // Fl_Choice* fltbutton
- { filtervalue1 = new WidgetPDial(367, 313, 20, 20);
- filtervalue1->tooltip("Oscillator\'s filter parameter1");
- filtervalue1->box(FL_OVAL_BOX);
- filtervalue1->color(FL_BACKGROUND_COLOR);
- filtervalue1->selection_color(FL_INACTIVE_COLOR);
- filtervalue1->labeltype(FL_NORMAL_LABEL);
- filtervalue1->labelfont(0);
- filtervalue1->labelsize(14);
- filtervalue1->labelcolor(FL_FOREGROUND_COLOR);
- filtervalue1->maximum(127);
- filtervalue1->step(1);
- filtervalue1->callback((Fl_Callback*)cb_filtervalue1);
- filtervalue1->align(Fl_Align(FL_ALIGN_BOTTOM));
- filtervalue1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* filtervalue1
- { filterpref = new Fl_Check_Button(415, 313, 20, 20, "p");
- filterpref->tooltip("Apply the filter before the waveshaping");
- filterpref->down_box(FL_DOWN_BOX);
- filterpref->labelsize(10);
- filterpref->callback((Fl_Callback*)cb_filterpref);
- filterpref->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
- } // Fl_Check_Button* filterpref
- { filtervalue2 = new WidgetPDial(392, 313, 20, 20);
- filtervalue2->tooltip("Oscillator\'s filter parameter2");
- filtervalue2->box(FL_OVAL_BOX);
- filtervalue2->color(FL_BACKGROUND_COLOR);
- filtervalue2->selection_color(FL_INACTIVE_COLOR);
- filtervalue2->labeltype(FL_NORMAL_LABEL);
- filtervalue2->labelfont(0);
- filtervalue2->labelsize(14);
- filtervalue2->labelcolor(FL_FOREGROUND_COLOR);
- filtervalue2->maximum(127);
- filtervalue2->step(1);
- filtervalue2->callback((Fl_Callback*)cb_filtervalue2);
- filtervalue2->align(Fl_Align(FL_ALIGN_BOTTOM));
- filtervalue2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* filtervalue2
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(590, 308, 135, 30);
- o->box(FL_ENGRAVED_BOX);
- { sabutton = new Fl_Choice(630, 313, 60, 20, "Sp.adj.");
- sabutton->tooltip("Oscillator\'s spectrum adjust");
- sabutton->down_box(FL_BORDER_BOX);
- sabutton->labelsize(10);
- sabutton->textsize(10);
- sabutton->callback((Fl_Callback*)cb_sabutton);
- sabutton->menu(menu_sabutton);
- } // Fl_Choice* sabutton
- { sadjpar = new WidgetPDial(695, 313, 20, 20);
- sadjpar->tooltip("Oscillator\'s spectrum adjust parameter");
- sadjpar->box(FL_OVAL_BOX);
- sadjpar->color(FL_BACKGROUND_COLOR);
- sadjpar->selection_color(FL_INACTIVE_COLOR);
- sadjpar->labeltype(FL_NORMAL_LABEL);
- sadjpar->labelfont(0);
- sadjpar->labelsize(14);
- sadjpar->labelcolor(FL_FOREGROUND_COLOR);
- sadjpar->maximum(127);
- sadjpar->step(1);
- sadjpar->callback((Fl_Callback*)cb_sadjpar);
- sadjpar->align(Fl_Align(FL_ALIGN_BOTTOM));
- sadjpar->when(FL_WHEN_CHANGED);
- } // WidgetPDial* sadjpar
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(665, 340, 65, 65);
- o->box(FL_ENGRAVED_BOX);
- { harmonicshiftcounter = new Fl_Counter(670, 365, 55, 15, "Harmonic Shift");
- harmonicshiftcounter->type(1);
- harmonicshiftcounter->labelsize(10);
- harmonicshiftcounter->minimum(-64);
- harmonicshiftcounter->maximum(64);
- harmonicshiftcounter->step(1);
- harmonicshiftcounter->textfont(1);
- harmonicshiftcounter->textsize(10);
- harmonicshiftcounter->callback((Fl_Callback*)cb_harmonicshiftcounter);
- harmonicshiftcounter->align(Fl_Align(129));
- } // Fl_Counter* harmonicshiftcounter
- { harmonicshiftpre = new Fl_Check_Button(690, 385, 34, 15, "preH");
- harmonicshiftpre->tooltip("Apply the harmonic shift before the waveshaping and filtering");
- harmonicshiftpre->down_box(FL_DOWN_BOX);
- harmonicshiftpre->labelsize(10);
- harmonicshiftpre->callback((Fl_Callback*)cb_harmonicshiftpre);
- harmonicshiftpre->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
- } // Fl_Check_Button* harmonicshiftpre
- { Fl_Button* o = new Fl_Button(670, 385, 20, 15, "R");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_R);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(665, 410, 65, 90);
- o->box(FL_ENGRAVED_FRAME);
- { adhrtype = new Fl_Choice(670, 425, 55, 15, "Adpt.Harm.");
- adhrtype->tooltip("The type of the addaptive harmonics");
- adhrtype->down_box(FL_BORDER_BOX);
- adhrtype->labelsize(10);
- adhrtype->textsize(10);
- adhrtype->callback((Fl_Callback*)cb_adhrtype);
- adhrtype->align(Fl_Align(129));
- adhrtype->when(FL_WHEN_RELEASE_ALWAYS);
- adhrtype->menu(menu_adhrtype);
- } // Fl_Choice* adhrtype
- { adhrpow = new WidgetPDial(700, 460, 25, 25, "pow");
- adhrpow->tooltip("Adaptive harmonics power");
- adhrpow->box(FL_OVAL_BOX);
- adhrpow->color(FL_BACKGROUND_COLOR);
- adhrpow->selection_color(FL_INACTIVE_COLOR);
- adhrpow->labeltype(FL_NORMAL_LABEL);
- adhrpow->labelfont(0);
- adhrpow->labelsize(10);
- adhrpow->labelcolor(FL_FOREGROUND_COLOR);
- adhrpow->maximum(200);
- adhrpow->step(1);
- adhrpow->callback((Fl_Callback*)cb_adhrpow);
- adhrpow->align(Fl_Align(FL_ALIGN_BOTTOM));
- adhrpow->when(FL_WHEN_CHANGED);
- } // WidgetPDial* adhrpow
- { adhrbf = new WidgetPDial(670, 460, 25, 25, "baseF");
- adhrbf->tooltip("Adaptive harmonics base frequency");
- adhrbf->box(FL_OVAL_BOX);
- adhrbf->color(FL_BACKGROUND_COLOR);
- adhrbf->selection_color(FL_INACTIVE_COLOR);
- adhrbf->labeltype(FL_NORMAL_LABEL);
- adhrbf->labelfont(0);
- adhrbf->labelsize(10);
- adhrbf->labelcolor(FL_FOREGROUND_COLOR);
- adhrbf->maximum(255);
- adhrbf->step(1);
- adhrbf->callback((Fl_Callback*)cb_adhrbf);
- adhrbf->align(Fl_Align(FL_ALIGN_BOTTOM));
- adhrbf->when(FL_WHEN_CHANGED);
- } // WidgetPDial* adhrbf
- { adhrpar = new Fl_Slider(670, 445, 55, 10);
- adhrpar->type(5);
- adhrpar->box(FL_FLAT_BOX);
- adhrpar->maximum(100);
- adhrpar->step(1);
- adhrpar->value(50);
- adhrpar->callback((Fl_Callback*)cb_adhrpar);
- } // Fl_Slider* adhrpar
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(440, 308, 150, 30);
- o->box(FL_ENGRAVED_BOX);
- { modtype = new Fl_Choice(470, 315, 50, 15, "Mod.");
- modtype->tooltip("modulation");
- modtype->down_box(FL_BORDER_BOX);
- modtype->labelsize(10);
- modtype->textsize(10);
- modtype->callback((Fl_Callback*)cb_modtype);
- modtype->menu(menu_modtype);
- } // Fl_Choice* modtype
- { modpar1 = new WidgetPDial(530, 315, 15, 15);
- modpar1->tooltip("Oscillator\'s modulation parameter 1");
- modpar1->box(FL_OVAL_BOX);
- modpar1->color(FL_BACKGROUND_COLOR);
- modpar1->selection_color(FL_INACTIVE_COLOR);
- modpar1->labeltype(FL_NORMAL_LABEL);
- modpar1->labelfont(0);
- modpar1->labelsize(14);
- modpar1->labelcolor(FL_FOREGROUND_COLOR);
- modpar1->maximum(127);
- modpar1->step(1);
- modpar1->callback((Fl_Callback*)cb_modpar1);
- modpar1->align(Fl_Align(FL_ALIGN_BOTTOM));
- modpar1->when(FL_WHEN_CHANGED);
- } // WidgetPDial* modpar1
- { modpar2 = new WidgetPDial(550, 315, 15, 15);
- modpar2->tooltip("Oscillator\'s modulation parameter 2");
- modpar2->box(FL_OVAL_BOX);
- modpar2->color(FL_BACKGROUND_COLOR);
- modpar2->selection_color(FL_INACTIVE_COLOR);
- modpar2->labeltype(FL_NORMAL_LABEL);
- modpar2->labelfont(0);
- modpar2->labelsize(14);
- modpar2->labelcolor(FL_FOREGROUND_COLOR);
- modpar2->maximum(127);
- modpar2->step(1);
- modpar2->callback((Fl_Callback*)cb_modpar2);
- modpar2->align(Fl_Align(FL_ALIGN_BOTTOM));
- modpar2->when(FL_WHEN_CHANGED);
- } // WidgetPDial* modpar2
- { modpar3 = new WidgetPDial(570, 315, 15, 15);
- modpar3->tooltip("Oscillator\'s modulation parameter 3");
- modpar3->box(FL_OVAL_BOX);
- modpar3->color(FL_BACKGROUND_COLOR);
- modpar3->selection_color(FL_INACTIVE_COLOR);
- modpar3->labeltype(FL_NORMAL_LABEL);
- modpar3->labelfont(0);
- modpar3->labelsize(14);
- modpar3->labelcolor(FL_FOREGROUND_COLOR);
- modpar3->maximum(127);
- modpar3->step(1);
- modpar3->callback((Fl_Callback*)cb_modpar3);
- modpar3->align(Fl_Align(FL_ALIGN_BOTTOM));
- modpar3->when(FL_WHEN_CHANGED);
- } // WidgetPDial* modpar3
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(670, 525, 55, 15, "Sine");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Sine);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(670, 545, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(700, 545, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- { _this_has_to_be_the_last = new Fl_Scroll(5, 340, 660, 250);
- _this_has_to_be_the_last->type(1);
- _this_has_to_be_the_last->box(FL_ENGRAVED_BOX);
- { Fl_Pack* o = harmonics = new Fl_Pack(10, 345, 650, 225);
- harmonics->type(1);
- for (int i=0;i<MAX_AD_HARMONICS;i++){h[i]=new Oscilharmonic(0,0,20,o->h(),"");h[i]->init(oscil,i,oscildisplaygroup,oldosc,cbwidget,applybutton,master);}
- harmonics->end();
- } // Fl_Pack* harmonics
- _this_has_to_be_the_last->end();
- } // Fl_Scroll* _this_has_to_be_the_last
- if (oscil->ADvsPAD) o->label("PADsynth Harmonic Content Editor");
- osceditUI->end();
- } // Fl_Double_Window* osceditUI
- return osceditUI;
-}
-
-OscilEditor::OscilEditor(OscilGen *oscil_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *cbapplywidget_,Master *master_) {
- oscil=oscil_;
- oldosc=oldosc_;
- cbwidget=cbwidget_;
- cbapplywidget=cbapplywidget_;
- master=master_;
-
- make_window();
-
- refresh();
- osceditUI->show();
-}
-
-OscilEditor::~OscilEditor() {
- osceditUI->hide();
- //for (int i=0;i<MAX_AD_HARMONICS;i++) delete (h[i]);
- delete (osceditUI);
-}
-
-void OscilEditor::refresh() {
- magtype->value(oscil->Phmagtype);
- rndslider->value(oscil->Prand-64);
-
- hrndtype->value(oscil->Pamprandtype);
- hrnddial->value(oscil->Pamprandpower);
-
- bftype->value(oscil->Pcurrentbasefunc);
- bfparval->value(oscil->Pbasefuncpar-64);
- bfslider->value(oscil->Pbasefuncpar-64);
-
- bfmodtype->value(oscil->Pbasefuncmodulation);
- bfmodpar1->value(oscil->Pbasefuncmodulationpar1);
- bfmodpar2->value(oscil->Pbasefuncmodulationpar2);
- bfmodpar3->value(oscil->Pbasefuncmodulationpar3);
-
- wshbutton->value(oscil->Pwaveshapingfunction);
- wsparval->value(oscil->Pwaveshaping-64);
- wshpar->value(oscil->Pwaveshaping-64);
-
- fltbutton->value(oscil->Pfiltertype);
- filtervalue1->value(oscil->Pfilterpar1);
- filtervalue2->value(oscil->Pfilterpar2);
- filterpref->value(oscil->Pfilterbeforews);
-
- modtype->value(oscil->Pmodulation);
- modpar1->value(oscil->Pmodulationpar1);
- modpar2->value(oscil->Pmodulationpar2);
- modpar3->value(oscil->Pmodulationpar3);
-
- sabutton->value(oscil->Psatype);
- sadjpar->value(oscil->Psapar);
-
- harmonicshiftcounter->value(oscil->Pharmonicshift);
- harmonicshiftpre->value(oscil->Pharmonicshiftfirst);
-
- adhrtype->value(oscil->Padaptiveharmonics);
- adhrbf->value(oscil->Padaptiveharmonicsbasefreq);
- adhrpow->value(oscil->Padaptiveharmonicspower);
- adhrtype->value(oscil->Padaptiveharmonicspar);
-
- for (int i=0;i<MAX_AD_HARMONICS;i++) h[i]->refresh();
-
- pthread_mutex_lock(&master->mutex);
- oscil->prepare();
- pthread_mutex_unlock(&master->mutex);
-
- basefuncdisplaygroup->redraw();
- redrawoscil();
-}
-
-void OscilEditor::redrawoscil() {
- oscildisplaygroup->redraw();
- oldosc->redraw();
- if (cbwidget!=NULL) {
- cbwidget->do_callback();
- applybutton->color(FL_RED);
- applybutton->redraw();
- };
-}
diff --git a/plugins/zynaddsubfx/src/UI/OscilGenUI.fl b/plugins/zynaddsubfx/src/UI/OscilGenUI.fl
deleted file mode 100644
index d686b2e..0000000
--- a/plugins/zynaddsubfx/src/UI/OscilGenUI.fl
+++ /dev/null
@@ -1,1133 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0109
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include "../Synth/OscilGen.h"} {public
-}
-
-decl {\#include "../Misc/Util.h"} {public
-}
-
-decl {\#include "../Misc/Master.h"} {public
-}
-
-decl {\#include "ResonanceUI.h"} {public
-}
-
-decl {\#include <FL/Fl_Box.H>} {public
-}
-
-decl {\#include <FL/Fl_Group.H>} {public
-}
-
-decl {\#include <FL/Fl_Slider.H>} {public
-}
-
-decl {\#include <math.h>} {}
-
-decl {\#include <stdio.h>} {}
-
-decl {\#include <stdlib.h>} {}
-
-decl {\#include <string.h>} {}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include "EnvelopeUI.h"} {public
-}
-
-decl {\#include "LFOUI.h"} {public
-}
-
-decl {\#include "FilterUI.h"} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class OscilSpectrum {: {public Fl_Box}
-} {
- Function {OscilSpectrum(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {oscil=NULL;} {}
- }
- Function {init(OscilGen *oscil_,int oscbase_,Master *master_)} {} {
- code {oscil=oscil_;
-oscbase=oscbase_;
-master=master_;} {}
- }
- Function {draw()} {} {
- code {int ox=x(),oy=y(),lx=w(),ly=h(),i;
-const int maxdb=60;//must be multiple of 10
-int GX=2;
-int n=lx/GX-1;
-if (n>OSCIL_SIZE/2) n=OSCIL_SIZE/2;
-
-REALTYPE x;
-REALTYPE* spc=new REALTYPE[n];
-for (i=0;i<n;i++) spc[i]=0.0;
-
-pthread_mutex_lock(&master->mutex);
-if (oscbase==0) oscil->getspectrum(n,spc,0);
- else oscil->getspectrum(n,spc,1);
-pthread_mutex_unlock(&master->mutex);
-
-//normalize
-REALTYPE max=0;
-for (i=0;i<n;i++){
- x=fabs(spc[i]);
- if (max<x) max=x;
-}
-if (max<0.000001) max=1.0;
-max=max*1.05;
-
-//draw
-
-if (this->active_r()) fl_color(this->parent()->selection_color());
- else fl_color(this->parent()->color());
-fl_line_style(FL_DOT);
-
-for (i=1;i<maxdb/10;i++){
- int ky=(int)((REALTYPE)i*ly*10.0/maxdb)/2;
- ky*=2;
- fl_line(ox,oy+ky-1,ox+lx-2,oy+ky-1);
-};
-
-for (i=2;i<n;i++){
- int tmp=i*GX-2;
- if (i%10==1) fl_line_style(0);
- else fl_line_style(FL_DOT);
- fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
-}
-
-if (this->active_r()) fl_color(this->parent()->labelcolor());
- else fl_color(this->parent()->color());
-fl_line_style(0);
-
-//draws the spectrum
-for (i=0;i<n;i++){
- int tmp=i*GX+2;
- x=spc[i]/max;
-
- if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
- else x=0;
-
- int val=(int) ((ly-2)*x);
- if (val>0) fl_line(ox+tmp,oy+ly-2-val,ox+tmp,oy+ly-2);
-}
-delete [] spc;} {selected
- }
- }
- decl {OscilGen *oscil;} {}
- decl {int oscbase;} {}
- decl {Master *master;} {}
-}
-
-class PSlider {: {public Fl_Slider}
-} {
- Function {PSlider(int x,int y, int w, int h, const char *label=0):Fl_Slider(x,y,w,h,label)} {} {code{;}}
- Function {handle(int event)} {return_type int
- } {
- code {int X=x(),Y=y(),W=w(),H=h();
-
-if ((!Fl::event_buttons())|| (event==0)||(Fl::event_shift()==0)) return(Fl_Slider::handle(event));
-
-if (!Fl::event_inside(X,Y,W,H)) {
- if (event==FL_DRAG){
- Fl_Slider::handle(FL_RELEASE);
- Fl_Slider::handle(FL_LEAVE);
- deactivate();
- activate();
- return(1);
- }else{
- return(Fl_Slider::handle(event));
- };
-} else {
- //Fl_Slider::handle(FL_FOCUS);
- Fl_Slider::handle(FL_PUSH);
-};
-
-return(1);} {}
- }
-}
-
-class Oscilloscope {: {public Fl_Box}
-} {
- Function {Oscilloscope(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {oscil=NULL;
-phase=64;
-oscbase=0;} {}
- }
- Function {init(OscilGen *oscil_,Master *master_)} {} {
- code {oscil=oscil_;
-master=master_;} {}
- }
- Function {init(OscilGen *oscil_,int oscbase_,Master *master_)} {} {
- code {oscil=oscil_;
-oscbase=oscbase_;
-master=master_;} {}
- }
- Function {init(OscilGen *oscil_,int oscbase_,int phase_,Master *master_)} {} {
- code {oscil=oscil_;
-oscbase=oscbase_;
-phase=phase_;
-master=master_;} {}
- }
- Function {draw()} {} {
- code {int ox=x(),oy=y(),lx=w(),ly=h()-1,i;
-REALTYPE smps[OSCIL_SIZE];
-pthread_mutex_lock(&master->mutex);
-if (oscbase==0) oscil->get(smps,-1.0);
- else oscil->getcurrentbasefunction(smps);
-pthread_mutex_unlock(&master->mutex);
-
-if (damage()!=1){
- fl_color(0,0,0);
- fl_rectf(ox,oy,lx,ly);
-};
-
-//normalize
-REALTYPE max=0;
-for (i=0;i<OSCIL_SIZE;i++)
- if (max<fabs(smps[i])) max=fabs(smps[i]);
-//fprintf(stderr,"%.4f\\n",max);
-if (max<0.00001) max=1.0;
-max=-max*1.05;
-
-//draw
-fl_line_style(FL_DASH);
-if (this->active_r()) fl_color(this->parent()->labelcolor());
- else fl_color(this->parent()->color());
-int GX=16;if (lx<GX*3) GX=-1;
-for (i=1;i<GX;i++){
- int tmp=(int)(lx/(REALTYPE)GX*i);
- fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
-};
-int GY=8;if (ly<GY*3) GY=-1;
-for (i=1;i<GY;i++){
- int tmp=(int)(ly/(REALTYPE)GY*i);
- fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
-};
-
-//draw the function
-fl_line_style(0,1);
-fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-if (this->active_r()) fl_color(this->parent()->selection_color());
- else fl_color(this->parent()->labelcolor());
-int lw=1;
-//if ((lx<135)||(ly<135)) lw=1;
-fl_line_style(0,lw);
-int ph=(int)((phase-64.0)/128.0*OSCIL_SIZE+OSCIL_SIZE);
-for (i=1;i<lx;i++){
- int k1=(int)((REALTYPE)OSCIL_SIZE*(i-1)/lx)+ph;
- int k2=(int)((REALTYPE)OSCIL_SIZE*i/lx)+ph;
- REALTYPE y1=smps[k1%OSCIL_SIZE]/max;
- REALTYPE y2=smps[k2%OSCIL_SIZE]/max;
- fl_line(i-1+ox,(int)(y1*ly/2.0)+oy+ly/2,i+ox,(int)(y2*ly/2.0)+oy+ly/2);
-};} {}
- }
- decl {OscilGen *oscil;} {}
- decl {int oscbase;} {}
- decl {int phase;} {public
- }
- decl {Master *master;} {}
-}
-
-class Oscilharmonic {: {public Fl_Group}
-} {
- Function {make_window()} {private
- } {
- Fl_Window harmonic {
- private xywh {328 166 90 225} type Double hide
- class Fl_Group
- } {
- Fl_Slider mag {
- callback {int x=64;
-if (Fl::event_button3()) o->value(x);
- else x=127-(int)o->value();
-if (x==64) o->selection_color(0);
- else o->selection_color(222);
-
-pthread_mutex_lock(&master->mutex);
- oscil->Phmag[n]=x;
- if (x==64) {
- oscil->Phphase[n]=64;
- phase->value(64);
- };
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-display->redraw();
-oldosc->redraw();
-if (cbwidget!=NULL) {
- cbwidget->do_callback();
- applybutton->color(FL_RED);
- applybutton->redraw();
-};}
- xywh {0 15 15 115} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64
- code0 {o->value(127-oscil->Phmag[n]);}
- code1 {if (oscil->Phmag[n]==64) o->selection_color(0);}
- class PSlider
- }
- Fl_Slider phase {
- callback {int x=64;
-if (Fl::event_button3()) o->value(x);
- else x=(int)o->value();
-
-pthread_mutex_lock(&master->mutex);
- oscil->Phphase[n]=x;
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-display->redraw();
-oldosc->redraw();
-if (cbwidget!=NULL) {
- cbwidget->do_callback();
- applybutton->color(FL_RED);
- applybutton->redraw();
-};}
- xywh {0 135 15 75} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64
- code0 {o->value(oscil->Phphase[n]);}
- class PSlider
- }
- Fl_Box {} {
- xywh {15 70 5 5} box FLAT_BOX color 45
- }
- Fl_Box {} {
- xywh {15 170 5 5} box FLAT_BOX color 45
- }
- Fl_Box {} {
- label 01
- xywh {0 210 20 15} labelfont 1 labelsize 9 align 20
- code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
- }
- Fl_Box {} {
- label 01
- xywh {0 0 20 15} labelfont 1 labelsize 9 align 20
- code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
- }
- }
- }
- Function {Oscilharmonic(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {n=0;
-oscil=NULL;
-display=NULL;
-applybutton=NULL;
-cbwidget=NULL;} {}
- }
- Function {init(OscilGen *oscil_,int n_,Fl_Group *display_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *applybutton_, Master *master_)} {} {
- code {oscil=oscil_;
-n=n_;
-display=display_;
-master=master_;
-oldosc=oldosc_;
-cbwidget=cbwidget_;
-applybutton=applybutton_;
-make_window();
-end();
-harmonic->show();} {}
- }
- Function {refresh()} {} {
- code {mag->value(127-oscil->Phmag[n]);
-phase->value(oscil->Phphase[n]);
-
-if (oscil->Phmag[n]==64) mag->selection_color(0);
- else mag->selection_color(222);} {}
- }
- Function {~Oscilharmonic()} {} {
- code {harmonic->hide();
-//delete(harmonic);} {}
- }
- decl {OscilGen *oscil;} {}
- decl {Fl_Group *display;} {}
- decl {int n;} {}
- decl {Fl_Widget *oldosc,*cbwidget,*applybutton;} {}
- decl {Master *master;} {}
-}
-
-class OscilEditor {: {public PresetsUI_}
-} {
- Function {make_window()} {} {
- Fl_Window osceditUI {
- label {ADsynth Oscillator Editor}
- xywh {131 90 735 595} type Double hide
- code0 {if (oscil->ADvsPAD) o->label("PADsynth Harmonic Content Editor");}
- } {
- Fl_Button applybutton {
- label Apply
- callback {applybutton->color(FL_GRAY);
-applybutton->redraw();
-if (cbapplywidget!=NULL) {
- cbapplywidget->do_callback();
- cbapplywidget->color(FL_GRAY);
- cbapplywidget->redraw();
-};}
- xywh {300 280 60 20} box THIN_UP_BOX labelfont 1
- code0 {if (!oscil->ADvsPAD) o->hide();}
- }
- Fl_Group oscildisplaygroup {
- xywh {5 5 360 300} box ENGRAVED_FRAME
- } {
- Fl_Group {} {open
- xywh {10 85 350 190} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
- code0 {Oscilloscope *osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {osc->init(oscil,master);}
- } {}
- Fl_Box {} {
- label Oscillator
- xywh {120 10 110 20} box FLAT_BOX labelfont 1
- }
- Fl_Value_Slider rndslider {
- label rnd
- callback {oscil->Prand=(int)o->value()+64;
-oscildisplaygroup->redraw();
-oldosc->redraw();}
- tooltip {Oscilator Phase Randomness: smaller than 0 is "group", larger than 0 is for each harmonic} xywh {140 285 100 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
- code0 {if (oscil->ADvsPAD) o->hide();}
- }
- Fl_Group {} {open
- xywh {10 30 350 50} box THIN_DOWN_BOX color 32 selection_color 218 labelcolor 63
- code0 {OscilSpectrum *spc=new OscilSpectrum(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {spc->init(oscil,0,master);}
- } {}
- Fl_Group {} {
- xywh {246 277 115 25} box ENGRAVED_BOX
- code0 {if (oscil->ADvsPAD) o->hide();}
- } {
- Fl_Choice hrndtype {
- label {H.rnd}
- callback {oscil->Pamprandtype=(int) o->value();}
- tooltip {Harmonic Amplitude Randomness} xywh {281 282 50 15} down_box BORDER_BOX labelsize 10 textsize 10
- } {
- MenuItem {} {
- label None
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sin
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial hrnddial {
- callback {oscil->Pamprandpower=(int) o->value();}
- tooltip {Oscillator's spectrum adjust parameter} xywh {338 280 18 18} maximum 127 step 1
- class WidgetPDial
- }
- }
- }
- Fl_Box {} {
- label {Base Func.}
- xywh {495 15 110 20} box FLAT_BOX labelfont 1
- }
- Fl_Group basefuncdisplaygroup {
- xywh {365 5 360 300} box ENGRAVED_FRAME
- } {
- Fl_Group {} {
- xywh {370 85 350 190} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
- code0 {Oscilloscope *osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {osc->init(oscil,1,master);}
- } {}
- Fl_Dial bfslider {
- callback {oscil->Pbasefuncpar=(int)o->value()+64;
-basefuncdisplaygroup->redraw();
-bfparval->value(oscil->Pbasefuncpar-64);
-
-redrawoscil();}
- tooltip {Base Function Parameter} xywh {520 280 20 20} minimum -64 maximum 63 step 1
- class WidgetPDial
- }
- Fl_Choice bftype {
- label {Base.F..}
- callback {oscil->Pcurrentbasefunc=(int) o->value();
-
-basefuncdisplaygroup->redraw();
-redrawoscil();
-
-if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodulation->deactivate();
- else basefuncmodulation->activate();}
- xywh {370 285 90 15} down_box BORDER_BOX labelsize 10 align 5 textsize 11
- } {
- MenuItem {} {
- label Sine
- xywh {10 10 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Triangle
- xywh {20 20 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Pulse
- xywh {30 30 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Saw
- xywh {40 40 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Power
- xywh {50 50 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Gauss
- xywh {50 50 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Diode
- xywh {60 60 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label AbsSine
- xywh {70 70 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label PulseSine
- xywh {80 80 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label StrchSine
- xywh {90 90 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Chirp
- xywh {100 100 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label AbsStrSine
- xywh {102 102 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Chebyshev
- xywh {112 112 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Sqr
- xywh {122 122 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Box {} {
- label {Base Func.}
- xywh {480 10 110 20} box FLAT_BOX labelfont 1
- }
- Fl_Group {} {open
- xywh {370 30 350 50} box THIN_DOWN_BOX color 32 selection_color 218 labelcolor 63
- code0 {OscilSpectrum *spc=new OscilSpectrum (o->x(),o->y(),o->w(),o->h(),"");}
- code1 {spc->init(oscil,1,master);}
- } {}
- Fl_Value_Output bfparval {
- label {Par.}
- xywh {490 285 25 15} labelsize 12 minimum -63 maximum 63 step 1
- }
- Fl_Group basefuncmodulation {
- xywh {550 276 169 25} box ENGRAVED_BOX
- code0 {if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodulation->deactivate();}
- } {
- Fl_Choice bfmodtype {
- label {B.F.Mod.}
- callback {oscil->Pbasefuncmodulation=(int) o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();}
- tooltip {Base function modulation} xywh {599 281 50 15} down_box BORDER_BOX labelsize 10 textsize 10
- } {
- MenuItem {} {
- label None
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Rev
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sine
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial bfmodpar1 {
- callback {oscil->Pbasefuncmodulationpar1=(int)o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();}
- tooltip {Oscillator's modulation parameter 1} xywh {659 281 15 15} maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial bfmodpar2 {
- callback {oscil->Pbasefuncmodulationpar2=(int)o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();}
- tooltip {Oscillator's modulation parameter 2} xywh {679 281 15 15} maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial bfmodpar3 {
- callback {oscil->Pbasefuncmodulationpar3=(int)o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();}
- tooltip {Oscillator's modulation parameter 3} xywh {699 281 15 15} maximum 127 step 1
- class WidgetPDial
- }
- }
- }
- Fl_Choice magtype {
- label {Mag.Type}
- callback {oscil->Phmagtype=(int) o->value();
-basefuncdisplaygroup->redraw();
-
-redrawoscil();}
- xywh {70 280 65 20} down_box BORDER_BOX labelsize 11 textsize 11
- } {
- MenuItem {} {
- label Linear
- xywh {0 0 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {-40dB}
- xywh {10 10 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {-60dB}
- xywh {20 20 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {-80dB}
- xywh {30 30 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {-100dB}
- xywh {40 40 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Button {} {
- label {Use as base}
- callback {oscil->useasbase();
-if (autoclearbutton->value()){
- for (int i=0;i<MAX_AD_HARMONICS;i++){
- h[i]->mag->value(64);
- oscil->Phmag[i]=64;
- h[i]->phase->value(64);
- oscil->Phphase[i]=64;
- };
- oscil->Phmag[0]=127;
-
- oscil->Pharmonicshift=0;
- harmonicshiftcounter->value(0);
-
- h[0]->mag->value(0);
- wshbutton->value(0);
- wshbutton->do_callback();
- fltbutton->value(0);
- fltbutton->do_callback();
- sabutton->value(0);
- sabutton->do_callback();
-};
-
-pthread_mutex_lock(&master->mutex);
- for (int i=0;i<MAX_AD_HARMONICS;i++){
- if (oscil->Phmag[i]==64) h[i]->mag->selection_color(0);
- else h[i]->mag->selection_color(222);
- };
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-basefuncdisplaygroup->redraw();
-redrawoscil();}
- tooltip {Use this Oscillator as base function} xywh {5 313 85 20} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Button {} {
- label Close
- callback {osceditUI->hide();}
- xywh {668 565 62 25} box THIN_UP_BOX
- }
- Fl_Button {} {
- label Clear
- callback {if (!fl_choice("Clear the harmonics settings?","No","Yes",NULL)) return;
-
-for (int i=0;i<MAX_AD_HARMONICS;i++){
- h[i]->mag->value(64);
- oscil->Phmag[i]=64;
- h[i]->phase->value(64);
- oscil->Phphase[i]=64;
-};
-oscil->Phmag[0]=127;
-h[0]->mag->value(0);
-
-for (int i=0;i<MAX_AD_HARMONICS;i++){
- if (oscil->Phmag[i]==64) h[i]->mag->selection_color(0);
- else h[i]->mag->selection_color(222);
-};
-
-//harmonics->redraw();
-
-pthread_mutex_lock(&master->mutex);
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-redrawoscil();}
- xywh {670 505 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Group {} {
- xywh {135 308 150 30} box ENGRAVED_BOX
- } {
- Fl_Choice wshbutton {
- label {Wsh.}
- callback {oscil->Pwaveshapingfunction=(int) o->value();
-basefuncdisplaygroup->redraw();
-redrawoscil();} open
- tooltip {Waveshaping function} xywh {165 313 55 20} down_box BORDER_BOX labelsize 10 textsize 10
- } {
- MenuItem {} {
- label None
- xywh {25 25 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Atan
- xywh {35 35 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Asym1
- xywh {45 45 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sine
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Qnts
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Zigzg
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Lmt
- xywh {95 95 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LmtU
- xywh {105 105 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LmtL
- xywh {115 115 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label ILmt
- xywh {127 127 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Clip
- xywh {137 137 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Asym2
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow2
- xywh {95 95 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sgm
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial wshpar {
- callback {oscil->Pwaveshaping=(int)o->value()+64;
-wsparval->value(oscil->Pwaveshaping-64);
-redrawoscil();}
- tooltip {Waveshaping Parameter} xywh {260 313 20 20} minimum -64 maximum 63 step 1
- class WidgetPDial
- }
- Fl_Value_Output wsparval {
- xywh {228 316 25 15} labelsize 12 minimum -63 maximum 63 step 1
- }
- }
- Fl_Light_Button autoclearbutton {
- label {Clr.}
- tooltip {Auto clear when using the oscillator as base function} xywh {95 313 35 20} box THIN_UP_BOX value 1 labelfont 1 labelsize 10
- }
- Fl_Group {} {
- xywh {285 308 155 30} box ENGRAVED_BOX
- } {
- Fl_Choice fltbutton {
- label Filter
- callback {oscil->Pfiltertype=(int) o->value();
-
-redrawoscil();}
- tooltip {Oscillator's filter type} xywh {315 313 50 20} down_box BORDER_BOX labelsize 10 textsize 10
- } {
- MenuItem {} {
- label None
- xywh {35 35 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LP1
- xywh {45 45 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label HP1a
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label HP1b
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label BP1
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label BS1
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LP2
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label HP2
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label BP2
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label BS2
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Cos
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sin
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label LSh
- xywh {95 95 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label S
- xywh {105 105 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial filtervalue1 {
- callback {oscil->Pfilterpar1=(int)o->value();
-
-redrawoscil();}
- tooltip {Oscillator's filter parameter1} xywh {367 313 20 20} maximum 127 step 1
- class WidgetPDial
- }
- Fl_Check_Button filterpref {
- label p
- callback {oscil->Pfilterbeforews=(int)o->value();
-
-redrawoscil();}
- tooltip {Apply the filter before the waveshaping} xywh {415 313 20 20} down_box DOWN_BOX labelsize 10 align 24
- }
- Fl_Dial filtervalue2 {
- callback {oscil->Pfilterpar2=(int)o->value();
-
-redrawoscil();}
- tooltip {Oscillator's filter parameter2} xywh {392 313 20 20} maximum 127 step 1
- class WidgetPDial
- }
- }
- Fl_Group {} {
- xywh {590 308 135 30} box ENGRAVED_BOX
- } {
- Fl_Choice sabutton {
- label {Sp.adj.}
- callback {oscil->Psatype=(int) o->value();
-redrawoscil();}
- tooltip {Oscillator's spectrum adjust} xywh {630 313 60 20} down_box BORDER_BOX labelsize 10 textsize 10
- } {
- MenuItem {} {
- label None
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label ThrsD
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label ThrsU
- xywh {85 85 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial sadjpar {
- callback {oscil->Psapar=(int)o->value();
-redrawoscil();}
- tooltip {Oscillator's spectrum adjust parameter} xywh {695 313 20 20} maximum 127 step 1
- class WidgetPDial
- }
- }
- Fl_Group {} {
- xywh {665 340 65 65} box ENGRAVED_BOX
- } {
- Fl_Counter harmonicshiftcounter {
- label {Harmonic Shift}
- callback {oscil->Pharmonicshift=(int)o->value();
-redrawoscil();}
- xywh {670 365 55 15} type Simple labelsize 10 align 129 minimum -64 maximum 64 step 1 textfont 1 textsize 10
- }
- Fl_Check_Button harmonicshiftpre {
- label preH
- callback {oscil->Pharmonicshiftfirst=(int)o->value();
-redrawoscil();}
- tooltip {Apply the harmonic shift before the waveshaping and filtering} xywh {690 385 34 15} down_box DOWN_BOX labelsize 10 align 24
- }
- Fl_Button {} {
- label R
- callback {oscil->Pharmonicshift=0;
-harmonicshiftcounter->value(0);
-redrawoscil();}
- xywh {670 385 20 15} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- }
- Fl_Group {} {
- xywh {665 410 65 90} box ENGRAVED_FRAME
- } {
- Fl_Choice adhrtype {
- label {Adpt.Harm.}
- callback {oscil->Padaptiveharmonics=(int) o->value();
-redrawoscil();}
- tooltip {The type of the addaptive harmonics} xywh {670 425 55 15} down_box BORDER_BOX labelsize 10 align 129 when 6 textsize 10
- } {
- MenuItem {} {
- label OFF
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label ON
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Square
- xywh {100 100 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label 2xSub
- xywh {110 110 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label 2xAdd
- xywh {120 120 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label 3xSub
- xywh {120 120 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label 3xAdd
- xywh {130 130 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label 4xSub
- xywh {130 130 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label 4xAdd
- xywh {140 140 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial adhrpow {
- label pow
- callback {oscil->Padaptiveharmonicspower=(int)o->value();
-redrawoscil();}
- tooltip {Adaptive harmonics power} xywh {700 460 25 25} labelsize 10 maximum 200 step 1
- class WidgetPDial
- }
- Fl_Dial adhrbf {
- label baseF
- callback {oscil->Padaptiveharmonicsbasefreq=(int)o->value();
-redrawoscil();}
- tooltip {Adaptive harmonics base frequency} xywh {670 460 25 25} labelsize 10 maximum 255 step 1
- class WidgetPDial
- }
- Fl_Slider adhrpar {
- callback {oscil->Padaptiveharmonicspar=(int)o->value();
-redrawoscil();}
- xywh {670 445 55 10} type {Horz Knob} box FLAT_BOX maximum 100 step 1 value 50
- }
- }
- Fl_Group {} {
- xywh {440 308 150 30} box ENGRAVED_BOX
- } {
- Fl_Choice modtype {
- label {Mod.}
- callback {oscil->Pmodulation=(int) o->value();
-
-redrawoscil();}
- tooltip modulation xywh {470 315 50 15} down_box BORDER_BOX labelsize 10 textsize 10
- } {
- MenuItem {} {
- label None
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Rev
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sine
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Pow
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial modpar1 {
- callback {oscil->Pmodulationpar1=(int)o->value();
-
-redrawoscil();}
- tooltip {Oscillator's modulation parameter 1} xywh {530 315 15 15} maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial modpar2 {
- callback {oscil->Pmodulationpar2=(int)o->value();
-
-redrawoscil();}
- tooltip {Oscillator's modulation parameter 2} xywh {550 315 15 15} maximum 127 step 1
- class WidgetPDial
- }
- Fl_Dial modpar3 {
- callback {oscil->Pmodulationpar3=(int)o->value();
-redrawoscil();}
- tooltip {Oscillator's modulation parameter 3} xywh {570 315 15 15} maximum 127 step 1
- class WidgetPDial
- }
- }
- Fl_Button {} {
- label Sine
- callback {if (!fl_choice("Convert to SINE?","No","Yes",NULL)) return;
-
-pthread_mutex_lock(&master->mutex);
- oscil->convert2sine(0);
-pthread_mutex_unlock(&master->mutex);
-
-redrawoscil();
-refresh();}
- xywh {670 525 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(oscil);}
- xywh {670 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(oscil,this);}
- xywh {700 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Scroll _this_has_to_be_the_last {
- xywh {5 340 660 250} type HORIZONTAL box ENGRAVED_BOX
- } {
- Fl_Pack harmonics {open
- xywh {10 345 650 225} type HORIZONTAL
- code0 {for (int i=0;i<MAX_AD_HARMONICS;i++){h[i]=new Oscilharmonic(0,0,20,o->h(),"");h[i]->init(oscil,i,oscildisplaygroup,oldosc,cbwidget,applybutton,master);}}
- } {}
- }
- }
- }
- Function {OscilEditor(OscilGen *oscil_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *cbapplywidget_,Master *master_)} {} {
- code {oscil=oscil_;
-oldosc=oldosc_;
-cbwidget=cbwidget_;
-cbapplywidget=cbapplywidget_;
-master=master_;
-
-make_window();
-
-refresh();
-osceditUI->show();} {}
- }
- Function {~OscilEditor()} {} {
- code {osceditUI->hide();
-//for (int i=0;i<MAX_AD_HARMONICS;i++) delete (h[i]);
-delete (osceditUI);} {}
- }
- Function {refresh()} {} {
- code {magtype->value(oscil->Phmagtype);
-rndslider->value(oscil->Prand-64);
-
-hrndtype->value(oscil->Pamprandtype);
-hrnddial->value(oscil->Pamprandpower);
-
-bftype->value(oscil->Pcurrentbasefunc);
-bfparval->value(oscil->Pbasefuncpar-64);
-bfslider->value(oscil->Pbasefuncpar-64);
-
-bfmodtype->value(oscil->Pbasefuncmodulation);
-bfmodpar1->value(oscil->Pbasefuncmodulationpar1);
-bfmodpar2->value(oscil->Pbasefuncmodulationpar2);
-bfmodpar3->value(oscil->Pbasefuncmodulationpar3);
-
-wshbutton->value(oscil->Pwaveshapingfunction);
-wsparval->value(oscil->Pwaveshaping-64);
-wshpar->value(oscil->Pwaveshaping-64);
-
-fltbutton->value(oscil->Pfiltertype);
-filtervalue1->value(oscil->Pfilterpar1);
-filtervalue2->value(oscil->Pfilterpar2);
-filterpref->value(oscil->Pfilterbeforews);
-
-modtype->value(oscil->Pmodulation);
-modpar1->value(oscil->Pmodulationpar1);
-modpar2->value(oscil->Pmodulationpar2);
-modpar3->value(oscil->Pmodulationpar3);
-
-sabutton->value(oscil->Psatype);
-sadjpar->value(oscil->Psapar);
-
-harmonicshiftcounter->value(oscil->Pharmonicshift);
-harmonicshiftpre->value(oscil->Pharmonicshiftfirst);
-
-adhrtype->value(oscil->Padaptiveharmonics);
-adhrbf->value(oscil->Padaptiveharmonicsbasefreq);
-adhrpow->value(oscil->Padaptiveharmonicspower);
-adhrtype->value(oscil->Padaptiveharmonicspar);
-
-for (int i=0;i<MAX_AD_HARMONICS;i++) h[i]->refresh();
-
-pthread_mutex_lock(&master->mutex);
- oscil->prepare();
-pthread_mutex_unlock(&master->mutex);
-
-basefuncdisplaygroup->redraw();
-redrawoscil();} {}
- }
- Function {redrawoscil()} {} {
- code {oscildisplaygroup->redraw();
-oldosc->redraw();
-if (cbwidget!=NULL) {
- cbwidget->do_callback();
- applybutton->color(FL_RED);
- applybutton->redraw();
-};} {}
- }
- decl {OscilGen *oscil;} {}
- decl {Fl_Widget *oldosc,*cbwidget,*cbapplywidget;} {}
- decl {Oscilharmonic *h[MAX_AD_HARMONICS];} {}
- decl {Master *master;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/OscilGenUI.h b/plugins/zynaddsubfx/src/UI/OscilGenUI.h
deleted file mode 100644
index 0cd795b..0000000
--- a/plugins/zynaddsubfx/src/UI/OscilGenUI.h
+++ /dev/null
@@ -1,281 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef OscilGenUI_h
-#define OscilGenUI_h
-#include <FL/Fl.H>
-#include "../Synth/OscilGen.h"
-#include "../Misc/Util.h"
-#include "../Misc/Master.h"
-#include "ResonanceUI.h"
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Slider.H>
-#include "WidgetPDial.h"
-#include "EnvelopeUI.h"
-#include "LFOUI.h"
-#include "FilterUI.h"
-#include "PresetsUI.h"
-
-class OscilSpectrum : public Fl_Box {
-public:
- OscilSpectrum(int x,int y, int w, int h, const char *label=0);
- void init(OscilGen *oscil_,int oscbase_,Master *master_);
- void draw();
-private:
- OscilGen *oscil;
- int oscbase;
- Master *master;
-};
-
-class PSlider : public Fl_Slider {
-public:
- PSlider(int x,int y, int w, int h, const char *label=0);
- int handle(int event);
-};
-
-class Oscilloscope : public Fl_Box {
-public:
- Oscilloscope(int x,int y, int w, int h, const char *label=0);
- void init(OscilGen *oscil_,Master *master_);
- void init(OscilGen *oscil_,int oscbase_,Master *master_);
- void init(OscilGen *oscil_,int oscbase_,int phase_,Master *master_);
- void draw();
-private:
- OscilGen *oscil;
- int oscbase;
-public:
- int phase;
-private:
- Master *master;
-};
-#include <FL/Fl_Box.H>
-
-class Oscilharmonic : public Fl_Group {
- Fl_Group* make_window();
- Fl_Group *harmonic;
-public:
- PSlider *mag;
-private:
- void cb_mag_i(PSlider*, void*);
- static void cb_mag(PSlider*, void*);
-public:
- PSlider *phase;
-private:
- void cb_phase_i(PSlider*, void*);
- static void cb_phase(PSlider*, void*);
-public:
- Oscilharmonic(int x,int y, int w, int h, const char *label=0);
- void init(OscilGen *oscil_,int n_,Fl_Group *display_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *applybutton_, Master *master_);
- void refresh();
- ~Oscilharmonic();
-private:
- OscilGen *oscil;
- Fl_Group *display;
- int n;
- Fl_Widget *oldosc,*cbwidget,*applybutton;
- Master *master;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Pack.H>
-
-class OscilEditor : public PresetsUI_ {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *osceditUI;
- Fl_Button *applybutton;
-private:
- void cb_applybutton_i(Fl_Button*, void*);
- static void cb_applybutton(Fl_Button*, void*);
-public:
- Fl_Group *oscildisplaygroup;
- Fl_Value_Slider *rndslider;
-private:
- void cb_rndslider_i(Fl_Value_Slider*, void*);
- static void cb_rndslider(Fl_Value_Slider*, void*);
-public:
- Fl_Choice *hrndtype;
-private:
- void cb_hrndtype_i(Fl_Choice*, void*);
- static void cb_hrndtype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_hrndtype[];
-public:
- WidgetPDial *hrnddial;
-private:
- void cb_hrnddial_i(WidgetPDial*, void*);
- static void cb_hrnddial(WidgetPDial*, void*);
-public:
- Fl_Group *basefuncdisplaygroup;
- WidgetPDial *bfslider;
-private:
- void cb_bfslider_i(WidgetPDial*, void*);
- static void cb_bfslider(WidgetPDial*, void*);
-public:
- Fl_Choice *bftype;
-private:
- void cb_bftype_i(Fl_Choice*, void*);
- static void cb_bftype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_bftype[];
-public:
- Fl_Value_Output *bfparval;
- Fl_Group *basefuncmodulation;
- Fl_Choice *bfmodtype;
-private:
- void cb_bfmodtype_i(Fl_Choice*, void*);
- static void cb_bfmodtype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_bfmodtype[];
-public:
- WidgetPDial *bfmodpar1;
-private:
- void cb_bfmodpar1_i(WidgetPDial*, void*);
- static void cb_bfmodpar1(WidgetPDial*, void*);
-public:
- WidgetPDial *bfmodpar2;
-private:
- void cb_bfmodpar2_i(WidgetPDial*, void*);
- static void cb_bfmodpar2(WidgetPDial*, void*);
-public:
- WidgetPDial *bfmodpar3;
-private:
- void cb_bfmodpar3_i(WidgetPDial*, void*);
- static void cb_bfmodpar3(WidgetPDial*, void*);
-public:
- Fl_Choice *magtype;
-private:
- void cb_magtype_i(Fl_Choice*, void*);
- static void cb_magtype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_magtype[];
- void cb_Use_i(Fl_Button*, void*);
- static void cb_Use(Fl_Button*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
- void cb_Clear_i(Fl_Button*, void*);
- static void cb_Clear(Fl_Button*, void*);
-public:
- Fl_Choice *wshbutton;
-private:
- void cb_wshbutton_i(Fl_Choice*, void*);
- static void cb_wshbutton(Fl_Choice*, void*);
- static Fl_Menu_Item menu_wshbutton[];
-public:
- WidgetPDial *wshpar;
-private:
- void cb_wshpar_i(WidgetPDial*, void*);
- static void cb_wshpar(WidgetPDial*, void*);
-public:
- Fl_Value_Output *wsparval;
- Fl_Light_Button *autoclearbutton;
- Fl_Choice *fltbutton;
-private:
- void cb_fltbutton_i(Fl_Choice*, void*);
- static void cb_fltbutton(Fl_Choice*, void*);
- static Fl_Menu_Item menu_fltbutton[];
-public:
- WidgetPDial *filtervalue1;
-private:
- void cb_filtervalue1_i(WidgetPDial*, void*);
- static void cb_filtervalue1(WidgetPDial*, void*);
-public:
- Fl_Check_Button *filterpref;
-private:
- void cb_filterpref_i(Fl_Check_Button*, void*);
- static void cb_filterpref(Fl_Check_Button*, void*);
-public:
- WidgetPDial *filtervalue2;
-private:
- void cb_filtervalue2_i(WidgetPDial*, void*);
- static void cb_filtervalue2(WidgetPDial*, void*);
-public:
- Fl_Choice *sabutton;
-private:
- void cb_sabutton_i(Fl_Choice*, void*);
- static void cb_sabutton(Fl_Choice*, void*);
- static Fl_Menu_Item menu_sabutton[];
-public:
- WidgetPDial *sadjpar;
-private:
- void cb_sadjpar_i(WidgetPDial*, void*);
- static void cb_sadjpar(WidgetPDial*, void*);
-public:
- Fl_Counter *harmonicshiftcounter;
-private:
- void cb_harmonicshiftcounter_i(Fl_Counter*, void*);
- static void cb_harmonicshiftcounter(Fl_Counter*, void*);
-public:
- Fl_Check_Button *harmonicshiftpre;
-private:
- void cb_harmonicshiftpre_i(Fl_Check_Button*, void*);
- static void cb_harmonicshiftpre(Fl_Check_Button*, void*);
- void cb_R_i(Fl_Button*, void*);
- static void cb_R(Fl_Button*, void*);
-public:
- Fl_Choice *adhrtype;
-private:
- void cb_adhrtype_i(Fl_Choice*, void*);
- static void cb_adhrtype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_adhrtype[];
-public:
- WidgetPDial *adhrpow;
-private:
- void cb_adhrpow_i(WidgetPDial*, void*);
- static void cb_adhrpow(WidgetPDial*, void*);
-public:
- WidgetPDial *adhrbf;
-private:
- void cb_adhrbf_i(WidgetPDial*, void*);
- static void cb_adhrbf(WidgetPDial*, void*);
-public:
- Fl_Slider *adhrpar;
-private:
- void cb_adhrpar_i(Fl_Slider*, void*);
- static void cb_adhrpar(Fl_Slider*, void*);
-public:
- Fl_Choice *modtype;
-private:
- void cb_modtype_i(Fl_Choice*, void*);
- static void cb_modtype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_modtype[];
-public:
- WidgetPDial *modpar1;
-private:
- void cb_modpar1_i(WidgetPDial*, void*);
- static void cb_modpar1(WidgetPDial*, void*);
-public:
- WidgetPDial *modpar2;
-private:
- void cb_modpar2_i(WidgetPDial*, void*);
- static void cb_modpar2(WidgetPDial*, void*);
-public:
- WidgetPDial *modpar3;
-private:
- void cb_modpar3_i(WidgetPDial*, void*);
- static void cb_modpar3(WidgetPDial*, void*);
- void cb_Sine_i(Fl_Button*, void*);
- static void cb_Sine(Fl_Button*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- Fl_Scroll *_this_has_to_be_the_last;
- Fl_Pack *harmonics;
- OscilEditor(OscilGen *oscil_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *cbapplywidget_,Master *master_);
- ~OscilEditor();
- void refresh();
- void redrawoscil();
-private:
- OscilGen *oscil;
- Fl_Widget *oldosc,*cbwidget,*cbapplywidget;
- Oscilharmonic *h[MAX_AD_HARMONICS];
- Master *master;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/PADnoteUI.cc b/plugins/zynaddsubfx/src/UI/PADnoteUI.cc
deleted file mode 100644
index a2abb9a..0000000
--- a/plugins/zynaddsubfx/src/UI/PADnoteUI.cc
+++ /dev/null
@@ -1,1504 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "PADnoteUI.h"
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-PADnoteHarmonicProfile::PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- pars=NULL;
-}
-
-void PADnoteHarmonicProfile::init(PADnoteParameters *pars,Master *master_) {
- master=master_;
- this->pars=pars;
-}
-
-void PADnoteHarmonicProfile::draw() {
- int ox=x(),oy=y(),lx=w(),ly=h();
- if (!visible()) return;
- REALTYPE smps[lx];
-
- REALTYPE realbw=pars->getprofile(smps,lx);
- bool active=active_r();
-
- //draw the equivalent bandwidth
- if (active) fl_color(220,220,220);
- else fl_color(160,165,165);
- fl_line_style(0);
- int rbw=(int)(realbw*(lx-1.0)/2.0);
- for (int i=lx/2-rbw;i<(lx/2+rbw);i++) fl_line(ox+i,oy,ox+i,oy+ly-1);
-
- fl_line_style(0);
- if (active) fl_color(200,200,200);
- else fl_color(160,160,160);
- for (int i=1;i<10;i++){
- int kx=(int)(lx/10.0*i);
- fl_line(ox+kx,oy,ox+kx,oy+ly-1);
- };
- for (int i=1;i<5;i++){
- int ky=(int)(ly/5.0*i);
- fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
- };
-
-
- fl_color(120,120,120);
- fl_line_style(FL_DOT);
- fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
-
- //draw the graph
- fl_line_style(0);
- int old=0;
- for (int i=0;i<lx;i++){
- int val=(int) ((ly-2)*smps[i]);
- if (active) fl_color(180,210,240);
- else fl_color(150,150,155);
- fl_line(ox+i,oy+ly-1,ox+i,oy+ly-1-val);
- if (active) fl_color(0,0,100);
- else fl_color(150,150,150);
- if (i>0) fl_line(ox+i-1,oy+ly-2-old,ox+i,oy+ly-2-val);
- old=val;
- };
-
-
- fl_line_style(FL_DASH);
- if (active) fl_color(0,100,220);
- else fl_color(150,160,170);
- fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
- fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
-
- fl_line_style(0);
-}
-
-PADnoteOvertonePosition::PADnoteOvertonePosition(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- pars=NULL;
-}
-
-void PADnoteOvertonePosition::init(PADnoteParameters *pars,Master *master_) {
- master=master_;
- this->pars=pars;
-}
-
-void PADnoteOvertonePosition::draw() {
- if (!visible()) return;
- const int maxdb=60;
-
- int ox=x(),oy=y(),lx=w(),ly=h();
- const int maxharmonic=64;
-
-
- for (int i=1;i<maxharmonic;i++){
- fl_color(200,200,200);
- fl_line_style(FL_DOT);
- if (i%5==0) fl_line_style(0);
- if (i%10==0) fl_color(160,160,160);
- int kx=(int)(lx/(REALTYPE)maxharmonic*i);
- fl_line(ox+kx,oy,ox+kx,oy+ly);
- };
-
-
-
- int n=OSCIL_SIZE/2;
- REALTYPE spc[n];
- for (int i=0;i<n;i++) spc[i]=0.0;
-
- pthread_mutex_lock(&master->mutex);
- pars->oscilgen->getspectrum(n,spc,0);
- pthread_mutex_unlock(&master->mutex);
-
-
- //normalize
- REALTYPE max=0;
- for (int i=0;i<n;i++){
- REALTYPE x=fabs(spc[i]);
- if (max<x) max=x;
- }
- if (max<0.000001) max=1.0;
- max=max*1.05;
-
- REALTYPE spectrum[lx];
- for (int i=0;i<lx;i++) spectrum[i]=0;
-
-
- for (int i=1;i<n;i++){
- REALTYPE nhr=pars->getNhr(i);
- int kx=(int)(lx/(REALTYPE)maxharmonic*nhr);
- if ((kx<0)||(kx>lx)) continue;
-
- spectrum[kx]=spc[i-1]/max+1e-9;
-
- };
-
- fl_color(180,0,0);
- fl_line_style(0);
-
- if (pars->Pmode==2){
- int old=0;
- for (int i=1;i<lx;i++){
- if ((spectrum[i]>1e-10)||(i==(lx-1))){
- int delta=i-old;
- REALTYPE val1=spectrum[old];
- REALTYPE val2=spectrum[i];
-
- REALTYPE idelta=1.0/delta;
- for (int j=0;j<delta;j++){
- REALTYPE x=idelta*j;
- spectrum[old+j]=val1*(1.0-x)+val2*x;
- };
- old=i;
- };
-
- };
- };
-
- for (int i=0;i<lx;i++){
- REALTYPE x=spectrum[i];
- if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
- else continue;
- int yy=(int)(x*ly);
- fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1);
-
- };
-}
-
-void PADnoteUI::cb__i(Fl_Tabs* o, void*) {
- if (o->value()!=harmonicstructuregroup) applybutton->hide();
- else applybutton->show();
-}
-void PADnoteUI::cb_(Fl_Tabs* o, void* v) {
- ((PADnoteUI*)(o->parent()->user_data()))->cb__i(o,v);
-}
-
-void PADnoteUI::cb_hpbasepar1_i(WidgetPDial* o, void*) {
- pars->Php.base.par1=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpbasepar1(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpbasepar1_i(o,v);
-}
-
-void PADnoteUI::cb_hpbasetype_i(Fl_Choice* o, void*) {
- pars->Php.base.type=o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpbasetype(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpbasetype_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_hpbasetype[] = {
- {"Gauss", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Square", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"DoubleExp", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_hpfreqmult_i(WidgetPDial* o, void*) {
- pars->Php.freqmult=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpfreqmult(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpfreqmult_i(o,v);
-}
-
-void PADnoteUI::cb_hpmpar1_i(WidgetPDial* o, void*) {
- pars->Php.modulator.par1=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpmpar1(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpmpar1_i(o,v);
-}
-
-void PADnoteUI::cb_hpmfreq_i(WidgetPDial* o, void*) {
- pars->Php.modulator.freq=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpmfreq(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpmfreq_i(o,v);
-}
-
-void PADnoteUI::cb_hpamptype_i(Fl_Choice* o, void*) {
- pars->Php.amp.type=o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpamptype(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_hpamptype_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_hpamptype[] = {
- {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Gauss", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Flat", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_hpampmode_i(Fl_Choice* o, void*) {
- pars->Php.amp.mode=o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpampmode(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_hpampmode_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_hpampmode[] = {
- {"Sum", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Mult", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Div1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Div2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_hpamppar1_i(WidgetPDial* o, void*) {
- pars->Php.amp.par1=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpamppar1(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_hpamppar1_i(o,v);
-}
-
-void PADnoteUI::cb_hpamppar2_i(WidgetPDial* o, void*) {
- pars->Php.amp.par2=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpamppar2(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->parent()->user_data()))->cb_hpamppar2_i(o,v);
-}
-
-void PADnoteUI::cb_hpautoscale_i(Fl_Check_Button* o, void*) {
- pars->Php.autoscale=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpautoscale(Fl_Check_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpautoscale_i(o,v);
-}
-
-void PADnoteUI::cb_hponehalf_i(Fl_Choice* o, void*) {
- pars->Php.onehalf=o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hponehalf(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hponehalf_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_hponehalf[] = {
- {"Full", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Upper Half", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Lower Half", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_hpwidth_i(WidgetPDial* o, void*) {
- pars->Php.width=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hpwidth(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hpwidth_i(o,v);
-}
-
-void PADnoteUI::cb_Change_i(Fl_Button*, void*) {
- if (oscui!=NULL) delete (oscui);
-oscui=new OscilEditor(pars->oscilgen,osc,cbwidget,applybutton,master);
-}
-void PADnoteUI::cb_Change(Fl_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_Change_i(o,v);
-}
-
-void PADnoteUI::cb_cbwidget_i(Fl_Box*, void*) {
- overtonepos->redraw();
-applybutton->color(FL_RED);
-applybutton->redraw();
-}
-void PADnoteUI::cb_cbwidget(Fl_Box* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_cbwidget_i(o,v);
-}
-
-void PADnoteUI::cb_Resonance_i(Fl_Button*, void*) {
- resui->resonancewindow->redraw();
-resui->resonancewindow->show();
-resui->setcbwidget(cbwidget,applybutton);
-}
-void PADnoteUI::cb_Resonance(Fl_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_Resonance_i(o,v);
-}
-
-void PADnoteUI::cb_bwdial_i(WidgetPDial* o, void*) {
- bwcents->value(pars->setPbandwidth((int) o->value()));
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_bwdial(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_bwdial_i(o,v);
-}
-
-void PADnoteUI::cb_hrpostype_i(Fl_Choice* o, void*) {
- pars->Phrpos.type=o->value();
-overtonepos->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hrpostype(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hrpostype_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_hrpostype[] = {
- {"Harmonic", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"ShiftU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"ShiftL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"PowerU", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"PowerL", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Sine", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Power", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_hrpospar1_i(WidgetPDial* o, void*) {
- pars->Phrpos.par1=(int) o->value();
-overtonepos->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hrpospar1(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hrpospar1_i(o,v);
-}
-
-void PADnoteUI::cb_hrpospar2_i(WidgetPDial* o, void*) {
- pars->Phrpos.par2=(int) o->value();
-overtonepos->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hrpospar2(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hrpospar2_i(o,v);
-}
-
-void PADnoteUI::cb_hrpospar3_i(WidgetPDial* o, void*) {
- pars->Phrpos.par3=(int) o->value();
-overtonepos->redraw();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_hrpospar3(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hrpospar3_i(o,v);
-}
-
-void PADnoteUI::cb_bwscale_i(Fl_Choice* o, void*) {
- pars->Pbwscale=(int) o->value();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_bwscale(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_bwscale_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_bwscale[] = {
- {"Normal", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"EqualHz", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Quater", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Half", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"75%", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"150%", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Double", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Inv.Half", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_qsamplesize_i(Fl_Choice* o, void*) {
- pars->Pquality.samplesize=(int) o->value();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_qsamplesize(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_qsamplesize_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_qsamplesize[] = {
- {"16k (Tiny)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"32k", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"64k (Small)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"128k", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"256k (Normal)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"512k", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"1M (Big)", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_qsmpoct_i(Fl_Choice* o, void*) {
- pars->Pquality.smpoct=(int) o->value();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_qsmpoct(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_qsmpoct_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_qsmpoct[] = {
- {"0.5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"12", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_qoct_i(Fl_Choice* o, void*) {
- pars->Pquality.oct=(int) o->value();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_qoct(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_qoct_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_qoct[] = {
- {"1", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"7", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"8", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_qbasenote_i(Fl_Choice* o, void*) {
- pars->Pquality.basenote=(int) o->value();
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_qbasenote(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_qbasenote_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_qbasenote[] = {
- {"C-2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"G-2", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"C-3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"G-3", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"C-4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"G-4", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"C-5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"G-5", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {"G-6", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_spectrummode_i(Fl_Choice* o, void*) {
- pars->Pmode=(int) o->value();
-
-if (pars->Pmode==0){
- bwprofilegroup->activate();
- bwdial->activate();
- bwcents->activate();
- hprofile->activate();
- hprofile->color(54);
- bwscale->activate();
-} else {
- bwprofilegroup->deactivate();
- bwdial->deactivate();
- bwcents->deactivate();
- hprofile->deactivate();
- hprofile->color(48);
- bwscale->deactivate();
-};
-
-cbwidget->do_callback();
-}
-void PADnoteUI::cb_spectrummode(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->user_data()))->cb_spectrummode_i(o,v);
-}
-
-Fl_Menu_Item PADnoteUI::menu_spectrummode[] = {
- {"Bandwidth", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Discrete", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Continous", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PADnoteUI::cb_octave_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=16;
-pars->PCoarseDetune = k*1024+
- pars->PCoarseDetune%1024;
-}
-void PADnoteUI::cb_octave(Fl_Counter* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_octave_i(o,v);
-}
-
-void PADnoteUI::cb_coarsedet_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=1024;
-pars->PCoarseDetune = k+
- (pars->PCoarseDetune/1024)*1024;
-}
-void PADnoteUI::cb_coarsedet(Fl_Counter* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_coarsedet_i(o,v);
-}
-
-void PADnoteUI::cb_detune_i(Fl_Slider* o, void*) {
- pars->PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();
-}
-void PADnoteUI::cb_detune(Fl_Slider* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_detune_i(o,v);
-}
-
-void PADnoteUI::cb_detunevalueoutput_i(Fl_Value_Output* o, void*) {
- o->value(getdetune(pars->PDetuneType,0,pars->PDetune));
-}
-void PADnoteUI::cb_detunevalueoutput(Fl_Value_Output* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_detunevalueoutput_i(o,v);
-}
-
-void PADnoteUI::cb_detunetype_i(Fl_Choice* o, void*) {
- pars->PDetuneType=(int) o->value()+1;
-detunevalueoutput->do_callback();
-}
-void PADnoteUI::cb_detunetype(Fl_Choice* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_detunetype_i(o,v);
-}
-
-void PADnoteUI::cb_hz440_i(Fl_Check_Button* o, void*) {
- int x=(int) o->value();
-pars->Pfixedfreq=x;
-if (x==0) fixedfreqetdial->deactivate();
- else fixedfreqetdial->activate();
-}
-void PADnoteUI::cb_hz440(Fl_Check_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_hz440_i(o,v);
-}
-
-void PADnoteUI::cb_fixedfreqetdial_i(WidgetPDial* o, void*) {
- pars->PfixedfreqET=(int) o->value();
-}
-void PADnoteUI::cb_fixedfreqetdial(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_fixedfreqetdial_i(o,v);
-}
-
-void PADnoteUI::cb_volume_i(Fl_Value_Slider* o, void*) {
- pars->PVolume=(int)o->value();
-}
-void PADnoteUI::cb_volume(Fl_Value_Slider* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_volume_i(o,v);
-}
-
-void PADnoteUI::cb_vsns_i(Fl_Value_Slider* o, void*) {
- pars->PAmpVelocityScaleFunction=(int) o->value();
-}
-void PADnoteUI::cb_vsns(Fl_Value_Slider* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_vsns_i(o,v);
-}
-
-void PADnoteUI::cb_pan_i(WidgetPDial* o, void*) {
- pars->PPanning=(int) o->value();
-}
-void PADnoteUI::cb_pan(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pan_i(o,v);
-}
-
-void PADnoteUI::cb_pstr_i(WidgetPDial* o, void*) {
- pars->PPunchStrength=(int) o->value();
-}
-void PADnoteUI::cb_pstr(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pstr_i(o,v);
-}
-
-void PADnoteUI::cb_pt_i(WidgetPDial* o, void*) {
- pars->PPunchTime=(int) o->value();
-}
-void PADnoteUI::cb_pt(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pt_i(o,v);
-}
-
-void PADnoteUI::cb_pstc_i(WidgetPDial* o, void*) {
- pars->PPunchStretch=(int) o->value();
-}
-void PADnoteUI::cb_pstc(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pstc_i(o,v);
-}
-
-void PADnoteUI::cb_pvel_i(WidgetPDial* o, void*) {
- pars->PPunchVelocitySensing=(int) o->value();
-}
-void PADnoteUI::cb_pvel(WidgetPDial* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_pvel_i(o,v);
-}
-
-void PADnoteUI::cb_stereo_i(Fl_Check_Button* o, void*) {
- pars->PStereo=(int) o->value();
-hprofile->redraw();
-}
-void PADnoteUI::cb_stereo(Fl_Check_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_stereo_i(o,v);
-}
-
-void PADnoteUI::cb_applybutton_i(Fl_Button* o, void*) {
- pars->applyparameters(true);
-o->color(FL_GRAY);
-if (oscui!=NULL) {
- oscui->applybutton->color(FL_GRAY);
- oscui->applybutton->redraw();
-};
-if (resui!=NULL) {
- resui->applybutton->color(FL_GRAY);
- resui->applybutton->redraw();
-};
-}
-void PADnoteUI::cb_applybutton(Fl_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->user_data()))->cb_applybutton_i(o,v);
-}
-
-void PADnoteUI::cb_Close_i(Fl_Button*, void*) {
- padnotewindow->hide();
-}
-void PADnoteUI::cb_Close(Fl_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void PADnoteUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(pars);
-}
-void PADnoteUI::cb_C(Fl_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void PADnoteUI::cb_P_i(Fl_Button*, void*) {
- presetsui->paste(pars,this);
-}
-void PADnoteUI::cb_P(Fl_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->user_data()))->cb_P_i(o,v);
-}
-
-void PADnoteUI::cb_export_i(Fl_Button*, void*) {
- char *filename;
-filename=fl_file_chooser("Export samples:","(*.wav)",NULL,0);
-if (filename==NULL) return;
-fl_filename_setext(filename,"");
-
-
-
-pars->export2wav(filename);
-}
-void PADnoteUI::cb_export(Fl_Button* o, void* v) {
- ((PADnoteUI*)(o->parent()->user_data()))->cb_export_i(o,v);
-}
-
-PADnoteUI::PADnoteUI(PADnoteParameters *parameters,Master *master_) {
- pars=parameters;
- master=master_;
- oscui=NULL;
- resui=new ResonanceUI(pars->resonance);
- make_window();
-}
-
-Fl_Double_Window* PADnoteUI::make_window() {
- { padnotewindow = new Fl_Double_Window(535, 450, "PAD synth Parameters");
- padnotewindow->user_data((void*)(this));
- { Fl_Tabs* o = new Fl_Tabs(0, 0, 535, 395);
- o->callback((Fl_Callback*)cb_);
- { harmonicstructuregroup = new Fl_Group(0, 20, 535, 375, "Harmonic Structure");
- harmonicstructuregroup->box(FL_ENGRAVED_BOX);
- { Fl_Group* o = bwprofilegroup = new Fl_Group(5, 30, 90, 260);
- bwprofilegroup->box(FL_ENGRAVED_BOX);
- { WidgetPDial* o = hpbasepar1 = new WidgetPDial(20, 75, 25, 25, "Width");
- hpbasepar1->box(FL_ROUND_UP_BOX);
- hpbasepar1->color(FL_BACKGROUND_COLOR);
- hpbasepar1->selection_color(FL_INACTIVE_COLOR);
- hpbasepar1->labeltype(FL_NORMAL_LABEL);
- hpbasepar1->labelfont(0);
- hpbasepar1->labelsize(10);
- hpbasepar1->labelcolor(FL_FOREGROUND_COLOR);
- hpbasepar1->maximum(127);
- hpbasepar1->step(1);
- hpbasepar1->callback((Fl_Callback*)cb_hpbasepar1);
- hpbasepar1->align(Fl_Align(FL_ALIGN_TOP));
- hpbasepar1->when(FL_WHEN_CHANGED);
- o->value(pars->Php.base.par1);
- } // WidgetPDial* hpbasepar1
- { Fl_Choice* o = hpbasetype = new Fl_Choice(15, 45, 75, 15, "Base Type");
- hpbasetype->down_box(FL_BORDER_BOX);
- hpbasetype->labelsize(10);
- hpbasetype->textsize(10);
- hpbasetype->callback((Fl_Callback*)cb_hpbasetype);
- hpbasetype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- hpbasetype->menu(menu_hpbasetype);
- o->value(pars->Php.base.type);
- } // Fl_Choice* hpbasetype
- { WidgetPDial* o = hpfreqmult = new WidgetPDial(55, 75, 25, 25, "FreqMlt");
- hpfreqmult->box(FL_ROUND_UP_BOX);
- hpfreqmult->color(FL_BACKGROUND_COLOR);
- hpfreqmult->selection_color(FL_INACTIVE_COLOR);
- hpfreqmult->labeltype(FL_NORMAL_LABEL);
- hpfreqmult->labelfont(0);
- hpfreqmult->labelsize(10);
- hpfreqmult->labelcolor(FL_FOREGROUND_COLOR);
- hpfreqmult->maximum(127);
- hpfreqmult->step(1);
- hpfreqmult->callback((Fl_Callback*)cb_hpfreqmult);
- hpfreqmult->align(Fl_Align(FL_ALIGN_TOP));
- hpfreqmult->when(FL_WHEN_CHANGED);
- o->value(pars->Php.freqmult);
- } // WidgetPDial* hpfreqmult
- { WidgetPDial* o = hpmpar1 = new WidgetPDial(15, 115, 20, 20, "Str");
- hpmpar1->box(FL_ROUND_UP_BOX);
- hpmpar1->color(FL_BACKGROUND_COLOR);
- hpmpar1->selection_color(FL_INACTIVE_COLOR);
- hpmpar1->labeltype(FL_NORMAL_LABEL);
- hpmpar1->labelfont(0);
- hpmpar1->labelsize(10);
- hpmpar1->labelcolor(FL_FOREGROUND_COLOR);
- hpmpar1->maximum(127);
- hpmpar1->step(1);
- hpmpar1->callback((Fl_Callback*)cb_hpmpar1);
- hpmpar1->align(Fl_Align(FL_ALIGN_TOP));
- hpmpar1->when(FL_WHEN_CHANGED);
- o->value(pars->Php.modulator.par1);
- } // WidgetPDial* hpmpar1
- { WidgetPDial* o = hpmfreq = new WidgetPDial(40, 115, 20, 20, "SFreq");
- hpmfreq->box(FL_ROUND_UP_BOX);
- hpmfreq->color(FL_BACKGROUND_COLOR);
- hpmfreq->selection_color(FL_INACTIVE_COLOR);
- hpmfreq->labeltype(FL_NORMAL_LABEL);
- hpmfreq->labelfont(0);
- hpmfreq->labelsize(10);
- hpmfreq->labelcolor(FL_FOREGROUND_COLOR);
- hpmfreq->maximum(127);
- hpmfreq->step(1);
- hpmfreq->callback((Fl_Callback*)cb_hpmfreq);
- hpmfreq->align(Fl_Align(FL_ALIGN_TOP));
- hpmfreq->when(FL_WHEN_CHANGED);
- o->value(pars->Php.modulator.freq);
- } // WidgetPDial* hpmfreq
- { Fl_Group* o = new Fl_Group(10, 160, 80, 105);
- o->box(FL_BORDER_BOX);
- { Fl_Choice* o = hpamptype = new Fl_Choice(15, 175, 70, 15, "AmpMultiplier");
- hpamptype->down_box(FL_BORDER_BOX);
- hpamptype->labelsize(10);
- hpamptype->textsize(10);
- hpamptype->callback((Fl_Callback*)cb_hpamptype);
- hpamptype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- hpamptype->menu(menu_hpamptype);
- o->value(pars->Php.amp.type);
- } // Fl_Choice* hpamptype
- { Fl_Choice* o = hpampmode = new Fl_Choice(15, 205, 70, 15, "AmpMode");
- hpampmode->down_box(FL_BORDER_BOX);
- hpampmode->labelsize(10);
- hpampmode->textsize(10);
- hpampmode->callback((Fl_Callback*)cb_hpampmode);
- hpampmode->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- hpampmode->menu(menu_hpampmode);
- o->value(pars->Php.amp.mode);
- } // Fl_Choice* hpampmode
- { WidgetPDial* o = hpamppar1 = new WidgetPDial(15, 235, 25, 25, "Par1");
- hpamppar1->box(FL_ROUND_UP_BOX);
- hpamppar1->color(FL_BACKGROUND_COLOR);
- hpamppar1->selection_color(FL_INACTIVE_COLOR);
- hpamppar1->labeltype(FL_NORMAL_LABEL);
- hpamppar1->labelfont(0);
- hpamppar1->labelsize(10);
- hpamppar1->labelcolor(FL_FOREGROUND_COLOR);
- hpamppar1->maximum(127);
- hpamppar1->step(1);
- hpamppar1->callback((Fl_Callback*)cb_hpamppar1);
- hpamppar1->align(Fl_Align(FL_ALIGN_TOP));
- hpamppar1->when(FL_WHEN_CHANGED);
- o->value(pars->Php.amp.par1);
- } // WidgetPDial* hpamppar1
- { WidgetPDial* o = hpamppar2 = new WidgetPDial(55, 235, 25, 25, "Par2");
- hpamppar2->box(FL_ROUND_UP_BOX);
- hpamppar2->color(FL_BACKGROUND_COLOR);
- hpamppar2->selection_color(FL_INACTIVE_COLOR);
- hpamppar2->labeltype(FL_NORMAL_LABEL);
- hpamppar2->labelfont(0);
- hpamppar2->labelsize(10);
- hpamppar2->labelcolor(FL_FOREGROUND_COLOR);
- hpamppar2->maximum(127);
- hpamppar2->step(1);
- hpamppar2->callback((Fl_Callback*)cb_hpamppar2);
- hpamppar2->align(Fl_Align(FL_ALIGN_TOP));
- hpamppar2->when(FL_WHEN_CHANGED);
- o->value(pars->Php.amp.par2);
- } // WidgetPDial* hpamppar2
- o->end();
- } // Fl_Group* o
- { Fl_Check_Button* o = hpautoscale = new Fl_Check_Button(10, 270, 60, 15, "autoscale");
- hpautoscale->down_box(FL_DOWN_BOX);
- hpautoscale->labelsize(10);
- hpautoscale->callback((Fl_Callback*)cb_hpautoscale);
- o->value(pars->Php.autoscale);
- } // Fl_Check_Button* hpautoscale
- { Fl_Choice* o = hponehalf = new Fl_Choice(10, 143, 80, 15);
- hponehalf->down_box(FL_BORDER_BOX);
- hponehalf->labelsize(10);
- hponehalf->textsize(10);
- hponehalf->callback((Fl_Callback*)cb_hponehalf);
- hponehalf->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- hponehalf->menu(menu_hponehalf);
- o->value(pars->Php.onehalf);
- } // Fl_Choice* hponehalf
- { WidgetPDial* o = hpwidth = new WidgetPDial(65, 115, 20, 20, "Size");
- hpwidth->box(FL_ROUND_UP_BOX);
- hpwidth->color(FL_BACKGROUND_COLOR);
- hpwidth->selection_color(FL_INACTIVE_COLOR);
- hpwidth->labeltype(FL_NORMAL_LABEL);
- hpwidth->labelfont(0);
- hpwidth->labelsize(10);
- hpwidth->labelcolor(FL_FOREGROUND_COLOR);
- hpwidth->maximum(127);
- hpwidth->step(1);
- hpwidth->callback((Fl_Callback*)cb_hpwidth);
- hpwidth->align(Fl_Align(FL_ALIGN_TOP));
- hpwidth->when(FL_WHEN_CHANGED);
- o->value(pars->Php.width);
- } // WidgetPDial* hpwidth
- if (pars->Pmode!=0) o->deactivate();
- bwprofilegroup->end();
- } // Fl_Group* bwprofilegroup
- { Fl_Group* o = new Fl_Group(100, 155, 270, 135);
- o->box(FL_THIN_DOWN_BOX);
- o->color(FL_GRAY0);
- o->selection_color((Fl_Color)71);
- o->labelcolor((Fl_Color)179);
- o->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");
- osc->init(pars->oscilgen,master);
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(375, 270, 60, 20, "Change");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Change);
- } // Fl_Button* o
- { cbwidget = new Fl_Box(125, 135, 205, 20, "Harmonic Content");
- cbwidget->callback((Fl_Callback*)cb_cbwidget);
- cbwidget->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
- } // Fl_Box* cbwidget
- { Fl_Button* o = new Fl_Button(375, 225, 80, 20, "Resonance");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Resonance);
- } // Fl_Button* o
- { WidgetPDial* o = bwdial = new WidgetPDial(15, 295, 35, 35, "BandWidth");
- bwdial->box(FL_ROUND_UP_BOX);
- bwdial->color(FL_BACKGROUND_COLOR);
- bwdial->selection_color(FL_INACTIVE_COLOR);
- bwdial->labeltype(FL_NORMAL_LABEL);
- bwdial->labelfont(0);
- bwdial->labelsize(10);
- bwdial->labelcolor(FL_FOREGROUND_COLOR);
- bwdial->maximum(1000);
- bwdial->step(1);
- bwdial->callback((Fl_Callback*)cb_bwdial);
- bwdial->align(Fl_Align(FL_ALIGN_BOTTOM));
- bwdial->when(FL_WHEN_CHANGED);
- o->value(pars->Pbandwidth);
- if (pars->Pmode!=0) o->deactivate();
- } // WidgetPDial* bwdial
- { Fl_Value_Output* o = bwcents = new Fl_Value_Output(55, 305, 55, 15, "cents");
- bwcents->labelsize(10);
- bwcents->maximum(10000);
- bwcents->step(0.1);
- bwcents->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- o->value(pars->setPbandwidth(pars->Pbandwidth));
- if (pars->Pmode!=0) o->deactivate();
- } // Fl_Value_Output* bwcents
- { Fl_Group* o = new Fl_Group(315, 295, 215, 45);
- o->box(FL_ENGRAVED_BOX);
- { Fl_Choice* o = hrpostype = new Fl_Choice(325, 310, 80, 20, "OvertonesPosition");
- hrpostype->down_box(FL_BORDER_BOX);
- hrpostype->labelsize(10);
- hrpostype->textsize(11);
- hrpostype->callback((Fl_Callback*)cb_hrpostype);
- hrpostype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- hrpostype->menu(menu_hrpostype);
- o->value(pars->Phrpos.type);
- } // Fl_Choice* hrpostype
- { WidgetPDial* o = hrpospar1 = new WidgetPDial(425, 310, 25, 25, "Par1");
- hrpospar1->box(FL_ROUND_UP_BOX);
- hrpospar1->color(FL_BACKGROUND_COLOR);
- hrpospar1->selection_color(FL_INACTIVE_COLOR);
- hrpospar1->labeltype(FL_NORMAL_LABEL);
- hrpospar1->labelfont(0);
- hrpospar1->labelsize(10);
- hrpospar1->labelcolor(FL_FOREGROUND_COLOR);
- hrpospar1->maximum(255);
- hrpospar1->step(1);
- hrpospar1->callback((Fl_Callback*)cb_hrpospar1);
- hrpospar1->align(Fl_Align(FL_ALIGN_TOP));
- hrpospar1->when(FL_WHEN_CHANGED);
- o->value(pars->Phrpos.par1);
- } // WidgetPDial* hrpospar1
- { WidgetPDial* o = hrpospar2 = new WidgetPDial(460, 310, 25, 25, "Par2");
- hrpospar2->box(FL_ROUND_UP_BOX);
- hrpospar2->color(FL_BACKGROUND_COLOR);
- hrpospar2->selection_color(FL_INACTIVE_COLOR);
- hrpospar2->labeltype(FL_NORMAL_LABEL);
- hrpospar2->labelfont(0);
- hrpospar2->labelsize(10);
- hrpospar2->labelcolor(FL_FOREGROUND_COLOR);
- hrpospar2->maximum(255);
- hrpospar2->step(1);
- hrpospar2->callback((Fl_Callback*)cb_hrpospar2);
- hrpospar2->align(Fl_Align(FL_ALIGN_TOP));
- hrpospar2->when(FL_WHEN_CHANGED);
- o->value(pars->Phrpos.par2);
- } // WidgetPDial* hrpospar2
- { WidgetPDial* o = hrpospar3 = new WidgetPDial(495, 310, 25, 25, "ForceH");
- hrpospar3->box(FL_ROUND_UP_BOX);
- hrpospar3->color(FL_BACKGROUND_COLOR);
- hrpospar3->selection_color(FL_INACTIVE_COLOR);
- hrpospar3->labeltype(FL_NORMAL_LABEL);
- hrpospar3->labelfont(0);
- hrpospar3->labelsize(10);
- hrpospar3->labelcolor(FL_FOREGROUND_COLOR);
- hrpospar3->maximum(255);
- hrpospar3->step(1);
- hrpospar3->callback((Fl_Callback*)cb_hrpospar3);
- hrpospar3->align(Fl_Align(FL_ALIGN_TOP));
- hrpospar3->when(FL_WHEN_CHANGED);
- o->value(pars->Phrpos.par3);
- } // WidgetPDial* hrpospar3
- o->end();
- } // Fl_Group* o
- { Fl_Choice* o = bwscale = new Fl_Choice(120, 305, 80, 20, "Bandwidth Scale");
- bwscale->down_box(FL_BORDER_BOX);
- bwscale->labelsize(10);
- bwscale->textsize(11);
- bwscale->callback((Fl_Callback*)cb_bwscale);
- bwscale->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- bwscale->menu(menu_bwscale);
- o->value(pars->Pbwscale);
- if (pars->Pmode!=0) o->deactivate();
- } // Fl_Choice* bwscale
- { Fl_Group* o = overtonepos = new Fl_Group(5, 345, 525, 45);
- overtonepos->box(FL_FLAT_BOX);
- overtonepos->color(FL_LIGHT3);
- overtonepos->selection_color((Fl_Color)218);
- overtonepos->labelcolor(FL_GREEN);
- PADnoteOvertonePosition *opui=new PADnoteOvertonePosition(o->x(),o->y(),o->w(),o->h(),"");
- opui->init(pars,master);
- overtonepos->end();
- } // Fl_Group* overtonepos
- { Fl_Choice* o = qsamplesize = new Fl_Choice(375, 190, 115, 20, "Sample Size");
- qsamplesize->down_box(FL_BORDER_BOX);
- qsamplesize->labelsize(10);
- qsamplesize->textsize(11);
- qsamplesize->callback((Fl_Callback*)cb_qsamplesize);
- qsamplesize->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- qsamplesize->menu(menu_qsamplesize);
- o->value(pars->Pquality.samplesize);
- } // Fl_Choice* qsamplesize
- { Fl_Choice* o = qsmpoct = new Fl_Choice(430, 155, 45, 20, "smp/oct");
- qsmpoct->down_box(FL_BORDER_BOX);
- qsmpoct->labelsize(11);
- qsmpoct->textsize(11);
- qsmpoct->callback((Fl_Callback*)cb_qsmpoct);
- qsmpoct->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- qsmpoct->menu(menu_qsmpoct);
- o->value(pars->Pquality.smpoct);
- } // Fl_Choice* qsmpoct
- { Fl_Choice* o = qoct = new Fl_Choice(480, 155, 45, 20, "no.oct");
- qoct->down_box(FL_BORDER_BOX);
- qoct->labelsize(11);
- qoct->textsize(11);
- qoct->callback((Fl_Callback*)cb_qoct);
- qoct->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- qoct->menu(menu_qoct);
- o->value(pars->Pquality.oct);
- } // Fl_Choice* qoct
- { Fl_Choice* o = qbasenote = new Fl_Choice(375, 155, 50, 20, "base");
- qbasenote->down_box(FL_BORDER_BOX);
- qbasenote->labelsize(11);
- qbasenote->textsize(11);
- qbasenote->callback((Fl_Callback*)cb_qbasenote);
- qbasenote->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- qbasenote->menu(menu_qbasenote);
- o->value(pars->Pquality.basenote);
- } // Fl_Choice* qbasenote
- { Fl_Group* o = hprofile = new Fl_Group(100, 45, 430, 90);
- hprofile->box(FL_FLAT_BOX);
- hprofile->color(FL_LIGHT3);
- hprofile->selection_color((Fl_Color)218);
- hprofile->labelcolor(FL_GREEN);
- PADnoteHarmonicProfile *hpui=new PADnoteHarmonicProfile(o->x(),o->y(),o->w(),o->h(),"");
- hpui->init(pars,master);
- if (pars->Pmode!=0) { o->deactivate(); o->color(48);};
- hprofile->end();
- } // Fl_Group* hprofile
- { new Fl_Box(160, 25, 315, 20, "Profile of One Harmonic (Frequency Distribution)");
- } // Fl_Box* o
- { Fl_Choice* o = spectrummode = new Fl_Choice(220, 305, 90, 20, "Spectrum Mode");
- spectrummode->down_box(FL_BORDER_BOX);
- spectrummode->labelfont(1);
- spectrummode->labelsize(10);
- spectrummode->textsize(11);
- spectrummode->callback((Fl_Callback*)cb_spectrummode);
- spectrummode->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- spectrummode->menu(menu_spectrummode);
- o->value(pars->Pmode);
- } // Fl_Choice* spectrummode
- harmonicstructuregroup->end();
- } // Fl_Group* harmonicstructuregroup
- { Fl_Group* o = new Fl_Group(0, 20, 535, 375, "Envelopes&LFOs");
- o->box(FL_ENGRAVED_BOX);
- o->hide();
- { Fl_Group* o = new Fl_Group(5, 275, 525, 115, "FREQUENCY");
- o->box(FL_THIN_UP_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = freqenv = new EnvelopeUI(10, 315, 205, 70, "PADSynth - Frequency Envelope");
- freqenv->box(FL_FLAT_BOX);
- freqenv->color((Fl_Color)51);
- freqenv->selection_color(FL_BACKGROUND_COLOR);
- freqenv->labeltype(FL_NORMAL_LABEL);
- freqenv->labelfont(0);
- freqenv->labelsize(14);
- freqenv->labelcolor(FL_FOREGROUND_COLOR);
- freqenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- freqenv->when(FL_WHEN_RELEASE);
- o->init(pars->FreqEnvelope);
- freqenv->end();
- } // EnvelopeUI* freqenv
- { Fl_Counter* o = octave = new Fl_Counter(470, 295, 45, 15, "Octave");
- octave->tooltip("Octave");
- octave->type(1);
- octave->labelsize(10);
- octave->minimum(-8);
- octave->maximum(7);
- octave->step(1);
- octave->textfont(1);
- octave->textsize(11);
- octave->callback((Fl_Callback*)cb_octave);
- octave->align(Fl_Align(FL_ALIGN_TOP));
- int k=pars->PCoarseDetune/1024;
- if (k>=8) k-=16;
- o->value(k);
- } // Fl_Counter* octave
- { Fl_Counter* o = coarsedet = new Fl_Counter(455, 365, 60, 20, "Coarse det.");
- coarsedet->tooltip("Coarse Detune");
- coarsedet->labelsize(10);
- coarsedet->minimum(-64);
- coarsedet->maximum(63);
- coarsedet->step(1);
- coarsedet->textfont(1);
- coarsedet->textsize(11);
- coarsedet->callback((Fl_Callback*)cb_coarsedet);
- coarsedet->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- int k=pars->PCoarseDetune%1024;
- if (k>=512) k-=1024;
- o->value(k);
- o->lstep(10);
- } // Fl_Counter* coarsedet
- { LFOUI* o = freqlfo = new LFOUI(215, 315, 230, 70, "Frequency LFO ");
- freqlfo->box(FL_FLAT_BOX);
- freqlfo->color(FL_DARK1);
- freqlfo->selection_color(FL_BACKGROUND_COLOR);
- freqlfo->labeltype(FL_NORMAL_LABEL);
- freqlfo->labelfont(0);
- freqlfo->labelsize(14);
- freqlfo->labelcolor(FL_FOREGROUND_COLOR);
- freqlfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- freqlfo->when(FL_WHEN_RELEASE);
- o->init(pars->FreqLfo);
- freqlfo->end();
- } // LFOUI* freqlfo
- { Fl_Slider* o = detune = new Fl_Slider(60, 295, 295, 15);
- detune->tooltip("Fine Detune (cents)");
- detune->type(5);
- detune->box(FL_FLAT_BOX);
- detune->minimum(-8192);
- detune->maximum(8191);
- detune->step(1);
- detune->callback((Fl_Callback*)cb_detune);
- o->value(pars->PDetune-8192);
- } // Fl_Slider* detune
- { Fl_Value_Output* o = detunevalueoutput = new Fl_Value_Output(12, 295, 45, 15, "Detune");
- detunevalueoutput->labelsize(10);
- detunevalueoutput->minimum(-5000);
- detunevalueoutput->maximum(5000);
- detunevalueoutput->step(0.01);
- detunevalueoutput->textfont(1);
- detunevalueoutput->textsize(10);
- detunevalueoutput->callback((Fl_Callback*)cb_detunevalueoutput);
- detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(getdetune(pars->PDetuneType,0,pars->PDetune));
- } // Fl_Value_Output* detunevalueoutput
- { Fl_Choice* o = detunetype = new Fl_Choice(450, 335, 75, 15, "Detune Type");
- detunetype->down_box(FL_BORDER_BOX);
- detunetype->labelsize(10);
- detunetype->textfont(1);
- detunetype->textsize(10);
- detunetype->callback((Fl_Callback*)cb_detunetype);
- detunetype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
- o->value(pars->PDetuneType-1);
- } // Fl_Choice* detunetype
- { Fl_Check_Button* o = hz440 = new Fl_Check_Button(365, 295, 50, 15, "440Hz");
- hz440->tooltip("set the base frequency to 440Hz");
- hz440->down_box(FL_DOWN_BOX);
- hz440->labelfont(1);
- hz440->labelsize(10);
- hz440->callback((Fl_Callback*)cb_hz440);
- o->value(pars->Pfixedfreq);
- } // Fl_Check_Button* hz440
- { WidgetPDial* o = fixedfreqetdial = new WidgetPDial(420, 295, 15, 15, "Eq.T.");
- fixedfreqetdial->tooltip("How the frequency varies acording to the keyboard (leftmost for fixed frequen\
-cy)");
- fixedfreqetdial->box(FL_ROUND_UP_BOX);
- fixedfreqetdial->color(FL_BACKGROUND_COLOR);
- fixedfreqetdial->selection_color(FL_INACTIVE_COLOR);
- fixedfreqetdial->labeltype(FL_NORMAL_LABEL);
- fixedfreqetdial->labelfont(0);
- fixedfreqetdial->labelsize(10);
- fixedfreqetdial->labelcolor(FL_FOREGROUND_COLOR);
- fixedfreqetdial->maximum(127);
- fixedfreqetdial->step(1);
- fixedfreqetdial->callback((Fl_Callback*)cb_fixedfreqetdial);
- fixedfreqetdial->align(Fl_Align(FL_ALIGN_RIGHT));
- fixedfreqetdial->when(FL_WHEN_CHANGED);
- o->value(pars->PfixedfreqET);
- if (pars->Pfixedfreq==0) o->deactivate();
- } // WidgetPDial* fixedfreqetdial
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(5, 25, 240, 250, "AMPLITUDE");
- o->box(FL_THIN_UP_FRAME);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { Fl_Value_Slider* o = volume = new Fl_Value_Slider(10, 50, 160, 15, "Vol");
- volume->tooltip("Volume");
- volume->type(5);
- volume->box(FL_FLAT_BOX);
- volume->labelsize(11);
- volume->maximum(127);
- volume->step(1);
- volume->callback((Fl_Callback*)cb_volume);
- volume->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->PVolume);
- } // Fl_Value_Slider* volume
- { Fl_Value_Slider* o = vsns = new Fl_Value_Slider(10, 70, 160, 15, "V.Sns");
- vsns->tooltip("Velocity Sensing Function (rightmost to disable)");
- vsns->type(5);
- vsns->box(FL_FLAT_BOX);
- vsns->labelsize(11);
- vsns->maximum(127);
- vsns->step(1);
- vsns->callback((Fl_Callback*)cb_vsns);
- vsns->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->PAmpVelocityScaleFunction);
- } // Fl_Value_Slider* vsns
- { WidgetPDial* o = pan = new WidgetPDial(210, 45, 30, 30, "Pan");
- pan->tooltip("Panning (leftmost is Random)");
- pan->box(FL_ROUND_UP_BOX);
- pan->color(FL_BACKGROUND_COLOR);
- pan->selection_color(FL_INACTIVE_COLOR);
- pan->labeltype(FL_NORMAL_LABEL);
- pan->labelfont(0);
- pan->labelsize(10);
- pan->labelcolor(FL_FOREGROUND_COLOR);
- pan->maximum(127);
- pan->step(1);
- pan->callback((Fl_Callback*)cb_pan);
- pan->align(Fl_Align(FL_ALIGN_BOTTOM));
- pan->when(FL_WHEN_CHANGED);
- o->value(pars->PPanning);
- } // WidgetPDial* pan
- { WidgetPDial* o = pstr = new WidgetPDial(125, 247, 25, 25, "P.Str.");
- pstr->tooltip("Punch Strength");
- pstr->box(FL_ROUND_UP_BOX);
- pstr->color(FL_BACKGROUND_COLOR);
- pstr->selection_color(FL_INACTIVE_COLOR);
- pstr->labeltype(FL_NORMAL_LABEL);
- pstr->labelfont(0);
- pstr->labelsize(10);
- pstr->labelcolor(FL_FOREGROUND_COLOR);
- pstr->maximum(127);
- pstr->step(1);
- pstr->callback((Fl_Callback*)cb_pstr);
- pstr->align(Fl_Align(FL_ALIGN_TOP));
- pstr->when(FL_WHEN_CHANGED);
- o->value(pars->PPunchStrength);
- } // WidgetPDial* pstr
- { WidgetPDial* o = pt = new WidgetPDial(155, 247, 25, 25, "P.t.");
- pt->tooltip("Punch Time (duration)");
- pt->box(FL_ROUND_UP_BOX);
- pt->color(FL_BACKGROUND_COLOR);
- pt->selection_color(FL_INACTIVE_COLOR);
- pt->labeltype(FL_NORMAL_LABEL);
- pt->labelfont(0);
- pt->labelsize(10);
- pt->labelcolor(FL_FOREGROUND_COLOR);
- pt->maximum(127);
- pt->step(1);
- pt->callback((Fl_Callback*)cb_pt);
- pt->align(Fl_Align(FL_ALIGN_TOP));
- pt->when(FL_WHEN_CHANGED);
- o->value(pars->PPunchTime);
- } // WidgetPDial* pt
- { WidgetPDial* o = pstc = new WidgetPDial(185, 247, 25, 25, "P.Stc.");
- pstc->tooltip("Punch Stretch");
- pstc->box(FL_ROUND_UP_BOX);
- pstc->color(FL_BACKGROUND_COLOR);
- pstc->selection_color(FL_INACTIVE_COLOR);
- pstc->labeltype(FL_NORMAL_LABEL);
- pstc->labelfont(0);
- pstc->labelsize(10);
- pstc->labelcolor(FL_FOREGROUND_COLOR);
- pstc->maximum(127);
- pstc->step(1);
- pstc->callback((Fl_Callback*)cb_pstc);
- pstc->align(Fl_Align(FL_ALIGN_TOP));
- pstc->when(FL_WHEN_CHANGED);
- o->value(pars->PPunchStretch);
- } // WidgetPDial* pstc
- { WidgetPDial* o = pvel = new WidgetPDial(215, 247, 25, 25, "P.Vel.");
- pvel->tooltip("Punch Velocity Sensing");
- pvel->box(FL_ROUND_UP_BOX);
- pvel->color(FL_BACKGROUND_COLOR);
- pvel->selection_color(FL_INACTIVE_COLOR);
- pvel->labeltype(FL_NORMAL_LABEL);
- pvel->labelfont(0);
- pvel->labelsize(10);
- pvel->labelcolor(FL_FOREGROUND_COLOR);
- pvel->maximum(127);
- pvel->step(1);
- pvel->callback((Fl_Callback*)cb_pvel);
- pvel->align(Fl_Align(FL_ALIGN_TOP));
- pvel->when(FL_WHEN_CHANGED);
- o->value(pars->PPunchVelocitySensing);
- } // WidgetPDial* pvel
- { EnvelopeUI* o = ampenv = new EnvelopeUI(10, 95, 205, 70, "PADSynth - Amplitude Envelope");
- ampenv->box(FL_FLAT_BOX);
- ampenv->color((Fl_Color)51);
- ampenv->selection_color(FL_BACKGROUND_COLOR);
- ampenv->labeltype(FL_NORMAL_LABEL);
- ampenv->labelfont(0);
- ampenv->labelsize(14);
- ampenv->labelcolor(FL_FOREGROUND_COLOR);
- ampenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- ampenv->when(FL_WHEN_RELEASE);
- o->init(pars->AmpEnvelope);
- ampenv->end();
- } // EnvelopeUI* ampenv
- { LFOUI* o = amplfo = new LFOUI(10, 165, 230, 70, "Amplitude LFO ");
- amplfo->box(FL_FLAT_BOX);
- amplfo->color(FL_DARK1);
- amplfo->selection_color(FL_BACKGROUND_COLOR);
- amplfo->labeltype(FL_NORMAL_LABEL);
- amplfo->labelfont(0);
- amplfo->labelsize(14);
- amplfo->labelcolor(FL_FOREGROUND_COLOR);
- amplfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- amplfo->when(FL_WHEN_RELEASE);
- o->init(pars->AmpLfo);
- amplfo->end();
- } // LFOUI* amplfo
- { Fl_Check_Button* o = stereo = new Fl_Check_Button(15, 245, 70, 25, "Stereo");
- stereo->down_box(FL_DOWN_BOX);
- stereo->callback((Fl_Callback*)cb_stereo);
- o->value(pars->PStereo);
- } // Fl_Check_Button* stereo
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(245, 25, 285, 250, "FILTER");
- o->box(FL_THIN_UP_BOX);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->labelsize(13);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = filterenv = new EnvelopeUI(250, 130, 275, 70, "PADSynth - Filter Envelope");
- filterenv->box(FL_FLAT_BOX);
- filterenv->color((Fl_Color)51);
- filterenv->selection_color(FL_BACKGROUND_COLOR);
- filterenv->labeltype(FL_NORMAL_LABEL);
- filterenv->labelfont(0);
- filterenv->labelsize(14);
- filterenv->labelcolor(FL_FOREGROUND_COLOR);
- filterenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- filterenv->when(FL_WHEN_RELEASE);
- o->init(pars->FilterEnvelope);
- filterenv->end();
- } // EnvelopeUI* filterenv
- { LFOUI* o = filterlfo = new LFOUI(250, 200, 230, 70, "Filter LFO ");
- filterlfo->box(FL_FLAT_BOX);
- filterlfo->color(FL_DARK1);
- filterlfo->selection_color(FL_BACKGROUND_COLOR);
- filterlfo->labeltype(FL_NORMAL_LABEL);
- filterlfo->labelfont(0);
- filterlfo->labelsize(14);
- filterlfo->labelcolor(FL_FOREGROUND_COLOR);
- filterlfo->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- filterlfo->when(FL_WHEN_RELEASE);
- o->init(pars->FilterLfo);
- filterlfo->end();
- } // LFOUI* filterlfo
- { FilterUI* o = filterui = new FilterUI(250, 55, 275, 75, "PADsynth - Filter");
- filterui->box(FL_FLAT_BOX);
- filterui->color(FL_LIGHT1);
- filterui->selection_color(FL_BACKGROUND_COLOR);
- filterui->labeltype(FL_NORMAL_LABEL);
- filterui->labelfont(0);
- filterui->labelsize(14);
- filterui->labelcolor(FL_FOREGROUND_COLOR);
- filterui->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- filterui->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalFilter,&pars->PFilterVelocityScale,&pars->PFilterVelocityScaleFunction);
- filterui->end();
- } // FilterUI* filterui
- o->end();
- } // Fl_Group* o
- o->end();
- } // Fl_Group* o
- o->end();
- } // Fl_Tabs* o
- { Fl_Button* o = applybutton = new Fl_Button(45, 405, 185, 40, "Apply Changes");
- applybutton->box(FL_THIN_UP_BOX);
- applybutton->labelfont(1);
- applybutton->labelsize(16);
- applybutton->callback((Fl_Callback*)cb_applybutton);
- o->color(FL_RED);
- } // Fl_Button* applybutton
- { Fl_Button* o = new Fl_Button(320, 405, 175, 40, "Close");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(17);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(240, 430, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(270, 430, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(240, 405, 55, 15, "export");
- o->tooltip("export samples as wav file");
- o->box(FL_THIN_UP_BOX);
- o->color(FL_WHITE);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_export);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Button* o
- padnotewindow->end();
- } // Fl_Double_Window* padnotewindow
- return padnotewindow;
-}
-
-void PADnoteUI::refresh() {
- volume->value(pars->PVolume);
- vsns->value(pars->PAmpVelocityScaleFunction);
- pan->value(pars->PPanning);
-
- stereo->value(pars->PStereo);
-
-
- pstr->value(pars->PPunchStrength);
- pt->value(pars->PPunchTime);
- pstc->value(pars->PPunchStretch);
- pvel->value(pars->PPunchVelocitySensing);
-
- detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
- detune->value(pars->PDetune-8192);
-
- int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
- octave->value(k);
-
- detunetype->value(pars->PDetuneType-1);
- k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
- coarsedet->value(k);
-
- hz440->value(pars->Pfixedfreq);
- fixedfreqetdial->value(pars->PfixedfreqET);
-
- amplfo->refresh();
- freqlfo->refresh();
- filterlfo->refresh();
-
- ampenv->refresh();
- freqenv->refresh();
- filterenv->refresh();
- filterui->refresh();
-
-
- /* harmonic structure parametrs */
-
- resui->refresh();
- if (oscui!=NULL) oscui->refresh();
-
- hpbasetype->value(pars->Php.base.type);
- hpbasepar1->value(pars->Php.base.par1);
- hpfreqmult->value(pars->Php.freqmult);
-
- hpmpar1->value(pars->Php.modulator.par1);
- hpmfreq->value(pars->Php.modulator.freq);
- hpwidth->value(pars->Php.width);
-
- hponehalf->value(pars->Php.onehalf);
- hpamptype->value(pars->Php.amp.type);
- hpampmode->value(pars->Php.amp.mode);
- hpamppar1->value(pars->Php.amp.par1);
- hpamppar2->value(pars->Php.amp.par2);
- hpautoscale->value(pars->Php.autoscale);
-
- bwdial->value(pars->Pbandwidth);
- if (pars->Pmode==0){
- bwprofilegroup->activate();
- bwdial->activate();
- bwcents->activate();
- hprofile->activate();
- hprofile->color(54);
- bwscale->activate();
- } else {
- bwprofilegroup->deactivate();
- bwdial->deactivate();
- bwcents->deactivate();
- hprofile->deactivate();
- hprofile->color(48);
- bwscale->activate();
- };
-
- spectrummode->value(pars->Pmode);
-
- qbasenote->value(pars->Pquality.basenote);
- qsmpoct->value(pars->Pquality.smpoct);
- qoct->value(pars->Pquality.oct);
- qsamplesize->value(pars->Pquality.samplesize);
-
- hrpostype->value(pars->Phrpos.type);
- hrpospar1->value(pars->Phrpos.par1);
- hrpospar2->value(pars->Phrpos.par2);
- hrpospar3->value(pars->Phrpos.par3);
-
- hprofile->redraw();
- overtonepos->redraw();
-
- osc->redraw();
- pars->applyparameters(true);
- applybutton->color(FL_GRAY);
- applybutton->parent()->redraw();
-}
-
-PADnoteUI::~PADnoteUI() {
- delete(oscui);
- delete(resui);
-
- padnotewindow->hide();
- delete(padnotewindow);
-}
diff --git a/plugins/zynaddsubfx/src/UI/PADnoteUI.fl b/plugins/zynaddsubfx/src/UI/PADnoteUI.fl
deleted file mode 100644
index 74441c1..0000000
--- a/plugins/zynaddsubfx/src/UI/PADnoteUI.fl
+++ /dev/null
@@ -1,1101 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0107
-header_name {.h}
-code_name {.cc}
-decl {\#include "../Params/PADnoteParameters.h"} {public
-}
-
-decl {\#include "../Misc/Util.h"} {public
-}
-
-decl {\#include "../Misc/Master.h"} {public
-}
-
-decl {\#include "ResonanceUI.h"} {public
-}
-
-decl {\#include <FL/Fl_Box.H>} {public
-}
-
-decl {\#include <FL/Fl_Group.H>} {public
-}
-
-decl {\#include <FL/Fl_File_Chooser.H>} {public
-}
-
-decl {\#include <math.h>} {}
-
-decl {\#include <stdio.h>} {}
-
-decl {\#include <stdlib.h>} {}
-
-decl {\#include <string.h>} {}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include "EnvelopeUI.h"} {public
-}
-
-decl {\#include "LFOUI.h"} {public
-}
-
-decl {\#include "FilterUI.h"} {public
-}
-
-decl {\#include "OscilGenUI.h"} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class PADnoteHarmonicProfile {: {public Fl_Box}
-} {
- Function {PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {pars=NULL;} {}
- }
- Function {init(PADnoteParameters *pars,Master *master_)} {} {
- code {master=master_;
-this->pars=pars;} {}
- }
- Function {draw()} {} {
- code {int ox=x(),oy=y(),lx=w(),ly=h();
-if (!visible()) return;
-REALTYPE smps[lx];
-
-REALTYPE realbw=pars->getprofile(smps,lx);
-bool active=active_r();
-
-//draw the equivalent bandwidth
-if (active) fl_color(220,220,220);
- else fl_color(160,165,165);
-fl_line_style(0);
-int rbw=(int)(realbw*(lx-1.0)/2.0);
-for (int i=lx/2-rbw;i<(lx/2+rbw);i++) fl_line(ox+i,oy,ox+i,oy+ly-1);
-
-fl_line_style(0);
-if (active) fl_color(200,200,200);
- else fl_color(160,160,160);
-for (int i=1;i<10;i++){
- int kx=(int)(lx/10.0*i);
- fl_line(ox+kx,oy,ox+kx,oy+ly-1);
-};
-for (int i=1;i<5;i++){
- int ky=(int)(ly/5.0*i);
- fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
-};
-
-
-fl_color(120,120,120);
-fl_line_style(FL_DOT);
-fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
-
-//draw the graph
-fl_line_style(0);
-int old=0;
-for (int i=0;i<lx;i++){
- int val=(int) ((ly-2)*smps[i]);
- if (active) fl_color(180,210,240);
- else fl_color(150,150,155);
- fl_line(ox+i,oy+ly-1,ox+i,oy+ly-1-val);
- if (active) fl_color(0,0,100);
- else fl_color(150,150,150);
- if (i>0) fl_line(ox+i-1,oy+ly-2-old,ox+i,oy+ly-2-val);
- old=val;
-};
-
-
-fl_line_style(FL_DASH);
-if (active) fl_color(0,100,220);
- else fl_color(150,160,170);
-fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
-fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
-
-fl_line_style(0);} {}
- }
- decl {Master *master;} {}
- decl {PADnoteParameters *pars;} {public
- }
-}
-
-class PADnoteOvertonePosition {: {public Fl_Box}
-} {
- Function {PADnoteOvertonePosition(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {pars=NULL;} {}
- }
- Function {init(PADnoteParameters *pars,Master *master_)} {} {
- code {master=master_;
-this->pars=pars;} {}
- }
- Function {draw()} {} {
- code {if (!visible()) return;
-const int maxdb=60;
-
-int ox=x(),oy=y(),lx=w(),ly=h();
-const int maxharmonic=64;
-
-
-for (int i=1;i<maxharmonic;i++){
- fl_color(200,200,200);
- fl_line_style(FL_DOT);
- if (i%5==0) fl_line_style(0);
- if (i%10==0) fl_color(160,160,160);
- int kx=(int)(lx/(REALTYPE)maxharmonic*i);
- fl_line(ox+kx,oy,ox+kx,oy+ly);
-};
-
-
-
-int n=OSCIL_SIZE/2;
-REALTYPE spc[n];
-for (int i=0;i<n;i++) spc[i]=0.0;
-
-pthread_mutex_lock(&master->mutex);
-pars->oscilgen->getspectrum(n,spc,0);
-pthread_mutex_unlock(&master->mutex);
-
-
-//normalize
-REALTYPE max=0;
-for (int i=0;i<n;i++){
- REALTYPE x=fabs(spc[i]);
- if (max<x) max=x;
-}
-if (max<0.000001) max=1.0;
-max=max*1.05;
-
-REALTYPE spectrum[lx];
-for (int i=0;i<lx;i++) spectrum[i]=0;
-
-
-for (int i=1;i<n;i++){
- REALTYPE nhr=pars->getNhr(i);
- int kx=(int)(lx/(REALTYPE)maxharmonic*nhr);
- if ((kx<0)||(kx>lx)) continue;
-
- spectrum[kx]=spc[i-1]/max+1e-9;
-
-};
-
-fl_color(180,0,0);
-fl_line_style(0);
-
-if (pars->Pmode==2){
- int old=0;
- for (int i=1;i<lx;i++){
- if ((spectrum[i]>1e-10)||(i==(lx-1))){
- int delta=i-old;
- REALTYPE val1=spectrum[old];
- REALTYPE val2=spectrum[i];
-
- REALTYPE idelta=1.0/delta;
- for (int j=0;j<delta;j++){
- REALTYPE x=idelta*j;
- spectrum[old+j]=val1*(1.0-x)+val2*x;
- };
- old=i;
- };
-
- };
-};
-
-for (int i=0;i<lx;i++){
- REALTYPE x=spectrum[i];
- if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
- else continue;
- int yy=(int)(x*ly);
- fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1);
-
-};} {}
- }
- decl {Master *master;} {}
- decl {PADnoteParameters *pars;} {public
- }
-}
-
-class PADnoteUI {open : {public PresetsUI_}
-} {
- Function {PADnoteUI(PADnoteParameters *parameters,Master *master_)} {open
- } {
- code {pars=parameters;
-master=master_;
-oscui=NULL;
-resui=new ResonanceUI(pars->resonance);
-make_window();} {}
- }
- Function {make_window()} {open
- } {
- Fl_Window padnotewindow {
- label {PAD synth Parameters} open
- xywh {281 302 535 450} type Double visible
- } {
- Fl_Tabs {} {
- callback {if (o->value()!=harmonicstructuregroup) applybutton->hide();
- else applybutton->show();}
- xywh {0 0 535 395}
- } {
- Fl_Group harmonicstructuregroup {
- label {Harmonic Structure}
- xywh {0 20 535 375} box ENGRAVED_BOX
- } {
- Fl_Group bwprofilegroup {
- xywh {5 30 90 260} box ENGRAVED_BOX
- code0 {if (pars->Pmode!=0) o->deactivate();}
- } {
- Fl_Dial hpbasepar1 {
- label Width
- callback {pars->Php.base.par1=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {20 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Php.base.par1);}
- class WidgetPDial
- }
- Fl_Choice hpbasetype {
- label {Base Type}
- callback {pars->Php.base.type=o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {15 45 75 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
- code0 {o->value(pars->Php.base.type);}
- } {
- MenuItem {} {
- label Gauss
- xywh {15 15 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Square
- xywh {25 25 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label DoubleExp
- xywh {35 35 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial hpfreqmult {
- label FreqMlt
- callback {pars->Php.freqmult=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {55 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Php.freqmult);}
- class WidgetPDial
- }
- Fl_Dial hpmpar1 {
- label Str
- callback {pars->Php.modulator.par1=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {15 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Php.modulator.par1);}
- class WidgetPDial
- }
- Fl_Dial hpmfreq {
- label SFreq
- callback {pars->Php.modulator.freq=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {40 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Php.modulator.freq);}
- class WidgetPDial
- }
- Fl_Group {} {
- xywh {10 160 80 105} box BORDER_BOX
- } {
- Fl_Choice hpamptype {
- label AmpMultiplier
- callback {pars->Php.amp.type=o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {15 175 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
- code0 {o->value(pars->Php.amp.type);}
- } {
- MenuItem {} {
- label OFF
- xywh {45 45 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Gauss
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Sine
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Flat
- xywh {75 75 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Choice hpampmode {
- label AmpMode
- callback {pars->Php.amp.mode=o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {15 205 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
- code0 {o->value(pars->Php.amp.mode);}
- } {
- MenuItem {} {
- label Sum
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Mult
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Div1
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Div2
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial hpamppar1 {
- label Par1
- callback {pars->Php.amp.par1=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {15 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Php.amp.par1);}
- class WidgetPDial
- }
- Fl_Dial hpamppar2 {
- label Par2
- callback {pars->Php.amp.par2=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {55 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Php.amp.par2);}
- class WidgetPDial
- }
- }
- Fl_Check_Button hpautoscale {
- label autoscale
- callback {pars->Php.autoscale=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {10 270 60 15} down_box DOWN_BOX labelsize 10
- code0 {o->value(pars->Php.autoscale);}
- }
- Fl_Choice hponehalf {
- callback {pars->Php.onehalf=o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {10 143 80 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
- code0 {o->value(pars->Php.onehalf);}
- } {
- MenuItem {} {
- label Full
- xywh {25 25 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {Upper Half}
- xywh {45 45 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {Lower Half}
- xywh {35 35 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Dial hpwidth {
- label Size
- callback {pars->Php.width=(int) o->value();
-hprofile->redraw();
-cbwidget->do_callback();}
- xywh {65 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Php.width);}
- class WidgetPDial
- }
- }
- Fl_Group {} {
- xywh {100 155 270 135} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 align 6
- code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {osc->init(pars->oscilgen,master);}
- } {}
- Fl_Button {} {
- label Change
- callback {if (oscui!=NULL) delete (oscui);
-oscui=new OscilEditor(pars->oscilgen,osc,cbwidget,applybutton,master);}
- xywh {375 270 60 20} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Box cbwidget {
- label {Harmonic Content}
- callback {overtonepos->redraw();
-applybutton->color(FL_RED);
-applybutton->redraw();}
- xywh {125 135 205 20} align 16
- }
- Fl_Button {} {
- label Resonance
- callback {resui->resonancewindow->redraw();
-resui->resonancewindow->show();
-resui->setcbwidget(cbwidget,applybutton);}
- xywh {375 225 80 20} box THIN_UP_BOX
- }
- Fl_Dial bwdial {
- label BandWidth
- callback {bwcents->value(pars->setPbandwidth((int) o->value()));
-cbwidget->do_callback();}
- xywh {15 295 35 35} box ROUND_UP_BOX labelsize 10 maximum 1000 step 1
- code0 {o->value(pars->Pbandwidth);}
- code1 {if (pars->Pmode!=0) o->deactivate();}
- class WidgetPDial
- }
- Fl_Value_Output bwcents {
- label cents
- xywh {55 305 55 15} labelsize 10 align 6 maximum 10000 step 0.1
- code0 {o->value(pars->setPbandwidth(pars->Pbandwidth));}
- code1 {if (pars->Pmode!=0) o->deactivate();}
- }
- Fl_Group {} {
- xywh {315 295 215 45} box ENGRAVED_BOX
- } {
- Fl_Choice hrpostype {
- label OvertonesPosition
- callback {pars->Phrpos.type=o->value();
-overtonepos->redraw();
-cbwidget->do_callback();}
- xywh {325 310 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
- code0 {o->value(pars->Phrpos.type);}
- } {
- MenuItem {} {
- label Harmonic
- xywh {70 70 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label ShiftU
- xywh {80 80 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label ShiftL
- xywh {90 90 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label PowerU
- xywh {90 90 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label PowerL
- xywh {100 100 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Sine
- xywh {110 110 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Power
- xywh {120 120 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Dial hrpospar1 {
- label Par1
- callback {pars->Phrpos.par1=(int) o->value();
-overtonepos->redraw();
-cbwidget->do_callback();}
- xywh {425 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
- code0 {o->value(pars->Phrpos.par1);}
- class WidgetPDial
- }
- Fl_Dial hrpospar2 {
- label Par2
- callback {pars->Phrpos.par2=(int) o->value();
-overtonepos->redraw();
-cbwidget->do_callback();}
- xywh {460 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
- code0 {o->value(pars->Phrpos.par2);}
- class WidgetPDial
- }
- Fl_Dial hrpospar3 {
- label ForceH
- callback {pars->Phrpos.par3=(int) o->value();
-overtonepos->redraw();
-cbwidget->do_callback();}
- xywh {495 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
- code0 {o->value(pars->Phrpos.par3);}
- class WidgetPDial
- }
- }
- Fl_Choice bwscale {
- label {Bandwidth Scale}
- callback {pars->Pbwscale=(int) o->value();
-cbwidget->do_callback();}
- xywh {120 305 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
- code0 {o->value(pars->Pbwscale);}
- code1 {if (pars->Pmode!=0) o->deactivate();}
- } {
- MenuItem {} {
- label Normal
- xywh {95 95 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label EqualHz
- xywh {105 105 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Quater
- xywh {115 115 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Half
- xywh {125 125 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {75%}
- xywh {135 135 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {150%}
- xywh {145 145 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Double
- xywh {145 145 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {Inv.Half}
- xywh {155 155 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Group overtonepos {
- xywh {5 345 525 45} box FLAT_BOX color 54 selection_color 218 labelcolor 63
- code0 {PADnoteOvertonePosition *opui=new PADnoteOvertonePosition(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {opui->init(pars,master);}
- } {}
- Fl_Choice qsamplesize {
- label {Sample Size}
- callback {pars->Pquality.samplesize=(int) o->value();
-cbwidget->do_callback();}
- xywh {375 190 115 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
- code0 {o->value(pars->Pquality.samplesize);}
- } {
- MenuItem {} {
- label {16k (Tiny)}
- xywh {155 155 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 32k
- xywh {165 165 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {64k (Small)}
- xywh {175 175 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 128k
- xywh {185 185 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {256k (Normal)}
- xywh {205 205 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 512k
- xywh {200 200 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {1M (Big)}
- xywh {205 205 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Choice qsmpoct {
- label {smp/oct}
- callback {pars->Pquality.smpoct=(int) o->value();
-cbwidget->do_callback();}
- xywh {430 155 45 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
- code0 {o->value(pars->Pquality.smpoct);}
- } {
- MenuItem {} {
- label {0.5}
- xywh {10 10 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 1
- xywh {0 0 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 2
- xywh {10 10 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 3
- xywh {20 20 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 4
- xywh {30 30 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 6
- xywh {40 40 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 12
- xywh {50 50 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Choice qoct {
- label {no.oct}
- callback {pars->Pquality.oct=(int) o->value();
-cbwidget->do_callback();}
- xywh {480 155 45 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
- code0 {o->value(pars->Pquality.oct);}
- } {
- MenuItem {} {
- label 1
- xywh {10 10 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 2
- xywh {20 20 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 3
- xywh {30 30 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 4
- xywh {40 40 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 5
- xywh {50 50 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 6
- xywh {60 60 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 7
- xywh {70 70 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label 8
- xywh {80 80 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Choice qbasenote {
- label base
- callback {pars->Pquality.basenote=(int) o->value();
-cbwidget->do_callback();}
- xywh {375 155 50 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
- code0 {o->value(pars->Pquality.basenote);}
- } {
- MenuItem {} {
- label {C-2}
- xywh {10 10 100 20} labelfont 1
- }
- MenuItem {} {
- label {G-2}
- xywh {20 20 100 20} labelfont 1
- }
- MenuItem {} {
- label {C-3}
- xywh {20 20 100 20} labelfont 1
- }
- MenuItem {} {
- label {G-3}
- xywh {30 30 100 20} labelfont 1
- }
- MenuItem {} {
- label {C-4}
- xywh {30 30 100 20} labelfont 1
- }
- MenuItem {} {
- label {G-4}
- xywh {40 40 100 20} labelfont 1
- }
- MenuItem {} {
- label {C-5}
- xywh {40 40 100 20} labelfont 1
- }
- MenuItem {} {
- label {G-5}
- xywh {50 50 100 20} labelfont 1
- }
- MenuItem {} {
- label {G-6}
- xywh {60 60 100 20} labelfont 1
- }
- }
- Fl_Group hprofile {
- xywh {100 45 430 90} box FLAT_BOX color 54 selection_color 218 labelcolor 63
- code0 {PADnoteHarmonicProfile *hpui=new PADnoteHarmonicProfile(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {hpui->init(pars,master);}
- code2 {if (pars->Pmode!=0) { o->deactivate(); o->color(48);};}
- } {}
- Fl_Box {} {
- label {Profile of One Harmonic (Frequency Distribution)}
- xywh {160 25 315 20}
- }
- Fl_Choice spectrummode {
- label {Spectrum Mode}
- callback {pars->Pmode=(int) o->value();
-
-if (pars->Pmode==0){
- bwprofilegroup->activate();
- bwdial->activate();
- bwcents->activate();
- hprofile->activate();
- hprofile->color(54);
- bwscale->activate();
-} else {
- bwprofilegroup->deactivate();
- bwdial->deactivate();
- bwcents->deactivate();
- hprofile->deactivate();
- hprofile->color(48);
- bwscale->deactivate();
-};
-
-cbwidget->do_callback();}
- xywh {220 305 90 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 11
- code0 {o->value(pars->Pmode);}
- } {
- MenuItem {} {
- label Bandwidth
- xywh {105 105 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Discrete
- xywh {125 125 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Continous
- xywh {115 115 100 20} labelfont 1 labelsize 11
- }
- }
- }
- Fl_Group {} {
- label {Envelopes&LFOs}
- xywh {0 20 535 375} box ENGRAVED_BOX hide
- } {
- Fl_Group {} {
- label FREQUENCY
- xywh {5 275 525 115} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Group freqenv {
- label {PADSynth - Frequency Envelope} open
- xywh {10 315 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->FreqEnvelope);}
- class EnvelopeUI
- } {}
- Fl_Counter octave {
- label Octave
- callback {int k=(int) o->value();
-if (k<0) k+=16;
-pars->PCoarseDetune = k*1024+
- pars->PCoarseDetune%1024;}
- tooltip Octave xywh {470 295 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
- code0 {int k=pars->PCoarseDetune/1024;}
- code1 {if (k>=8) k-=16;}
- code2 {o->value(k);}
- }
- Fl_Counter coarsedet {
- label {Coarse det.}
- callback {int k=(int) o->value();
-if (k<0) k+=1024;
-pars->PCoarseDetune = k+
- (pars->PCoarseDetune/1024)*1024;}
- tooltip {Coarse Detune} xywh {455 365 60 20} labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 11
- code0 {int k=pars->PCoarseDetune%1024;}
- code1 {if (k>=512) k-=1024;}
- code2 {o->value(k);}
- code3 {o->lstep(10);}
- }
- Fl_Group freqlfo {
- label {Frequency LFO } open
- xywh {215 315 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->FreqLfo);}
- class LFOUI
- } {}
- Fl_Slider detune {
- callback {pars->PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();}
- tooltip {Fine Detune (cents)} xywh {60 295 295 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
- code0 {o->value(pars->PDetune-8192);}
- }
- Fl_Value_Output detunevalueoutput {
- label Detune
- callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
- xywh {12 295 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
- code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
- }
- Fl_Choice detunetype {
- label {Detune Type}
- callback {pars->PDetuneType=(int) o->value()+1;
-detunevalueoutput->do_callback();} open
- xywh {450 335 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
- code1 {o->value(pars->PDetuneType-1);}
- } {}
- Fl_Check_Button hz440 {
- label 440Hz
- callback {int x=(int) o->value();
-pars->Pfixedfreq=x;
-if (x==0) fixedfreqetdial->deactivate();
- else fixedfreqetdial->activate();}
- tooltip {set the base frequency to 440Hz} xywh {365 295 50 15} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->Pfixedfreq);}
- }
- Fl_Dial fixedfreqetdial {
- label {Eq.T.}
- callback {pars->PfixedfreqET=(int) o->value();}
- tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {420 295 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
- code0 {o->value(pars->PfixedfreqET);}
- code1 {if (pars->Pfixedfreq==0) o->deactivate();}
- class WidgetPDial
- }
- }
- Fl_Group {} {
- label AMPLITUDE
- xywh {5 25 240 250} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Value_Slider volume {
- label Vol
- callback {pars->PVolume=(int)o->value();}
- tooltip Volume xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->PVolume);}
- }
- Fl_Value_Slider vsns {
- label {V.Sns}
- callback {pars->PAmpVelocityScaleFunction=(int) o->value();}
- tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 70 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->PAmpVelocityScaleFunction);}
- }
- Fl_Dial pan {
- label Pan
- callback {pars->PPanning=(int) o->value();}
- tooltip {Panning (leftmost is Random)} xywh {210 45 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(pars->PPanning);}
- class WidgetPDial
- }
- Fl_Dial pstr {
- label {P.Str.}
- callback {pars->PPunchStrength=(int) o->value();}
- tooltip {Punch Strength} xywh {125 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->PPunchStrength);}
- class WidgetPDial
- }
- Fl_Dial pt {
- label {P.t.}
- callback {pars->PPunchTime=(int) o->value();}
- tooltip {Punch Time (duration)} xywh {155 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->PPunchTime);}
- class WidgetPDial
- }
- Fl_Dial pstc {
- label {P.Stc.}
- callback {pars->PPunchStretch=(int) o->value();}
- tooltip {Punch Stretch} xywh {185 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->PPunchStretch);}
- class WidgetPDial
- }
- Fl_Dial pvel {
- label {P.Vel.}
- callback {pars->PPunchVelocitySensing=(int) o->value();}
- tooltip {Punch Velocity Sensing} xywh {215 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->PPunchVelocitySensing);}
- class WidgetPDial
- }
- Fl_Group ampenv {
- label {PADSynth - Amplitude Envelope} open
- xywh {10 95 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->AmpEnvelope);}
- class EnvelopeUI
- } {}
- Fl_Group amplfo {
- label {Amplitude LFO } open
- xywh {10 165 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->AmpLfo);}
- class LFOUI
- } {}
- Fl_Check_Button stereo {
- label Stereo
- callback {pars->PStereo=(int) o->value();
-hprofile->redraw();}
- xywh {15 245 70 25} down_box DOWN_BOX
- code0 {o->value(pars->PStereo);}
- }
- }
- Fl_Group {} {
- label FILTER
- xywh {245 25 285 250} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- } {
- Fl_Group filterenv {
- label {PADSynth - Filter Envelope} open
- xywh {250 130 275 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->FilterEnvelope);}
- class EnvelopeUI
- } {}
- Fl_Group filterlfo {
- label {Filter LFO } open
- xywh {250 200 230 70} box FLAT_BOX color 47 align 144
- code0 {o->init(pars->FilterLfo);}
- class LFOUI
- } {}
- Fl_Group filterui {
- label {PADsynth - Filter} open
- xywh {250 55 275 75} box FLAT_BOX color 50 align 144
- code0 {o->init(pars->GlobalFilter,&pars->PFilterVelocityScale,&pars->PFilterVelocityScaleFunction);}
- class FilterUI
- } {}
- }
- }
- }
- Fl_Button applybutton {
- label {Apply Changes}
- callback {pars->applyparameters(true);
-o->color(FL_GRAY);
-if (oscui!=NULL) {
- oscui->applybutton->color(FL_GRAY);
- oscui->applybutton->redraw();
-};
-if (resui!=NULL) {
- resui->applybutton->color(FL_GRAY);
- resui->applybutton->redraw();
-};}
- xywh {45 405 185 40} box THIN_UP_BOX labelfont 1 labelsize 16
- code0 {o->color(FL_RED);}
- }
- Fl_Button {} {
- label Close
- callback {padnotewindow->hide();}
- xywh {320 405 175 40} box THIN_UP_BOX labelsize 17
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(pars);}
- xywh {240 430 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(pars,this);}
- xywh {270 430 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label export
- callback {char *filename;
-filename=fl_file_chooser("Export samples:","(*.wav)",NULL,0);
-if (filename==NULL) return;
-fl_filename_setext(filename,"");
-
-
-
-pars->export2wav(filename);} selected
- tooltip {export samples as wav file} xywh {240 405 55 15} box THIN_UP_BOX color 255 labelsize 11 align 128
- }
- }
- }
- Function {refresh()} {} {
- code {volume->value(pars->PVolume);
-vsns->value(pars->PAmpVelocityScaleFunction);
-pan->value(pars->PPanning);
-
-stereo->value(pars->PStereo);
-
-
-pstr->value(pars->PPunchStrength);
-pt->value(pars->PPunchTime);
-pstc->value(pars->PPunchStretch);
-pvel->value(pars->PPunchVelocitySensing);
-
-detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
-detune->value(pars->PDetune-8192);
-
-int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
-octave->value(k);
-
-detunetype->value(pars->PDetuneType-1);
-k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
-coarsedet->value(k);
-
-hz440->value(pars->Pfixedfreq);
-fixedfreqetdial->value(pars->PfixedfreqET);
-
-amplfo->refresh();
-freqlfo->refresh();
-filterlfo->refresh();
-
-ampenv->refresh();
-freqenv->refresh();
-filterenv->refresh();
-filterui->refresh();
-
-
-/* harmonic structure parametrs */
-
-resui->refresh();
-if (oscui!=NULL) oscui->refresh();
-
-hpbasetype->value(pars->Php.base.type);
-hpbasepar1->value(pars->Php.base.par1);
-hpfreqmult->value(pars->Php.freqmult);
-
-hpmpar1->value(pars->Php.modulator.par1);
-hpmfreq->value(pars->Php.modulator.freq);
-hpwidth->value(pars->Php.width);
-
-hponehalf->value(pars->Php.onehalf);
-hpamptype->value(pars->Php.amp.type);
-hpampmode->value(pars->Php.amp.mode);
-hpamppar1->value(pars->Php.amp.par1);
-hpamppar2->value(pars->Php.amp.par2);
-hpautoscale->value(pars->Php.autoscale);
-
-bwdial->value(pars->Pbandwidth);
-if (pars->Pmode==0){
- bwprofilegroup->activate();
- bwdial->activate();
- bwcents->activate();
- hprofile->activate();
- hprofile->color(54);
- bwscale->activate();
-} else {
- bwprofilegroup->deactivate();
- bwdial->deactivate();
- bwcents->deactivate();
- hprofile->deactivate();
- hprofile->color(48);
- bwscale->activate();
-};
-
-spectrummode->value(pars->Pmode);
-
-qbasenote->value(pars->Pquality.basenote);
-qsmpoct->value(pars->Pquality.smpoct);
-qoct->value(pars->Pquality.oct);
-qsamplesize->value(pars->Pquality.samplesize);
-
-hrpostype->value(pars->Phrpos.type);
-hrpospar1->value(pars->Phrpos.par1);
-hrpospar2->value(pars->Phrpos.par2);
-hrpospar3->value(pars->Phrpos.par3);
-
-hprofile->redraw();
-overtonepos->redraw();
-
-osc->redraw();
-pars->applyparameters(true);
-applybutton->color(FL_GRAY);
-applybutton->parent()->redraw();} {}
- }
- Function {~PADnoteUI()} {} {
- code {delete(oscui);
-delete(resui);
-
-padnotewindow->hide();
-delete(padnotewindow);} {}
- }
- decl {PADnoteParameters *pars;} {public
- }
- decl {Master *master;} {public
- }
- decl {OscilEditor *oscui;} {public
- }
- decl {Oscilloscope *osc;} {public
- }
- decl {ResonanceUI *resui;} {public
- }
-}
diff --git a/plugins/zynaddsubfx/src/UI/PADnoteUI.h b/plugins/zynaddsubfx/src/UI/PADnoteUI.h
deleted file mode 100644
index e21f494..0000000
--- a/plugins/zynaddsubfx/src/UI/PADnoteUI.h
+++ /dev/null
@@ -1,305 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef PADnoteUI_h
-#define PADnoteUI_h
-#include <FL/Fl.H>
-#include "../Params/PADnoteParameters.h"
-#include "../Misc/Util.h"
-#include "../Misc/Master.h"
-#include "ResonanceUI.h"
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_File_Chooser.H>
-#include "WidgetPDial.h"
-#include "EnvelopeUI.h"
-#include "LFOUI.h"
-#include "FilterUI.h"
-#include "OscilGenUI.h"
-#include "PresetsUI.h"
-
-class PADnoteHarmonicProfile : public Fl_Box {
-public:
- PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label=0);
- void init(PADnoteParameters *pars,Master *master_);
- void draw();
-private:
- Master *master;
-public:
- PADnoteParameters *pars;
-};
-
-class PADnoteOvertonePosition : public Fl_Box {
-public:
- PADnoteOvertonePosition(int x,int y, int w, int h, const char *label=0);
- void init(PADnoteParameters *pars,Master *master_);
- void draw();
-private:
- Master *master;
-public:
- PADnoteParameters *pars;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Value_Slider.H>
-
-class PADnoteUI : public PresetsUI_ {
-public:
- PADnoteUI(PADnoteParameters *parameters,Master *master_);
- Fl_Double_Window* make_window();
- Fl_Double_Window *padnotewindow;
-private:
- void cb__i(Fl_Tabs*, void*);
- static void cb_(Fl_Tabs*, void*);
-public:
- Fl_Group *harmonicstructuregroup;
- Fl_Group *bwprofilegroup;
- WidgetPDial *hpbasepar1;
-private:
- void cb_hpbasepar1_i(WidgetPDial*, void*);
- static void cb_hpbasepar1(WidgetPDial*, void*);
-public:
- Fl_Choice *hpbasetype;
-private:
- void cb_hpbasetype_i(Fl_Choice*, void*);
- static void cb_hpbasetype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_hpbasetype[];
-public:
- WidgetPDial *hpfreqmult;
-private:
- void cb_hpfreqmult_i(WidgetPDial*, void*);
- static void cb_hpfreqmult(WidgetPDial*, void*);
-public:
- WidgetPDial *hpmpar1;
-private:
- void cb_hpmpar1_i(WidgetPDial*, void*);
- static void cb_hpmpar1(WidgetPDial*, void*);
-public:
- WidgetPDial *hpmfreq;
-private:
- void cb_hpmfreq_i(WidgetPDial*, void*);
- static void cb_hpmfreq(WidgetPDial*, void*);
-public:
- Fl_Choice *hpamptype;
-private:
- void cb_hpamptype_i(Fl_Choice*, void*);
- static void cb_hpamptype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_hpamptype[];
-public:
- Fl_Choice *hpampmode;
-private:
- void cb_hpampmode_i(Fl_Choice*, void*);
- static void cb_hpampmode(Fl_Choice*, void*);
- static Fl_Menu_Item menu_hpampmode[];
-public:
- WidgetPDial *hpamppar1;
-private:
- void cb_hpamppar1_i(WidgetPDial*, void*);
- static void cb_hpamppar1(WidgetPDial*, void*);
-public:
- WidgetPDial *hpamppar2;
-private:
- void cb_hpamppar2_i(WidgetPDial*, void*);
- static void cb_hpamppar2(WidgetPDial*, void*);
-public:
- Fl_Check_Button *hpautoscale;
-private:
- void cb_hpautoscale_i(Fl_Check_Button*, void*);
- static void cb_hpautoscale(Fl_Check_Button*, void*);
-public:
- Fl_Choice *hponehalf;
-private:
- void cb_hponehalf_i(Fl_Choice*, void*);
- static void cb_hponehalf(Fl_Choice*, void*);
- static Fl_Menu_Item menu_hponehalf[];
-public:
- WidgetPDial *hpwidth;
-private:
- void cb_hpwidth_i(WidgetPDial*, void*);
- static void cb_hpwidth(WidgetPDial*, void*);
- void cb_Change_i(Fl_Button*, void*);
- static void cb_Change(Fl_Button*, void*);
-public:
- Fl_Box *cbwidget;
-private:
- void cb_cbwidget_i(Fl_Box*, void*);
- static void cb_cbwidget(Fl_Box*, void*);
- void cb_Resonance_i(Fl_Button*, void*);
- static void cb_Resonance(Fl_Button*, void*);
-public:
- WidgetPDial *bwdial;
-private:
- void cb_bwdial_i(WidgetPDial*, void*);
- static void cb_bwdial(WidgetPDial*, void*);
-public:
- Fl_Value_Output *bwcents;
- Fl_Choice *hrpostype;
-private:
- void cb_hrpostype_i(Fl_Choice*, void*);
- static void cb_hrpostype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_hrpostype[];
-public:
- WidgetPDial *hrpospar1;
-private:
- void cb_hrpospar1_i(WidgetPDial*, void*);
- static void cb_hrpospar1(WidgetPDial*, void*);
-public:
- WidgetPDial *hrpospar2;
-private:
- void cb_hrpospar2_i(WidgetPDial*, void*);
- static void cb_hrpospar2(WidgetPDial*, void*);
-public:
- WidgetPDial *hrpospar3;
-private:
- void cb_hrpospar3_i(WidgetPDial*, void*);
- static void cb_hrpospar3(WidgetPDial*, void*);
-public:
- Fl_Choice *bwscale;
-private:
- void cb_bwscale_i(Fl_Choice*, void*);
- static void cb_bwscale(Fl_Choice*, void*);
- static Fl_Menu_Item menu_bwscale[];
-public:
- Fl_Group *overtonepos;
- Fl_Choice *qsamplesize;
-private:
- void cb_qsamplesize_i(Fl_Choice*, void*);
- static void cb_qsamplesize(Fl_Choice*, void*);
- static Fl_Menu_Item menu_qsamplesize[];
-public:
- Fl_Choice *qsmpoct;
-private:
- void cb_qsmpoct_i(Fl_Choice*, void*);
- static void cb_qsmpoct(Fl_Choice*, void*);
- static Fl_Menu_Item menu_qsmpoct[];
-public:
- Fl_Choice *qoct;
-private:
- void cb_qoct_i(Fl_Choice*, void*);
- static void cb_qoct(Fl_Choice*, void*);
- static Fl_Menu_Item menu_qoct[];
-public:
- Fl_Choice *qbasenote;
-private:
- void cb_qbasenote_i(Fl_Choice*, void*);
- static void cb_qbasenote(Fl_Choice*, void*);
- static Fl_Menu_Item menu_qbasenote[];
-public:
- Fl_Group *hprofile;
- Fl_Choice *spectrummode;
-private:
- void cb_spectrummode_i(Fl_Choice*, void*);
- static void cb_spectrummode(Fl_Choice*, void*);
- static Fl_Menu_Item menu_spectrummode[];
-public:
- EnvelopeUI *freqenv;
- Fl_Counter *octave;
-private:
- void cb_octave_i(Fl_Counter*, void*);
- static void cb_octave(Fl_Counter*, void*);
-public:
- Fl_Counter *coarsedet;
-private:
- void cb_coarsedet_i(Fl_Counter*, void*);
- static void cb_coarsedet(Fl_Counter*, void*);
-public:
- LFOUI *freqlfo;
- Fl_Slider *detune;
-private:
- void cb_detune_i(Fl_Slider*, void*);
- static void cb_detune(Fl_Slider*, void*);
-public:
- Fl_Value_Output *detunevalueoutput;
-private:
- void cb_detunevalueoutput_i(Fl_Value_Output*, void*);
- static void cb_detunevalueoutput(Fl_Value_Output*, void*);
-public:
- Fl_Choice *detunetype;
-private:
- void cb_detunetype_i(Fl_Choice*, void*);
- static void cb_detunetype(Fl_Choice*, void*);
-public:
- Fl_Check_Button *hz440;
-private:
- void cb_hz440_i(Fl_Check_Button*, void*);
- static void cb_hz440(Fl_Check_Button*, void*);
-public:
- WidgetPDial *fixedfreqetdial;
-private:
- void cb_fixedfreqetdial_i(WidgetPDial*, void*);
- static void cb_fixedfreqetdial(WidgetPDial*, void*);
-public:
- Fl_Value_Slider *volume;
-private:
- void cb_volume_i(Fl_Value_Slider*, void*);
- static void cb_volume(Fl_Value_Slider*, void*);
-public:
- Fl_Value_Slider *vsns;
-private:
- void cb_vsns_i(Fl_Value_Slider*, void*);
- static void cb_vsns(Fl_Value_Slider*, void*);
-public:
- WidgetPDial *pan;
-private:
- void cb_pan_i(WidgetPDial*, void*);
- static void cb_pan(WidgetPDial*, void*);
-public:
- WidgetPDial *pstr;
-private:
- void cb_pstr_i(WidgetPDial*, void*);
- static void cb_pstr(WidgetPDial*, void*);
-public:
- WidgetPDial *pt;
-private:
- void cb_pt_i(WidgetPDial*, void*);
- static void cb_pt(WidgetPDial*, void*);
-public:
- WidgetPDial *pstc;
-private:
- void cb_pstc_i(WidgetPDial*, void*);
- static void cb_pstc(WidgetPDial*, void*);
-public:
- WidgetPDial *pvel;
-private:
- void cb_pvel_i(WidgetPDial*, void*);
- static void cb_pvel(WidgetPDial*, void*);
-public:
- EnvelopeUI *ampenv;
- LFOUI *amplfo;
- Fl_Check_Button *stereo;
-private:
- void cb_stereo_i(Fl_Check_Button*, void*);
- static void cb_stereo(Fl_Check_Button*, void*);
-public:
- EnvelopeUI *filterenv;
- LFOUI *filterlfo;
- FilterUI *filterui;
- Fl_Button *applybutton;
-private:
- void cb_applybutton_i(Fl_Button*, void*);
- static void cb_applybutton(Fl_Button*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
- void cb_export_i(Fl_Button*, void*);
- static void cb_export(Fl_Button*, void*);
-public:
- void refresh();
- ~PADnoteUI();
- PADnoteParameters *pars;
- Master *master;
- OscilEditor *oscui;
- Oscilloscope *osc;
- ResonanceUI *resui;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/PartUI.cc b/plugins/zynaddsubfx/src/UI/PartUI.cc
deleted file mode 100644
index 37e11f8..0000000
--- a/plugins/zynaddsubfx/src/UI/PartUI.cc
+++ /dev/null
@@ -1,1880 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "PartUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-void PartSysEffSend::cb_01_i(WidgetPDial* o, void*) {
- master->setPsysefxvol(npart,neff,(int) o->value());
-}
-void PartSysEffSend::cb_01(WidgetPDial* o, void* v) {
- ((PartSysEffSend*)(o->parent()->user_data()))->cb_01_i(o,v);
-}
-
-Fl_Group* PartSysEffSend::make_window() {
- { syseffsend = new Fl_Group(0, 0, 90, 35);
- syseffsend->box(FL_FLAT_BOX);
- syseffsend->color(FL_BACKGROUND_COLOR);
- syseffsend->selection_color(FL_BACKGROUND_COLOR);
- syseffsend->labeltype(FL_NO_LABEL);
- syseffsend->labelfont(0);
- syseffsend->labelsize(14);
- syseffsend->labelcolor(FL_FOREGROUND_COLOR);
- syseffsend->user_data((void*)(this));
- syseffsend->align(Fl_Align(FL_ALIGN_TOP));
- syseffsend->when(FL_WHEN_RELEASE);
- { WidgetPDial* o = new WidgetPDial(0, 0, 25, 25, "01");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(1);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_01);
- o->align(Fl_Align(130));
- o->when(FL_WHEN_CHANGED);
- o->size(25,25);
- o->value(master->Psysefxvol[neff][npart]);
- char tmp[10];snprintf(tmp,10,"%d",neff+1);o->copy_label(tmp);
- } // WidgetPDial* o
- syseffsend->end();
- } // Fl_Group* syseffsend
- return syseffsend;
-}
-
-PartSysEffSend::PartSysEffSend(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- master=NULL;
- neff=0;
- npart=0;
-}
-
-void PartSysEffSend::init(Master *master_,int npart_,int neff_) {
- npart=npart_;
- neff=neff_;
- master=master_;
- make_window();
- syseffsend->show();
- end();
-}
-
-PartSysEffSend::~PartSysEffSend() {
- syseffsend->hide();
- //delete(syseffsend);
-}
-
-void PartUI_::showparameters(int kititem,int engine) {
-}
-
-void PartKitItem::cb_minkcounter_i(Fl_Counter* o, void*) {
- part->kit[n].Pminkey=(int)o->value();
-}
-void PartKitItem::cb_minkcounter(Fl_Counter* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_minkcounter_i(o,v);
-}
-
-void PartKitItem::cb_m_i(Fl_Button*, void*) {
- if (part->lastnote>=0) minkcounter->value(part->lastnote);
-minkcounter->do_callback();
-maxkcounter->do_callback();
-}
-void PartKitItem::cb_m(Fl_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_m_i(o,v);
-}
-
-void PartKitItem::cb_M_i(Fl_Button*, void*) {
- if (part->lastnote>=0) maxkcounter->value(part->lastnote);
-maxkcounter->do_callback();
-minkcounter->do_callback();
-}
-void PartKitItem::cb_M(Fl_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_M_i(o,v);
-}
-
-void PartKitItem::cb_R_i(Fl_Button*, void*) {
- minkcounter->value(0);
-minkcounter->do_callback();
-maxkcounter->value(127);
-maxkcounter->do_callback();
-}
-void PartKitItem::cb_R(Fl_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_R_i(o,v);
-}
-
-void PartKitItem::cb_adeditbutton_i(Fl_Button*, void*) {
- partui->showparameters(n,0);
-}
-void PartKitItem::cb_adeditbutton(Fl_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_adeditbutton_i(o,v);
-}
-
-void PartKitItem::cb_subeditbutton_i(Fl_Button*, void*) {
- partui->showparameters(n,1);
-}
-void PartKitItem::cb_subeditbutton(Fl_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_subeditbutton_i(o,v);
-}
-
-void PartKitItem::cb_mutedcheck_i(Fl_Check_Button* o, void*) {
- part->kit[n].Pmuted=(int)o->value();
-}
-void PartKitItem::cb_mutedcheck(Fl_Check_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_mutedcheck_i(o,v);
-}
-
-void PartKitItem::cb_maxkcounter_i(Fl_Counter* o, void*) {
- part->kit[n].Pmaxkey=(int)o->value();
-}
-void PartKitItem::cb_maxkcounter(Fl_Counter* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_maxkcounter_i(o,v);
-}
-
-void PartKitItem::cb_labelbutton_i(Fl_Button*, void*) {
- const char *tmp=fl_input("Kit item name:",(const char *)part->kit[n].Pname);
-if (tmp!=NULL) snprintf((char *)part->kit[n].Pname,PART_MAX_NAME_LEN,"%s",tmp);
-}
-void PartKitItem::cb_labelbutton(Fl_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_labelbutton_i(o,v);
-}
-
-void PartKitItem::cb_adcheck_i(Fl_Check_Button* o, void*) {
- part->kit[n].Padenabled=(int)o->value();
-if (part->kit[n].Padenabled!=0) adeditbutton->activate();
- else adeditbutton->deactivate();
-}
-void PartKitItem::cb_adcheck(Fl_Check_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_adcheck_i(o,v);
-}
-
-void PartKitItem::cb_subcheck_i(Fl_Check_Button* o, void*) {
- part->kit[n].Psubenabled=(int)o->value();
-if (part->kit[n].Psubenabled!=0) subeditbutton->activate();
- else subeditbutton->deactivate();
-}
-void PartKitItem::cb_subcheck(Fl_Check_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_subcheck_i(o,v);
-}
-
-void PartKitItem::cb_sendtoeffect_i(Fl_Choice* o, void*) {
- if (o->value()!=0) part->kit[n].Psendtoparteffect=(int)o->value()-1;
- else part->kit[n].Psendtoparteffect=127;
-}
-void PartKitItem::cb_sendtoeffect(Fl_Choice* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_sendtoeffect_i(o,v);
-}
-
-void PartKitItem::cb_padeditbutton_i(Fl_Button*, void*) {
- partui->showparameters(n,2);
-}
-void PartKitItem::cb_padeditbutton(Fl_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_padeditbutton_i(o,v);
-}
-
-void PartKitItem::cb_padcheck_i(Fl_Check_Button* o, void*) {
- part->kit[n].Ppadenabled=(int)o->value();
-if (part->kit[n].Ppadenabled!=0) padeditbutton->activate();
- else padeditbutton->deactivate();
-}
-void PartKitItem::cb_padcheck(Fl_Check_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->parent()->user_data()))->cb_padcheck_i(o,v);
-}
-
-void PartKitItem::cb_enabledcheck_i(Fl_Check_Button* o, void*) {
- int answer=1;
-if (o->value()==0) answer=fl_choice("Delete the item?","No","Yes",NULL);
-if (answer!=0){
-pthread_mutex_lock(&master->mutex);
- part->setkititemstatus(n,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-
-if (o->value()==0) partkititemgroup->deactivate();
-else partkititemgroup->activate();
-o->redraw();
-partui->showparameters(n,-1);//use to delete the ui, if it is not to item 0
-} else o->value(1);
-}
-void PartKitItem::cb_enabledcheck(Fl_Check_Button* o, void* v) {
- ((PartKitItem*)(o->parent()->user_data()))->cb_enabledcheck_i(o,v);
-}
-
-Fl_Group* PartKitItem::make_window() {
- { partkititem = new Fl_Group(0, 0, 670, 30);
- partkititem->box(FL_FLAT_BOX);
- partkititem->color(FL_BACKGROUND_COLOR);
- partkititem->selection_color(FL_BACKGROUND_COLOR);
- partkititem->labeltype(FL_NO_LABEL);
- partkititem->labelfont(0);
- partkititem->labelsize(14);
- partkititem->labelcolor(FL_FOREGROUND_COLOR);
- partkititem->user_data((void*)(this));
- partkititem->align(Fl_Align(FL_ALIGN_TOP));
- partkititem->when(FL_WHEN_RELEASE);
- { Fl_Group* o = partkititemgroup = new Fl_Group(55, 0, 605, 20);
- partkititemgroup->box(FL_FLAT_BOX);
- { Fl_Counter* o = minkcounter = new Fl_Counter(225, 0, 55, 15);
- minkcounter->type(1);
- minkcounter->minimum(0);
- minkcounter->maximum(128);
- minkcounter->step(1);
- minkcounter->callback((Fl_Callback*)cb_minkcounter);
- o->value(part->kit[n].Pminkey);
- } // Fl_Counter* minkcounter
- { Fl_Button* o = new Fl_Button(285, 3, 15, 12, "m");
- o->tooltip("set the minimum key to the last pressed key");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_m);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(315, 3, 15, 12, "M");
- o->tooltip("set the maximum key to the last pressed key");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_M);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(300, 3, 15, 12, "R");
- o->tooltip("reset the minimum key to 0 and maximum key to 127");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_R);
- } // Fl_Button* o
- { Fl_Button* o = adeditbutton = new Fl_Button(420, 0, 40, 15, "edit");
- adeditbutton->box(FL_THIN_UP_BOX);
- adeditbutton->labelsize(11);
- adeditbutton->callback((Fl_Callback*)cb_adeditbutton);
- if (part->kit[n].Padenabled==0) o->deactivate();
- if (n==0) o->hide();
- } // Fl_Button* adeditbutton
- { Fl_Button* o = subeditbutton = new Fl_Button(490, 0, 40, 15, "edit");
- subeditbutton->box(FL_THIN_UP_BOX);
- subeditbutton->labelsize(11);
- subeditbutton->callback((Fl_Callback*)cb_subeditbutton);
- if (part->kit[n].Psubenabled==0) o->deactivate();
- if (n==0) o->hide();
- } // Fl_Button* subeditbutton
- { Fl_Check_Button* o = mutedcheck = new Fl_Check_Button(60, 0, 20, 15);
- mutedcheck->down_box(FL_DOWN_BOX);
- mutedcheck->labelfont(1);
- mutedcheck->labelsize(11);
- mutedcheck->callback((Fl_Callback*)cb_mutedcheck);
- mutedcheck->align(Fl_Align(FL_ALIGN_LEFT));
- o->value(part->kit[n].Pmuted);
- } // Fl_Check_Button* mutedcheck
- { Fl_Counter* o = maxkcounter = new Fl_Counter(335, 0, 55, 15);
- maxkcounter->type(1);
- maxkcounter->minimum(0);
- maxkcounter->maximum(128);
- maxkcounter->step(1);
- maxkcounter->callback((Fl_Callback*)cb_maxkcounter);
- o->value(part->kit[n].Pmaxkey);
- } // Fl_Counter* maxkcounter
- { Fl_Button* o = labelbutton = new Fl_Button(90, 0, 130, 15, "Bass Drum");
- labelbutton->box(FL_THIN_DOWN_BOX);
- labelbutton->down_box(FL_FLAT_BOX);
- labelbutton->labelfont(1);
- labelbutton->labelsize(10);
- labelbutton->callback((Fl_Callback*)cb_labelbutton);
- labelbutton->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- o->label((char *)part->kit[n].Pname);
- } // Fl_Button* labelbutton
- { Fl_Check_Button* o = adcheck = new Fl_Check_Button(400, 0, 20, 15);
- adcheck->down_box(FL_DOWN_BOX);
- adcheck->labelfont(1);
- adcheck->labelsize(11);
- adcheck->callback((Fl_Callback*)cb_adcheck);
- adcheck->align(Fl_Align(FL_ALIGN_LEFT));
- o->value(part->kit[n].Padenabled);
- if (n==0) o->hide();
- } // Fl_Check_Button* adcheck
- { Fl_Check_Button* o = subcheck = new Fl_Check_Button(470, 0, 20, 15);
- subcheck->down_box(FL_DOWN_BOX);
- subcheck->labelfont(1);
- subcheck->labelsize(11);
- subcheck->callback((Fl_Callback*)cb_subcheck);
- subcheck->align(Fl_Align(FL_ALIGN_LEFT));
- o->value(part->kit[n].Psubenabled);
- if (n==0) o->hide();
- } // Fl_Check_Button* subcheck
- { Fl_Choice* o = sendtoeffect = new Fl_Choice(615, 0, 45, 15);
- sendtoeffect->down_box(FL_BORDER_BOX);
- sendtoeffect->labelsize(10);
- sendtoeffect->textfont(1);
- sendtoeffect->textsize(10);
- sendtoeffect->callback((Fl_Callback*)cb_sendtoeffect);
- sendtoeffect->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("OFF");char nrstr[10]; for(int i=0;i<NUM_PART_EFX;i++){sprintf(nrstr,"FX%d",i+1);o->add(nrstr);};
- o->value(part->kit[n].Psendtoparteffect+1);if (part->kit[n].Psendtoparteffect==127) o->value(0);
- } // Fl_Choice* sendtoeffect
- { Fl_Button* o = padeditbutton = new Fl_Button(560, 0, 40, 15, "edit");
- padeditbutton->box(FL_THIN_UP_BOX);
- padeditbutton->labelsize(11);
- padeditbutton->callback((Fl_Callback*)cb_padeditbutton);
- if (part->kit[n].Ppadenabled==0) o->deactivate();
- if (n==0) o->hide();
- } // Fl_Button* padeditbutton
- { Fl_Check_Button* o = padcheck = new Fl_Check_Button(540, 0, 20, 15);
- padcheck->down_box(FL_DOWN_BOX);
- padcheck->labelfont(1);
- padcheck->labelsize(11);
- padcheck->callback((Fl_Callback*)cb_padcheck);
- padcheck->align(Fl_Align(FL_ALIGN_LEFT));
- o->value(part->kit[n].Ppadenabled);
- if (n==0) o->hide();
- } // Fl_Check_Button* padcheck
- if (part->kit[n].Penabled==0) o->deactivate();
- partkititemgroup->end();
- } // Fl_Group* partkititemgroup
- { Fl_Check_Button* o = enabledcheck = new Fl_Check_Button(30, 0, 20, 15, "01");
- enabledcheck->down_box(FL_DOWN_BOX);
- enabledcheck->labeltype(FL_EMBOSSED_LABEL);
- enabledcheck->labelfont(1);
- enabledcheck->labelsize(13);
- enabledcheck->callback((Fl_Callback*)cb_enabledcheck);
- enabledcheck->align(Fl_Align(FL_ALIGN_LEFT));
- snprintf(label,10,"%d",n+1);o->label(label);
- o->value(part->kit[n].Penabled);
- if (n==0) o->deactivate();
- } // Fl_Check_Button* enabledcheck
- partkititem->end();
- } // Fl_Group* partkititem
- return partkititem;
-}
-
-PartKitItem::PartKitItem(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- n=0;
- part=NULL;
-}
-
-void PartKitItem::refresh() {
- enabledcheck->value(part->kit[n].Penabled);
- if (part->kit[n].Penabled==0) partkititemgroup->deactivate();
- else partkititemgroup->activate();
-
- mutedcheck->value(part->kit[n].Pmuted);
- labelbutton->label((char *)part->kit[n].Pname);
- minkcounter->value(part->kit[n].Pminkey);
- maxkcounter->value(part->kit[n].Pmaxkey);
- adcheck->value(part->kit[n].Padenabled);
- adcheck->do_callback();
- subcheck->value(part->kit[n].Psubenabled);
- subcheck->do_callback();
-
- sendtoeffect->value(part->kit[n].Psendtoparteffect+1);
- if (part->kit[n].Psendtoparteffect==127) sendtoeffect->value(0);
-
- this->redraw();
-}
-
-void PartKitItem::init(Part *part_,int n_,Master *master_,PartUI_ *partui_) {
- part=part_;
- n=n_;
- partui=partui_;
- master=master_;
- make_window();
- //partkititem->show();
- end();
-}
-
-PartKitItem::~PartKitItem() {
- partkititem->hide();
- //delete(partkititem);
-}
-
-void PartUI::cb_Pan_i(WidgetPDial* o, void*) {
- part->setPpanning((int) o->value());
-}
-void PartUI::cb_Pan(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Pan_i(o,v);
-}
-
-void PartUI::cb_KeyShift_i(Fl_Counter* o, void*) {
- part->Pkeyshift=(int) o->value()+64;
-}
-void PartUI::cb_KeyShift(Fl_Counter* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_KeyShift_i(o,v);
-}
-
-void PartUI::cb_Grand_i(Fl_Button*, void*) {
- int event=Fl::event_button();
-if (event==FL_RIGHT_MOUSE){
- const char *tmp=fl_input("Instrument name:",(const char *)part->Pname);
- if (tmp!=NULL) snprintf((char *)part->Pname,PART_MAX_NAME_LEN,"%s",tmp);
-} else {
- if (event==FL_LEFT_MOUSE) bankui->show();
- else instrumenteditwindow->show();
-};
-}
-void PartUI::cb_Grand(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Grand_i(o,v);
-}
-
-void PartUI::cb_NoteOn_i(Fl_Check_Button* o, void*) {
- part->Pnoteon=(int) o->value();
-}
-void PartUI::cb_NoteOn(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_NoteOn_i(o,v);
-}
-
-void PartUI::cb_minkcounter1_i(Fl_Counter* o, void*) {
- part->Pminkey=(int) o->value();
-if (part->Pminkey>part->Pmaxkey) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);
-}
-void PartUI::cb_minkcounter1(Fl_Counter* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_minkcounter1_i(o,v);
-}
-
-void PartUI::cb_maxkcounter1_i(Fl_Counter* o, void*) {
- part->Pmaxkey=(int) o->value();
-
-if (part->Pminkey>part->Pmaxkey) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);
-}
-void PartUI::cb_maxkcounter1(Fl_Counter* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_maxkcounter1_i(o,v);
-}
-
-void PartUI::cb_Volume_i(WidgetPDial* o, void*) {
- part->setPvolume((int) o->value());
-}
-void PartUI::cb_Volume(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Volume_i(o,v);
-}
-
-void PartUI::cb_Vel_i(WidgetPDial* o, void*) {
- part->Pveloffs=(int) o->value();
-}
-void PartUI::cb_Vel(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Vel_i(o,v);
-}
-
-void PartUI::cb_Vel1_i(WidgetPDial* o, void*) {
- part->Pvelsns=(int) o->value();
-}
-void PartUI::cb_Vel1(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Vel1_i(o,v);
-}
-
-void PartUI::cb_Controllers_i(Fl_Button*, void*) {
- ctlwindow->show();
-}
-void PartUI::cb_Controllers(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Controllers_i(o,v);
-}
-
-void PartUI::cb_Portamento_i(Fl_Check_Button* o, void*) {
- part->ctl.portamento.portamento=(int) o->value();
-}
-void PartUI::cb_Portamento(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Portamento_i(o,v);
-}
-
-void PartUI::cb_Edit_i(Fl_Button*, void*) {
- instrumenteditwindow->show();
-}
-void PartUI::cb_Edit(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Edit_i(o,v);
-}
-
-void PartUI::cb_m1_i(Fl_Button*, void*) {
- if (part->lastnote>=0) minkcounter->value(part->lastnote);
-minkcounter->do_callback();
-maxkcounter->do_callback();
-}
-void PartUI::cb_m1(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_m1_i(o,v);
-}
-
-void PartUI::cb_M1_i(Fl_Button*, void*) {
- if (part->lastnote>=0) maxkcounter->value(part->lastnote);
-maxkcounter->do_callback();
-minkcounter->do_callback();
-}
-void PartUI::cb_M1(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_M1_i(o,v);
-}
-
-void PartUI::cb_R1_i(Fl_Button*, void*) {
- minkcounter->value(0);
-minkcounter->do_callback();
-maxkcounter->value(127);
-maxkcounter->do_callback();
-}
-void PartUI::cb_R1(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_R1_i(o,v);
-}
-
-void PartUI::cb_MIDI_i(Fl_Choice* o, void*) {
- part->Prcvchn=(int) o->value();
-}
-void PartUI::cb_MIDI(Fl_Choice* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_MIDI_i(o,v);
-}
-
-void PartUI::cb_keylimitlist_i(Fl_Choice* o, void*) {
- int val=0;
-val=atoi(o->text());
-part->setkeylimit(val);
-}
-void PartUI::cb_keylimitlist(Fl_Choice* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_keylimitlist_i(o,v);
-}
-
-void PartUI::cb_Mode_i(Fl_Choice* o, void*) {
- if ((int) o->value()==0){ /* Poly (implies no legato) */
- part->Ppolymode=1;
- part->Plegatomode=0;
-} else {
- if ((int) o->value()==1){ /* Mono (implies no legato) */
- part->Ppolymode=0;
- part->Plegatomode=0;
- } else {
- if ((int) o->value()==2){ /* Legato (implies mono) */
- part->Ppolymode=0;
- part->Plegatomode=1;
- };
- };
-};
-}
-void PartUI::cb_Mode(Fl_Choice* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Mode_i(o,v);
-}
-
-void PartUI::cb_Enabled_i(Fl_Check_Button* o, void*) {
- pthread_mutex_lock(&master->mutex);
-master->partonoff(npart,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-if (part->Penabled==0) partgroupui->deactivate();
- else partgroupui->activate();
-}
-void PartUI::cb_Enabled(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Enabled_i(o,v);
-}
-
-void PartUI::cb_Expr_i(Fl_Check_Button* o, void*) {
- part->ctl.expression.receive=(int) o->value();
-}
-void PartUI::cb_Expr(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Expr_i(o,v);
-}
-
-void PartUI::cb_PanDpth_i(WidgetPDial* o, void*) {
- part->ctl.panning.depth=(int) o->value();
-}
-void PartUI::cb_PanDpth(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_PanDpth_i(o,v);
-}
-
-void PartUI::cb_FltCut_i(WidgetPDial* o, void*) {
- part->ctl.filtercutoff.depth=(int) o->value();
-}
-void PartUI::cb_FltCut(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_FltCut_i(o,v);
-}
-
-void PartUI::cb_FltQ_i(WidgetPDial* o, void*) {
- part->ctl.filterq.depth=(int) o->value();
-}
-void PartUI::cb_FltQ(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_FltQ_i(o,v);
-}
-
-void PartUI::cb_BwDpth_i(WidgetPDial* o, void*) {
- part->ctl.bandwidth.depth=(int) o->value();
-}
-void PartUI::cb_BwDpth(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_BwDpth_i(o,v);
-}
-
-void PartUI::cb_ModWh_i(WidgetPDial* o, void*) {
- part->ctl.modwheel.depth=(int) o->value();
-}
-void PartUI::cb_ModWh(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_ModWh_i(o,v);
-}
-
-void PartUI::cb_PWheelB_i(Fl_Counter* o, void*) {
- part->ctl.pitchwheel.bendrange=(int) o->value();
-}
-void PartUI::cb_PWheelB(Fl_Counter* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_PWheelB_i(o,v);
-}
-
-void PartUI::cb_FMamp_i(Fl_Check_Button* o, void*) {
- part->ctl.fmamp.receive=(int) o->value();
-}
-void PartUI::cb_FMamp(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_FMamp_i(o,v);
-}
-
-void PartUI::cb_Vol_i(Fl_Check_Button* o, void*) {
- part->ctl.volume.receive=(int) o->value();
-}
-void PartUI::cb_Vol(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Vol_i(o,v);
-}
-
-void PartUI::cb_Sustain_i(Fl_Check_Button* o, void*) {
- part->ctl.sustain.receive=(int) o->value();
-if (part->ctl.sustain.receive==0) {
- part->RelaseSustainedKeys();
- part->ctl.setsustain(0);
-};
-}
-void PartUI::cb_Sustain(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Sustain_i(o,v);
-}
-
-void PartUI::cb_Close_i(Fl_Button*, void*) {
- ctlwindow->hide();
-}
-void PartUI::cb_Close(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void PartUI::cb_Reset_i(Fl_Button*, void*) {
- part->SetController(C_resetallcontrollers,0);
-}
-void PartUI::cb_Reset(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Reset_i(o,v);
-}
-
-void PartUI::cb_Rcv_i(Fl_Check_Button* o, void*) {
- part->ctl.portamento.receive=(int) o->value();
-}
-void PartUI::cb_Rcv(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Rcv_i(o,v);
-}
-
-void PartUI::cb_time_i(WidgetPDial* o, void*) {
- part->ctl.portamento.time=(int) o->value();
-}
-void PartUI::cb_time(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_time_i(o,v);
-}
-
-void PartUI::cb_thresh_i(Fl_Counter* o, void*) {
- part->ctl.portamento.pitchthresh=(int) o->value();
-}
-void PartUI::cb_thresh(Fl_Counter* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_thresh_i(o,v);
-}
-
-void PartUI::cb_th_i(Fl_Check_Button* o, void*) {
- part->ctl.portamento.pitchthreshtype=(int) o->value();
-}
-void PartUI::cb_th(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_th_i(o,v);
-}
-
-void PartUI::cb_t_i(WidgetPDial* o, void*) {
- int x=(int) o->value();
-
-part->ctl.portamento.updowntimestretch=x;
-}
-void PartUI::cb_t(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_t_i(o,v);
-}
-
-void PartUI::cb_propta_i(WidgetPDial* o, void*) {
- part->ctl.portamento.propRate=(int) o->value();
-}
-void PartUI::cb_propta(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_propta_i(o,v);
-}
-
-void PartUI::cb_proptb_i(WidgetPDial* o, void*) {
- part->ctl.portamento.propDepth=(int) o->value();
-}
-void PartUI::cb_proptb(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_proptb_i(o,v);
-}
-
-void PartUI::cb_Proprt_i(Fl_Check_Button* o, void*) {
- part->ctl.portamento.proportional=(int) o->value();
-if(o->value()){propta->activate();proptb->activate();}
-else {propta->deactivate();proptb->deactivate();};
-}
-void PartUI::cb_Proprt(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Proprt_i(o,v);
-}
-
-void PartUI::cb_BWdpth_i(WidgetPDial* o, void*) {
- part->ctl.resonancebandwidth.depth=(int) o->value();
-}
-void PartUI::cb_BWdpth(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_BWdpth_i(o,v);
-}
-
-void PartUI::cb_CFdpth_i(WidgetPDial* o, void*) {
- part->ctl.resonancecenter.depth=(int) o->value();
-}
-void PartUI::cb_CFdpth(WidgetPDial* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_CFdpth_i(o,v);
-}
-
-void PartUI::cb_Exp_i(Fl_Check_Button* o, void*) {
- part->ctl.modwheel.exponential=(int) o->value();
-}
-void PartUI::cb_Exp(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Exp_i(o,v);
-}
-
-void PartUI::cb_Exp1_i(Fl_Check_Button* o, void*) {
- part->ctl.bandwidth.exponential=(int) o->value();
-}
-void PartUI::cb_Exp1(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Exp1_i(o,v);
-}
-
-void PartUI::cb_inseffnocounter_i(Fl_Counter* o, void*) {
- ninseff=(int) o->value()-1;
-insefftype->value(part->partefx[ninseff]->geteffect());
-//insefftype->do_callback();
-inseffectui->refresh(part->partefx[ninseff]);
-int x=part->Pefxroute[ninseff];
-if (x==127) x=1;
-bypasseff->value(part->Pefxbypass[ninseff]);
-
-sendtochoice->value(x);
-}
-void PartUI::cb_inseffnocounter(Fl_Counter* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_inseffnocounter_i(o,v);
-}
-
-void PartUI::cb_insefftype_i(Fl_Choice* o, void*) {
- pthread_mutex_lock(part->mutex);
-part->partefx[ninseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(part->mutex);
-inseffectui->refresh(part->partefx[ninseff]);
-}
-void PartUI::cb_insefftype(Fl_Choice* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_insefftype_i(o,v);
-}
-
-Fl_Menu_Item PartUI::menu_insefftype[] = {
- {"No Effect", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Reverb", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Echo", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Chorus", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Phaser", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"AlienWah", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Distortion", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"EQ", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"DynFilter", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PartUI::cb_Close1_i(Fl_Button*, void*) {
- partfx->hide();
-}
-void PartUI::cb_Close1(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Close1_i(o,v);
-}
-
-void PartUI::cb_sendtochoice_i(Fl_Choice* o, void*) {
- int x=(int) o->value();
-part->Pefxroute[ninseff]=x;
-if (x==2) part->partefx[ninseff]->setdryonly(true);
- else part->partefx[ninseff]->setdryonly(false);
-}
-void PartUI::cb_sendtochoice(Fl_Choice* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_sendtochoice_i(o,v);
-}
-
-Fl_Menu_Item PartUI::menu_sendtochoice[] = {
- {"Next Effect", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Part Out", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"Dry Out", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PartUI::cb_bypasseff_i(Fl_Check_Button* o, void*) {
- part->Pefxbypass[ninseff]=(((int)o->value())!=0);
-}
-void PartUI::cb_bypasseff(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_bypasseff_i(o,v);
-}
-
-void PartUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(part->partefx[ninseff]);
-}
-void PartUI::cb_C(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void PartUI::cb_P_i(Fl_Button*, void*) {
- pthread_mutex_lock(&master->mutex);
-presetsui->paste(part->partefx[ninseff],inseffectui);
-pthread_mutex_unlock(&master->mutex);
-}
-void PartUI::cb_P(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_P_i(o,v);
-}
-
-void PartUI::cb_Close2_i(Fl_Button*, void*) {
- instrumentkitlist->hide();
-}
-void PartUI::cb_Close2(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Close2_i(o,v);
-}
-
-void PartUI::cb_Mode1_i(Fl_Choice* o, void*) {
- part->Pkitmode=(int) o->value();
-if (part->Pkitmode==0) {
- kitlist->deactivate();
- } else {
- kitlist->activate();
-};
-}
-void PartUI::cb_Mode1(Fl_Choice* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Mode1_i(o,v);
-}
-
-Fl_Menu_Item PartUI::menu_Mode[] = {
- {"OFF", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"MULTI", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"SINGLE", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PartUI::cb_Drum_i(Fl_Check_Button* o, void*) {
- part->Pdrummode=(int) o->value();
-}
-void PartUI::cb_Drum(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Drum_i(o,v);
-}
-
-void PartUI::cb_padeditbutton1_i(Fl_Button*, void*) {
- showparameters(0,2);
-}
-void PartUI::cb_padeditbutton1(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->parent()->user_data()))->cb_padeditbutton1_i(o,v);
-}
-
-void PartUI::cb_padsynenabledcheck_i(Fl_Check_Button* o, void*) {
- int x=(int) o->value();
-part->kit[0].Ppadenabled=x;
-if (x==0) padeditbutton->deactivate();
- else padeditbutton->activate();
-}
-void PartUI::cb_padsynenabledcheck(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->parent()->user_data()))->cb_padsynenabledcheck_i(o,v);
-}
-
-void PartUI::cb_adsynenabledcheck_i(Fl_Check_Button* o, void*) {
- int x=(int) o->value();
-part->kit[0].Padenabled=x;
-if (x==0) adeditbutton->deactivate();
- else adeditbutton->activate();
-}
-void PartUI::cb_adsynenabledcheck(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->parent()->user_data()))->cb_adsynenabledcheck_i(o,v);
-}
-
-void PartUI::cb_adeditbutton1_i(Fl_Button*, void*) {
- showparameters(0,0);
-}
-void PartUI::cb_adeditbutton1(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->parent()->user_data()))->cb_adeditbutton1_i(o,v);
-}
-
-void PartUI::cb_subsynenabledcheck_i(Fl_Check_Button* o, void*) {
- int x=(int) o->value();
-part->kit[0].Psubenabled=x;
-if (x==0) subeditbutton->deactivate();
- else subeditbutton->activate();
-}
-void PartUI::cb_subsynenabledcheck(Fl_Check_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->parent()->user_data()))->cb_subsynenabledcheck_i(o,v);
-}
-
-void PartUI::cb_subeditbutton1_i(Fl_Button*, void*) {
- showparameters(0,1);
-}
-void PartUI::cb_subeditbutton1(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->parent()->user_data()))->cb_subeditbutton1_i(o,v);
-}
-
-void PartUI::cb_Kit_i(Fl_Button*, void*) {
- instrumentkitlist->show();
-}
-void PartUI::cb_Kit(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Kit_i(o,v);
-}
-
-void PartUI::cb_Effects_i(Fl_Button*, void*) {
- partfx->show();
-}
-void PartUI::cb_Effects(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Effects_i(o,v);
-}
-
-void PartUI::cb_Author_i(Fl_Input* o, void*) {
- snprintf((char *)part->info.Pauthor,MAX_INFO_TEXT_SIZE,"%s",o->value());
-}
-void PartUI::cb_Author(Fl_Input* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Author_i(o,v);
-}
-
-void PartUI::cb_Comments_i(Fl_Input* o, void*) {
- snprintf((char *)part->info.Pcomments,MAX_INFO_TEXT_SIZE,"%s",o->value());
-}
-void PartUI::cb_Comments(Fl_Input* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Comments_i(o,v);
-}
-
-void PartUI::cb_Type_i(Fl_Choice* o, void*) {
- part->info.Ptype=o->value();
-}
-void PartUI::cb_Type(Fl_Choice* o, void* v) {
- ((PartUI*)(o->parent()->parent()->user_data()))->cb_Type_i(o,v);
-}
-
-Fl_Menu_Item PartUI::menu_Type[] = {
- {"--------------------------", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Piano", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Chromatic Percussion", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Organ", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Guitar", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Bass", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Solo Strings", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Ensemble", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Brass", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Reed", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Pipe", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Synth Lead", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Synth Pad", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Synth Effects", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Ethnic", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Percussive", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Sound Effects", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void PartUI::cb_Close3_i(Fl_Button*, void*) {
- instrumenteditwindow->hide();
-}
-void PartUI::cb_Close3(Fl_Button* o, void* v) {
- ((PartUI*)(o->parent()->user_data()))->cb_Close3_i(o,v);
-}
-
-Fl_Group* PartUI::make_window() {
- { partgroup = new Fl_Group(0, 0, 385, 180);
- partgroup->box(FL_FLAT_BOX);
- partgroup->color(FL_BACKGROUND_COLOR);
- partgroup->selection_color(FL_BACKGROUND_COLOR);
- partgroup->labeltype(FL_NO_LABEL);
- partgroup->labelfont(0);
- partgroup->labelsize(14);
- partgroup->labelcolor(FL_FOREGROUND_COLOR);
- partgroup->user_data((void*)(this));
- partgroup->align(Fl_Align(FL_ALIGN_TOP));
- partgroup->when(FL_WHEN_RELEASE);
- { Fl_Group* o = partgroupui = new Fl_Group(0, 0, 385, 180);
- { WidgetPDial* o = new WidgetPDial(50, 40, 25, 25, "Pan");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(11);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Pan);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->Ppanning);
- } // WidgetPDial* o
- { Fl_Counter* o = new Fl_Counter(195, 45, 90, 20, "KeyShift");
- o->labelsize(11);
- o->minimum(-64);
- o->maximum(64);
- o->step(1);
- o->callback((Fl_Callback*)cb_KeyShift);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->lstep(12);
- o->value(part->Pkeyshift-64);
- } // Fl_Counter* o
- { Fl_Scroll* o = new Fl_Scroll(166, 91, 125, 60);
- o->box(FL_ENGRAVED_FRAME);
- o->labelfont(1);
- o->labelsize(10);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
- { Fl_Pack* o = new Fl_Pack(171, 96, 115, 35);
- o->type(1);
- o->spacing(5);
- for (int i=0;i<NUM_SYS_EFX;i++){psyef[i]=new PartSysEffSend(0,0,25,35,"");psyef[i]->init(master,npart,i);}
- o->end();
- } // Fl_Pack* o
- o->end();
- } // Fl_Scroll* o
- { Fl_Button* o = new Fl_Button(195, 5, 185, 20, "Grand Piano");
- o->tooltip("left mousebutton - to choose/save/.. from/to bank or right mousebutton to cha\
-nge the name or middle button to change the instrument information");
- o->box(FL_THIN_DOWN_BOX);
- o->down_box(FL_FLAT_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Grand);
- o->align(Fl_Align(68|FL_ALIGN_INSIDE));
- o->label((char *)part->Pname);
- } // Fl_Button* o
- { Fl_Box* o = new Fl_Box(166, 81, 95, 10, "To Sys.Efx.");
- o->labelfont(1);
- o->labelsize(10);
- } // Fl_Box* o
- { Fl_Check_Button* o = new Fl_Check_Button(10, 155, 65, 20, "NoteOn");
- o->tooltip("set if the part receives NoteOn messages");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_NoteOn);
- o->value(part->Pnoteon);
- } // Fl_Check_Button* o
- { Fl_Counter* o = minkcounter = new Fl_Counter(295, 125, 40, 15, "Min.k");
- minkcounter->tooltip("Minimum key (that the part receives NoteOn messages)");
- minkcounter->type(1);
- minkcounter->labelfont(1);
- minkcounter->labelsize(10);
- minkcounter->minimum(0);
- minkcounter->maximum(127);
- minkcounter->step(1);
- minkcounter->textsize(10);
- minkcounter->callback((Fl_Callback*)cb_minkcounter1);
- o->value(part->Pminkey);
- } // Fl_Counter* minkcounter
- { Fl_Counter* o = maxkcounter = new Fl_Counter(340, 125, 40, 15, "Max.k");
- maxkcounter->tooltip("Maximum key (that the part receives NoteOn messages)");
- maxkcounter->type(1);
- maxkcounter->labelfont(1);
- maxkcounter->labelsize(10);
- maxkcounter->minimum(0);
- maxkcounter->maximum(127);
- maxkcounter->step(1);
- maxkcounter->textsize(10);
- maxkcounter->callback((Fl_Callback*)cb_maxkcounter1);
- o->value(part->Pmaxkey);
- } // Fl_Counter* maxkcounter
- { WidgetPDial* o = new WidgetPDial(10, 35, 30, 30, "Volume");
- o->tooltip("Part Volume");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(11);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Volume);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->Pvolume);
- } // WidgetPDial* o
- { WidgetPDial* o = new WidgetPDial(135, 40, 25, 25, "Vel.Ofs.");
- o->tooltip("Velocity Offset");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Vel);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->Pveloffs);
- } // WidgetPDial* o
- { WidgetPDial* o = new WidgetPDial(95, 40, 25, 25, "Vel.Sns.");
- o->tooltip("Velocity Sensing Function");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Vel1);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->Pvelsns);
- } // WidgetPDial* o
- { Fl_Button* o = new Fl_Button(295, 90, 85, 30, "Controllers");
- o->box(FL_PLASTIC_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Controllers);
- } // Fl_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(95, 155, 88, 20, "Portamento");
- o->tooltip("Enable/Disable the portamento");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Portamento);
- o->value(part->ctl.portamento.portamento);
- } // Fl_Check_Button* o
- { Fl_Button* o = new Fl_Button(15, 90, 130, 30, "Edit instrument");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)230);
- o->labelfont(1);
- o->labelsize(13);
- o->callback((Fl_Callback*)cb_Edit);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(315, 155, 15, 12, "m");
- o->tooltip("set the minimum key to the last pressed key");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_m1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(345, 155, 15, 12, "M");
- o->tooltip("set the maximum key to the last pressed key");
- o->box(FL_THIN_UP_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_M1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(330, 155, 15, 12, "R");
- o->tooltip("reset the minimum key to 0 and maximum key to 127");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_R1);
- } // Fl_Button* o
- { Fl_Choice* o = new Fl_Choice(310, 45, 70, 20, "MIDI Chn.Rcv.");
- o->tooltip("receive from Midi channel");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_MIDI);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Chn%d",i+1);if (i!=9) o->add(nrstr); else o->add("Drms10");};
- o->value(part->Prcvchn);
- } // Fl_Choice* o
- { keylimitlist = new Fl_Choice(215, 155, 50, 20, "KLmt");
- keylimitlist->tooltip("Key Limit");
- keylimitlist->down_box(FL_BORDER_BOX);
- keylimitlist->labelsize(10);
- keylimitlist->textfont(1);
- keylimitlist->textsize(10);
- keylimitlist->callback((Fl_Callback*)cb_keylimitlist);
- keylimitlist->align(Fl_Align(FL_ALIGN_RIGHT));
- } // Fl_Choice* keylimitlist
- { Fl_Choice* o = new Fl_Choice(80, 130, 64, 18, "Mode :");
- o->tooltip("Poly, Mono or Legato mode");
- o->down_box(FL_BORDER_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Mode);
- o->add("Poly"); o->add("Mono"); o->add("Legato");
- if (part->Ppolymode!=0) o->value(0); else o->value(1);
- if (part->Ppolymode==0 && part->Plegatomode!=0) o->value(2);
- } // Fl_Choice* o
- if (part->Penabled==0) o->deactivate();
- partgroupui->end();
- } // Fl_Group* partgroupui
- { Fl_Check_Button* o = new Fl_Check_Button(90, 5, 75, 20, "Enabled");
- o->down_box(FL_DOWN_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Enabled);
- o->value(part->Penabled);
- } // Fl_Check_Button* o
- partgroup->end();
- } // Fl_Group* partgroup
- { ctlwindow = new Fl_Double_Window(500, 130, "Controllers");
- ctlwindow->user_data((void*)(this));
- { Fl_Check_Button* o = new Fl_Check_Button(155, 55, 45, 20, "Expr");
- o->tooltip("Expression enable");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Expr);
- o->value(part->ctl.expression.receive);
- } // Fl_Check_Button* o
- { WidgetPDial* o = new WidgetPDial(10, 55, 30, 30, "PanDpth");
- o->tooltip("Panning Depth");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_PanDpth);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.panning.depth);
- } // WidgetPDial* o
- { WidgetPDial* o = new WidgetPDial(90, 55, 30, 30, "FltCut");
- o->tooltip("Filter Cutoff depth");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_FltCut);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.filtercutoff.depth);
- } // WidgetPDial* o
- { WidgetPDial* o = new WidgetPDial(50, 55, 30, 30, "FltQ");
- o->tooltip("Filter Q depth");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_FltQ);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.filterq.depth);
- } // WidgetPDial* o
- { WidgetPDial* o = new WidgetPDial(125, 10, 30, 30, "BwDpth");
- o->tooltip("BandWidth depth");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_BwDpth);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.bandwidth.depth);
- } // WidgetPDial* o
- { WidgetPDial* o = new WidgetPDial(50, 10, 30, 30, "ModWh");
- o->tooltip("Modulation Wheel depth");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_ModWh);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.modwheel.depth);
- } // WidgetPDial* o
- { Fl_Counter* o = new Fl_Counter(165, 15, 110, 20, "PWheelB.Rng (cents)");
- o->tooltip("Pitch Wheel Bend Range (cents)");
- o->labelsize(10);
- o->minimum(-6400);
- o->maximum(6400);
- o->step(1);
- o->callback((Fl_Callback*)cb_PWheelB);
- o->align(Fl_Align(FL_ALIGN_TOP));
- o->value(part->ctl.pitchwheel.bendrange);
- o->lstep(100);
- } // Fl_Counter* o
- { Fl_Check_Button* o = new Fl_Check_Button(205, 55, 60, 20, "FMamp");
- o->tooltip("FM amplitude enable");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_FMamp);
- o->value(part->ctl.fmamp.receive);
- } // Fl_Check_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(155, 80, 45, 20, "Vol");
- o->tooltip("Volume enable");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Vol);
- o->value(part->ctl.volume.receive);
- } // Fl_Check_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(205, 80, 60, 20, "Sustain");
- o->tooltip("Sustain pedal enable");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Sustain);
- o->value(part->ctl.sustain.receive);
- } // Fl_Check_Button* o
- { Fl_Button* o = new Fl_Button(330, 105, 95, 20, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(5, 105, 210, 20, "Reset all controllers");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Reset);
- } // Fl_Button* o
- { Fl_Group* o = new Fl_Group(280, 15, 160, 90, "Portamento");
- o->box(FL_ENGRAVED_FRAME);
- o->labelfont(1);
- o->labelsize(10);
- { Fl_Check_Button* o = new Fl_Check_Button(285, 20, 40, 20, "Rcv");
- o->tooltip("Receive Portamento Controllers");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Rcv);
- o->value(part->ctl.portamento.receive);
- } // Fl_Check_Button* o
- { WidgetPDial* o = new WidgetPDial(285, 60, 25, 25, "time");
- o->tooltip("Portamento time");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_time);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.portamento.time);
- } // WidgetPDial* o
- { Fl_Counter* o = new Fl_Counter(340, 20, 50, 20, "thresh");
- o->tooltip("Minimum or max. difference of the notes in order to do the portamento (x 100 \
-cents)");
- o->type(1);
- o->labelsize(10);
- o->minimum(0);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_thresh);
- o->value(part->ctl.portamento.pitchthresh);
- } // Fl_Counter* o
- { Fl_Check_Button* o = new Fl_Check_Button(365, 70, 15, 15, "th.type");
- o->tooltip("Threshold type (min/max)");
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_th);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->value(part->ctl.portamento.pitchthreshtype);
- } // Fl_Check_Button* o
- { Fl_Box* o = new Fl_Box(340, 50, 55, 15, "x100 cnt.");
- o->labelsize(10);
- o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { WidgetPDial* o = new WidgetPDial(315, 60, 25, 25, "t.dn/up");
- o->tooltip("Portamento time stretch (up/down)");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_t);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.portamento.updowntimestretch);
- } // WidgetPDial* o
- { WidgetPDial* o = propta = new WidgetPDial(405, 20, 25, 25, "Prp.Rate");
- propta->tooltip("Distance required to double change from nonpropotinal portamento time");
- propta->box(FL_OVAL_BOX);
- propta->color(FL_BACKGROUND_COLOR);
- propta->selection_color(FL_INACTIVE_COLOR);
- propta->labeltype(FL_NORMAL_LABEL);
- propta->labelfont(0);
- propta->labelsize(9);
- propta->labelcolor(FL_FOREGROUND_COLOR);
- propta->maximum(127);
- propta->step(1);
- propta->callback((Fl_Callback*)cb_propta);
- propta->align(Fl_Align(FL_ALIGN_BOTTOM));
- propta->when(FL_WHEN_CHANGED);
- o->value(part->ctl.portamento.propRate);
- } // WidgetPDial* propta
- { WidgetPDial* o = proptb = new WidgetPDial(405, 60, 25, 25, "Prp.Dpth");
- proptb->tooltip("The difference from nonproportinal portamento");
- proptb->box(FL_OVAL_BOX);
- proptb->color(FL_BACKGROUND_COLOR);
- proptb->selection_color(FL_INACTIVE_COLOR);
- proptb->labeltype(FL_NORMAL_LABEL);
- proptb->labelfont(0);
- proptb->labelsize(9);
- proptb->labelcolor(FL_FOREGROUND_COLOR);
- proptb->maximum(127);
- proptb->step(1);
- proptb->callback((Fl_Callback*)cb_proptb);
- proptb->align(Fl_Align(FL_ALIGN_BOTTOM));
- proptb->when(FL_WHEN_CHANGED);
- o->value(part->ctl.portamento.propDepth);
- } // WidgetPDial* proptb
- { Fl_Check_Button* o = new Fl_Check_Button(285, 40, 50, 15, "Proprt.");
- o->tooltip("Enable Proportinal Portamento (over fixed Portamento)");
- o->box(FL_THIN_UP_BOX);
- o->down_box(FL_DOWN_BOX);
- o->labelsize(9);
- o->callback((Fl_Callback*)cb_Proprt);
- o->value(part->ctl.portamento.proportional);
- if(o->value()){propta->activate();proptb->activate();}
- else {propta->deactivate();proptb->deactivate();}
- } // Fl_Check_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(440, 15, 50, 90, "Resonance");
- o->box(FL_ENGRAVED_BOX);
- o->labelfont(1);
- o->labelsize(10);
- { WidgetPDial* o = new WidgetPDial(450, 60, 25, 25, "BWdpth");
- o->tooltip("BandWidth controller depth");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_BWdpth);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.resonancebandwidth.depth);
- } // WidgetPDial* o
- { WidgetPDial* o = new WidgetPDial(450, 20, 25, 25, "CFdpth");
- o->tooltip("Center Frequency controller Depth");
- o->box(FL_OVAL_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_CFdpth);
- o->align(Fl_Align(FL_ALIGN_BOTTOM));
- o->when(FL_WHEN_CHANGED);
- o->value(part->ctl.resonancecenter.depth);
- } // WidgetPDial* o
- o->end();
- } // Fl_Group* o
- { Fl_Check_Button* o = new Fl_Check_Button(10, 15, 40, 25, "Exp MWh");
- o->tooltip("Exponential modulation wheel");
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Exp);
- o->align(Fl_Align(132|FL_ALIGN_INSIDE));
- o->value(part->ctl.modwheel.exponential);
- } // Fl_Check_Button* o
- { Fl_Check_Button* o = new Fl_Check_Button(85, 15, 35, 25, "Exp BW");
- o->tooltip("Exponential BandWidth Controller");
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Exp1);
- o->align(Fl_Align(132|FL_ALIGN_INSIDE));
- o->value(part->ctl.bandwidth.exponential);
- } // Fl_Check_Button* o
- ctlwindow->end();
- } // Fl_Double_Window* ctlwindow
- { partfx = new Fl_Double_Window(390, 145, "Part\'s Insert Effects");
- partfx->user_data((void*)(this));
- { Fl_Counter* o = inseffnocounter = new Fl_Counter(5, 110, 80, 20, "FX No.");
- inseffnocounter->type(1);
- inseffnocounter->labelfont(1);
- inseffnocounter->minimum(1);
- inseffnocounter->maximum(127);
- inseffnocounter->step(1);
- inseffnocounter->textfont(1);
- inseffnocounter->callback((Fl_Callback*)cb_inseffnocounter);
- inseffnocounter->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- o->bounds(1,NUM_PART_EFX);
- o->value(ninseff+1);
- } // Fl_Counter* inseffnocounter
- { Fl_Choice* o = insefftype = new Fl_Choice(155, 110, 70, 15, "EffType");
- insefftype->down_box(FL_BORDER_BOX);
- insefftype->labelsize(10);
- insefftype->callback((Fl_Callback*)cb_insefftype);
- insefftype->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- insefftype->menu(menu_insefftype);
- o->value(part->partefx[ninseff]->geteffect());
- } // Fl_Choice* insefftype
- { inseffectuigroup = new Fl_Group(5, 5, 380, 100);
- inseffectuigroup->box(FL_FLAT_BOX);
- inseffectuigroup->color((Fl_Color)48);
- { EffUI* o = inseffectui = new EffUI(5, 5, 380, 95);
- inseffectui->box(FL_NO_BOX);
- inseffectui->color(FL_BACKGROUND_COLOR);
- inseffectui->selection_color(FL_BACKGROUND_COLOR);
- inseffectui->labeltype(FL_NORMAL_LABEL);
- inseffectui->labelfont(0);
- inseffectui->labelsize(14);
- inseffectui->labelcolor(FL_FOREGROUND_COLOR);
- inseffectui->align(Fl_Align(FL_ALIGN_TOP));
- inseffectui->when(FL_WHEN_RELEASE);
- o->init(part->partefx[ninseff]);
- inseffectui->end();
- } // EffUI* inseffectui
- inseffectuigroup->end();
- } // Fl_Group* inseffectuigroup
- { Fl_Button* o = new Fl_Button(325, 115, 60, 20, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close1);
- } // Fl_Button* o
- { Fl_Choice* o = sendtochoice = new Fl_Choice(235, 110, 80, 15, "Send To.");
- sendtochoice->down_box(FL_BORDER_BOX);
- sendtochoice->labelsize(10);
- sendtochoice->callback((Fl_Callback*)cb_sendtochoice);
- sendtochoice->align(Fl_Align(FL_ALIGN_BOTTOM_LEFT));
- sendtochoice->menu(menu_sendtochoice);
- int x=part->Pefxroute[ninseff]; if (x==127) x=1;
- o->value(x);
- } // Fl_Choice* sendtochoice
- { Fl_Check_Button* o = bypasseff = new Fl_Check_Button(90, 110, 60, 15, "bypass");
- bypasseff->tooltip("if the effect is not used (is bypassed)");
- bypasseff->down_box(FL_DOWN_BOX);
- bypasseff->labelsize(11);
- bypasseff->callback((Fl_Callback*)cb_bypasseff);
- int x=part->Pefxbypass[ninseff];o->value(x);
- } // Fl_Check_Button* bypasseff
- { Fl_Button* o = new Fl_Button(90, 127, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(120, 127, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- partfx->end();
- } // Fl_Double_Window* partfx
- { instrumentkitlist = new Fl_Double_Window(670, 370, "Instrument Kit");
- instrumentkitlist->user_data((void*)(this));
- { Fl_Button* o = new Fl_Button(375, 350, 160, 20, "Close Window");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close2);
- } // Fl_Button* o
- { Fl_Scroll* o = kitlist = new Fl_Scroll(0, 15, 670, 330);
- kitlist->type(2);
- kitlist->box(FL_THIN_UP_BOX);
- { Fl_Pack* o = new Fl_Pack(0, 20, 670, 320);
- for (int i=0;i<NUM_KIT_ITEMS;i++){partkititem[i]=new PartKitItem(0,0,670,20,"");partkititem[i]->init(part,i,master,this);}
- o->end();
- } // Fl_Pack* o
- if (part->Pkitmode==0) o->deactivate();
- kitlist->end();
- } // Fl_Scroll* kitlist
- { Fl_Box* o = new Fl_Box(5, 0, 25, 15, "No.");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(55, 0, 25, 15, "M.");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(235, 0, 40, 15, "Min.k");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(345, 0, 40, 15, "Max.k");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(405, 0, 50, 15, "ADsynth");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(470, 0, 60, 15, "SUBsynth");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Choice* o = new Fl_Choice(35, 350, 70, 15, "Mode");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(11);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Mode1);
- o->menu(menu_Mode);
- o->value(part->Pkitmode);
- } // Fl_Choice* o
- { Fl_Check_Button* o = new Fl_Check_Button(285, 350, 70, 15, "Drum mode");
- o->down_box(FL_DOWN_BOX);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Drum);
- o->value(part->Pdrummode);
- } // Fl_Check_Button* o
- { Fl_Box* o = new Fl_Box(620, 0, 30, 15, "FX.r.");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(540, 0, 60, 15, "PADsynth");
- o->labelfont(1);
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- instrumentkitlist->end();
- } // Fl_Double_Window* instrumentkitlist
- { instrumenteditwindow = new Fl_Double_Window(395, 360, "Instrument Edit");
- instrumenteditwindow->user_data((void*)(this));
- { Fl_Group* o = new Fl_Group(0, 220, 395, 110);
- o->box(FL_ENGRAVED_FRAME);
- { Fl_Group* o = new Fl_Group(205, 245, 100, 80, "PADsynth");
- o->box(FL_ENGRAVED_FRAME);
- o->labelfont(1);
- { Fl_Button* o = padeditbutton = new Fl_Button(215, 280, 80, 35, "Edit");
- padeditbutton->box(FL_PLASTIC_UP_BOX);
- padeditbutton->color((Fl_Color)222);
- padeditbutton->selection_color((Fl_Color)220);
- padeditbutton->labelfont(1);
- padeditbutton->labelsize(13);
- padeditbutton->callback((Fl_Callback*)cb_padeditbutton1);
- padeditbutton->align(Fl_Align(FL_ALIGN_WRAP));
- if (part->kit[0].Ppadenabled==0) o->deactivate();
- } // Fl_Button* padeditbutton
- { Fl_Check_Button* o = padsynenabledcheck = new Fl_Check_Button(215, 255, 80, 20, "Enabled");
- padsynenabledcheck->tooltip("enable/disable PADsynth");
- padsynenabledcheck->box(FL_PLASTIC_UP_BOX);
- padsynenabledcheck->down_box(FL_DOWN_BOX);
- padsynenabledcheck->color((Fl_Color)222);
- padsynenabledcheck->selection_color((Fl_Color)218);
- padsynenabledcheck->labelfont(1);
- padsynenabledcheck->labelsize(11);
- padsynenabledcheck->callback((Fl_Callback*)cb_padsynenabledcheck);
- o->value(part->kit[0].Ppadenabled);
- } // Fl_Check_Button* padsynenabledcheck
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(5, 245, 100, 80, "ADDsynth");
- o->box(FL_ENGRAVED_FRAME);
- o->labelfont(1);
- { Fl_Check_Button* o = adsynenabledcheck = new Fl_Check_Button(15, 255, 80, 20, "Enabled");
- adsynenabledcheck->tooltip("enable/disable ADsynth");
- adsynenabledcheck->box(FL_PLASTIC_UP_BOX);
- adsynenabledcheck->down_box(FL_DOWN_BOX);
- adsynenabledcheck->color((Fl_Color)222);
- adsynenabledcheck->selection_color((Fl_Color)218);
- adsynenabledcheck->labelfont(1);
- adsynenabledcheck->labelsize(11);
- adsynenabledcheck->callback((Fl_Callback*)cb_adsynenabledcheck);
- o->value(part->kit[0].Padenabled);
- } // Fl_Check_Button* adsynenabledcheck
- { Fl_Button* o = adeditbutton = new Fl_Button(15, 281, 80, 34, "Edit");
- adeditbutton->box(FL_PLASTIC_UP_BOX);
- adeditbutton->color((Fl_Color)222);
- adeditbutton->selection_color((Fl_Color)220);
- adeditbutton->labelfont(1);
- adeditbutton->labelsize(13);
- adeditbutton->callback((Fl_Callback*)cb_adeditbutton1);
- adeditbutton->align(Fl_Align(FL_ALIGN_WRAP));
- if (part->kit[0].Padenabled==0) o->deactivate();
- } // Fl_Button* adeditbutton
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(105, 245, 100, 80, "SUBsynth");
- o->box(FL_ENGRAVED_FRAME);
- o->labelfont(1);
- { Fl_Check_Button* o = subsynenabledcheck = new Fl_Check_Button(115, 255, 80, 20, "Enabled");
- subsynenabledcheck->tooltip("enable/disable SUBsynth");
- subsynenabledcheck->box(FL_PLASTIC_UP_BOX);
- subsynenabledcheck->down_box(FL_DOWN_BOX);
- subsynenabledcheck->color((Fl_Color)222);
- subsynenabledcheck->selection_color((Fl_Color)218);
- subsynenabledcheck->labelfont(1);
- subsynenabledcheck->labelsize(11);
- subsynenabledcheck->callback((Fl_Callback*)cb_subsynenabledcheck);
- o->value(part->kit[0].Psubenabled);
- } // Fl_Check_Button* subsynenabledcheck
- { Fl_Button* o = subeditbutton = new Fl_Button(115, 280, 80, 35, "Edit");
- subeditbutton->box(FL_PLASTIC_UP_BOX);
- subeditbutton->color((Fl_Color)222);
- subeditbutton->selection_color((Fl_Color)220);
- subeditbutton->labelfont(1);
- subeditbutton->labelsize(13);
- subeditbutton->callback((Fl_Callback*)cb_subeditbutton1);
- subeditbutton->align(Fl_Align(FL_ALIGN_WRAP));
- if (part->kit[0].Psubenabled==0) o->deactivate();
- } // Fl_Button* subeditbutton
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(310, 245, 80, 35, "Kit Edit");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)238);
- o->selection_color((Fl_Color)220);
- o->labelfont(1);
- o->callback((Fl_Callback*)cb_Kit);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(310, 290, 80, 35, "Effects");
- o->box(FL_PLASTIC_UP_BOX);
- o->color((Fl_Color)230);
- o->labelfont(1);
- o->labelsize(13);
- o->callback((Fl_Callback*)cb_Effects);
- } // Fl_Button* o
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(0, 5, 395, 215);
- o->box(FL_ENGRAVED_FRAME);
- { Fl_Input* o = new Fl_Input(5, 60, 385, 50, "Author and Copyright");
- o->type(4);
- o->color((Fl_Color)26);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_Author);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->maximum_size(MAX_INFO_TEXT_SIZE);
- o->value((char *) &part->info.Pauthor);
- } // Fl_Input* o
- { Fl_Input* o = new Fl_Input(5, 125, 385, 90, "Comments");
- o->type(4);
- o->color((Fl_Color)26);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Comments);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->maximum_size(MAX_INFO_TEXT_SIZE);
- o->value((char *) &part->info.Pcomments);
- } // Fl_Input* o
- { Fl_Choice* o = new Fl_Choice(5, 25, 155, 20, "Type:");
- o->down_box(FL_BORDER_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Type);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->menu(menu_Type);
- o->value(part->info.Ptype);
- } // Fl_Choice* o
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(150, 335, 95, 25, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close3);
- } // Fl_Button* o
- instrumenteditwindow->end();
- } // Fl_Double_Window* instrumenteditwindow
- return instrumenteditwindow;
-}
-
-PartUI::PartUI(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- part=NULL;
- adnoteui=NULL;
- subnoteui=NULL;
- padnoteui=NULL;
- lastkititem=-1;
-}
-
-void PartUI::init(Part *part_,Master *master_,int npart_,BankUI *bankui_) {
- bankui=bankui_;
- part=part_;
- npart=npart_;
- master=master_;
- ninseff=0;
-
- make_window();
- partgroup->position(this->parent()->x()+2,this->parent()->y()+2);
- partgroup->show();
- end();
-
-
- //if (config.ui.showinstrumentinfo!=0) instrumenteditwindow->show();
-
- int klimits[]={1,2,3,4,5,6,7,8,9,10,15,20,30,50,100,0};
-
- keylimitlist->add("OFF");
- int k=0;
- int val=-1;
- char tmp[10];
- while (klimits[k]!=0){
- sprintf(tmp,"%d",klimits[k]);
- keylimitlist->add(tmp);
- if (val==-1){
- if (klimits[k]>part->Pkeylimit) val=k;
- };
- k++;
- };
-
- if (val==-1) val=k;
- keylimitlist->value(val);
-}
-
-void PartUI::showparameters(int kititem,int engine) {
- if (engine==-1){//this is used if I want to clear the engine from the part
- if (kititem==lastkititem) kititem=-1;
- else kititem=lastkititem;
- };
-
- if (kititem!=lastkititem){
- if (adnoteui!=NULL) delete (adnoteui);
- if (subnoteui!=NULL) delete (subnoteui);
- if (padnoteui!=NULL) delete (padnoteui);
- adnoteui=NULL;subnoteui=NULL;padnoteui=NULL;
- lastkititem=kititem;
-
- if (kititem>=NUM_KIT_ITEMS) return;//bad kit item
- if (kititem<0) return;
-
- if (part->kit[kititem].adpars!=NULL)
- adnoteui=new ADnoteUI(part->kit[kititem].adpars,master);
-
- if (part->kit[kititem].subpars!=NULL)
- subnoteui=new SUBnoteUI(part->kit[kititem].subpars);
-
- if (part->kit[kititem].padpars!=NULL)
- padnoteui=new PADnoteUI(part->kit[kititem].padpars,master);
-
- };
-
-
-
- if ((engine==0)&&(adnoteui!=NULL)) adnoteui->ADnoteGlobalParameters->show();
- if ((engine==1)&&(subnoteui!=NULL)) subnoteui->SUBparameters->show();
- if ((engine==2)&&(adnoteui!=NULL)) padnoteui->padnotewindow->show();
-}
-
-PartUI::~PartUI() {
- if (adnoteui!=NULL) delete (adnoteui);
- if (subnoteui!=NULL) delete (subnoteui);
- if (padnoteui!=NULL) delete (padnoteui);
-
- partgroup->hide();
- //delete(partgroup);
-
- ctlwindow->hide();
- delete(ctlwindow);
-
- partfx->hide();
- delete(partfx);
-
- instrumentkitlist->hide();
- delete(instrumentkitlist);
-
- instrumenteditwindow->hide();
- delete(instrumenteditwindow);
-}
diff --git a/plugins/zynaddsubfx/src/UI/PartUI.fl b/plugins/zynaddsubfx/src/UI/PartUI.fl
deleted file mode 100644
index fc8dcd5..0000000
--- a/plugins/zynaddsubfx/src/UI/PartUI.fl
+++ /dev/null
@@ -1,1125 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0107
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <string.h>} {public
-}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include "EffUI.h"} {public
-}
-
-decl {\#include "BankUI.h"} {public
-}
-
-decl {\#include "ADnoteUI.h"} {public
-}
-
-decl {\#include "SUBnoteUI.h"} {public
-}
-
-decl {\#include "PADnoteUI.h"} {public
-}
-
-decl {\#include "../Misc/Config.h"} {public
-}
-
-decl {\#include "../Misc/Master.h"} {public
-}
-
-decl {\#include "../Misc/Part.h"} {public
-}
-
-class PartSysEffSend {: {public Fl_Group}
-} {
- Function {make_window()} {private
- } {
- Fl_Window syseffsend {
- private xywh {584 83 90 35} type Double hide
- class Fl_Group
- } {
- Fl_Dial {} {
- label 01
- callback {master->setPsysefxvol(npart,neff,(int) o->value());}
- xywh {0 0 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 130 maximum 127 step 1
- code0 {o->size(25,25);}
- code1 {o->value(master->Psysefxvol[neff][npart]);}
- code2 {char tmp[10];snprintf(tmp,10,"%d",neff+1);o->copy_label(tmp);}
- class WidgetPDial
- }
- }
- }
- Function {PartSysEffSend(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {master=NULL;
-neff=0;
-npart=0;} {}
- }
- Function {init(Master *master_,int npart_,int neff_)} {} {
- code {npart=npart_;
-neff=neff_;
-master=master_;
-make_window();
-syseffsend->show();
-end();} {}
- }
- Function {~PartSysEffSend()} {} {
- code {syseffsend->hide();
-//delete(syseffsend);} {}
- }
- decl {Master *master;} {}
- decl {int neff;} {}
- decl {int npart;} {}
-}
-
-class PartUI_ {} {
- Function {showparameters(int kititem,int engine)} {return_type virtual
- } {}
-}
-
-class PartKitItem {: {public Fl_Group}
-} {
- Function {make_window()} {private
- } {
- Fl_Window partkititem {
- private xywh {113 271 670 30} type Double hide
- class Fl_Group
- } {
- Fl_Group partkititemgroup {
- private xywh {55 0 605 20} box FLAT_BOX
- code0 {if (part->kit[n].Penabled==0) o->deactivate();}
- } {
- Fl_Counter minkcounter {
- callback {part->kit[n].Pminkey=(int)o->value();}
- xywh {225 0 55 15} type Simple minimum 0 maximum 128 step 1
- code0 {o->value(part->kit[n].Pminkey);}
- }
- Fl_Button {} {
- label m
- callback {if (part->lastnote>=0) minkcounter->value(part->lastnote);
-minkcounter->do_callback();
-maxkcounter->do_callback();}
- tooltip {set the minimum key to the last pressed key} xywh {285 3 15 12} box THIN_UP_BOX labelsize 10
- }
- Fl_Button {} {
- label M
- callback {if (part->lastnote>=0) maxkcounter->value(part->lastnote);
-maxkcounter->do_callback();
-minkcounter->do_callback();}
- tooltip {set the maximum key to the last pressed key} xywh {315 3 15 12} box THIN_UP_BOX labelsize 10
- }
- Fl_Button {} {
- label R
- callback {minkcounter->value(0);
-minkcounter->do_callback();
-maxkcounter->value(127);
-maxkcounter->do_callback();}
- tooltip {reset the minimum key to 0 and maximum key to 127} xywh {300 3 15 12} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Button adeditbutton {
- label edit
- callback {partui->showparameters(n,0);}
- xywh {420 0 40 15} box THIN_UP_BOX labelsize 11
- code0 {if (part->kit[n].Padenabled==0) o->deactivate();}
- code1 {if (n==0) o->hide();}
- }
- Fl_Button subeditbutton {
- label edit
- callback {partui->showparameters(n,1);}
- xywh {490 0 40 15} box THIN_UP_BOX labelsize 11
- code0 {if (part->kit[n].Psubenabled==0) o->deactivate();}
- code1 {if (n==0) o->hide();}
- }
- Fl_Check_Button mutedcheck {
- callback {part->kit[n].Pmuted=(int)o->value();}
- private xywh {60 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4
- code0 {o->value(part->kit[n].Pmuted);}
- }
- Fl_Counter maxkcounter {
- callback {part->kit[n].Pmaxkey=(int)o->value();}
- xywh {335 0 55 15} type Simple minimum 0 maximum 128 step 1
- code0 {o->value(part->kit[n].Pmaxkey);}
- }
- Fl_Button labelbutton {
- label {Bass Drum}
- callback {const char *tmp=fl_input("Kit item name:",(const char *)part->kit[n].Pname);
-if (tmp!=NULL) snprintf((char *)part->kit[n].Pname,PART_MAX_NAME_LEN,"%s",tmp);}
- xywh {90 0 130 15} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 10 align 20
- code0 {o->label((char *)part->kit[n].Pname);}
- }
- Fl_Check_Button adcheck {
- callback {part->kit[n].Padenabled=(int)o->value();
-if (part->kit[n].Padenabled!=0) adeditbutton->activate();
- else adeditbutton->deactivate();}
- private xywh {400 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4
- code0 {o->value(part->kit[n].Padenabled);}
- code1 {if (n==0) o->hide();}
- }
- Fl_Check_Button subcheck {
- callback {part->kit[n].Psubenabled=(int)o->value();
-if (part->kit[n].Psubenabled!=0) subeditbutton->activate();
- else subeditbutton->deactivate();}
- private xywh {470 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4
- code0 {o->value(part->kit[n].Psubenabled);}
- code1 {if (n==0) o->hide();}
- }
- Fl_Choice sendtoeffect {
- callback {if (o->value()!=0) part->kit[n].Psendtoparteffect=(int)o->value()-1;
- else part->kit[n].Psendtoparteffect=127;} open
- xywh {615 0 45 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {o->add("OFF");char nrstr[10]; for(int i=0;i<NUM_PART_EFX;i++){sprintf(nrstr,"FX%d",i+1);o->add(nrstr);};}
- code1 {o->value(part->kit[n].Psendtoparteffect+1);if (part->kit[n].Psendtoparteffect==127) o->value(0);}
- } {}
- Fl_Button padeditbutton {
- label edit
- callback {partui->showparameters(n,2);}
- xywh {560 0 40 15} box THIN_UP_BOX labelsize 11
- code0 {if (part->kit[n].Ppadenabled==0) o->deactivate();}
- code1 {if (n==0) o->hide();}
- }
- Fl_Check_Button padcheck {
- callback {part->kit[n].Ppadenabled=(int)o->value();
-if (part->kit[n].Ppadenabled!=0) padeditbutton->activate();
- else padeditbutton->deactivate();}
- private xywh {540 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4
- code0 {o->value(part->kit[n].Ppadenabled);}
- code1 {if (n==0) o->hide();}
- }
- }
- Fl_Check_Button enabledcheck {
- label 01
- callback {int answer=1;
-if (o->value()==0) answer=fl_choice("Delete the item?","No","Yes",NULL);
-if (answer!=0){
-pthread_mutex_lock(&master->mutex);
- part->setkititemstatus(n,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-
-if (o->value()==0) partkititemgroup->deactivate();
-else partkititemgroup->activate();
-o->redraw();
-partui->showparameters(n,-1);//use to delete the ui, if it is not to item 0
-} else o->value(1);}
- private xywh {30 0 20 15} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 4
- code0 {snprintf(label,10,"%d",n+1);o->label(label);}
- code1 {o->value(part->kit[n].Penabled);}
- code2 {if (n==0) o->deactivate();}
- }
- }
- }
- Function {PartKitItem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {n=0;
-part=NULL;} {}
- }
- Function {refresh()} {} {
- code {enabledcheck->value(part->kit[n].Penabled);
-if (part->kit[n].Penabled==0) partkititemgroup->deactivate();
-else partkititemgroup->activate();
-
-mutedcheck->value(part->kit[n].Pmuted);
-labelbutton->label((char *)part->kit[n].Pname);
-minkcounter->value(part->kit[n].Pminkey);
-maxkcounter->value(part->kit[n].Pmaxkey);
-adcheck->value(part->kit[n].Padenabled);
-adcheck->do_callback();
-subcheck->value(part->kit[n].Psubenabled);
-subcheck->do_callback();
-
-sendtoeffect->value(part->kit[n].Psendtoparteffect+1);
-if (part->kit[n].Psendtoparteffect==127) sendtoeffect->value(0);
-
-this->redraw();} {
- callback {int answer=1;
-if (o->value()==0) answer=fl_choice("Delete the item?","No","Yes",NULL);
-if (answer!=0){
-pthread_mutex_lock(&master->mutex);
- part->setkititemstatus(n,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-
-if (o->value()==0) partkititemgroup->deactivate();
-else partkititemgroup->activate();
-o->redraw();
-partui->showparameters(n,-1);//use to delete the ui, if it is not to item 0
-} else o->value(1);}
- }
- }
- Function {init(Part *part_,int n_,Master *master_,PartUI_ *partui_)} {} {
- code {part=part_;
-n=n_;
-partui=partui_;
-master=master_;
-make_window();
-//partkititem->show();
-end();} {}
- }
- Function {~PartKitItem()} {} {
- code {partkititem->hide();
-//delete(partkititem);} {}
- }
- decl {Part *part;} {}
- decl {int n;} {}
- decl {Master *master;} {}
- decl {char label[10];} {}
- decl {PartUI_ *partui;} {}
-}
-
-class PartUI {: {public Fl_Group,PartUI_}
-} {
- Function {make_window()} {private
- } {
- Fl_Window partgroup {
- private xywh {424 178 385 180} type Double hide
- class Fl_Group
- } {
- Fl_Group partgroupui {
- xywh {0 0 385 180}
- code0 {if (part->Penabled==0) o->deactivate();}
- } {
- Fl_Dial {} {
- label Pan
- callback {part->setPpanning((int) o->value());}
- xywh {50 40 25 25} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
- code0 {o->value(part->Ppanning);}
- class WidgetPDial
- }
- Fl_Counter {} {
- label KeyShift
- callback {part->Pkeyshift=(int) o->value()+64;}
- xywh {195 45 90 20} labelsize 11 align 1 minimum -64 maximum 64 step 1
- code0 {o->lstep(12);}
- code1 {o->value(part->Pkeyshift-64);}
- }
- Fl_Scroll {} {open
- xywh {166 91 125 60} box ENGRAVED_FRAME labelfont 1 labelsize 10 align 21
- } {
- Fl_Pack {} {open
- xywh {171 96 115 35} type HORIZONTAL
- code0 {o->spacing(5);}
- code1 {for (int i=0;i<NUM_SYS_EFX;i++){psyef[i]=new PartSysEffSend(0,0,25,35,"");psyef[i]->init(master,npart,i);}}
- } {}
- }
- Fl_Button {} {
- label {Grand Piano}
- callback {int event=Fl::event_button();
-if (event==FL_RIGHT_MOUSE){
- const char *tmp=fl_input("Instrument name:",(const char *)part->Pname);
- if (tmp!=NULL) snprintf((char *)part->Pname,PART_MAX_NAME_LEN,"%s",tmp);
-} else {
- if (event==FL_LEFT_MOUSE) bankui->show();
- else instrumenteditwindow->show();
-};}
- tooltip {left mousebutton - to choose/save/.. from/to bank or right mousebutton to change the name or middle button to change the instrument information} xywh {195 5 185 20} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 11 align 84
- code0 {o->label((char *)part->Pname);}
- }
- Fl_Box {} {
- label {To Sys.Efx.}
- xywh {166 81 95 10} labelfont 1 labelsize 10
- }
- Fl_Check_Button {} {
- label NoteOn
- callback {part->Pnoteon=(int) o->value();}
- tooltip {set if the part receives NoteOn messages} xywh {10 155 65 20} down_box DOWN_BOX labelfont 1 labelsize 11
- code0 {o->value(part->Pnoteon);}
- }
- Fl_Counter minkcounter {
- label {Min.k}
- callback {part->Pminkey=(int) o->value();
-if (part->Pminkey>part->Pmaxkey) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);}
- tooltip {Minimum key (that the part receives NoteOn messages)} xywh {295 125 40 15} type Simple labelfont 1 labelsize 10 minimum 0 maximum 127 step 1 textsize 10
- code0 {o->value(part->Pminkey);}
- }
- Fl_Counter maxkcounter {
- label {Max.k}
- callback {part->Pmaxkey=(int) o->value();
-
-if (part->Pminkey>part->Pmaxkey) o->textcolor(FL_RED);
- else o->textcolor(FL_BLACK);}
- tooltip {Maximum key (that the part receives NoteOn messages)} xywh {340 125 40 15} type Simple labelfont 1 labelsize 10 minimum 0 maximum 127 step 1 textsize 10
- code0 {o->value(part->Pmaxkey);}
- }
- Fl_Dial {} {
- label Volume
- callback {part->setPvolume((int) o->value());}
- tooltip {Part Volume} xywh {10 35 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
- code0 {o->value(part->Pvolume);}
- class WidgetPDial
- }
- Fl_Dial {} {
- label {Vel.Ofs.}
- callback {part->Pveloffs=(int) o->value();}
- tooltip {Velocity Offset} xywh {135 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(part->Pveloffs);}
- class WidgetPDial
- }
- Fl_Dial {} {
- label {Vel.Sns.}
- callback {part->Pvelsns=(int) o->value();}
- tooltip {Velocity Sensing Function} xywh {95 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(part->Pvelsns);}
- class WidgetPDial
- }
- Fl_Button {} {
- label Controllers
- callback {ctlwindow->show();}
- xywh {295 90 85 30} box PLASTIC_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Check_Button {} {
- label Portamento
- callback {part->ctl.portamento.portamento=(int) o->value();}
- tooltip {Enable/Disable the portamento} xywh {95 155 88 20} down_box DOWN_BOX labelfont 1 labelsize 11
- code0 {o->value(part->ctl.portamento.portamento);}
- }
- Fl_Button {} {
- label {Edit instrument}
- callback {instrumenteditwindow->show();}
- xywh {15 90 130 30} box PLASTIC_UP_BOX color 230 labelfont 1 labelsize 13
- }
- Fl_Button {} {
- label m
- callback {if (part->lastnote>=0) minkcounter->value(part->lastnote);
-minkcounter->do_callback();
-maxkcounter->do_callback();}
- tooltip {set the minimum key to the last pressed key} xywh {315 155 15 12} box THIN_UP_BOX labelsize 10
- }
- Fl_Button {} {
- label M
- callback {if (part->lastnote>=0) maxkcounter->value(part->lastnote);
-maxkcounter->do_callback();
-minkcounter->do_callback();}
- tooltip {set the maximum key to the last pressed key} xywh {345 155 15 12} box THIN_UP_BOX labelsize 10
- }
- Fl_Button {} {
- label R
- callback {minkcounter->value(0);
-minkcounter->do_callback();
-maxkcounter->value(127);
-maxkcounter->do_callback();}
- tooltip {reset the minimum key to 0 and maximum key to 127} xywh {330 155 15 12} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Choice {} {
- label {MIDI Chn.Rcv.}
- callback {part->Prcvchn=(int) o->value();} open
- tooltip {receive from Midi channel} xywh {310 45 70 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Chn%d",i+1);if (i!=9) o->add(nrstr); else o->add("Drms10");};}
- code1 {o->value(part->Prcvchn);}
- } {}
- Fl_Choice keylimitlist {
- label KLmt
- callback {int val=0;
-val=atoi(o->text());
-part->setkeylimit(val);} open
- tooltip {Key Limit} xywh {215 155 50 20} down_box BORDER_BOX labelsize 10 align 8 textfont 1 textsize 10
- } {}
- Fl_Choice {} {
- label {Mode :}
- callback {if ((int) o->value()==0){ /* Poly (implies no legato) */
- part->Ppolymode=1;
- part->Plegatomode=0;
-} else {
- if ((int) o->value()==1){ /* Mono (implies no legato) */
- part->Ppolymode=0;
- part->Plegatomode=0;
- } else {
- if ((int) o->value()==2){ /* Legato (implies mono) */
- part->Ppolymode=0;
- part->Plegatomode=1;
- };
- };
-};} open
- tooltip {Poly, Mono or Legato mode} xywh {80 130 64 18} down_box BORDER_BOX labelfont 1 labelsize 11 textfont 1 textsize 10
- code0 {o->add("Poly"); o->add("Mono"); o->add("Legato");}
- code1 {if (part->Ppolymode!=0) o->value(0); else o->value(1);}
- code2 {if (part->Ppolymode==0 && part->Plegatomode!=0) o->value(2);}
- } {}
- }
- Fl_Check_Button {} {
- label Enabled
- callback {pthread_mutex_lock(&master->mutex);
-master->partonoff(npart,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-if (part->Penabled==0) partgroupui->deactivate();
- else partgroupui->activate();}
- xywh {90 5 75 20} down_box DOWN_BOX labelfont 1 labelsize 11
- code0 {o->value(part->Penabled);}
- }
- }
- Fl_Window ctlwindow {
- label Controllers
- private xywh {542 212 500 130} type Double hide
- } {
- Fl_Check_Button {} {
- label Expr
- callback {part->ctl.expression.receive=(int) o->value();}
- tooltip {Expression enable} xywh {155 55 45 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
- code0 {o->value(part->ctl.expression.receive);}
- }
- Fl_Dial {} {
- label PanDpth
- callback {part->ctl.panning.depth=(int) o->value();}
- tooltip {Panning Depth} xywh {10 55 30 30} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.panning.depth);}
- class WidgetPDial
- }
- Fl_Dial {} {
- label FltCut
- callback {part->ctl.filtercutoff.depth=(int) o->value();}
- tooltip {Filter Cutoff depth} xywh {90 55 30 30} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.filtercutoff.depth);}
- class WidgetPDial
- }
- Fl_Dial {} {
- label FltQ
- callback {part->ctl.filterq.depth=(int) o->value();}
- tooltip {Filter Q depth} xywh {50 55 30 30} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.filterq.depth);}
- class WidgetPDial
- }
- Fl_Dial {} {
- label BwDpth
- callback {part->ctl.bandwidth.depth=(int) o->value();}
- tooltip {BandWidth depth} xywh {125 10 30 30} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.bandwidth.depth);}
- class WidgetPDial
- }
- Fl_Dial {} {
- label ModWh
- callback {part->ctl.modwheel.depth=(int) o->value();}
- tooltip {Modulation Wheel depth} xywh {50 10 30 30} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.modwheel.depth);}
- class WidgetPDial
- }
- Fl_Counter {} {
- label {PWheelB.Rng (cents)}
- callback {part->ctl.pitchwheel.bendrange=(int) o->value();}
- tooltip {Pitch Wheel Bend Range (cents)} xywh {165 15 110 20} labelsize 10 align 1 minimum -6400 maximum 6400 step 1
- code0 {o->value(part->ctl.pitchwheel.bendrange);}
- code1 {o->lstep(100);}
- }
- Fl_Check_Button {} {
- label FMamp
- callback {part->ctl.fmamp.receive=(int) o->value();}
- tooltip {FM amplitude enable} xywh {205 55 60 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
- code0 {o->value(part->ctl.fmamp.receive);}
- }
- Fl_Check_Button {} {
- label Vol
- callback {part->ctl.volume.receive=(int) o->value();}
- tooltip {Volume enable} xywh {155 80 45 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
- code0 {o->value(part->ctl.volume.receive);}
- }
- Fl_Check_Button {} {
- label Sustain
- callback {part->ctl.sustain.receive=(int) o->value();
-if (part->ctl.sustain.receive==0) {
- part->RelaseSustainedKeys();
- part->ctl.setsustain(0);
-};}
- tooltip {Sustain pedal enable} xywh {205 80 60 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
- code0 {o->value(part->ctl.sustain.receive);}
- }
- Fl_Button {} {
- label Close
- callback {ctlwindow->hide();}
- xywh {330 105 95 20} box THIN_UP_BOX
- }
- Fl_Button {} {
- label {Reset all controllers}
- callback {part->SetController(C_resetallcontrollers,0);}
- xywh {5 105 210 20} box THIN_UP_BOX
- }
- Fl_Group {} {
- label Portamento
- xywh {280 15 160 90} box ENGRAVED_FRAME labelfont 1 labelsize 10
- } {
- Fl_Check_Button {} {
- label Rcv
- callback {part->ctl.portamento.receive=(int) o->value();}
- tooltip {Receive Portamento Controllers} xywh {285 20 40 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
- code0 {o->value(part->ctl.portamento.receive);}
- }
- Fl_Dial {} {
- label time
- callback {part->ctl.portamento.time=(int) o->value();}
- tooltip {Portamento time} xywh {285 60 25 25} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.portamento.time);}
- class WidgetPDial
- }
- Fl_Counter {} {
- label thresh
- callback {part->ctl.portamento.pitchthresh=(int) o->value();}
- tooltip {Minimum or max. difference of the notes in order to do the portamento (x 100 cents)} xywh {340 20 50 20} type Simple labelsize 10 minimum 0 maximum 127 step 1
- code0 {o->value(part->ctl.portamento.pitchthresh);}
- }
- Fl_Check_Button {} {
- label {th.type}
- callback {part->ctl.portamento.pitchthreshtype=(int) o->value();}
- tooltip {Threshold type (min/max)} xywh {365 70 15 15} down_box DOWN_BOX labelsize 10 align 2
- code0 {o->value(part->ctl.portamento.pitchthreshtype);}
- }
- Fl_Box {} {
- label {x100 cnt.}
- xywh {340 50 55 15} labelsize 10 align 16
- }
- Fl_Dial {} {
- label {t.dn/up}
- callback {int x=(int) o->value();
-
-part->ctl.portamento.updowntimestretch=x;}
- tooltip {Portamento time stretch (up/down)} xywh {315 60 25 25} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.portamento.updowntimestretch);}
- class WidgetPDial
- }
- Fl_Dial propta {
- label {Prp.Rate}
- callback {part->ctl.portamento.propRate=(int) o->value();}
- tooltip {Distance required to double change from nonpropotinal portamento time} xywh {405 20 25 25} labelsize 9 maximum 127 step 1
- code0 {o->value(part->ctl.portamento.propRate);}
- class WidgetPDial
- }
- Fl_Dial proptb {
- label {Prp.Dpth}
- callback {part->ctl.portamento.propDepth=(int) o->value();}
- tooltip {The difference from nonproportinal portamento} xywh {405 60 25 25} labelsize 9 maximum 127 step 1
- code0 {o->value(part->ctl.portamento.propDepth);}
- class WidgetPDial
- }
- Fl_Check_Button {} {
- label {Proprt.}
- callback {part->ctl.portamento.proportional=(int) o->value();
-if(o->value()){propta->activate();proptb->activate();}
-else {propta->deactivate();proptb->deactivate();}}
- tooltip {Enable Proportinal Portamento (over fixed Portamento)} xywh {285 40 50 15} box THIN_UP_BOX down_box DOWN_BOX labelsize 9
- code0 {o->value(part->ctl.portamento.proportional);}
- code1 {if(o->value()){propta->activate();proptb->activate();}}
- code2 {else {propta->deactivate();proptb->deactivate();}}
- }
- }
- Fl_Group {} {
- label Resonance
- xywh {440 15 50 90} box ENGRAVED_BOX labelfont 1 labelsize 10
- } {
- Fl_Dial {} {
- label BWdpth
- callback {part->ctl.resonancebandwidth.depth=(int) o->value();}
- tooltip {BandWidth controller depth} xywh {450 60 25 25} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.resonancebandwidth.depth);}
- class WidgetPDial
- }
- Fl_Dial {} {
- label CFdpth
- callback {part->ctl.resonancecenter.depth=(int) o->value();}
- tooltip {Center Frequency controller Depth} xywh {450 20 25 25} labelsize 10 maximum 127 step 1
- code0 {o->value(part->ctl.resonancecenter.depth);}
- class WidgetPDial
- }
- }
- Fl_Check_Button {} {
- label {Exp MWh}
- callback {part->ctl.modwheel.exponential=(int) o->value();}
- tooltip {Exponential modulation wheel} xywh {10 15 40 25} down_box DOWN_BOX labelsize 10 align 148
- code0 {o->value(part->ctl.modwheel.exponential);}
- }
- Fl_Check_Button {} {
- label {Exp BW}
- callback {part->ctl.bandwidth.exponential=(int) o->value();}
- tooltip {Exponential BandWidth Controller} xywh {85 15 35 25} down_box DOWN_BOX labelsize 10 align 148
- code0 {o->value(part->ctl.bandwidth.exponential);}
- }
- }
- Fl_Window partfx {
- label {Part's Insert Effects}
- private xywh {121 424 390 145} type Double hide
- } {
- Fl_Counter inseffnocounter {
- label {FX No.}
- callback {ninseff=(int) o->value()-1;
-insefftype->value(part->partefx[ninseff]->geteffect());
-//insefftype->do_callback();
-inseffectui->refresh(part->partefx[ninseff]);
-int x=part->Pefxroute[ninseff];
-if (x==127) x=1;
-bypasseff->value(part->Pefxbypass[ninseff]);
-
-sendtochoice->value(x);}
- xywh {5 110 80 20} type Simple labelfont 1 align 6 minimum 1 maximum 127 step 1 textfont 1
- code0 {o->bounds(1,NUM_PART_EFX);}
- code1 {o->value(ninseff+1);}
- }
- Fl_Choice insefftype {
- label EffType
- callback {pthread_mutex_lock(part->mutex);
-part->partefx[ninseff]->changeeffect((int) o->value());
-pthread_mutex_unlock(part->mutex);
-inseffectui->refresh(part->partefx[ninseff]);}
- xywh {155 110 70 15} down_box BORDER_BOX labelsize 10 align 6
- code0 {o->value(part->partefx[ninseff]->geteffect());}
- } {
- MenuItem {} {
- label {No Effect}
- xywh {35 35 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Reverb
- xywh {45 45 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Echo
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Chorus
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Phaser
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label AlienWah
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label Distortion
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label EQ
- xywh {100 100 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label DynFilter
- xywh {110 110 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Group inseffectuigroup {
- xywh {5 5 380 100} box FLAT_BOX color 48
- } {
- Fl_Group inseffectui {
- xywh {5 5 380 95}
- code0 {o->init(part->partefx[ninseff]);}
- class EffUI
- } {}
- }
- Fl_Button {} {
- label Close
- callback {partfx->hide();}
- xywh {325 115 60 20} box THIN_UP_BOX
- }
- Fl_Choice sendtochoice {
- label {Send To.}
- callback {int x=(int) o->value();
-part->Pefxroute[ninseff]=x;
-if (x==2) part->partefx[ninseff]->setdryonly(true);
- else part->partefx[ninseff]->setdryonly(false);}
- xywh {235 110 80 15} down_box BORDER_BOX labelsize 10 align 6
- code0 {int x=part->Pefxroute[ninseff]; if (x==127) x=1;}
- code1 {o->value(x);}
- } {
- MenuItem {} {
- label {Next Effect}
- xywh {45 45 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {Part Out}
- xywh {55 55 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {Dry Out}
- xywh {65 65 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Check_Button bypasseff {
- label bypass
- callback {part->Pefxbypass[ninseff]=(((int)o->value())!=0);}
- tooltip {if the effect is not used (is bypassed)} xywh {90 110 60 15} down_box DOWN_BOX labelsize 11
- code0 {int x=part->Pefxbypass[ninseff];o->value(x);}
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(part->partefx[ninseff]);}
- xywh {90 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {pthread_mutex_lock(&master->mutex);
-presetsui->paste(part->partefx[ninseff],inseffectui);
-pthread_mutex_unlock(&master->mutex);}
- xywh {120 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- }
- Fl_Window instrumentkitlist {
- label {Instrument Kit}
- xywh {113 324 670 370} type Double hide
- } {
- Fl_Button {} {
- label {Close Window}
- callback {instrumentkitlist->hide();}
- xywh {375 350 160 20} box THIN_UP_BOX
- }
- Fl_Scroll kitlist {
- xywh {0 15 670 330} type VERTICAL box THIN_UP_BOX
- code0 {if (part->Pkitmode==0) o->deactivate();}
- } {
- Fl_Pack {} {
- xywh {0 20 670 320}
- code0 {for (int i=0;i<NUM_KIT_ITEMS;i++){partkititem[i]=new PartKitItem(0,0,670,20,"");partkititem[i]->init(part,i,master,this);}}
- } {}
- }
- Fl_Box {} {
- label {No.}
- xywh {5 0 25 15} labelfont 1 labelsize 11 align 18
- }
- Fl_Box {} {
- label {M.}
- xywh {55 0 25 15} labelfont 1 labelsize 11 align 18
- }
- Fl_Box {} {
- label {Min.k}
- xywh {235 0 40 15} labelfont 1 labelsize 11 align 18
- }
- Fl_Box {} {
- label {Max.k}
- xywh {345 0 40 15} labelfont 1 labelsize 11 align 18
- }
- Fl_Box {} {
- label ADsynth
- xywh {405 0 50 15} labelfont 1 labelsize 11 align 18
- }
- Fl_Box {} {
- label SUBsynth
- xywh {470 0 60 15} labelfont 1 labelsize 11 align 18
- }
- Fl_Choice {} {
- label Mode
- callback {part->Pkitmode=(int) o->value();
-if (part->Pkitmode==0) {
- kitlist->deactivate();
- } else {
- kitlist->activate();
-};}
- xywh {35 350 70 15} down_box BORDER_BOX labelsize 11 textfont 1 textsize 11
- code0 {o->value(part->Pkitmode);}
- } {
- MenuItem {} {
- label OFF
- xywh {0 0 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label MULTI
- xywh {10 10 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label SINGLE
- xywh {20 20 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Check_Button {} {
- label {Drum mode}
- callback {part->Pdrummode=(int) o->value();}
- xywh {285 350 70 15} down_box DOWN_BOX labelsize 10
- code0 {o->value(part->Pdrummode);}
- }
- Fl_Box {} {
- label {FX.r.}
- xywh {620 0 30 15} labelfont 1 labelsize 11 align 18
- }
- Fl_Box {} {
- label PADsynth
- xywh {540 0 60 15} labelfont 1 labelsize 11 align 18
- }
- }
- Fl_Window instrumenteditwindow {
- label {Instrument Edit} selected
- xywh {182 214 395 360} type Double hide
- } {
- Fl_Group {} {
- xywh {0 220 395 110} box ENGRAVED_FRAME
- } {
- Fl_Group {} {
- label PADsynth
- xywh {205 245 100 80} box ENGRAVED_FRAME labelfont 1
- } {
- Fl_Button padeditbutton {
- label Edit
- callback {showparameters(0,2);}
- xywh {215 280 80 35} box PLASTIC_UP_BOX color 222 selection_color 220 labelfont 1 labelsize 13 align 128
- code0 {if (part->kit[0].Ppadenabled==0) o->deactivate();}
- }
- Fl_Check_Button padsynenabledcheck {
- label Enabled
- callback {int x=(int) o->value();
-part->kit[0].Ppadenabled=x;
-if (x==0) padeditbutton->deactivate();
- else padeditbutton->activate();}
- tooltip {enable/disable PADsynth} xywh {215 255 80 20} box PLASTIC_UP_BOX down_box DOWN_BOX color 222 selection_color 218 labelfont 1 labelsize 11
- code1 {o->value(part->kit[0].Ppadenabled);}
- }
- }
- Fl_Group {} {
- label ADDsynth
- xywh {5 245 100 80} box ENGRAVED_FRAME labelfont 1
- } {
- Fl_Check_Button adsynenabledcheck {
- label Enabled
- callback {int x=(int) o->value();
-part->kit[0].Padenabled=x;
-if (x==0) adeditbutton->deactivate();
- else adeditbutton->activate();}
- tooltip {enable/disable ADsynth} xywh {15 255 80 20} box PLASTIC_UP_BOX down_box DOWN_BOX color 222 selection_color 218 labelfont 1 labelsize 11
- code1 {o->value(part->kit[0].Padenabled);}
- }
- Fl_Button adeditbutton {
- label Edit
- callback {showparameters(0,0);}
- xywh {15 281 80 34} box PLASTIC_UP_BOX color 222 selection_color 220 labelfont 1 labelsize 13 align 128
- code0 {if (part->kit[0].Padenabled==0) o->deactivate();}
- }
- }
- Fl_Group {} {
- label SUBsynth
- xywh {105 245 100 80} box ENGRAVED_FRAME labelfont 1
- } {
- Fl_Check_Button subsynenabledcheck {
- label Enabled
- callback {int x=(int) o->value();
-part->kit[0].Psubenabled=x;
-if (x==0) subeditbutton->deactivate();
- else subeditbutton->activate();}
- tooltip {enable/disable SUBsynth} xywh {115 255 80 20} box PLASTIC_UP_BOX down_box DOWN_BOX color 222 selection_color 218 labelfont 1 labelsize 11
- code1 {o->value(part->kit[0].Psubenabled);}
- }
- Fl_Button subeditbutton {
- label Edit
- callback {showparameters(0,1);}
- xywh {115 280 80 35} box PLASTIC_UP_BOX color 222 selection_color 220 labelfont 1 labelsize 13 align 128
- code0 {if (part->kit[0].Psubenabled==0) o->deactivate();}
- }
- }
- Fl_Button {} {
- label {Kit Edit}
- callback {instrumentkitlist->show();}
- xywh {310 245 80 35} box PLASTIC_UP_BOX color 238 selection_color 220 labelfont 1 align 128
- }
- Fl_Button {} {
- label Effects
- callback {partfx->show();}
- xywh {310 290 80 35} box PLASTIC_UP_BOX color 230 labelfont 1 labelsize 13
- }
- }
- Fl_Group {} {
- xywh {0 5 395 215} box ENGRAVED_FRAME
- } {
- Fl_Input {} {
- label {Author and Copyright}
- callback {snprintf((char *)part->info.Pauthor,MAX_INFO_TEXT_SIZE,"%s",o->value());}
- xywh {5 60 385 50} type Multiline color 26 labelsize 10 align 5
- code0 {o->maximum_size(MAX_INFO_TEXT_SIZE);}
- code1 {o->value((char *) &part->info.Pauthor);}
- }
- Fl_Input {} {
- label Comments
- callback {snprintf((char *)part->info.Pcomments,MAX_INFO_TEXT_SIZE,"%s",o->value());}
- xywh {5 125 385 90} type Multiline color 26 labelsize 11 align 5
- code0 {o->maximum_size(MAX_INFO_TEXT_SIZE);}
- code1 {o->value((char *) &part->info.Pcomments);}
- }
- Fl_Choice {} {
- label {Type:}
- callback {part->info.Ptype=o->value();}
- xywh {5 25 155 20} down_box BORDER_BOX labelfont 1 labelsize 11 align 5 textsize 10
- code0 {o->value(part->info.Ptype);}
- } {
- MenuItem {} {
- label {--------------------------}
- xywh {20 20 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Piano
- xywh {10 10 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {Chromatic Percussion}
- xywh {20 20 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Organ
- xywh {30 30 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Guitar
- xywh {40 40 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Bass
- xywh {50 50 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {Solo Strings}
- xywh {60 60 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Ensemble
- xywh {70 70 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Brass
- xywh {80 80 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Reed
- xywh {90 90 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Pipe
- xywh {100 100 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {Synth Lead}
- xywh {110 110 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {Synth Pad}
- xywh {120 120 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {Synth Effects}
- xywh {130 130 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Ethnic
- xywh {140 140 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label Percussive
- xywh {150 150 100 20} labelfont 1 labelsize 11
- }
- MenuItem {} {
- label {Sound Effects}
- xywh {160 160 100 20} labelfont 1 labelsize 11
- }
- }
- }
- Fl_Button {} {
- label Close
- callback {instrumenteditwindow->hide();}
- xywh {150 335 95 25} box THIN_UP_BOX
- }
- }
- }
- Function {PartUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {part=NULL;
-adnoteui=NULL;
-subnoteui=NULL;
-padnoteui=NULL;
-lastkititem=-1;} {}
- }
- Function {init(Part *part_,Master *master_,int npart_,BankUI *bankui_)} {} {
- code {bankui=bankui_;
-part=part_;
-npart=npart_;
-master=master_;
-ninseff=0;
-
-make_window();
-partgroup->position(this->parent()->x()+2,this->parent()->y()+2);
-partgroup->show();
-end();
-
-
-//if (config.ui.showinstrumentinfo!=0) instrumenteditwindow->show();
-
-int klimits[]={1,2,3,4,5,6,7,8,9,10,15,20,30,50,100,0};
-
-keylimitlist->add("OFF");
-int k=0;
-int val=-1;
-char tmp[10];
-while (klimits[k]!=0){
- sprintf(tmp,"%d",klimits[k]);
- keylimitlist->add(tmp);
- if (val==-1){
- if (klimits[k]>part->Pkeylimit) val=k;
- };
- k++;
-};
-
-if (val==-1) val=k;
-keylimitlist->value(val);} {}
- }
- Function {showparameters(int kititem,int engine)} {} {
- code {if (engine==-1){//this is used if I want to clear the engine from the part
- if (kititem==lastkititem) kititem=-1;
- else kititem=lastkititem;
-};
-
-if (kititem!=lastkititem){
- if (adnoteui!=NULL) delete (adnoteui);
- if (subnoteui!=NULL) delete (subnoteui);
- if (padnoteui!=NULL) delete (padnoteui);
- adnoteui=NULL;subnoteui=NULL;padnoteui=NULL;
- lastkititem=kititem;
-
- if (kititem>=NUM_KIT_ITEMS) return;//bad kit item
- if (kititem<0) return;
-
- if (part->kit[kititem].adpars!=NULL)
- adnoteui=new ADnoteUI(part->kit[kititem].adpars,master);
-
- if (part->kit[kititem].subpars!=NULL)
- subnoteui=new SUBnoteUI(part->kit[kititem].subpars);
-
- if (part->kit[kititem].padpars!=NULL)
- padnoteui=new PADnoteUI(part->kit[kititem].padpars,master);
-
-};
-
-
-
-if ((engine==0)&&(adnoteui!=NULL)) adnoteui->ADnoteGlobalParameters->show();
-if ((engine==1)&&(subnoteui!=NULL)) subnoteui->SUBparameters->show();
-if ((engine==2)&&(adnoteui!=NULL)) padnoteui->padnotewindow->show();} {}
- }
- Function {~PartUI()} {} {
- code {if (adnoteui!=NULL) delete (adnoteui);
-if (subnoteui!=NULL) delete (subnoteui);
-if (padnoteui!=NULL) delete (padnoteui);
-
-partgroup->hide();
-//delete(partgroup);
-
-ctlwindow->hide();
-delete(ctlwindow);
-
-partfx->hide();
-delete(partfx);
-
-instrumentkitlist->hide();
-delete(instrumentkitlist);
-
-instrumenteditwindow->hide();
-delete(instrumenteditwindow);} {}
- }
- decl {Part *part;} {}
- decl {Master *master;} {}
- decl {BankUI *bankui;} {}
- decl {ADnoteUI *adnoteui;} {}
- decl {SUBnoteUI *subnoteui;} {}
- decl {PADnoteUI *padnoteui;} {}
- decl {PartSysEffSend *psyef[NUM_SYS_EFX];} {}
- decl {int npart;} {}
- decl {int ninseff;} {}
- decl {int lastkititem;} {}
- decl {PartKitItem *partkititem[NUM_KIT_ITEMS];} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/PartUI.h b/plugins/zynaddsubfx/src/UI/PartUI.h
deleted file mode 100644
index 6e3f1ad..0000000
--- a/plugins/zynaddsubfx/src/UI/PartUI.h
+++ /dev/null
@@ -1,338 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef PartUI_h
-#define PartUI_h
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "WidgetPDial.h"
-#include "EffUI.h"
-#include "BankUI.h"
-#include "ADnoteUI.h"
-#include "SUBnoteUI.h"
-#include "PADnoteUI.h"
-#include "../Misc/Config.h"
-#include "../Misc/Master.h"
-#include "../Misc/Part.h"
-
-class PartSysEffSend : public Fl_Group {
- Fl_Group* make_window();
- Fl_Group *syseffsend;
- void cb_01_i(WidgetPDial*, void*);
- static void cb_01(WidgetPDial*, void*);
-public:
- PartSysEffSend(int x,int y, int w, int h, const char *label=0);
- void init(Master *master_,int npart_,int neff_);
- ~PartSysEffSend();
-private:
- Master *master;
- int neff;
- int npart;
-};
-
-class PartUI_ {
-public:
- virtual void showparameters(int kititem,int engine);
-};
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Choice.H>
-
-class PartKitItem : public Fl_Group {
- Fl_Group* make_window();
- Fl_Group *partkititem;
- Fl_Group *partkititemgroup;
-public:
- Fl_Counter *minkcounter;
-private:
- void cb_minkcounter_i(Fl_Counter*, void*);
- static void cb_minkcounter(Fl_Counter*, void*);
- void cb_m_i(Fl_Button*, void*);
- static void cb_m(Fl_Button*, void*);
- void cb_M_i(Fl_Button*, void*);
- static void cb_M(Fl_Button*, void*);
- void cb_R_i(Fl_Button*, void*);
- static void cb_R(Fl_Button*, void*);
-public:
- Fl_Button *adeditbutton;
-private:
- void cb_adeditbutton_i(Fl_Button*, void*);
- static void cb_adeditbutton(Fl_Button*, void*);
-public:
- Fl_Button *subeditbutton;
-private:
- void cb_subeditbutton_i(Fl_Button*, void*);
- static void cb_subeditbutton(Fl_Button*, void*);
- Fl_Check_Button *mutedcheck;
- void cb_mutedcheck_i(Fl_Check_Button*, void*);
- static void cb_mutedcheck(Fl_Check_Button*, void*);
-public:
- Fl_Counter *maxkcounter;
-private:
- void cb_maxkcounter_i(Fl_Counter*, void*);
- static void cb_maxkcounter(Fl_Counter*, void*);
-public:
- Fl_Button *labelbutton;
-private:
- void cb_labelbutton_i(Fl_Button*, void*);
- static void cb_labelbutton(Fl_Button*, void*);
- Fl_Check_Button *adcheck;
- void cb_adcheck_i(Fl_Check_Button*, void*);
- static void cb_adcheck(Fl_Check_Button*, void*);
- Fl_Check_Button *subcheck;
- void cb_subcheck_i(Fl_Check_Button*, void*);
- static void cb_subcheck(Fl_Check_Button*, void*);
-public:
- Fl_Choice *sendtoeffect;
-private:
- void cb_sendtoeffect_i(Fl_Choice*, void*);
- static void cb_sendtoeffect(Fl_Choice*, void*);
-public:
- Fl_Button *padeditbutton;
-private:
- void cb_padeditbutton_i(Fl_Button*, void*);
- static void cb_padeditbutton(Fl_Button*, void*);
- Fl_Check_Button *padcheck;
- void cb_padcheck_i(Fl_Check_Button*, void*);
- static void cb_padcheck(Fl_Check_Button*, void*);
- Fl_Check_Button *enabledcheck;
- void cb_enabledcheck_i(Fl_Check_Button*, void*);
- static void cb_enabledcheck(Fl_Check_Button*, void*);
-public:
- PartKitItem(int x,int y, int w, int h, const char *label=0);
- void refresh();
- void init(Part *part_,int n_,Master *master_,PartUI_ *partui_);
- ~PartKitItem();
-private:
- Part *part;
- int n;
- Master *master;
- char label[10];
- PartUI_ *partui;
-};
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Pack.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Input.H>
-
-class PartUI : public Fl_Group,PartUI_ {
- Fl_Group* make_window();
- Fl_Group *partgroup;
-public:
- Fl_Group *partgroupui;
-private:
- void cb_Pan_i(WidgetPDial*, void*);
- static void cb_Pan(WidgetPDial*, void*);
- void cb_KeyShift_i(Fl_Counter*, void*);
- static void cb_KeyShift(Fl_Counter*, void*);
- void cb_Grand_i(Fl_Button*, void*);
- static void cb_Grand(Fl_Button*, void*);
- void cb_NoteOn_i(Fl_Check_Button*, void*);
- static void cb_NoteOn(Fl_Check_Button*, void*);
-public:
- Fl_Counter *minkcounter;
-private:
- void cb_minkcounter1_i(Fl_Counter*, void*);
- static void cb_minkcounter1(Fl_Counter*, void*);
-public:
- Fl_Counter *maxkcounter;
-private:
- void cb_maxkcounter1_i(Fl_Counter*, void*);
- static void cb_maxkcounter1(Fl_Counter*, void*);
- void cb_Volume_i(WidgetPDial*, void*);
- static void cb_Volume(WidgetPDial*, void*);
- void cb_Vel_i(WidgetPDial*, void*);
- static void cb_Vel(WidgetPDial*, void*);
- void cb_Vel1_i(WidgetPDial*, void*);
- static void cb_Vel1(WidgetPDial*, void*);
- void cb_Controllers_i(Fl_Button*, void*);
- static void cb_Controllers(Fl_Button*, void*);
- void cb_Portamento_i(Fl_Check_Button*, void*);
- static void cb_Portamento(Fl_Check_Button*, void*);
- void cb_Edit_i(Fl_Button*, void*);
- static void cb_Edit(Fl_Button*, void*);
- void cb_m1_i(Fl_Button*, void*);
- static void cb_m1(Fl_Button*, void*);
- void cb_M1_i(Fl_Button*, void*);
- static void cb_M1(Fl_Button*, void*);
- void cb_R1_i(Fl_Button*, void*);
- static void cb_R1(Fl_Button*, void*);
- void cb_MIDI_i(Fl_Choice*, void*);
- static void cb_MIDI(Fl_Choice*, void*);
-public:
- Fl_Choice *keylimitlist;
-private:
- void cb_keylimitlist_i(Fl_Choice*, void*);
- static void cb_keylimitlist(Fl_Choice*, void*);
- void cb_Mode_i(Fl_Choice*, void*);
- static void cb_Mode(Fl_Choice*, void*);
- void cb_Enabled_i(Fl_Check_Button*, void*);
- static void cb_Enabled(Fl_Check_Button*, void*);
- Fl_Double_Window *ctlwindow;
- void cb_Expr_i(Fl_Check_Button*, void*);
- static void cb_Expr(Fl_Check_Button*, void*);
- void cb_PanDpth_i(WidgetPDial*, void*);
- static void cb_PanDpth(WidgetPDial*, void*);
- void cb_FltCut_i(WidgetPDial*, void*);
- static void cb_FltCut(WidgetPDial*, void*);
- void cb_FltQ_i(WidgetPDial*, void*);
- static void cb_FltQ(WidgetPDial*, void*);
- void cb_BwDpth_i(WidgetPDial*, void*);
- static void cb_BwDpth(WidgetPDial*, void*);
- void cb_ModWh_i(WidgetPDial*, void*);
- static void cb_ModWh(WidgetPDial*, void*);
- void cb_PWheelB_i(Fl_Counter*, void*);
- static void cb_PWheelB(Fl_Counter*, void*);
- void cb_FMamp_i(Fl_Check_Button*, void*);
- static void cb_FMamp(Fl_Check_Button*, void*);
- void cb_Vol_i(Fl_Check_Button*, void*);
- static void cb_Vol(Fl_Check_Button*, void*);
- void cb_Sustain_i(Fl_Check_Button*, void*);
- static void cb_Sustain(Fl_Check_Button*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
- void cb_Reset_i(Fl_Button*, void*);
- static void cb_Reset(Fl_Button*, void*);
- void cb_Rcv_i(Fl_Check_Button*, void*);
- static void cb_Rcv(Fl_Check_Button*, void*);
- void cb_time_i(WidgetPDial*, void*);
- static void cb_time(WidgetPDial*, void*);
- void cb_thresh_i(Fl_Counter*, void*);
- static void cb_thresh(Fl_Counter*, void*);
- void cb_th_i(Fl_Check_Button*, void*);
- static void cb_th(Fl_Check_Button*, void*);
- void cb_t_i(WidgetPDial*, void*);
- static void cb_t(WidgetPDial*, void*);
-public:
- WidgetPDial *propta;
-private:
- void cb_propta_i(WidgetPDial*, void*);
- static void cb_propta(WidgetPDial*, void*);
-public:
- WidgetPDial *proptb;
-private:
- void cb_proptb_i(WidgetPDial*, void*);
- static void cb_proptb(WidgetPDial*, void*);
- void cb_Proprt_i(Fl_Check_Button*, void*);
- static void cb_Proprt(Fl_Check_Button*, void*);
- void cb_BWdpth_i(WidgetPDial*, void*);
- static void cb_BWdpth(WidgetPDial*, void*);
- void cb_CFdpth_i(WidgetPDial*, void*);
- static void cb_CFdpth(WidgetPDial*, void*);
- void cb_Exp_i(Fl_Check_Button*, void*);
- static void cb_Exp(Fl_Check_Button*, void*);
- void cb_Exp1_i(Fl_Check_Button*, void*);
- static void cb_Exp1(Fl_Check_Button*, void*);
- Fl_Double_Window *partfx;
-public:
- Fl_Counter *inseffnocounter;
-private:
- void cb_inseffnocounter_i(Fl_Counter*, void*);
- static void cb_inseffnocounter(Fl_Counter*, void*);
-public:
- Fl_Choice *insefftype;
-private:
- void cb_insefftype_i(Fl_Choice*, void*);
- static void cb_insefftype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_insefftype[];
-public:
- Fl_Group *inseffectuigroup;
- EffUI *inseffectui;
-private:
- void cb_Close1_i(Fl_Button*, void*);
- static void cb_Close1(Fl_Button*, void*);
-public:
- Fl_Choice *sendtochoice;
-private:
- void cb_sendtochoice_i(Fl_Choice*, void*);
- static void cb_sendtochoice(Fl_Choice*, void*);
- static Fl_Menu_Item menu_sendtochoice[];
-public:
- Fl_Check_Button *bypasseff;
-private:
- void cb_bypasseff_i(Fl_Check_Button*, void*);
- static void cb_bypasseff(Fl_Check_Button*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- Fl_Double_Window *instrumentkitlist;
-private:
- void cb_Close2_i(Fl_Button*, void*);
- static void cb_Close2(Fl_Button*, void*);
-public:
- Fl_Scroll *kitlist;
-private:
- void cb_Mode1_i(Fl_Choice*, void*);
- static void cb_Mode1(Fl_Choice*, void*);
- static Fl_Menu_Item menu_Mode[];
- void cb_Drum_i(Fl_Check_Button*, void*);
- static void cb_Drum(Fl_Check_Button*, void*);
-public:
- Fl_Double_Window *instrumenteditwindow;
- Fl_Button *padeditbutton;
-private:
- void cb_padeditbutton1_i(Fl_Button*, void*);
- static void cb_padeditbutton1(Fl_Button*, void*);
-public:
- Fl_Check_Button *padsynenabledcheck;
-private:
- void cb_padsynenabledcheck_i(Fl_Check_Button*, void*);
- static void cb_padsynenabledcheck(Fl_Check_Button*, void*);
-public:
- Fl_Check_Button *adsynenabledcheck;
-private:
- void cb_adsynenabledcheck_i(Fl_Check_Button*, void*);
- static void cb_adsynenabledcheck(Fl_Check_Button*, void*);
-public:
- Fl_Button *adeditbutton;
-private:
- void cb_adeditbutton1_i(Fl_Button*, void*);
- static void cb_adeditbutton1(Fl_Button*, void*);
-public:
- Fl_Check_Button *subsynenabledcheck;
-private:
- void cb_subsynenabledcheck_i(Fl_Check_Button*, void*);
- static void cb_subsynenabledcheck(Fl_Check_Button*, void*);
-public:
- Fl_Button *subeditbutton;
-private:
- void cb_subeditbutton1_i(Fl_Button*, void*);
- static void cb_subeditbutton1(Fl_Button*, void*);
- void cb_Kit_i(Fl_Button*, void*);
- static void cb_Kit(Fl_Button*, void*);
- void cb_Effects_i(Fl_Button*, void*);
- static void cb_Effects(Fl_Button*, void*);
- void cb_Author_i(Fl_Input*, void*);
- static void cb_Author(Fl_Input*, void*);
- void cb_Comments_i(Fl_Input*, void*);
- static void cb_Comments(Fl_Input*, void*);
- void cb_Type_i(Fl_Choice*, void*);
- static void cb_Type(Fl_Choice*, void*);
- static Fl_Menu_Item menu_Type[];
- void cb_Close3_i(Fl_Button*, void*);
- static void cb_Close3(Fl_Button*, void*);
-public:
- PartUI(int x,int y, int w, int h, const char *label=0);
- void init(Part *part_,Master *master_,int npart_,BankUI *bankui_);
- void showparameters(int kititem,int engine);
- ~PartUI();
-private:
- Part *part;
- Master *master;
- BankUI *bankui;
- ADnoteUI *adnoteui;
- SUBnoteUI *subnoteui;
- PADnoteUI *padnoteui;
- PartSysEffSend *psyef[NUM_SYS_EFX];
- int npart;
- int ninseff;
- int lastkititem;
- PartKitItem *partkititem[NUM_KIT_ITEMS];
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/PresetsUI.cc b/plugins/zynaddsubfx/src/UI/PresetsUI.cc
deleted file mode 100644
index 56be5f4..0000000
--- a/plugins/zynaddsubfx/src/UI/PresetsUI.cc
+++ /dev/null
@@ -1,274 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "PresetsUI.h"
-#include "../Params/PresetsArray.h"
-
-void PresetsUI_::refresh() {
- ;
-}
-
-PresetsUI_::~PresetsUI_() {
- ;
-}
-
-void PresetsUI::cb_copybrowse_i(Fl_Browser* o, void*) {
- int val=o->value();
-if (val!=0){
- presetname->cut(0,presetname->maximum_size());
- presetname->insert(o->text(val));
-};
-}
-void PresetsUI::cb_copybrowse(Fl_Browser* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_copybrowse_i(o,v);
-}
-
-void PresetsUI::cb_copypbutton_i(Fl_Button*, void*) {
- const char *tmp=presetname->value();
-if (tmp!=NULL) {
- if (strlen(tmp)>0){
- p->copy(tmp);
- copywin->hide();
- };
-};
-}
-void PresetsUI::cb_copypbutton(Fl_Button* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_copypbutton_i(o,v);
-}
-
-void PresetsUI::cb_copybutton_i(Fl_Button*, void*) {
- p->copy(NULL);
-copywin->hide();
-}
-void PresetsUI::cb_copybutton(Fl_Button* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_copybutton_i(o,v);
-}
-
-void PresetsUI::cb_Cancel_i(Fl_Button*, void*) {
- copywin->hide();
-}
-void PresetsUI::cb_Cancel(Fl_Button* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_Cancel_i(o,v);
-}
-
-void PresetsUI::cb_presetname_i(Fl_Input* o, void*) {
- const char *tmp=o->value();
-if (tmp==NULL) tmp="";
-if (strlen(tmp)>0) {
- copybutton->deactivate();
- copypbutton->activate();
-} else {
- copybutton->activate();
- copypbutton->deactivate();
-};
-}
-void PresetsUI::cb_presetname(Fl_Input* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_presetname_i(o,v);
-}
-
-void PresetsUI::cb_pastebrowse_i(Fl_Browser* o, void*) {
- if (o->value()==0) {
- pastepbutton->deactivate();
- deletepbutton->deactivate();
-}else{
- pastepbutton->activate();
- deletepbutton->activate();
-};
-}
-void PresetsUI::cb_pastebrowse(Fl_Browser* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_pastebrowse_i(o,v);
-}
-
-void PresetsUI::cb_pastepbutton_i(Fl_Button*, void*) {
- int n=pastebrowse->value();
-if (n!=0) p->paste(n);
-pastewin->hide();
-pui->refresh();
-}
-void PresetsUI::cb_pastepbutton(Fl_Button* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_pastepbutton_i(o,v);
-}
-
-void PresetsUI::cb_pastebutton_i(Fl_Button*, void*) {
- p->paste(0);
-pastewin->hide();
-pui->refresh();
-}
-void PresetsUI::cb_pastebutton(Fl_Button* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_pastebutton_i(o,v);
-}
-
-void PresetsUI::cb_Cancel1_i(Fl_Button*, void*) {
- pastewin->hide();
-}
-void PresetsUI::cb_Cancel1(Fl_Button* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_Cancel1_i(o,v);
-}
-
-void PresetsUI::cb_deletepbutton_i(Fl_Button*, void*) {
- int n=pastebrowse->value();
-if (n!=0) p->deletepreset(n);
-rescan();
-}
-void PresetsUI::cb_deletepbutton(Fl_Button* o, void* v) {
- ((PresetsUI*)(o->parent()->user_data()))->cb_deletepbutton_i(o,v);
-}
-
-PresetsUI::PresetsUI() {
- p=NULL;
- make_window();
-}
-
-PresetsUI::~PresetsUI() {
- copywin->hide();delete(copywin);
- pastewin->hide();delete(pastewin);
-}
-
-Fl_Double_Window* PresetsUI::make_window() {
- { copywin = new Fl_Double_Window(265, 430, "Copy to Clipboard/Preset");
- copywin->box(FL_PLASTIC_THIN_UP_BOX);
- copywin->color((Fl_Color)238);
- copywin->user_data((void*)(this));
- { copybrowse = new Fl_Browser(10, 25, 245, 320);
- copybrowse->type(1);
- copybrowse->callback((Fl_Callback*)cb_copybrowse);
- } // Fl_Browser* copybrowse
- { copypbutton = new Fl_Button(145, 355, 110, 20, "Copy to Preset");
- copypbutton->box(FL_THIN_UP_BOX);
- copypbutton->callback((Fl_Callback*)cb_copypbutton);
- } // Fl_Button* copypbutton
- { copybutton = new Fl_Button(25, 385, 90, 35, "Copy to Clipboard");
- copybutton->box(FL_THIN_UP_BOX);
- copybutton->callback((Fl_Callback*)cb_copybutton);
- copybutton->align(Fl_Align(192));
- } // Fl_Button* copybutton
- { Fl_Button* o = new Fl_Button(160, 385, 80, 35, "Cancel");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Cancel);
- o->align(Fl_Align(192));
- } // Fl_Button* o
- { Fl_Box* o = new Fl_Box(10, 5, 40, 15, "Type:");
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { copytypetext = new Fl_Box(50, 5, 205, 15);
- copytypetext->box(FL_FLAT_BOX);
- copytypetext->color((Fl_Color)238);
- copytypetext->labelfont(1);
- copytypetext->labelsize(11);
- copytypetext->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- } // Fl_Box* copytypetext
- { presetname = new Fl_Input(10, 355, 130, 20);
- presetname->callback((Fl_Callback*)cb_presetname);
- presetname->when(FL_WHEN_CHANGED);
- } // Fl_Input* presetname
- copywin->set_modal();
- copywin->end();
- } // Fl_Double_Window* copywin
- { pastewin = new Fl_Double_Window(265, 430, "Paste from Clipboard/Preset");
- pastewin->box(FL_PLASTIC_THIN_UP_BOX);
- pastewin->color((Fl_Color)238);
- pastewin->user_data((void*)(this));
- { pastebrowse = new Fl_Browser(10, 25, 245, 320);
- pastebrowse->type(2);
- pastebrowse->callback((Fl_Callback*)cb_pastebrowse);
- } // Fl_Browser* pastebrowse
- { pastepbutton = new Fl_Button(10, 355, 160, 20, "Paste from Preset");
- pastepbutton->box(FL_THIN_UP_BOX);
- pastepbutton->callback((Fl_Callback*)cb_pastepbutton);
- } // Fl_Button* pastepbutton
- { pastebutton = new Fl_Button(25, 385, 90, 35, "Paste from Clipboard");
- pastebutton->box(FL_THIN_UP_BOX);
- pastebutton->callback((Fl_Callback*)cb_pastebutton);
- pastebutton->align(Fl_Align(192));
- } // Fl_Button* pastebutton
- { Fl_Button* o = new Fl_Button(160, 385, 80, 35, "Cancel");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Cancel1);
- o->align(Fl_Align(192));
- } // Fl_Button* o
- { pastetypetext = new Fl_Box(55, 5, 200, 15);
- pastetypetext->box(FL_FLAT_BOX);
- pastetypetext->color((Fl_Color)238);
- pastetypetext->labelfont(1);
- pastetypetext->labelsize(11);
- pastetypetext->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- } // Fl_Box* pastetypetext
- { Fl_Box* o = new Fl_Box(15, 5, 40, 15, "Type:");
- o->labelsize(11);
- o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- } // Fl_Box* o
- { deletepbutton = new Fl_Button(180, 355, 75, 20, "Delete");
- deletepbutton->box(FL_THIN_UP_BOX);
- deletepbutton->callback((Fl_Callback*)cb_deletepbutton);
- } // Fl_Button* deletepbutton
- pastewin->set_modal();
- pastewin->end();
- } // Fl_Double_Window* pastewin
- return pastewin;
-}
-
-void PresetsUI::copy(Presets *p) {
- copybutton->activate();
- copypbutton->deactivate();
-
-
- this->p=p;
- this->pui=NULL;
- bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
- presetname->cut(0,presetname->maximum_size());
-
- if (but) p->copy(NULL);
- else {
- rescan();
- copytypetext->label(&p->type[1]);
- copywin->show();
- };
-}
-
-void PresetsUI::paste(Presets *p,PresetsUI_ *pui) {
- this->p=p;
- this->pui=pui;
- bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
- pastepbutton->deactivate();
- deletepbutton->deactivate();
-
- if (but) {
- p->paste(0);
- pui->refresh();
- } else {
- rescan();
- pastetypetext->label(&p->type[1]);
- if (p->checkclipboardtype()) pastebutton->activate();
- else pastebutton->deactivate();
- pastewin->show();
- };
-}
-
-void PresetsUI::copy(Presets *p,int n) {
- PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
- if(pre)
- pre->setelement(n);
- copy(p);
-}
-
-void PresetsUI::paste(Presets *p,PresetsUI_ *pui,int n) {
- PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
- if(pre)
- pre->setelement(n);
- paste(p,pui);
-}
-
-void PresetsUI::rescan() {
- copybrowse->clear();
- pastebrowse->clear();
- p->rescanforpresets();
-
- for (unsigned int i=0;i<presetsstore.presets.size();i++){
- std::string name=presetsstore.presets[i].name;
- if(name.empty())
- continue;
- copybrowse->add(name.c_str());
- pastebrowse->add(name.c_str());
- };
-}
-PresetsUI *presetsui;
diff --git a/plugins/zynaddsubfx/src/UI/PresetsUI.fl b/plugins/zynaddsubfx/src/UI/PresetsUI.fl
deleted file mode 100644
index adf8da0..0000000
--- a/plugins/zynaddsubfx/src/UI/PresetsUI.fl
+++ /dev/null
@@ -1,208 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0107
-header_name {.h}
-code_name {.cc}
-decl {\#include <FL/fl_ask.H>} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include "../Params/PresetsArray.h"} {}
-
-decl {\#include "../Params/Presets.h"} {public
-}
-
-class PresetsUI_ {} {
- Function {refresh()} {open return_type {virtual void}
- } {code{;}}
- Function {~PresetsUI_()} {open return_type virtual
- } {code{;}}
-}
-
-class PresetsUI {} {
- Function {PresetsUI()} {} {
- code {p=NULL;
-make_window();} {}
- }
- Function {~PresetsUI()} {} {
- code {copywin->hide();delete(copywin);
-pastewin->hide();delete(pastewin);} {}
- }
- Function {make_window()} {} {
- Fl_Window copywin {
- label {Copy to Clipboard/Preset}
- xywh {190 173 265 430} type Double box PLASTIC_THIN_UP_BOX color 238 hide modal
- } {
- Fl_Browser copybrowse {
- callback {int val=o->value();
-if (val!=0){
- presetname->cut(0,presetname->maximum_size());
- presetname->insert(o->text(val));
-};}
- xywh {10 25 245 320} type Select
- }
- Fl_Button copypbutton {
- label {Copy to Preset}
- callback {const char *tmp=presetname->value();
-if (tmp!=NULL) {
- if (strlen(tmp)>0){
- p->copy(tmp);
- copywin->hide();
- };
-};}
- xywh {145 355 110 20} box THIN_UP_BOX
- }
- Fl_Button copybutton {
- label {Copy to Clipboard}
- callback {p->copy(NULL);
-copywin->hide();}
- xywh {25 385 90 35} box THIN_UP_BOX align 192
- }
- Fl_Button {} {
- label Cancel
- callback {copywin->hide();}
- xywh {160 385 80 35} box THIN_UP_BOX align 192
- }
- Fl_Box {} {
- label {Type:}
- xywh {10 5 40 15} labelsize 11 align 20
- }
- Fl_Box copytypetext {
- xywh {50 5 205 15} box FLAT_BOX color 238 labelfont 1 labelsize 11 align 20
- }
- Fl_Input presetname {
- callback {const char *tmp=o->value();
-if (tmp==NULL) tmp="";
-if (strlen(tmp)>0) {
- copybutton->deactivate();
- copypbutton->activate();
-} else {
- copybutton->activate();
- copypbutton->deactivate();
-};}
- xywh {10 355 130 20} when 1
- }
- }
- Fl_Window pastewin {
- label {Paste from Clipboard/Preset}
- xywh {463 173 265 430} type Double box PLASTIC_THIN_UP_BOX color 238 hide modal
- } {
- Fl_Browser pastebrowse {
- callback {if (o->value()==0) {
- pastepbutton->deactivate();
- deletepbutton->deactivate();
-}else{
- pastepbutton->activate();
- deletepbutton->activate();
-};}
- xywh {10 25 245 320} type Hold
- }
- Fl_Button pastepbutton {
- label {Paste from Preset}
- callback {int n=pastebrowse->value();
-if (n!=0) p->paste(n);
-pastewin->hide();
-pui->refresh();}
- xywh {10 355 160 20} box THIN_UP_BOX
- }
- Fl_Button pastebutton {
- label {Paste from Clipboard}
- callback {p->paste(0);
-pastewin->hide();
-pui->refresh();}
- xywh {25 385 90 35} box THIN_UP_BOX align 192
- }
- Fl_Button {} {
- label Cancel
- callback {pastewin->hide();}
- xywh {160 385 80 35} box THIN_UP_BOX align 192
- }
- Fl_Box pastetypetext {
- xywh {55 5 200 15} box FLAT_BOX color 238 labelfont 1 labelsize 11 align 20
- }
- Fl_Box {} {
- label {Type:}
- xywh {15 5 40 15} labelsize 11 align 20
- }
- Fl_Button deletepbutton {
- label Delete
- callback {int n=pastebrowse->value();
-if (n!=0) p->deletepreset(n);
-rescan();}
- xywh {180 355 75 20} box THIN_UP_BOX
- }
- }
- }
- Function {copy(Presets *p)} {} {
- code {copybutton->activate();
-copypbutton->deactivate();
-
-
-this->p=p;
-this->pui=NULL;
-bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
-presetname->cut(0,presetname->maximum_size());
-
-if (but) p->copy(NULL);
- else {
- rescan();
- copytypetext->label(&p->type[1]);
- copywin->show();
- };} {}
- }
- Function {paste(Presets *p,PresetsUI_ *pui)} {} {
- code {this->p=p;
-this->pui=pui;
-bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
-pastepbutton->deactivate();
-deletepbutton->deactivate();
-
-if (but) {
- p->paste(0);
- pui->refresh();
-} else {
- rescan();
- pastetypetext->label(&p->type[1]);
- if (p->checkclipboardtype()) pastebutton->activate();
- else pastebutton->deactivate();
- pastewin->show();
- };} {}
- }
- Function {copy(Presets *p,int n)} {} {
- code {PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
-if(pre)
- pre->setelement(n);
-copy(p);} {}
- }
- Function {paste(Presets *p,PresetsUI_ *pui,int n)} {} {
- code {PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
-if(pre)
- pre->setelement(n);
-paste(p,pui);} {}
- }
- Function {rescan()} {} {
- code {copybrowse->clear();
-pastebrowse->clear();
-p->rescanforpresets();
-
-for (int i=0;i<presetsstore.presets.size();i++){
- std::string name=presetsstore.presets[i].name;
- if(name.empty())
- continue;
- copybrowse->add(name.c_str());
- pastebrowse->add(name.c_str());
-};} {selected
- }
- }
- decl {Presets *p;} {public
- }
- decl {PresetsUI_ *pui;} {public
- }
-}
-
-decl {PresetsUI *presetsui;} {public
-}
diff --git a/plugins/zynaddsubfx/src/UI/PresetsUI.h b/plugins/zynaddsubfx/src/UI/PresetsUI.h
deleted file mode 100644
index 4adf0f1..0000000
--- a/plugins/zynaddsubfx/src/UI/PresetsUI.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef PresetsUI_h
-#define PresetsUI_h
-#include <FL/Fl.H>
-#include <FL/fl_ask.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include "../Params/Presets.h"
-
-class PresetsUI_ {
-public:
- virtual void refresh();
- virtual ~PresetsUI_();
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Browser.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Input.H>
-
-class PresetsUI {
-public:
- PresetsUI();
- ~PresetsUI();
- Fl_Double_Window* make_window();
- Fl_Double_Window *copywin;
- Fl_Browser *copybrowse;
-private:
- void cb_copybrowse_i(Fl_Browser*, void*);
- static void cb_copybrowse(Fl_Browser*, void*);
-public:
- Fl_Button *copypbutton;
-private:
- void cb_copypbutton_i(Fl_Button*, void*);
- static void cb_copypbutton(Fl_Button*, void*);
-public:
- Fl_Button *copybutton;
-private:
- void cb_copybutton_i(Fl_Button*, void*);
- static void cb_copybutton(Fl_Button*, void*);
- void cb_Cancel_i(Fl_Button*, void*);
- static void cb_Cancel(Fl_Button*, void*);
-public:
- Fl_Box *copytypetext;
- Fl_Input *presetname;
-private:
- void cb_presetname_i(Fl_Input*, void*);
- static void cb_presetname(Fl_Input*, void*);
-public:
- Fl_Double_Window *pastewin;
- Fl_Browser *pastebrowse;
-private:
- void cb_pastebrowse_i(Fl_Browser*, void*);
- static void cb_pastebrowse(Fl_Browser*, void*);
-public:
- Fl_Button *pastepbutton;
-private:
- void cb_pastepbutton_i(Fl_Button*, void*);
- static void cb_pastepbutton(Fl_Button*, void*);
-public:
- Fl_Button *pastebutton;
-private:
- void cb_pastebutton_i(Fl_Button*, void*);
- static void cb_pastebutton(Fl_Button*, void*);
- void cb_Cancel1_i(Fl_Button*, void*);
- static void cb_Cancel1(Fl_Button*, void*);
-public:
- Fl_Box *pastetypetext;
- Fl_Button *deletepbutton;
-private:
- void cb_deletepbutton_i(Fl_Button*, void*);
- static void cb_deletepbutton(Fl_Button*, void*);
-public:
- void copy(Presets *p);
- void paste(Presets *p,PresetsUI_ *pui);
- void copy(Presets *p,int n);
- void paste(Presets *p,PresetsUI_ *pui,int n);
- void rescan();
- Presets *p;
- PresetsUI_ *pui;
-};
-extern PresetsUI *presetsui;
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/ResonanceUI.cc b/plugins/zynaddsubfx/src/UI/ResonanceUI.cc
deleted file mode 100644
index 3481134..0000000
--- a/plugins/zynaddsubfx/src/UI/ResonanceUI.cc
+++ /dev/null
@@ -1,553 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "ResonanceUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-ResonanceGraph::ResonanceGraph(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- respar=NULL;
- cbwidget=NULL;
- applybutton=NULL;
-}
-
-void ResonanceGraph::init(Resonance *respar_,Fl_Value_Output *khzvalue_,Fl_Value_Output *dbvalue_) {
- respar=respar_;
- khzvalue=khzvalue_;
- dbvalue=dbvalue_;
- oldx=-1;
- khzval=-1;
-}
-
-void ResonanceGraph::draw_freq_line(REALTYPE freq,int type) {
- REALTYPE freqx=respar->getfreqpos(freq);
- switch(type){
- case 0:fl_line_style(FL_SOLID);break;
- case 1:fl_line_style(FL_DOT);break;
- case 2:fl_line_style(FL_DASH);break;
- };
-
-
- if ((freqx>0.0)&&(freqx<1.0))
- fl_line(x()+(int) (freqx*w()),y(),
- x()+(int) (freqx*w()),y()+h());
-}
-
-void ResonanceGraph::draw() {
- int ox=x(),oy=y(),lx=w(),ly=h(),i,ix,iy,oiy;
- REALTYPE freqx;
-
- fl_color(FL_BLACK);
- fl_rectf(ox,oy,lx,ly);
-
-
- //draw the lines
- fl_color(FL_GRAY);
-
- fl_line_style(FL_SOLID);
- fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-
- freqx=respar->getfreqpos(1000.0);
- if ((freqx>0.0)&&(freqx<1.0))
- fl_line(ox+(int) (freqx*lx),oy,
- ox+(int) (freqx*lx),oy+ly);
-
- for (i=1;i<10;i++){
- if(i==1){
- draw_freq_line(i*100.0,0);
- draw_freq_line(i*1000.0,0);
- }else
- if (i==5){
- draw_freq_line(i*100.0,2);
- draw_freq_line(i*1000.0,2);
- }else{
- draw_freq_line(i*100.0,1);
- draw_freq_line(i*1000.0,1);
- };
- };
-
- draw_freq_line(10000.0,0);
- draw_freq_line(20000.0,1);
-
- fl_line_style(FL_DOT);
- int GY=10;if (ly<GY*3) GY=-1;
- for (i=1;i<GY;i++){
- int tmp=(int)(ly/(REALTYPE)GY*i);
- fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
- };
-
-
-
- //draw the data
- fl_color(FL_RED);
- fl_line_style(FL_SOLID);
- oiy=(int)(respar->Prespoints[0]/128.0*ly);
- for (i=1;i<N_RES_POINTS;i++){
- ix=(int)(i*1.0/N_RES_POINTS*lx);
- iy=(int)(respar->Prespoints[i]/128.0*ly);
- fl_line(ox+ix-1,oy+ly-oiy,ox+ix,oy+ly-iy);
- oiy=iy;
- };
-}
-
-int ResonanceGraph::handle(int event) {
- int x_=Fl::event_x()-x();
- int y_=Fl::event_y()-y();
- if ( (x_>=0)&&(x_<w()) && (y_>=0)&&(y_<h())){
- khzvalue->value(respar->getfreqx(x_*1.0/w())/1000.0);
- dbvalue->value((1.0-y_*2.0/h())*respar->PmaxdB);
- };
-
- if ((event==FL_PUSH)||(event==FL_DRAG)){
- int leftbutton=1;
- if (Fl::event_button()==FL_RIGHT_MOUSE) leftbutton=0;
- if (x_<0) x_=0;if (y_<0) y_=0;
- if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1;
-
- if ((oldx<0)||(oldx==x_)){
- int sn=(int)(x_*1.0/w()*N_RES_POINTS);
- int sp=127-(int)(y_*1.0/h()*127);
- if (leftbutton!=0) respar->setpoint(sn,sp);
- else respar->setpoint(sn,64);
- } else {
- int x1=oldx;
- int x2=x_;
- int y1=oldy;
- int y2=y_;
- if (oldx>x_){
- x1=x_;y1=y_;
- x2=oldx;y2=oldy;
- };
- for (int i=0;i<x2-x1;i++){
- int sn=(int)((i+x1)*1.0/w()*N_RES_POINTS);
- REALTYPE yy=(y2-y1)*1.0/(x2-x1)*i;
- int sp=127-(int)((y1+yy)/h()*127);
- if (leftbutton!=0) respar->setpoint(sn,sp);
- else respar->setpoint(sn,64);
- };
- };
-
- oldx=x_;oldy=y_;
- redraw();
- };
-
- if (event==FL_RELEASE) {
- oldx=-1;
- if (cbwidget!=NULL) {
- cbwidget->do_callback();
- if (applybutton!=NULL) {
- applybutton->color(FL_RED);
- applybutton->redraw();
-
- };
- };
- };
-
- return(1);
-}
-
-void ResonanceGraph::setcbwidget(Fl_Widget *cbwidget,Fl_Widget *applybutton) {
- this->cbwidget=cbwidget;
- this->applybutton=applybutton;
-}
-
-void ResonanceUI::cb_Close_i(Fl_Button*, void*) {
- resonancewindow->hide();
-}
-void ResonanceUI::cb_Close(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void ResonanceUI::cb_Zero_i(Fl_Button*, void*) {
- for (int i=0;i<N_RES_POINTS;i++)
- respar->setpoint(i,64);
-resonancewindow->redraw();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_Zero(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_Zero_i(o,v);
-}
-
-void ResonanceUI::cb_Smooth_i(Fl_Button*, void*) {
- respar->smooth();
-resonancewindow->redraw();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_Smooth(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_Smooth_i(o,v);
-}
-
-void ResonanceUI::cb_enabled_i(Fl_Check_Button* o, void*) {
- respar->Penabled=(int) o->value();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_enabled(Fl_Check_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_enabled_i(o,v);
-}
-
-void ResonanceUI::cb_maxdb_i(Fl_Roller* o, void*) {
- maxdbvo->value(o->value());
-respar->PmaxdB=(int) o->value();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_maxdb(Fl_Roller* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_maxdb_i(o,v);
-}
-
-void ResonanceUI::cb_maxdbvo_i(Fl_Value_Output* o, void*) {
- o->value(respar->PmaxdB);
-}
-void ResonanceUI::cb_maxdbvo(Fl_Value_Output* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_maxdbvo_i(o,v);
-}
-
-void ResonanceUI::cb_centerfreqvo_i(Fl_Value_Output* o, void*) {
- o->value(respar->getcenterfreq()/1000.0);
-}
-void ResonanceUI::cb_centerfreqvo(Fl_Value_Output* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_centerfreqvo_i(o,v);
-}
-
-void ResonanceUI::cb_octavesfreqvo_i(Fl_Value_Output* o, void*) {
- o->value(respar->getoctavesfreq());
-}
-void ResonanceUI::cb_octavesfreqvo(Fl_Value_Output* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_octavesfreqvo_i(o,v);
-}
-
-void ResonanceUI::cb_RND2_i(Fl_Button*, void*) {
- respar->randomize(1);
-resonancewindow->redraw();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_RND2(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_RND2_i(o,v);
-}
-
-void ResonanceUI::cb_RND1_i(Fl_Button*, void*) {
- respar->randomize(0);
-resonancewindow->redraw();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_RND1(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_RND1_i(o,v);
-}
-
-void ResonanceUI::cb_RND3_i(Fl_Button*, void*) {
- respar->randomize(2);
-resonancewindow->redraw();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_RND3(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_RND3_i(o,v);
-}
-
-void ResonanceUI::cb_p1st_i(Fl_Check_Button* o, void*) {
- respar->Pprotectthefundamental=(int) o->value();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_p1st(Fl_Check_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_p1st_i(o,v);
-}
-
-void ResonanceUI::cb_InterpP_i(Fl_Button*, void*) {
- int type;
-if (Fl::event_button()==FL_LEFT_MOUSE) type=0;
- else type=1;
-respar->interpolatepeaks(type);
-resonancewindow->redraw();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_InterpP(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_InterpP_i(o,v);
-}
-
-void ResonanceUI::cb_centerfreq_i(WidgetPDial* o, void*) {
- respar->Pcenterfreq=(int)o->value();
-centerfreqvo->do_callback();
-rg->redraw();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_centerfreq(WidgetPDial* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_centerfreq_i(o,v);
-}
-
-void ResonanceUI::cb_octavesfreq_i(WidgetPDial* o, void*) {
- respar->Poctavesfreq=(int)o->value();
-octavesfreqvo->do_callback();
-rg->redraw();
-redrawPADnoteApply();
-}
-void ResonanceUI::cb_octavesfreq(WidgetPDial* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_octavesfreq_i(o,v);
-}
-
-void ResonanceUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(respar);
-}
-void ResonanceUI::cb_C(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void ResonanceUI::cb_P_i(Fl_Button*, void*) {
- presetsui->paste(respar,this);
-}
-void ResonanceUI::cb_P(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_P_i(o,v);
-}
-
-void ResonanceUI::cb_applybutton_i(Fl_Button*, void*) {
- applybutton->color(FL_GRAY);
-applybutton->redraw();
-if (cbapplywidget!=NULL) {
- cbapplywidget->do_callback();
- cbapplywidget->color(FL_GRAY);
- cbapplywidget->redraw();
-};
-}
-void ResonanceUI::cb_applybutton(Fl_Button* o, void* v) {
- ((ResonanceUI*)(o->parent()->user_data()))->cb_applybutton_i(o,v);
-}
-
-Fl_Double_Window* ResonanceUI::make_window() {
- { resonancewindow = new Fl_Double_Window(780, 305, "Resonance");
- resonancewindow->user_data((void*)(this));
- { khzvalue = new Fl_Value_Output(415, 264, 45, 18, "kHz");
- khzvalue->labelsize(12);
- khzvalue->minimum(0.001);
- khzvalue->maximum(48);
- khzvalue->step(0.01);
- khzvalue->textfont(1);
- khzvalue->textsize(12);
- khzvalue->align(Fl_Align(FL_ALIGN_RIGHT));
- //this widget must be before the calling widgets
- } // Fl_Value_Output* khzvalue
- { dbvalue = new Fl_Value_Output(415, 282, 45, 18, "dB");
- dbvalue->labelsize(12);
- dbvalue->minimum(-150);
- dbvalue->maximum(150);
- dbvalue->step(0.1);
- dbvalue->textfont(1);
- dbvalue->textsize(12);
- dbvalue->align(Fl_Align(FL_ALIGN_RIGHT));
- //this widget must be before the calling widgets
- } // Fl_Value_Output* dbvalue
- { Fl_Group* o = new Fl_Group(6, 5, 768, 256);
- o->box(FL_BORDER_BOX);
- rg=new ResonanceGraph(o->x(),o->y(),o->w(),o->h(),"");
- rg->init(respar,khzvalue,dbvalue);
- rg->show();
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(690, 283, 84, 17, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(491, 264, 66, 15, "Zero");
- o->tooltip("Clear the resonance function");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(12);
- o->callback((Fl_Callback*)cb_Zero);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(491, 282, 66, 18, "Smooth");
- o->tooltip("Smooth the resonance function");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(12);
- o->callback((Fl_Callback*)cb_Smooth);
- } // Fl_Button* o
- { Fl_Check_Button* o = enabled = new Fl_Check_Button(6, 270, 78, 27, "Enable");
- enabled->box(FL_THIN_UP_BOX);
- enabled->down_box(FL_DOWN_BOX);
- enabled->callback((Fl_Callback*)cb_enabled);
- o->value(respar->Penabled);
- } // Fl_Check_Button* enabled
- { maxdb = new Fl_Roller(90, 282, 84, 15);
- maxdb->type(1);
- maxdb->minimum(1);
- maxdb->maximum(90);
- maxdb->step(1);
- maxdb->value(30);
- maxdb->callback((Fl_Callback*)cb_maxdb);
- } // Fl_Roller* maxdb
- { Fl_Value_Output* o = maxdbvo = new Fl_Value_Output(126, 264, 24, 18, "Max.");
- maxdbvo->tooltip("The Maximum amplitude (dB)");
- maxdbvo->labelsize(12);
- maxdbvo->minimum(1);
- maxdbvo->maximum(127);
- maxdbvo->step(1);
- maxdbvo->value(30);
- maxdbvo->textfont(1);
- maxdbvo->textsize(12);
- maxdbvo->callback((Fl_Callback*)cb_maxdbvo);
- o->value(respar->PmaxdB);
- } // Fl_Value_Output* maxdbvo
- { new Fl_Box(150, 264, 24, 18, "dB");
- } // Fl_Box* o
- { Fl_Value_Output* o = centerfreqvo = new Fl_Value_Output(210, 264, 33, 18, "C.f.");
- centerfreqvo->tooltip("Center Frequency (kHz)");
- centerfreqvo->labelsize(12);
- centerfreqvo->minimum(1);
- centerfreqvo->maximum(10);
- centerfreqvo->step(0.01);
- centerfreqvo->value(1);
- centerfreqvo->textfont(1);
- centerfreqvo->textsize(12);
- centerfreqvo->callback((Fl_Callback*)cb_centerfreqvo);
- centerfreqvo->when(3);
- o->value(respar->getcenterfreq()/1000.0);
- } // Fl_Value_Output* centerfreqvo
- { Fl_Value_Output* o = octavesfreqvo = new Fl_Value_Output(210, 282, 33, 18, "Oct.");
- octavesfreqvo->tooltip("No. of octaves");
- octavesfreqvo->labelsize(12);
- octavesfreqvo->minimum(1);
- octavesfreqvo->maximum(127);
- octavesfreqvo->step(1);
- octavesfreqvo->value(30);
- octavesfreqvo->textfont(1);
- octavesfreqvo->textsize(12);
- octavesfreqvo->callback((Fl_Callback*)cb_octavesfreqvo);
- octavesfreqvo->when(3);
- o->value(respar->getoctavesfreq());
- } // Fl_Value_Output* octavesfreqvo
- { Fl_Button* o = new Fl_Button(566, 276, 42, 12, "RND2");
- o->tooltip("Randomize the resonance function");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_RND2);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(566, 264, 42, 12, "RND1");
- o->tooltip("Randomize the resonance function");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_RND1);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(566, 288, 42, 12, "RND3");
- o->tooltip("Randomize the resonance function");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_RND3);
- } // Fl_Button* o
- { Fl_Check_Button* o = p1st = new Fl_Check_Button(365, 285, 45, 15, "P.1st");
- p1st->tooltip("Protect the fundamental frequency (do not damp the first harmonic)");
- p1st->down_box(FL_DOWN_BOX);
- p1st->labelsize(10);
- p1st->callback((Fl_Callback*)cb_p1st);
- o->value(respar->Pprotectthefundamental);
- } // Fl_Check_Button* p1st
- { Fl_Button* o = new Fl_Button(365, 265, 46, 15, "InterpP");
- o->tooltip("Interpolate the peaks");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(10);
- o->callback((Fl_Callback*)cb_InterpP);
- } // Fl_Button* o
- { WidgetPDial* o = centerfreq = new WidgetPDial(245, 265, 30, 30, "C.f.");
- centerfreq->box(FL_ROUND_UP_BOX);
- centerfreq->color(FL_BACKGROUND_COLOR);
- centerfreq->selection_color(FL_INACTIVE_COLOR);
- centerfreq->labeltype(FL_NORMAL_LABEL);
- centerfreq->labelfont(0);
- centerfreq->labelsize(10);
- centerfreq->labelcolor(FL_FOREGROUND_COLOR);
- centerfreq->maximum(127);
- centerfreq->step(1);
- centerfreq->callback((Fl_Callback*)cb_centerfreq);
- centerfreq->align(Fl_Align(FL_ALIGN_BOTTOM));
- centerfreq->when(FL_WHEN_CHANGED);
- o->value(respar->Pcenterfreq);
- } // WidgetPDial* centerfreq
- { WidgetPDial* o = octavesfreq = new WidgetPDial(280, 265, 30, 30, "Oct.");
- octavesfreq->box(FL_ROUND_UP_BOX);
- octavesfreq->color(FL_BACKGROUND_COLOR);
- octavesfreq->selection_color(FL_INACTIVE_COLOR);
- octavesfreq->labeltype(FL_NORMAL_LABEL);
- octavesfreq->labelfont(0);
- octavesfreq->labelsize(10);
- octavesfreq->labelcolor(FL_FOREGROUND_COLOR);
- octavesfreq->maximum(127);
- octavesfreq->step(1);
- octavesfreq->callback((Fl_Callback*)cb_octavesfreq);
- octavesfreq->align(Fl_Align(FL_ALIGN_BOTTOM));
- octavesfreq->when(FL_WHEN_CHANGED);
- o->value(respar->Poctavesfreq);
- } // WidgetPDial* octavesfreq
- { Fl_Button* o = new Fl_Button(625, 275, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(655, 275, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- { applybutton = new Fl_Button(690, 265, 85, 15, "Apply");
- applybutton->box(FL_THIN_UP_BOX);
- applybutton->labelfont(1);
- applybutton->labelsize(11);
- applybutton->callback((Fl_Callback*)cb_applybutton);
- } // Fl_Button* applybutton
- resonancewindow->end();
- } // Fl_Double_Window* resonancewindow
- return resonancewindow;
-}
-
-ResonanceUI::ResonanceUI(Resonance *respar_) {
- respar=respar_;
- cbwidget=NULL;
- cbapplywidget=NULL;
- make_window();
- applybutton->hide();
-}
-
-ResonanceUI::~ResonanceUI() {
- resonancewindow->hide();
-}
-
-void ResonanceUI::redrawPADnoteApply() {
- if (cbwidget!=NULL) {
- cbwidget->do_callback();
- applybutton->color(FL_RED);
- applybutton->redraw();
- };
-}
-
-void ResonanceUI::setcbwidget(Fl_Widget *cbwidget,Fl_Widget *cbapplywidget) {
- this->cbwidget=cbwidget;
- this->cbapplywidget=cbapplywidget;
- rg->setcbwidget(cbwidget,applybutton);
- applybutton->show();
-}
-
-void ResonanceUI::refresh() {
- redrawPADnoteApply();
-
- enabled->value(respar->Penabled);
-
- maxdb->value(respar->PmaxdB);
- maxdbvo->value(respar->PmaxdB);
-
- centerfreqvo->value(respar->getcenterfreq()/1000.0);
- octavesfreqvo->value(respar->getoctavesfreq());
-
- centerfreq->value(respar->Pcenterfreq);
- octavesfreq->value(respar->Poctavesfreq);
-
- p1st->value(respar->Pprotectthefundamental);
-
- rg->redraw();
-}
diff --git a/plugins/zynaddsubfx/src/UI/ResonanceUI.fl b/plugins/zynaddsubfx/src/UI/ResonanceUI.fl
deleted file mode 100644
index 3c06c52..0000000
--- a/plugins/zynaddsubfx/src/UI/ResonanceUI.fl
+++ /dev/null
@@ -1,392 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0107
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <FL/Fl_Box.H>} {public
-}
-
-decl {\#include <FL/fl_draw.H>} {public
-}
-
-decl {\#include <FL/Fl_Value_Output.H>} {public
-}
-
-decl {\#include <math.h>} {}
-
-decl {\#include <stdio.h>} {}
-
-decl {\#include <stdlib.h>} {}
-
-decl {\#include <string.h>} {}
-
-decl {\#include "../Synth/Resonance.h"} {public
-}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class ResonanceGraph {: {public Fl_Box}
-} {
- Function {ResonanceGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {respar=NULL;
-cbwidget=NULL;
-applybutton=NULL;} {}
- }
- Function {init(Resonance *respar_,Fl_Value_Output *khzvalue_,Fl_Value_Output *dbvalue_)} {} {
- code {respar=respar_;
-khzvalue=khzvalue_;
-dbvalue=dbvalue_;
-oldx=-1;
-khzval=-1;} {}
- }
- Function {draw_freq_line(REALTYPE freq,int type)} {} {
- code {REALTYPE freqx=respar->getfreqpos(freq);
-switch(type){
- case 0:fl_line_style(FL_SOLID);break;
- case 1:fl_line_style(FL_DOT);break;
- case 2:fl_line_style(FL_DASH);break;
-};
-
-
-if ((freqx>0.0)&&(freqx<1.0))
- fl_line(x()+(int) (freqx*w()),y(),
- x()+(int) (freqx*w()),y()+h());} {}
- }
- Function {draw()} {} {
- code {int ox=x(),oy=y(),lx=w(),ly=h(),i,ix,iy,oiy;
-REALTYPE freqx;
-
-fl_color(FL_BLACK);
-fl_rectf(ox,oy,lx,ly);
-
-
-//draw the lines
-fl_color(FL_GRAY);
-
-fl_line_style(FL_SOLID);
-fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
-
-freqx=respar->getfreqpos(1000.0);
-if ((freqx>0.0)&&(freqx<1.0))
- fl_line(ox+(int) (freqx*lx),oy,
- ox+(int) (freqx*lx),oy+ly);
-
-for (i=1;i<10;i++){
- if(i==1){
- draw_freq_line(i*100.0,0);
- draw_freq_line(i*1000.0,0);
- }else
- if (i==5){
- draw_freq_line(i*100.0,2);
- draw_freq_line(i*1000.0,2);
- }else{
- draw_freq_line(i*100.0,1);
- draw_freq_line(i*1000.0,1);
- };
-};
-
-draw_freq_line(10000.0,0);
-draw_freq_line(20000.0,1);
-
-fl_line_style(FL_DOT);
-int GY=10;if (ly<GY*3) GY=-1;
-for (i=1;i<GY;i++){
- int tmp=(int)(ly/(REALTYPE)GY*i);
- fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
-};
-
-
-
-//draw the data
-fl_color(FL_RED);
-fl_line_style(FL_SOLID);
-oiy=(int)(respar->Prespoints[0]/128.0*ly);
-for (i=1;i<N_RES_POINTS;i++){
- ix=(int)(i*1.0/N_RES_POINTS*lx);
- iy=(int)(respar->Prespoints[i]/128.0*ly);
- fl_line(ox+ix-1,oy+ly-oiy,ox+ix,oy+ly-iy);
- oiy=iy;
-};} {}
- }
- Function {handle(int event)} {return_type int
- } {
- code {int x_=Fl::event_x()-x();
-int y_=Fl::event_y()-y();
-if ( (x_>=0)&&(x_<w()) && (y_>=0)&&(y_<h())){
- khzvalue->value(respar->getfreqx(x_*1.0/w())/1000.0);
- dbvalue->value((1.0-y_*2.0/h())*respar->PmaxdB);
-};
-
-if ((event==FL_PUSH)||(event==FL_DRAG)){
- int leftbutton=1;
- if (Fl::event_button()==FL_RIGHT_MOUSE) leftbutton=0;
- if (x_<0) x_=0;if (y_<0) y_=0;
- if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1;
-
- if ((oldx<0)||(oldx==x_)){
- int sn=(int)(x_*1.0/w()*N_RES_POINTS);
- int sp=127-(int)(y_*1.0/h()*127);
- if (leftbutton!=0) respar->setpoint(sn,sp);
- else respar->setpoint(sn,64);
- } else {
- int x1=oldx;
- int x2=x_;
- int y1=oldy;
- int y2=y_;
- if (oldx>x_){
- x1=x_;y1=y_;
- x2=oldx;y2=oldy;
- };
- for (int i=0;i<x2-x1;i++){
- int sn=(int)((i+x1)*1.0/w()*N_RES_POINTS);
- REALTYPE yy=(y2-y1)*1.0/(x2-x1)*i;
- int sp=127-(int)((y1+yy)/h()*127);
- if (leftbutton!=0) respar->setpoint(sn,sp);
- else respar->setpoint(sn,64);
- };
- };
-
- oldx=x_;oldy=y_;
- redraw();
-};
-
-if (event==FL_RELEASE) {
- oldx=-1;
- if (cbwidget!=NULL) {
- cbwidget->do_callback();
- if (applybutton!=NULL) {
- applybutton->color(FL_RED);
- applybutton->redraw();
-
- };
- };
-};
-
-return(1);} {}
- }
- Function {setcbwidget(Fl_Widget *cbwidget,Fl_Widget *applybutton)} {} {
- code {this->cbwidget=cbwidget;
-this->applybutton=applybutton;} {}
- }
- decl {Fl_Value_Output *khzvalue;} {}
- decl {Fl_Value_Output *dbvalue;} {}
- decl {Resonance *respar;} {}
- decl {int oldx,oldy;} {}
- decl {REALTYPE khzval;} {public
- }
- decl {Fl_Widget *cbwidget,*applybutton;} {}
-}
-
-class ResonanceUI {open : PresetsUI_
-} {
- Function {make_window()} {open
- } {
- Fl_Window resonancewindow {
- label Resonance selected
- xywh {120 70 780 305} type Double hide
- } {
- Fl_Value_Output khzvalue {
- label kHz
- xywh {415 264 45 18} labelsize 12 align 8 minimum 0.001 maximum 48 step 0.01 textfont 1 textsize 12
- code0 {//this widget must be before the calling widgets}
- }
- Fl_Value_Output dbvalue {
- label dB
- xywh {415 282 45 18} labelsize 12 align 8 minimum -150 maximum 150 step 0.1 textfont 1 textsize 12
- code0 {//this widget must be before the calling widgets}
- }
- Fl_Group {} {
- xywh {6 5 768 256} box BORDER_BOX
- code0 {rg=new ResonanceGraph(o->x(),o->y(),o->w(),o->h(),"");}
- code1 {rg->init(respar,khzvalue,dbvalue);}
- code2 {rg->show();}
- } {}
- Fl_Button {} {
- label Close
- callback {resonancewindow->hide();}
- xywh {690 283 84 17} box THIN_UP_BOX
- }
- Fl_Button {} {
- label Zero
- callback {for (int i=0;i<N_RES_POINTS;i++)
- respar->setpoint(i,64);
-resonancewindow->redraw();
-redrawPADnoteApply();}
- tooltip {Clear the resonance function} xywh {491 264 66 15} box THIN_UP_BOX labelfont 1 labelsize 12
- }
- Fl_Button {} {
- label Smooth
- callback {respar->smooth();
-resonancewindow->redraw();
-redrawPADnoteApply();}
- tooltip {Smooth the resonance function} xywh {491 282 66 18} box THIN_UP_BOX labelfont 1 labelsize 12
- }
- Fl_Check_Button enabled {
- label Enable
- callback {respar->Penabled=(int) o->value();
-redrawPADnoteApply();}
- xywh {6 270 78 27} box THIN_UP_BOX down_box DOWN_BOX
- code0 {o->value(respar->Penabled);}
- }
- Fl_Roller maxdb {
- callback {maxdbvo->value(o->value());
-respar->PmaxdB=(int) o->value();
-redrawPADnoteApply();}
- xywh {90 282 84 15} type Horizontal minimum 1 maximum 90 step 1 value 30
- }
- Fl_Value_Output maxdbvo {
- label {Max.}
- callback {o->value(respar->PmaxdB);}
- tooltip {The Maximum amplitude (dB)} xywh {126 264 24 18} labelsize 12 minimum 1 maximum 127 step 1 value 30 textfont 1 textsize 12
- code0 {o->value(respar->PmaxdB);}
- }
- Fl_Box {} {
- label dB
- xywh {150 264 24 18}
- }
- Fl_Value_Output centerfreqvo {
- label {C.f.}
- callback {o->value(respar->getcenterfreq()/1000.0);}
- tooltip {Center Frequency (kHz)} xywh {210 264 33 18} labelsize 12 when 3 minimum 1 maximum 10 step 0.01 value 1 textfont 1 textsize 12
- code0 {o->value(respar->getcenterfreq()/1000.0);}
- }
- Fl_Value_Output octavesfreqvo {
- label {Oct.}
- callback {o->value(respar->getoctavesfreq());}
- tooltip {No. of octaves} xywh {210 282 33 18} labelsize 12 when 3 minimum 1 maximum 127 step 1 value 30 textfont 1 textsize 12
- code0 {o->value(respar->getoctavesfreq());}
- }
- Fl_Button {} {
- label RND2
- callback {respar->randomize(1);
-resonancewindow->redraw();
-redrawPADnoteApply();}
- tooltip {Randomize the resonance function} xywh {566 276 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Button {} {
- label RND1
- callback {respar->randomize(0);
-resonancewindow->redraw();
-redrawPADnoteApply();}
- tooltip {Randomize the resonance function} xywh {566 264 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Button {} {
- label RND3
- callback {respar->randomize(2);
-resonancewindow->redraw();
-redrawPADnoteApply();}
- tooltip {Randomize the resonance function} xywh {566 288 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Check_Button p1st {
- label {P.1st}
- callback {respar->Pprotectthefundamental=(int) o->value();
-redrawPADnoteApply();}
- tooltip {Protect the fundamental frequency (do not damp the first harmonic)} xywh {365 285 45 15} down_box DOWN_BOX labelsize 10
- code0 {o->value(respar->Pprotectthefundamental);}
- }
- Fl_Button {} {
- label InterpP
- callback {int type;
-if (Fl::event_button()==FL_LEFT_MOUSE) type=0;
- else type=1;
-respar->interpolatepeaks(type);
-resonancewindow->redraw();
-redrawPADnoteApply();}
- tooltip {Interpolate the peaks} xywh {365 265 46 15} box THIN_UP_BOX labelfont 1 labelsize 10
- }
- Fl_Dial centerfreq {
- label {C.f.}
- callback {respar->Pcenterfreq=(int)o->value();
-centerfreqvo->do_callback();
-rg->redraw();
-redrawPADnoteApply();}
- xywh {245 265 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(respar->Pcenterfreq);}
- class WidgetPDial
- }
- Fl_Dial octavesfreq {
- label {Oct.}
- callback {respar->Poctavesfreq=(int)o->value();
-octavesfreqvo->do_callback();
-rg->redraw();
-redrawPADnoteApply();}
- xywh {280 265 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(respar->Poctavesfreq);}
- class WidgetPDial
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(respar);}
- xywh {625 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(respar,this);}
- xywh {655 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button applybutton {
- label Apply
- callback {applybutton->color(FL_GRAY);
-applybutton->redraw();
-if (cbapplywidget!=NULL) {
- cbapplywidget->do_callback();
- cbapplywidget->color(FL_GRAY);
- cbapplywidget->redraw();
-};}
- xywh {690 265 85 15} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- }
- }
- Function {ResonanceUI(Resonance *respar_)} {} {
- code {respar=respar_;
-cbwidget=NULL;
-cbapplywidget=NULL;
-make_window();
-applybutton->hide();} {}
- }
- Function {~ResonanceUI()} {} {
- code {resonancewindow->hide();} {}
- }
- Function {redrawPADnoteApply()} {} {
- code {if (cbwidget!=NULL) {
- cbwidget->do_callback();
- applybutton->color(FL_RED);
- applybutton->redraw();
-};} {}
- }
- Function {setcbwidget(Fl_Widget *cbwidget,Fl_Widget *cbapplywidget)} {} {
- code {this->cbwidget=cbwidget;
-this->cbapplywidget=cbapplywidget;
-rg->setcbwidget(cbwidget,applybutton);
-applybutton->show();} {}
- }
- Function {refresh()} {} {
- code {redrawPADnoteApply();
-
-enabled->value(respar->Penabled);
-
-maxdb->value(respar->PmaxdB);
-maxdbvo->value(respar->PmaxdB);
-
-centerfreqvo->value(respar->getcenterfreq()/1000.0);
-octavesfreqvo->value(respar->getoctavesfreq());
-
-centerfreq->value(respar->Pcenterfreq);
-octavesfreq->value(respar->Poctavesfreq);
-
-p1st->value(respar->Pprotectthefundamental);
-
-rg->redraw();} {}
- }
- decl {Resonance *respar;} {public
- }
- decl {ResonanceGraph *rg;} {}
- decl {Fl_Widget *cbwidget,*cbapplywidget;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/ResonanceUI.h b/plugins/zynaddsubfx/src/UI/ResonanceUI.h
deleted file mode 100644
index b954759..0000000
--- a/plugins/zynaddsubfx/src/UI/ResonanceUI.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef ResonanceUI_h
-#define ResonanceUI_h
-#include <FL/Fl.H>
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Value_Output.H>
-#include "../Synth/Resonance.h"
-#include "WidgetPDial.h"
-#include "PresetsUI.h"
-
-class ResonanceGraph : public Fl_Box {
-public:
- ResonanceGraph(int x,int y, int w, int h, const char *label=0);
- void init(Resonance *respar_,Fl_Value_Output *khzvalue_,Fl_Value_Output *dbvalue_);
- void draw_freq_line(REALTYPE freq,int type);
- void draw();
- int handle(int event);
- void setcbwidget(Fl_Widget *cbwidget,Fl_Widget *applybutton);
-private:
- Fl_Value_Output *khzvalue;
- Fl_Value_Output *dbvalue;
- Resonance *respar;
- int oldx,oldy;
-public:
- REALTYPE khzval;
-private:
- Fl_Widget *cbwidget,*applybutton;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Roller.H>
-#include <FL/Fl_Box.H>
-
-class ResonanceUI : PresetsUI_ {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *resonancewindow;
- Fl_Value_Output *khzvalue;
- Fl_Value_Output *dbvalue;
-private:
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
- void cb_Zero_i(Fl_Button*, void*);
- static void cb_Zero(Fl_Button*, void*);
- void cb_Smooth_i(Fl_Button*, void*);
- static void cb_Smooth(Fl_Button*, void*);
-public:
- Fl_Check_Button *enabled;
-private:
- void cb_enabled_i(Fl_Check_Button*, void*);
- static void cb_enabled(Fl_Check_Button*, void*);
-public:
- Fl_Roller *maxdb;
-private:
- void cb_maxdb_i(Fl_Roller*, void*);
- static void cb_maxdb(Fl_Roller*, void*);
-public:
- Fl_Value_Output *maxdbvo;
-private:
- void cb_maxdbvo_i(Fl_Value_Output*, void*);
- static void cb_maxdbvo(Fl_Value_Output*, void*);
-public:
- Fl_Value_Output *centerfreqvo;
-private:
- void cb_centerfreqvo_i(Fl_Value_Output*, void*);
- static void cb_centerfreqvo(Fl_Value_Output*, void*);
-public:
- Fl_Value_Output *octavesfreqvo;
-private:
- void cb_octavesfreqvo_i(Fl_Value_Output*, void*);
- static void cb_octavesfreqvo(Fl_Value_Output*, void*);
- void cb_RND2_i(Fl_Button*, void*);
- static void cb_RND2(Fl_Button*, void*);
- void cb_RND1_i(Fl_Button*, void*);
- static void cb_RND1(Fl_Button*, void*);
- void cb_RND3_i(Fl_Button*, void*);
- static void cb_RND3(Fl_Button*, void*);
-public:
- Fl_Check_Button *p1st;
-private:
- void cb_p1st_i(Fl_Check_Button*, void*);
- static void cb_p1st(Fl_Check_Button*, void*);
- void cb_InterpP_i(Fl_Button*, void*);
- static void cb_InterpP(Fl_Button*, void*);
-public:
- WidgetPDial *centerfreq;
-private:
- void cb_centerfreq_i(WidgetPDial*, void*);
- static void cb_centerfreq(WidgetPDial*, void*);
-public:
- WidgetPDial *octavesfreq;
-private:
- void cb_octavesfreq_i(WidgetPDial*, void*);
- static void cb_octavesfreq(WidgetPDial*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- Fl_Button *applybutton;
-private:
- void cb_applybutton_i(Fl_Button*, void*);
- static void cb_applybutton(Fl_Button*, void*);
-public:
- ResonanceUI(Resonance *respar_);
- ~ResonanceUI();
- void redrawPADnoteApply();
- void setcbwidget(Fl_Widget *cbwidget,Fl_Widget *cbapplywidget);
- void refresh();
- Resonance *respar;
-private:
- ResonanceGraph *rg;
- Fl_Widget *cbwidget,*cbapplywidget;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/SUBnoteUI.cc b/plugins/zynaddsubfx/src/UI/SUBnoteUI.cc
deleted file mode 100644
index 9314333..0000000
--- a/plugins/zynaddsubfx/src/UI/SUBnoteUI.cc
+++ /dev/null
@@ -1,735 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "SUBnoteUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-void SUBnoteharmonic::cb_mag_i(Fl_Slider* o, void*) {
- int x=0;
-if (Fl::event_button1()) x=127-(int)o->value();
- else o->value(127-x);
-pars->Phmag[n]=x;
-if (pars->Phmag[n]==0) o->selection_color(0);
- else o->selection_color(222);
-}
-void SUBnoteharmonic::cb_mag(Fl_Slider* o, void* v) {
- ((SUBnoteharmonic*)(o->parent()->user_data()))->cb_mag_i(o,v);
-}
-
-void SUBnoteharmonic::cb_bw_i(Fl_Slider* o, void*) {
- int x=64;
-if (Fl::event_button1()) x=127-(int)o->value();
- else o->value(x);
-pars->Phrelbw[n]=x;
-}
-void SUBnoteharmonic::cb_bw(Fl_Slider* o, void* v) {
- ((SUBnoteharmonic*)(o->parent()->user_data()))->cb_bw_i(o,v);
-}
-
-Fl_Group* SUBnoteharmonic::make_window() {
- { harmonic = new Fl_Group(0, 0, 90, 225);
- harmonic->box(FL_FLAT_BOX);
- harmonic->color(FL_BACKGROUND_COLOR);
- harmonic->selection_color(FL_BACKGROUND_COLOR);
- harmonic->labeltype(FL_NO_LABEL);
- harmonic->labelfont(0);
- harmonic->labelsize(14);
- harmonic->labelcolor(FL_FOREGROUND_COLOR);
- harmonic->user_data((void*)(this));
- harmonic->align(Fl_Align(FL_ALIGN_TOP));
- harmonic->when(FL_WHEN_RELEASE);
- { Fl_Slider* o = mag = new Fl_Slider(0, 15, 10, 115);
- mag->tooltip("harmonic\'s magnitude");
- mag->type(4);
- mag->box(FL_FLAT_BOX);
- mag->selection_color((Fl_Color)222);
- mag->maximum(127);
- mag->step(1);
- mag->value(127);
- mag->callback((Fl_Callback*)cb_mag);
- o->value(127-pars->Phmag[n]);
- if (pars->Phmag[n]==0) o->selection_color(0);
- } // Fl_Slider* mag
- { Fl_Slider* o = bw = new Fl_Slider(0, 135, 10, 75);
- bw->tooltip("harmonic\'s bandwidth");
- bw->type(4);
- bw->box(FL_FLAT_BOX);
- bw->selection_color((Fl_Color)222);
- bw->maximum(127);
- bw->step(1);
- bw->value(64);
- bw->callback((Fl_Callback*)cb_bw);
- o->value(127-pars->Phrelbw[n]);
- } // Fl_Slider* bw
- { Fl_Box* o = new Fl_Box(10, 170, 5, 5);
- o->box(FL_FLAT_BOX);
- o->color(FL_DARK2);
- if (n+1==MAX_SUB_HARMONICS) o->hide();
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(0, 210, 10, 15, "01");
- o->labelfont(1);
- o->labelsize(9);
- o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));
- } // Fl_Box* o
- { Fl_Box* o = new Fl_Box(0, 0, 10, 15, "01");
- o->labelfont(1);
- o->labelsize(9);
- o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
- char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));
- } // Fl_Box* o
- harmonic->end();
- } // Fl_Group* harmonic
- return harmonic;
-}
-
-SUBnoteharmonic::SUBnoteharmonic(int x,int y, int w, int h, const char *label):Fl_Group(x,y,w,h,label) {
- n=0;
-}
-
-void SUBnoteharmonic::init(SUBnoteParameters *pars_,int n_) {
- pars=pars_;
- n=n_;
- make_window();
- harmonic->show();
- end();
-}
-
-void SUBnoteharmonic::refresh() {
- mag->value(127-pars->Phmag[n]);
- if (pars->Phmag[n]==0) mag->selection_color(0);
- bw->value(127-pars->Phrelbw[n]);
-}
-
-SUBnoteharmonic::~SUBnoteharmonic() {
- harmonic->hide();
- hide();
- //delete(harmonic);
-}
-
-void SUBnoteUI::cb_Close_i(Fl_Button*, void*) {
- SUBparameters->hide();
-}
-void SUBnoteUI::cb_Close(Fl_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void SUBnoteUI::cb_vol_i(Fl_Value_Slider* o, void*) {
- pars->PVolume=(int)o->value();
-}
-void SUBnoteUI::cb_vol(Fl_Value_Slider* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_vol_i(o,v);
-}
-
-void SUBnoteUI::cb_vsns_i(Fl_Value_Slider* o, void*) {
- pars->PAmpVelocityScaleFunction=(int) o->value();
-}
-void SUBnoteUI::cb_vsns(Fl_Value_Slider* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_vsns_i(o,v);
-}
-
-void SUBnoteUI::cb_pan_i(WidgetPDial* o, void*) {
- pars->PPanning=(int) o->value();
-}
-void SUBnoteUI::cb_pan(WidgetPDial* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_pan_i(o,v);
-}
-
-void SUBnoteUI::cb_filterstages_i(Fl_Counter* o, void*) {
- pars->Pnumstages=(int) o->value();
-}
-void SUBnoteUI::cb_filterstages(Fl_Counter* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_filterstages_i(o,v);
-}
-
-void SUBnoteUI::cb_magtype_i(Fl_Choice* o, void*) {
- pars->Phmagtype=(int) o->value();
-}
-void SUBnoteUI::cb_magtype(Fl_Choice* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_magtype_i(o,v);
-}
-
-Fl_Menu_Item SUBnoteUI::menu_magtype[] = {
- {"Linear", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"-40dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"-60dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"-80dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"-100dB", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SUBnoteUI::cb_start_i(Fl_Choice* o, void*) {
- pars->Pstart=(int) o->value();
-}
-void SUBnoteUI::cb_start(Fl_Choice* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_start_i(o,v);
-}
-
-Fl_Menu_Item SUBnoteUI::menu_start[] = {
- {"Zero", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"RND", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {"Max.", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void SUBnoteUI::cb_freqee_i(Fl_Check_Button* o, void*) {
- pars->PFreqEnvelopeEnabled=o->value();
-if (o->value()==0) freqenvelopegroup->deactivate();
- else freqenvelopegroup->activate();
-o->show();
-freqsettingsui->redraw();
-}
-void SUBnoteUI::cb_freqee(Fl_Check_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_freqee_i(o,v);
-}
-
-void SUBnoteUI::cb_octave_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=16;
-pars->PCoarseDetune = k*1024+
- pars->PCoarseDetune%1024;
-}
-void SUBnoteUI::cb_octave(Fl_Counter* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_octave_i(o,v);
-}
-
-void SUBnoteUI::cb_coarsedet_i(Fl_Counter* o, void*) {
- int k=(int) o->value();
-if (k<0) k+=1024;
-pars->PCoarseDetune = k+
- (pars->PCoarseDetune/1024)*1024;
-}
-void SUBnoteUI::cb_coarsedet(Fl_Counter* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_coarsedet_i(o,v);
-}
-
-void SUBnoteUI::cb_detune_i(Fl_Slider* o, void*) {
- pars->PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();
-}
-void SUBnoteUI::cb_detune(Fl_Slider* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_detune_i(o,v);
-}
-
-void SUBnoteUI::cb_detunevalueoutput_i(Fl_Value_Output* o, void*) {
- o->value(getdetune(pars->PDetuneType,0,pars->PDetune));
-}
-void SUBnoteUI::cb_detunevalueoutput(Fl_Value_Output* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_detunevalueoutput_i(o,v);
-}
-
-void SUBnoteUI::cb_hz440_i(Fl_Check_Button* o, void*) {
- int x=(int) o->value();
-pars->Pfixedfreq=x;
-if (x==0) fixedfreqetdial->deactivate();
- else fixedfreqetdial->activate();
-}
-void SUBnoteUI::cb_hz440(Fl_Check_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_hz440_i(o,v);
-}
-
-void SUBnoteUI::cb_fixedfreqetdial_i(WidgetPDial* o, void*) {
- pars->PfixedfreqET=(int) o->value();
-}
-void SUBnoteUI::cb_fixedfreqetdial(WidgetPDial* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_fixedfreqetdial_i(o,v);
-}
-
-void SUBnoteUI::cb_detunetype_i(Fl_Choice* o, void*) {
- pars->PDetuneType=(int) o->value()+1;
-detunevalueoutput->do_callback();
-}
-void SUBnoteUI::cb_detunetype(Fl_Choice* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_detunetype_i(o,v);
-}
-
-void SUBnoteUI::cb_stereo_i(Fl_Check_Button* o, void*) {
- pars->Pstereo=(int) o->value();
-}
-void SUBnoteUI::cb_stereo(Fl_Check_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->user_data()))->cb_stereo_i(o,v);
-}
-
-void SUBnoteUI::cb_Clear_i(Fl_Button*, void*) {
- for (int i=0;i<MAX_SUB_HARMONICS;i++){
- h[i]->mag->value(127);
- pars->Phmag[i]=0;
- h[i]->bw->value(64);
- pars->Phrelbw[i]=64;
-};
-pars->Phmag[0]=127;
-h[0]->mag->value(0);
-SUBparameters->redraw();
-}
-void SUBnoteUI::cb_Clear(Fl_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->user_data()))->cb_Clear_i(o,v);
-}
-
-void SUBnoteUI::cb_bwee_i(Fl_Check_Button* o, void*) {
- pars->PBandWidthEnvelopeEnabled=o->value();
-if (o->value()==0) bandwidthenvelopegroup->deactivate();
- else bandwidthenvelopegroup->activate();
-o->show();
-bandwidthsettingsui->redraw();
-}
-void SUBnoteUI::cb_bwee(Fl_Check_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_bwee_i(o,v);
-}
-
-void SUBnoteUI::cb_bandwidth_i(Fl_Value_Slider* o, void*) {
- pars->Pbandwidth=(int) o->value();
-}
-void SUBnoteUI::cb_bandwidth(Fl_Value_Slider* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_bandwidth_i(o,v);
-}
-
-void SUBnoteUI::cb_bwidthscale_i(Fl_Value_Slider* o, void*) {
- pars->Pbwscale=(int) o->value()+64;
-}
-void SUBnoteUI::cb_bwidthscale(Fl_Value_Slider* o, void* v) {
- ((SUBnoteUI*)(o->parent()->parent()->user_data()))->cb_bwidthscale_i(o,v);
-}
-
-void SUBnoteUI::cb_filtere_i(Fl_Check_Button* o, void*) {
- pars->PGlobalFilterEnabled=o->value();
-if (o->value()==0) globalfiltergroup->deactivate();
- else globalfiltergroup->activate();
-o->show();
-globalfiltergroup->redraw();
-}
-void SUBnoteUI::cb_filtere(Fl_Check_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->user_data()))->cb_filtere_i(o,v);
-}
-
-void SUBnoteUI::cb_C_i(Fl_Button*, void*) {
- presetsui->copy(pars);
-}
-void SUBnoteUI::cb_C(Fl_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->user_data()))->cb_C_i(o,v);
-}
-
-void SUBnoteUI::cb_P_i(Fl_Button*, void*) {
- presetsui->paste(pars,this);
-}
-void SUBnoteUI::cb_P(Fl_Button* o, void* v) {
- ((SUBnoteUI*)(o->parent()->user_data()))->cb_P_i(o,v);
-}
-
-Fl_Double_Window* SUBnoteUI::make_window() {
- { SUBparameters = new Fl_Double_Window(735, 390, "SUBsynth Parameters");
- SUBparameters->user_data((void*)(this));
- { Fl_Scroll* o = new Fl_Scroll(5, 140, 435, 245);
- o->type(1);
- o->box(FL_THIN_UP_BOX);
- { Fl_Pack* o = harmonics = new Fl_Pack(10, 145, 425, 235);
- harmonics->type(1);
- for (int i=0;i<MAX_SUB_HARMONICS;i++){h[i]=new SUBnoteharmonic(0,0,15,o->h(),"");h[i]->init(pars,i);}
- harmonics->end();
- } // Fl_Pack* harmonics
- o->end();
- } // Fl_Scroll* o
- { Fl_Button* o = new Fl_Button(625, 365, 105, 20, "Close");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Group* o = new Fl_Group(5, 5, 215, 135, "AMPLITUDE");
- o->box(FL_THIN_UP_FRAME);
- o->labeltype(FL_EMBOSSED_LABEL);
- o->labelfont(1);
- o->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { Fl_Value_Slider* o = vol = new Fl_Value_Slider(10, 25, 140, 15, "Vol");
- vol->tooltip("Volume");
- vol->type(5);
- vol->box(FL_FLAT_BOX);
- vol->labelsize(11);
- vol->maximum(127);
- vol->step(1);
- vol->callback((Fl_Callback*)cb_vol);
- vol->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->PVolume);
- } // Fl_Value_Slider* vol
- { Fl_Value_Slider* o = vsns = new Fl_Value_Slider(10, 45, 140, 15, "V.Sns");
- vsns->tooltip("Velocity Sensing Function (rightmost to disable)");
- vsns->type(5);
- vsns->box(FL_FLAT_BOX);
- vsns->labelsize(11);
- vsns->maximum(127);
- vsns->step(1);
- vsns->callback((Fl_Callback*)cb_vsns);
- vsns->align(Fl_Align(FL_ALIGN_RIGHT));
- o->value(pars->PAmpVelocityScaleFunction);
- } // Fl_Value_Slider* vsns
- { WidgetPDial* o = pan = new WidgetPDial(185, 20, 30, 30, "Pan");
- pan->tooltip("Panning (leftmost is Random)");
- pan->box(FL_ROUND_UP_BOX);
- pan->color(FL_BACKGROUND_COLOR);
- pan->selection_color(FL_INACTIVE_COLOR);
- pan->labeltype(FL_NORMAL_LABEL);
- pan->labelfont(0);
- pan->labelsize(10);
- pan->labelcolor(FL_FOREGROUND_COLOR);
- pan->maximum(127);
- pan->step(1);
- pan->callback((Fl_Callback*)cb_pan);
- pan->align(Fl_Align(FL_ALIGN_BOTTOM));
- pan->when(FL_WHEN_CHANGED);
- o->value(pars->PPanning);
- } // WidgetPDial* pan
- { EnvelopeUI* o = ampenv = new EnvelopeUI(10, 65, 205, 70, "SUBsynth - Amplitude Envelope");
- ampenv->box(FL_FLAT_BOX);
- ampenv->color((Fl_Color)51);
- ampenv->selection_color(FL_BACKGROUND_COLOR);
- ampenv->labeltype(FL_NORMAL_LABEL);
- ampenv->labelfont(0);
- ampenv->labelsize(14);
- ampenv->labelcolor(FL_FOREGROUND_COLOR);
- ampenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- ampenv->when(FL_WHEN_RELEASE);
- o->init(pars->AmpEnvelope);
- ampenv->end();
- } // EnvelopeUI* ampenv
- o->end();
- } // Fl_Group* o
- { Fl_Group* o = new Fl_Group(495, 325, 235, 35);
- o->box(FL_THIN_UP_FRAME);
- { Fl_Counter* o = filterstages = new Fl_Counter(515, 340, 45, 15, "Filter Stages");
- filterstages->tooltip("How many times the noise is filtered");
- filterstages->type(1);
- filterstages->labelfont(1);
- filterstages->labelsize(10);
- filterstages->minimum(1);
- filterstages->maximum(5);
- filterstages->step(1);
- filterstages->textsize(10);
- filterstages->callback((Fl_Callback*)cb_filterstages);
- filterstages->align(Fl_Align(FL_ALIGN_TOP));
- o->value(pars->Pnumstages);
- } // Fl_Counter* filterstages
- { Fl_Choice* o = magtype = new Fl_Choice(585, 340, 65, 15, "Mag.Type");
- magtype->down_box(FL_BORDER_BOX);
- magtype->labelfont(1);
- magtype->labelsize(10);
- magtype->textsize(11);
- magtype->callback((Fl_Callback*)cb_magtype);
- magtype->align(Fl_Align(FL_ALIGN_TOP));
- magtype->menu(menu_magtype);
- o->value(pars->Phmagtype);
- } // Fl_Choice* magtype
- { Fl_Choice* o = start = new Fl_Choice(670, 340, 50, 15, "Start");
- start->down_box(FL_BORDER_BOX);
- start->labelfont(1);
- start->labelsize(10);
- start->textsize(11);
- start->callback((Fl_Callback*)cb_start);
- start->align(Fl_Align(FL_ALIGN_TOP));
- start->menu(menu_start);
- o->value(pars->Pstart);
- } // Fl_Choice* start
- o->end();
- } // Fl_Group* o
- { freqsettingsui = new Fl_Group(440, 5, 290, 135, "FREQUENCY");
- freqsettingsui->box(FL_THIN_UP_FRAME);
- freqsettingsui->labeltype(FL_EMBOSSED_LABEL);
- freqsettingsui->labelfont(1);
- freqsettingsui->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = freqenvelopegroup = new EnvelopeUI(445, 65, 205, 70, "SUBsynth - Frequency Envelope");
- freqenvelopegroup->box(FL_FLAT_BOX);
- freqenvelopegroup->color((Fl_Color)51);
- freqenvelopegroup->selection_color(FL_BACKGROUND_COLOR);
- freqenvelopegroup->labeltype(FL_NORMAL_LABEL);
- freqenvelopegroup->labelfont(0);
- freqenvelopegroup->labelsize(14);
- freqenvelopegroup->labelcolor(FL_FOREGROUND_COLOR);
- freqenvelopegroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- freqenvelopegroup->when(FL_WHEN_RELEASE);
- o->init(pars->FreqEnvelope);
- if (pars->PFreqEnvelopeEnabled==0) o->deactivate();
- freqenvelopegroup->end();
- } // EnvelopeUI* freqenvelopegroup
- { Fl_Check_Button* o = freqee = new Fl_Check_Button(445, 68, 55, 15, "Enabled");
- freqee->down_box(FL_DOWN_BOX);
- freqee->labelfont(1);
- freqee->labelsize(10);
- freqee->callback((Fl_Callback*)cb_freqee);
- o->value(pars->PFreqEnvelopeEnabled);
- } // Fl_Check_Button* freqee
- { Fl_Counter* o = octave = new Fl_Counter(670, 50, 45, 15, "Octave");
- octave->tooltip("Octave");
- octave->type(1);
- octave->labelsize(10);
- octave->minimum(-8);
- octave->maximum(7);
- octave->step(1);
- octave->textfont(1);
- octave->textsize(11);
- octave->callback((Fl_Callback*)cb_octave);
- octave->align(Fl_Align(FL_ALIGN_TOP));
- int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
- o->value(k);
- } // Fl_Counter* octave
- { Fl_Counter* o = coarsedet = new Fl_Counter(655, 115, 60, 20, "Coarse Det.");
- coarsedet->tooltip("Coarse Detune");
- coarsedet->labelsize(10);
- coarsedet->minimum(-64);
- coarsedet->maximum(63);
- coarsedet->step(1);
- coarsedet->textfont(1);
- coarsedet->textsize(11);
- coarsedet->callback((Fl_Callback*)cb_coarsedet);
- coarsedet->align(Fl_Align(FL_ALIGN_TOP));
- int k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
- o->value(k);
- o->lstep(10);
- } // Fl_Counter* coarsedet
- { Fl_Slider* o = detune = new Fl_Slider(495, 25, 230, 15);
- detune->tooltip("Fine Detune (cents)");
- detune->type(5);
- detune->box(FL_FLAT_BOX);
- detune->minimum(-8192);
- detune->maximum(8191);
- detune->step(1);
- detune->callback((Fl_Callback*)cb_detune);
- o->value(pars->PDetune-8192);
- } // Fl_Slider* detune
- { Fl_Value_Output* o = detunevalueoutput = new Fl_Value_Output(448, 25, 45, 15, "Detune");
- detunevalueoutput->labelsize(10);
- detunevalueoutput->minimum(-5000);
- detunevalueoutput->maximum(5000);
- detunevalueoutput->step(0.01);
- detunevalueoutput->textfont(1);
- detunevalueoutput->textsize(10);
- detunevalueoutput->callback((Fl_Callback*)cb_detunevalueoutput);
- detunevalueoutput->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(getdetune(pars->PDetuneType,0,pars->PDetune));
- } // Fl_Value_Output* detunevalueoutput
- { Fl_Check_Button* o = hz440 = new Fl_Check_Button(555, 45, 50, 15, "440Hz");
- hz440->tooltip("set the base frequency to 440Hz");
- hz440->down_box(FL_DOWN_BOX);
- hz440->labelfont(1);
- hz440->labelsize(10);
- hz440->callback((Fl_Callback*)cb_hz440);
- o->value(pars->Pfixedfreq);
- } // Fl_Check_Button* hz440
- { WidgetPDial* o = fixedfreqetdial = new WidgetPDial(610, 45, 15, 15, "Eq.T.");
- fixedfreqetdial->tooltip("How the frequency varies acording to the keyboard (leftmost for fixed frequen\
-cy)");
- fixedfreqetdial->box(FL_ROUND_UP_BOX);
- fixedfreqetdial->color(FL_BACKGROUND_COLOR);
- fixedfreqetdial->selection_color(FL_INACTIVE_COLOR);
- fixedfreqetdial->labeltype(FL_NORMAL_LABEL);
- fixedfreqetdial->labelfont(0);
- fixedfreqetdial->labelsize(10);
- fixedfreqetdial->labelcolor(FL_FOREGROUND_COLOR);
- fixedfreqetdial->maximum(127);
- fixedfreqetdial->step(1);
- fixedfreqetdial->callback((Fl_Callback*)cb_fixedfreqetdial);
- fixedfreqetdial->align(Fl_Align(FL_ALIGN_RIGHT));
- fixedfreqetdial->when(FL_WHEN_CHANGED);
- o->value(pars->PfixedfreqET);
- if (pars->Pfixedfreq==0) o->deactivate();
- } // WidgetPDial* fixedfreqetdial
- { Fl_Choice* o = detunetype = new Fl_Choice(655, 85, 70, 15, "Detune Type");
- detunetype->down_box(FL_BORDER_BOX);
- detunetype->labelsize(10);
- detunetype->textfont(1);
- detunetype->textsize(10);
- detunetype->callback((Fl_Callback*)cb_detunetype);
- detunetype->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");
- o->value(pars->PDetuneType-1);
- } // Fl_Choice* detunetype
- freqsettingsui->end();
- } // Fl_Group* freqsettingsui
- { Fl_Check_Button* o = stereo = new Fl_Check_Button(440, 325, 55, 35, "Stereo");
- stereo->box(FL_THIN_UP_BOX);
- stereo->down_box(FL_DOWN_BOX);
- stereo->labelfont(1);
- stereo->labelsize(10);
- stereo->callback((Fl_Callback*)cb_stereo);
- o->value(pars->Pstereo);
- } // Fl_Check_Button* stereo
- { Fl_Button* o = new Fl_Button(445, 365, 70, 20, "Clear");
- o->tooltip("Clear the harmonics");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->labelsize(11);
- o->callback((Fl_Callback*)cb_Clear);
- } // Fl_Button* o
- { bandwidthsettingsui = new Fl_Group(220, 5, 220, 135, "BANDWIDTH");
- bandwidthsettingsui->box(FL_THIN_UP_FRAME);
- bandwidthsettingsui->labeltype(FL_EMBOSSED_LABEL);
- bandwidthsettingsui->labelfont(1);
- bandwidthsettingsui->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = bandwidthenvelopegroup = new EnvelopeUI(225, 65, 205, 70, "SUBsynth - BandWidth Envelope");
- bandwidthenvelopegroup->box(FL_FLAT_BOX);
- bandwidthenvelopegroup->color((Fl_Color)51);
- bandwidthenvelopegroup->selection_color(FL_BACKGROUND_COLOR);
- bandwidthenvelopegroup->labeltype(FL_NORMAL_LABEL);
- bandwidthenvelopegroup->labelfont(0);
- bandwidthenvelopegroup->labelsize(14);
- bandwidthenvelopegroup->labelcolor(FL_FOREGROUND_COLOR);
- bandwidthenvelopegroup->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- bandwidthenvelopegroup->when(FL_WHEN_RELEASE);
- o->init(pars->BandWidthEnvelope);
- if (pars->PBandWidthEnvelopeEnabled==0) o->deactivate();
- bandwidthenvelopegroup->end();
- } // EnvelopeUI* bandwidthenvelopegroup
- { Fl_Check_Button* o = bwee = new Fl_Check_Button(225, 67, 55, 15, "Enabled");
- bwee->down_box(FL_DOWN_BOX);
- bwee->labelfont(1);
- bwee->labelsize(10);
- bwee->callback((Fl_Callback*)cb_bwee);
- o->value(pars->PBandWidthEnvelopeEnabled);
- } // Fl_Check_Button* bwee
- { Fl_Value_Slider* o = bandwidth = new Fl_Value_Slider(225, 40, 115, 15, "Band Width");
- bandwidth->type(5);
- bandwidth->box(FL_FLAT_BOX);
- bandwidth->labelsize(10);
- bandwidth->maximum(127);
- bandwidth->step(1);
- bandwidth->callback((Fl_Callback*)cb_bandwidth);
- bandwidth->align(Fl_Align(FL_ALIGN_TOP));
- o->value(pars->Pbandwidth);
- } // Fl_Value_Slider* bandwidth
- { Fl_Value_Slider* o = bwidthscale = new Fl_Value_Slider(345, 40, 90, 15, "B.Width Scale");
- bwidthscale->tooltip("How much I increase the BandWidth according to lower/higher harmonics");
- bwidthscale->type(5);
- bwidthscale->box(FL_FLAT_BOX);
- bwidthscale->labelsize(10);
- bwidthscale->minimum(-64);
- bwidthscale->maximum(63);
- bwidthscale->step(1);
- bwidthscale->callback((Fl_Callback*)cb_bwidthscale);
- bwidthscale->align(Fl_Align(FL_ALIGN_TOP));
- o->value(pars->Pbwscale-64);
- } // Fl_Value_Slider* bwidthscale
- bandwidthsettingsui->end();
- } // Fl_Group* bandwidthsettingsui
- { Fl_Group* o = globalfiltergroup = new Fl_Group(440, 140, 290, 185, "FILTER");
- globalfiltergroup->box(FL_THIN_UP_FRAME);
- globalfiltergroup->labeltype(FL_EMBOSSED_LABEL);
- globalfiltergroup->labelfont(1);
- globalfiltergroup->labelsize(13);
- globalfiltergroup->align(Fl_Align(FL_ALIGN_TOP|FL_ALIGN_INSIDE));
- { EnvelopeUI* o = filterenv = new EnvelopeUI(445, 250, 275, 70, "SUBsynth - Filter Envelope");
- filterenv->box(FL_FLAT_BOX);
- filterenv->color((Fl_Color)51);
- filterenv->selection_color(FL_BACKGROUND_COLOR);
- filterenv->labeltype(FL_NORMAL_LABEL);
- filterenv->labelfont(0);
- filterenv->labelsize(14);
- filterenv->labelcolor(FL_FOREGROUND_COLOR);
- filterenv->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- filterenv->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalFilterEnvelope);
- filterenv->end();
- } // EnvelopeUI* filterenv
- { FilterUI* o = filterui = new FilterUI(445, 170, 275, 75, "SUBsynthl - Filter");
- filterui->box(FL_FLAT_BOX);
- filterui->color(FL_LIGHT1);
- filterui->selection_color(FL_BACKGROUND_COLOR);
- filterui->labeltype(FL_NORMAL_LABEL);
- filterui->labelfont(0);
- filterui->labelsize(14);
- filterui->labelcolor(FL_FOREGROUND_COLOR);
- filterui->align(Fl_Align(FL_ALIGN_WRAP|FL_ALIGN_INSIDE));
- filterui->when(FL_WHEN_RELEASE);
- o->init(pars->GlobalFilter,&pars->PGlobalFilterVelocityScale,&pars->PGlobalFilterVelocityScaleFunction);
- filterui->end();
- } // FilterUI* filterui
- if (pars->PGlobalFilterEnabled==0) o->deactivate();
- globalfiltergroup->end();
- } // Fl_Group* globalfiltergroup
- { Fl_Check_Button* o = filtere = new Fl_Check_Button(445, 145, 85, 20, "Enabled");
- filtere->down_box(FL_DOWN_BOX);
- filtere->labelfont(1);
- filtere->labelsize(11);
- filtere->callback((Fl_Callback*)cb_filtere);
- o->value(pars->PGlobalFilterEnabled);
- } // Fl_Check_Button* filtere
- { Fl_Button* o = new Fl_Button(540, 370, 25, 15, "C");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_C);
- } // Fl_Button* o
- { Fl_Button* o = new Fl_Button(570, 370, 25, 15, "P");
- o->box(FL_THIN_UP_BOX);
- o->color((Fl_Color)179);
- o->labelfont(1);
- o->labelsize(11);
- o->labelcolor(FL_BACKGROUND2_COLOR);
- o->callback((Fl_Callback*)cb_P);
- } // Fl_Button* o
- SUBparameters->end();
- } // Fl_Double_Window* SUBparameters
- return SUBparameters;
-}
-
-void SUBnoteUI::refresh() {
- for (int i=0;i<MAX_SUB_HARMONICS;i++) h[i]->refresh();
- vol->value(pars->PVolume);
- vsns->value(pars->PAmpVelocityScaleFunction);
- pan->value(pars->PPanning);
-
-
- bandwidth->value(pars->Pbandwidth);
- bwidthscale->value(pars->Pbwscale-64);
- bwee->value(pars->PBandWidthEnvelopeEnabled);
- if (pars->PBandWidthEnvelopeEnabled==0) bandwidthenvelopegroup->deactivate();
- else bandwidthenvelopegroup->activate();
- bwee->show();
- bandwidthsettingsui->redraw();
-
- detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
- freqee->value(pars->PFreqEnvelopeEnabled);
- if (pars->PFreqEnvelopeEnabled==0) freqenvelopegroup->deactivate();
- else freqenvelopegroup->activate();
- freqee->show();
- freqsettingsui->redraw();
-
- detune->value(pars->PDetune-8192);
- hz440->value(pars->Pfixedfreq);
-
- fixedfreqetdial->value(pars->PfixedfreqET);
-
- int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
- octave->value(k);
-
- detunetype->value(pars->PDetuneType-1);
-
- k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
- coarsedet->value(k);
-
- filtere->value(pars->PGlobalFilterEnabled);
- if (pars->PGlobalFilterEnabled==0) globalfiltergroup->deactivate();
- else globalfiltergroup->activate();
- filtere->show();
- globalfiltergroup->redraw();
-
- stereo->value(pars->Pstereo);
- filterstages->value(pars->Pnumstages);
- magtype->value(pars->Phmagtype);
- start->value(pars->Pstart);
-
- ampenv->refresh();
- bandwidthenvelopegroup->refresh();
- freqenvelopegroup->refresh();
- filterui->refresh();
- filterenv->refresh();
-}
-
-SUBnoteUI::SUBnoteUI(SUBnoteParameters *parameters) {
- pars=parameters;
- make_window();
-}
-
-SUBnoteUI::~SUBnoteUI() {
- //for (int i=0;i<MAX_SUB_HARMONICS;i++) delete (h[i]);
- SUBparameters->hide();
- delete(SUBparameters);
-}
diff --git a/plugins/zynaddsubfx/src/UI/SUBnoteUI.fl b/plugins/zynaddsubfx/src/UI/SUBnoteUI.fl
deleted file mode 100644
index ef50a0b..0000000
--- a/plugins/zynaddsubfx/src/UI/SUBnoteUI.fl
+++ /dev/null
@@ -1,449 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0105
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <string.h>} {public
-}
-
-decl {\#include "../globals.h"} {public
-}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {\#include "EnvelopeUI.h"} {public
-}
-
-decl {\#include "FilterUI.h"} {public
-}
-
-decl {\#include "../Misc/Util.h"} {public
-}
-
-decl {\#include "../Params/SUBnoteParameters.h"} {public
-}
-
-decl {\#include "PresetsUI.h"} {public
-}
-
-class SUBnoteharmonic {: {public Fl_Group}
-} {
- Function {make_window()} {private
- } {
- Fl_Window harmonic {
- xywh {329 403 90 225} type Double hide
- class Fl_Group
- } {
- Fl_Slider mag {
- callback {int x=0;
-if (Fl::event_button1()) x=127-(int)o->value();
- else o->value(127-x);
-pars->Phmag[n]=x;
-if (pars->Phmag[n]==0) o->selection_color(0);
- else o->selection_color(222);}
- tooltip {harmonic's magnitude} xywh {0 15 10 115} type {Vert Knob} box FLAT_BOX selection_color 222 labelcolor 0 maximum 127 step 1 value 127
- code0 {o->value(127-pars->Phmag[n]);}
- code1 {if (pars->Phmag[n]==0) o->selection_color(0);}
- }
- Fl_Slider bw {
- callback {int x=64;
-if (Fl::event_button1()) x=127-(int)o->value();
- else o->value(x);
-pars->Phrelbw[n]=x;}
- tooltip {harmonic's bandwidth} xywh {0 135 10 75} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64
- code0 {o->value(127-pars->Phrelbw[n]);}
- }
- Fl_Box {} {
- xywh {10 170 5 5} box FLAT_BOX color 45
- code0 {if (n+1==MAX_SUB_HARMONICS) o->hide();}
- }
- Fl_Box {} {
- label 01
- xywh {0 210 10 15} labelfont 1 labelsize 9 align 20
- code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
- }
- Fl_Box {} {
- label 01
- xywh {0 0 10 15} labelfont 1 labelsize 9 align 20
- code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
- }
- }
- }
- Function {SUBnoteharmonic(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
- code {n=0;} {}
- }
- Function {init(SUBnoteParameters *pars_,int n_)} {} {
- code {pars=pars_;
-n=n_;
-make_window();
-harmonic->show();
-end();} {}
- }
- Function {refresh()} {} {
- code {mag->value(127-pars->Phmag[n]);
-if (pars->Phmag[n]==0) mag->selection_color(0);
-bw->value(127-pars->Phrelbw[n]);} {selected
- }
- }
- Function {~SUBnoteharmonic()} {} {
- code {harmonic->hide();
-hide();
-//delete(harmonic);} {}
- }
- decl {SUBnoteParameters *pars;} {}
- decl {int n;} {}
-}
-
-class SUBnoteUI {: {public PresetsUI_}
-} {
- Function {make_window()} {} {
- Fl_Window SUBparameters {
- label {SUBsynth Parameters}
- xywh {26 214 735 390} type Double hide
- } {
- Fl_Scroll {} {
- xywh {5 140 435 245} type HORIZONTAL box THIN_UP_BOX
- } {
- Fl_Pack harmonics {open
- xywh {10 145 425 235} type HORIZONTAL
- code0 {for (int i=0;i<MAX_SUB_HARMONICS;i++){h[i]=new SUBnoteharmonic(0,0,15,o->h(),"");h[i]->init(pars,i);}}
- } {}
- }
- Fl_Button {} {
- label Close
- callback {SUBparameters->hide();}
- xywh {625 365 105 20} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Group {} {
- label AMPLITUDE
- xywh {5 5 215 135} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
- } {
- Fl_Value_Slider vol {
- label Vol
- callback {pars->PVolume=(int)o->value();}
- tooltip Volume xywh {10 25 140 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->PVolume);}
- }
- Fl_Value_Slider vsns {
- label {V.Sns}
- callback {pars->PAmpVelocityScaleFunction=(int) o->value();}
- tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 45 140 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
- code0 {o->value(pars->PAmpVelocityScaleFunction);}
- }
- Fl_Dial pan {
- label Pan
- callback {pars->PPanning=(int) o->value();}
- tooltip {Panning (leftmost is Random)} xywh {185 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
- code0 {o->value(pars->PPanning);}
- class WidgetPDial
- }
- Fl_Group ampenv {
- label {SUBsynth - Amplitude Envelope} open
- xywh {10 65 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->AmpEnvelope);}
- class EnvelopeUI
- } {}
- }
- Fl_Group {} {
- xywh {495 325 235 35} box THIN_UP_FRAME
- } {
- Fl_Counter filterstages {
- label {Filter Stages}
- callback {pars->Pnumstages=(int) o->value();}
- tooltip {How many times the noise is filtered} xywh {515 340 45 15} type Simple labelfont 1 labelsize 10 align 1 minimum 1 maximum 5 step 1 textsize 10
- code0 {o->value(pars->Pnumstages);}
- }
- Fl_Choice magtype {
- label {Mag.Type}
- callback {pars->Phmagtype=(int) o->value();}
- xywh {585 340 65 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11
- code0 {o->value(pars->Phmagtype);}
- } {
- menuitem {} {
- label Linear
- xywh {20 20 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label {-40dB}
- xywh {30 30 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label {-60dB}
- xywh {40 40 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label {-80dB}
- xywh {50 50 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label {-100dB}
- xywh {60 60 100 20} labelfont 1 labelsize 11
- }
- }
- Fl_Choice start {
- label Start
- callback {pars->Pstart=(int) o->value();} open
- xywh {670 340 50 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11
- code0 {o->value(pars->Pstart);}
- } {
- menuitem {} {
- label Zero
- xywh {30 30 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label RND
- xywh {40 40 100 20} labelfont 1 labelsize 11
- }
- menuitem {} {
- label {Max.}
- xywh {50 50 100 20} labelfont 1 labelsize 11
- }
- }
- }
- Fl_Group freqsettingsui {
- label FREQUENCY
- xywh {440 5 290 135} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
- } {
- Fl_Group freqenvelopegroup {
- label {SUBsynth - Frequency Envelope} open
- xywh {445 65 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->FreqEnvelope);}
- code1 {if (pars->PFreqEnvelopeEnabled==0) o->deactivate();}
- class EnvelopeUI
- } {}
- Fl_Check_Button freqee {
- label Enabled
- callback {pars->PFreqEnvelopeEnabled=o->value();
-if (o->value()==0) freqenvelopegroup->deactivate();
- else freqenvelopegroup->activate();
-o->show();
-freqsettingsui->redraw();}
- xywh {445 68 55 15} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->PFreqEnvelopeEnabled);}
- }
- Fl_Counter octave {
- label Octave
- callback {int k=(int) o->value();
-if (k<0) k+=16;
-pars->PCoarseDetune = k*1024+
- pars->PCoarseDetune%1024;}
- tooltip Octave xywh {670 50 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
- code0 {int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;}
- code2 {o->value(k);}
- }
- Fl_Counter coarsedet {
- label {Coarse Det.}
- callback {int k=(int) o->value();
-if (k<0) k+=1024;
-pars->PCoarseDetune = k+
- (pars->PCoarseDetune/1024)*1024;}
- tooltip {Coarse Detune} xywh {655 115 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
- code0 {int k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;}
- code2 {o->value(k);}
- code3 {o->lstep(10);}
- }
- Fl_Slider detune {
- callback {pars->PDetune=(int)o->value()+8192;
-detunevalueoutput->do_callback();}
- tooltip {Fine Detune (cents)} xywh {495 25 230 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
- code0 {o->value(pars->PDetune-8192);}
- }
- Fl_Value_Output detunevalueoutput {
- label Detune
- callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
- xywh {448 25 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
- code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
- }
- Fl_Check_Button hz440 {
- label 440Hz
- callback {int x=(int) o->value();
-pars->Pfixedfreq=x;
-if (x==0) fixedfreqetdial->deactivate();
- else fixedfreqetdial->activate();}
- tooltip {set the base frequency to 440Hz} xywh {555 45 50 15} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->Pfixedfreq);}
- }
- Fl_Dial fixedfreqetdial {
- label {Eq.T.}
- callback {pars->PfixedfreqET=(int) o->value();}
- tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {610 45 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
- code0 {o->value(pars->PfixedfreqET);}
- code1 {if (pars->Pfixedfreq==0) o->deactivate();}
- class WidgetPDial
- }
- Fl_Choice detunetype {
- label {Detune Type}
- callback {pars->PDetuneType=(int) o->value()+1;
-detunevalueoutput->do_callback();} open
- xywh {655 85 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
- code1 {o->value(pars->PDetuneType-1);}
- } {}
- }
- Fl_Check_Button stereo {
- label Stereo
- callback {pars->Pstereo=(int) o->value();}
- xywh {440 325 55 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->Pstereo);}
- }
- Fl_Button {} {
- label Clear
- callback {for (int i=0;i<MAX_SUB_HARMONICS;i++){
- h[i]->mag->value(127);
- pars->Phmag[i]=0;
- h[i]->bw->value(64);
- pars->Phrelbw[i]=64;
-};
-pars->Phmag[0]=127;
-h[0]->mag->value(0);
-SUBparameters->redraw();}
- tooltip {Clear the harmonics} xywh {445 365 70 20} box THIN_UP_BOX labelfont 1 labelsize 11
- }
- Fl_Group bandwidthsettingsui {
- label BANDWIDTH
- xywh {220 5 220 135} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
- } {
- Fl_Group bandwidthenvelopegroup {
- label {SUBsynth - BandWidth Envelope} open
- xywh {225 65 205 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->BandWidthEnvelope);}
- code1 {if (pars->PBandWidthEnvelopeEnabled==0) o->deactivate();}
- class EnvelopeUI
- } {}
- Fl_Check_Button bwee {
- label Enabled
- callback {pars->PBandWidthEnvelopeEnabled=o->value();
-if (o->value()==0) bandwidthenvelopegroup->deactivate();
- else bandwidthenvelopegroup->activate();
-o->show();
-bandwidthsettingsui->redraw();}
- xywh {225 67 55 15} down_box DOWN_BOX labelfont 1 labelsize 10
- code0 {o->value(pars->PBandWidthEnvelopeEnabled);}
- }
- Fl_Value_Slider bandwidth {
- label {Band Width}
- callback {pars->Pbandwidth=(int) o->value();}
- xywh {225 40 115 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 1 maximum 127 step 1
- code0 {o->value(pars->Pbandwidth);}
- }
- Fl_Value_Slider bwidthscale {
- label {B.Width Scale}
- callback {pars->Pbwscale=(int) o->value()+64;}
- tooltip {How much I increase the BandWidth according to lower/higher harmonics} xywh {345 40 90 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 1 minimum -64 maximum 63 step 1
- code0 {o->value(pars->Pbwscale-64);}
- }
- }
- Fl_Group globalfiltergroup {
- label FILTER
- xywh {440 140 290 185} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
- code0 {if (pars->PGlobalFilterEnabled==0) o->deactivate();}
- } {
- Fl_Group filterenv {
- label {SUBsynth - Filter Envelope} open
- xywh {445 250 275 70} box FLAT_BOX color 51 align 144
- code0 {o->init(pars->GlobalFilterEnvelope);}
- class EnvelopeUI
- } {}
- Fl_Group filterui {
- label {SUBsynthl - Filter} open
- xywh {445 170 275 75} box FLAT_BOX color 50 align 144
- code0 {o->init(pars->GlobalFilter,&pars->PGlobalFilterVelocityScale,&pars->PGlobalFilterVelocityScaleFunction);}
- class FilterUI
- } {}
- }
- Fl_Check_Button filtere {
- label Enabled
- callback {pars->PGlobalFilterEnabled=o->value();
-if (o->value()==0) globalfiltergroup->deactivate();
- else globalfiltergroup->activate();
-o->show();
-globalfiltergroup->redraw();}
- xywh {445 145 85 20} down_box DOWN_BOX labelfont 1 labelsize 11
- code0 {o->value(pars->PGlobalFilterEnabled);}
- }
- Fl_Button {} {
- label C
- callback {presetsui->copy(pars);}
- xywh {540 370 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- Fl_Button {} {
- label P
- callback {presetsui->paste(pars,this);}
- xywh {570 370 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 7
- }
- }
- }
- Function {refresh()} {} {
- code {for (int i=0;i<MAX_SUB_HARMONICS;i++) h[i]->refresh();
-vol->value(pars->PVolume);
-vsns->value(pars->PAmpVelocityScaleFunction);
-pan->value(pars->PPanning);
-
-
-bandwidth->value(pars->Pbandwidth);
-bwidthscale->value(pars->Pbwscale-64);
-bwee->value(pars->PBandWidthEnvelopeEnabled);
-if (pars->PBandWidthEnvelopeEnabled==0) bandwidthenvelopegroup->deactivate();
- else bandwidthenvelopegroup->activate();
-bwee->show();
-bandwidthsettingsui->redraw();
-
-detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
-freqee->value(pars->PFreqEnvelopeEnabled);
-if (pars->PFreqEnvelopeEnabled==0) freqenvelopegroup->deactivate();
- else freqenvelopegroup->activate();
-freqee->show();
-freqsettingsui->redraw();
-
-detune->value(pars->PDetune-8192);
-hz440->value(pars->Pfixedfreq);
-
-fixedfreqetdial->value(pars->PfixedfreqET);
-
-int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
-octave->value(k);
-
-detunetype->value(pars->PDetuneType-1);
-
-k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
-coarsedet->value(k);
-
-filtere->value(pars->PGlobalFilterEnabled);
-if (pars->PGlobalFilterEnabled==0) globalfiltergroup->deactivate();
- else globalfiltergroup->activate();
-filtere->show();
-globalfiltergroup->redraw();
-
-stereo->value(pars->Pstereo);
-filterstages->value(pars->Pnumstages);
-magtype->value(pars->Phmagtype);
-start->value(pars->Pstart);
-
-ampenv->refresh();
-bandwidthenvelopegroup->refresh();
-freqenvelopegroup->refresh();
-filterui->refresh();
-filterenv->refresh();} {}
- }
- Function {SUBnoteUI(SUBnoteParameters *parameters)} {} {
- code {pars=parameters;
-make_window();} {}
- }
- Function {~SUBnoteUI()} {} {
- code {//for (int i=0;i<MAX_SUB_HARMONICS;i++) delete (h[i]);
-SUBparameters->hide();
-delete(SUBparameters);} {}
- }
- decl {SUBnoteParameters *pars;} {}
- decl {SUBnoteharmonic *h[MAX_SUB_HARMONICS];} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/SUBnoteUI.h b/plugins/zynaddsubfx/src/UI/SUBnoteUI.h
deleted file mode 100644
index 569e69d..0000000
--- a/plugins/zynaddsubfx/src/UI/SUBnoteUI.h
+++ /dev/null
@@ -1,179 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef SUBnoteUI_h
-#define SUBnoteUI_h
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "../globals.h"
-#include "WidgetPDial.h"
-#include "EnvelopeUI.h"
-#include "FilterUI.h"
-#include "../Misc/Util.h"
-#include "../Params/SUBnoteParameters.h"
-#include "PresetsUI.h"
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Box.H>
-
-class SUBnoteharmonic : public Fl_Group {
- Fl_Group* make_window();
-public:
- Fl_Group *harmonic;
- Fl_Slider *mag;
-private:
- void cb_mag_i(Fl_Slider*, void*);
- static void cb_mag(Fl_Slider*, void*);
-public:
- Fl_Slider *bw;
-private:
- void cb_bw_i(Fl_Slider*, void*);
- static void cb_bw(Fl_Slider*, void*);
-public:
- SUBnoteharmonic(int x,int y, int w, int h, const char *label=0);
- void init(SUBnoteParameters *pars_,int n_);
- void refresh();
- ~SUBnoteharmonic();
-private:
- SUBnoteParameters *pars;
- int n;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Pack.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Value_Output.H>
-
-class SUBnoteUI : public PresetsUI_ {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *SUBparameters;
- Fl_Pack *harmonics;
-private:
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
-public:
- Fl_Value_Slider *vol;
-private:
- void cb_vol_i(Fl_Value_Slider*, void*);
- static void cb_vol(Fl_Value_Slider*, void*);
-public:
- Fl_Value_Slider *vsns;
-private:
- void cb_vsns_i(Fl_Value_Slider*, void*);
- static void cb_vsns(Fl_Value_Slider*, void*);
-public:
- WidgetPDial *pan;
-private:
- void cb_pan_i(WidgetPDial*, void*);
- static void cb_pan(WidgetPDial*, void*);
-public:
- EnvelopeUI *ampenv;
- Fl_Counter *filterstages;
-private:
- void cb_filterstages_i(Fl_Counter*, void*);
- static void cb_filterstages(Fl_Counter*, void*);
-public:
- Fl_Choice *magtype;
-private:
- void cb_magtype_i(Fl_Choice*, void*);
- static void cb_magtype(Fl_Choice*, void*);
- static Fl_Menu_Item menu_magtype[];
-public:
- Fl_Choice *start;
-private:
- void cb_start_i(Fl_Choice*, void*);
- static void cb_start(Fl_Choice*, void*);
- static Fl_Menu_Item menu_start[];
-public:
- Fl_Group *freqsettingsui;
- EnvelopeUI *freqenvelopegroup;
- Fl_Check_Button *freqee;
-private:
- void cb_freqee_i(Fl_Check_Button*, void*);
- static void cb_freqee(Fl_Check_Button*, void*);
-public:
- Fl_Counter *octave;
-private:
- void cb_octave_i(Fl_Counter*, void*);
- static void cb_octave(Fl_Counter*, void*);
-public:
- Fl_Counter *coarsedet;
-private:
- void cb_coarsedet_i(Fl_Counter*, void*);
- static void cb_coarsedet(Fl_Counter*, void*);
-public:
- Fl_Slider *detune;
-private:
- void cb_detune_i(Fl_Slider*, void*);
- static void cb_detune(Fl_Slider*, void*);
-public:
- Fl_Value_Output *detunevalueoutput;
-private:
- void cb_detunevalueoutput_i(Fl_Value_Output*, void*);
- static void cb_detunevalueoutput(Fl_Value_Output*, void*);
-public:
- Fl_Check_Button *hz440;
-private:
- void cb_hz440_i(Fl_Check_Button*, void*);
- static void cb_hz440(Fl_Check_Button*, void*);
-public:
- WidgetPDial *fixedfreqetdial;
-private:
- void cb_fixedfreqetdial_i(WidgetPDial*, void*);
- static void cb_fixedfreqetdial(WidgetPDial*, void*);
-public:
- Fl_Choice *detunetype;
-private:
- void cb_detunetype_i(Fl_Choice*, void*);
- static void cb_detunetype(Fl_Choice*, void*);
-public:
- Fl_Check_Button *stereo;
-private:
- void cb_stereo_i(Fl_Check_Button*, void*);
- static void cb_stereo(Fl_Check_Button*, void*);
- void cb_Clear_i(Fl_Button*, void*);
- static void cb_Clear(Fl_Button*, void*);
-public:
- Fl_Group *bandwidthsettingsui;
- EnvelopeUI *bandwidthenvelopegroup;
- Fl_Check_Button *bwee;
-private:
- void cb_bwee_i(Fl_Check_Button*, void*);
- static void cb_bwee(Fl_Check_Button*, void*);
-public:
- Fl_Value_Slider *bandwidth;
-private:
- void cb_bandwidth_i(Fl_Value_Slider*, void*);
- static void cb_bandwidth(Fl_Value_Slider*, void*);
-public:
- Fl_Value_Slider *bwidthscale;
-private:
- void cb_bwidthscale_i(Fl_Value_Slider*, void*);
- static void cb_bwidthscale(Fl_Value_Slider*, void*);
-public:
- Fl_Group *globalfiltergroup;
- EnvelopeUI *filterenv;
- FilterUI *filterui;
- Fl_Check_Button *filtere;
-private:
- void cb_filtere_i(Fl_Check_Button*, void*);
- static void cb_filtere(Fl_Check_Button*, void*);
- void cb_C_i(Fl_Button*, void*);
- static void cb_C(Fl_Button*, void*);
- void cb_P_i(Fl_Button*, void*);
- static void cb_P(Fl_Button*, void*);
-public:
- void refresh();
- SUBnoteUI(SUBnoteParameters *parameters);
- ~SUBnoteUI();
-private:
- SUBnoteParameters *pars;
- SUBnoteharmonic *h[MAX_SUB_HARMONICS];
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/SeqUI.cc b/plugins/zynaddsubfx/src/UI/SeqUI.cc
deleted file mode 100644
index d48fd4d..0000000
--- a/plugins/zynaddsubfx/src/UI/SeqUI.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "SeqUI.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-void SeqUI::cb_playbutton_i(Fl_Button* o, void*) {
- o->deactivate();
-stopbutton_play->activate();
-
-master->seq.startplay();
-}
-void SeqUI::cb_playbutton(Fl_Button* o, void* v) {
- ((SeqUI*)(o->parent()->parent()->user_data()))->cb_playbutton_i(o,v);
-}
-
-void SeqUI::cb_stopbutton_play_i(Fl_Button* o, void*) {
- o->deactivate();
-playbutton->activate();
-
-master->seq.stopplay();
-}
-void SeqUI::cb_stopbutton_play(Fl_Button* o, void* v) {
- ((SeqUI*)(o->parent()->parent()->user_data()))->cb_stopbutton_play_i(o,v);
-}
-
-void SeqUI::cb_Open_i(Fl_Button*, void*) {
- master->seq.importmidifile("test.mid");
-}
-void SeqUI::cb_Open(Fl_Button* o, void* v) {
- ((SeqUI*)(o->parent()->user_data()))->cb_Open_i(o,v);
-}
-
-void SeqUI::cb_Play_i(Fl_Value_Slider* o, void*) {
- master->seq.setplayspeed((int) o->value());
-}
-void SeqUI::cb_Play(Fl_Value_Slider* o, void* v) {
- ((SeqUI*)(o->parent()->user_data()))->cb_Play_i(o,v);
-}
-
-Fl_Double_Window* SeqUI::make_window() {
- { seqwin = new Fl_Double_Window(280, 265, "Sequencer - ZynAddSubFX");
- seqwin->user_data((void*)(this));
- { Fl_Group* o = new Fl_Group(120, 20, 100, 65, "Player");
- o->box(FL_ENGRAVED_BOX);
- o->labelfont(1);
- { playbutton = new Fl_Button(130, 30, 30, 30, "Play");
- playbutton->tooltip("Start Playing");
- playbutton->box(FL_DIAMOND_UP_BOX);
- playbutton->color((Fl_Color)79);
- playbutton->labelfont(1);
- playbutton->labelsize(13);
- playbutton->callback((Fl_Callback*)cb_playbutton);
- playbutton->align(Fl_Align(FL_ALIGN_BOTTOM));
- } // Fl_Button* playbutton
- { stopbutton_play = new Fl_Button(175, 29, 30, 31, "Stop");
- stopbutton_play->tooltip("Stop Playing");
- stopbutton_play->box(FL_THIN_UP_BOX);
- stopbutton_play->color((Fl_Color)4);
- stopbutton_play->labelfont(1);
- stopbutton_play->labelsize(13);
- stopbutton_play->callback((Fl_Callback*)cb_stopbutton_play);
- stopbutton_play->align(Fl_Align(FL_ALIGN_BOTTOM));
- stopbutton_play->deactivate();
- } // Fl_Button* stopbutton_play
- o->end();
- } // Fl_Group* o
- { Fl_Button* o = new Fl_Button(20, 25, 75, 55, "Open test.mid");
- o->callback((Fl_Callback*)cb_Open);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Button* o
- { Fl_Value_Slider* o = new Fl_Value_Slider(15, 105, 190, 20, "Play speed");
- o->type(5);
- o->minimum(-128);
- o->maximum(128);
- o->step(1);
- o->callback((Fl_Callback*)cb_Play);
- o->value(master->seq.playspeed);
- } // Fl_Value_Slider* o
- { Fl_Box* o = new Fl_Box(25, 155, 225, 90, "This is not finished");
- o->labelfont(1);
- o->labelsize(22);
- o->align(Fl_Align(FL_ALIGN_WRAP));
- } // Fl_Box* o
- seqwin->end();
- } // Fl_Double_Window* seqwin
- return seqwin;
-}
-
-SeqUI::SeqUI(Master *master_) {
- master=master_;
-
- make_window();
-}
-
-void SeqUI::show() {
- seqwin->show();
-}
diff --git a/plugins/zynaddsubfx/src/UI/SeqUI.fl b/plugins/zynaddsubfx/src/UI/SeqUI.fl
deleted file mode 100644
index 343719c..0000000
--- a/plugins/zynaddsubfx/src/UI/SeqUI.fl
+++ /dev/null
@@ -1,73 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0105
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include "../globals.h"} {public
-}
-
-decl {\#include "../Misc/Master.h"} {public
-}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-class SeqUI {} {
- Function {make_window()} {} {
- Fl_Window seqwin {
- label {Sequencer - ZynAddSubFX}
- xywh {104 235 280 265} type Double hide
- } {
- Fl_Group {} {
- label Player
- xywh {120 20 100 65} box ENGRAVED_BOX labelfont 1
- } {
- Fl_Button playbutton {
- label Play
- callback {o->deactivate();
-stopbutton_play->activate();
-
-master->seq.startplay();}
- tooltip {Start Playing} xywh {130 30 30 30} box DIAMOND_UP_BOX color 79 labelfont 1 labelsize 13 align 2
- }
- Fl_Button stopbutton_play {
- label Stop
- callback {o->deactivate();
-playbutton->activate();
-
-master->seq.stopplay();}
- tooltip {Stop Playing} xywh {175 29 30 31} box THIN_UP_BOX color 4 labelfont 1 labelsize 13 align 2 deactivate
- }
- }
- Fl_Button {} {
- label {Open test.mid}
- callback {master->seq.importmidifile("test.mid");}
- xywh {20 25 75 55} align 128
- }
- Fl_Value_Slider {} {
- label {Play speed}
- callback {master->seq.setplayspeed((int) o->value());}
- xywh {15 105 190 20} type {Horz Knob} minimum -128 maximum 128 step 1
- code0 {o->value(master->seq.playspeed);}
- }
- Fl_Box {} {
- label {This is not finished} selected
- xywh {25 155 225 90} labelfont 1 labelsize 22 align 128
- }
- }
- }
- Function {SeqUI(Master *master_)} {open
- } {
- code {master=master_;
-
-make_window();} {}
- }
- decl {Master *master} {}
- Function {show()} {open
- } {
- code {seqwin->show();} {}
- }
-}
diff --git a/plugins/zynaddsubfx/src/UI/SeqUI.h b/plugins/zynaddsubfx/src/UI/SeqUI.h
deleted file mode 100644
index 0cdad05..0000000
--- a/plugins/zynaddsubfx/src/UI/SeqUI.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef SeqUI_h
-#define SeqUI_h
-#include <FL/Fl.H>
-#include "../globals.h"
-#include "../Misc/Master.h"
-#include "WidgetPDial.h"
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Box.H>
-
-class SeqUI {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *seqwin;
- Fl_Button *playbutton;
-private:
- void cb_playbutton_i(Fl_Button*, void*);
- static void cb_playbutton(Fl_Button*, void*);
-public:
- Fl_Button *stopbutton_play;
-private:
- void cb_stopbutton_play_i(Fl_Button*, void*);
- static void cb_stopbutton_play(Fl_Button*, void*);
- void cb_Open_i(Fl_Button*, void*);
- static void cb_Open(Fl_Button*, void*);
- void cb_Play_i(Fl_Value_Slider*, void*);
- static void cb_Play(Fl_Value_Slider*, void*);
-public:
- SeqUI(Master *master_);
-private:
- Master *master;
-public:
- void show();
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/VirKeyboard.cc b/plugins/zynaddsubfx/src/UI/VirKeyboard.cc
deleted file mode 100644
index 8e6d2ee..0000000
--- a/plugins/zynaddsubfx/src/UI/VirKeyboard.cc
+++ /dev/null
@@ -1,499 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "VirKeyboard.h"
-//Copyright (c) 2002-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-static const int keyspos[12]={0,-1,1,-2,2,3,-4,4,-5,5,-6,6};
-static const int keysoct1qwerty[]={'q','2','w','3','e','r','5','t','6','y','7','u','i','9','o','0','p','[','=',']','\\',FL_Enter,0};
-static const int keysoct2qwerty[]={'z','s','x','d','c','v','g','b','h','n','j','m',',','l','.',';','/',0};
-static const int keysoct1dw[]={'\'','2',',','3','.','p','5','y','6','f','7','g','c','9','r','0','l','/',']','=','\\',FL_Enter,0};
-static const int keysoct2dw[]={';','o','q','e','j','k','i','x','d','b','h','m','w','n','v','s','z',0};
-static const int keysoct1qwertz[]={'q','2','w','3','e','r','5','t','6','z','7','u','i','9','o','0','p',252,'\'','+','\\',FL_Enter,0};
-static const int keysoct2qwertz[]={'y','s','x','d','c','v','g','b','h','n','j','m',',','l','.',246,'-',0};
-static const int keysoct1az[]={'a',233,'z','\"','e','r','(','t','-','y',232,'u','i',231,'o',224,'p',65106,'=','$',0};
-static const int keysoct2az[]={'w','s','x','d','c','v','g','b','h','n','j',',',';','l',':','m','!',0};
-
-VirKeys::VirKeys(int x,int y, int w, int h, const char *label):Fl_Box(x,y,w,h,label) {
- master=NULL;
-}
-
-void VirKeys::init(Master *master_) {
- master=master_;
- for (int i=0;i<N_OCT*12+1;i++) pressed[i]=0;
- midich=0;
- midivel=100;
- midioct=2;
-
- keyoct1=3;
- keyoct2=2;
- rndvelocity=0;
-}
-
-void VirKeys::draw() {
- int ox=x(),oy=y(),lx=w(),ly=h()-1,i;
-
- if (damage()!=1){
- fl_color(250,240,230);
- fl_rectf(ox,oy,lx,ly);
-
- fl_color(FL_BLACK);
- fl_line(ox,oy,ox+lx,oy);
- fl_line(ox,oy+ly,ox+lx,oy+ly);
- for (i=0;i<N_OCT*7+1;i++){
- fl_line(ox+i*SIZE_WHITE,oy,ox+i*SIZE_WHITE,oy+ly);
- int ik=i%7;
- if ((ik==1)||(ik==2)||(ik==4)||(ik==5)||(ik==6))
- fl_rectf(ox+i*SIZE_WHITE-SIZE_BLACK/2,oy,
- SIZE_BLACK+1,ly*3/5);
- };
- };
-
-
- for (i=0;i<N_OCT*12;i++){
- // if (pressed[i]==0) continue;
-
- int noct=i/12;
- int kv=keyspos[i%12];
-
- if (kv>=0){//white keys
- if (pressed[i]==0) fl_color(250,240,230);
- else fl_color(FL_BLUE);
- fl_rectf(ox+(kv+7*noct)*SIZE_WHITE+3,oy+ly*3/5+2,
- SIZE_WHITE-4,ly*2/5-3);
- } else {//black keys
- kv=keyspos[(i+1)%12];
- if (pressed[i]==0) fl_color(FL_BLACK);
- else fl_color(FL_BLUE);
- fl_rectf(ox+(kv+7*noct)*SIZE_WHITE-SIZE_BLACK/2+2,oy+2,
- SIZE_BLACK-3,ly*3/5-5);
- };
- };
-}
-
-int VirKeys::handle(int event) {
- int i;
- int ly=h();
- int x_=Fl::event_x()-x();
- int y_=Fl::event_y()-y();
- if ( (x_<0)&&(x_>w()) && (y_<0)&&(y_>h())){
- return(0);
- };
-
-
- if ((event==FL_PUSH)||(event==FL_DRAG)||(event==FL_RELEASE)){
- int kpos=-1;
-
- if (y_>ly*3/5){//white keys
- int pos=x_/SIZE_WHITE;
- if (pos<0) return(1);
- for (i=0;i<12;i++) {
- if (pos%7==keyspos[i]) {
- kpos=pos/7*12+i;
- break;
- };
- };
- } else {//black keys
- int pos=(x_+SIZE_WHITE/2)/SIZE_WHITE;
- if (pos<0) return(1);
- for (i=1;i<12;i++) {
- if (pos%7==-keyspos[i]) {
- kpos=pos/7*12+i;
- break;
- };
- };
- };
-
- if ((kpos!=-1)&&((event==FL_PUSH)||(event==FL_DRAG))&&
- (Fl::event_shift()==0)) {
- presskey(kpos,1,1);
- };
-
- if ((event==FL_PUSH)&&(Fl::event_shift()!=0)) {
- if (pressed[kpos]==0) presskey(kpos,0,1);
- else relasekey(kpos,1);
- };
- if ((event==FL_RELEASE)&&(Fl::event_shift()==0))
- relaseallkeys(1);
- take_focus();
- };
-
-
- const int *keysoct1=keysoct1qwerty;
- const int *keysoct2=keysoct2qwerty;
-
- if (config.cfg.VirKeybLayout==2) {
- keysoct1=keysoct1dw;
- keysoct2=keysoct2dw;
- }else if (config.cfg.VirKeybLayout==3) {
- keysoct1=keysoct1qwertz;
- keysoct2=keysoct2qwertz;
- }else if (config.cfg.VirKeybLayout==4) {
- keysoct1=keysoct1az;
- keysoct2=keysoct2az;
- };
-
- if ((event==FL_KEYDOWN)||(event==FL_KEYUP)){
- int key=Fl::event_key();
- int kpos=-1;
- for (i=0;keysoct1[i]!=0;i++) if (key==keysoct1[i]) kpos=i+12*keyoct1;
- for (i=0;keysoct2[i]!=0;i++) if (key==keysoct2[i]) kpos=i+12*keyoct2;
-
-
-
-
- if (kpos==-1) return(0);
- if ((event==FL_KEYUP) && (Fl::event_key(key)==0) && (Fl::get_key(key)!=0)) return(0);
- if (event==FL_KEYDOWN) presskey(kpos,0,2);
- else relasekey(kpos,2);
- };
-
- return(1);
-}
-
-void VirKeys::presskey(int nk,int exclusive,int type) {
- //Exclusive means that multiple keys can be pressed at once
- //when the user uses the shift key
- if (nk>=N_OCT*12) return;
- if ((nk<0)&&(exclusive==0)) {
- relaseallkeys(type);
- return;
- };
- if (nk<0) return;
- if (pressed[nk]!=0) return;//the key is already pressed
-
- if (exclusive!=0) relaseallkeys(type);
- pressed[nk]=type;
-
- damage(1);
- float vel=midivel;
- if (rndvelocity!=0){
- vel=midivel*(127.0-rndvelocity)/127.0+RND*rndvelocity;
- };
-
- pthread_mutex_lock(&master->mutex);
- master->NoteOn(midich,nk+midioct*12,(int)vel);
- pthread_mutex_unlock(&master->mutex);
-}
-
-void VirKeys::relasekey(int nk,int type) {
- if ((nk<0)||(nk>=N_OCT*12)) return;
- if (pressed[nk]==0) return;//the key is not pressed
- if ((type!=0)&&(pressed[nk]!=type)) return;
-
- pressed[nk]=0;
-
-
- damage(1);
-
- pthread_mutex_lock(&master->mutex);
- master->NoteOff(midich,nk+12*midioct);
- pthread_mutex_unlock(&master->mutex);
-}
-
-void VirKeys::relaseallkeys(int type) {
- for (int i=0;i<N_OCT*12;i++) relasekey(i,type);
-}
-
-void VirKeyboard::cb_virkeyboardwindow_i(Fl_Double_Window*, void*) {
- relaseallkeys();
-virkeyboardwindow->hide();
-}
-void VirKeyboard::cb_virkeyboardwindow(Fl_Double_Window* o, void* v) {
- ((VirKeyboard*)(o->user_data()))->cb_virkeyboardwindow_i(o,v);
-}
-
-void VirKeyboard::cb_qwer_i(Fl_Counter* o, void*) {
- relaseallkeys();
-virkeys->keyoct1=(int) o->value();
-virkeys->take_focus();
-}
-void VirKeyboard::cb_qwer(Fl_Counter* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_qwer_i(o,v);
-}
-
-void VirKeyboard::cb_zxcv_i(Fl_Counter* o, void*) {
- relaseallkeys();
-virkeys->keyoct2=(int) o->value();
-virkeys->take_focus();
-}
-void VirKeyboard::cb_zxcv(Fl_Counter* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_zxcv_i(o,v);
-}
-
-void VirKeyboard::cb_Vel_i(Fl_Value_Slider* o, void*) {
- virkeys->midivel=(int) o->value();
-virkeys->take_focus();
-}
-void VirKeyboard::cb_Vel(Fl_Value_Slider* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_Vel_i(o,v);
-}
-
-void VirKeyboard::cb_Oct_i(Fl_Counter* o, void*) {
- relaseallkeys();
-virkeys->midioct=(int) o->value();
-virkeys->take_focus();
-}
-void VirKeyboard::cb_Oct(Fl_Counter* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_Oct_i(o,v);
-}
-
-void VirKeyboard::cb_Close_i(Fl_Button*, void*) {
- relaseallkeys();
-virkeyboardwindow->hide();
-}
-void VirKeyboard::cb_Close(Fl_Button* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_Close_i(o,v);
-}
-
-void VirKeyboard::cb_Cval_i(Fl_Value_Slider* o, void*) {
- int ctl=midictl;
-
-pthread_mutex_lock(&master->mutex);
- master->SetController(virkeys->midich,ctl,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-virkeys->take_focus();
-}
-void VirKeyboard::cb_Cval(Fl_Value_Slider* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_Cval_i(o,v);
-}
-
-void VirKeyboard::cb_Controller_i(Fl_Choice* o, void*) {
- switch((int) o->value()+1){
- case 1: midictl=C_modwheel; break;
- case 2: midictl=C_volume; break;
- case 3: midictl=C_panning; break;
- case 4: midictl=C_expression; break;
- case 5: midictl=C_sustain; break;
- case 6: midictl=C_portamento; break;
- case 7: midictl=C_filterq; break;
- case 8: midictl=C_filtercutoff; break;
- case 9: midictl=C_bandwidth; break;
- case 10: midictl=C_fmamp; break;
- case 11: midictl=C_resonance_center; break;
- case 12: midictl=C_resonance_bandwidth; break;
- default: midictl=C_NULL; break;
-
-};
-
-
-
-virkeys->take_focus();
-}
-void VirKeyboard::cb_Controller(Fl_Choice* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_Controller_i(o,v);
-}
-
-Fl_Menu_Item VirKeyboard::menu_Controller[] = {
- {"01: Mod.Wheel", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"07: Volume", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"10: Panning", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"11: Expression", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"64: Sustain", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"65: Portamento", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"71: Filter Q", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"74: Filter Freq.", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"75: Bandwidth", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"76: FM Gain", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"77: Res. c. freq", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {"78: Res. bw.", 0, 0, 0, 0, FL_NORMAL_LABEL, 1, 10, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-void VirKeyboard::cb_pitchwheelroller_i(Fl_Roller* o, void*) {
- pthread_mutex_lock(&master->mutex);
- master->SetController(virkeys->midich,C_pitchwheel,-(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-virkeys->take_focus();
-}
-void VirKeyboard::cb_pitchwheelroller(Fl_Roller* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_pitchwheelroller_i(o,v);
-}
-
-void VirKeyboard::cb_R_i(Fl_Button*, void*) {
- pitchwheelroller->value(0);
-pitchwheelroller->do_callback();
-}
-void VirKeyboard::cb_R(Fl_Button* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_R_i(o,v);
-}
-
-void VirKeyboard::cb_Vrnd_i(WidgetPDial* o, void*) {
- virkeys->rndvelocity=(int) o->value();
-}
-void VirKeyboard::cb_Vrnd(WidgetPDial* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_Vrnd_i(o,v);
-}
-
-void VirKeyboard::cb_partrcv_i(Fl_Choice* o, void*) {
- relaseallkeys();
-virkeys->midich=(int) o->value();
-virkeys->take_focus();
-}
-void VirKeyboard::cb_partrcv(Fl_Choice* o, void* v) {
- ((VirKeyboard*)(o->parent()->user_data()))->cb_partrcv_i(o,v);
-}
-
-Fl_Double_Window* VirKeyboard::make_window() {
- { virkeyboardwindow = new Fl_Double_Window(650, 130, "Virtual Keyboard - ZynAddSubFX");
- virkeyboardwindow->callback((Fl_Callback*)cb_virkeyboardwindow, (void*)(this));
- { VirKeys* o = virkeys = new VirKeys(10, 10, 590, 80, "Keyboard");
- virkeys->box(FL_FLAT_BOX);
- virkeys->color((Fl_Color)17);
- virkeys->selection_color(FL_BACKGROUND_COLOR);
- virkeys->labeltype(FL_NORMAL_LABEL);
- virkeys->labelfont(0);
- virkeys->labelsize(14);
- virkeys->labelcolor(FL_FOREGROUND_COLOR);
- virkeys->align(Fl_Align(FL_ALIGN_CENTER));
- virkeys->when(FL_WHEN_RELEASE);
- o->init(master);
- } // VirKeys* virkeys
- { Fl_Counter* o = new Fl_Counter(380, 95, 45, 15, "\"qwer..\" Oct");
- o->tooltip("keys \"q2w3er5t6y...\" octave");
- o->type(1);
- o->labelsize(10);
- o->minimum(0);
- o->maximum(5);
- o->step(1);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_qwer);
- o->align(Fl_Align(FL_ALIGN_LEFT));
- o->when(FL_WHEN_RELEASE_ALWAYS);
- o->value(virkeys->keyoct1);
- } // Fl_Counter* o
- { Fl_Counter* o = new Fl_Counter(380, 110, 45, 15, "\"zxcv..\" Oct");
- o->tooltip("keys \"zsxdcvgbh...\" octave");
- o->type(1);
- o->labelsize(10);
- o->minimum(0);
- o->maximum(5);
- o->step(1);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_zxcv);
- o->align(Fl_Align(FL_ALIGN_LEFT));
- o->when(FL_WHEN_RELEASE_ALWAYS);
- o->value(virkeys->keyoct2);
- } // Fl_Counter* o
- { Fl_Value_Slider* o = new Fl_Value_Slider(95, 105, 100, 15, "Vel");
- o->tooltip("Velocity");
- o->type(5);
- o->box(FL_FLAT_BOX);
- o->labelsize(10);
- o->minimum(1);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Vel);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->value(virkeys->midivel);
- } // Fl_Value_Slider* o
- { Fl_Counter* o = new Fl_Counter(255, 100, 55, 20, "Oct.");
- o->tooltip("Midi Octave");
- o->type(1);
- o->labelsize(11);
- o->minimum(0);
- o->maximum(5);
- o->step(1);
- o->textfont(1);
- o->textsize(11);
- o->callback((Fl_Callback*)cb_Oct);
- o->align(Fl_Align(FL_ALIGN_LEFT));
- o->when(FL_WHEN_RELEASE_ALWAYS);
- o->value(virkeys->midioct);
- } // Fl_Counter* o
- { Fl_Button* o = new Fl_Button(545, 105, 55, 20, "Close");
- o->box(FL_THIN_UP_BOX);
- o->callback((Fl_Callback*)cb_Close);
- } // Fl_Button* o
- { Fl_Value_Slider* o = new Fl_Value_Slider(605, 10, 15, 115, "Cval");
- o->tooltip("Controller value");
- o->type(2);
- o->box(FL_ENGRAVED_BOX);
- o->selection_color((Fl_Color)229);
- o->labelsize(8);
- o->minimum(127);
- o->maximum(0);
- o->step(1);
- o->value(64);
- o->textsize(7);
- o->callback((Fl_Callback*)cb_Cval);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- } // Fl_Value_Slider* o
- { Fl_Choice* o = new Fl_Choice(435, 105, 100, 15, "Controller");
- o->down_box(FL_BORDER_BOX);
- o->labelsize(10);
- o->textfont(1);
- o->textsize(10);
- o->callback((Fl_Callback*)cb_Controller);
- o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- o->when(FL_WHEN_RELEASE_ALWAYS);
- o->menu(menu_Controller);
- midictl=C_filtercutoff;o->value(7);
- } // Fl_Choice* o
- { pitchwheelroller = new Fl_Roller(625, 10, 20, 95, "Pwh");
- pitchwheelroller->tooltip("Pitch Wheel");
- pitchwheelroller->box(FL_PLASTIC_UP_BOX);
- pitchwheelroller->labelsize(8);
- pitchwheelroller->minimum(-8192);
- pitchwheelroller->maximum(8192);
- pitchwheelroller->step(64);
- pitchwheelroller->callback((Fl_Callback*)cb_pitchwheelroller);
- pitchwheelroller->align(Fl_Align(FL_ALIGN_TOP));
- pitchwheelroller->when(3);
- } // Fl_Roller* pitchwheelroller
- { Fl_Button* o = new Fl_Button(625, 110, 20, 15, "R");
- o->tooltip("Reset Pitch Bend");
- o->box(FL_THIN_UP_BOX);
- o->labelfont(1);
- o->callback((Fl_Callback*)cb_R);
- } // Fl_Button* o
- { WidgetPDial* o = new WidgetPDial(205, 105, 20, 20, "Vrnd");
- o->tooltip("Velocity Randomness");
- o->box(FL_ROUND_UP_BOX);
- o->color(FL_BACKGROUND_COLOR);
- o->selection_color(FL_INACTIVE_COLOR);
- o->labeltype(FL_NORMAL_LABEL);
- o->labelfont(0);
- o->labelsize(10);
- o->labelcolor(FL_FOREGROUND_COLOR);
- o->maximum(127);
- o->step(1);
- o->callback((Fl_Callback*)cb_Vrnd);
- o->align(Fl_Align(129));
- o->when(FL_WHEN_CHANGED);
- o->value(virkeys->rndvelocity);
- } // WidgetPDial* o
- { Fl_Choice* o = partrcv = new Fl_Choice(20, 105, 65, 20, "MIDI Ch.");
- partrcv->tooltip("Send to Midi Channel");
- partrcv->down_box(FL_BORDER_BOX);
- partrcv->labelsize(10);
- partrcv->textfont(1);
- partrcv->textsize(10);
- partrcv->callback((Fl_Callback*)cb_partrcv);
- partrcv->align(Fl_Align(FL_ALIGN_TOP_LEFT));
- char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Chn%d",i+1);if (i!=9) o->add(nrstr); else o->add("Drum10");};
- o->value(virkeys->midich);
- } // Fl_Choice* partrcv
- virkeyboardwindow->end();
- } // Fl_Double_Window* virkeyboardwindow
- return virkeyboardwindow;
-}
-
-VirKeyboard::VirKeyboard(Master *master_) {
- master=master_;
- midictl=75;
- make_window();
-}
-
-VirKeyboard::~VirKeyboard() {
- delete virkeyboardwindow;
-}
-
-void VirKeyboard::show() {
- virkeyboardwindow->show();
-}
-
-void VirKeyboard::relaseallkeys() {
- virkeys->relaseallkeys(0);
-}
diff --git a/plugins/zynaddsubfx/src/UI/VirKeyboard.fl b/plugins/zynaddsubfx/src/UI/VirKeyboard.fl
deleted file mode 100644
index a0b4c72..0000000
--- a/plugins/zynaddsubfx/src/UI/VirKeyboard.fl
+++ /dev/null
@@ -1,424 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0107
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <stdlib.h>} {public
-}
-
-decl {\#include <FL/fl_draw.H>} {public
-}
-
-decl {\#include <FL/Fl_Box.H>} {public
-}
-
-decl {\#include "../globals.h"} {public
-}
-
-decl {\#include "../Misc/Master.h"} {public
-}
-
-decl {\#include "../Input/MidiIn.h"} {public
-}
-
-decl {\#include "WidgetPDial.h"} {public
-}
-
-decl {const int keyspos[12]={0,-1,1,-2,2,3,-4,4,-5,5,-6,6};} {}
-
-decl {const int keysoct1qwerty[]={'q','2','w','3','e','r','5','t','6','y','7','u','i','9','o','0','p','[','=',']','\\\\',FL_Enter,0};} {}
-
-decl {const int keysoct2qwerty[]={'z','s','x','d','c','v','g','b','h','n','j','m',',','l','.',';','/',0};} {}
-
-decl {const int keysoct1dw[]={'\\'','2',',','3','.','p','5','y','6','f','7','g','c','9','r','0','l','/',']','=','\\\\',FL_Enter,0};} {}
-
-decl {const int keysoct2dw[]={';','o','q','e','j','k','i','x','d','b','h','m','w','n','v','s','z',0};} {}
-
-decl {const int keysoct1qwertz[]={'q','2','w','3','e','r','5','t','6','z','7','u','i','9','o','0','p',252,'\\'','+','\\\\',FL_Enter,0};} {}
-
-decl {const int keysoct2qwertz[]={'y','s','x','d','c','v','g','b','h','n','j','m',',','l','.',246,'-',0};} {}
-
-decl {const int keysoct1az[]={'a',233,'z','\\"','e','r','(','t','-','y',232,'u','i',231,'o',224,'p',65106,'=','$',0};} {}
-
-decl {const int keysoct2az[]={'w','s','x','d','c','v','g','b','h','n','j',',',';','l',':','m','!',0};} {}
-
-class VirKeys {: {public Fl_Box}
-} {
- decl {static const int N_OCT=6;} {}
- decl {static const int SIZE_WHITE=14;} {}
- decl {static const int SIZE_BLACK=8;} {}
- Function {VirKeys(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
- code {master=NULL;} {}
- }
- Function {init(Master *master_)} {} {
- code {master=master_;
-for (int i=0;i<N_OCT*12+1;i++) pressed[i]=0;
-midich=0;
-midivel=100;
-midioct=2;
-
-keyoct1=3;
-keyoct2=2;
-rndvelocity=0;} {}
- }
- Function {draw()} {} {
- code {int ox=x(),oy=y(),lx=w(),ly=h()-1,i;
-
-if (damage()!=1){
- fl_color(250,240,230);
- fl_rectf(ox,oy,lx,ly);
-
- fl_color(FL_BLACK);
- fl_line(ox,oy,ox+lx,oy);
- fl_line(ox,oy+ly,ox+lx,oy+ly);
- for (i=0;i<N_OCT*7+1;i++){
- fl_line(ox+i*SIZE_WHITE,oy,ox+i*SIZE_WHITE,oy+ly);
- int ik=i%7;
- if ((ik==1)||(ik==2)||(ik==4)||(ik==5)||(ik==6))
- fl_rectf(ox+i*SIZE_WHITE-SIZE_BLACK/2,oy,
- SIZE_BLACK+1,ly*3/5);
- };
-};
-
-
-for (i=0;i<N_OCT*12;i++){
- // if (pressed[i]==0) continue;
-
- int noct=i/12;
- int kv=keyspos[i%12];
-
- if (kv>=0){//white keys
- if (pressed[i]==0) fl_color(250,240,230);
- else fl_color(FL_BLUE);
- fl_rectf(ox+(kv+7*noct)*SIZE_WHITE+3,oy+ly*3/5+2,
- SIZE_WHITE-4,ly*2/5-3);
- } else {//black keys
- kv=keyspos[(i+1)%12];
- if (pressed[i]==0) fl_color(FL_BLACK);
- else fl_color(FL_BLUE);
- fl_rectf(ox+(kv+7*noct)*SIZE_WHITE-SIZE_BLACK/2+2,oy+2,
- SIZE_BLACK-3,ly*3/5-5);
- };
-};} {}
- }
- Function {handle(int event)} {return_type int
- } {
- code {int i;
-int ly=h();
-int x_=Fl::event_x()-x();
-int y_=Fl::event_y()-y();
-if ( (x_<0)&&(x_>w()) && (y_<0)&&(y_>h())){
- return(0);
-};
-
-
-if ((event==FL_PUSH)||(event==FL_DRAG)||(event==FL_RELEASE)){
- int kpos=-1;
-
- if (y_>ly*3/5){//white keys
- int pos=x_/SIZE_WHITE;
- if (pos<0) return(1);
- for (i=0;i<12;i++) {
- if (pos%7==keyspos[i]) {
- kpos=pos/7*12+i;
- break;
- };
- };
- } else {//black keys
- int pos=(x_+SIZE_WHITE/2)/SIZE_WHITE;
- if (pos<0) return(1);
- for (i=1;i<12;i++) {
- if (pos%7==-keyspos[i]) {
- kpos=pos/7*12+i;
- break;
- };
- };
- };
-
- if ((kpos!=-1)&&((event==FL_PUSH)||(event==FL_DRAG))&&
- (Fl::event_shift()==0)) {
- presskey(kpos,1,1);
- };
-
- if ((event==FL_PUSH)&&(Fl::event_shift()!=0)) {
- if (pressed[kpos]==0) presskey(kpos,0,1);
- else relasekey(kpos,1);
- };
- if ((event==FL_RELEASE)&&(Fl::event_shift()==0))
- relaseallkeys(1);
- take_focus();
-};
-
-
-const int *keysoct1=keysoct1qwerty;
-const int *keysoct2=keysoct2qwerty;
-
-if (config.cfg.VirKeybLayout==2) {
- keysoct1=keysoct1dw;
- keysoct2=keysoct2dw;
-}else if (config.cfg.VirKeybLayout==3) {
- keysoct1=keysoct1qwertz;
- keysoct2=keysoct2qwertz;
-}else if (config.cfg.VirKeybLayout==4) {
- keysoct1=keysoct1az;
- keysoct2=keysoct2az;
-};
-
-if ((event==FL_KEYDOWN)||(event==FL_KEYUP)){
- int key=Fl::event_key();
- int kpos=-1;
- for (i=0;keysoct1[i]!=0;i++) if (key==keysoct1[i]) kpos=i+12*keyoct1;
- for (i=0;keysoct2[i]!=0;i++) if (key==keysoct2[i]) kpos=i+12*keyoct2;
-
-
-
-
- if (kpos==-1) return(0);
- if ((event==FL_KEYUP) && (Fl::event_key(key)==0) && (Fl::get_key(key)!=0)) return(0);
- if (event==FL_KEYDOWN) presskey(kpos,0,2);
- else relasekey(kpos,2);
-};
-
-return(1);} {}
- }
- Function {presskey(int nk,int exclusive,int type)} {} {
- code {//Exclusive means that multiple keys can be pressed at once
-//when the user uses the shift key
-if (nk>=N_OCT*12) return;
-if ((nk<0)&&(exclusive==0)) {
- relaseallkeys(type);
- return;
-};
-if (nk<0) return;
-if (pressed[nk]!=0) return;//the key is already pressed
-
-if (exclusive!=0) relaseallkeys(type);
-pressed[nk]=type;
-
-damage(1);
-float vel=midivel;
-if (rndvelocity!=0){
- vel=midivel*(127.0-rndvelocity)/127.0+RND*rndvelocity;
-};
-
-pthread_mutex_lock(&master->mutex);
- master->NoteOn(midich,nk+midioct*12,(int)vel);
-pthread_mutex_unlock(&master->mutex);} {}
- }
- Function {relasekey(int nk,int type)} {} {
- code {if ((nk<0)||(nk>=N_OCT*12)) return;
-if (pressed[nk]==0) return;//the key is not pressed
-if ((type!=0)&&(pressed[nk]!=type)) return;
-
-pressed[nk]=0;
-
-
-damage(1);
-
-pthread_mutex_lock(&master->mutex);
- master->NoteOff(midich,nk+12*midioct);
-pthread_mutex_unlock(&master->mutex);} {}
- }
- Function {relaseallkeys(int type)} {} {
- code {for (int i=0;i<N_OCT*12;i++) relasekey(i,type);} {}
- }
- decl {Master *master;} {}
- decl {int pressed[N_OCT*12+1];} {}
- decl {unsigned char midich;} {public
- }
- decl {unsigned char midivel;} {public
- }
- decl {char midioct,keyoct1,keyoct2;} {public
- }
- decl {unsigned char rndvelocity;} {public
- }
-}
-
-class VirKeyboard {} {
- Function {make_window()} {} {
- Fl_Window virkeyboardwindow {
- label {Virtual Keyboard - ZynAddSubFX}
- callback {relaseallkeys();
-virkeyboardwindow->hide();}
- xywh {95 563 650 130} type Double hide
- } {
- Fl_Box virkeys {
- label Keyboard
- xywh {10 10 590 80} box FLAT_BOX color 17
- code0 {o->init(master);}
- class VirKeys
- }
- Fl_Counter {} {
- label {"qwer.." Oct}
- callback {relaseallkeys();
-virkeys->keyoct1=(int) o->value();
-virkeys->take_focus();}
- tooltip {keys "q2w3er5t6y..." octave} xywh {380 95 45 15} type Simple labelsize 10 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 10
- code0 {o->value(virkeys->keyoct1);}
- }
- Fl_Counter {} {
- label {"zxcv.." Oct}
- callback {relaseallkeys();
-virkeys->keyoct2=(int) o->value();
-virkeys->take_focus();}
- tooltip {keys "zsxdcvgbh..." octave} xywh {380 110 45 15} type Simple labelsize 10 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 10
- code0 {o->value(virkeys->keyoct2);}
- }
- Fl_Value_Slider {} {
- label Vel
- callback {virkeys->midivel=(int) o->value();
-virkeys->take_focus();}
- tooltip Velocity xywh {95 105 100 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum 1 maximum 127 step 1
- code0 {o->value(virkeys->midivel);}
- }
- Fl_Counter {} {
- label {Oct.}
- callback {relaseallkeys();
-virkeys->midioct=(int) o->value();
-virkeys->take_focus();}
- tooltip {Midi Octave} xywh {255 100 55 20} type Simple labelsize 11 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 11
- code0 {o->value(virkeys->midioct);}
- }
- Fl_Button {} {
- label Close
- callback {relaseallkeys();
-virkeyboardwindow->hide();}
- xywh {545 105 55 20} box THIN_UP_BOX
- }
- Fl_Value_Slider {} {
- label Cval
- callback {int ctl=midictl;
-
-pthread_mutex_lock(&master->mutex);
- master->SetController(virkeys->midich,ctl,(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-virkeys->take_focus();}
- tooltip {Controller value} xywh {605 10 15 115} type {Vert Fill} box ENGRAVED_BOX selection_color 229 labelsize 8 align 5 minimum 127 maximum 0 step 1 value 64 textsize 7
- }
- Fl_Choice {} {
- label Controller
- callback {switch((int) o->value()+1){
- case 1: midictl=C_modwheel; break;
- case 2: midictl=C_volume; break;
- case 3: midictl=C_panning; break;
- case 4: midictl=C_expression; break;
- case 5: midictl=C_sustain; break;
- case 6: midictl=C_portamento; break;
- case 7: midictl=C_filterq; break;
- case 8: midictl=C_filtercutoff; break;
- case 9: midictl=C_bandwidth; break;
- case 10: midictl=C_fmamp; break;
- case 11: midictl=C_resonance_center; break;
- case 12: midictl=C_resonance_bandwidth; break;
- default: midictl=C_NULL; break;
-
-};
-
-
-
-virkeys->take_focus();}
- xywh {435 105 100 15} down_box BORDER_BOX labelsize 10 align 5 when 6 textfont 1 textsize 10
- code0 {midictl=C_filtercutoff;o->value(7);}
- } {
- MenuItem {} {
- label {01: Mod.Wheel}
- xywh {0 0 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {07: Volume}
- xywh {10 10 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {10: Panning}
- xywh {20 20 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {11: Expression}
- xywh {30 30 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {64: Sustain}
- xywh {40 40 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {65: Portamento}
- xywh {50 50 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {71: Filter Q}
- xywh {60 60 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {74: Filter Freq.}
- xywh {70 70 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {75: Bandwidth}
- xywh {80 80 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {76: FM Gain}
- xywh {90 90 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {77: Res. c. freq}
- xywh {100 100 100 20} labelfont 1 labelsize 10
- }
- MenuItem {} {
- label {78: Res. bw.}
- xywh {110 110 100 20} labelfont 1 labelsize 10
- }
- }
- Fl_Roller pitchwheelroller {
- label Pwh
- callback {pthread_mutex_lock(&master->mutex);
- master->SetController(virkeys->midich,C_pitchwheel,-(int) o->value());
-pthread_mutex_unlock(&master->mutex);
-virkeys->take_focus();}
- tooltip {Pitch Wheel} xywh {625 10 20 95} box PLASTIC_UP_BOX labelsize 8 align 1 when 3 minimum -8192 maximum 8192 step 64
- }
- Fl_Button {} {
- label R
- callback {pitchwheelroller->value(0);
-pitchwheelroller->do_callback();}
- tooltip {Reset Pitch Bend} xywh {625 110 20 15} box THIN_UP_BOX labelfont 1
- }
- Fl_Dial {} {
- label Vrnd
- callback {virkeys->rndvelocity=(int) o->value();}
- tooltip {Velocity Randomness} xywh {205 105 20 20} box ROUND_UP_BOX labelsize 10 align 129 maximum 127 step 1
- code0 {o->value(virkeys->rndvelocity);}
- class WidgetPDial
- }
- Fl_Choice partrcv {
- label {MIDI Ch.}
- callback {relaseallkeys();
-virkeys->midich=(int) o->value();
-virkeys->take_focus();} open
- tooltip {Send to Midi Channel} xywh {20 105 65 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
- code0 {char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Chn%d",i+1);if (i!=9) o->add(nrstr); else o->add("Drum10");};}
- code1 {o->value(virkeys->midich);}
- } {}
- }
- }
- Function {VirKeyboard(Master *master_)} {} {
- code {master=master_;
-midictl=75;
-make_window();} {}
- }
- Function {~VirKeyboard()} {} {
- code {delete virkeyboardwindow;} {selected
- }
- }
- Function {show()} {} {
- code {virkeyboardwindow->show();} {}
- }
- Function {relaseallkeys()} {} {
- code {virkeys->relaseallkeys(0);} {}
- }
- decl {Master *master;} {}
- decl {int midictl;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/VirKeyboard.h b/plugins/zynaddsubfx/src/UI/VirKeyboard.h
deleted file mode 100644
index 7d7e7b9..0000000
--- a/plugins/zynaddsubfx/src/UI/VirKeyboard.h
+++ /dev/null
@@ -1,90 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef VirKeyboard_h
-#define VirKeyboard_h
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Box.H>
-#include "../globals.h"
-#include "../Misc/Master.h"
-#include "../Input/MidiIn.h"
-#include "WidgetPDial.h"
-
-class VirKeys : public Fl_Box {
- static const int N_OCT=6;
- static const int SIZE_WHITE=14;
- static const int SIZE_BLACK=8;
-public:
- VirKeys(int x,int y, int w, int h, const char *label=0);
- void init(Master *master_);
- void draw();
- int handle(int event);
- void presskey(int nk,int exclusive,int type);
- void relasekey(int nk,int type);
- void relaseallkeys(int type);
-private:
- Master *master;
- int pressed[N_OCT*12+1];
-public:
- unsigned char midich;
- unsigned char midivel;
- char midioct,keyoct1,keyoct2;
- unsigned char rndvelocity;
-};
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Roller.H>
-
-class VirKeyboard {
-public:
- Fl_Double_Window* make_window();
- Fl_Double_Window *virkeyboardwindow;
-private:
- void cb_virkeyboardwindow_i(Fl_Double_Window*, void*);
- static void cb_virkeyboardwindow(Fl_Double_Window*, void*);
-public:
- VirKeys *virkeys;
-private:
- void cb_qwer_i(Fl_Counter*, void*);
- static void cb_qwer(Fl_Counter*, void*);
- void cb_zxcv_i(Fl_Counter*, void*);
- static void cb_zxcv(Fl_Counter*, void*);
- void cb_Vel_i(Fl_Value_Slider*, void*);
- static void cb_Vel(Fl_Value_Slider*, void*);
- void cb_Oct_i(Fl_Counter*, void*);
- static void cb_Oct(Fl_Counter*, void*);
- void cb_Close_i(Fl_Button*, void*);
- static void cb_Close(Fl_Button*, void*);
- void cb_Cval_i(Fl_Value_Slider*, void*);
- static void cb_Cval(Fl_Value_Slider*, void*);
- void cb_Controller_i(Fl_Choice*, void*);
- static void cb_Controller(Fl_Choice*, void*);
- static Fl_Menu_Item menu_Controller[];
-public:
- Fl_Roller *pitchwheelroller;
-private:
- void cb_pitchwheelroller_i(Fl_Roller*, void*);
- static void cb_pitchwheelroller(Fl_Roller*, void*);
- void cb_R_i(Fl_Button*, void*);
- static void cb_R(Fl_Button*, void*);
- void cb_Vrnd_i(WidgetPDial*, void*);
- static void cb_Vrnd(WidgetPDial*, void*);
-public:
- Fl_Choice *partrcv;
-private:
- void cb_partrcv_i(Fl_Choice*, void*);
- static void cb_partrcv(Fl_Choice*, void*);
-public:
- VirKeyboard(Master *master_);
- ~VirKeyboard();
- void show();
- void relaseallkeys();
-private:
- Master *master;
- int midictl;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/WidgetPDial.cc b/plugins/zynaddsubfx/src/UI/WidgetPDial.cc
deleted file mode 100644
index 05e31b8..0000000
--- a/plugins/zynaddsubfx/src/UI/WidgetPDial.cc
+++ /dev/null
@@ -1,215 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#include "WidgetPDial.h"
-//Copyright (c) 2003-2005 Nasca Octavian Paul
-//License: GNU GPL version 2 or later
-
-TipWin::TipWin():Fl_Menu_Window(1,1) {
- strcpy(tip, "X.XX");
- set_override();
- end();
-}
-
-void TipWin::draw() {
- draw_box(FL_BORDER_BOX, 0, 0, w(), h(), Fl_Color(175));
- fl_color(FL_BLACK);
- fl_font(labelfont(), labelsize());
- if(textmode)
- fl_draw(text, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));
- else
- fl_draw(tip, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));
-}
-
-void TipWin::value(float f) {
- sprintf(tip, "%.2f", f);
- textmode=false;
- // Recalc size of window
- fl_font(labelfont(), labelsize());
- int W = w(), H = h();
- fl_measure(tip, W, H, 0);
- W += 8;
- size(W, H);
- redraw();
-}
-
-void TipWin::setText(const char * c) {
- strncpy(text, c, max_tooltip_len-1);
- text[max_tooltip_len-1] = 0;
- textmode=true;
- // Recalc size of window
- fl_font(labelfont(), labelsize());
- int W = w(), H = h();
- fl_measure(text, W, H, 0);
- W += 8;
- size(W, H);
- redraw();
-}
-
-void TipWin::setTextmode() {
- textmode=true;
- // Recalc size of window
- fl_font(labelfont(), labelsize());
- int W = w(), H = h();
- fl_measure(text, W, H, 0);
- W += 8;
- size(W, H);
- redraw();
-}
-
-WidgetPDial::WidgetPDial(int x,int y, int w, int h, const char *label):Fl_Dial(x,y,w,h,label) {
- callback(value_cb, (void*)this);
- Fl_Group *save = Fl_Group::current();
- tipwin = new TipWin();
- tipwin->hide();
- Fl_Group::current(save);
- oldvalue=0.0;
- pos=false;
- textset=false;
-}
-
-WidgetPDial::~WidgetPDial() {
- delete tipwin;
-}
-
-int WidgetPDial::handle(int event) {
- double dragsize,v,min=minimum(),max=maximum();
- int my;
-
- switch (event){
- case FL_PUSH:
- oldvalue=value();
- case FL_DRAG:
- if(!pos){
- tipwin->position(Fl::event_x_root(), Fl::event_y_root()+20);
- pos=true;
- }
- tipwin->value(value());
- tipwin->show();
- my=-(Fl::event_y()-y()-h()/2);
-
- dragsize=200.0;
- if (Fl::event_state(FL_BUTTON1)==0) dragsize*=10;
- v=oldvalue+my/dragsize*(max-min);
- if (v<min) v=min;
- else if (v>max) v=max;
-
- //printf("%d %g %g\n",my,v,oldvalue);
- value(v);
- value_damage();
- if (this->when()!=0) do_callback();
- return(1);
- break;
- case FL_ENTER:
- if(textset){
- if(!pos){
- tipwin->position(Fl::event_x_root(), Fl::event_y_root()+20);
- pos=true;
- }
- tipwin->setTextmode();
- tipwin->show();
- return(1);}
- break;
- case FL_HIDE:
- case FL_LEAVE:
- tipwin->hide();
- pos=false;
- break;
- case FL_RELEASE:
- tipwin->hide();
- pos=false;
- if (this->when()==0) do_callback();
- return(1);
- break;
- };
- return(0);
-}
-
-void WidgetPDial::drawgradient(int cx,int cy,int sx,double m1,double m2) {
- for (int i=(int)(m1*sx);i<(int)(m2*sx);i++){
- double tmp=1.0-pow(i*1.0/sx,2.0);
- pdialcolor(140+(int) (tmp*90),140+(int)(tmp*90),140+(int) (tmp*100));
- fl_arc(cx+sx/2-i/2,cy+sx/2-i/2,i,i,0,360);
- };
-}
-
-void WidgetPDial::draw() {
- int cx=x(),cy=y(),sx=w(),sy=h();
-
-
- //clears the button face
- pdialcolor(190,190,200);
- fl_pie(cx-1,cy-1,sx+2,sy+2,0,360);
-
- //Draws the button face (gradinet)
- drawgradient(cx,cy,sx,0.5,1.0);
-
- double val=(value()-minimum())/(maximum()-minimum());
-
- //draws the scale
- pdialcolor(220,220,250);
- double a1=angle1(),a2=angle2();
- for (int i=0;i<12;i++){
- double a=-i/12.0*360.0-val*(a2-a1)-a1;
- fl_pie(cx,cy,sx,sy,a+270-3,a+3+270);
- };
-
- drawgradient(cx,cy,sx,0.0,0.75);
-
- //draws the value
- double a=-(a2-a1)*val-a1;
-
-
-
-
-
- //draws the max and min points
- pdialcolor(0,100,200);
- int xp=(int)(cx+sx/2.0+sx/2.0*sin(angle1()/180.0*3.141592));
- int yp=(int)(cy+sy/2.0+sy/2.0*cos(angle1()/180.0*3.141592));
- fl_pie(xp-2,yp-2,4,4,0,360);
-
- xp=(int)(cx+sx/2.0+sx/2.0*sin(angle2()/180.0*3.141592));
- yp=(int)(cy+sy/2.0+sy/2.0*cos(angle2()/180.0*3.141592));
- fl_pie(xp-2,yp-2,4,4,0,360);
-
-
-
-
-
- fl_push_matrix();
-
- fl_translate(cx+sx/2,cy+sy/2);
- fl_rotate(a-90.0);
-
- fl_translate(sx/2,0);
-
-
- fl_begin_polygon();
- pdialcolor(0,0,0);
- fl_vertex(-10,-4);
- fl_vertex(-10,4);
- fl_vertex(0,0);
- fl_end_polygon();
-
-
- fl_pop_matrix();
-}
-
-void WidgetPDial::pdialcolor(int r,int g,int b) {
- if (active_r()) fl_color(r,g,b);
- else fl_color(160-(160-r)/3,160-(160-b)/3,160-(160-b)/3);
-}
-
-void WidgetPDial::value_cb2() {
- tipwin->value(value());
-}
-
-void WidgetPDial::value_cb(Fl_Widget*, void*data) {
- WidgetPDial *val = (WidgetPDial*)data;
- val->value_cb2();
-}
-
-void WidgetPDial::tooltip(const char * c) {
- tipwin->setText(c);
- textset=true;
-}
diff --git a/plugins/zynaddsubfx/src/UI/WidgetPDial.fl b/plugins/zynaddsubfx/src/UI/WidgetPDial.fl
deleted file mode 100644
index f68a96e..0000000
--- a/plugins/zynaddsubfx/src/UI/WidgetPDial.fl
+++ /dev/null
@@ -1,253 +0,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0107
-header_name {.h}
-code_name {.cc}
-decl {//Copyright (c) 2003-2005 Nasca Octavian Paul} {}
-
-decl {//License: GNU GPL version 2 or later} {}
-
-decl {\#include <FL/Fl_Dial.H>} {public
-}
-
-decl {\#include <FL/fl_draw.H>} {public
-}
-
-decl {\#include <FL/Fl_Tooltip.H>} {public
-}
-
-decl {\#include <math.h>} {public
-}
-
-decl {\#include <string.h>} {public
-}
-
-decl {\#include <stdio.h>} {public
-}
-
-decl {\#include <FL/Fl_Group.H>} {public
-}
-
-decl {\#include <FL/Fl_Menu_Window.H>} {public
-}
-
-class TipWin {: {public Fl_Menu_Window}
-} {
- Function {TipWin():Fl_Menu_Window(1,1)} {} {
- code {strcpy(tip, "X.XX");
-set_override();
-end();} {}
- }
- Function {draw()} {return_type void
- } {
- code {draw_box(FL_BORDER_BOX, 0, 0, w(), h(), Fl_Color(175));
- fl_color(FL_BLACK);
- fl_font(labelfont(), labelsize());
- if(textmode)
- fl_draw(text, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));
- else
- fl_draw(tip, 3, 3, w()-6, h()-6, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP));} {}
- }
- Function {value(float f)} {return_type void
- } {
- code {sprintf(tip, "%.2f", f);
-textmode=false;
- // Recalc size of window
- fl_font(labelfont(), labelsize());
- int W = w(), H = h();
- fl_measure(tip, W, H, 0);
- W += 8;
- size(W, H);
- redraw();} {}
- }
- Function {setText(const char * c)} {return_type void
- } {
- code {strncpy(text, c, max_tooltip_len-1);
-text[max_tooltip_len-1] = 0;
-textmode=true;
- // Recalc size of window
- fl_font(labelfont(), labelsize());
- int W = w(), H = h();
- fl_measure(text, W, H, 0);
- W += 8;
- size(W, H);
- redraw();} {}
- }
- Function {setTextmode()} {return_type void
- } {
- code {textmode=true;
- // Recalc size of window
- fl_font(labelfont(), labelsize());
- int W = w(), H = h();
- fl_measure(text, W, H, 0);
- W += 8;
- size(W, H);
- redraw();} {}
- }
- decl {char tip[40];} {}
- decl {bool textmode;} {}
- decl {enum { max_tooltip_len = 400 };} {selected
- }
- decl {char text[max_tooltip_len];} {}
-}
-
-class WidgetPDial {: {public Fl_Dial}
-} {
- Function {WidgetPDial(int x,int y, int w, int h, const char *label=0):Fl_Dial(x,y,w,h,label)} {} {
- code {callback(value_cb, (void*)this);
-Fl_Group *save = Fl_Group::current();
-tipwin = new TipWin();
-tipwin->hide();
-Fl_Group::current(save);
-oldvalue=0.0;
-pos=false;
-textset=false;} {}
- }
- Function {~WidgetPDial()} {} {
- code {delete tipwin;} {}
- }
- Function {handle(int event)} {return_type int
- } {
- code {double dragsize,v,min=minimum(),max=maximum();
-int my;
-
-switch (event){
-case FL_PUSH:
- oldvalue=value();
-case FL_DRAG:
- if(!pos){
- tipwin->position(Fl::event_x_root(), Fl::event_y_root()+20);
- pos=true;
- }
- tipwin->value(value());
- tipwin->show();
- my=-(Fl::event_y()-y()-h()/2);
-
- dragsize=200.0;
- if (Fl::event_state(FL_BUTTON1)==0) dragsize*=10;
- v=oldvalue+my/dragsize*(max-min);
- if (v<min) v=min;
- else if (v>max) v=max;
-
- //printf("%d %g %g\\n",my,v,oldvalue);
- value(v);
- value_damage();
- if (this->when()!=0) do_callback();
- return(1);
- break;
-case FL_ENTER:
- if(textset){
- if(!pos){
- tipwin->position(Fl::event_x_root(), Fl::event_y_root()+20);
- pos=true;
- }
- tipwin->setTextmode();
- tipwin->show();
- return(1);}
- break;
-case FL_HIDE:
-case FL_LEAVE:
- tipwin->hide();
- pos=false;
- break;
-case FL_RELEASE:
- tipwin->hide();
- pos=false;
- if (this->when()==0) do_callback();
- return(1);
- break;
-};
-return(0);} {}
- }
- Function {drawgradient(int cx,int cy,int sx,double m1,double m2)} {return_type void
- } {
- code {for (int i=(int)(m1*sx);i<(int)(m2*sx);i++){
- double tmp=1.0-pow(i*1.0/sx,2.0);
- pdialcolor(140+(int) (tmp*90),140+(int)(tmp*90),140+(int) (tmp*100));
- fl_arc(cx+sx/2-i/2,cy+sx/2-i/2,i,i,0,360);
-};} {}
- }
- Function {draw()} {} {
- code {int cx=x(),cy=y(),sx=w(),sy=h();
-
-
-//clears the button face
-pdialcolor(190,190,200);
-fl_pie(cx-1,cy-1,sx+2,sy+2,0,360);
-
-//Draws the button face (gradinet)
-drawgradient(cx,cy,sx,0.5,1.0);
-
-double val=(value()-minimum())/(maximum()-minimum());
-
-//draws the scale
-pdialcolor(220,220,250);
-double a1=angle1(),a2=angle2();
-for (int i=0;i<12;i++){
- double a=-i/12.0*360.0-val*(a2-a1)-a1;
- fl_pie(cx,cy,sx,sy,a+270-3,a+3+270);
-};
-
-drawgradient(cx,cy,sx,0.0,0.75);
-
-//draws the value
-double a=-(a2-a1)*val-a1;
-
-
-
-
-
-//draws the max and min points
-pdialcolor(0,100,200);
-int xp=(int)(cx+sx/2.0+sx/2.0*sin(angle1()/180.0*3.141592));
-int yp=(int)(cy+sy/2.0+sy/2.0*cos(angle1()/180.0*3.141592));
-fl_pie(xp-2,yp-2,4,4,0,360);
-
-xp=(int)(cx+sx/2.0+sx/2.0*sin(angle2()/180.0*3.141592));
-yp=(int)(cy+sy/2.0+sy/2.0*cos(angle2()/180.0*3.141592));
-fl_pie(xp-2,yp-2,4,4,0,360);
-
-
-
-
-
-fl_push_matrix();
-
- fl_translate(cx+sx/2,cy+sy/2);
- fl_rotate(a-90.0);
-
- fl_translate(sx/2,0);
-
-
- fl_begin_polygon();
- pdialcolor(0,0,0);
- fl_vertex(-10,-4);
- fl_vertex(-10,4);
- fl_vertex(0,0);
- fl_end_polygon();
-
-
-fl_pop_matrix();} {}
- }
- Function {pdialcolor(int r,int g,int b)} {} {
- code {if (active_r()) fl_color(r,g,b);
- else fl_color(160-(160-r)/3,160-(160-b)/3,160-(160-b)/3);} {}
- }
- Function {value_cb2()} {return_type void
- } {
- code {tipwin->value(value());} {}
- }
- Function {value_cb(Fl_Widget*, void*data)} {return_type {static void}
- } {
- code {WidgetPDial *val = (WidgetPDial*)data;
- val->value_cb2();} {}
- }
- Function {tooltip(const char * c)} {return_type void
- } {
- code {tipwin->setText(c);
-textset=true;} {}
- }
- decl {bool textset;} {}
- decl {bool pos;} {}
- decl {double oldvalue;} {}
- decl {TipWin *tipwin;} {}
-}
diff --git a/plugins/zynaddsubfx/src/UI/WidgetPDial.h b/plugins/zynaddsubfx/src/UI/WidgetPDial.h
deleted file mode 100644
index e81f17e..0000000
--- a/plugins/zynaddsubfx/src/UI/WidgetPDial.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// generated by Fast Light User Interface Designer (fluid) version 1.0300
-
-#ifndef WidgetPDial_h
-#define WidgetPDial_h
-#include <FL/Fl.H>
-#include <FL/Fl_Dial.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Tooltip.H>
-#include <math.h>
-#include <string.h>
-#include <stdio.h>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Menu_Window.H>
-
-class TipWin : public Fl_Menu_Window {
-public:
- TipWin();
- void draw();
- void value(float f);
- void setText(const char * c);
- void setTextmode();
-private:
- char tip[40];
- bool textmode;
- enum { max_tooltip_len = 400 };
- char text[max_tooltip_len];
-};
-
-class WidgetPDial : public Fl_Dial {
-public:
- WidgetPDial(int x,int y, int w, int h, const char *label=0);
- ~WidgetPDial();
- int handle(int event);
- void drawgradient(int cx,int cy,int sx,double m1,double m2);
- void draw();
- void pdialcolor(int r,int g,int b);
- void value_cb2();
- static void value_cb(Fl_Widget*, void*data);
- void tooltip(const char * c);
-private:
- bool textset;
- bool pos;
- double oldvalue;
- TipWin *tipwin;
-};
-#endif
diff --git a/plugins/zynaddsubfx/src/UI/filechooser.h b/plugins/zynaddsubfx/src/UI/filechooser.h
deleted file mode 100644
index b557db9..0000000
--- a/plugins/zynaddsubfx/src/UI/filechooser.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#define fl_file_chooser fixed_file_chooser
-#include <string>
-
-extern std::string __presets_dir;
-
-static inline char * fixed_file_chooser(const char * message, const char *pattern, const char *fname, int relative = 0)
-{
- Fl_File_Chooser* fc = new Fl_File_Chooser( __presets_dir.c_str(),
- pattern,
- Fl_File_Chooser::SINGLE,
- message );
- fc->show();
- while( fc->shown() )
- {
- Fl::wait();
- }
-
- char * r = NULL;
- if( fc->count() > 0 )
- {
- r = strdup( fc->value() );
- }
- delete fc;
-
- return r;
-}
-
diff --git a/plugins/zynaddsubfx/src/globals.h b/plugins/zynaddsubfx/src/globals.h
deleted file mode 100644
index 9f52c35..0000000
--- a/plugins/zynaddsubfx/src/globals.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- globals.h - it contains program settings and the program capabilities
- like number of parts, of effects
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License
- 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 (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-
-#ifndef GLOBALS_H
-#define GLOBALS_H
-
-//What float type I use for internal sampledata
-#define REALTYPE float
-
-struct FFTFREQS {
- REALTYPE *s, *c; //sine and cosine components
-};
-
-extern void newFFTFREQS(FFTFREQS *f, int size);
-extern void deleteFFTFREQS(FFTFREQS *f);
-
-/**Sampling rate*/
-extern int SAMPLE_RATE;
-
-/**
- * The size of a sound buffer (or the granularity)
- * All internal transfer of sound data use buffer of this size
- * All parameters are constant during this period of time, exception
- * some parameters(like amplitudes) which are linear interpolated.
- * If you increase this you'll ecounter big latencies, but if you
- * decrease this the CPU requirements gets high.
- */
-extern int SOUND_BUFFER_SIZE;
-
-
-/**
- * The size of ADnote Oscillator
- * Decrease this => poor quality
- * Increase this => CPU requirements gets high (only at start of the note)
- */
-extern int OSCIL_SIZE;
-
-/**
- * The number of harmonics of additive synth
- * This must be smaller than OSCIL_SIZE/2
- */
-#define MAX_AD_HARMONICS 128
-
-
-/**
- * The number of harmonics of substractive
- */
-#define MAX_SUB_HARMONICS 64
-
-
-/*
- * The maximum number of samples that are used for 1 PADsynth instrument(or item)
- */
-#define PAD_MAX_SAMPLES 64
-
-
-/*
- * Number of parts
- */
-#define NUM_MIDI_PARTS 16
-
-/*
- * Number of Midi channes
- */
-#define NUM_MIDI_CHANNELS 16
-
-/*
- * The number of voices of additive synth for a single note
- */
-#define NUM_VOICES 8
-
-/*
- * The poliphony (notes)
- */
-#define POLIPHONY 128
-
-/*
- * Number of system effects
- */
-#define NUM_SYS_EFX 4
-
-
-/*
- * Number of insertion effects
- */
-#define NUM_INS_EFX 8
-
-/*
- * Number of part's insertion effects
- */
-#define NUM_PART_EFX 3
-
-/*
- * Maximum number of the instrument on a part
- */
-#define NUM_KIT_ITEMS 16
-
-
-/*
- * How is applied the velocity sensing
- */
-#define VELOCITY_MAX_SCALE 8.0
-
-/*
- * The maximum length of instrument's name
- */
-#define PART_MAX_NAME_LEN 30
-
-/*
- * The maximum number of bands of the equaliser
- */
-#define MAX_EQ_BANDS 8
-#if (MAX_EQ_BANDS >= 20)
-#error "Too many EQ bands in globals.h"
-#endif
-
-
-/*
- * Maximum filter stages
- */
-#define MAX_FILTER_STAGES 5
-
-/*
- * Formant filter (FF) limits
- */
-#define FF_MAX_VOWELS 6
-#define FF_MAX_FORMANTS 12
-#define FF_MAX_SEQUENCE 8
-
-#define LOG_2 0.693147181
-#define PI 3.1415926536
-#define LOG_10 2.302585093
-
-/*
- * The threshold for the amplitude interpolation used if the amplitude
- * is changed (by LFO's or Envelope's). If the change of the amplitude
- * is below this, the amplitude is not interpolated
- */
-#define AMPLITUDE_INTERPOLATION_THRESHOLD 0.0001
-
-/*
- * How the amplitude threshold is computed
- */
-#define ABOVE_AMPLITUDE_THRESHOLD(a, b) ((2.0 * fabs((b) - (a)) \
- / (fabs((b) + (a) + 0.0000000001))) > \
- AMPLITUDE_INTERPOLATION_THRESHOLD)
-
-/*
- * Interpolate Amplitude
- */
-#define INTERPOLATE_AMPLITUDE(a, b, x, size) ((a) \
- + ((b) \
- - (a)) * (REALTYPE)(x) \
- / (REALTYPE) (size))
-
-
-/*
- * dB
- */
-#define dB2rap(dB) ((exp((dB) * LOG_10 / 20.0)))
-#define rap2dB(rap) ((20 * log(rap) / LOG_10))
-
-/*
- * The random generator (0.0..1.0)
- */
-#define RND (rand() / (RAND_MAX + 1.0))
-
-#define ZERO(data, size) {char *data_ = (char *) data; for(int i = 0; \
- i < size; \
- i++) \
- data_[i] = 0;}
-#define ZERO_REALTYPE(data, size) {REALTYPE *data_ = (REALTYPE *) data; \
- for(int i = 0; \
- i < size; \
- i++) \
- data_[i] = 0.0;}
-
-enum ONOFFTYPE {
- OFF = 0, ON = 1
-};
-
-enum MidiControllers {
- C_NULL = 0, C_pitchwheel = 1000, C_expression = 11, C_panning = 10,
- C_filtercutoff = 74, C_filterq = 71, C_bandwidth = 75, C_modwheel = 1,
- C_fmamp = 76,
- C_volume = 7, C_sustain = 64, C_allnotesoff = 123, C_allsoundsoff = 120,
- C_resetallcontrollers = 121,
- C_portamento = 65, C_resonance_center = 77, C_resonance_bandwidth = 78,
-
- C_dataentryhi = 0x06, C_dataentrylo = 0x26, C_nrpnhi = 99, C_nrpnlo = 98
-};
-
-enum LegatoMsg {
- LM_Norm, LM_FadeIn, LM_FadeOut, LM_CatchUp, LM_ToNorm
-};
-
-//is like i=(int)(floor(f))
-#ifdef ASM_F2I_YES
-#define F2I(f, \
- i) __asm__ __volatile__ ("fistpl %0" : "=m" (i) : "t" (f \
- - 0.49999999) \
- : "st");
-#else
-#define F2I(f, i) (i) = ((f > 0) ? ((int)(f)) : ((int)(f - 1.0)));
-#endif
-
-
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#endif
-
diff --git a/plugins/zynaddsubfx/update-zynaddsubfx.sh b/plugins/zynaddsubfx/update-zynaddsubfx.sh
new file mode 100755
index 0000000..ca87290
--- /dev/null
+++ b/plugins/zynaddsubfx/update-zynaddsubfx.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+rm -rf zynaddsubfx
+git clone git://github.com/LMMS/zynaddsubfx.git
+rm -rf zynaddsubfx/.git
+
+git status zynaddsubfx/
+
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx.rc b/plugins/zynaddsubfx/zynaddsubfx.rc
deleted file mode 100644
index 9261ff5..0000000
--- a/plugins/zynaddsubfx/zynaddsubfx.rc
+++ /dev/null
@@ -1,26 +0,0 @@
-zynaddsubfx_icon ICON zynaddsubfx_icon.ico
-#include <windows.h>
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,2,3,0
- FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
- FILEOS VOS_NT_WINDOWS32
- FILETYPE VFT_APP
- FILESUBTYPE VFT2_UNKNOWN
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904E4"
- //language ID = U.S. English, charset = Windows, Multilingual
- BEGIN
- VALUE "Comments", "ZynAddSubFX Plugin - Linux MultiMedia Studio (http://lmms.sf.net)\0"
- VALUE "CompanyName", "LMMS Developers\0"
- VALUE "FileDescription", "ZynAddSubFX LMMS Plugin\0"
- VALUE "FileVersion", "2.3.0/1.0.3\0"
- VALUE "LegalCopyright", "Copyright (c) Nasca Octavian Paul, Mark McCurry, Harald Hvaal, Tobias Doerffel\0"
- VALUE "OriginalFilename", "RemoteZynAddSubFx.exe\0"
- VALUE "ProductName", "ZynAddSubFX/LMMS\0"
- VALUE "ProductVersion", "2.3.0/1.0.3\0"
- END
- END
-END
diff --git a/plugins/zynaddsubfx/zynaddsubfx.rc.in b/plugins/zynaddsubfx/zynaddsubfx.rc.in
index ebc0c32..da34d43 100644
--- a/plugins/zynaddsubfx/zynaddsubfx.rc.in
+++ b/plugins/zynaddsubfx/zynaddsubfx.rc.in
@@ -1,4 +1,4 @@
-zynaddsubfx_icon ICON zynaddsubfx_icon.ico
+zynaddsubfx_icon ICON zynaddsubfx/zynaddsubfx.ico
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
@@ -13,7 +13,7 @@ BEGIN
BLOCK "040904E4"
//language ID = U.S. English, charset = Windows, Multilingual
BEGIN
- VALUE "Comments", "ZynAddSubFX Plugin - Linux MultiMedia Studio (http://lmms.sf.net)\0"
+ VALUE "Comments", "ZynAddSubFX Plugin - LMMS (http://lmms.sf.net)\0"
VALUE "CompanyName", "LMMS Developers\0"
VALUE "FileDescription", "ZynAddSubFX LMMS Plugin\0"
VALUE "FileVersion", "2.3.0/@VERSION@\0"
diff --git a/plugins/zynaddsubfx/zynaddsubfx/.gitmodules b/plugins/zynaddsubfx/zynaddsubfx/.gitmodules
new file mode 100644
index 0000000..183f3f3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "instruments"]
+ path = instruments
+ url = git://git.code.sf.net/p/zynaddsubfx/instruments
diff --git a/plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt b/plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt
new file mode 100644
index 0000000..4c196ae
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/AUTHORS.txt
@@ -0,0 +1,32 @@
+Main author:
+ Nasca Octavian Paul
+
+Developers:
+ Mark McCurry
+ Harald Hvaal
+
+Contributors:
+ Gerald Folcher (legato, mono notes memory)
+ Lars Luthman (zombie fix,jack midi, LASH support)
+ Daniel Clemente (with a workaround of X11 repeated key bug)
+ Emmanuel Saracco (fix for JACK output)
+ Achim Settelmeier (QUERTZ keyboard layout for virtual keyboard)
+ J�r�mie Andr�i (AZERTY keyboard layout, Array index fix, OSS failsafe)
+ Alexis Ballier (const char* <-> string mismatch, NULLMidi prototype fix)
+ Tobias Doerffel (static-instance variables fix, missing include fix)
+ James Morris (Memory leaks in FLTK GUI)
+ Alan Calvert (Portions of New IO)
+ Stephen Parry (DSSI rebuild)
+ Ryan Billing (APhaser)
+ Hans Petter Selasky (OSS Midi, FreeBSD support, Bank UI bug fix)
+ Damien Goutte-Gattat (Bank select midi support)
+ Lieven Moors (Spike/Circle waveform)
+ Olaf Schulz (MIDI Aftertouch support)
+ Jonathan Liles (NSM & NTK support)
+ Johannes Lorenz (Effect Documentation)
+ Ilario Glasgo (Italian Doc Translation)
+ Christopher Oliver (Unison + presets fix, mousewheel support,
+ SUBnote overtones, unison enhancements, ...)
+ Filipe Coelho (Globals Cleanup)
+ Andre Sklenar (UI Pixmaps)
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt
new file mode 100644
index 0000000..d36aa80
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/CMakeLists.txt
@@ -0,0 +1,21 @@
+cmake_minimum_required(VERSION 2.8)
+set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/")
+project(zynaddsubfx)
+set(VERSION "2.4.4")
+
+enable_testing()
+include(CTestConfig.cmake)
+#Currently the only directory that uses cmake
+add_subdirectory(src)
+
+install(FILES AUTHORS.txt COPYING FAQ.txt HISTORY.txt README.txt
+ DESTINATION share/doc/zynaddsubfx
+ )
+install(FILES zynaddsubfx-jack.desktop zynaddsubfx-alsa.desktop
+ DESTINATION share/applications)
+install(FILES zynaddsubfx.svg
+ DESTINATION share/pixmaps)
+install(DIRECTORY instruments/banks
+ DESTINATION share/zynaddsubfx)
+install(DIRECTORY instruments/examples
+ DESTINATION share/zynaddsubfx)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/COPYING b/plugins/zynaddsubfx/zynaddsubfx/COPYING
new file mode 100644
index 0000000..e47a022
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/COPYING
@@ -0,0 +1,347 @@
+
+NOTE! The GPL below is copyrighted by the Free Software Foundation, but
+the instance of code that it refers to (the ZynAddSubFX application)
+is copyrighted by the authors (Nasca Octavian Paul and others) who actually wrote it.
+---------------------------------------------------------------------------
+
+
+ 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.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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) year 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.
+
+ <signature of Ty Coon>, 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/plugins/zynaddsubfx/zynaddsubfx/CTestConfig.cmake b/plugins/zynaddsubfx/zynaddsubfx/CTestConfig.cmake
new file mode 100644
index 0000000..bf4f379
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/CTestConfig.cmake
@@ -0,0 +1,13 @@
+## This file should be placed in the root directory of your project.
+## Then modify the CMakeLists.txt file in the root directory of your
+## project to incorporate the testing dashboard.
+## # The following are required to uses Dart and the Cdash dashboard
+## ENABLE_TESTING()
+## INCLUDE(CTest)
+set(CTEST_PROJECT_NAME "ZynAddSubFX")
+set(CTEST_NIGHTLY_START_TIME "00:00:00 EST")
+
+set(CTEST_DROP_METHOD "http")
+set(CTEST_DROP_SITE "fundamental-code.com")
+set(CTEST_DROP_LOCATION "/CDash/submit.php?project=ZynAddSubFX")
+set(CTEST_DROP_SITE_CDASH TRUE)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ChangeLog b/plugins/zynaddsubfx/zynaddsubfx/ChangeLog
new file mode 100644
index 0000000..8030d67
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ChangeLog
@@ -0,0 +1,1038 @@
+6 Mar 2002 -(dupamasa - in jur de ora 4) Mi-a venit ideea exact cum sa fac cand ma plimbam pe strada Pandurilor
+7/8 Mar 2002 - Started to do diagrams
+10 Mar 2002 - Started to write "voice"
+11 Mar 2002 - Heard first sound
+12 Mar 2002 - tested with 200 voices
+16 Mar 2002 - made "Note" the main class
+ - added vibratto
+ - added glissando
+20 Mar 2002 - started to write the Envelope class
+21 Mar 2002 - Envelope written (almost)
+ Volume envelope almost written
+23 Mar 2002 - Scris relasenote(putin)
+ Envelope-ul este si in dB
+ "glissando" este inlocuit cu "Envelope" de frecventa
+ started to write the LFO class
+24 Mar 2002 - Corrected a bug that could crashed the synth (forgotten to disable the amp/freq envelopeenabled when killed it)
+25 Mar 2002 - Started to write the Filter class (wrote only few lines)
+27 Mar 2002 - Scris filtrul(putin), si FilterEnvelope
+28 Mar 2002 - Adaugat la LFO si tipul "rampup" si "rampdown"
+ Scris filterLFO si amplitudeLFO(termollo)
+ redenumiti si aranjati parametrii
+ Adaugat LFO delay
+ Scris FilterEnvelope(corect) si FilterLFO(corect)
+29 Mar 2002 - Adaugat RingModulation
+ Adaugat FM/RM Amplitude si Frequency Envelope
+ Corectat un bug minor la Envelope-ASRinit();
+ Adaugat FM
+01 Apr 2002 - Corectat un bug care facea sa se auda paraituri la sunetele care incepeau co o faza!=0
+ Scris cativa dintre parametrii globali Envelop-ulire,LFO,Filter,..
+02 Apr 2002 - Curatat putin ADnote
+ Adaugat VelocityScale la amplitudine, la FM si la Filtru Global
+03 Apr 2002 - Aranjati toti parametrii ADnote in structuri
+04 Apr 2002 - Mutati multi parametrii in ADnoteParameters
+ Inceput sa scriu ADnoteParameters
+05 Apr 2002 - Inceput sa scriu clase speciale pentru parametrii(midi) (LFO..)
+06 Apr 2002 - Continuat sa scriu clasele speciale pentru parametrii
+ Teoretic merge sinteza multitimbrala(Adica se poate aplea ADnote(canal,note,vel))
+07 Apr 2002 - Completat(aproape) transferul de parametri midi la cei reali
+08 Apr 2002 - Added FM oscil at parameters and corrected a small FM bug
+09 Apr 2002 - Inceput sa-l fac real-time
+10 Apr 2002 - Merge la keyboard-ul MIDI, polifonic
+27 Apr 2002 - Scris interfata la OSS, la latenta scazuta
+ Corectat un bug care facea ca sa se execute calcule inutile, ceea ce facea ca polifonia maxima sa scada de 10 ori
+29 Apr 2002 - Inceput sa scriu interfata midi(obiect)
+30 Apr 2002 - Continuat putin interfata midi (dar nu am terminat)
+02 Mai 2002 - Merge in timp real cu latenta scazuta, dar se mai auda niste "pacanaituri"
+03 Mai 2002 - Inceput sa scriu Reverb (acum este doar ecou)
+ "Pacanaiturile" au fost eliminate.
+09 Mai 2002 - Reverb-ul suna a reverberatie
+11 Mai 2002 - Adaugat cativa parametrii midi la Reverb
+18 Mai 2002 - Adaugat filtrul AllPass la Reverb si adaugat parametrul Plohidamp
+19 Mai 2002 - Adaugat InitialDelay (idelay) la Reverb
+24 Iun 2002 - Clasa Filtru nu mai este dependenta de FilterParams(pot sa-l folosesc in alte scopuri)
+ Corectat un bug la filtru care facea ca la rezomante scazute sa amplifice f. mult basii
+ Adaugat High Pass Filter
+ Rezonanta filtrului este exponentiala
+ Adauga LPF+HPF la Reverb
+ Inceput sa scriu Generatorul de Functii (OscilGen)
+25 Iun 2002 - Scris cateva forme de unda (functii)
+ Reverb-ul are volumul in dB si daca este zero(ca parametru) atunci se dezactiveaza
+02 Iul 2002 - Adaugat inca o functie la generatorul de functii
+03 Iul 2002 - Inceput sa scriu generarea de functii la OscilGen pe baza de FFT
+ Inlaturat DC-ul de la OscilGen
+04 Iul 2002 - Adaugat ANTI-ALIASING la ADnote si insumarea armonicelor se face in domeniul frecventa
+ Corectat un bug care facea sa sune rau dac OSCIL_SIZE!=512 (era declarat de 2 ori)
+12 Iul 2002 - Adaugat posibilitatea de a folosi ca modulator alta voce
+ Adaugat parametrii MIDI la OscilGen
+13 Iul 2002 - Adaugat Randomness la clasa OscilGen
+15 Iul 2002 - Adaugat si Panning(incl. Randomness) => instrumentul este acum stereo
+16 Iul 2002 - Adaugat Randomness la LFO (faza 0 => random)
+ Inlaturat o eroare care facea ca amplitudinea sa nu fie interpolata
+17 Iul 2002 - Volumul FM-ului este exponential
+ Adaugat atenuare la volumul FM-ului la note inalte
+23 Iul 2002 - Adaugat EnvelopeStretch
+ Corectata o eroare care facea ca uneori sunetul sa se auda foarte tare la inceput
+ Adaugat fade-in (f. scurt) si fade out in caz ca envelop-ul are A=0 sau R=0, a.i. sa nu se auda pacanaituri
+24 Iul 2002 - Corectat Relase-ul la Envelope si adaugat ForcedRelase
+25 Iul 2002 - Adaugat posibilitatea de a nu folosi AntiAliasing-ul
+ Adaugat Frequency Modulation (nu phase modulation)
+ Adaugat Delay la fiecare voce
+ Adaugat Morphing la modulatie
+26 Iul 2002 - Inceput sa scriu clasa Part
+27 Iul 2002 - Se face controlul Midi folosind clasa Part si nu ADnote
+28 Iul 2002 - Corectata o eroare care facea sa se instantieze clasa ADnoteParameters pt. fiecare nota => memoria era ocupata excesiv si "manca" din procesor. Cauza erorii este ca trimiteam obiectul ADnoteParameters ca parametru si nu referinta lui. Asta era cauza pacanaiturilor ce se auzeau daca apasam multe clape simultan.
+29 Iul 2002 - Adaugat clasa Master (Permite acum mai multe instr. simultan => multitimbral)
+ Observat o eroare la Envelope
+30 Iul 2002 - Adaugat EnvelopeStretch si Forcedrelase la instantierea unui obiect EnvelopeParams
+ Durata Sustainul-ui fortat este acceeasi indiferent de paramentrul EnvelopeStretch
+ Adaugat Ecou
+31 Iul 2002 - Daca VelocityScaleFunction=127 atunci orice vel. va face amplitudinea maxima (ca si cand vel.=127)
+ Inceput sa scriu Interfata Utilizator
+01 Aug 2002 - Toti parametrii sunt convertiti in REALTYPE direct de ADnote,de LFO
+ Inlataurate mici probleme de AntiAliasing daca detune-ul era prea sus si la unele moduri FM
+ Programul incepe sa fie controlabil de Interfata
+02 Aug 2002 - Inlaturat o eroare stupida care facea ca sa se seteze valorile EnvelopeParams la -1 (scria din Master:: prea mult)
+03 Aug 2002 - Terminata interfata pentru ADnoteParameters.GlobalPars
+ Adaugat inca un parametru la lfo (continous LFO) care faca ca LFO-ul sa nu inceapa la fiecare NoteOn
+ Corectat doua erori la ...[nvoice].AmpEnvelope si ...[nvoice].FreqEnvelope
+ Scrisa interfata pentru ADnoteParameters.VoicePars (fara FM+OSCIL...)
+04 Aug 2002 - Scrisa interfata cu FM (fara Oscil)
+ Corectate doua erori cu provire la FMampenv si FMfreqenv
+ Inlaturat aliasing-ul la vocea FM
+ Modificata interfata (Voice si FM-ul sunt intr-o singura fereastra)
+ Inceput sa scriu schimbare voce curenta.
+05 Aug 2002 - Adaugat interfata pentru cei mai importanti parametrii ai ADnote_VoicePar[nvoice]
+ Inceput sa scriu interfata pentru OscilGen
+06 Aug 2002 - Este mult mai usoara schimbarea vocii curente.
+ Inceput sa scriu OscilEditor
+ Nu mai este necesara changebasefunc() la oscil pentru a schimba basefunction, se apeleaza automat.
+ OscilEditor este (aproape) complet
+ Toti parametrii ADnoteParameters au UI
+ Corectate cateva erori (cauzate de faptul ca nu am verificat daca ADnote::...Enabled!=0)
+07 Aug 2002 - Corectata o eroare la envelope
+ Adaugat afisaj spectrum la OscilEdit
+ Adaugat parametrii noi: extenal oscillator (voice si FM) si oscilphase(si FM) si interfata pentru ei
+ Gasite mai multe erori care apar daca misc widget-urile in timp ce cant la clape (probabil este vorba de thread-uri care trebuie sa fie sincronizate sau ceva cam asa sau memory leaks)
+ Inceput sa scriu interfata pentru Part
+ Adaugat bypass la filtrul global
+ Adaugat conversia oscil-ului in basefunction
+ Corectata o mica eroare la calcularea oscil-ului referitor la faze
+08 Aug 2002 - In VoiceList valorile sunt actualizate la fiecare apasare a butonului "ShowVoiceList" si formele de unda sunt afisate corect.
+ Corectate niste mici erori la FM
+ Daca se foloseste ca modulator o alta voce, interfata dezativeaza unii parametrii FM daca sunt inutili
+ Inceput sa scriu interfata si parametrii Master/Part
+ Schimbat putin Master si Part (atentie sa nu se instantieza ADnoteParameters la fiecare apasare de tasta)
+ Inceput sa scriu control-ul pentru Master/Parts
+09 Aug 2002 - Scris parametrii Part si Master
+ Inceput sa scriu sincronizarea intre thread-uri
+10 Aug 2002 - Adaugat o noua forma de unda la OscilGen
+ Adaugat sincronizarea intre thread-uri=>programul nu mai crapa daca in timp ce apas clapele, modific forma de unda
+ Adaugat enable/disable ADnote
+ Inceput sa scriu SUBnote/SUBnoteParameters
+ Se poate canta si la SUBnote(inceput sa scriu UI pt. el)
+11 Aug 2002 - Scris controlul armonicelor
+ Adugati cativa parametrii la SUBnote
+ Adaugat AmpEnvelope la SUBnote(si UI)
+12 Aug 2002 - Adaugat Detune la SUBnote si schimbat Detune-ul la ADnote
+ Adaugat FreqEnvelope la SUBnote
+16 Aug 2002 - Corectata o eroare care facea ca VoiceOut sa fie inlaturat chiar daca era inca folosit(de alte voci)
+ Daca "Forced Relase" este off atunci se face relase-ul liniar
+ Adaugat BandWidth Envelope
+17 Aug 2002 - Inceput sa pregatesc pentru EffectManager
+18 Aug 2002 - Adaugat inca un parametru la Reverb: initial delay fb
+ Scris efectele de insertie
+ Inceput sa scriu efectele de sistem
+19 Aug 2002 - Continuat sa scriu efectele de sistem
+ Inceput sa scriu interfata la Efecte (Reverb - terminat, aproape)
+22 Aug 2002 - Corectata o eroare la Echo
+ Se poate schimba efectul de insertie
+ Gasita o eroare care "crapa" programul daca schimb efectul de le Reverb (rezolvata temporar, dar cu "memory leak")
+23 Aug 2002 - Corectata eroarea la Reverb (a fost din cauza ca am pus ">" in loc de ">=" :-p )
+ Terminat efectele de insertie(si interfata)
+ Adaugat Effect cleanup
+ Scrisa interfata pentru efectele sistem (cu exceptia sendto another sys eff)
+24 Aug 2002 - Adaugate doua noi efecte: Chorus si Phaser
+25 Aug 2002 - Nu se mai aude tacanit la Chorus daca schimb Delay/Depth
+ Corectat o mica eroare care facea ca sa nu se afiseze Pinsparts corect
+ Adaugat un nou efect: AlienWah
+ Nu se mai aude tacanit la Phaser si la AlienWah la frecvente LFO f. mari
+27 Aug 2002 - Adaugata o noua forma de unda: Chirp
+ Adaugat Waveshaping la OscilGen
+ Se poate compila si fara UI
+ Inceput sa scriu Salvarea/Incarcarea Parametrilor
+28 Aug 2002 - In ADnoteVoiceListUI se afisaza corect daca vocea este activata/dezactivata
+ Scrisa Salvarea/Incarcarea parametrilor (cu exceptia la OSCIL::UseAsBaseFunction)
+ Adaugat File Save/Open
+29 Aug 2002 - Se poate salva si oscil::useasbase
+ Se afiseaza corect valorile dupa incarcare
+01 Sep 2002 - Adaugat "codul de intrare" sa saveload 0xfe pt. a sti de unde incepe o noua "ramura"
+ "Codul de intrare" este folosit pentru a nu incarca "ramurile" care nu se potrivesc cu specificatiile (ex. nr. de voce sau nr. part prea mare)
+ Adaugat header la fisier
+ Imbunatatit OscilUI::useasbase
+03 Sep 2002 - Modificat codurile de parmetrii: indicele par. sunt >= 0x80, parametrii <0x80 , controlerii speciali(urcare/coborare creanga) >=0xf0; Este util la versiunile viitoare, la forward/reverse compatibility.
+ Inceput sa scriu clasa Microtonal si interfata pt. Microtonal
+04 Sep 2002 - Adaugat Pfilterbypass la salvare (am uitat sa o pun pana acum)
+ Aproape terminat Microtonal-ul (cu exceptia importului din fisiere .scl)
+05 Sep 2002 - Facut cateva mici modificari la Microtonal si Echo
+ Adaugat un nou parametru la ADnote: PVolumeminus
+ Adaudat parametrii noi de Detune: Pcoarsedetune(coarse+octave) si Pdetunetype
+ Adaugat cateva tipuri de detune
+06 Sep 2002 - Adaugat posibilitatea de a folosi ADnotepars:Globalpars.Pdetudetype in loc de Pdetunetype (0 = default detunetype), asa ca nu mai trebuie sa mai modific la fiecare voce detunetype: setez la 0 si modific global-ul
+ Facut mici modificari la MidiInput(OSS)
+07 Sep 2002 - Corectata o eroare cu privire la detune si daca freq. > Nyquist
+ Modificat driver-ul OSSmidiin
+ Adaugat driver Alsa cu port virtual
+ Se poate salva doar instrumentele/microtonal.
+ Adaugata un nou fel de waveshaping(Zigzag)
+08 Sep 2002 - Psysefxvol[][] sunt scalate in dB
+ Nu mai este periculos sa inchid fereastra principala
+09 Sep 2002 - Se actualizeaza corect la incarcare la Master:Psysefxvol[][],Pvolume,Pkeyshift; si alti parametrii la Part
+ Adaugat nume la Part
+ Panic-ul (Shut-up-ul) se aplica si la efecte
+ Part->Penable controleaza de fapt daca Part-ul este activat/complet dezactivat. Daca se dezactiveaza un part toate notele+ efectele insertion sunt oprite. Nu mai consuma CPU daca folosesc multe part-uri.
+ Adaugat un nou parametru la part: Pnoteon care controleaza daca part-ul primeste mesaje NoteOn
+ Adaugarea extensiei se face automat.
+ Adaugat LFO exp_up 1 si 2
+ Curatat putin de memory leaks (mai am de curatat si interfata)
+10 Sep 2002 - Adaugat filtrul HPF cu un pol
+ Interfata se inchide corect.
+ Adaugat textul cu Copyright in interfata
+ Traduse toate comentariile in limba engleza
+ Adaugat licenta in fiecare fisier
+11 Sep 2002 - Adaugat descriere la fiecare fisier
+ Corectata o eroare care facea ca SUBnote sa aiba amplitudini f. mari la freq. f. inalte
+ Adaugat cateva macro-uri la interpolarea amplitudinii
+12 Sep 2002 - Modificat extensiile (*.mas.zyn ---> *.mas_zyn, la fel si celelalte) pentru a nu aparea fisiere *.mas.mas.zyn
+13 Sep 2002 - Am decis numele programului: "ZynAddSubFX" (Zyn de la synthetizer (inlocuit S cu Z), Add de la additive, Sub de la substractive, FX de la effects)
+14 Sep 2002 - Volumul din ADvoicelist se afiseaza corect
+15 Sep 2002 - Adaugat inca 3 moduri de waveshaping Limiter, UpperLimiter, LowerLimiter
+16 Sep 2002 - Adaugat Makefile
+17 Sep 2002 - Corectata o mica eroare care facea ca sa nu se incarce fisierele cu data intotdeauna
+ Nu se amplifica freq. f. inalte daca freq. filtrului este mare.
+ Inceput sa scriu documentatia.
+18 Sep 2002 - Adaugat functia de resetare a tuturor parametrilor(master si instrument)
+23 Sep 2002 - Adaugat posibilitatea de a conecta efectele de insertie la iesire Master
+ Lfo-ul la frecventa incepe de la 0 pt. startphase=0
+24 Sep 2002 - Corectate niste mici erori la Chorus/Phaser
+ Adaugat si "substract" la Chorus si Phaser
+ Limitat tipul detune-ului la valoarea maxima
+25 Sep 2002 - LANSAT PE INTERNET - PRIMA VERSIUNE (1.0.0)
+--------------------------------------------------------------------------------------------------
+01 Dec 2002 - Corectat niste comentarii
+ - Inlaturat o eroare care facea ca ZynAddSubFX sa crape daca dezactivez un part utilizat
+ - Inceput sa scriu Rezonanta
+02 Dec 2002 - Terminat de scris Rezonante
+ - Adaugat filtru trecer-banda (BPF)
+ - Scris Recording
+03 Dec 2002 - Adaugat Gain la Resonance
+ - Adaugat "New Instrument" la meniu
+06 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.1)
+--------------------------------------------------------------------------------------------------
+08 Dec 2002 - Inceput sa scriu Bank si interfata pentru Bank
+09 Dec 2002 - adaugat si "make debug"
+ - Continuat sa scriu Bank/UI; acum se poate folosi (dar nu salva pe HDD)
+10 Dec 2002 - Terminat Bank (mai trebuie scris un "config" file pentru a alege automat ultima banka folosita)
+11 Dec 2002 - Am mai lucrat ceva la Bank si am adaugat "config file"
+12 Dec 2002 - Filtrul BPF suna mai tare
+ - Nu mai ar trebui sa fie probleme la compilarea FFTwrapper.h (fftw.h)
+13 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.2)
+--------------------------------------------------------------------------------------------------
+ - Corectat o eroare care facea ca programul sa crape daca salvam parametrii in timp ce cantam
+ - LANSAT PE INTERNET - VERSIUNEA (1.0.2-1) - de acasa
+--------------------------------------------------------------------------------------------------
+21 Dec 2002 - Corectate mici erori (nu mai dispare "Bypass Global Filter", inlaturat zgomotul de mica amplitudine - cauzat de reverb,nu mai apare intarzierea foarte lunga de la inceput a notelor muzicale daca conectam la aseqview)
+ - Adaugat filtru de rejectie banda (Notch)
+ - adugat randomize la Resonance
+ - Inceput sa scriu VU-meter-ul
+22 Dec 2002 - Terminat VU-meter-ul
+ - Schimbat modul in care efectele de insertie se calculeaza (suna mai tare un pic)
+ - Adaugata o noua functie la OscilGen
+23 Dec 2002 - LANSAT PE INTERNET - VERSIUNEA (1.0.3)
+--------------------------------------------------------------------------------------------------
+24 Dec 2002 - Adaugata posibilitatea de a incarca fisiere ".scl" (la Microtonal)
+26 Dec 2002 - Adaugata optiunea de a folosi numai OSS-ul (fara ALSA)
+27 Dec 2002 - Corectate cateva erori si modificate cateva lucruri marunte la Microtonal
+28 Dec 2002 - Mici modificari la Microtonal
+ - Panic-ul la Reverb functioneaza OK
+ - Inceput sa scriu Scale Degree Mapping la Microtonal
+29 Dec 2002 - Continuat Scale Degree Mapping la Microtonal (dar nu am terminat)
+30 Dec 2002 - Corectat lucrul cu ScaleShift-ul
+ - schimbat modul in care se face keyshift-ul (nu se mai schimba armonia, indiferent de sistem)
+31 Dec 2002 - Terminat Mapping-ul la Microtonal(incl. incarcarea/salvarea)
+ Corectat eroarea care facea ca la Microtonal sa nu se incarce de fiecare data din scl_zyn unele date
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+01 Ian 2003 - Corectata o eroare la Microtonal (erau probleme la InvertKeys daca era folosit key mapping)
+ - Adaugata un nou tip de waveshaping (Inverse Limiter)
+02 Ian 2003 - Adaugat afisaj al acordului fin (cents)
+ - Butoanele arata f. frumos (am adaugat un nou widget in loc de Fl_Dial)
+03 Ian 2003 - Schimbate butoanele (putin)
+ - Nu se mai aude un tacanit la ShutUp sau AllNotesOff
+ - Corectat putin waveshaper-quantisize si butoanele
+ - Inlaturata o eroare care facea ca programul sa crape daca schimbam unii parametri ale efectelor
+07 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.4)
+--------------------------------------------------------------------------------------------------
+08 Ian 2003 - Am inlaturat de-a binelea eroarea (cu efectele - 3 Ian)
+11 Ian 2003 - Corectate o mica eroare care facea ca volumul sa fie negativ la ADnote::voice[].PVolume <64
+13 Ian 2003 - Corectata o mica eroare la VU-Meter
+ - Corectata o mica eroare cu privire la panning la Reverb
+15 Ian 2003 - Adaugat min/max keyresponse limits la Part
+ - Adaugat Filtru si FiltreEnvelope la SubNote
+16 Ian 2003 - Curatat codul sursa (ADnote) prin inlaturarea unor variabile
+ - Durata fadein-ul este aleasa automat (a.i. sa nu rezulte click-uri la notele joase si nici fadein-ul audibil la notele inalte sau cu freqcvente inalte)
+ - Corectata o mica eroare care faca ca uneori instrumentul sa nu fie salvat/sters la Bank slot-ul cerut
+ - Imbunatatita putin interfata: La ADnote si SUBnote, butoanele care controleaza amplitudinea armonicelor sunt colorate diferit daca au amplitudinea 0
+17 Ian 2003 - Corectate erori la Chorus si la Phaser care faceau ca sa sune prea 'sec' (din cauza ca wet-ul era la 50% din volum)
+18 Ian 2003 - Inceput sa scriu Preset-uri la efecte
+19 Ian 2003 - Adaugat Preset-urile la efecte
+20 Ian 2003 - Schimbat putin HPF-ul la Reverb
+21 Ian 2003 - Adaugat tuning-ul la Reverb (si Freeverb) si Roomsize
+ - Schimata putin interfata si modificat putin widgetul Pdial
+22 Ian 2003 - Amplificat volumul Reverb-ului cu 6 dB
+ - Buffer-ul foloseste liste simplu-inlantuite, asa ca nu-i mai problema la "configuratii mari" (multe part-uri)
+24 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.5)
+--------------------------------------------------------------------------------------------------
+26 Ian 2003 - Inceput sa scriu GetAudioOutSamples, care ar putea fi apelat in modul callback
+27 Ian 2003 - Adaugat o noua fuctie la waveshaping (clip)
+ - Adaugat suportul pentru Jack (adica programul poate rula in modul call-back ;-) )
+ - Inlaturata o eroare care facea ca npart sa fie foarte mare si ca programul sa crape
+29 Ian 2003 - Schimbari foarte minore la OscilGen::waveshape (la clip)
+ - Daca dau "clear" la OscilEdit, butoanele care au amplitudinea zero, sunt colorate corect
+30 Ian 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.6)
+--------------------------------------------------------------------------------------------------
+31 Ian 2003 - Inceput sa adaug optiuni la linia de comanda
+ - Rata de esantionare (SAMPLE_RATE) este setata la rulare si nu la compilare
+01 Feb 2003 - Inca 2 variabile sunt setate la rulare (SOUND_BUFFER_SIZE si OSCIL_SIZE)
+ - Volumul la Part se aplica doar dupa efecte de insertie
+ - Inceput sa scriu Distorsionarea (fara filtre)
+02 Feb 2003 - Schimbate modurile de distorsionare (exp -> asym1 si pow -> pow ( altul ) )
+ - Terminat Distorsionarea
+03 Feb 2003 - Adaugata inca o functie la waveshape (asym2)
+ - Inceput sa scriu Controller-ii
+ - Adaugat controller-i PitchWheel,Expression,Panning,Filter Cutoff, Filter Q, BandWidth, Modulation Wheel
+ - Panning-ul si volumul sunt interpolate
+ - Inceput sa scriu un nou program (Controller) care timite mesaje midi (controller) catre un port ALSA
+ - Panning-ul la Part se aplica doar dupa efecte de insertie
+ - Panning-ul la efecte se aplica inainte de procesare
+04 Feb 2003 - Adaugat posibilitatea de a seta intensitatea/dezactiva la controlleri(incl. UI)
+ - Adaugat controler-ul FMmodulationAmplitude
+ - Corectat o eroare la Buffer (care facea ca Buffer-ul sa nu se reseteze :-P )
+05 Feb 2003 - Corectata o eroare care facea ca programul sa consume mult din procesor (denormalisation)
+ - Nu mai este permisa o valoare a lui OSCIL_SIZE care sa nu fie putere a lui 2 (este ajustata automat)
+ - Adaugat controller-i Volume si Sustain Pedal, AllNotesOff, AllSoundOff, ResetAllControllers
+ - Adaugat NRPN, adica toti parametrii efectelor pot fi controlati prin controlleri
+06 Feb 2003 - Pus limite la parametrii efectelor a.i. sa nu se seteze (datorita controllerilor) la valori nevalide
+ - Inlaturata o mica eroare la controller-ul BandWidth
+ - Schimbat putin EffectLFO::updateparams
+ - Controler-ul BandWidth afecteaza doar FineDetune-ul
+ - Schimbat putin identificare controlerilor si adaugat controlleri la OSS
+ - Schimbat putin interfata utilizator la controlleri
+07 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.7)
+--------------------------------------------------------------------------------------------------
+08 Feb 2003 - Adaugat modul "mono"(monofonic) la part
+ - Inceput sa scriu portamento-ul
+09 Feb 2003 - Terminat portamento-ul
+10 Feb 2003 - Inceput sa scriu Equaliser-ul
+ - Inlaturata o eroare care facea ca la parametrii efectelor care sunt 0 sa nu fie incarcati
+11 Feb 2003 - Terminat Equaliser-ul (adica adaugat vizualizator freq response)
+ - Corectata o mica eroare care facea ca part-ul 0 sa fie activ chiar daca cel salvat era inactiv
+12 Feb 2003 - Mici modificari la EQ (UI)
+ - Adaugata posibilitatea de swap (stanga <--> dreapta)
+ - Adaugat Q la filtrele shelf
+13 Feb 2003 - Adaugat inca un parametru la Phaser (phase)
+ - Curatit putin codul sursa la efecte
+ - Adaugat system effect send to next systems effects
+14 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.8)
+--------------------------------------------------------------------------------------------------
+ - cateva mici modificari (de la un patch primit de pe Internet)
+ - adaugat keylimit la Part (si first note priority)
+15 Feb 2003 - Corectata o foarte mica eroare la Part
+16 Feb 2003 - Se poate aplica filtrul inainte de distorsion
+ - Adaugat filter stages (adica filtrul se poate aplica de mai multe ori)
+17 Feb 2003 - Corectata o mica eroare la Reverb si modificat putin filter-ul si UI
+18 Feb 2003 - Corectata o eroare care facea ca semnalul la voice sa fie intre [-4.0..4.0] si sa faca probleme la RingModulation
+ - Adaugat modul Noise la ADsynth(voice) pentru a putea produce si tobe
+ - Adaugat parametrul fixed frequency la 440Hz
+19 Feb 2003 - Corectata o mica eroare la ADnote (aparea un fadein nedorit)
+ - Facute inca cateva mici modificari la ADnoteUI
+20 Feb 2003 - Imbunatatit foarte mult Controller-ul si adaugat la ZynAddSubFX ca program extern
+ - Modificat putin Waveshaper-ul (fct. L/U limit)
+ - Corectata o eroare la SUBnote (care facea probleme la glissando)
+ - Adaugat un nou parametru Punch la ADnote care face ca sa sune ca si cum ar fi o lovitura (f. util la Rhodes)
+21 Feb 2003 - Adaugata inca o functie de distorsionare x(1-x)
+23 Feb 2003 - Corectata o eroare (cu mutex) care facea ca sunetul sa fie extrem de tare, daca in timp ce cantam, modificam unii parametrii de sunet la ADnote
+24 Feb 2003 - LANSAT PE INTERNET - VERSIUNEA (1.0.9)
+--------------------------------------------------------------------------------------------------
+ - Adaugata posibilitatea de a tipari notele si timpul in care au fost produse (optiunea -D)
+26 Feb 2003 - Adaugat inca 2 controlleri (Resonance Center Freq. (relative) si Resonace Bandwidth(relative))
+27 Feb 2003 - Adaugata posibilitatea de a modifica parametrii (in mod direct) al oscilatorului extern
+07 Mar 2003 - Portat partial(doar interfata) programul sub Windows
+08 Mar 2003 - Adaugat Virtual Keyboard
+ - Cateva mici modificari in vederea portarii pt. windows
+ - Adaugat si controller la Virtual Keyboard
+09 Mar 2003 - Adaugat pitch wheel la Virtual Keyboard si modificat putin controller-ul la VK
+10 Mar 2003 - Adaugat Filter Frequency Tracking (adica modificarea frecventei filtrului in functie de frecventa notei)
+ - Marite eficienta la LFOparams - update lfotime
+ - Adaugat mod de normalize prin RMS
+ - Corectate doua erori la Distorsion (negate si mono+prefiltering)
+11 Mar 2003 - In Windows, nu mai este necesar functiile getopt (scrisa o functie proprie)
+12 Mar 2003 - Adaugat filtru la OscilGen
+13 Mar 2003 - Adaugat mai multe filtre la OscilGen
+ - Facute optimzari la ADnote (adaugarea unui element la oscilsmp si fmsmp,etc.) si curatat putin codul sursa
+ - Corectata o eroare care amplifica fm-ul la rate de esantionare inalte
+ - Optimizat si curatat reverb-ul
+16 Mar 2003 - Modificate optiunile de compilare in Makefile.inc si coduri sursa a.i. sa se realizeze portarea pe windows mai usor
+17 Mar 2003 - Inregistrarea se face in formatul WAV si nu RAW
+ - Adaugat trigger la recorder (se incepe inregistrarea doar cand este apasata o nota)
+ - Adaugat interfata PortAudio
+ - Corectata eroarea care facea ca UI sa nu ruleze pt. Windows (trebuia dat show() la UI in thread-ul 3) si corectate alte erori din windows
+ - Si audio-ul functioneaza sub Windows
+ - Corectata o eroare care se manifesta foarte rar(Resonance, i era de la 0 si nu de la 1)
+18 Mar 2003 - Adaugat interpolare la filtru (nu se mai aud tacanaituri, daca frecventa filtrului se schimba foarte rapid si semnalul contine putine armonice)
+ - Adaugat interfata Midi in Windows => consider ca programul este portat in Windows
+19 Mar 2003 - Adaugat interfata de configurare
+ - Corectata o eroare la OscilGen care facea ca in loc ca amplitudinile sa fie reduse la -40,..,-100dB, sa fie setate la 1 si unde era intensitate mare sa file amplificate
+20 Mar 2003 - Corectata o mica eroare la interfata (uneori disparea butonul ON de la ADvoice)
+21 Mar 2003 - LANSAT PE INTERNET - VERSIUNEA (1.2.0)
+--------------------------------------------------------------------------------------------------
+ - Se interpoleaza filtrul si cand se trece peste pragul Nyquist (in sus sau in jos)
+22 Mar 2003 - Corectata o eroare care facea ca nr. de esantioane scrise in headerul fisierului WAV sa nu fie initializat
+26 Mar 2003 - Nu mai este permisa alegerea unui fisier wav in timpul pauzei de la record
+ - Gasita si corectata o eroare stupida (am pus la NRPN 0x98 in loc de 98 zecimal)
+28 Mar 2003 - Inceput sa portez programul sub VST
+29 Mar 2003 - Adaugat Master fine detune (-64.0 .. 63.0 cents)
+01 Apr 2003 - Functioneaza portarea sub VST, dar mai este de lucru...
+02 Apr 2003 - Modificat synth-ul a.i. sa se poate apela in mai multe instante in VST
+ - Continuata portarea in VST
+03 Apr 2003 - Continuata portarea in VST (este limitat la o singura instanta)
+05 Apr 2003 - Adaugata posibilitatea de a interschimba/copia parametrii efectelor
+ - Mici modificari la Makefile (ignora headerele inexistente la deps)
+06 Apr 2003 - Adaugat posibilitatea de protectie impotriva atenuarii a notei fundamentale la rezonanta
+ - Pitch bend-ul merge bine in Windows
+07 Apr 2003 - LANSAT PE INTERNET - VERSIUNEA (1.2.1)
+--------------------------------------------------------------------------------------------------
+ - Adaugat efect la part (adica efect care face parte din instrument ;-) )
+08 Apr 2003 - Adaugata interpolare la Resonance (peak-urile le interpoleaza)
+09 Apr 2003 - Interfata la Envelope este o singura clasa
+ - Adaugat Envelope free mode (adica de orice forma)
+ - Adaugata posibilitatea de a copia de la o voce la alta la ADnote
+ - Release-ul este liniar (in loc de dB)
+10 Apr 2003 - Adaugata afisarea ultimului fisier master salvat/incarcat
+ - Adaugata setarea notei minime/maxime la ultima nota
+ - Pot alege daca release-ul sa fie liniar
+ - Facute cateva corecturi la envelope
+11 Apr 2003 - Curatat codul sursa la UI si impartit in mai multe fisiere .fl
+ - Corectate niste erori la Envelope si adaugat modul liniar/logaritmic la amplitudine
+12 Apr 2003 - Inceput sa scriu kit-ul la part
+13 Apr 2003 - Terminat de scris kit-ul la part+UI
+14 Apr 2003 - Copierea vocilor este sub forma de clipboard
+ - ADsyn su SUBsyn check-urile de la PartUI sunt actualizate
+15 Apr 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.0)
+--------------------------------------------------------------------------------------------------
+16 Apr 2003 - Adaugat modul "Single" la instrument kit, care face ca sa sune doar primul instrument din kit disponibil
+21 Apr 2003 - Adaugat realtime priority, care seteaza prioritatea mare la sintetizator, daca are posibilitate; merge numai pe Linux
+ - Gasite multe erori mici(dar potential periculoase) cu ajutorul programului Valgrind
+30 Apr 2003 - Adaugat "Spectrum adjust" la OscilGen, care ajusteaza intensitatile armonicelor
+03 Mai 2003 - Normalizat spectrul inaintea adjust-ului la OscilGen
+04 Mai 2003 - Adaugat mod "egal temperat" la fixed frequency (440Hz), util la tobe
+05 Mai 2003 - Adaugat modul "Drum mode", unde sistemul este intotdeauna temperat (12tET), toate notele sunt mapate si transpose-ul este ignorat
+08 Mai 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.1)
+--------------------------------------------------------------------------------------------------
+09 Iun 2003 - Am schimbat <FL/... .h> in .H in fisierele .fl (ca sa se poate compila si pe Debian)
+10 Iun 2003 - Inceput sa modific interfata la filtru a.i. sa pot adauga filtrul formantic usor
+ - Interfata pentru filtru este o singura clasa
+12 Iun 2003 - Inceput sa scriu panoul de part-uri (care afiseaza parametrii importanti ale part-urilor)
+ - VU-meter-ul poate afisa si intensitatea part-ului dorit (folosit la panou de part-uri)
+13 Iun 2003 - Terminat panoul de part-uri
+ - Adaugat posibilitatea de a inchide automat fereastra bancii de instrumente, cand se incarca un instrument
+19 Iun 2003 - Modificat modul cum se calculeaza frecventa filtrului (se fac doar adunari si doar la urma se ridica la putere)
+22 Iun 2003 - Aproape terminat filtrul formantic (fara UI)
+24 Iun 2003 - Merge mai multe instante in jack (alege porturi diferite)
+26 Iun 2003 - Continuat de scris filtrul formantic
+29 Iun 2003 - Adaugat vu-meter fals la Panel (in caz ca partul este dezactivat si primeste note on). De asemenea se arata daca in partul dezactivat s-a cantat ceva (apare o liniuta).
+09 Iul 2003 - Inceput sa scriu interfata pentru filtrul formantic
+10 Iul 2003 - Continuat filtrul formantic (interfata)
+11 Iul 2003 - Eroarea vine de la Makefile pt. ca nu recompileaza si clasele care folosesc o anumita clasa, daca aceasta din urma se schimba
+ - Continuat filtrul formantic (interfata+adaugarea interpolarii la Q)
+12 Iul 2003 - Adaugat la filtrul formantic setarile de amplitudine formanti si interpolarea acestora
+ - Adaugat grafic la UI-ul filtrului formantic si alti paramatrii la filtrul formantic
+13 Iul 2003 - Corectata eroarea la FormantFilter care facea ca sa nu se interpoleze intre vocale
+ - Adaugat parametrul VowelClearness la FormantFilter care face ca sa se evite vocalele mixte
+14 Iul 2003 - Inlaturat parametrul Psequence[].pos, pt. ca era confuz => fiecare vocala are zona egala
+ - Adaugat parametrii Psequencestretch si Psequencereversed la FormantFilter
+ - Adaugat parametrul Pgain la filtru (-30...30 dB)
+ - Terminat de scris Filtrul Formantic
+ - Corectata o eroare care facea ca sa nu se salveze oscilatorul la o ADnote_voce, daca vocea este dezactivata, chiar daca era folosita de o alta voce
+ - Prima data se cauta fisierul "default.bnk_zyn" si in dir "/usr/share/zynaddsubfx" sau "/usr/local/share/zynaddsubfx"
+15 Iul 2003 - Setat Pkeylimit prestabilit la 15 la Part
+ - Activarea unui Part din interfata Panel schimba automat part-ul curent la acela
+ - Se poate alege ca un instrument din Kit sa fie procesat incepand cu un anumit efect; si se mai poate alege ca un efect din Part sa fie trimis in afara
+17 Iul 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.2)
+--------------------------------------------------------------------------------------------------
+21 Iul 2003 - Corectata o eroare la FilterUI care facea ca la fiecare afisare sa se initializeze FilterParames::Pgain la 64
+25 Iul 2003 - Corectata o eroare care facea ca modulatia in faza/frecventa sa sune diferit la diferite rate de esantionare/oscilsize
+26 Iul 2003 - Afisat corect - valoarea OSCIL_SIZE ajustata (in caz ca a fost data optiunea "-o" incorect)
+ - In windows arata si numele la midi_in_device
+04 Aug 2003 - Adaugat filtrele Peak,LowShelf,HighSelf la filtru si foloseste parametrul Gain de la interfata filtrelor
+30 Aug 2003 - Adaugat un nou tip de filtru: State Variable Filter
+31 Aug 2003 - LANSAT PE INTERNET - VERSIUNEA (1.4.3)
+--------------------------------------------------------------------------------------------------
+02 Sep 2003 - Adaugata posibilitatea de a incarca de la inceput un fisier .mas_zyn "-l"
+ - Se poate lansa programul fara interfata utilizator ("-U")
+17 Sep 2003 - Adaugat niste simple patch-uri de Frank Neumann
+02 Oct 2003 - Corectata o eroare la SUBsynth care facea ca la freq inalte si Q foarte mici sa se produca filtre instabile
+30 Oct 2003 - Adaugate posibilitatea (+interfata in config) de Dump (avansat)
+ - Adaugat ModWheel liniar si facut prestabilit (si posibilitatea de a alege in interfata modul de modwheel)
+04 Nov 2003 - Modificat putin interfata la ResonanceUI
+05 Nov 2003 - Marita viteza prin inlocuirea de (int) cu cod de asamblare (cu.10-50% la FM,chorus,etc.)
+10 Nov 2003 - Inceput sa adaug posibilitatea de a adauga comentarii la instrumente
+11 Nov 2003 - Terminat de adaugat comentariile/autor/tipuri la instrumente
+12 Nov 2003 - Adaugat intefata pentru FFTW3 la fftwrapper
+18 Nov 2003 - Inceput sa scriu Sequencer-ul
+19 Nov 2003 - Adaugat un buton "i" pt. instrument info si facut ca instrument info sa se afiseze automat daca se schimba partul (sau se incarca instrumente,etc)
+20 Nov 2003 - Continuat de scris Sequencer-ul si inceput sa ii scriu interfata
+ - Mici modificari la preset-urile de la Echo
+26 Nov 2003 - Continuat de scris sequencerul - inceput sa scriu inregistrarea (fara timer)
+27 Nov 2003 - Se poate inregistra (dar nu rula) - adaugat timerul de inregistrat
+ - Frecventa maxima al filtrelor este de Nyquist-500.0 pentru a evita instabilitatea filtrelor
+28 Nov 2003 - Adaugata favorizarea portamento-ului in sus sau un jos; ex. se poate face ca portamento-ul sa fie doar in sus, sau portamento-ul in jos sa fie mai scurt decat cel in jos
+ - Inceput sa pun pe cvs la cvs.sourceforge.net
+01 Dec 2003 - Am facut niste mici modificari ca urmare a unui bug-report
+05 Dec 2003 - Facute cateva modificari la jack
+08 Dec 2003 - Inceput sa incerc sa fac rt-safe sub jack, dar in stadiul actual suportul jack este nefunctional
+11 Dec 2003 - Adaugat aleatorism la amplitudinile armonicelor
+13 Dec 2003 - Adaugat LFO frequency randomness
+14 Dec 2003 - Imbunatatit LFO frequency randomness
+15 Dec 2003 - Corectata o mica eroare la ADnoteParameters (lipseau niste break-uri la salvarea/incarcarea parametrilor)
+16 Dec 2003 - Eroarea cu break-urile se dovedeste a fi o eroare majora :( ; adica corectarea ei, necesita resalvarea tuturor instrumentelor
+ - Am revenit la suportul vechi de JACK, dar cel nou este disponiblil ca JACK_RT (nefunctional inca)
+17 Dec 2003 - Inceput sa restucturez Part-ul (am adaugat clasele Instrument,InstrumentParams) - programul nu mai este compatibil cu versiunile anterioare
+ - RMS normalize este prestabilit la OscilGen
+18 Dec 2003 - Continuat de restructurat Part-ul
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+01 Feb 2004 - Revenit la versiunea din 16 Dec. 2003
+ - Pus iarasi RMS normalize prestabilit la OscilGen
+ - M-am razgandit ;) nu mai restructurez part-ul; mai bine pun acolo o functie separata pentru salvari/incarcari par instrumente
+ - Inceput sa adaug suportul XML
+02 Feb 2004 - Corectata o eroare care facea ca numele la instrumentele din bank sa fie aratate gresit (nu era pus un \0 )
+ - Continuat suportul de XML
+03 Feb 2004 - Continuat de scris suportul XML - inceput sa salvezi cativa parametrii
+04 Feb 2004 - Se salveaza parametrii XML la master, part, filter, lfo, envelope, resonance si adnote (partial)
+05 Feb 2004 - Se salveaza toti parametrii in XML
+06 Feb 2004 - Adaugat salvarea de instrument in XML
+ - Adaugat export la bank intr-un director XML si decis ca bank-ul sa fie un director cu mai multe fisiere xml de forma XXXX-nume.xml sau XXXX-nume.xml.gz
+07 Feb 2004 - Adaugat functii de initializare si renuntat la masterdefaultbuf si instrumentdefaultbuf (adica salvarea la inceput si incarcarea bufferelor cu instrumentele prestabilite)
+ - Corectata o mica eroare care facea ca sa se incarce subnotepars la adnotepars (eroarea a aparut azi)
+08 Feb 2004 - Modificat putin formatul XML
+10 Feb 2004 - Adaugata salvarea parametrilor pt. basefunction la OscilGen
+ - Inceput sa scriu incarcarea parametrilor
+11 Feb 2004 - Se pot incarca cativa parametrii de la master
+12 Feb 2004 - Continuat incarcarea parametrilor XML si la part (neterminat)
+13 Feb 2004 - Terminat de adaugat parametrii la incarcarea XML
+14 Feb 2004 - Se poate incarca si instrumente
+ - Rezolvata o problema la coarse detune
+ - Corectate cateva erori la incarcarea XML-ului
+ - Frecventa LFO-ul de la instrumente are valoare reala intre 0..1
+ - Corectata eroarea care facea ca functia de rezonanta sa fie trasata incorect
+ - Adaugata compresie gzip la fisiere si decompresie automata la incarcare (folosesc biblioteca zlib)
+15 Feb 2004 - O mica modificare la envelope parameters in sensul ca envelope-ul prestabilit la FM nu mai este liniar
+22 Feb 2004 - Adaugat normalize Full RMS la Oscil
+23 Feb 2004 - Inceput sa fac ca sa pot adauga Bank bazat pe XML (adaugat temporar clasa OldBank)
+24 Feb 2004 - Continuat la Bank
+25 Feb 2004 - La Bank - inceput sa scriu partea ca sa arate instrumentele din banca
+26 Feb 2004 - Continuat la Bank
+27 Feb 2004 - Corectate erori la snprintf (nu dadeam parametru "%s" inainte de string si daca acel string continea ceva %, era periculos) si alte erori
+ - Micsorat timpul de marire amplitudine la ADnote (doar in cazul cand amplitudinea creste brusc ca la un LFO expdown)
+ - Corectata o eroare foarte veche la LFO amplitudine (amplitudinea nu scadea corespunzator)
+28 Feb 2004 - Se poate incarca si salva instrumente in Bank
+01 Mar 2004 - Se pot schimba bancile de instrumente
+ - Introduse si celelalte functii la Bank (cu exceptia salvarii/incarcarii locului bancii folosite)
+ - Se poate importa banci din bnk_zyn
+03 Mar 2004 - Terminat (teoretic) partea de XML
+05 Mar 2004 - Actualizat Copyright-ul la 2004 in fisiere
+08 Mar 2004 - Corectat o mica eroare la OscilGen (se aplica gain-ul rezonantei incorect)
+09 Mar 2004 - Adaugata posibilitatea de stretch la LFO in functie de frecventa notei
+12 Mar 2004 - Adaugata modulatie la OscilGen (functia de baza)
+13 Mar 2004 - Adaugat HarmonicShift la oscilgen
+15 Mar 2004 - Inceput sa scriu partea de incarcare MIDI
+ - Inlaturata partea de recording din Sequencer
+16 Mar 2004 - Inceput sa scriu partea de analiza midi
+25 Mar 2004 - Continuat partea de analiza midi
+28 Mar 2004 - Scris partea de incarcat fisier midi
+ - Merge partial playerul
+26 Mai 2004 - Playerul merge bine cu un canal midi (rezolvata problema cu timing-ul)
+03 Iun 2004 - Adaugata partea de play speed la interfata
+06 Iun 2004 - Adaugata functia sigmoid la distorsionare
+12 Iun 2004 - Modificat modul cum este realizat bank-urile, adica directoarele de bank-uri exista in anumite directoare si aceste directoare sunt cautate automat de bankuri; adaugat optiunea de a se folosi mai multe bank-uri
+13 Iun 2004 - Adaugat filtrul "sinus" la OscilGen
+ - Managementul bancilor de instrumente este complet
+ - Se cauta bancile si in '/usr/share/zynaddsubfx/banks' si '/usr/local/share/zynaddsubfx/banks'
+ - Corectata o eroare la filter la OscilGen care filtra diferit componentele sin si cos
+ - Adaugat posibilitatea de swap la instrumentele din bank
+14 Iun 2004 - Adaugat __DATE__ si __TIME__ sa stiu cand s-a compilat
+ - Modificat interfata la PartUI
+ - Imbunatatit modulatia basefunc la OscilGen (adaugat inca un parametru si inca un tip de modulatie ("power"))
+ - Adaugat inca o noua functie basefunc la OscilGen (sqr=atan(sin(x)*a))
+15 Iun 2004 - Adaugat posibilitatea de a face armonicele ca sa depinda de frecventa ("adaptive") si rezultatul suna foarte frumos pentru ca tendinta este de pastrare a frecventelor armonicelor si nu a numarului de ordine al lor
+16 Iun 2004 - Inceput sa trec configul pe XML
+17 Iun 2004 - Adaugat tipul threshUp la spectrum adjust
+ - Terminat de trecut config-ul pe XML (inclusiv setarile bancilor de instrumente)
+18 Iun 2004 - Incercata interpolarea cubica dar am vazut ca nu merita pentru ca OSCIL_SIZE e suficient de mare si pentru o interpolare liniara
+ - Separat OscilGenUI din ADnoteUI
+ - Inceput sa scriu modulul de sinteza PADnote
+19 Iun 2004 - Adaugat modul liniar de controller bandwidth si modificat modul liniar la controllerul modulation wheel
+ - Adaugata modulatia in frecventa la OsciGen
+20 Iun 2004 - Nu se mai deschide automat fereastra de instrumente daca a fost deschisa si s-a descarcat un instrument
+ - Facute mici modificari la FM-ul de la Oscil
+21 Iun 2004 - Inceput sa scriu conversia in sinus
+22 Iun 2004 - Continuat conversia in sinus si facut teste pentru posibilitatea de "draw" cu sliderele
+23 Iun 2004 - Modificat modul in care parametrii se afiseaza la OscilGen (este o functie "refresh" care face asta)
+ - Adaugata posibilitatea de draw la armonicele OscilGen daca se apasa tasta Shift
+ - Corectata o mica eroare care facea imposibila modificarea amplitudinii armonicelor cu tastatura
+ - Adaugat randomness de grup (adica se aplica acelasi randomness la toate vocile care folosesc acelasi oscilator)
+24 Iun 2004 - Inlaturata setara de normalize la OscilGen. Intotdeauna normalize este Full RMS
+ - Facute cateva imbunatatiri la interfata unde sunt inlocuite comuter-urile cu setari mai usor de inteles de catre utilizator (ex. la efectele de insertie se arata "insert to Master Out" in loc de "-2")
+29 Iun 2004 - Inlaturata setarea cu gain la Resonance pentru ca este inutil (datorita faptului ca normalize este Full RMS intotdeauna)
+30 Iun 2004 - Inlaturata o eroare recenta la EffectUI si modificat EffectUI in sensul ca nu trebuie sters si reinstantiat pentru a se reincarca valorile curente de efecte
+ - Inceput sa scriu un nou efect (DynamicFilter)
+01 Iul 2004 - Corectata o mica eroare la EffectUI care facea ca efectele sa nu apara activate
+ - Continuat de scris la DynamicFiter (mai este doar de salvat parametrii si de auto-update la filtru)
+02 Iul 2004 - Continuat la DynamicFilter (adaugata auto-update, adaugat preset-uri)
+ - Terminat DynamicFilter
+ - Corectata o eroare la EQui care facea ca sa nu se actualizeze efectul curent si sa nu se obtina graficul egalizatorului
+03 Iul 2004 - Corectata o mica eroare care nu activa la EffectUI daca efectul anterior era dezactivat
+ - Actualizat Swap/Copy la efecte ca sa proceseze si parametrii la filtre
+ - Adaugat Bypass la efectele de instrument
+ - Imbunatatit interfata utilizator (eliminate setarile "-1",etc.)
+ - Scris calcularea profilului la PADsynth
+ - Adaugat OscilGen si Resonance la PADsynth si inceput sa scriu interfata utilizator la PADsynth
+04 Iul 2004 - Adaugata calcularea automata a largimii de banda echivalente si afisarea ei
+ - Inceput sa scriu partea de sinteza la PADsynth
+ - Auzit primul sunet la PADsynth
+05 Iul 2004 - Nu mai face urat daca schimb parametrii in timp ce cant si apas apply
+ - Adaugat harmonic scale si position la PADsynth
+ - Se calculeaza corect si armonicele cu largime de banda mare
+06 Iul 2004 - Inceput sa adaug filtre,lfo,envelopes,etc. la PADsynth
+07 Iul 2004 - Corectate cateva mici erori si adaugat autoscale
+ - Modificata putin interfata de la filtru
+ - Adaugata interfata si parametrii la LFOs,Envelopes,Filter la PADsynth
+ - Adaugata fereastra care arata pozitiile armonicelor si continuat de lucru la acestea
+08 Iul 2004 - La pozitiile armonicelor sunt aratate si valorile lor reale in dB
+ - Alte adaugiri minore la PADsynth
+ - Adaugat interpolare cubica la PADsynth
+09 Iul 2004 - Modificat modul cum se calculeaza profilul armonicelor la PADsynth (nu se mai ridica la patrat)
+ - Corectate cateva erori la PADsynth
+ - Modific amplitudinea in functie de sqrt(largime de banda) => amplitudinile armonicelor sunt echivalente cu oscil
+11 Iul 2004 - Acum nu se mai intrerupe sunetul la notele care canta in timp ce sunt aplicate modificarile la parametrii
+ - Se poate alege marimea sample-lui
+ - Adaugat multisampling la PADsynth
+ - Cand se incarca parametrii ADsynth se da volumul ceva mai incet ca sa corecteze faptul ca normalize-ul este doar RMS
+12 Iul 2004 - Inlocuit codul de D/W sau Volume de la efecte cu un cod unic in EffectMgr
+ - Se poate face efecte la instrumente la care doar semnalul Wet e procesat de efectele urmatoare
+ - Modificat modul cum se calculeaza intensitatea Wet la Reverb si Echo
+ - Corectata eroarea la FM care facea ca daca Adaptive Harmonics!=0 sa se calculeze FM-ul gresit
+13 Iul 2004 - Rezonanta la PADsynth se face in functie de armonica reala si nu de numarul de ordine al armonicei
+ - LFO,Envelope, Filters, etc. merg la PADnote
+ - Inceput sa fac partea de aratare ca parametrii au fost schimbati (butonul "Apply" se coloreaza in rosu)
+14 Iul 2004 - Butonul Apply la PADsynth se coloreaza in rosu cand se modifica ceva
+ - Adaugat fixed freq. la PADsynth
+ - Sunt salvati si parametrii PADsynth => consider in mod oficial ca PADsynth este complet
+15 Iul 2004 - Facuta o modificare la PADnoteUI care arata foarte frumos
+ - Completata partea de save/load si stabilite noile extensii ale fisierelor: master - .XMZ, instrument - .XIZ, microtonal - .XSZ
+ - Inlocuit memset cu un macro (ZERO) pentru ca memset nu seteaza toate valorile ci uneori doar prima valoare cu 0 (e o optimizare la gcc care face asta)
+ - Corectate niste erori la makefile care aveau legatura cu compilarea in windows
+ - Corectate 2 erori referitor la Banci de instrumente
+16 Iul 2004 - Adaugat inca noi tipuri de harmonic bandwidth scale
+ - Adaugat inca un parametru la filter la OscilGen si inca un nou tip de filtru
+17 Iul 2004 - Corectata o eroare care facea sa crape programul uneori dupa ce scria instrumentul in banca
+ - Modificata optiunea -l ca sa incarce un .xmz
+ - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre1)
+--------------------------------------------------------------------------------------------------
+18 Iul 2004 - Corectata o mica eroare la afisare care facea ca la PADnoteUI sa fie trasate liniile in mod gresit
+19 Iul 2004 - Corectata doua mici erori (se incarca gresit parametrii filtrului de la OscilGen)
+ - Corectata inca o mica eroare care facea ca sa nu se coloreze butonul PAD_Synth Apply in rosu la anumiti parametrii de la oscilgen
+ - Se dezactiveaza butoanele Edit de la PartUI ca sa nu se poata edita module de sinteza inactive
+20 Iul 2004 - Corectate cateva erori cu compilare pe windows
+21 Iul 2004 - Corectata o mica eroare la Bank si alte erori
+26 Iul 2004 - Acum este folosita biblioteca mxml-2
+ - Corectata o eroare care facea ca sample-ul la PADnote sa nu fie ales in functie de frecventa reala de baza (cu detune)
+ - Mutat functiile de waveshaping in Distorsion.C/.h
+27 Iul 2004 - Corectata o eroare foarte suparatoare care bloca uneori calculatorul
+ - Adaugat inca un nou parametru la PADsynth la base function
+ - Nu se mai arata butonul de apply parameters la PADsynth cand nu este necesar
+ - Eliminate blocarile de cateva secunde din threadul de sunet in momentul cand se incarca un nou instrument care contine parametrii PADsynth
+ - Adaugata schimbarea titlului ferestrei principale la load XML
+29 Iul 2004 - Modificat modul cum este stocat lista de banci root dir
+ - Gasita o eroare care facea ca sa se stearga denormalkillbuffer inaintea lui master
+30 Iul 2004 - Gasite si corectate o gramada de erori (eu stergeam elemente din ferestre si fltk le stergea din nou)
+ - Eliminate warning-urile pentru -Wall
+31 Iul 2004 - Eliminate complet stergerile in plus de la UI din destructorele obiecte
+ - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre2)
+--------------------------------------------------------------------------------------------------
+01 Aug 2004 - Adaugat un nou tip de OvertonesPosition la PADsynth
+02 Aug 2004 - Am pus din nou schimbarea schedule-ului la valoare corecta (l-am scos dintr-o greseala)
+04 Aug 2004 - Am corectat niste erori la VST
+ - Merge VST, dar nu intotdeauna stabil (merge stabil pe vsthost.exe)
+ - Corectata eroare care facea ca sa nu mearga MIDI
+ - LANSAT PE INTERNET - VERSIUNEA (2.0.0pre2 VST)
+--------------------------------------------------------------------------------------------------
+13 Aug 2004 - Inceput sa scriu modurile continous si discrete la PADnote
+14 Aug 2004 - Terminat modul continous la PADnote
+ - Corectata o mica eroare la OscilGen care facea daca adaptive harmonics e activ si phase randomness>0 sa rezulte si aleatorism in amplitudinile armonicelor
+ - Inceput sa scriu Presets/Clipboard (Clipboardul, in stadiu actual va putea copia doar parametrii folositi si nu cei dezactivati)
+ - Merge partial partea de Copy in clipboard
+15 Aug 2004 - Corectata o eroare in main.c la pitch bend
+ - Scos Swap/Copy la efecte si la PartUI si vechiul Copy/Paste de la ADnote voice
+ - Merge clipboardul la Oscil, Resonance, Filter si partial la ADsynth,SUBSynth si PADsynth
+16 Aug 2004 - Corectata inca o eroare la pitch bend (aratata de Krzysztof Korpiela)
+ - Adaugat refresh si la Filtru si paste la ADnote, SUBnote si PADsynth sunt complete
+17 Aug 2004 - Adaugat clipboard la LFO, Envelope, ADnoteVoice si Filter Vowel
+18 Aug 2004 - In clipboard se salveaza toti parametrii (chiar si cei dezactivati)
+ - Corectata o eroare care facea ca instrumentul sa fie incarcat la fiecare salvare in banca
+ - Tipurile de lfo sunt compatibile intre ele la clipboard
+19 Aug 2004 - Corectata o mica eroare la XMLwrapper care facea ca sa se salveze fortat toti parametrii (chiar si cei nefolositi)
+ - Adaugata partea de salvare/incarcare a listei directoarelor unde se afla presetarile
+21 Aug 2004 - Am lucrat putin la salvare/incarcare a listei dir. cu presetari
+22 Aug 2004 - Corectata o eroare de compilare
+ - Makefile-ul modificat, a.i. make-ul sa se opreasca in caz de eroare
+ - Terminat managerul de preset-uri
+23 Aug 2004 - Adaugata posibilitatea de a se vedea direct din lista cu bancile de instrumente
+24 Aug 2004 - Inlaturat complet suportul pentru formatele *.mas_zyn, *.ins_zyn, *.bnk_zyn si *.scl_zyn
+ - Ascuns Sequencer-ul de utilizator (o sa il continui mai incolo)
+25 Aug 2004 - Listele de banci si de preset-uri sunt sortate
+ - Corectate niste erori la Oscilgen care faceau ca sa se calculeze randomness chiar daca este folosit de PADsynth si pus automat parametrul randomness daca PADsynth este folosit (in caz ca se va importa la un ADsynth)
+ - Gasita o eroare care face sa crape daca lucrez mult cu bancile de instrumente
+27 Aug 2004 - Adaugata posibilitatea de a dezactiva aratarea starii PADsynth din instrumente
+ - LANSAT PE INTERNET - VERSIUNEA (2.0.0)
+--------------------------------------------------------------------------------------------------
+05 Sep 2004 - Corectata o mica eroare de la SUBnote (legat de pitch wheel)
+06 Sep 2004 - Eliminata variabila "disablekitloading" din Part si din UI
+07 Sep 2004 - Modificat id-ul vst in 'zasf' (inainte era de 5 litere si poate cauza un crash la host)
+27 Sep 2004 - Corectat un mic bug la salvare in xml la parametrul FMcoarseDetune din adnote
+ - La VST, daca incerc sa inchid fereastra principala, se minimizeaza
+ - Eliminate setarile cu indice '0' (zero)
+28 Sep 2004 - Adaugata salvarea tuturor parametrilor in hostul VST (trebuie testat)
+ - Adaugat installer pt. windows (cu NSIS)
+29 Sep 2004 - Inceput sa scriu interfata utilizator pt. incepatori
+30 Sep 2004 - Terminat de scris interfata utilizator pt. incepatori si se selecteaza la pornire modul dorit
+ - Adaugata posibilitatea de a compila cu suport jack si oss simultan si sa se aleaga runtime ce doresc (jack/oss)
+01 Oct 2004 - Corectata o mica eroare care facea ca sa nu se inchida ferestrele cu instrumente cand incarc din banca
+ - LANSAT PE INTERNET - VERSIUNEA (2.1.0)
+--------------------------------------------------------------------------------------------------
+02 Oct 2004 - Corectata o eroare grava care facea ca sa nu pot schimba partul curent in interfata utilizator obisnuita
+03 Oct 2004 - LANSAT PE INTERNET - VERSIUNEA (2.1.1)
+--------------------------------------------------------------------------------------------------
+04 Oct 2004 - Corectata o eroare care face ca in modul simple UI, sa se inverseze panning-ul
+ - Adaugat un icon la ZynAddSubFX
+10 Oct 2004 - Si controllerul de Resonance se aplica la toate item-urile din kit
+12 Oct 2004 - Corectata o eroare care facea ca butoanele Addpoint si Delpoint de la Envelope sa nu fie afisate
+16 Oct 2004 - Corectata o eroare care facea ca partUI-ul sa nu se actualizeze intotdeauna cand incarcam un instrument
+20 Oct 2004 - Corectata o mica eroare asemanetoare cu cea din 16 Oct, dar care afecta meniul new
+07 Nov 2004 - Corectata o mica eroare care facea ca sa nu se incarce corect instrumentele in linia de comanda (-l)
+14 Nov 2004 - Nu mai verific in bank daca este un director sau fisier simplu, pt. ca poate sa aiba probleme
+28 Nov 2004 - Curatat codul la OscilGen (acum datele sunt stocate mai bine si nu in functie de biblioteca FFTW)
+ - Corectata o mica eroare la OscilGen cu adaptive harmonics care facea ca energia vechilor armonice sa nu se adauge in mod corect la noile armonice (la note inalte)
+ - Sortarea nu mai este quicksort la bank si la presets pt. ca am vazut ca nu merge in windows intotdeauna
+ - Corectata o eroare la egalizator care facea ca sa se aplice si la el par. D/W
+29 Nov 2004 - Marita zona de valori la adaptive harmonics power din OscilGen
+ - Adaugata posibilitate de a post-procesa la adaptive harmonics(adica a adauga sau a amplifica anumite armonice)
+05 Dec 2004 - Corectata o eroare care facea ca functiile getChunk si setChunk sa fie supraincarcate in loc de suprascrise (dar nu am testat)
+ - Corectata o eroare care returna gresit la canDo in vst (netestat)
+17 Dec 2004 - Inceput sa folosesc Dvorak pt. VK
+18 Dec 2004 - Continuat putin la VK
+20 Dec 2004 - Se poate selecta la VK dintre "qwerty" si "Dvorak"
+ - Corectata o mica erare care facea sa nu arate BWprofile dezactivat la PADnote
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+
+04 Ian 2005 - Corectata o mica eroare care facea ca sa nu arate Force Release la Freemode Envelope
+15 Ian 2005 - Corectata o eroare la controllerul bandwidth care facea ca sa ajunga la valoarea 0 si sa dea peste cap SUBsynth
+22 Ian 2005 - Inceput sa scriu suportul pt. DSSI
+27 Ian 2005 - Corectata eroare care facea ca in cazul in care sunt 2 banci cu acelasi nume (sau aceeasi bank root dir sa fie selectat de 2 ori) sa produca confuzie
+03 Feb 2005 - Inceput sa scriu la Microtonal ca sa se faca butonul apply de culoare rosie cand se schimba ceva
+06 Feb 2005 - Facuta o mica modificare care interzice punera notelor "0" in dump si alta modificare care mareste nr. de octave calculate la PADsynth
+ - Renuntat sa fac modificarea la Microtonal inceputa din 03 Feb, pentru ca nu am gasit cum pot schimba culoarea butonului automat cand modific un text
+07 Feb 2005 - Corectata o eroare care facea ca la microtonal mapping sa nu se calculeze corect (adica sa se stocheze valoarea corecta)
+12 Feb 2005 - Controllerul prestabilit la Virtual Keyboard este Filter Cutoff in loc de BandWidth
+ - Modificate cateva preseturi la DynamicFilter
+ - Adaugata posibilitatea de a mari sau micsora cu un parametru detune-ul vocilor de la ADnote
+17 Feb 2005 - Corectate cateva erori la PADsynth care faceau ca sa se citeasca date din zone de memorie nealocata
+ - Corectata o eroare la Bank care facea ca uneori sa crape programul cand umblam mult cu bankuri
+19 Feb 2005 - Corectata o eroare care facea ca uneori sa fie calculata frecventa la ADnote=nan si programul sa crape pentru ca era folosit parametrul bandwidthDetuneMultiplier inainte de a fi calculat
+21 Feb 2005 - Se afiseaza corect numele fisierului proaspat salvat in fereastra principala
+26 Feb 2005 - Corectata eroarea la windows si la OSS care facea ca pitch bend sa nu fie mapat corect (trebuie verificat)
+27 Feb 2005 - Se afiseaza corect valoarea lui detune in centi
+28 Feb 2005 - Corectata o mica eroare care facea ca sa nu se afiseze intotdeauna corect detune-ul la ADvoice
+ - Afisajul VU-meter la Master nu mai prezinta variatii mari in timp scurt
+ - Adaugata afisajul RMS la VU-meter
+06 Mar 2005 - Facute cateva mici modificari referitoare in special la warning-uri
+ - Corectata o mica eroare care facea ca la un Paste sa nu se actulizeze unii parametrii ai filtrului in interfata
+12 Mar 2005 - Imbunatatiri la interfata PADsynth, adica se poate da "apply" direct din OscilGenUI sau ResonanceUI
+13 Mar 2005 - Facute cateva compilari in Makefile pt. compilare pt. Windows (standalone exe si vst)
+ - Se compileaza in mod cross-compile pt. windows din linux
+14 Mar 2005 - Mici modificari la afisarea RMS-ului
+ - Actualizat textul copyright-ului la anul 2005
+22 Mar 2005 - Corectata o mica eroare care facea ca la schimbari foarte lente al parametrilor sa nu se actualizeze Format Filter
+25 Mar 2005 - Corectata o eroare care facea ca uneori, la anumite setari ale lui SepctrumAdjust din OscilGen sa rezulte semnal zero
+ Corectata o mica eroare care facea ca daca se foloseste setarea 440Hz la Padsynth sa se aleaga sample-ul incorect
+06 Apr 2005 - Modificat installerul pt. windows si pregatit pt. installer (folosit cross-compiling si nsis&wine)
+ - Adaugat icon in format windows (si la installer)
+ - Adaugat parametrul '-Y' la linia de comanda, care este folosit doar pentru installerul NSIS (parametrul este necesar pentru ca NSIS ma forteaza sa dau un parametru la program pentru ca sa adauge un icon la shortcut; zynaddsubfx ignora acest parametru)
+07 Apr 2005 - Pregatit pentru release
+08 Apr 2005 - Corectata o mica eroare care facea ca sa nu se incarce configul la inceput
+ - LANSAT PE INTERNET - VERSIUNEA (2.2.0)
+--------------------------------------------------------------------------------------------------
+12 Apr 2005 - Actualizat pentru MXML 2.2 (nu o sa mearga pe vers. mai vechi de mxml)
+27 Apr 2005 - Adaugata posibilitatea de a inlatura complet interfata grafica in Makefile.inc (in acest caz nu mai sunt necesare bibliotecile grafice ca fltk)
+ - Adaugata posibilitatea de a incarca direct un instrument cu -L (deocamdata se poate incarca doar in part-ul 0)
+ - LANSAT PE INTERNET - VERSIUNEA (2.2.1)
+--------------------------------------------------------------------------------------------------
+28 Apr 2005 - Corectata o eroare care facea ca uneori sa fie frecventa prea mare la LFO daca era folosit random
+ - Nu mai afiseaza optionea -A in help daca nu este compilat si OSS si JACK
+29 Mai 2005 - Corectata o eroare care facea ca sa nu se tina minte ultimul bank
+27 Aug 2005 - Corectata o eroare care facea ca sa nu mearga functia Dump (se initializa inainte de citirea configurarilor)
+21 Sep 2005 - Imbunatatit modul de scalare al profilei unei armonice la PADsynth
+27 Sep 2005 - Gasita si rezolvata o posibila problema la PADsynth care facea ca sa nu se foloseasca mutex la stergerea de sample-uri (daca se aleg mai putine sample-uri decat initial)
+09 Oct 2005 - Rezolvat un memory-leak la FFTwrapper
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+16 Apr 2006 - Corectata o eroare care facea ca sa nu se foloseasca insertion effect la master
+20 Aug 2006 - Adaugat 88200 ca rata de esantionare
+14 Sep 2006 - Se afiseaza spectrul la nota cu frecventa de 440 Hz la Oscil si pentru parametru Adaptive Harmonics
+30 Oct 2006 - Adaugat un patch "standalone zombie fix stripped from Lars"
+ - Adaugat un patch "Extended mono" si "font resizing stuff" de Gerald Folcher
+31 Oct 2006 - Adaugat un patch "Extended mono v.3" de Gerald Folcher
+ - Inlocuit fl_ask cu fl_choice in fisierele .fl
+ - In mod prestabilit nu se mai seteaza volumul la efectul 0
+ - Efectele sunt numerotare de la 1 si in la "send to" din partui
+01 Nov 2006 - Adaugat patch-urile de Jack Midi si LASH de Lars Luthman
+06 Nov 2006 - Aplicat un patch "Fix for ALSA system lockup" de Lars Luthman
+10 Nov 2006 - Aplicat un patch "zyn-extendedmono_v4_update-061110.diff.gz" de Gerald Folcher
+14 Nov 2006 - Aplicat un patch "zyn-CVS-extendedmono_v5_update-061113.diff.gz" de Gerald Folcher
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+19 Mar 2007 - Aplicat un patch mic de la Daniel Clemente care este un workaround la bug-ul X11 cand tin tastele apasate mai mult timp
+01 Apr 2007 - O mica modificare cu xclass zynaddsubfx in MasterUI.fl
+09 Sep 2007 - Schimbata licenta la GPL 2 or other later
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+02 Ian 2008 - Corectate cateva mici erori la dezalocarea memoriei
+ - Codul de recorder wav a fost rescris
+ - Adaugata functia de export la sample-urile din PADsynth
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+20 Feb 2009 (Mark McCurry)
+ - Made several functions accept 'constant char' over 'char' to
+ prevent warnings
+ - Changed several 'delete' operations to 'delete []' based upon
+ the usage of 'new []'
+ - Gave external programs Makefiles
+ - Gave dials tooltips showing their value when they are being
+ moved
+ - Gave dials the ability to have normal tooltips when the mouse
+ hovers over them
+ - Created tooltips for the effects knobs
+ - Standardized the code, so it could compile with pedantic without
+ errors [it looks like some errors may have been missed]
+
+22 Feb 2009 (Mark McCurry)
+ - Fix improper deallocation in PresetsStore
+ - Fixed errors with drawing of the Oscillator as reported with
+ valgrind
+
+07 Mar 2009 (Mark McCurry)
+ - Added start of DocBook documentation
+ - Incorperated JACK output patch by Emmanuel Saracco
+ - Incorperated QUERTZ layout by Achim Settelmeier
+
+29 Mar 2009 (Mark McCurry)
+ - Started to use Doxygen within the Effects
+ - Started to use const within Effects
+ - Changing tabs->four spaces in hopes of generating a bit more
+ consitancy
+ - Began to use Initialization Lists
+ - Almost all changes contained in Effects until further
+ discussion on the style, so consistancy can be reached
+
+28 May 2009 (Mark McCurry)
+ - Added some more Doxygen comments
+ - Added Audio Samples classes
+ - Added Stereo template
+ - Added Control class
+ - Added DelayCtl class
+
+20 Iun 2009 (Paul Nasca)
+ - Bugfix: WAV export of PADsynth
+
+10 Iul 2009 (Paul Nasca)
+ - Update copyright info
+
+11 Jul 2009 (Mark McCurry)
+ - Added Proportinal Portamento
+ - Replaced Docbook with AsciiDoc
+
+18 Jul 2009 (Mark McCurry)
+ - Enabled volume controller by default
+
+20 Jul 2009 (Mark McCurry)
+ - Incorperated AZERTY layout by sourceforge user jimee
+
+02 Sep 2009 (Mark McCurry)
+ - Incorperated const char* <-> string mismatch by Alexis Ballier
+
+04 Sep 2009 (Mark McCurry)
+ - Incorperated NULLMidiIn function prototype fix by Alexis Ballier
+
+07 Sep 2009 (Mark McCurry)
+ - Fixed glitch in XMLwrapper, which would prevent file loading
+
+11 Sep 2009 (Mark McCurry)
+ - Moved PADsynth_used from public struct to has/set methods in
+ XMLwrapper
+ - Created wrapper functions, so that XMLwrapper can be somewhat
+ usable when const
+ - Removed multiple addparam methods and replaced it with one
+ variable argument function
+ - Replaced int2str, real2str, str2int, and str2real from XMLwrapper
+ with stringTo<T> and stringFrom<T> function templates in Util.
+ - Moved newFFTFREQS and deleteFFTFREQS from Util to FFTwrapper
+ - Removed unneeded stack from XMLwrapper
+
+18 Sep 2009 (Mark McCurry)
+ - Started to use versioning information in XMLwrapper
+ - Remove last of stack helper functions in XMLwrapper
+ - Added std::string retreval to XMLwrapper
+
+20 Sep 2009 (Paul Nasca)
+ - Started to implement the Unison effect for ADsynth
+
+22 Sep 2009 (Paul Nasca)
+ - Added vibratto and other features to Unison effect
+
+22 Sep 2009 (Mark McCurry)
+ - Changed temporary data for Oscilgen from static to instance
+ recommended by Tobias Doerffel
+ - Fixed Memory leaks in UI based upon James Morris' patch
+
+23 Sep 2009 (Paul Nasca)
+ - Added unison invert phase
+ - Made unison frequency spread to depend on Bandwidth controllers and parameters
+ - Added unison vibratto speed control and other improvements
+ - bugfixes: Voice Amplitude Envelope and FM
+
+24 Sep 2009 (Paul Nasca)
+ - Small enhancements and bugfixes to Unison
+ - Started to implement Bandwidth to the Reverb effect
+
+25 Sep 2009 (Mark McCurry)
+ - Allowed for XMLwrapper to retrieve strings stored in mxml TEXT
+ fields
+29 Sep 2009 (Paul Nasca)
+ - Remove the old (FFT based) Bandwidth effect to Reverb and started rewrite it (based on multivoice chorus/unison effect)
+
+01 Oct 2009 (Paul Nasca)
+ - Corrected the ADsynth unison LFO rounding function
+ - Made Unison based on Bandwidth (in cents) parameter
+
+02 Oct 2009 (Mark McCurry)
+ - Added OSS failsafe by J�r�mie Andr�i
+
+04 Oct 2009 (Mark McCurry)
+ - fixed Ctest issues
+
+06 Oct 2009 (Mark McCurry)
+ - Added first simple profiling test
+
+08 Oct 2009 (Mark McCurry)
+ - Started to see if memset/memcpy offer performance benifits when
+ widely used
+ - Added basic SUBnote test
+
+09 Oct 2009 (Mark McCurry)
+ - Restylized codebase with uncrustify
+
+28 Oct 2009 (Paul Nasca)
+ - Disable "bw" control on Reverb when Bandwidth mode is not enabled
+
+30 Oct 2009 (Mark McCurry)
+ - Commited first stage of Nio (New IO) WIP
+
+18 Nov 2009 (Mark McCurry)
+ - Fixed segfault in VirKeyBoard
+
+02 Dec 2009 (Paul Nasca)
+ - Fixed a small typo on Virtual Keyboard
+
+10 Dec 2009 (Mark McCurry)
+ - Separated out Presets and arrayed Presets to reduce warnings from
+ the Wextra flag
+ - Minor change to Filter_ and FormantFilter to reduce unwanted warnings
+
+13 Dec 2009 (Mark McCurry)
+ - Deprecating Output system for the Nio system
+ - General Code Cleanup
+ - Adding OpenGL linking for proper compiles
+
+14 Jan 2010 (Mark McCurry)
+ - Fixed No UI Flag "-U" as it was previously partially initializing
+ the gui
+
+14 Feb 2010 (Stephen Parry)
+ - DSSI Support Repaired
+
+14 Feb 2010 (Mark McCurry)
+ - Made the Echo attempt to adjust the delay instead of erasing it
+ when length is changed
+
+02 May 2010 (Mark McCurry)
+ - Merging in cleanup from effects and adding APhaser by Ryan Billing
+
+27 Jun 2010 (Mark McCurry)
+ - Aphaser and Phaser are within same effect now
+
+17 Aug 2010 (Paul Nasca)
+ - small bugix on adsynth.cpp
+
+22 May 2010 (Mark McCurry)
+ - Mergin Nio backend
+
+18 Aug 2011 (Mark McCurry)
+ - Fixing DSSI subsystem
+
+29 Oct 2011 (Damien Goutte-Gattat)
+ - Added Bank select midi support
+
+05 Feb 2012 (Liven Moors)
+ - Added spike waveform to oscilator options
+
+06 Feb 2012 (Mark McCurry)
+ - Adding --exec-after-init option
+
+22 Feb 2012 (Liven Moors)
+ - Added circle waveform to oscilator options
+
+26 Mar 2012 (Mark McCurry)
+ - Fixed Segfault in Oscillgen
+
+27 Mar 2012 (Mark McCurry)
+ - Fixed chorus noise bug
+
+14 Apr 2012 (Mark McCurry)
+ - Removed Nio debugging code
+
+18 Apr 2012 (Jonathan Liles)
+ - Added Non-session-manager support
+
+31 Mar 2012 (Olaf Schulz)
+ - Added Midi aftertouch support
+
+Please See git log For future information
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Controller.C b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Controller.C
new file mode 100644
index 0000000..8f2e6d9
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Controller.C
@@ -0,0 +1,84 @@
+#include "Controller.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+pthread_mutex_t mutex;
+int Pexitprogram;
+
+Controller::Controller() {
+ //init
+ for(int i = 0; i < 6; ++i) {
+ pars[i].mode = 1;
+ pars[i].val1 = 0;
+ pars[i].val2 = 127;
+ pars[i].nrpn.cpar = 8;
+ pars[i].nrpn.fpar = 0;
+ pars[i].nrpn.cval = 0;
+ }
+ pars[0].ctl.par = 71;
+ pars[1].ctl.par = 74;
+ pars[2].ctl.par = 10;
+ pars[3].ctl.par = 11;
+ pars[4].ctl.par = 1;
+ pars[5].ctl.par = 75;
+
+ //ALSA init
+ snd_seq_open(&midi_out, "default", SND_SEQ_OPEN_OUTPUT, 0);
+
+ char portname[50]; sprintf(portname, "Controller");
+ int alsaport = snd_seq_create_simple_port(
+ midi_out,
+ portname,
+ SND_SEQ_PORT_CAP_READ
+ | SND_SEQ_PORT_CAP_SUBS_READ,
+ SND_SEQ_PORT_TYPE_SYNTH);
+}
+
+Controller::~Controller() {
+ snd_seq_close(midi_out);
+}
+
+void Controller::sendcontroller(int par, unsigned char val) {
+ snd_seq_event_t midievent;
+ snd_seq_ev_clear(&midievent);
+
+ snd_seq_ev_set_controller(&midievent, Pchout, par, val);
+
+ snd_seq_ev_set_subs(&midievent);
+ snd_seq_ev_set_direct(&midievent);
+ snd_seq_event_output_direct(midi_out, &midievent);
+
+// fprintf(stderr,"Controller: %d %d\n",par,val);
+}
+
+void Controller::sendnrpn(int npar, unsigned char val) {
+// fprintf(stderr,"NRPN: %d %d %d %d\n",pars[npar].nrpn.cpar,pars[npar].nrpn.fpar,pars[npar].nrpn.cval,val);
+
+ sendcontroller(0x63, pars[npar].nrpn.cpar);
+ sendcontroller(0x62, pars[npar].nrpn.fpar);
+ sendcontroller(0x06, pars[npar].nrpn.cval);
+ sendcontroller(0x26, val);
+// fprintf(stderr,"------------\n\n");
+}
+
+void Controller::send(int npar, float xval) {
+ if(pars[npar].mode == 0)
+ return;
+ int val;
+ if(pars[npar].val1 <= pars[npar].val2)
+ val =
+ (int) (xval
+ * (pars[npar].val2 - pars[npar].val1
+ + 1.0) * 0.9999 + pars[npar].val1);
+ else
+ val =
+ (int) (xval
+ * (pars[npar].val2 - pars[npar].val1
+ - 1.0) * 0.9999 + pars[npar].val1 + 1.0);
+ switch(pars[npar].mode) {
+ case 1: sendcontroller(pars[npar].ctl.par, val); break;
+ //case 2:break;
+ case 3: sendnrpn(npar, val); break;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Controller.h b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Controller.h
new file mode 100644
index 0000000..5b83744
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/Controller.h
@@ -0,0 +1,33 @@
+#ifndef CONTROLLER_H
+#define CONTROLLER_H
+#include <alsa/asoundlib.h>
+
+extern pthread_mutex_t mutex;
+extern int Pexitprogram;
+
+class Controller
+{
+ public:
+ Controller();
+ ~Controller();
+ void send(int npar, float xval);
+ //parameters
+ unsigned char Pchout;
+ struct {
+ unsigned char mode; //0=off,1=ctl,2=RPN,3=NRPN
+ unsigned char val1, val2;
+ struct {
+ unsigned char par;
+ } ctl;
+ struct {
+ unsigned char cpar, fpar, cval;
+ } nrpn;
+ } pars[6];
+ private:
+ void sendcontroller(int par, unsigned char val);
+ void sendnrpn(int npar, unsigned char val);
+
+ snd_seq_t *midi_out;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/ControllerUI.fl b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/ControllerUI.fl
new file mode 100644
index 0000000..b83c9c0
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/ControllerUI.fl
@@ -0,0 +1,217 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cxx}
+decl {\#include <FL/Fl_Box.H>} {selected public
+}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include "Controller.h"} {public
+}
+
+decl {Controller *controller;} {}
+
+class Pad {: {public Fl_Box}
+} {
+ Function {Pad(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {} {}
+ }
+ Function {temp_draw()} {} {
+ code {/*int ox=x(),oy=y(),lx=w(),ly=h(),i,ix,iy,oiy;
+float freqx;
+
+fl_color(FL_BLACK);
+fl_rectf(ox,oy,lx,ly);
+
+
+
+fl_color(FL_GRAY);
+
+fl_line_style(FL_SOLID);
+fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
+*/} {}
+ }
+ Function {sendmidi(int button,float datax,float datay)} {} {
+ code {controller->send(button,datax);
+controller->send(button+1,datay);} {}
+ }
+ Function {handle(int event)} {return_type int
+ } {
+ code {int x_=Fl::event_x()-x();
+int y_=Fl::event_y()-y();
+
+if ((event==FL_PUSH)||(event==FL_DRAG)){
+ if (x_<0) x_=0;if (y_<0) y_=0;
+ if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1;
+
+ float tmpx=(float) x_/(w());
+ float tmpy=1.0-(float) y_/h();
+
+ int b=Fl::event_buttons()>>24;
+
+ if (b&1) sendmidi(0,tmpx,tmpy);
+ if (b&2) sendmidi(2,tmpx,tmpy);
+ if (b&4) sendmidi(4,tmpx,tmpy);
+
+};
+
+return(1);} {}
+ }
+ decl {int oldx,oldy;} {}
+}
+
+class ControllerUI {} {
+ Function {make_window()} {} {
+ Fl_Window controlleruiwindow {
+ label {Midi Controller}
+ callback {o->hide();
+exit(0);}
+ xywh {210 213 340 410} type Double hide
+ } {
+ Fl_Counter {} {
+ label {Output Channel}
+ callback {controller->Pchout=(int) o->value();}
+ xywh {10 13 75 22} type Simple labelsize 10 align 5 minimum 0 maximum 15 step 1 textfont 1
+ code0 {o->value(controller->Pchout);}
+ }
+ Fl_Box {} {
+ xywh {10 80 320 320} box ENGRAVED_BOX color 176
+ class Pad
+ }
+ Fl_Choice {} {
+ callback {nbut=(int) o->value();
+refreshvalues();}
+ xywh {10 50 75 20} down_box BORDER_BOX
+ } {
+ MenuItem {} {
+ label {But.1 X}
+ xywh {0 0 100 20} labelfont 1 labelsize 12
+ }
+ MenuItem {} {
+ label {But.1 Y}
+ xywh {10 10 100 20} labelfont 1 labelsize 12 divider
+ }
+ MenuItem {} {
+ label {But.2 X}
+ xywh {10 10 100 20} labelfont 1 labelsize 12
+ }
+ MenuItem {} {
+ label {But.2 Y}
+ xywh {20 20 100 20} labelfont 1 labelsize 12 divider
+ }
+ MenuItem {} {
+ label {But.3 X}
+ xywh {20 20 100 20} labelfont 1 labelsize 12
+ }
+ MenuItem {} {
+ label {But.3 Y}
+ xywh {30 30 100 20} labelfont 1 labelsize 12
+ }
+ }
+ Fl_Group ctlgroup {
+ xywh {95 35 60 40} box ENGRAVED_BOX
+ } {
+ Fl_Counter ctlcounter {
+ label Controller
+ callback {controller->pars[nbut].ctl.par=(int) o->value();}
+ xywh {100 50 50 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textfont 1 textsize 12
+ }
+ }
+ Fl_Choice modechoice {
+ label Mode
+ callback {controller->pars[nbut].mode=(int) o->value();
+refreshvalues();}
+ xywh {95 13 60 20} down_box BORDER_BOX labelsize 10 align 5
+ } {
+ MenuItem {} {
+ label OFF
+ xywh {30 30 100 20} labelfont 1 labelsize 12
+ }
+ MenuItem {} {
+ label {Ctl.}
+ xywh {20 20 100 20} labelfont 1 labelsize 12
+ }
+ MenuItem {} {
+ label RPN
+ xywh {30 30 100 20} labelfont 1 labelsize 12 deactivate
+ }
+ MenuItem {} {
+ label NRPN
+ xywh {40 40 100 20} labelfont 1 labelsize 12
+ }
+ }
+ Fl_Group nrpngroup {
+ xywh {160 35 170 40} box ENGRAVED_BOX
+ } {
+ Fl_Counter cparcounter {
+ label {CoarseP.}
+ callback {controller->pars[nbut].nrpn.cpar=(int) o->value();}
+ xywh {165 50 50 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textfont 1 textsize 12
+ }
+ Fl_Counter fparcounter {
+ label {FineP.}
+ callback {controller->pars[nbut].nrpn.fpar=(int) o->value();}
+ xywh {220 50 50 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textfont 1 textsize 12
+ }
+ Fl_Counter cvalcounter {
+ label {CoarseV.}
+ callback {controller->pars[nbut].nrpn.cval=(int) o->value();}
+ xywh {275 50 50 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textfont 1 textsize 12
+ }
+ }
+ Fl_Counter val1counter {
+ label {Val.1}
+ callback {controller->pars[nbut].val1=(int) o->value();}
+ xywh {190 15 50 15} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 textfont 1 textsize 12
+ }
+ Fl_Counter val2counter {
+ label {Val.2}
+ callback {controller->pars[nbut].val2=(int) o->value();}
+ xywh {275 15 50 15} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 value 127 textfont 1 textsize 12
+ }
+ Fl_Button exchangebutton {
+ label {<->}
+ callback {unsigned char tmp=controller->pars[nbut].val2;
+controller->pars[nbut].val2=controller->pars[nbut].val1;
+controller->pars[nbut].val1=tmp;
+refreshvalues();}
+ xywh {245 15 25 15} box THIN_UP_BOX
+ }
+ }
+ }
+ Function {refreshvalues()} {} {
+ code {modechoice->value(controller->pars[nbut].mode);
+val1counter->value(controller->pars[nbut].val1);
+val2counter->value(controller->pars[nbut].val2);
+ctlcounter->value(controller->pars[nbut].ctl.par);
+cparcounter->value(controller->pars[nbut].nrpn.cpar);
+fparcounter->value(controller->pars[nbut].nrpn.fpar);
+cvalcounter->value(controller->pars[nbut].nrpn.cval);
+
+if (controller->pars[nbut].mode!=0){
+ val1counter->activate();
+ val2counter->activate();
+ exchangebutton->activate();
+}else{
+ val1counter->deactivate();
+ val2counter->deactivate();
+ exchangebutton->deactivate();
+};
+
+if (controller->pars[nbut].mode==1) ctlgroup->activate();
+ else ctlgroup->deactivate();
+
+if (controller->pars[nbut].mode==3) nrpngroup->activate();
+ else nrpngroup->deactivate();} {}
+ }
+ Function {ControllerUI(Controller *controller_)} {} {
+ code {nbut=0;
+controller=controller_;
+make_window();
+refreshvalues();
+controlleruiwindow->show();} {}
+ }
+ decl {int nbut;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/main.C b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/main.C
new file mode 100644
index 0000000..6018dc7
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Controller/main.C
@@ -0,0 +1,16 @@
+#include "Controller.h"
+#include "ControllerUI.h"
+
+pthread_t thr1, thr2;
+Controller controller;
+
+
+
+main()
+{
+ ControllerUI *controllerUI = new ControllerUI(&controller);
+
+ Fl::run();
+
+ delete controllerUI;
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Spliter.C b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Spliter.C
new file mode 100644
index 0000000..bf567ff
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Spliter.C
@@ -0,0 +1,82 @@
+//Copyright (c) 2002-2003 Nasca Octavian Paul
+//License: GNU GPL 2
+
+#include "Spliter.h"
+#include <stdio.h>
+
+pthread_mutex_t mutex;
+int Pexitprogram;
+
+Spliter::Spliter() {
+ //init
+ Psplitpoint = 60;
+ Pchin = 0;
+ Pchout1 = 0;
+ Pchout2 = 1;
+ Poct1 = 0;
+ Poct2 = 0;
+ //ALSA init
+ snd_seq_open(&midi_in, "default", SND_SEQ_OPEN_INPUT, 0);
+ snd_seq_open(&midi_out, "default", SND_SEQ_OPEN_OUTPUT, 0);
+
+ char portname[50]; sprintf(portname, "Spliter IN");
+ int alsaport = snd_seq_create_simple_port(
+ midi_in,
+ portname,
+ SND_SEQ_PORT_CAP_WRITE
+ | SND_SEQ_PORT_CAP_SUBS_WRITE,
+ SND_SEQ_PORT_TYPE_SYNTH);
+ sprintf(portname, "Spliter OUT");
+ alsaport = snd_seq_create_simple_port(
+ midi_out,
+ portname,
+ SND_SEQ_PORT_CAP_READ
+ | SND_SEQ_PORT_CAP_SUBS_READ,
+ SND_SEQ_PORT_TYPE_SYNTH);
+}
+
+Spliter::~Spliter() {
+ snd_seq_close(midi_in);
+ snd_seq_close(midi_out);
+}
+
+// This splits the Midi events from one channel to another two channels
+void Spliter::midievents() {
+ snd_seq_event_t *midievent;
+ midievent = NULL;
+ snd_seq_event_input(midi_in, &midievent);
+
+ if(midievent == NULL)
+ return;
+ if((midievent->type == SND_SEQ_EVENT_NOTEON)
+ || (midievent->type == SND_SEQ_EVENT_NOTEOFF)) {
+ int cmdchan = midievent->data.note.channel;
+ if(cmdchan == Pchin) {
+ snd_seq_ev_set_subs(midievent);
+ snd_seq_ev_set_direct(midievent);
+ if(midievent->data.note.note < Psplitpoint) {
+ midievent->data.note.channel = Pchout1;
+ int tmp = midievent->data.note.note;
+ tmp += Poct1 * 12; if(tmp > 127)
+ tmp = 127; if(tmp < 0)
+ tmp = 0;
+ midievent->data.note.note = tmp;
+ }
+ else {
+ midievent->data.note.channel = Pchout2;
+ int tmp = midievent->data.note.note;
+ tmp += Poct2 * 12; if(tmp > 127)
+ tmp = 127; if(tmp < 0)
+ tmp = 0;
+ midievent->data.note.note = tmp;
+ }
+ snd_seq_event_output_direct(midi_out, midievent);
+ }
+ else {
+ snd_seq_ev_set_subs(midievent);
+ snd_seq_ev_set_direct(midievent);
+ snd_seq_event_output_direct(midi_out, midievent);
+ }
+ }
+ snd_seq_free_event(midievent);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Spliter.h b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Spliter.h
new file mode 100644
index 0000000..9b5b83b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/Spliter.h
@@ -0,0 +1,27 @@
+//Copyright (c) 2002-2003 Nasca Octavian Paul
+//License: GNU GPL 2
+
+#ifndef SPLITER_H
+#define SPLITER_H
+#include <pthread.h>
+#include <alsa/asoundlib.h>
+
+extern pthread_mutex_t mutex;
+extern int Pexitprogram;
+
+class Spliter
+{
+ public:
+ Spliter();
+ ~Spliter();
+ void midievents();
+
+ //parameters
+ unsigned char Psplitpoint;
+ unsigned char Pchin, Pchout1, Pchout2;
+ signed char Poct1, Poct2;
+ private:
+ snd_seq_t *midi_in, *midi_out;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/SpliterUI.fl b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/SpliterUI.fl
new file mode 100644
index 0000000..7a8b448
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/SpliterUI.fl
@@ -0,0 +1,70 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0102
+header_name {.h}
+code_name {.cxx}
+decl {//Copyright (c) 2002-2003 Nasca Octavian Paul} {selected
+}
+
+decl {//License: GNU GPL 2} {}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include "Spliter.h"} {public
+}
+
+class SpliterUI {} {
+ Function {make_window()} {open
+ } {
+ Fl_Window spliteruiwindow {
+ label {Midi Spliter}
+ callback {o->hide();
+exit(0);}
+ xywh {225 187 375 72} hide
+ } {
+ Fl_Counter {} {
+ label {Split note}
+ callback {spliter->Psplitpoint=(int) o->value();}
+ xywh {93 27 114 24} labelsize 12 align 5 minimum 0 maximum 127 step 1 value 60 textfont 1 textsize 16
+ code0 {o->value(spliter->Psplitpoint);}
+ code1 {o->lstep(12);}
+ }
+ Fl_Counter {} {
+ label {Input Channel}
+ callback {spliter->Pchin=(int) o->value();}
+ xywh {6 30 69 18} type Simple labelsize 10 align 5 minimum 0 maximum 15 step 1 textfont 1
+ code0 {o->value(spliter->Pchin);}
+ }
+ Fl_Counter {} {
+ label {Output Channel 1}
+ callback {spliter->Pchout1=(int) o->value();}
+ xywh {285 18 69 18} type Simple labelsize 10 align 5 minimum 0 maximum 15 step 1 textfont 1
+ code0 {o->value(spliter->Pchout1);}
+ }
+ Fl_Counter {} {
+ label {Output Channel 2}
+ callback {spliter->Pchout2=(int) o->value();}
+ xywh {285 36 69 18} type Simple labelsize 10 align 6 minimum 0 maximum 15 step 1 textfont 1
+ code0 {o->value(spliter->Pchout2);}
+ }
+ Fl_Counter {} {
+ label {Tr.1(oct.)}
+ callback {spliter->Poct1=(int) o->value();}
+ tooltip {Transpose (octaves)} xywh {225 18 48 18} type Simple labelsize 10 align 5 minimum -8 maximum 8 step 1 textfont 1
+ code0 {o->value(spliter->Poct1);}
+ }
+ Fl_Counter {} {
+ label {Tr.2(oct.)}
+ callback {spliter->Poct2=(int) o->value();}
+ tooltip {Transpose (octaves)} xywh {225 36 48 18} type Simple labelsize 10 align 6 minimum -8 maximum 8 step 1 textfont 1
+ code0 {o->value(spliter->Poct2);}
+ }
+ }
+ }
+ Function {SpliterUI(Spliter *spliter_)} {} {
+ code {spliter=spliter_;
+make_window();
+spliteruiwindow->show();} {}
+ }
+ decl {Spliter *spliter;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/main.C b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/main.C
new file mode 100644
index 0000000..464f8bd
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/main.C
@@ -0,0 +1,37 @@
+//Copyright (c) 2002-2003 Nasca Octavian Paul
+//License: GNU GPL 2
+
+#include <pthread.h>
+#include "Spliter.h"
+#include "SpliterUI.h"
+
+pthread_t thr1, thr2;
+Spliter spliter;
+
+void *thread1(void *arg) {
+ Fl::run();
+ return 0;
+}
+void *thread2(void *arg) {
+ while(Pexitprogram == 0)
+ spliter.midievents();
+ return 0;
+}
+
+
+main()
+{
+ Pexitprogram = 0;
+ SpliterUI *spliterUI = new SpliterUI(&spliter);
+
+ pthread_mutex_init(&mutex, NULL);
+ pthread_create(&thr1, NULL, thread1, NULL);
+ pthread_create(&thr2, NULL, thread2, NULL);
+
+ while(Pexitprogram == 0) {
+ usleep(100000);
+ }
+
+ pthread_mutex_destroy(&mutex);
+ delete spliterUI;
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/readme.txt b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/readme.txt
new file mode 100644
index 0000000..10a78cc
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/Spliter/readme.txt
@@ -0,0 +1,15 @@
+Spliter
+------
+
+This program splits the keyboard and alows you to play two instruments same time. You can use this program with ZynAddSubFX or any other synthesizer.
+This requires ALSA 0.9.x.
+
+To compile it, run "make".
+If you want to use with ZynAddSubFX send the midi events thru Spliter with aconnect like this:
+
+ - connect the keyboard port to "Spliter IN" port
+ - connect the "Spliter OUT" to ZynAddSubFX
+ - change the midi channels that you want to play. Be sure that the both output channels are enabled and receive NoteOn in ZynAddSubFX.
+
+If you change some settings from Spliter while you are playing to keyboard you may ecounter "stucked keys". To clear all theese press to "Panic" button from ZynAddSubFX.
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/readme.txt b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/readme.txt
new file mode 100644
index 0000000..965bad3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/ExternalPrograms/readme.txt
@@ -0,0 +1,2 @@
+These are external programs, which can use with ZynAddSubFX or any other midi device. More information is in the documentation (html - webpages).
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/FAQ.txt b/plugins/zynaddsubfx/zynaddsubfx/FAQ.txt
new file mode 100644
index 0000000..c774ef3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/FAQ.txt
@@ -0,0 +1,27 @@
+ Frequently Asked Questions
+ --------------------------
+
+Q1) What means "ZynAddSubFX" ?
+A1) The name of the program comes from 4 words:
+ 1) Synthesizer ('S'->'Z') --> Zyn
+ ^^^
+ 2) Additive Synthesis ------> Add
+ ^^^
+ 3) Subtractive Synthesis ---> Sub
+ ^^^
+ 4) Effects ----------------> FX
+
+ So, ZynAddSubFX is a SYNthesizer with ADDitive, SUBtractive engines and effects.
+
+
+Q2) How can I load files from older versions of ZynAddSubFX (like *.mas_zyn,etc)
+A2) You need to convert them into new format. Please use 2.0.0pre1 or (recommended) 2.0.0pre2 versions of ZynAddSubFX to load old file formants and save them in the new formats
+
+
+Q3) How can I change the number of parts, voices to ADSynth, effects, etc. ?
+A3) Look in src/globals.h and change there these values. You don't have to change anything else, just recompile all. But most settings must be below 128. As the rule of the thumb if a setting is 128 or below 128, please don't make it bigger than 128. Anyway, I don't believe that you'll need more than 128 for these settings; for example you don't need 128(or more) effects same time? That's why I put the limit of 128 (using 7 bits of char).
+
+
+Q4) How do I enable Jack support on ZynAddSubFX ?
+A4) If your system has the jack libraries installed, ZynAddSubFX should automatically build with jack support. It is highly recommended that the Jack samplerate to be equal to ZynAddSubFX samplerate (SAMPLE_RATE from globals.h), otherwise the resampling will be done and this will decrease the quality a bit.
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt b/plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt
new file mode 100644
index 0000000..2631914
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/HISTORY.txt
@@ -0,0 +1,239 @@
+2.4.4 (28 Jun 2014)
+ - Add UI Mousewheel Support
+ - Add Spectral Adjust Parameter Rescaling
+ - Add Subnote filter smoothing
+ - Add Unison derandomization options
+ - Add NSM import/export
+ - Add NTK UI compatiability
+ - (re)Add OSX Support
+ - Enhance performance of ADnote and SUBnote
+ - Enhance Installer
+ - Fix JACK2 specific segfault
+ - Fix possible DSSI specific segfaults
+ - Fix Unison Regressions
+ - Documentation additions
+ - Misc bug fixes
+
+
+2.4.3 (15 Jun 2012)
+ - Non-session manager support
+ - Midi aftertouch support
+ - Documentation additions
+ - Somewhat more sane Nio defaults
+ - Misc bug fixes
+
+2.4.2 (26 Feb 2012)
+ - New IO backend support
+ - MIDI bank select
+ - Spike/Circle waveform
+ - Faster subsynth
+ - --exec-after-init flag
+ - Version information compiled in
+ - Misc Bug fixes
+
+2.4.1 (27 Jun 2010)
+ - Azerty layout
+ - XML bug fixes
+ - Vibrato/Unison additions
+ - Reverb rewrite
+ - DSSI support enabled
+ - Adding APhaser
+ - other bugfixes
+ - code cleanup
+
+2.4.0 (21 Jun 2009)
+ - extended mono functionality
+ - legato mode
+ - export functionality on PADsynth
+ - inclusion of LASH client
+ - inclusion of DSSI audio output
+ - enabled tooltips for knobs (both description and value tooltips)
+ - added support for newer JACK api
+ - added quertz support for virtual keyboard
+ - started to encorperate cxxtest for unit testing
+ - many bugfixes
+ - code cleanup
+
+2.2.1 (28 Apr 2005)
+ - made to work with mxml-2.2 (will NOT work on older versions)
+ - it is possible to remove completely the graphical user interface (e.g. it can run without X). For this you need to modify the DISABLE_GUI option from the Makefile.inc
+ - added a commandline -L which load a instrument (.xiz) - now it only loads to part 0 (you can use this option with -l to load a master file and after this the option -L to replace the part)
+
+2.2.0 (8 Apr 2005)
+ - the VST version of ZynAddSubFX is removed from the instalation until it will be more stable (hope soon :) )
+ - now, the instrument banks contains over 300 high quality instruments
+ - added "Apply" a button from OscilGen window for PADsynth
+ - added another parameter to ADsynth that controls the amount of all detunes of voices
+ - adaptive harmonics postprocess
+ - improved the VU-meter and added a RMS plot
+ - Dvorak support for Virtual Keyboard
+ - many bugs fixed and code cleanups
+
+2.1.1 (2 Oct 2004)
+ - Removed a big bug that prevented changing the part
+2.1.0 (1 Oct 2004)
+ - Added a installer for windows (thanks to NSIS installer ( http://nsis.sourceforge.net/ ) ). Both VST and standalone vesions are contained in the same installer.
+ - Added a new user interface for beginners. You can switch the current user interface with that anytime do you want.
+ - All parts, effects, etc. are counted from '1' and not from '0'
+ - Added the posibility to compile the OSS and JACK support in the same binary (look in the Makefile.inc)
+ - VST host should be able to save all zynaddsubfx parameters into their setups (this is untested)
+ - Bugfixes and other
+
+2.0.0 (27 Aug 2004)
+ - VST version works (there are some issues/bugs but it works)
+ - Added a advanced Clipboard and Preset module - now is possible to add user preset LFOs,Envelopes, Effects, Oscillators, Resonances, Filters, etc.
+ - Completely removed the *.MAS_ZYN formats (masters, instruments,etc) support; use 2.0.0pre1 and 2.0.0pre2 to convert
+ - Corrected a error to pitch bend on VST plugin (thanks to Krzysztof Korpiela)
+ - Impoved the PADsynth module
+ - Because the PADsynth module takes a time to load, the instrument that contains such modules are shown in different colors
+ - Bugfixes
+ - Other
+
+2.0.0_pre2 (31 Iul 2004)
+ - Updated the XMLwrapper to mxml-2.0
+ - Many bugfixes
+ - Other
+
+2.0.0_pre1 (17 Iul 2004)
+ - Added a new powerful synth engine which is called PADsynth, you can make very beautifull pads and even some strange sounds
+ - Now is used the XML format for all zynaddsubfx parameters(.XMZ for master parameters, .XIZ for instrument parameters and .XSZ for scale parameters).You can import older parameters. All parameters files are compressed with gzip algorithm.
+ - Some parameters has changed and you might ecounter different sounds that you saved in the older versions of zynaddsubfx
+ - The instrument banks are no longer single files, but directories that contains instrument .XIZ files (you can organize them even with a file manager). Also, you can use more than 1 banks easily.
+ - Added a new effect called DynamicFilter that allows you to do WahWah,AutoWah, VocalMorpher and other effects
+ - Speedups
+ - Started to write a small sequencer that allows to load and play a midi file from zynaddsubfx (unfinished)
+ - ZynAddSubFX is available from CVS, too. Please look at the sourceforge project page to get more information ( http://sourceforge.net/projects/zynaddsubfx )
+ - The waveform generator (OscilGen) has many new parameters :) also if you press the "Shift" key, you can draw the hamonics amplitude/phases
+ - Many user interface improvements
+ - You can load a file at the start of the program with "-l" command-line parameter and you can run zynaddsubfx w/o user interface with "-U"
+ - It is possible to dump all MIDI notes into a text file
+ - The instruments can contain comments and copyright information in order to encourage sharing of them
+ - FFT3W library is supported
+ - More "randomness" options
+ - Other impovements
+ - Many, many bugfixes
+ - Added the full changelog (since I started to write zynaddsubfx), most is in Romanian
+ - Other things
+
+1.4.3 (31 Aug 2003)
+ - added state variable filters and other types to analog filters
+ - small user interface improvememnts
+ - small bugfixes
+
+1.4.2 (17 Iul 2003)
+ - added full-featured, advanced formantic filters
+ - added mixer panel which lets you to see/change most important part settings, and shows a vu-meters for each part
+ - you can choose to process the instrument's kit items only with one Part effect (eg. you can make a instrument kit that contains a reverberated piano and flanged strings)
+ - enabled to launch more instances in Jack
+ - when is launched first time, it searches for default.bnk_zyn file into /usr/share/zynaddsubfx and /usr/local/share/zynaddsubfx directories (useful for binary packages for Linux distributions)
+ - bugfixes
+
+1.4.1 (8 May 2003)
+ - added single mode to the instrument kit who alows only one item to be played same time
+ - added "Spectrum Adjust" to the ADsynth oscillator
+ - added "drum mode" to the instrument, where all midi keys are mapped to 12tET
+ - added a parameter to the "440Hz" which make the freq to varies a bit according to the key pressed (very usefull to toms and other drums)
+ - (for OSS audio out) if it is launched with root privileges, the synth will gain realtime scheduling priority
+ - bugfixes
+
+1.4.0 (15 Apr 2003)
+ - added instrument's own effect (effects that are loaded/saved with the instrument)
+ - FreeMode Envelopes: all Envelopes can have any shape (not only ADSR)
+ - Added instrument kits: It is possible to use more than one instruments into one part (used for layered synths or drum kits)
+ - Amplitude envelopes can be linear or logarithmic
+ - added interpolation on the Resonance user interface
+ - user interface improvements and cleanups of it's code
+ - initiated a mailing list to allow users to share patches for ZynAddSubFX. Please share your ZynAddSubFX patches; look at http://lists.sourceforge.net/mailman/listinfo/zynaddsubfx-user for more information about the mailing list.
+
+1.2.1 (6 Apr 2003)
+ - improved filter interpolation
+ - bugfix: wav header is written correctly
+ - bugfix: NRPN works correctly (eg:the controller was 0x98 instead of 98), now you can controll all effects parametrer realtime via MIDI
+ - bugfix: pitch bend works OK in windows
+ - added master fine detune (-64..63 cents)
+ - it is possible to swap effects or copy them
+ - started to port ZynAddSubFX to VST (not functional, yet)
+ - the resonace can protect the fundamental freq. against damping
+
+1.2.0 (21 Mar 2003)
+ - ZynAddSubFX is ported to Windows ;-)
+ - added internal Virtual Keyboard
+ - added Configuration window
+ - added frequency tracking to filter
+ - improved the OscilGen (harmonic filter, RMS normalisation, etc..)
+ - improved the recorder (uses the WAV file format and it starts only when a key is pressed)
+ - added filter interpolation if the frequency is changed very fast (it removes some annoying clicks)
+ - other improovements, bugfixes, speedups and cleanups of the code
+
+1.0.9 (24 Feb 2003)
+ - added keylimit to Part
+ - you can use multiple filter stages in order to make very steep filter rolloffs (eg. 48 dB/octave)
+ - ADsynth - added noise mode and you can make fixed frequencies; added the "Punch" parameter
+ - added an external program "Controller" which enables you to use the mouse for MIDI controllers
+ - other improvements and bugfixes
+
+1.0.8 (14 Feb 2003)
+ - added mono mode and portamento
+ - added the EQ effect
+ - the output of a system effect can be sent to others system effects
+ - minor bugfixes and improvements
+
+1.0.7 (7 Feb 2003)
+ - some settings (like samplerate) are set at runtime (by comand line)
+ - added Distorsion effect
+ - added controllers, and NRPNs for changing all effects parameters by midi
+ - bugs removed and other improvements
+
+1.0.6 (30 Jan 2003)
+ - Added JACK output ;-)
+ - Minor improvements and bugfixes
+
+1.0.5 (24 Jan 2003)
+ - The bug that crashed ZynAddSubFX if you change some effect parameters, it is realy removed (I forgot to update the file before upload)
+ - Other bugfixes and code cleanups
+ - Added a Global Filter to SubSynth
+ - Added keyresponse limits to Part
+ - Added presets to Effects
+ - The fade is smaller on high frequecy content and larger on low frequecies; so you'll don't hear starting clicks on basses and audible fadeins on higher pitched sounds
+ - Added tunnings to Reverb: you can choose Random of Freeverb
+
+1.0.4 (7 Jan 2003)
+ - It is possible to load Scala (.scl and .kbm) files
+ - Added mapping from note number to scale degree is possible to load Scala kbm files
+ - Corrected small bugs related to Microtonal
+ - If you want to use ZynAddSubFX with OSS (or you don't have ALSA) you can modify the Makefile.inc file to compile with OSS only.
+ - It is shown the real detune (in cents)
+ - Made a new widget that replaces the Dial widget
+ - Removed a bug that crashed ZynAddSubFX if you change some effect parameters
+
+1.0.3 (23 Dec 2002)
+ - small bugfixes: "Bypass Global Filter" from ADnoteUI dissapears sometimes ;
+ removed the low amplitude noise produced by the reverb;
+ if you "acconect" zynaddsubfx with aseqview no note was processed a long time.
+ - added Notch Filter
+ - added the option to randomize the ressonance function
+ - added VU-Meter
+ - Change the Insertion effect modes behaves (it sounds a bit louder)
+ - Added to the project an external program called Spliter that splits the
+ keyboard and alows you to play two instruments same time. You can use this
+ program with ZynAddSubFX or any other synthesizer.
+ - Added a new function to OscilGen
+
+1.0.2-1 (13 Dec 2002)
+ - bug found and removed: sometimes when Master/Instrument is saved, the synth crashed
+
+1.0.2 (13 Dec 2002)
+ - Added instrument banks
+ - the BandPass Filter's output amplitude was increased
+ - few fixes of FFTwrapper. See the documentation from "FFTwrapper.h" if you got error messages.
+
+1.0.1 (6 Dec 2002)
+ - corrected a bug that made ZynAddSubFX to crash(sometimes) if you disable a part
+ - wrote Resonance
+ - added the BandPass filter
+ - added the recording feature
+ - added "New instrument" menuitem
+
+1.0.0 (25 Sep 2002)
+ - first release, done a lot before it :-)
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/README.txt b/plugins/zynaddsubfx/zynaddsubfx/README.txt
new file mode 100644
index 0000000..76b56c6
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/README.txt
@@ -0,0 +1,86 @@
+ZynAddSubFX
+-----------
+It is a realtime software synthesizer for Linux and Windows with many features. Please see the docs for details.
+Copyright (c) 2002-2014 Nasca Octavian Paul and others contributors
+e-mail: zynaddsubfx AT yahoo D0T com
+ZynAddSubFX is free program and is distributed WITH NO WARRANTY. It is licensed under GNU General Public License version 2 (and only version 2) - see the file COPYING.
+
+ --==## PLEASE SHARE YOUR INSTRUMENTS/MASTER SETTINGS ##==--
+ --==## MADE WITH ZynAddSubFX ##==--
+ Here is the mailing list where you can share your patches with others:
+ http://lists.sourceforge.net/mailman/listinfo/zynaddsubfx-user
+
+
+The project page is
+ http://sourceforge.net/projects/zynaddsubfx
+ or
+ http://zynaddsubfx.sourceforge.net
+
+ZynAddSubFX is also available on many Internet sites like:
+ http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html (Planet CCRMA)
+ http://www.hitsquad.com/smm/programs/ZynAddSubFX/
+ http://freshmeat.net/projects/zynaddsubfx/
+ http://ibiblio.org/pub/Linux/apps/sound/midi/
+ or search "ZynAddSubFX" on a search engine (like www.google.com).
+
+
+Requirements:
+-------------
+- a fast computer
+- Linux or Windows
+- FFTW 3.x.x - necessary for Fast Fourier computations
+- MXML-2.5 or more recent library from www.minixml.org
+- zlib library from http://www.zlib.org
+- (for Linux) OpenSoundSystem (OSS) (if you don't have ALSA, only)
+- (for Windows) pthreads, portaudio
+
+Not required, but recommended:
+------------------------------
+- FLTK 1.x.x (tested with fltk 1.1.0, 1.1.1, 1.1.2,etc.)
+- ALSA 0.9.x or later (with OSS emulation, if you don't use JACK)
+- JACK
+- a VST host for the VST version [For more information see:
+ http://www.kvraudio.com/forum/viewtopic.php?t=268277&sid=95be0b6c9909300d566006428bcbb97d]
+
+Compilation:
+------------
+ For the main program see doc/build.txt.
+ To compile the Spliter, run "make" from the "Spliter" directory.
+ To compile the Controller, run "make" from the "Controller" directory.
+
+Running on LINUX
+----------------
+Under linux there are several options for both audio output and MIDI input.
+Defaults are set at compile time and the desired backend can be set when starting ZynAddSubFX with the '-I' and '-O' options.
+The currently supported backends are:
+
+- Audio Output
+ * ALSA (Advanced Linux Sound Architecture)
+ * OSS (Open Sound System)
+ * JACK (JACK Audio Connection Kit)
+ * Port Audio
+
+- MIDI Input
+ * ALSA
+ * OSS
+ * JACK
+
+Running on WINDOWS
+------------------
+NOTE: At this time only older versions of ZynAddSubFX were compiled on windows
+ See older versions on sf.net (ie version 2.2.1)
+ If you launch zynaddsubfx.exe and nothing happens, you need pthreadGC.dll in the same directory (or windows directory). The dll files are distribuited with ZynAddSubFX windows binaries.
+ It might be possible that the latency will be very high. If this happens, you have to set the environment variable PA_MIN_LATENCY_MSEC to a value that represents the latency in miliseconds.
+ Eg: (in autoexec.bat or launched before running ZynAddSubFX) "set PA_MIN_LATENCY_MSEC=50"
+ Warning: if the value is too low, you might encounter severe dropouts on ZynAddSubFX. You'll have to set to a higher value and turn off automated background tasks (like virus scanners, email clients, etc.).
+ If you have more cards, you can select the desired card where you can play audio with the environment variable "PA_RECOMMENDED_OUTPUT_DEVICE"
+ Eg: "set PA_RECOMMENDED_OUTPUT_DEVICE=1"
+ A better way to set all of this, I will put on next versions.
+
+
+Please send me instruments,banks,master settings,songs(midi+...xmz files) done with ZynAddSubFX. I'll appreciate this.
+
+
+Have fun! :-)
+
+--The ZynAddSubFX team
diff --git a/plugins/zynaddsubfx/zynaddsubfx/bugs.txt b/plugins/zynaddsubfx/zynaddsubfx/bugs.txt
new file mode 100644
index 0000000..e69de29
diff --git a/plugins/zynaddsubfx/zynaddsubfx/cmake/FindAlsa.cmake b/plugins/zynaddsubfx/zynaddsubfx/cmake/FindAlsa.cmake
new file mode 100644
index 0000000..23003b3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/cmake/FindAlsa.cmake
@@ -0,0 +1,69 @@
+# Alsa check, based on libkmid/configure.in.in.
+# Only the support for Alsa >= 0.9.x was included; 0.5.x was dropped (but feel free to re-add it if you need it)
+# It defines ...
+# It offers the following macros:
+# ALSA_CONFIGURE_FILE(config_header) - generate a config.h, typical usage:
+# ALSA_CONFIGURE_FILE(${CMAKE_BINARY_DIR}/config-alsa.h)
+# ALSA_VERSION_STRING(version_string) looks for alsa/version.h and reads the version string into
+# the first argument passed to the macro
+
+# Copyright (c) 2006, David Faure, <faure at kde.org>
+# Copyright (c) 2007, Matthias Kretz <kretz at kde.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+include(CheckIncludeFiles)
+include(CheckIncludeFileCXX)
+include(CheckLibraryExists)
+
+# Already done by toplevel
+find_library(ASOUND_LIBRARY asound)
+set(ASOUND_LIBRARY_DIR "")
+if(ASOUND_LIBRARY)
+ get_filename_component(ASOUND_LIBRARY_DIR ${ASOUND_LIBRARY} PATH)
+endif(ASOUND_LIBRARY)
+
+check_library_exists(asound snd_seq_create_simple_port "${ASOUND_LIBRARY_DIR}" HAVE_LIBASOUND2)
+if(HAVE_LIBASOUND2)
+ message(STATUS "Found ALSA: ${ASOUND_LIBRARY}")
+else(HAVE_LIBASOUND2)
+ message(STATUS "ALSA not found")
+endif(HAVE_LIBASOUND2)
+set(ALSA_FOUND ${HAVE_LIBASOUND2})
+
+find_path(ALSA_INCLUDES alsa/version.h)
+
+macro(ALSA_VERSION_STRING _result)
+ # check for version in alsa/version.h
+ if(ALSA_INCLUDES)
+ file(READ "${ALSA_INCLUDES}/alsa/version.h" _ALSA_VERSION_CONTENT)
+ string(REGEX REPLACE ".*SND_LIB_VERSION_STR.*\"(.*)\".*" "\\1" ${_result} ${_ALSA_VERSION_CONTENT})
+ else(ALSA_INCLUDES)
+ message(STATUS "ALSA version not known. ALSA output will probably not work correctly.")
+ endif(ALSA_INCLUDES)
+endmacro(ALSA_VERSION_STRING _result)
+
+
+get_filename_component(_FIND_ALSA_MODULE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
+macro(ALSA_CONFIGURE_FILE _destFile)
+ check_include_files(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
+ check_include_files(machine/soundcard.h HAVE_MACHINE_SOUNDCARD_H)
+
+ check_include_files(linux/awe_voice.h HAVE_LINUX_AWE_VOICE_H)
+ check_include_files(awe_voice.h HAVE_AWE_VOICE_H)
+ check_include_files(/usr/src/sys/i386/isa/sound/awe_voice.h HAVE__USR_SRC_SYS_I386_ISA_SOUND_AWE_VOICE_H)
+ check_include_files(/usr/src/sys/gnu/i386/isa/sound/awe_voice.h HAVE__USR_SRC_SYS_GNU_I386_ISA_SOUND_AWE_VOICE_H)
+
+ check_include_file_cxx(sys/asoundlib.h HAVE_SYS_ASOUNDLIB_H)
+ check_include_file_cxx(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
+
+ check_library_exists(asound snd_pcm_resume "${ASOUND_LIBRARY_DIR}" ASOUND_HAS_SND_PCM_RESUME)
+ if(ASOUND_HAS_SND_PCM_RESUME)
+ set(HAVE_SND_PCM_RESUME 1)
+ endif(ASOUND_HAS_SND_PCM_RESUME)
+
+ configure_file(${_FIND_ALSA_MODULE_DIR}/config-alsa.h.cmake ${_destFile})
+endmacro(ALSA_CONFIGURE_FILE _destFile)
+
+mark_as_advanced(ALSA_INCLUDES ASOUND_LIBRARY)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/cmake/FindCxxTest.cmake b/plugins/zynaddsubfx/zynaddsubfx/cmake/FindCxxTest.cmake
new file mode 100644
index 0000000..937142b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/cmake/FindCxxTest.cmake
@@ -0,0 +1,200 @@
+# - Find CxxTest
+# Find the CxxTest suite and declare a helper macro for creating unit tests
+# and integrating them with CTest.
+# For more details on CxxTest see http://cxxtest.tigris.org
+#
+# INPUT Variables
+#
+# CXXTEST_USE_PYTHON [deprecated since 1.3]
+# Only used in the case both Python & Perl
+# are detected on the system to control
+# which CxxTest code generator is used.
+# Valid only for CxxTest version 3.
+#
+# NOTE: In older versions of this Find Module,
+# this variable controlled if the Python test
+# generator was used instead of the Perl one,
+# regardless of which scripting language the
+# user had installed.
+#
+# CXXTEST_TESTGEN_ARGS (since CMake 2.8.3)
+# Specify a list of options to pass to the CxxTest code
+# generator. If not defined, --error-printer is
+# passed.
+#
+# OUTPUT Variables
+#
+# CXXTEST_FOUND
+# True if the CxxTest framework was found
+# CXXTEST_INCLUDE_DIRS
+# Where to find the CxxTest include directory
+# CXXTEST_PERL_TESTGEN_EXECUTABLE
+# The perl-based test generator
+# CXXTEST_PYTHON_TESTGEN_EXECUTABLE
+# The python-based test generator
+# CXXTEST_TESTGEN_EXECUTABLE (since CMake 2.8.3)
+# The test generator that is actually used (chosen using user preferences
+# and interpreters found in the system)
+# CXXTEST_TESTGEN_INTERPRETER (since CMake 2.8.3)
+# The full path to the Perl or Python executable on the system
+#
+# MACROS for optional use by CMake users:
+#
+# CXXTEST_ADD_TEST(<test_name> <gen_source_file> <input_files_to_testgen...>)
+# Creates a CxxTest runner and adds it to the CTest testing suite
+# Parameters:
+# test_name The name of the test
+# gen_source_file The generated source filename to be
+# generated by CxxTest
+# input_files_to_testgen The list of header files containing the
+# CxxTest::TestSuite's to be included in
+# this runner
+#
+# #==============
+# Example Usage:
+#
+# find_package(CxxTest)
+# if(CXXTEST_FOUND)
+# include_directories(${CXXTEST_INCLUDE_DIR})
+# enable_testing()
+#
+# CXXTEST_ADD_TEST(unittest_foo foo_test.cc
+# ${CMAKE_CURRENT_SOURCE_DIR}/foo_test.h)
+# target_link_libraries(unittest_foo foo) # as needed
+# endif()
+#
+# This will (if CxxTest is found):
+# 1. Invoke the testgen executable to autogenerate foo_test.cc in the
+# binary tree from "foo_test.h" in the current source directory.
+# 2. Create an executable and test called unittest_foo.
+#
+# #=============
+# Example foo_test.h:
+#
+# #include <cxxtest/TestSuite.h>
+#
+# class MyTestSuite : public CxxTest::TestSuite
+# {
+# public:
+# void testAddition( void )
+# {
+# TS_ASSERT( 1 + 1 > 1 );
+# TS_ASSERT_EQUALS( 1 + 1, 2 );
+# }
+# };
+#
+
+#=============================================================================
+# Copyright 2008-2010 Kitware, Inc.
+# Copyright 2008-2010 Philip Lowman <philip at yhbt.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+# Version 1.4 (11/18/10) (CMake 2.8.4)
+# Issue 11384: Added support to the CXX_ADD_TEST macro so header
+# files (containing the tests themselves) show up in
+# Visual Studio and other IDEs.
+#
+# Version 1.3 (8/19/10) (CMake 2.8.3)
+# Included patch by Simone Rossetto to check if either Python or Perl
+# are present in the system. Whichever intepreter that is detected
+# is now used to run the test generator program. If both interpreters
+# are detected, the CXXTEST_USE_PYTHON variable is obeyed.
+#
+# Also added support for CXXTEST_TESTGEN_ARGS, for manually specifying
+# options to the CxxTest code generator.
+# Version 1.2 (3/2/08)
+# Included patch from Tyler Roscoe to have the perl & python binaries
+# detected based on CXXTEST_INCLUDE_DIR
+# Version 1.1 (2/9/08)
+# Clarified example to illustrate need to call target_link_libraries()
+# Changed commands to lowercase
+# Added licensing info
+# Version 1.0 (1/8/08)
+# Fixed CXXTEST_INCLUDE_DIRS so it will work properly
+# Eliminated superfluous CXXTEST_FOUND assignment
+# Cleaned up and added more documentation
+
+#=============================================================
+# CXXTEST_ADD_TEST (public macro)
+#=============================================================
+macro(CXXTEST_ADD_TEST _cxxtest_testname _cxxtest_outfname)
+ set(_cxxtest_real_outfname ${CMAKE_CURRENT_BINARY_DIR}/${_cxxtest_outfname})
+
+ add_custom_command(
+ OUTPUT ${_cxxtest_real_outfname}
+ DEPENDS ${ARGN}
+ COMMAND ${CXXTEST_TESTGEN_INTERPRETER}
+ ${CXXTEST_TESTGEN_EXECUTABLE} ${CXXTEST_TESTGEN_ARGS} -o ${_cxxtest_real_outfname} ${ARGN}
+ )
+
+ set_source_files_properties(${_cxxtest_real_outfname} PROPERTIES GENERATED true)
+ add_executable(${_cxxtest_testname} ${_cxxtest_real_outfname} ${ARGN})
+
+ if(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
+ add_test(${_cxxtest_testname} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${_cxxtest_testname})
+ elseif(EXECUTABLE_OUTPUT_PATH)
+ add_test(${_cxxtest_testname} ${EXECUTABLE_OUTPUT_PATH}/${_cxxtest_testname})
+ else()
+ add_test(${_cxxtest_testname} ${CMAKE_CURRENT_BINARY_DIR}/${_cxxtest_testname})
+ endif()
+
+endmacro(CXXTEST_ADD_TEST)
+
+#=============================================================
+# main()
+#=============================================================
+if(NOT DEFINED CXXTEST_TESTGEN_ARGS)
+ set(CXXTEST_TESTGEN_ARGS --error-printer)
+endif()
+
+find_package(PythonInterp QUIET)
+find_package(Perl QUIET)
+
+find_path(CXXTEST_INCLUDE_DIR cxxtest/TestSuite.h)
+find_program(CXXTEST_PYTHON_TESTGEN_EXECUTABLE
+ NAMES cxxtestgen cxxtestgen.py
+ PATHS ${CXXTEST_INCLUDE_DIR})
+find_program(CXXTEST_PERL_TESTGEN_EXECUTABLE cxxtestgen.pl
+ PATHS ${CXXTEST_INCLUDE_DIR})
+
+if(PYTHONINTERP_FOUND OR PERL_FOUND)
+ include(FindPackageHandleStandardArgs)
+
+ if(PYTHONINTERP_FOUND AND (CXXTEST_USE_PYTHON OR NOT PERL_FOUND OR NOT DEFINED CXXTEST_USE_PYTHON))
+ set(CXXTEST_TESTGEN_EXECUTABLE ${CXXTEST_PYTHON_TESTGEN_EXECUTABLE})
+ set(CXXTEST_TESTGEN_INTERPRETER ${PYTHON_EXECUTABLE})
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(CxxTest DEFAULT_MSG
+ CXXTEST_INCLUDE_DIR CXXTEST_PYTHON_TESTGEN_EXECUTABLE)
+
+ elseif(PERL_FOUND)
+ set(CXXTEST_TESTGEN_EXECUTABLE ${CXXTEST_PERL_TESTGEN_EXECUTABLE})
+ set(CXXTEST_TESTGEN_INTERPRETER ${PERL_EXECUTABLE})
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(CxxTest DEFAULT_MSG
+ CXXTEST_INCLUDE_DIR CXXTEST_PERL_TESTGEN_EXECUTABLE)
+ endif()
+
+ if(CXXTEST_FOUND)
+ set(CXXTEST_INCLUDE_DIRS ${CXXTEST_INCLUDE_DIR})
+ endif()
+
+else()
+
+ set(CXXTEST_FOUND false)
+ if(NOT CxxTest_FIND_QUIETLY)
+ if(CxxTest_FIND_REQUIRED)
+ message(FATAL_ERROR "Neither Python nor Perl found, cannot use CxxTest, aborting!")
+ else()
+ message(STATUS "Neither Python nor Perl found, CxxTest will not be used.")
+ endif()
+ endif()
+
+endif()
diff --git a/plugins/zynaddsubfx/zynaddsubfx/cmake/FindJACK.cmake b/plugins/zynaddsubfx/zynaddsubfx/cmake/FindJACK.cmake
new file mode 100644
index 0000000..20379db
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/cmake/FindJACK.cmake
@@ -0,0 +1,17 @@
+#Find JACK Audio Connection Kit
+
+include(LibFindMacros)
+libfind_pkg_check_modules(JACK jack)
+find_path(JACK_INCLUDE_DIR
+ NAMES jack/jack.h
+ PATHS ${JACK_INCLUDE_DIRS}
+ )
+
+find_library(JACK_LIBRARY
+ NAMES jack
+ PATHS ${JACK_LIBRARY_DIRS}
+ )
+
+set(JACK_PROCESS_INCLUDES JACK_INCLUDE_DIR)
+set(JACK_PROCESS_LIBS JACK_LIBRARY)
+libfind_process(JACK)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/cmake/FindOSS.cmake b/plugins/zynaddsubfx/zynaddsubfx/cmake/FindOSS.cmake
new file mode 100644
index 0000000..319c90e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/cmake/FindOSS.cmake
@@ -0,0 +1,9 @@
+# Find OSS (Open Sound System)
+find_path(OSS_INCLUDE_DIR sys/soundcard.h)
+set(OSS_LIBRARIES True)
+mark_as_advanced(OSS_INCLUDE_DIR)
+
+# handle the QUIETLY and REQUIRED arguments and set OSS_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(OSS DEFAULT_MSG OSS_LIBRARIES OSS_INCLUDE_DIR)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/cmake/Findzlib.cmake b/plugins/zynaddsubfx/zynaddsubfx/cmake/Findzlib.cmake
new file mode 100644
index 0000000..49edafd
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/cmake/Findzlib.cmake
@@ -0,0 +1,39 @@
+# - Find zlib
+# Find the native ZLIB includes and library
+#
+# ZLIB_INCLUDE_DIRS - where to find zlib.h, etc.
+# ZLIB_LIBRARIES - List of libraries when using zlib.
+# ZLIB_FOUND - True if zlib found.
+
+#=============================================================================
+# Copyright 2001-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distributed this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+IF (ZLIB_INCLUDE_DIR)
+ # Already in cache, be silent
+ SET(ZLIB_FIND_QUIETLY TRUE)
+ENDIF (ZLIB_INCLUDE_DIR)
+
+FIND_PATH(ZLIB_INCLUDE_DIR zlib.h)
+
+SET(ZLIB_NAMES z zlib zdll)
+FIND_LIBRARY(ZLIB_LIBRARY NAMES ${ZLIB_NAMES} )
+MARK_AS_ADVANCED( ZLIB_LIBRARY ZLIB_INCLUDE_DIR )
+
+# Per-recommendation
+SET(ZLIB_INCLUDE_DIRS "${ZLIB_INCLUDE_DIR}")
+SET(ZLIB_LIBRARIES "${ZLIB_LIBRARY}")
+
+# handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB DEFAULT_MSG ZLIB_LIBRARIES ZLIB_INCLUDE_DIRS)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/Doxyfile b/plugins/zynaddsubfx/zynaddsubfx/doc/Doxyfile
new file mode 100644
index 0000000..f48cdff
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/Doxyfile
@@ -0,0 +1,309 @@
+# Doxyfile 1.5.7
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
+PROJECT_NAME = ZynAddSubFX
+PROJECT_NUMBER = 2.3.0
+OUTPUT_DIRECTORY = /home/mark/zynaddsubfx/doc/dox2/
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = YES
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH = /home/mark/zynaddsubfx/src/
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 5
+ALIASES =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+BUILTIN_STL_SUPPORT = NO
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
+DISTRIBUTE_GROUP_DOC = NO
+SUBGROUPING = YES
+TYPEDEF_HIDES_STRUCT = NO
+SYMBOL_CACHE_SIZE = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = NO
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = NO
+EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
+HIDE_UNDOC_MEMBERS = YES
+HIDE_UNDOC_CLASSES = YES
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = YES
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = NO
+SORT_GROUP_NAMES = NO
+SORT_BY_SCOPE_NAME = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_DIRECTORIES = NO
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = NO
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = /home/mark/zynaddsubfx/src/
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.d \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.idl \
+ *.odl \
+ *.cs \
+ *.php \
+ *.php3 \
+ *.inc \
+ *.m \
+ *.mm \
+ *.dox \
+ *.py \
+ *.f90 \
+ *.f \
+ *.vhd \
+ *.vhdl \
+ *.C \
+ *.CC \
+ *.C++ \
+ *.II \
+ *.I++ \
+ *.H \
+ *.HH \
+ *.H++ \
+ *.CS \
+ *.PHP \
+ *.PHP3 \
+ *.M \
+ *.MM \
+ *.PY \
+ *.F90 \
+ *.F \
+ *.VHD \
+ *.VHDL
+RECURSIVE = YES
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS = *
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = NO
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION = NO
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+COLS_IN_ALPHA_INDEX = 5
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_ALIGN_MEMBERS = YES
+HTML_DYNAMIC_SECTIONS = NO
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
+BINARY_TOC = NO
+TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHG_LOCATION =
+DISABLE_INDEX = NO
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = NONE
+TREEVIEW_WIDTH = 250
+FORMULA_FONTSIZE = 10
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4wide
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = YES
+USE_PDFLATEX = YES
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = NO
+EXPAND_ONLY_PREDEF = NO
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE =
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = NO
+MSCGEN_PATH =
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = YES
+DOT_FONTNAME = FreeSans
+DOT_FONTPATH =
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = YES
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = YES
+CALLER_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+DOT_PATH =
+DOTFILE_DIRS =
+DOT_GRAPH_MAX_NODES = 50
+MAX_DOT_GRAPH_DEPTH = 1000
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = NO
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/01-intro_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/01-intro_IT.txt
new file mode 100644
index 0000000..7db8b95
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/01-intro_IT.txt
@@ -0,0 +1,55 @@
+Come iniziare
+---------------
+ZynAddSubFX è un sintetizzatore software piuttosto complesso, con un gran numero
+di controlli. Perciò l'uso di ZynAddSubFX non è sempre ovvio.
+
+Molte applicazioni sotto Linux trasportano il MIDI con AlSA e trasmettono l'audio
+con JACK. ZynAddSubFX può essere lanciato con questa configurazione eseguendo:
+
+------------------------------
+zynaddsubfx -I alsa -O jack -a
+------------------------------
+
+Questo imposta ALSA come driver input e JACK come driver audio, che dovrebbe
+tentare di connettersi automaticamente alla tua scheda audio, per via del flag -a.
+Se questa è la prima volta che lanci ZynAddSubFX, vedrai una schermata che ti lascia
+scegliere tra l'interfaccia per principianti e quella avanzata. Attualmente
+l'interfaccia 'beginner' è deprecata, quindi è raccomandato usare l'interfaccia
+'advanced'.
+
+Ora dovresti essere in grado di vedere la finestra principale di ZynAddSubFX, dalla
+quale puoi impostare patch, effetti e altre configurazioni generali, ma la cosa più
+importante è che fornisce i collegamenti tra le patch. ZynAddSubFX è uno strumento
+potente con una serie di patch di base, ma la vera forza sta dietro all'abilità di
+creare delle patch personali.
+
+.Main Window
+image::./images/uimain.png[]
+
+Per un utilizzo base, potrai usare il pulsante alla destra dell'etichetta 'enabled'.
+Questo pulsante consentirà di selezionare lo strumento desiderato dai banchi
+disponibili in ZynAddSubFX. Per suonare note in ZynAddSubFX puoi usare la tastiera
+virtuale integrata (accessibile dal pulsante 'vK') oppure puoi connettere la tua
+tastiera al sistema e usare *aconnect* per connetterla in ZynAddSubFX (supponendo
+che si stia usando ALSA).
+
+Questa finestra principale consente l'accesso a molte features più avanzate.
+Di cui alcune sono:
+
+* System Effects
+* Insertion Effects
+* Recording
+* Part Settings (strumento impostazioni del livello)
+* Master Settings
+* Microtonal Settings
+
+Ad esempio, per utilizzare la funzione di registrazione deve essere selezionato un
+file wave dal menù di registrazione, poi può essere avviata con il pulsante 'record'
+e stoppata con il pulsante 'stop'. Questo è un modo semplice e veloce di registrare
+alcuni samples da ZynAddSubFX, anche se ci sono strumenti con caratteristiche più
+complete disponibili tramite gli strumenti di registrazione di JACK.
+
+NOTE: Dopo aver premuto 'record', il file wave non partirà la registrazione fino a
+quando un nuovo tasto non sarà premuto da una sorgente MIDI esterna o dalla virtual
+keyboard. Le proprietà dei 'System Effects' e degli 'Insertion Effects' sono
+accessibili e disponibili così come le proprietà di ogni strumento.
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/02-filter_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/02-filter_IT.txt
new file mode 100644
index 0000000..31e11be
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/02-filter_IT.txt
@@ -0,0 +1,61 @@
+Filters
+-------
+:Author: Mark McCurry
+:Date: June 24, 2012
+
+ZynAddSubFX offre diversi tipi di filtri, che possono essere usati per modellare
+lo spettro di un segnale. I parametri primari che influenzano le caratteristiche
+del filtro sono 'cutoff', 'resonance', 'filter stages' e il tipo di filtro '(filter type)'.
+
+* *Cutoff (frequenza di taglio)*: Questo valore determina quale frequenza segna
+ il punto di cambiamento per il filtro.
+ In un filtro 'low-pass' (passa-bassi) questo
+ valore segna il punto da cui le frequenze alte
+ verranno attenuate.
+* *Resonance*: La Resonance di un filtro determina l'enfatizzazione del filtro
+ sulla frequenza di taglio. In ZynAddSubFX è rappresentata dal
+ fattore 'Q', che è definito come la frequenza di taglio diviso
+ la larghezza di banda '(bandwidth)'. In altre parole un più alto
+ valore di Q causa un picco molto più stretto e risonante.
+* *Stages*: Il numero di fasi di filtrazione in un dato filtro descrive quanto
+ bruscamente è in grado di applicare cambiamenti nella risposta in
+ frequenza.
+
+I filtri analogici di base '(analog)' che ZynAddSubFX offre sono mostrati di
+seguito, con la frequenza centrale segnata con una linea rossa. I filtri a stato
+variabile '(state variable)' dovrebbero essere molto simili.
+
+image:images/filter0.png[]
+
+Come detto in precedenza, il valore Q di un filtro influenza quanto concentrata è
+l'energia del segnale nella frequenza di taglio; il risultato di differenti valori
+di Q sono mostrati sotto.
+
+TIP: Per molti suoni analogici classici, alti valori di Q sono ussati sugli
+'sweeping filters'. Un semplice low-pass filter con Q alto modulato da un forte
+'envelope' solitamente è sufficiente per avere un buon suono.
+
+image:images/filter1.png[]
+
+Infine, l'effetto dell'ordine del filtro può essere visto sotto. Questo è
+approssimativamente il numero di fasi del filtro '(filter stages)'. Per patches
+più complesse è importante capire che la nitidezza in più nel filtro non è gratuita,
+in quanto richiede molti più calcoli in corso di esecuzione; questo fenomeno
+è più facilmente visibile nel 'subsynth', dove è facile avere bisogno di centinaia
+di 'filter stages' per produrre una certa nota.
+
+image:images/filter2.png[]
+
+User Interface
+~~~~~~~~~~~~~~
+
+image:images/uifilter.png[]
+
+* *C.freq*: Cutoff frequency
+* *Q*: Level of resonance for the filter
+* *V.SnsA.*: Velocity sensing amount for filter cutoff
+* *V.Sns.*: Velocity sensing function
+* *freq.tr*: Frequency tracking amount. When this parameter is positive, higher
+ note frequencies shift the filter's cutoff frequency higher.
+* *gain*: Additional gain/attenuation for filter
+* *St*: Filter stages
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/03-lfo_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/03-lfo_IT.txt
new file mode 100644
index 0000000..29a530c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/03-lfo_IT.txt
@@ -0,0 +1,64 @@
+LFO
+---
+:author: Paul Nasca
+
+Introduzione
+~~~~~~~~~~~~
+
+"LFO" significa Low Frequency Oscillator. Questi oscillatori non sono usati per
+fare suoni da soli, ma per cambiare alcuni parametri (come le frequenze, le
+ampiezze o i filtri).
+
+L'LFO ha alcuni parametri di base:
+
+* *Delay*: Questo parametro imposta il tempo tra l'inizio della nota e l'inizio
+ dell'LFO
+* *Start Phase*: La posizione che avrà l'LFO alla partenza
+* *Frequency*: La velocità dell'LFO (quanto velocemente il parametro è controllato
+ dai cambiamenti dell'LFO)
+* *Depth*: L'ampiezza dell'LFO (quanto il parametro è controllato dai cambiamenti
+ dell'LFO)
+
+image:images/lfo0.png[]
+
+Un altro importante parametro dell'LFO è la forma '(shape)'. Ci sono molti
+tipi di LFO in base alla forma. ZynAddSubFX supporta le seguenti forme:
+
+image:images/lfo1.png[]
+
+Un altro parametro è 'LFO Randomness' (casualità dell'LFO).
+Esso modifica casualmente l'ampiezza o la frequenza dell'LFO ed in ZynAddSubFX puoi scegliere quanto, con questo parametro.
+Nelle seguenti immagini sono mostrati alcuni esempi di casualità e come cambia la
+forma d'onda triangolare dell'LFO.
+
+image:images/lfo2.png[]
+
+Altri parametri sono:
+
+* *Continous mode*: Se si utilizza questa modalità, l'LFO non partirà da "zero"
+ad ogni nuova nota, ma sarà continuo. E' molto utile applicato sui filtri, per
+fare interessanti 'sweeps'.
+* *Stretch*: Controlla quanto la frequenza dell'LFO cambia in base alla frequenza
+della nota.
+Si può passare da 'stretch' negativo (la frequenza dell'LFO diminuisce sulle
+note più alte) a zero (rimane la stessa in tutte le note) a 'stretch' positivo
+(aumenta sulle note più alte).
+
+User Interface
+~~~~~~~~~~~~~~
+
+In ZynAddSubFX i parametri dell'LFO sono mostrati così:
+
+image:images/uilfo.jpg[]
+
+Questi parametri sono:
+
+* *Freq*: LFO Frequency
+* *Depth*: LFO Depth
+* *Start*: LFO Start Phase -
+Se questo knob è al valore più basso, LFO Start Phase sarà random
+* *Delay*: LFO Delay
+* *A.R.*: LFO Amplitude Randomnes
+* *F.R.*: LFO Frequency Randomness
+* *C.*: LFO Continous Mode
+* *Str.*: LFO Stretch - Nell'immagine sopra LFO Stretch è impostato a zero
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/04-envelope_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/04-envelope_IT.txt
new file mode 100644
index 0000000..3586681
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/04-envelope_IT.txt
@@ -0,0 +1,134 @@
+Envelopes
+---------
+
+Introduzione
+~~~~~~~~~~~~
+Gli inviluppi controllano come cambiano nel tempo l'ampiezza, la frequenza o il
+filtro.
+
+Amplitude Envelopes (inviluppi di ampiezza)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Questi inviluppi controllano l'ampiezza del suono.
+In ZynAddSubFX, gli inviluppi di ampiezza possono essere lineari o logaritmici.
+Nell'immagine seguente sono mostrate le differenze tra questi inviluppi.
+
+image:images/envelope1.png[Alt text]
+
+L'inviluppo di ampiezza è diviso in:
+* *Attack*: Inizia all'attacco della nota (Note On). Il volume inizia da 0 al
+massimo. In ZynAddSubFX l'attack è sempre lineare
+* *Decay*: Il volume scende dal valore massimo ad un livello chiamato "Sustain level"
+* *Sustain*: Il volume rimane costante fino a quando il tasto non viene
+rilasciato (Note Off). Dopo questo, avviene l'ultima fase.
+* *Release*: Il volume scende a zero.
+
+Frequency Envelopes
+~~~~~~~~~~~~~~~~~~~
+
+Questi inviluppi controllano la frequenza (o, più esattamente, il 'pitch')
+degli oscillatori.
+La seguente figura disegna le fasi di questi inviluppi.
+
+image::images/envelope2.png[Alt text]
+
+La linea puntinata rappresenta il pitch reale del suono senza inviluppo.
+
+Gli inviluppi di frequenza sono divisi in 3 fasi:
+
+* *Attack*: Inizia all'attacco della nota (Note On). La frequenza inizia da un
+certo valore e "scivola" alla reale frequenza della nota.
+* *Sustain*: La frequenza è la stessa per tutto il periodo di Sustain
+* *Release*: Questa fase inizia con il Note Off e scala la frequenza della nota
+ad un certo valore
+
+Filter Envelopes
+~~~~~~~~~~~~~~~~
+
+Questi inviluppi controllano la frequenza di cutoff dei filtri e sono divisi in:
+
+image:images/envelope3.png[Alt Text]
+
+* *Attack*: Inizia all'inizio della nota (Note On). La frequenza di cutoff inizia
+ad un certo valore e scala ad un altro
+* *Decay*: La frequenza di cutoff continua a scivolare verso il valore reale della
+frequenza di cutoff del filtro (linea puntinata)
+* *Sustain*: La frequenza di cutoff è la stessa per tutto il periodo di
+Sustain (linea puntinata)
+* *Release*: Questa fase inizia con il Note Off e scala la frequenza di cutoff della
+nota ad un certo valore
+
+Freemode Envelopes
+~~~~~~~~~~~~~~~~~~
+
+Per tutti gli inviluppi c'è una modalità che consente all'utente di impostare un numero
+arbitrario di fasi e punti di controllo. Questa modalità è chiamata 'Freemode'.
+
+image:images/envelope4.png[Alt Text]
+
+L'unica fase che rimane sempre definita è il Sustain, dove gli inviluppi si bloccano
+fino ad un evento Note Off.
+
+User Interface
+~~~~~~~~~~~~~~
+Tutti i tipi di inviluppi hanno alcuni controlli comuni:
+
+* *E*: Mostra una finestra che può far vedere la vera forma dell'inviluppo o convertirlo
+in 'Freemode' per editarlo
+* *Stretch*: Come l'inviluppo è allungato in base alla nota.
+Sulle note più alte gli inviluppi sono più corti delle note più basse.
+Nel valore più a sinistra lo 'stretch' è zero.
+Il valore più a destra indica un allungamento del 200%; ciò significa che l'inviluppo
+è allungato circa 4 volte/ottava.
+* *frcR*: Release forzato. Se questa opzione è settata su On, il rilascio andrà al
+valore finale anche se la fase di Sustain non è stata completata.
+Di solito questo parametro è settato.
+
+
+I parametri degli Amplitude Evelopes in ZynAddSubFX sono:
+
+image:images/uienvelope3.jpg[Alt Text]
+
+* *A.dt*: Durata Attack
+* *D.dt*: Durata Decay
+* *S.Val*: Valore di Sustain
+* *R.dt*: Release time
+* *L*: Se questa opzione è settata l'inviluppo è lineare, altrimenti sarà logaritmico.
+
+
+Per i Frequency Envelopes l'interfaccia ha i seguenti parametri:
+
+image:images/uienvelope2.jpg[Alt Text]
+
+* *A.val*: Valore di Attack
+* *A.dt*: Durata Attack
+* *R.dt*: Release time
+* *R.val*: Valore di Release
+
+
+I Filter Evelopes hanno i parametri:
+
+image:images/uienvelope1.jpg[Alt Text]
+
+* *A.val*: Valore di Attack
+* *A.dt*: Durata di Attack
+* *D.val*: Valore di Decay
+* *D.dt*: Decay time
+* *R.dt*: Release time
+* *R.val*: Valore di Release
+
+I Freemode Envelopes hanno una finestra separata per impostare parametri e controlli:
+
+image:images/uienvelope0.jpg[]
+
+* *Control points (punti di controllo)*: Puoi muovere i punti usando il mouse.
+In basso a destra nella finestra viene mostrata la durata totale dell'inviluppo.
+Se si clicka su un control point verrà visualizzata la durata della fase in cui
+è quel punto.
+* *Freemode*: Questo pulsante attiva o disattiva la modalità 'Freemode'
+* *Add Point*: Aggiunge un punto dopo il punto correntemente selezionato.
+Puoi selezionare un punto clickandoci su.
+* *Delete point*: Rimuove il punto dall'inviluppo.
+* *Sust.*: Imposta il punto di Sustain. E' mostrato usando la linea gialla.
+* *Str.*: Envelope stretch
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/05-adsynth_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/05-adsynth_IT.txt
new file mode 100644
index 0000000..4a00c2f
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/05-adsynth_IT.txt
@@ -0,0 +1,78 @@
+AdSynth
+-------
+
+AdSynth, principalmente un motore di sintesi additiva, è uno dei tre principali
+motori di sintesi disponibili in ZynAddSubFX.
+Il concetto base di questo motore è la somma di un insieme di voci, ciascuno dei
+quali consiste in oscillatori.
+
+High Level (Global)
+~~~~~~~~~~~~~~~~~~~
+
+Il livello globale di AdSynth consiste negli elementi mostrati nella figura sotto:
+
+.AdSynth Global Elements
+image::gen/ad-note.png[scalewidth="50%",width="700"]
+
+Il livello globale di AdSynth è quasi interamente composto dagli elementi
+precedentemente discussi.
+Comunque appaiono qui alcune nuove features, come: il rilevamento di velocità
+'(velocity sensing)', 'punch', opzioni di detune e relativa bandwidth, resonance.
+
+.AdSynth Global Window
+image::images/ad-global.png[]
+
+Il rilevamento di velocità è semplicemente una trasformazione esponenziale dalla
+velocità della nota ad alcuni cambiamenti di parametro (!?).
+Il diagramma sotto mostra come il 'velocity sensing' controlla questa traslazione
+in tutto il range di velocity delle note possibili.
+
+.Velocity Sensing Chart
+image::gen/velf.png[scalewidth="50%",width="600"]
+
+Il 'punch' di una nota in AdSynth è un'amplificazione costante dell'output
+alla partenza della nota, con una lunghezza determinata dal 'punch time' e 'stretch'
+e l'ampiezza determinata da 'punch strength' e 'velocity sensing'.
+Il controllo relBw nel riquadro di frequenza è di fatto un moltiplicatore per
+"scordare" '(detuning)' tutte le voci di una nota.
+
+NOTE: TODO Talk about resonance
+
+
+La somma delle voci passa attraverso filtri e amplificazione per produrre il
+suono finale.
+Questro potrebbe far pensare che ad-note è solo un mucchio di post-elaborazione
+minore e che a questo livello molto della generazione del suono è nascosta.
+
+Voices
+~~~~~~
+
+La voce da accesso ad un configurazione simile dei parametri globali più altre
+cose come il modulatore, l'oscillatore e features di unison.
+
+.AdSynth Voice Window
+image::images/ad-voice.png[]
+
+Modulation
+^^^^^^^^^^
+
+Tra le opzioni di modulazione si può selezionare:
+
+* Morph
+* Ring Modulation
+* Phase Modulation
+* Frequency Modulation
+* Disabled
+
+Unison
+^^^^^^
+
+Unison è utile nel creare il suono tipo chorus di più oscillatori simultanei.
+
+Oscillator
+~~~~~~~~~~
+
+NOTE: TODO show waveforms, talk about distortions somewhere, etc
+
+.Oscillator Window
+image::images/uioscil.png[]
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/06-controller_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/06-controller_IT.txt
new file mode 100644
index 0000000..9035666
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/06-controller_IT.txt
@@ -0,0 +1,56 @@
+Controller
+---------
+
+image::./images/uicontroller.png[]
+
+General
+~~~~~~~
+
+* *ModWh*: Modulation Wheel depth (profondità della Modulation Wheel)
+* *Exp MWh*: Exponential Modulation Wheel (cambia la scala di mudulazione in
+ esponenziale)
+* *BwDpth*: Bandwidth Depth (profondità della Bandwidth)
+* *Exp BW*: Exponential Bandwidth (cambia la scala di Bandwidth in esponenziale)
+* *PanDpth*: Panning Depth (profondità del pan)
+* *FltQ*: Filter Q (resonance) depth
+* *FltCut* Filter Cutoff frequency depth (profondità della frequenza di taglio)
+* *Expr*: Attiva/disattiva Expression
+* *Vol*: Attiva/disattiva la ricezione di Volume controller
+* *FMamp*: Attiva/disattiva la ricezione di Modulation Amplitude controller (76)
+* *Sustain*: Attiva/disattiva sustain pedal
+* *PWheelB.Rng (cents)*: Pitch Wheel Bend Range (cents; 100 cents = 1 semitono)
+
+Portamento
+~~~~~~~~~~
+
+* *Rcv.*: Controlla se la parte riceve il Portamento - On/Off (65)
+* *time*: La durata del Portamento
+* *thresh*: La soglia '(Threshold)' del Portamento.
+Rappresenta il minimo o il massimo numero di semitoni (o centesimi di semitono)
+richiesti per lo start del Portamento.
+La differenza è calcolata tra l'ultima nota e la corrente.
+* *th.type*: Il tipo di Threshold
+Se selezionato significa che il Portamento si attiva quando la differenza
+delle frequenze è al di sopra della soglia ("thresh"); non selezionato si attiva
+quando è al di sotto della soglia.
+
+NOTE: La Threshold si riferisce alle frequenze e non alle note MIDI
+ (si potrebbe tenere in considerazione se si usano scale microtonali).
+
+
+Proportional Portamento
+^^^^^^^^^^^^^^^^^^^^^^
+////
+TODO: add graphs to explain prp.rate and prp. depth
+////
+
+* *Propt.*: Se il Portamento è proporzionale al rapporto '(Ratio)' delle frequenze
+* *Prp. Rate*: Ratio necessaria per raddoppiare il tempo del Portamento
+* *Prp. Dpth*
+
+Resonance
+~~~~~~~~~
+
+* *CFdpth*: Controlla la profondità del centro della Resonance
+* *BWdpth*: Controlla la profondità della larghezza di banda (Bandwidth) della
+Resonance
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/08-saving_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/08-saving_IT.txt
new file mode 100644
index 0000000..211bf36
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/08-saving_IT.txt
@@ -0,0 +1,54 @@
+Persistence
+-----------
+
+Come la gran parte delle applicazioni ZynAddSubFX consente di salvare il tuo
+lavoro e ricaricarlo.
+
+Salvare tutto
+~~~~~~~~~~~~~
+
+Uno dei modi più semplici di salvare il tuo lavoro è quello di salvare l'intera
+sessione. Questo può essere fatto dal menu File e il risultato sarà la creazione
+di un .xmz file.
+Una volta creato, questo file conterrà le tutte le impostazioni della sessione,
+come le accordature microtonali, tutte le patch, tutti i tipi di effetti, ecc...
+
+Salvare delle parti
+~~~~~~~~~~~~~~~~~~~
+
+In alcuni casi salvare tutto non è quello che si desidera.
+Di seguito c'è un esempio di salvataggio di una patch.
+
+Patches
+^^^^^^^
+Per salvare una patch, si può salvare dal menu strumenti o dalla bank window.
+
+Con il menu strumenti si può solo salvare il file in una dato percorso con
+l'estensione .xiz.
+
+Con il menu dei banchi si può assegnare una patch ad un certo slot con un banco.
+Questo strumento rimarrà qui per un futuro uso fin quando non viene cancellato.
+Per vedere la posizione fisica del file .xiz si può controllare la finestra in
+File->Settings->Bank_Root_Dirs, per vedere i percorsi dei banchi.
+
+NOTE: Devi avere i permessi di scrittura per aggiungere uno strumento al banco.
+
+Presets
+^^^^^^^
+
+Avete un'impostazione favorita per un inviluppo o un oscillatore difficile da
+rifare? Allora i preset fanno al caso vostro.
+I preset consentono di salvare le impostazioni per ogni componente che supporta
+operazioni di copia/incolla.
+Questo viene fatto con i prest file (.xpz), che sono memorizzati nelle cartelle
+indicate da File->Settings->Preset_Root_Dirs.
+
+Riepilogo
+~~~~~~~
+
+.Riepilogo delle estensioni
+[literal]
+xmz Everything
+xiz Instrument
+xsz Scale Settings
+xpz Presets
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_A-mididefaults_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_A-mididefaults_IT.txt
new file mode 100644
index 0000000..2c73fb4
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_A-mididefaults_IT.txt
@@ -0,0 +1,22 @@
+Appendice A: Default MIDI
+-------------------------
+
+.Connessioni MIDI di Default
+[literal]
+001 - Modulation Wheel
+007 - Volume
+010 - Pan
+011 - Expression
+064 - Sustain
+065 - Portamento Enable
+071 - Filter Q
+074 - Filter Cutoff
+075 - Bandwidth(*)
+076 - Modulation Amplitude(*)
+077 - Resonance Center Frequency(*)
+078 - Resonance Bandwidth(*)
+120 - All Sounds Off
+121 - Reset All Controllers
+123 - All Notes Off
+
+Le voci con '(*)' non rientrano nelle specifiche General Midi.
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_B-build_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_B-build_IT.txt
new file mode 100644
index 0000000..34127ef
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_B-build_IT.txt
@@ -0,0 +1,61 @@
+Appendice B: Compilare ZynAddSubFX
+--------------------------------
+
+Introduzione a CMake
+~~~~~~~~~~~~~~~~~~~~~
+
+************************************************************************
+Note: Questa sezione è in gran parte copiata dal wiki di OpenSceneGraph:
+http://www.openscenegraph.org/projects/osg/wiki/Build/CMake
+************************************************************************
+
+ZynAddSubFX usa CMake come suo sistema di compilazione unificato. CMake
+è capace di leggere semplici build script dall'albero dei sorgenti e
+creare da questo un sistema di compilazione specifico per la piattaforma.
+Questo sistema di compilazione può avere la forma di VisualStudio project
+files, Unix Makefiles o XCode project files. CMake è capace di individuare
+automaticamente le dipendeze esterne e consente di attivare/disattivare
+la compilazione del modulo e di configurare varie opzioni di compilazione.
+
+L'uso di un sistema di compilazione unificato consente di evitare rotture
+di compilazione che erano presenti nel precedente metodo di compilazione,
+ovvero quello di mantenere tre obiettivi di compilazione separati per
+VisualStudio, Unix "make" and XCode. Si riduce anche l'onere della
+manutenzione per gli sviluppatori base e collaboratori.
+Nell'insieme, l'uso di CMake dovrebbe portare come risultato una migliore
+coerenza e build più stabili su ogni piattaforma per gli utenti finali e
+una maggiore produttività nello sviluppo di nuove versioni.
+Speriamo che con una maggior coerenza di builds tra piattaforme renderà
+più facile per gli sviluppatori utilizzare la 'development version' di
+ZynAddSubFX e aiutare a contribuire ai testing e alle migliorie,
+portando ad un codice di più alta qualità.
+
+Quick start guide
+~~~~~~~~~~~~~~~~~
+
+Per i più impazienti, qui c'è una guida veloce su come compilare
+immediatamente ZynAddSubFX da sorgenti.
+
+************************************************************************
+Note: Ciò presuppone che tu abbia già una copia dei sorgenti.
+************************************************************************
+
+---------------------------------
+#enter the source directory
+cd zynaddsubfx
+
+#make a directory for an out-of-source build
+mkdir build
+cd build
+
+#generate a cmake build project here from the cmake root, which is
+#found in the directory below the current one
+cmake ..
+
+#OPTIONAL: Adjust compile variables in the Cache file:
+ccmake .
+
+#And finally, build as usual using make
+make
+---------------------------------
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_C-doc_getting_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_C-doc_getting_IT.txt
new file mode 100644
index 0000000..3c1ba8a
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/APPENDIX_C-doc_getting_IT.txt
@@ -0,0 +1,63 @@
+Appendix C: Ottenere ZynAddSubFX
+-------------------------------
+
+Normalmente ci sono diversi modi per ottenere una copia di ZynAddSubFX.
+
+SourceForge::
+ http://sourceforge.net/projects/zynaddsubfx/files/
+Distribuition::
+ apt/yum/others
+Git::
+ git clone git://git.code.sf.net/p/zynaddsubfx/code zynaddsubfxg
+
+Introduzione a Git
+~~~~~~~~~~~~~~~~~~~
+
+Per coloro che vogliono vivere "on the bleeding edge" o chi vuole essere certo che
+la prossima release abbia meno bug, si può avere il codice con git.
+Git è usato per gestire il codice sorgente di questo progetto ed è utile per
+ottenere velocemente e facilmente una copia "up-to-date" del codice sorgente.
+
+Ottenere il codice sorgente
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Per avere una copia dei sorgenti di ZynAddSubFX tutto il necessario da fare è:
+
+---------------------------------------------
+git clone git://git.code.sf.net/p/zynaddsubfx/code zynaddsubfx
+
+cd zynaddsubfx
+
+#Download additional resources
+git submodule init
+git submodule update
+---------------------------------------------
+
+Ora dovresti essere nella directory del codice sorgente.
+
+Per compilare facilmente si guardi l'Appendice B del manuale.
+
+Dare un'occhiata ai branch
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Diciamo che lo sviluppo si è esteso ad una creazione di una feature che si vuole
+vedere in anteprima.
+Per il bene di questa guida, supponiamo che il nome del branch della feature che
+verrà è 'foo'.
+
+-----------------------------------------
+#checkout the foo branch from sourceforge
+git checkout --track -b foo origin/foo
+
+#lets checkout the primary branch again
+git checkout master
+
+#hop back to the other branch
+git checkout foo
+----------------------------------------
+
+Ora si dovrebbe essere in grado di cambiare branches e andare nella build-directory
+(come descritto in Appendice B) e ricompilare ZynAddSubFX.
+
+NOTE: Quando si usano i branches può venir meno un po' di stabilità.
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/IT/zynaddsubfx_IT.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/zynaddsubfx_IT.txt
new file mode 100644
index 0000000..1d9c3a0
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/IT/zynaddsubfx_IT.txt
@@ -0,0 +1,28 @@
+Zynaddsubfx
+===========
+:Author: Paul Nasca and Mark McCurry, translated by Ilario Glasgo
+
+include::01-intro_IT.txt[]
+
+include::02-filter_IT.txt[]
+
+include::03-lfo_IT.txt[]
+
+include::04-envelope_IT.txt[]
+
+include::05-adsynth_IT.txt[]
+
+include::06-controller_IT.txt[]
+
+/////////////////////////////
+include 07-effects_IT.txt
+include nrpn.txt
+/////////////////////////////
+
+include::08-saving_IT.txt[]
+
+include::APPENDIX_A-mididefaults_IT.txt[]
+
+include::APPENDIX_B-build_IT.txt[]
+
+include::APPENDIX_C-doc_getting_IT.txt[]
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/README.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/README.txt
new file mode 100644
index 0000000..5f1dcaa
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/README.txt
@@ -0,0 +1,9 @@
+Requirements for this directory:
+
+ * standalone (latex module)
+ * pgfplots (latex module)
+ * pst-sigsys (latex module)
+ * auto-pst-pdf (latex module)
+ * pst-tools (latex module)
+ * gnuplot
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/adsynth.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/adsynth.txt
new file mode 100644
index 0000000..545745d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/adsynth.txt
@@ -0,0 +1,148 @@
+AdSynth
+-------
+
+AdSynth, a primarily additive synthesis engine, is one of the three major
+synthesis engines available in ZynAddSubFX.
+The basic concept of this engine is the summation of a collection of voices,
+each of which consist of oscillators.
+
+High Level (Global)
+~~~~~~~~~~~~~~~~~~~
+
+AdSynth's global level consists of the elements shown in the below figure:
+
+.AdSynth Global Elements
+image::gen/ad-note.png[scalewidth="50%",width="700"]
+
+The global level of adsynth is almost entirely composed of previously discussed
+elements.
+However a few new features appear here, this includes velocity sensing, punch,
+detune options and realative bandwidth , and resonance.
+
+.AdSynth Global Window
+image::images/ad-global.png[]
+
+
+Velocity sensing is simply an exponental transformation from the note's velocity
+to some parameter change.
+The below diagram shows how the velocity senseing controls affects this
+translation over the whole range of possible note velocities.
+
+.Velocity Sensing Chart
+image::gen/velf.png[scalewidth="50%",width="600"]
+
+The puch of a note in AdSynth is a constant amplification to the output at the
+start of the note, with its length determined by the punch time and stretch and
+the amplitude being determined by the punch strength and velocity sensing.
+The relBW control in the frequency pane is effectively a multiplier for detuning
+all voices within an adnote.
+
+NOTE: TODO Talk about resonance
+
+
+The sum of the voices are passed through filters and amplification to produce
+the final sound.
+This could lead one to think that ad-note is just a bunch of minor
+postprocessing and at this level much of the sound generation is hidden.
+
+Voices
+~~~~~~
+
+The voice gives access to a similar setup to the global parameters and then some
+more, such as the modulator, oscillator, and unison features.
+
+.AdSynth Voice Window
+image::images/ad-voice.png[]
+
+Modulation
+^^^^^^^^^^
+
+Within the options for modulation, one can select:
+
+* Morph
+* Ring Modulation
+* Phase Modulation
+* Frequency Modulation
+* Disabled
+
+Unison
+^^^^^^
+
+Unison is useful in creating the chorus like sound of many simultaneous
+oscillators
+
+Oscillator
+~~~~~~~~~~
+
+The oscillator is lets you choose the basic waveform, which oscillates while
+the sound is playing and is then further modified.
+
+.Oscillator Window
+image::images/uioscil.png[]
+
+[[adsynth::oscilllator::types_of_waveshaping, Types of Waveshaping]]
+Types of Waveshaping
+^^^^^^^^^^^^^^^^^^^^
+
+Waveshaping can be done using the *Wsh* area in the Oscillator editor.
+
+The type of distortion has much influence on how the overtones are being placed.
+Sometimes, you get a "fat" bass, and sometimes, high frequencies are added,
+makeing the sound "crystal clear".
+
+Atan & Sigmoid
+++++++++++++++
+
+This is the default setting. It is an easy way to apply loudness to a
+wave without getting undesired high overtones. Thus, it can be used both for
+making instruments that sound like "real" ones, but also for electronic music.
+The transformation turns, roughly said, every amplitude into a square amplitude.
+Thus, sine, power, pulse and triangle turn into a usual square wave, while a saw
+turns into a phased square wave. A chirp wave turns into a kind of phase
+modulated square wave.
+
+Quants
+++++++
+
+http://en.wikipedia.org/wiki/Quantization_%28sound_processing%29[Quantization]
+adds high overtones early. It can be seen as an unnatural effect, which is often
+used for electronic music.
+
+The transformation is a bit similar to building
+the http://en.wikipedia.org/wiki/Riemann_sum[lower sum] of a wave,
+mathematically said. This means that the transformation effect turns your
+"endless high" sampled wave into only a few samples. The more distortion you
+will apply, the less samples will be used. Indeed, this is equivalent to say
+that more input amplification is used. To see this, here is a small sample of
+code, where "ws" is the (correctly scaled amount of input amplification, and "n"
+the number of original samples.
+
+---------------------------------
+for(i = 0; i < n; ++i)
+ smps[i] = floor(smps[i] / ws + 0.5f) * ws;
+---------------------------------
+
+NOTE: If you turn on quantisation very high, you might be confused
+that, especially high notes, make no sound. The reason: High frequencies are
+"forgotten" if you sample with only few samples. Also, the sign of an amplitude
+can be forgotten. This behaviour might make some quantisations a bit unexpected.
+
+Limiting & Clipping
++++++++++++++++++++
+
+http://en.wikipedia.org/wiki/Limiting[Limiting] usually means that for a signal,
+the amplitude is modified because it exceeds its maximum value. Overdrive, as
+often used for guitars, is often achieved by limiting: It happens because an
+amplifier "overdrives" the maximum amplitude it can deliver.
+
+ZynAddSubFX has two types of limiting. Soft limiting, here as *Lmt*, means
+that the sound may not exceed a certain value. If the amplitude does so, it will
+simply be reduced to the limiting value. The overtones are generated in the
+lower frequencies first.
+
+Hard limiting, is also called clipping and abbreviated *Clip*. This means that
+if the maximum is exceeded, instead of being constant at the limiting value, the
+original signal still has some influence on the output signal. Still, it does
+not exceed the limiting value. For ZynAddSubFX, a signal exceeding the limiting
+value will continue to grow "in the negative". This leads to overtones being
+generated on the full frequency band.
\ No newline at end of file
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/build.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/build.txt
new file mode 100644
index 0000000..35de26a
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/build.txt
@@ -0,0 +1,59 @@
+Appendix B: Building ZynAddSubFX
+--------------------------------
+
+Introduction to CMake
+~~~~~~~~~~~~~~~~~~~~~
+
+********************************************************************
+Note: This section is mostly copied from the OpenSceneGraph wiki, at:
+http://www.openscenegraph.org/projects/osg/wiki/Build/CMake
+********************************************************************
+
+ZynAddSubFX uses CMake as its unified build system. CMake
+is able to read simple build scripts from the source tree and create
+from this a platform-specific build system. This build system can be in
+the form of VisualStudio project files, Unix Makefiles or XCode project
+files. CMake is able to automatically locate external dependencies, and
+allows you to toggle on/off module compilation and configure various
+build options.
+
+The use of a unified build system has allowed to avoid build breakages
+that were common in the previous build method of maintaining three
+separate build targets for VisualStudio, Unix "make" and XCode. It also
+reduces the maintenance burden for core developers and contributors.
+Taken together usage of CMake should result in better consistency and
+more stable builds across all platforms for end users and a greater
+productivity in development of new versions. Hopefully with greater
+consistency of builds across platforms it will be easier for developers
+to use the development version of ZynAddSubFX and help contribute
+to its testing and refinement, leading to a high-quality code base.
+
+Quick start guide
+~~~~~~~~~~~~~~~~~
+
+For the impatient ones, here is a quick guide on how to immediately
+build ZynAddSubFX from source.
+
+**************************************************************
+Note: This assumes that you already have a copy of the source.
+**************************************************************
+
+---------------------------------
+#enter the source directory
+cd zynaddsubfx
+
+#make a directory for an out-of-source build
+mkdir build
+cd build
+
+#generate a cmake build project here from the cmake root, which is
+#found in the directory below the current one
+cmake ..
+
+#OPTIONAL: Adjust compile variables in the Cache file:
+ccmake .
+
+#And finally, build as usual using make
+make
+---------------------------------
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/controller.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/controller.txt
new file mode 100644
index 0000000..8035565
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/controller.txt
@@ -0,0 +1,54 @@
+Controller
+---------
+
+image::./images/uicontroller.png[]
+
+General
+~~~~~~~
+
+* *ModWh*: Modullation Wheel depth
+* *Exp MWh*: Exponental Modulation Wheel (changes modulation scale to
+ exponental)
+* *BwDpth*: Bandwidth Depth
+* *Exp BW*: Exponental Bandwidth (changes badwidth scale to exponental)
+* *PanDpth*: Panning Depth
+* *FltQ*: Filter Q (ressonance) depth
+* *FltCut* Filter Cutoff frequency depth
+* *Expr*: enable/disable expression
+* *Vol*: enable/disable receiving volume controller
+* *FMamp*: enable/disable receiving Modulation Amplitude controller (76)
+* *Sustain*: enable/disable sustain pedal
+* *PWheelB.Rng (cents)*: Pitch Wheel Bend Range (cents; 100 cents = 1 halftone)
+
+Portamento
+~~~~~~~~~~
+
+* *Rcv.*: If the part receives portamento On/Off (65) controller
+* *time*: The duration of the portamento
+* *thresh*: The threshold of the portamento.
+It represents the minimum or the maximum number of halftones
+(or hundried cents) required to start the portamento.
+The difference is computed between the last note and current note.
+* *th.type*: The threshold type.
+Checked means that the portamento activates when the difference of frequencies
+is above the threshold ("thresh"); not checked is for below the threshold.
+
+NOTE: The threshold refers to the frequencies and not to MIDI notes
+ (you should consider this if you use microtonal scales).
+
+
+Proportinal Portamento
+^^^^^^^^^^^^^^^^^^^^^^
+////
+TODO: add graphs to explain prp.rate and prp. depth
+////
+
+* *Propt.*: If the portamento is proportinal to ratio of frequencies
+* *Prp. Rate*: Ratio needed to double the time of portamento
+* *Prp. Dpth*: The divergence from
+
+Resonance
+~~~~~~~~~
+
+* *CFdpth*: resonance center controller depth
+* *BWdpth*: resonance bandwidth controller depth
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/effects.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/effects.txt
new file mode 100644
index 0000000..a0d93f2
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/effects.txt
@@ -0,0 +1,531 @@
+Effects
+-------
+
+Effects are, generally, blackboxes that transform audio signals in a
+specified way. More exactly, the only input data for an effect in ZynAddSubFX
+is:
+
+* an array of samples, which is read *on line*
+* the current system time (used for LFOs)
+
+The output is the transformed array of samples.
+
+NOTE: As described, effects have no information about anything else. For
+example, key presses are not recognized. Therefore, pressing a key does not
+initiate the LFO. Phase knobs will always be relative to a *global* LFO, which is
+only dependent on the system time.
+
+ZynAddSubFX has 3 types of effects:
+
+* System Effects
+* Insertion Effects
+* Instrument Effects
+
+TODO: Describe these 3 types (their differences).
+
+[[effects::general_topics, General Topics]]
+General topics
+~~~~~~~~~~~~~~
+
+* *Wetness* determines the mix of the results of the effect and its input. This
+mix is made the effects output. If an effect is wet, it means that nothing of
+the input signal is bypassing the effect. If it is dry, then the effect has no
+effect. TODO: Difference between Volume and D/W?
+* *Pan* lets you apply panning, which means that the sound source can move to
+the right or left. Set it to 0.0 to only hear output on the right side, or to
+the maximum value to only hear output on the left side.
+* *LRc.* or *L/R* let you apply crossover.
+* *Filter stages* are the number of times that this filter is applied in series.
+So, if this number is 1, you simply have this one filter. If it is two, the
+sound first passes the filter, and the results then pass the same filter again.
+In ZynAddSubFX, the wetness is applied after all stages were passed.
+* *LFOs* are, as the name says, oscillators with, compared to the frequency of
+the sound, low frequency. They often appear in order to control the effect.
+They can have some of the following controls:
+** *LFO Type* determines the shape of the LFO. If not present, the LFO is a
+sine wave.
+** *Freq* determines the LFO's frequency.
+** *Dpth* is a multiplier to the LFO. Thus, it determines the LFOs amplitude
+and its influence.
+** *Rnd* is the LFO amplitude's randomness
+** *St.df* lets you determine how much left and right LFO are phase shifted.
+64.0 means stereo, higher values increase the right LFO relatively to the left
+one.
+********************************************************************
+Hint: Keep in mind that Effects that can be controlled by LFO can also be
+controlled arbitrary: Set the LFO depth to zero and manipulate the phase knob
+(e.g. with NRPNs or maybe via OSC in the future).
+********************************************************************
+
+Equalizer
+~~~~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+An http://en.wikipedia.org/wiki/Filter_%28signal_processing%29[equalizer] is a
+filter effect that applies different volume to different frequencies of the
+input signal. This can, for example, be used to "filter out" unwanted
+frequencies.
+ZynAddSubFX's implementations follow the
+http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt["Cookbook formulae for
+audio EQ"] by Robert Bristow-Johnson.
+
+Filter Types
+^^^^^^^^^^^^
+
+This topic is completely discussed in <<filters, the Filters section>>.
+
+Usage
+^^^^^
+
+We describe all parts of the GUI here. The term passband (or often just "band")
+refers to the amount of frequencies which are not significantly attenuated by
+the filter.
+
+* *Gain* (on the left) defines an offset which is added to the complete filter.
+* *B.* lets you choose the passband number. Multiple passbands define one
+filter. This is important if you want multiple filters to be called after each
+other. Note that filters are commutative.
+* *T.* lets you choose the current filter's type, as described above.
+* *Freq* describes the frequencies where the filter has its poles. For some
+filters, this is called the "cutoff" frequency. Note, however, that a bandpass
+filter has two cutoff frequencies.
+* *Gain* is only active for some filters and sets the amount of a special peak
+these filters have. Note that for those filters, using the predefined gain makes
+them effectless.
+* *Resonance* lets you describe a peak at the given frequency for filters with
+2 poles. This can be compared to real physical objects that have more gain at
+their resonance frequency.
+* *St.* lets you define multiple filter stages. This is equivalent to having
+multiple copies of the same filter in sequence.
+
+Chorus
+~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+In a chorus, many people sing together. Even if each of them sings at exactly
+the same frequency, all their voices usually sound different. We say they have a
+different timbre. Timbre is the way we perceive sound and makes us differ
+between different music instruments. This is, physically, achieved by varying
+both the amplitude envelope and the frequency spectrum. Multiple sounds with
+slightly different timbres make a sound more shimmering, or powerful. This is
+called the chorus effect.
+
+Function
+^^^^^^^^
+
+The chorus effect can be achieved by multiple people singing together. In
+a concert, there are many instruments, resulting in the same effect. When making
+electronic music, we only have an input wave and need to generate these
+different timbres by ourselves. ZynAddSubFX therefore simply plays the sound,
+pitch modulated by an LFO, and adds this to the original sound. This explains
+the diagram below: The multiple pitches are generated by a delayed version of
+the input. This version is being pitched by an LFO. More detailled, this pitch
+is generated by varying the reading speed of the delayed sound; the variation
+amount is controlled by an LFO.
+
+image:./gen/chorus.png[width=700,
+ title="The chorus effect. z^(-n.m) describes the delay."]
+
+TODO: Add LFO pointing to delay?
+
+Related effects to Chorus are Flangers. Flangers can be described as Chorus
+with very short LFO delay and little LFO depth. You can imagine a flanger as two
+copies of a sound playing at almost the same time. This leeds to interference,
+which can be clearly heared. It is popular to apply flangers to guitars, giving
+them more "character".
+
+Usage
+^^^^^
+
+* First, crossover is applied.
+* The following 5 knobs (*Freq*, *Rnd*, *LFO Type*, *St.df*, *Depth*) control
+the LFO for the pitch. If the depth is set to zero, the pitch will not be
+changed at all.
+* *Delay* is the time that the delayed sound is delayed "on average". Note that
+the delay also depends on the current pitch.
+* After the correct element of the sound buffer is found using the LFO, the
+*Fb* knob lets you set how loud it shall be played. This is mostly redundant to
+the *D/W* knob, but we have not applied panning and substraction yet.
+* Next, the singal can be negated. If the *Substract* Checkbox is activated,
+the amplitude is multiplied by -1.
+* Finally, *Pan* lets you apply panning.
+
+Distortion
+~~~~~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+Distortion means, in general, altering a signal. Natural instruments
+usually produce sine like waves. A wave is transformed in an unnatural way when
+distortion is used. The most distorted waves are usually pulse waves. It is
+typical for distortion to add overtones to a sound. Distortion often increases
+the power and the http://en.wikipedia.org/wiki/Loudness[loudness] of a signal,
+while the db level is not increased. This is an important topic in the
+http://en.wikipedia.org/wiki/Loudness_war[Loudness War].
+
+NOTE: As distortion increases loudness, distorted music can cause ear damage
+at lower volume levels. Thus, you might want to use it a bit careful.
+
+Distortion can happen in many situations when working with audio. Often, this is
+not wanted. In classical music, for example, distortion does not occur
+naturally. However, distortion can also be a wanted effect. It is typical for
+Rock guitars, but also present in electronic music, mostly in Dubstep and
+DrumNBass.
+
+The basic components of distortion are mainly
+
+* a preamplifier
+* the waveshaping function
+* filters
+
+Preamplification changes the volume before the wave is shaped, and is indeed the
+amount of distortion. For example, if you clip a signal, the louder the input
+gets, the more distortion you will get. This can have different meanings for
+different types of distortions, as described below.
+
+********************************************************************
+The filters are practical. A reason for using them afterwards is that distortion
+can lead to waves with undesired high frequency parts. Those can be filtered out
+using the LPF. A reason for using filters before applying is to achieve
+multiband distortion. ZynAddSubFX has no "real" multiband distortion by now,
+however.
+********************************************************************
+
+Types of Distortion
+^^^^^^^^^^^^^^^^^^^
+
+This topic is completely discussed in
+<<adsynth::oscilllator::types_of_waveshaping, the Oscillator Section>>. Note
+that you can use the
+Oscillator editor in order to find out what your distortion effect does. Also
+note that while the Oscillator editor's distortion is limited to some
+oscillators you can produce in the Oscillator editor, the distortion effect can
+be used on every wave that you can generate with ZynAddSubFX.
+
+Function
+^^^^^^^^
+
+We explain the functionality in a diagram and list the components below.
+
+image:./gen/distort.png[width=700,
+ title="The components of a distortion function."]
+
+* Negation is the first thing to happen. If the *Neg* Checkbox is activated, the
+amplitude is multiplied by -1.
+* Panning is applied. Note, however, that you have to activate the
+Stereo Checkbox, labeled *St*, before.
+* Pre amplification is done next. The amount can be changed using the
+*Drive* nob. Indeed, this is the amount of distortion. For example, if you clip
+a signal, the louder the input gets, the more distortion you will get. This can
+have different meanings for different types of distortion, as described above.
+* *HPF* and *LPF* are filters with 2 poles. Whether they are used before or
+after the waveshape, depends on the checkbox labeled *PF*.
+* The next step is the wave shape. This defines how the wave is
+actually modified. The *Type* ComboBox lets you define how. We will discuss some
+types below.
+* After the wave shape, we scale the level again. This is called
+output amplification. You can change the value using the *Level* knob.
+* Crossover is the last step. This is controlled by the knob *LR Mix* and
+means that afterwards, a percentage of the left side is applied to the right
+side, and, synchronously, the other way round. It is a kind of interpolation
+between left and right. If you set the LR Mix to 0.0, you will always have a
+stereo output.
+
+Dynamic Filter
+~~~~~~~~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+A dynamic filter is, as the name says, a filter which changes its parameters
+dynamically, dependent on the input and current time. In ZynAddSubFX,
+frequency is the only variable parameter. It can be used as an "envelope
+following filter" (sometimes referenced "Auto Wah" or simply "envelope filter").
+
+Function
+^^^^^^^^
+
+Though this filter might look a bit complicated, it is actually easy. We divide
+the parameters into two classes:
+
+* *Filter Parameters* are the ones you get when you click on *Filter*. They
+give the filter its basic settings.
+* *Effect Parameters* are the other ones that control how the filter changes.
+
+The filter basically works like this: The input signal is passed through a
+filter which dynamically changes its frequency. The frequency is an additive of:
+
+* the filter's base frequency
+* an LFO from the effect parameters
+* the "amplitude" of the input wave
+
+image:./gen/dynamic.png[width=700,
+ title="The components of a dynamical filter"]
+
+The amplitude of the input wave is not the current amplitude, but the so called
+https://en.wikipedia.org/wiki/Root_mean_square["Root Mean Square (RMS)"] value.
+This means that we build a mean on the current amplitude and the past values.
+How much the new amplitude takes influence is determined by the *Amplitude
+Smoothness* (see below).
+
+********************************************************************
+RMS value plays an important role in the term loudness. A fully distorted
+signal can sound 20 db louder due to its higher RMS value. This filter takes
+this into account, depending on the smoothness.
+********************************************************************
+
+Usage
+^^^^^
+
+* The 4 knobs in the middle (*Freq*, *Rnd*, *LFO Type*, *St.df*) control the
+LFO.
+* Two knobs let you control the way how the RMS value of the amplitudes is
+measured:
+** *A.M* sets the Amplitude Smoothness (this is described above). The higher
+you set this value, the more slow will the filter react.
+** *A.Inv.*, if being set, negates the (absolute) RMS value. This will lower
+the filter frequency instead of increasing it. Note that this will not have
+much effect if the effects input is not very loud.
+* The following controls define the mix of the LFO and the amplitude.
+** *A.S* sets the Amplitude Sensing (i.e. how much influence the amplitude
+shall have).
+** *LfoD* sets the LFO depth.
+* The filter button lets you choose the filter type.
+* After the input signal has passed through the filter, *Pan* can apply
+panning.
+
+Echo
+~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+The echo effect, also known as
+http://en.wikipedia.org/wiki/Delay_%28audio_effect%29[delay effect], simulates
+the natural reflection of a sound. The listener can hear the sound multiple
+times, usually decreasing in volume. Echos can be useful to fill empty parts of
+your songs with.
+
+Function
+^^^^^^^^
+
+In ZynAddSubFX, the echo is basically implemented as the addition of the
+current sound and a delayed version of it. The delay is implemented as in the
+picture below. First, we add the delayed signal to the effect input. Then,
+they pass an LP1. This shall simulate the effect of dampening, which means that
+low and especially high frequencies get lost earlier over distance than middle
+frequencies do. Next, the sound is delayed, and then it will be output and added
+to the input.
+
+image:./gen/echo.png[width="700",
+ title="The echo includes a fb line, labeled as z^-n, and a delay."]
+
+********************************************************************
+The exact formula in the source code for the dampening effect is as follows:
+
+latexmath:[$Y(t) := (1-d) \cdot X(t) + d \cdot Y(t-1)$],
+
+where latexmath:[t] be the time index for the input
+buffer, latexmath:[d] be the dampening amount and latexmath:[X,Y] be the input,
+respective the output of the dampening. This solves to
+
+latexmath:[$Y(z) = Z(Y(t)) = (1-d) \cdot X(z) + d \cdot Y(z) \cdot z^{-1}$]
+
+latexmath:[$\Leftrightarrow H(z) := \frac{Y(z)}{X(z)} = \frac{1-d}{1 -
+d \cdot z^{-1}}$]
+
+which is used in latexmath:[$Y(z) = H(z) \cdot X(z)$]. So latexmath:[$H(z)$] is
+indeed a filter, and by looking at it, we see that it is an LP1. Note that
+infinite looping for d=1 is impossible.
+********************************************************************
+
+Description
+^^^^^^^^^^^
+
+* *Pan* lets you apply panning of the input.
+* *Delay* sets the time for one delay.
+* *LRdl.* means Left-Right-Delay. If it is set to the middle, then both sides
+are delayed equally. If not, then the left echo comes earlier and the right
+echo comes (the same amount) later than the average echo; or the other way
+round. Set the knob to 0 to hear on the right first.
+* *LRc.* applies crossover.
+* Feedback describes how much of the delay is added back to the input. Set
+*Fb.* to the maximum to hear an infinite echo, or to the minimum to just
+hear a single repeat.
+* The *Damp* value lets the LP1 reject higher frequencies earlier if
+increased.
+
+Reverb
+~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+A http://en.wikipedia.org/wiki/Reverberation[Reverberation] actually expresses
+the effect of many echoes being played at the same time. This can happen in an
+enclosed room, where the sound can be reflected in different angles. Also, in
+nature, thunders approximate reverbs, because the sound is reflected in many
+different ways, arriving at the listener at different times.
+
+In music, reverbs are popular in many ways. Reverbs with large room size can be
+used to emulate sounds like in live concerts. This is useful for voices, pads,
+and hand claps. A small room size can simulate the sound board of string
+instruments, like guitars or pianos.
+
+Function
+^^^^^^^^
+
+As mentioned, a reverb consists of permanent echo. The reverb in ZynAddSubFX is
+more complex than the echo. After the delaying, comb filters and then allpass
+filters are being applied. These make the resulting sound more realistic. The
+parameters for these filters depend on the roomsize. For details, consider the
+information about https://ccrma.stanford.edu/~jos/pasp/Freeverb.html[Freeverb].
+
+image:./gen/reverb.png[width=700,
+ "The reverb, being similar to the echo."]
+
+Description
+^^^^^^^^^^^
+
+* The *Type* ComboBox lets you select a reverb type:
+** *Freeverb* is a preset. It was proposed by Jezar at Dreampoint.
+** *Bandwidth* has the same parameters for the comb and allpass filters, but it
+applies a unison before the LP/HP. The unison's bandwidth can be set using *bw*.
+** Random chooses a random layout for comb and allpass each time the type or
+the roomsize is being changed.
+* The roomsize (*R.S.*) defines parameters only for the comb and allpass
+filters.
+* *Time* controls how long the whole reverb shall take, including how slow the
+volume is decreased.
+* The initial delay (*I.del*) is the time which the sounds need at least to
+return to the user. The initial delay feedback (*I.delfb*) says how much of the
+delayed sound is added to the input.
+* Low pass filter (*LPF*) and high pass filter (*HPF*) can be applied before
+the comb filters.
+* The dampening control (*Damp*) currently only allows to damp low frequencies.
+Its parameters are being used by the comb and allpass filters.
+* *Pan* lets you apply panning. This is the last thing to happen.
+
+
+Phaser
+~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+The http://en.wikipedia.org/wiki/Phaser_%28effect%29[Phaser] is a special
+dynamic filter. The result is a sweeping
+sound, which is
+often used on instruments with a large frequency band, like guitars or strings.
+This makes it typical for genres like rock or funk, where it is often modulated
+with a pedal, but also for giving strings a warm, relaxing character.
+
+Function
+^^^^^^^^
+
+The audio signal is split into two paths. One path remains unchanged. The other
+one is sent to a delay line. The delay time (the so called *phase*) is made
+dependent on the frequency. Therefore, an all-pass filter is applied to the
+signal, which *preserves* the amplitude, but determines the delay time. In the
+end, both paths are added.
+
+The following picture describes how this works on white noise. Light blue
+signalises that the frequency is not present at the current time, and dark blue
+signalises the opposite. The dark blue peaks appear if the delay time is very
+short, because then, the second path almost equals the first one, which results
+in duplication of the signal. If the delay line is very long, then it is --- in
+the case of white noise --- totally at random whether the delayed signal
+currently duplicates the unchanged path, or whether it cancels it out to zero.
+This random effect results in white noise between the clear blue structures.
+
+image:./images/phaser-spectrogram.jpg[width="700",
+ title="Spectrogram of an 8-stage phaser
+ modulated by a sine LFO applied to white noise."]
+
+Phaser Types
+^^^^^^^^^^^^
+
+ZynAddSubFX offers different types of phasers:
+
+* Analog and "normal" phasers. Analog phasers are more complicated. They sound
+punchier, while normal phasers sound more fluently. However, analog filters
+usually need more filter stages to reach a characteristic sound.
+* Sine and triangle filters. Note that an analog triangle filter with many poles
+is a barber pole filter and can be used to generate
+http://en.wikipedia.org/wiki/Shepard_tone[Shepard Tones],
+i.e. tones that seem to increase or decrease with time, but do not really.
+* The LFO function can be squared. This converts the triangle wave into a hyper
+sine wave. The sine squared is simply a faster sine wave.
+* TODO: Barber is deactivated, since PLFOtype is only 0 or 1?
+
+Description
+^^^^^^^^^^^
+
+For the normal phaser, first, the LFO is generated:
+
+* There are 4 controls (*Freq*,*Rnd*,*LFO tpye*,*St.df*) that define the
+LFO.
+* *Phase* and *Depth* are applied afterwards in the usual way (TODO: I don't
+understand the code here for the normal phase...). For the analog phaser,
+*Phase* is not implemented, yet.
+** If *hyp* is being set, then the LFO function is being squared.
+
+Next, the input is being used.
+
+* *Analog* decides whether the phaser is analog or "normal".
+* First, *Pan* applies panning to the original input in every loop.
+* Next, barber pole phasing is being applied (Analog only).
+* *Fb* applies feedback. The last sound buffer element is (after
+phasing) multiplied by this value and then added to the current one. For normal
+filter, the value is added before, for analog after the first phasing stage.
+* Now, *Stages* phasing stages are being applied. *dist* sets the distortion
+for when applying the phasing stages. This has only effect for analog phasers.
+* The feedback is taken now.
+* In the end, *Substract* inverts the signal, multiplying it by -1.
+
+Alienwah
+~~~~~~~~
+
+Introduction
+^^^^^^^^^^^^
+
+The AlienWah effect is a special, dynamic
+http://en.wikipedia.org/wiki/Formant[formant] filter (TODO: is this true?).
+Paul Nasca named it AlienWah because it sounded "a bit like wahwah, but more
+strange". The result of the filter is a sound varying between the
+vocals "Ahhhhh" (or "Uhhhhh") and "Eeeeee".
+
+Function
+^^^^^^^^
+
+The way that the filter moves between the two vocals is mainly
+described by an LFO. A bit easified, Paul Nasca has stated the formula (for
+latexmath:[$i^2=-1; R<1$]) as
+
+latexmath:[$fb=R*(\cos(\alpha)+i*\sin(\alpha))$]
+
+latexmath:[$y_n=y_{n-delay}*R*(\cos(\alpha)+i*\sin(\alpha))+x_n*(1-R)$].
+
+The input latexmath:[$x_n$] has the real part of the samples from the wavefile
+and the imaginary part is zero. The output of this effect is the real part of
+latexmath:[$y_n$]. latexmath:[$\alpha$] is the phase.
+
+Description
+^^^^^^^^^^^
+
+* *Pan*
+* The following 5 controls (*Freq*,*Rnd*,*LFO tpye*,*St.df*, *Dpth*) define the
+LFO.
+** *Fb*
+
+** *Delay* If this value is low, the sound is turned more into a
+"wah-wah"-effect.
+** *Phase* See latexmath:[$\alpha$] in the above formula. This lets you set
+where the vocal is between "Ahhhhh" and "Eeeeee".
+** *L/R* applies crossover in the end of every stage. This is currently not
+implemented for the Analog Phaser.
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/envelope.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/envelope.txt
new file mode 100644
index 0000000..157843e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/envelope.txt
@@ -0,0 +1,131 @@
+Envelopes
+---------
+
+Introduction
+~~~~~~~~~~~~
+Envelopes control how the amplitude, the frequency, or the
+filter changes over time.
+
+Amplitude Envelopes
+~~~~~~~~~~~~~~~~~~~
+
+These envelopes controls the amplitude of the sound.
+In ZynAddSubFX, amplitude envelopes can be linear or logarithmic.
+In the next image, it is shown the differences between these envelopes.
+
+image::images/envelope1.png[Alt text]
+
+The amplitude envelope is divided into:
+
+* *Attack*: Begins at the Note On. The volume starts from 0 to the maximum.
+In ZynAddSubFX, the attack is always linear.
+* *Decay*: The volume drops from the maximum value to a level called "Sustain level"
+* *Sustain*: The volume remains constant until the key is depressed (Note Off).
+After this, the last stage take place.
+* *Release*: The volume drops to zero
+
+
+Frequency Envelopes
+~~~~~~~~~~~~~~~~~~~
+
+These envelopes controls the frequency (more exactly, the pitch) of
+the oscillators.
+The following picture draws the stages of these envelopes.
+
+image::images/envelope2.png[Alt text]
+
+The dotted line represents the real pitch of the sound without the
+envelope.
+
+The frequency envelopes are divided into 3 stages:
+
+* *Attack*: Begins at the Note On. The frequency starts from a certain value and
+glides to the real frequency of the note.
+* *Sustain*: The frequency is the same on over the sustain period
+* *Release*: This stage begins on Note Off and glides the frequency of the note
+to a certain
+value
+
+Filter Envelopes
+~~~~~~~~~~~~~~~~
+These envelopes controls the cutoff frequency of the filters and are divided
+into
+
+image:images/envelope3.png[Alt Text]
+
+* *Attack*: Begins at the Note On. The cutoff frequency starts from a certain value and glides to another value
+* *Decay*: The cutoff frequency continues to glide to the real cutoff frequency value of the filter (dotted line)
+* *Sustain*: the cutoff frequency is the same on over the sustain period (dotted line)
+* *Release*: this stage begins on Note Off and glides the filter cutoff frequency of the note to a certain value
+
+Freemode Envelopes
+~~~~~~~~~~~~~~~~~~
+
+For all envelope there is a mode that allows the user to set an arbitrary number of stages and control points. This mode is called Freemode.
+
+image:images/envelope4.png[Alt Text]
+
+Only stage that always remains defined is the Sustain, where the envelopes freezes until a Note Off event.
+
+User Interface
+~~~~~~~~~~~~~~
+All the envelope types has some common controls:
+
+* *E*: Shows a window that you can view the real envelope shape or convert to free mode to edit it
+* *Stretch*: How the envelope is stretched according the note.
+On the higher notes the envelopes are shorter than lower notes.
+In the leftmost value, the stretch is zero.
+The rightmost use a stretch of 200%; this means that the envelope is stretched about 4 times/octave.
+* *frcR*: Forced release.
+This means that if this option is turned on, the release will go to the final value, even if the sustain stage is not reached. Usually, this must be set.
+
+
+The parameters for Amplitude Envelopes for ZynAddSubFX are:
+
+image:images/uienvelope3.jpg[Alt Text]
+
+* *A.dt*: Attack duration
+* *D.dt*: Decay duration
+* *S.Val*: Sustain value
+* *R.dt*: Release time
+* *L*: If this option is set, the envelope is linear, otherwise, it will be
+logarithmic
+
+
+For Frequency Envelopes the interface has the following parameters:
+
+image:images/uienvelope2.jpg[Alt Text]
+
+* *A.val*: Attack value
+* *A.dt*: Attack duration
+* *R.dt*: Release time
+* *R.val*: Release value
+
+
+Filter Envelopes has the parameters:
+
+image:images/uienvelope1.jpg[Alt Text]
+
+* *A.val*: Attack value
+* *A.dt*: Attack duration
+* *D.val*: Decay value
+* *D.dt*: Decay time
+* *R.dt*: Release time
+* *R.val*: Release value
+
+The Freemode envelopes has a separate window to set the parameters and controls:
+
+image:images/uienvelope0.jpg[]
+
+* *Control points*: You can move the points using the mouse.
+In the right on the windows, it is shown the total duration of the envelope.
+If the mouse button will be pressed on a control point, it will be shown the
+duration of the stage where the point is.
+* *FreeMode*: this button activates or deactivates the freemode mode.
+* *Add Point*: Adds the point next to the current selected point.
+You can select a point by clicking on it.
+* *Delete point*: Removes the point from the envelope.
+* *Sust.*: Set the sustain point. It is shown using the yellow line.
+* *Str.*: Envelope stretch
+
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/filter.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/filter.txt
new file mode 100644
index 0000000..b0f1c75
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/filter.txt
@@ -0,0 +1,81 @@
+[[filters]]
+Filters
+-------
+:Author: Mark McCurry
+:Date: June 24, 2012
+
+ZynAddSubFX offers several different types of filters, which can be used to
+shape the spectrum of a signal.
+The primary parameters that affect the characteristics of the filter are the
+cutoff, resonance, filter stages, and the filter type.
+
+* *Cutoff*: This value determines which frequency marks the changing point for
+ the filter. In a low pass filter, this value marks the point where
+ higher frequencies are attenuated.
+* *Resonance*: The resonance of a filter determines how much excess energy is
+ present at the cutoff frequency. In ZynAddSubFX, this is
+ represented by the Q-factor, which is defined to be the cutoff
+ frequency divided by the bandwidth. In other words higher Q
+ values result in a much more narrow resonant spike.
+* *Stages*: The number of stages in a given filter describes how sharply it is
+ able to make changes in the frequency response.
+
+The basic 'analog' filters that ZynAddSubFX offers are shown below, with the
+center frequency being marked by the red line.
+The 'state variable' filters should look quite similar.
+
+image:images/filter0.png[]
+
+As previously mentioned, the Q value of a filter affects how concentrated the
+signal's energy is at the cutoff frequency; The result of differing Q values are
+below.
+
+TIP: For many classical analog sounds, high Q values were used on sweeping
+filters. A simple high Q low pass filter modulated by a strong envelope is
+usually sufficient to get a good sound.
+
+image:images/filter1.png[]
+
+Lastly, the affect of the order of the filter can be seen below.
+This is roughly synonymous with the number of stages of the filter.
+For more complex patches it is important to realize that the extra sharpness in
+the filter does not come for free as it requires many more calculations being
+performed; This phenomena is the most visible in subsynth, where it is easy to
+need several hundred filter stages to produce a given note.
+
+image:images/filter2.png[]
+
+
+
+There are different types of filters. The number of poles define what will
+happen at a given frequency. Mathematically, the filters are functions which
+have poles that correspond to that frequency. Usually, two poles mean that the
+function has more "steepness", and that you can set the exact value of the
+function at the poles by defining the "resonance value". Filters with two poles
+are also often referenced
+as http://de.wikipedia.org/wiki/Butterworth-Filter[Butterworth Filters].
+
+********************************************************************
+For the interested, functions having poles means that we are given a quotient of
+polynomials. The denominator has degree 1 or 2, depending on the filter having
+one or two poles. In the file _DSP/AnalogFilter.cpp_,
+_AnalogFilter::computefiltercoefs()_ sets the coefficients (depending on the
+filter type), and _AnalogFilter::singlefilterout()_ shows the whole polynomial
+(in a formula where no quotient is needed).
+********************************************************************
+
+User Interface
+~~~~~~~~~~~~~~
+
+image:images/uifilter.png[]
+
+* *C.freq*: Cutoff frequency
+* *Q*: Level of resonance for the filter
+* *V.SnsA.*: Velocity sensing amount for filter cutoff
+* *V.Sns.*: Velocity sensing function
+* *freq.tr*: Frequency tracking amount. When this parameter is positive, higher
+ note frequencies shift the filter's cutoff frequency higher.
+* *gain*: Additional gain/attenuation for filter
+* *St*: Filter stages
+
+NOTE: TODO add a lengthy section on the formant filter setup
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/gen/ad-note.tex b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/ad-note.tex
new file mode 100644
index 0000000..4dd3f3c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/ad-note.tex
@@ -0,0 +1,37 @@
+\documentclass{standalone}
+\usepackage{tikz}
+\usetikzlibrary{matrix,shapes,chains,scopes}
+\begin{document}
+\input{fig.sty}
+\begin{tikzpicture}
+ \matrix (mtx) [matrix of nodes, row sep=5mm, column sep=5mm] {
+ &
+ |[lfo]| Freq LFO &
+ |[lfo]| Filter LFO &
+ |[lfo]| Amp LFO &
+ &\\
+ |[block]| Base Fq. &
+ |[block]| Voices &
+ |[block]| Filter &
+ |[block, shape=isosceles triangle]| Volume &
+ {Output} \\
+ &
+ |[env]| Freq Env&
+ |[env]| Filter Env&
+ |[env]| Amp Env&\\
+ };
+
+ { [start chain=trunk]
+ \chainin (mtx-2-1)[join=by tip];
+ \chainin (mtx-2-2)[join=by tip];
+ \chainin (mtx-2-3)[join=by tip];
+ \chainin (mtx-2-4)[join=by tip];
+ \chainin (mtx-2-5)[join=by tip];
+ }
+ \foreach \i in {2,3,4}
+ {
+ \draw[->] (mtx-1-\i) -- (mtx-2-\i);
+ \draw[->] (mtx-3-\i) -- (mtx-2-\i);
+ }
+\end{tikzpicture}
+\end{document}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/gen/chorus.tex b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/chorus.tex
new file mode 100644
index 0000000..87727e3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/chorus.tex
@@ -0,0 +1,38 @@
+\documentclass[12pt]{report}
+\pagestyle{empty}
+\usepackage{pst-sigsys}
+\usepackage{auto-pst-pdf}
+\begin{document}
+\begin{pspicture}[showgrid=false](0,-1)(8,2)
+ %Style
+ \psset{framesize=1 .65}
+ \psset{style=Arrow}
+
+ %In/Out
+ \rput(0,0){\rnode{in}{$x[n]$}}
+ \rput(8,0){\rnode{out}{$y[n]$}}
+
+ %Crossover
+ \psfblock[framesize=2 .65](1.5,0){cross}{Crossover}
+
+ %Feedback over fractional delay
+ \pscircleop(3,0){comb}
+ \psfblock[framesize=1.2 .65](4.5,0){delay}{$z^{-n.m}$}
+ \pnode(5.5,0){decoration}
+ \pscircleop[operation=times](4,1){fb}
+ \rput(4,1.5){Feedback}
+ \ncangle[angleA=90]{decoration}{fb}
+ \ncangle[angleA=180,angleB=90]{fb}{comb}
+
+ %subtract?
+ \pscircleop[operation=times] (6,0){sub}
+ \rput(6,-0.5){Subtract}
+
+ %Panning
+ \pscircleop[operation=times] (7,0){pan}
+ \rput(7,0.5){Panning}
+
+ %Connections
+ \nclist{ncline}{in,cross,comb,delay,sub,pan,out}
+\end{pspicture}
+\end{document}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/gen/distort.tex b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/distort.tex
new file mode 100644
index 0000000..eb6b3a9
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/distort.tex
@@ -0,0 +1,44 @@
+\documentclass[11pt]{report}
+\pagestyle{empty}
+\usepackage{pst-sigsys}
+\usepackage{auto-pst-pdf}
+\begin{document}
+\begin{pspicture}[showgrid=false](0,-2)(10,2)
+ %Style
+ \psset{framesize=1 .65}
+ \psset{style=Arrow}
+
+ %In/Out
+ \rput(0,0){\rnode{in}{$x[n]$}}
+ \rput(9.5,0){\rnode{out}{$y[n]$}}
+
+ %Panning
+ \rput(1,0.5){Panning}
+ \pscircleop[operation=times] (1,0){pan}
+ \ncline{in}{pan}
+
+ %Preamp
+ \rput(2,-0.5){Preamp}
+ \pscircleop[operation=times] (2,0){preamp}
+ \ncline{pan}{preamp}
+
+ %Filtering
+ \psfblock(3,0){fil1}{Filter}
+ \ncline{preamp}{fil1}
+
+ %Distortion
+ \psfblock(4.5,0){shape}{$H(n)$}
+ \ncline{fil1}{shape}
+
+ %Filtering
+ \psfblock(6,0){fil2}{Filter}
+ \ncline{shape}{fil2}
+
+ %Crossover
+ \psfblock[framesize=1.8 .65](8,0){cross}{Crossover}
+ \ncline{fil2}{cross}
+ \ncline{cross}{out}
+
+
+\end{pspicture}
+\end{document}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/gen/dynamic.tex b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/dynamic.tex
new file mode 100644
index 0000000..aba6330
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/dynamic.tex
@@ -0,0 +1,46 @@
+\documentclass[11pt]{report}
+\pagestyle{empty}
+\usepackage{pst-sigsys}
+\usepackage{auto-pst-pdf}
+\begin{document}
+\begin{pspicture}[showgrid=false](0,0)(8,2)
+ %Style
+ \psset{framesize=1 .65}
+ \psset{style=Arrow}
+
+ %In/Out
+ \rput(0,0){\rnode{in}{$x[n]$}}
+ \rput(8,0){\rnode{out}{$y[n]$}}
+
+ %Smoothing
+ \psfblock(1,1){smooth}{LPF}
+ \rput(1,1.6){smooth}
+
+ %Sensing
+ \pscircleop[operation=times](2.5,1){sense}
+ \rput(2.5,1.5){sense}
+
+ %Combine
+ \pscircleop(4,1){comb}
+
+ %Depth
+ \pscircleop[operation=times](5.5,1){depth}
+ \rput(5.5,1.5){depth}
+
+ %LFO
+ \psfblock(7,1){lfo}{LFO}
+
+ %Filter
+ \psfblock(4,0){fil}{Filter}
+
+ %Panning
+ \pscircleop[operation=times] (5.5,0){pan}
+ \rput(5.5,-0.5){Panning}
+
+ %Connections
+ \pnode(1,0){decoration}
+ \nclist{ncline}{in,fil,pan,out}
+ \nclist{ncline}{decoration,smooth,sense,comb,fil}
+ \nclist{ncline}{lfo,depth,comb}
+\end{pspicture}
+\end{document}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/gen/echo.tex b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/echo.tex
new file mode 100644
index 0000000..22248b4
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/echo.tex
@@ -0,0 +1,43 @@
+\documentclass[11pt]{report}
+\pagestyle{empty}
+\usepackage{pst-sigsys}
+\usepackage{auto-pst-pdf}
+\begin{document}
+\begin{pspicture}[showgrid=false](0,0)(8,2)
+ %Style
+ \psset{framesize=1 .65}
+ \psset{style=Arrow}
+
+ %In/Out
+ \rput(0,0){\rnode{in}{$x[n]$}}
+ \rput(8,0){\rnode{out}{$y[n]$}}
+
+ %Panning
+ \rput(1,0.5){Panning}
+ \pscircleop[operation=times] (1,0){pan}
+ \ncline{in}{pan}
+
+ %Crossover
+ \psfblock[framesize=1.8 .65](6,0){cross}{Crossover}
+
+ %Feedback
+ \rput(4,1.5){Feedback}
+ \pscircleop[operation=times](4,1){fb}
+ \ncangle[angleA=90,angleB=0]{cross}{fb}
+ \pscircleop(2,0){combine}
+ \ncline{pan}{combine}
+ \ncangle[angleA=180,angleB=90]{fb}{combine}
+
+ %Dampining
+ \psfblock(3,0){hidamp}{LPF}
+ \ncline{combine}{hidamp}
+
+ %Delay
+ \psfblock(4.3,0){delay}{$z^{-n}$}
+ \ncline{hidamp}{delay}
+ \ncline{delay}{cross}
+ \ncline{cross}{out}
+
+
+\end{pspicture}
+\end{document}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/gen/fig.sty b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/fig.sty
new file mode 100644
index 0000000..076954a
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/fig.sty
@@ -0,0 +1,14 @@
+\tikzset{
+>=stealth,
+thick,
+block/.style={rectangle, draw=black!50, thick,
+ top color=white,
+ bottom color=red!50!black!20,
+ font=\itshape},
+op/.style={circle, draw=black!50, thick,
+ top color=white,bottom color=black!20,
+ font=\ttfamily},
+lfo/.style={block,bottom color=orange!80},
+env/.style={block,bottom color=yellow!80},
+tip/.style={->,shorten >=1pt}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/gen/reverb.tex b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/reverb.tex
new file mode 100644
index 0000000..ead3c5f
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/reverb.tex
@@ -0,0 +1,50 @@
+\documentclass{standalone}
+\usepackage{tikz}
+\usetikzlibrary{matrix,shapes,chains,scopes}
+\begin{document}
+\input{fig.sty}
+
+\begin{tikzpicture}[
+ point/.style={coordinate},
+ every on chain/.style={rounded corners}]
+ %Style
+
+ \matrix[row sep=5mm, column sep=5mm] {
+ &
+ \node (fb) {$f_b$};&
+ \node (del) {$Delay$};
+ &&&&& \\
+ &
+ \node[op] (pb1) {$\times$};&
+ \node[block] (pb2) {$z^{-n}$}; &
+ &&&& \\
+
+ \node (p1) {$x[n]$}; &
+ \node[op] (p2) {$+$}; &
+ \node[point] (p3) {};&
+ \node[block] (p4) {HP/LP}; &
+ \node[block] (p5) {Comb Filter}; &
+ \node[block] (p6) {Allpass}; &
+ \node (p7) {$y[n]$}; \\
+ };
+
+ \draw[->] (fb) -- (pb1);
+ \draw[->] (del) -- (pb2);
+ { [start chain=trunk]
+ \chainin (p1)[join=by tip];
+ \chainin (p2)[join=by tip] ;
+ \chainin (p3)[join=by {}];
+ %\chainin[join by={}] (p3);
+ { [start branch]
+ \chainin (pb2)[join=by tip];
+ \chainin (pb1)[join=by tip];
+ \chainin (p2)[join=by tip];
+ }
+ \chainin (p4)[join=by tip];
+ \chainin (p5)[join=by tip];
+ \chainin (p6)[join=by tip];
+ \chainin (p7)[join=by tip];
+ }
+
+\end{tikzpicture}
+\end{document}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/gen/velf.tex b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/velf.tex
new file mode 100644
index 0000000..6388442
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/gen/velf.tex
@@ -0,0 +1,16 @@
+\documentclass{standalone}
+\usepackage{tikz,pgfplots}
+\begin{document}
+\begin{tikzpicture}
+ \begin{axis}[domain=0:1,samples=128,no markers,
+ xlabel=Note Velocity,ylabel=Param Magnitude,
+ legend style={ cells={anchor=east}, legend pos=outer north east}]
+ \addplot gnuplot{x^8^1};
+ \addlegendentry{max sensing}
+ \addplot gnuplot{x^(8^-1)};
+ \addlegendentry{min sensing}
+ \addplot gnuplot{x};
+ \addlegendentry{avg sensing}
+ \end{axis}
+\end{tikzpicture}
+\end{document}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/getting.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/getting.txt
new file mode 100644
index 0000000..1957208
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/getting.txt
@@ -0,0 +1,65 @@
+Appendix C: Getting ZynAddSubFX
+-------------------------------
+
+Usually there are several methods to obtain a copy of ZynAddSubFX.
+
+SourceForge::
+ http://sourceforge.net/projects/zynaddsubfx/files/
+Distribuition::
+ apt/yum/others
+Git::
+ git clone git://git.code.sf.net/p/zynaddsubfx/code zynaddsubfx
+
+Introduction to Git
+~~~~~~~~~~~~~~~~~~~
+
+For those who want to live on the bleeding edge or who want to assist with
+making sure that the next release has fewer bugs, you will want to get aquanted
+with git.
+Git is used to manage the source code for this project and can be used to
+quickly and easily get an up-to-date copy of the source code.
+
+Getting the Source Code
+^^^^^^^^^^^^^^^^^^^^^^^
+
+In order to get a copy of the ZynAddSubFX source code, all that needs to be done is:
+
+---------------------------------------------
+git clone git://git.code.sf.net/p/zynaddsubfx/code zynaddsubfx
+
+cd zynaddsubfx
+
+#Download additional resources
+git submodule init
+git submodule update
+---------------------------------------------
+
+You should now be in the directory of the source code.
+
+For simple steps on building, please see Appendix B of the manual.
+
+Checking out a branch
+^^^^^^^^^^^^^^^^^^^^^
+
+Lets say that development has extended into the creation of a new feature that
+you want to preview.
+For the sake of this guide, lets assume that the name of the branch that the
+feature is on is foo.
+
+-----------------------------------------
+#checkout the foo branch from sourceforge
+git checkout --track -b foo origin/foo
+
+#lets checkout the primary branch again
+git checkout master
+
+#hop back to the other branch
+git checkout foo
+----------------------------------------
+
+Now one should be able to change branches and go into the build directory (as
+described in Appendix B) and recompile ZynAddSubFX.
+
+NOTE: When using branches other than the master be aware that stability may
+ suffer
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/ad-global.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/ad-global.png
new file mode 100644
index 0000000..9479a91
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/ad-global.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/ad-voice.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/ad-voice.png
new file mode 100644
index 0000000..8ee7b5f
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/ad-voice.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope1.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope1.png
new file mode 100644
index 0000000..fb41b7c
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope1.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope2.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope2.png
new file mode 100644
index 0000000..2a241bc
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope2.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope3.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope3.png
new file mode 100644
index 0000000..46de243
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope3.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope4.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope4.png
new file mode 100644
index 0000000..6f9b3e9
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/envelope4.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter0.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter0.png
new file mode 100644
index 0000000..3545da5
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter0.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter1.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter1.png
new file mode 100644
index 0000000..35ffb17
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter1.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter2.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter2.png
new file mode 100644
index 0000000..836a514
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/filter2.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo0.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo0.png
new file mode 100644
index 0000000..381e7db
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo0.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo1.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo1.png
new file mode 100644
index 0000000..db20026
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo1.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo2.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo2.png
new file mode 100644
index 0000000..5eaeffb
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/lfo2.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/phaser-spectrogram.jpg b/plugins/zynaddsubfx/zynaddsubfx/doc/images/phaser-spectrogram.jpg
new file mode 100644
index 0000000..d6aa804
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/phaser-spectrogram.jpg differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uicontroller.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uicontroller.png
new file mode 100644
index 0000000..89b81c3
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uicontroller.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope0.jpg b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope0.jpg
new file mode 100644
index 0000000..b5b4593
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope0.jpg differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope1.jpg b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope1.jpg
new file mode 100644
index 0000000..0db6fe7
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope1.jpg differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope2.jpg b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope2.jpg
new file mode 100644
index 0000000..c9006f1
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope2.jpg differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope3.jpg b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope3.jpg
new file mode 100644
index 0000000..bba11d8
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uienvelope3.jpg differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uifilter.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uifilter.png
new file mode 100644
index 0000000..f78da89
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uifilter.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uilfo.jpg b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uilfo.jpg
new file mode 100644
index 0000000..b8f2c14
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uilfo.jpg differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uimain.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uimain.png
new file mode 100644
index 0000000..5472fa5
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uimain.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/images/uioscil.png b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uioscil.png
new file mode 100644
index 0000000..2f891c0
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/doc/images/uioscil.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/intro.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/intro.txt
new file mode 100644
index 0000000..c3d3168
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/intro.txt
@@ -0,0 +1,59 @@
+Getting Started
+---------------
+
+ZynAddSubFX is a fairly complex software synthesizer with a very large number of
+controls.
+As such, it is not alway obvious how to use ZynAddSubFX.
+
+Many applications under Linux transport MIDI over ALSA and transmit audio over
+JACK.
+ZynAddSubFX can be run in this configuration by running:
+
+------------------------------
+zynaddsubfx -I alsa -O jack -a
+------------------------------
+
+This sets the input driver to be alsa and the output driver to be jack, which
+should attempt to autoconnect to your soundcard as per the '-a' flag.
+If this is your first time running ZynAddSubFX, you will see a screen that lets
+you choose between the advanced and beginner interface.
+Currently the beginner interface is deprecated, so the advanced one is
+recommended.
+
+Now you should be able to see ZynAddSubFX's main window, from which you can
+setup patches, effects, and general configurations, but more importatnly it
+provides links into the parameters of the patches.
+ZynAddSubFX is a powerful tool with a number of base patches, but its true power
+lies in the ability to make your own patches.
+
+.Main Window
+image::./images/uimain.png[]
+
+For basic usage, you will want to use the button to the right of the enabled
+label.
+This button will allow for one to select the desired instrument from the banks
+that ZynAddSubFX has available.
+To play notes in ZynAddSubFX, either utilize the builtin virtual keyboard
+(accessible via the vK button) or connect your keyboard to the system and use
+*aconnect* to connect it to ZynAddSubFX (assuming that ALSA was used).
+
+This main window provides access to a number of more advanced features.
+Some of these features are:
+
+* System Effects
+* Insertion Effects
+* Recording
+* Part Settings (instrument level settings)
+* Master Settings
+* Microtonal Settings
+
+For instance to use the recording feature, a wave file must be selected from the
+recording menu and then the recording can be started with the record button and
+stopped with the stop button.
+This is a simple and quick way of recording some samples from ZynAddSubFX,
+though there are more full featured options available via JACK recording tools.
+
+NOTE: After hitting record, the wave file will not start recording until a new
+key has been pressed via either an external midi source or the virtual keyboard
+Both system and insertion effects can be accessed, the properties are available as well as properties of each
+instrument.
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/lfo.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/lfo.txt
new file mode 100644
index 0000000..082321d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/lfo.txt
@@ -0,0 +1,65 @@
+LFO
+---
+:author: Paul Nasca
+
+Introduction
+~~~~~~~~~~~~
+
+"LFO" means Low Frequency Oscillator.
+These oscillators are not used to make sounds by themselves, but they changes
+somes parameters (like the frequencies, the amplitudes or the filters).
+
+The LFOs has some basic parameters:
+
+* *Delay*: This parameter sets how much time takes since the start of the
+ note to the start of the LFO
+* *Start Phase*: The possition that a LFO will start at
+* *Frequency*: How fast the LFO is (i.e. how fast the parameter's controlled by
+ the LFO changes)
+* *Depth*: The amplitude of the LFO (i.e. how much the parameter's controlled
+ by the LFO changes)
+
+image:images/lfo0.png[]
+
+Another important LFO parameter is the shape.
+There are many LFO Types according to the shape.
+ZynAddSubFX supports the folowing LFO shapes:
+
+image:images/lfo1.png[]
+
+Another parameter is the LFO Randomness.
+It modifies the LFO amplitude or the LFO frequency at random.
+In ZynAddSubFX you can choose how much the LFO frequency or LFO amplitude
+changes by this parameter.
+In the folowing images are shown some examples of randomness and how changes
+the shape of a triangle LFO.
+
+image:images/lfo2.png[]
+
+Other parameters are:
+
+* *Continous mode*: If this mode is used, the LFO will not start from "zero" on each new note, but it will be continuous. This is very usefull if you apply on filters to make interesting sweeps.
+* *Stretch*: It controlls how much the LFO frequency changes according to the
+note's frequency.
+It can vary from negative stretch (the LFO frequency is decreased on higher
+notes) to zero (the LFO frequency will be the same on all notes) to positive
+stretch (the LFO frequency will be increased on higher notes).
+
+User Interface
+~~~~~~~~~~~~~~
+
+In ZynAddSubFX, LFO parameters are shown as:
+
+image:images/uilfo.jpg[]
+
+Theese parameters are:
+
+* *Freq*: LFO Frequency
+* *Depth*: LFO Depth
+* *Start*: LFO Start Phase -
+If this knob is at the lowest value, the LFO Start Phase will be random.
+* *Delay*: LFO Delay
+* *A.R.*: LFO Amplitude Randomnes
+* *F.R.*: LFO Frequency Randomness
+* *C.*: LFO Continous Mode
+* *Str.*: LFO Stretch - in the image above the LFO stretch is set to zero
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/mididefaults.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/mididefaults.txt
new file mode 100644
index 0000000..c8f33c4
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/mididefaults.txt
@@ -0,0 +1,22 @@
+Appendex A: MIDI Defaults
+-------------------------
+
+.Default MIDI Connections
+[literal]
+001 - Modulation Wheel
+007 - Volume
+010 - Pan
+011 - Expression
+064 - Sustain
+065 - Portamento Enable
+071 - Filter Q
+074 - Filter Cutoff
+075 - Bandwidth(*)
+076 - Modulation Amplitude(*)
+077 - Resonance Center Frequency(*)
+078 - Resonance Bandwidth(*)
+120 - All Sounds Off
+121 - Reset All Controllers
+123 - All Notes Off
+
+The entries with `(*)` are not within the General Midi specification
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/nrpn.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/nrpn.txt
new file mode 100644
index 0000000..94339ad
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/nrpn.txt
@@ -0,0 +1,162 @@
+NRPN (Non Registered Parameters Number)
+---------------------------------------
+
+NRPNs can control all system and insertion effect parameters.
+For example, you may change the reverb time when playing to keyboard or
+flanger's lfo frequency.
+You can disable the NRPN receiving by deselecting the "NRPN" checkbox from the
+main window (near "Master Keyshift" counter).
+The controls can be sent on any midi channel
+(the midi channels numbers are ignored).
+
+The parameters are:
+
+- NRPN coarse (99 or 0x63)sets the system/insertion effects (4 for system effects or 8 for insertion effects)
+- NRPN fine (98 or 0x62)sets the number of the effect (first effect is 0)
+- Data entry coarse (6) sets the parameter number of effect to change(see below)
+- Data entry fine (26) sets the parameter of the effect
+
+You have to send NRPN coarse/fine before sending Data entry coarse/fine.
+If the effect/parameter doesn't exists or is set to none, then the NRPN is
+ignored.
+
+Example(all values in this example are hex):
+
+ B0 63 08 // Select the insertion effects
+ B0 62 01 // Select the second effect (remember: the first is 00 and not 01)
+ B0 06 00 // Select the effect parameter 00
+ B0 26 7F // Change the parameter of effect to the value 7F (127)
+
+WARNING: Changing of some of the effect parameters produces clicks when sounds
+passes thru these effects.
+I advise you to change only when the sound volume that passes thru the effect to be very low (or silence).
+Some parameters produce clicks when are changed very fast.
+
+Here are the effects parameter number (for Data entry coarse).
+The parameters that produces clicks are written in [red]#red# and have (AC)
+after their entry (always clicks).
+The parameter that produces clicks only when they are changed fast are written
+in [orange]#orange# and have a (FC) after the entry (Fast Clicks).
+Most parameters has the range from 0 to 127.
+When parameters have another range, it is written as [low...high] .
+
+Reverb
+~~~~~~
+
+[verse]
++[orange]#00 - Volume or Dry/Wet (FC)#
+[orange]#01 - Pan (FC)#
+02 - Reverb Time
+[orange]#03 - Initial Delay (FC)#
+04 - Initial Delay Feedback
+[grey]#05 - reserved#
+[grey]#06 - reserved#
+07 - Low Pass
+08 - High Pass
+09 - High Frequency Damping [64..127] 64=no damping
+[red]#10 - Reverb Type [0..1] 0 - Random, 1 - Freeverb (AC)#
+[red]#11 - Room Size (AC)#+
+
+Echo
+~~~~
+
+[verse]
++[orange]#00 - Volume or Dry/Wet (FC)#
+[orange]#01 - Pan (FC)#
+[red]#02 - Delay (AC)#
+[red]#03 - Delay between left and right (AC)#
+[orange]#04 - Left/Right Crossing (FC)#
+05 - Feedback
+06 - High Frequency Damp+
+
+
+Chorus
+~~~~~~
+
+[verse]
++[orange]#00 - Volume or Dry/Wet (FC)#
+[orange]#01 - Pan (FC)#
+02 - LFO Frequency
+03 - LFO Randomness
+04 - LFO Type [0..1]
+05 - LFO Stereo Difference
+06 - LFO Depth
+07 - Delay
+08 - Feedback
+[orange]#09 - Left/Right Crossing (FC)#
+[grey]#10 - reserved#
+[red]#11 - Mode [0..1] (0=add, 1=subtract) (AC)#+
+
+Phaser
+~~~~~~
+
+[verse]
++[orange]#00 - Volume or Dry/Wet (FC)#
+[orange]#01 - Pan (FC)#
+02 - LFO Frequency
+03 - LFO Randomness
+04 - LFO Type [0..1]
+05 - LFO Stereo Difference
+06 - LFO Depth
+07 - Feedback
+[red]#08 - Number of stages [0..11] (AC)#
+[orange]#09 - Let/Right Crossing (FC)#
+[red]#10 - Mode [0..1] (0=add, 1=subtract) (AC)#
+11 - Phase+
+
+AlienWah
+~~~~~~~~
+
+[verse]
++[orange]#00 - Volume or Dry/Wet (FC)#
+[orange]#01 - Pan (FC)#
+02 - LFO Frequency
+03 - LFO Randomness
+04 - LFO Type [0..1]
+05 - LFO Stereo Difference
+06 - LFO Depth
+07 - Feedback
+08 - Delay [0..100]
+[orange]#09 - Left/Right Crossing (FC)#
+10 - Phase+
+
+Distorsion
+~~~~~~~~~~
+
+[verse]
++[orange]#00 - Volume or Dry/Wet (FC)#
+[orange]#01 - Pan (FC)#
+02 - Left/Right Crossing
+[orange]#03 - Drive (FC)#
+[orange]#04 - Level (FC)#
+05 - Type [0..11]
+06 - Invert the signal (negate) [0..1]
+07 - Low Pass
+08 - High Pass
+09 - Mode [0.1] (0=mono,1=stereo)+
+
+EQ
+~~
+
+[verse]
++[orange]#00 - Gain (FC)#+
+
+All other settings of the EQ are shown in a different way.
+The N represent the band ("B." setting in the UI) and the first band is 0
+(and not 1), like it is shown in the UI.
+Change the "N" with the band you like.
+If you want to change a band that doesn't exist, the NRPN will be ignored.
+
+[verse]
++[red]#10+N*5 - Change the mode of the filter [0..9] (AC)#
+11+N*5 - Band's filter frequency
+12+N*5 - Band's filter gain
+13+N*5 - Band's filter Q (bandwidth or resonance)
+[grey]#14+N*5 - reserved#+
+
+Example of setting the gain on the second band:
+
+. The bands start counting from 0, so the second band is 1 => N=1.
+. The formula is 12+N*5 => 12+1*5=17, so the number of effect parameter
+. (for Data entry coarse) is 17.
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/saving.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/saving.txt
new file mode 100644
index 0000000..a45b663
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/saving.txt
@@ -0,0 +1,55 @@
+Persistence
+-----------
+
+As with most applications ZynAddSubFX allows for one to ave your work and reload
+it.
+
+Saving it all
+~~~~~~~~~~~~~
+
+One of the simplest ways to save your work is to save the entire session.
+This can be done through the File menu and will result in the creation of an
+.xmz file.
+Once created, this file will hold the settings for all settings within that
+session, such as microtonal tunings, all patches, system effects, insertion
+effects, etc...
+
+Saving Parts
+~~~~~~~~~~~~
+
+In many cases saving everything is not what is desired.
+Saving a patch later on is one such example.
+
+Patches
+^^^^^^^
+In order to save a patch, one can either save it from the instruments menu or
+through the bank window.
+
+With the instrument menu, one can just save the file to any given location with
+the .xiz extension.
+
+With the banks menu, one can assign a patch to a given slot with a bank.
+This instrument will remain here for future use until it is deleted.
+To see the physical location of the .xiz file, one should check the
+File->Settings->Bank_Root_Dirs window to see the paths for banks.
+
+NOTE: You need to have write permissions to add instruments to the bank.
+
+Presets
+^^^^^^^
+Have a favorite setting for an envelope, a difficult to reproduce oscillator?
+Then presets are for you.
+Presets allow for one to save the settings for any of the components which
+support copy/paste operations.
+This is done with preset files (.xpz), which get stored in the folders indicated
+by File->Settings->Preset_Root_Dirs.
+
+Summary
+~~~~~~~
+
+.Extension Summary
+[literal]
+xmz Everything
+xiz Instrument
+xsz Scale Settings
+xpz Presets
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.1.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.1.txt
new file mode 100644
index 0000000..854476c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.1.txt
@@ -0,0 +1,82 @@
+ZYNADDSUBFX(1)
+==============
+:doctype: manpage
+
+NAME
+----
+zynaddsubfx - a software synthesizer
+
+SYNOPSIS
+--------
+*zynaddsubfx* ['OPTIONS']
+
+DESCRIPTION
+-----------
+
+*zynaddsubfx* is a polyphonic multimbral synthesizer, which supports three
+synthesis engines and numerous effects to generate sound.
+
+1) ADsynth generates sounds by adding a number of voices.
+ Each voice has filters, envelopes, LFOs, morphing, modulation
+ (Ring Modulation, Phase Modulation... the modulators can have any
+ shape), resonance, etc...
+ Each voice includes a waveform generator with up to 128 sine/non-sine
+ harmonics.
+ You can use Fourier synthesis or if you don't like it you
+ can wave-shaping/filtering of functions.
+
+2) SUBsynth is a simple engine which makes sounds through
+ harmonic filtering of white noise
+
+3) PADsynth is an engine that makes very beautiful pads and other instruments,
+ which can be exported for use with other programs.
+
+Midi and audio support exists for OSS, ALSA, JACK, and others...
+
+OPTIONS
+-------
+
+*-h, --help*::
+ Display command-line help and exit
+*-v, --version*::
+ Display version and exit
+*-l, --load=FILE*::
+ Loads a .xmz file
+*-L, --load-instrument*=FILE::
+ Loads a .xiz file
+*-r --sample-rate*=SR::
+ Set the sample rate SR
+*-b, --buffer-size*=SR::
+ Set the buffer size, which determines the granularity of how often parameter
+ changes can be applied
+*-o, --oscil-size*=OS::
+ Set the ADsynth oscillator size
+*-S, --swap*::
+ Swap Left and Right output channels
+*-D, --dump*::
+ Dumps midi note ON/OFF commands
+*-U, --no-gui*::
+ Run ZynAddSubFX without user interface
+*-N, --named*=Name::
+ Postfix IO Name when possible
+*-a, --auto-connect*::
+ AutoConnect when using JACK
+*-O, --output*=engine::
+ Set Output Engine
+*-I, --input*=engine::
+ Set Input Engine
+*-e, --exec-after-init*=command::
+ Run post-initialization script. This script will be run after midi and audio
+ drivers have been initialized.
+
+BUGS
+----
+Please report any bugs to either the mailing list
+ zynaddsubfx-user at lists.sourceforge.net
+or the bugtracker
+ http://sourceforge.net/tracker/?group_id=62934
+
+AUTHOR
+------
+ZynAddSubFX was originally written by Nasca Octavian Paul. It is currently being
+maintained by Mark McCurry.
diff --git a/plugins/zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.txt b/plugins/zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.txt
new file mode 100644
index 0000000..26cd2dd
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/doc/zynaddsubfx.txt
@@ -0,0 +1,31 @@
+Zynaddsubfx
+===========
+:Author: Paul Nasca and Mark McCurry
+
+This documentation is a work in progress
+
+include::intro.txt[]
+
+include::filter.txt[]
+
+include::lfo.txt[]
+
+include::envelope.txt[]
+
+include::adsynth.txt[]
+
+include::controller.txt[]
+
+include::effects.txt[]
+
+/////////////////////////////
+include::nrpn.txt[]
+/////////////////////////////
+
+include::saving.txt[]
+
+include::mididefaults.txt[]
+
+include::build.txt[]
+
+include::getting.txt[]
diff --git a/plugins/zynaddsubfx/zynaddsubfx/pixmaps/black_key.png b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/black_key.png
new file mode 100644
index 0000000..d90b609
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/black_key.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/pixmaps/black_key_pressed.png b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/black_key_pressed.png
new file mode 100644
index 0000000..e33750d
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/black_key_pressed.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/pixmaps/knob.png b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/knob.png
new file mode 100644
index 0000000..93f2cbe
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/knob.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/pixmaps/module_backdrop.png b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/module_backdrop.png
new file mode 100644
index 0000000..2cba795
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/module_backdrop.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/pixmaps/white_key.png b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/white_key.png
new file mode 100644
index 0000000..e9125f2
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/white_key.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/pixmaps/white_key_pressed.png b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/white_key_pressed.png
new file mode 100644
index 0000000..f4d0847
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/white_key_pressed.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/pixmaps/window_backdrop.png b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/window_backdrop.png
new file mode 100644
index 0000000..3010fcb
Binary files /dev/null and b/plugins/zynaddsubfx/zynaddsubfx/pixmaps/window_backdrop.png differ
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/CMakeLists.txt
new file mode 100644
index 0000000..786231a
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/CMakeLists.txt
@@ -0,0 +1,384 @@
+#checking include/library paths
+message(STATUS "Checking Include Path" $ENV{CMAKE_INCLUDE_PATH} ${CMAKE_INCLUDE_PATH})
+message(STATUS "Checking Library Path" $ENV{CMAKE_LIBRARY_PATH} ${CMAKE_LIBRARY_PATH})
+
+#Dependency check
+find_package(PkgConfig REQUIRED)
+find_package(zlib REQUIRED)
+pkg_check_modules(FFTW REQUIRED fftw3)
+pkg_check_modules(MXML REQUIRED mxml)
+find_package(Threads REQUIRED)
+find_package(OSS)
+find_package(Alsa)
+pkg_check_modules(JACK jack)
+pkg_check_modules(PORTAUDIO portaudio-2.0>=19)
+set(FLTK_SKIP_OPENGL true)
+pkg_check_modules(NTK ntk)
+pkg_check_modules(NTK_IMAGES ntk_images)
+find_package(FLTK)
+find_package(OpenGL) #for FLTK
+find_package(CxxTest)
+if(CXXTEST_FOUND)
+ set(CXXTEST_USE_PYTHON TRUE)
+endif()
+# lash
+pkg_search_module(LASH lash-1.0)
+mark_as_advanced(LASH_LIBRARIES)
+pkg_search_module(DSSI dssi>=0.9.0)
+mark_as_advanced(DSSI_LIBRARIES)
+pkg_search_module(LIBLO liblo>=0.26)
+mark_as_advanced(LIBLO_LIBRARIES)
+
+CHECK_FUNCTION_EXISTS(sched_setscheduler HAVE_SCHEDULER)
+
+execute_process(COMMAND echo fistpl 0
+ COMMAND as -
+ ERROR_VARIABLE AVOID_ASM)
+
+######### Settings ###########
+# NOTE: These cache variables should normally not be changed in this
+# file, but either in in CMakeCache.txt before compile, or by passing
+# parameters directly into cmake using the -D flag.
+SET (GuiModule fltk CACHE STRING "GUI module, either fltk, ntk or off")
+SET (CompileTests ${CXXTEST_FOUND} CACHE BOOL "whether tests should be compiled in or not")
+SET (AlsaEnable ${ALSA_FOUND} CACHE BOOL
+ "Enable support for Advanced Linux Sound Architecture")
+SET (JackEnable ${JACK_FOUND} CACHE BOOL
+ "Enable support for JACK Audio Connection toolKit")
+SET (OssEnable ${OSS_FOUND} CACHE BOOL
+ "Enable support for Open Sound System")
+SET (PaEnable ${PORTAUDIO_FOUND} CACHE BOOL
+ "Enable support for Port Audio System")
+SET (LashEnable ${LASH_FOUND} CACHE BOOL
+ "Enable LASH Audio Session Handler")
+SET (DssiEnable ${DSSI_FOUND} CACHE BOOL
+ "Enable DSSI Plugin compilation")
+SET (LibloEnable ${LIBLO_FOUND} CACHE BOOL
+ "Enable Liblo")
+
+# Now, handle the incoming settings and set define flags/variables based
+# on this
+
+# Add version information
+add_definitions(-DVERSION="${VERSION}")
+
+message(STATUS "Building on a '${CMAKE_SYSTEM_NAME}' System")
+
+if(NOT "Darwin" STREQUAL ${CMAKE_SYSTEM_NAME})
+ # Add scheduler function existance info (OSX compatiability)
+ add_definitions(-DHAVE_SCHEDULER=${HAVE_SCHEDULER})
+endif()
+
+
+# Give a good guess on the best Input/Output default backends
+if (JackEnable)
+ SET (DefaultOutput jack CACHE STRING
+ "Default Output module: [null, alsa, oss, jack, portaudio]")
+ # Override with perhaps more helpful midi backends
+ if (AlsaEnable)
+ SET (DefaultInput alsa CACHE STRING
+ "Default Input module: [null, alsa, oss, jack]")
+ elseif (OssEnable)
+ SET (DefaultInput oss CACHE STRING
+ "Default Input module: [null, alsa, oss, jack]")
+ else ()
+ SET (DefaultInput jack CACHE STRING
+ "Default Input module: [null, alsa, oss, jack]")
+ endif ()
+elseif (AlsaEnable)
+ SET (DefaultOutput alsa CACHE STRING
+ "Default Output module: [null, alsa, oss, jack, portaudio]")
+ SET (DefaultInput alsa CACHE STRING
+ "Default Input module: [null, alsa, oss, jack]")
+elseif (OssEnable)
+ SET (DefaultOutput oss CACHE STRING
+ "Default Output module: [null, alsa, oss, jack, portaudio]")
+ SET (DefaultInput oss CACHE STRING
+ "Default Input module: [null, alsa, oss, jack]")
+else()
+ SET (DefaultOutput null CACHE STRING
+ "Default Output module: [null, alsa, oss, jack, portaudio]")
+ SET (DefaultInput null CACHE STRING
+ "Default Input module: [null, alsa, oss, jack]")
+endif()
+
+
+
+if (GuiModule STREQUAL qt AND QT_FOUND)
+ set (QtGui TRUE)
+elseif(GuiModule STREQUAL ntk AND NTK_FOUND)
+ set (NtkGui TRUE)
+elseif(GuiModule STREQUAL fltk AND FLTK_FOUND)
+ set (FltkGui TRUE)
+elseif(GuiModule STREQUAL off)
+ add_definitions(-DDISABLE_GUI)
+else ()
+ set (GuiModule off CACHE STRING "GUI module, either fltk, qt or off")
+ add_definitions(-DDISABLE_GUI)
+ message(STATUS "GUI module defaulting to off")
+endif()
+
+
+#Build Flags
+option (BuildForAMD_X86_64 "Build for AMD x86_64 system" OFF)
+option (BuildForCore2_X86_64 "Build for Intel Core2 x86_64 system" OFF)
+option (BuildForDebug "Include gdb debugging support" OFF)
+
+set(CMAKE_BUILD_TYPE "Release")
+
+set (BuildOptions_x86_64AMD
+ "-O3 -march=athlon64 -m64 -Wall -ffast-math -fno-finite-math-only -fomit-frame-pointer"
+ CACHE STRING "X86_64 compiler options"
+)
+
+set (BuildOptions_X86_64Core2
+ "-O3 -march=core2 -m64 -Wall -ffast-math -fno-finite-math-only -fomit-frame-pointer"
+ CACHE STRING "X86_64 compiler options"
+)
+
+set (BuildOptionsBasic
+ "-O3 -msse -msse2 -mfpmath=sse -ffast-math -fomit-frame-pointer"
+ CACHE STRING "basic X86 complier options"
+)
+
+set (BuildOptionsDebug
+ "-O0 -g3 -ggdb -Wall -Wpointer-arith" CACHE STRING "Debug build flags")
+
+########### Settings dependant code ###########
+# From here on, the setting variables have been prepared so concentrate
+# on the actual compiling.
+
+if(AlsaEnable)
+ list(APPEND AUDIO_LIBRARIES ${ASOUND_LIBRARY})
+ list(APPEND AUDIO_LIBRARY_DIRS ${ASOUND_LIBRARY_DIRS})
+ add_definitions(-DALSA=1)
+endif(AlsaEnable)
+
+if(JackEnable)
+ list(APPEND AUDIO_LIBRARIES ${JACK_LIBRARIES})
+ list(APPEND AUDIO_LIBRARY_DIRS ${JACK_LIBRARY_DIRS})
+ add_definitions(-DJACK=1)
+endif(JackEnable)
+
+if(OssEnable)
+ add_definitions(-DOSS=1)
+endif(OssEnable)
+
+if(PaEnable)
+ include_directories(${PORTAUDIO_INCLUDE_DIR})
+ add_definitions(-DPORTAUDIO=1)
+ list(APPEND AUDIO_LIBRARIES ${PORTAUDIO_LIBRARIES})
+ list(APPEND AUDIO_LIBRARY_DIRS ${PORTAUDIO_LIBRARY_DIRS})
+endif()
+
+if (CompileTests)
+ ENABLE_TESTING()
+endif()
+
+if(LashEnable)
+ include_directories(${LASH_INCLUDE_DIRS})
+ add_definitions(-DLASH=1)
+ list(APPEND AUDIO_LIBRARIES ${LASH_LIBRARIES})
+ list(APPEND AUDIO_LIBRARY_DIRS ${LASH_LIBRARY_DIRS})
+ message(STATUS "Compiling with lash")
+endif()
+if(LibloEnable)
+ include_directories(${LIBLO_INCLUDE_DIRS})
+ add_definitions(-DUSE_NSM=1)
+ list(APPEND AUDIO_LIBRARIES ${LIBLO_LIBRARIES})
+ list(APPEND AUDIO_LIBRARY_DIRS ${LIBLO_LIBRARY_DIRS})
+ message(STATUS "Compiling with liblo")
+endif()
+
+# other include directories
+include_directories(${ZLIB_INCLUDE_DIRS} ${MXML_INCLUDE_DIRS})
+
+add_definitions(
+ -g #TODO #todo put in a better location
+ -Wall
+ -Wextra
+ )
+if(NOT AVOID_ASM)
+ message(STATUS "Compiling with x86 opcode support")
+ add_definitions(-DASM_F2I_YES)
+endif()
+
+if (BuildForDebug)
+ set (CMAKE_BUILD_TYPE "Debug")
+ set (CMAKE_CXX_FLAGS_DEBUG ${BuildOptionsDebug})
+ message (STATUS "Building for ${CMAKE_BUILD_TYPE}, flags: ${CMAKE_CXX_FLAGS_DEBUG}")
+else (BuildForDebug)
+ set (CMAKE_BUILD_TYPE "Release")
+ if (BuildForAMD_X86_64)
+ set (CMAKE_CXX_FLAGS_RELEASE ${BuildOptions_x86_64AMD})
+ else (BuildForAMD_X86_64)
+ if (BuildForCore2_X86_64)
+ set (CMAKE_CXX_FLAGS_RELEASE ${BuildOptions_X86_64Core2})
+ else (BuildForCore2_X86_64)
+ set (CMAKE_CXX_FLAGS_RELEASE ${BuildOptionsBasic})
+ endif (BuildForCore2_X86_64)
+ endif (BuildForAMD_X86_64)
+ message (STATUS "Building for ${CMAKE_BUILD_TYPE}, flags: ${CMAKE_CXX_FLAGS_RELEASE}")
+endif (BuildForDebug)
+
+add_definitions(-fPIC)
+
+if(FLTK_FOUND)
+ mark_as_advanced(FORCE FLTK_BASE_LIBRARY)
+ mark_as_advanced(FORCE FLTK_CONFIG_SCRIPT)
+ mark_as_advanced(FORCE FLTK_DIR)
+ mark_as_advanced(FORCE FLTK_FLUID_EXECUTABLE)
+ mark_as_advanced(FORCE FLTK_FORMS_LIBRARY)
+ mark_as_advanced(FORCE FLTK_GL_LIBRARY)
+ mark_as_advanced(FORCE FLTK_IMAGES_LIBRARY)
+ mark_as_advanced(FORCE FLTK_INCLUDE_DIR)
+ mark_as_advanced(FORCE FLTK_MATH_LIBRARY)
+endif(FLTK_FOUND)
+
+if(NTK_FOUND)
+ mark_as_advanced(FORCE NTK_BASE_LIBRARY)
+ mark_as_advanced(FORCE NTK_CONFIG_SCRIPT)
+ mark_as_advanced(FORCE NTK_DIR)
+ mark_as_advanced(FORCE FLTK_FLUID_EXECUTABLE)
+ mark_as_advanced(FORCE NTK_FORMS_LIBRARY)
+ mark_as_advanced(FORCE NTK_GL_LIBRARY)
+ mark_as_advanced(FORCE NTK_IMAGES_LIBRARY)
+ mark_as_advanced(FORCE NTK_INCLUDE_DIR)
+ mark_as_advanced(FORCE NTK_MATH_LIBRARY)
+endif(NTK_FOUND)
+
+if(FltkGui)
+ #UGLY WORKAROUND
+ find_program (FLTK_CONFIG fltk-config)
+ if (FLTK_CONFIG)
+ execute_process (COMMAND ${FLTK_CONFIG} --use-images --ldflags OUTPUT_VARIABLE FLTK_LDFLAGS)
+ string(STRIP ${FLTK_LDFLAGS} FLTK_LIBRARIES)
+ endif()
+
+ message(STATUS ${FLTK_LDFLAGS})
+
+
+ set(GUI_LIBRARIES ${FLTK_LIBRARIES} ${FLTK_LIBRARIES} ${OPENGL_LIBRARIES} zynaddsubfx_gui)
+
+ add_definitions(-DFLTK_GUI)
+ message(STATUS "Will build FLTK gui")
+
+ include_directories(
+ ${FLTK_INCLUDE_DIR}
+ "${CMAKE_CURRENT_SOURCE_DIR}/UI"
+ "${CMAKE_CURRENT_BINARY_DIR}/UI"
+ )
+
+ add_subdirectory(UI)
+endif()
+
+if(NtkGui)
+
+ find_program( FLTK_FLUID_EXECUTABLE ntk-fluid)
+
+ message(STATUS ${NTK_LDFLAGS} ${NTK_IMAGES_LDFLAGS})
+
+ set(GUI_LIBRARIES ${NTK_LIBRARIES} ${NTK_IMAGES_LIBRARIES} ${OPENGL_LIBRARIES} zynaddsubfx_gui)
+
+ add_definitions(-DNTK_GUI)
+
+ message(STATUS "Will build NTK gui")
+
+ include_directories(
+ ${NTK_INCLUDE_DIRS}
+ "${CMAKE_CURRENT_SOURCE_DIR}/UI"
+ "${CMAKE_CURRENT_BINARY_DIR}/UI"
+ )
+
+ add_subdirectory(UI)
+endif()
+
+########### General section ##############
+# Following this should be only general compilation code, and no mention
+# of module-specific variables
+
+link_directories(${AUDIO_LIBRARY_DIRS} ${ZLIB_LIBRARY_DIRS} ${FFTW_LIBRARY_DIRS} ${MXML_LIBRARY_DIRS} ${FLTK_LIBRARY_DIRS} ${NTK_LIBRARY_DIRS})
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+
+
+set(NONGUI_LIBRARIES
+ zynaddsubfx_misc
+ zynaddsubfx_synth
+ zynaddsubfx_effect
+ zynaddsubfx_params
+ zynaddsubfx_dsp
+ zynaddsubfx_nio
+ )
+
+add_subdirectory(Misc)
+add_subdirectory(Synth)
+add_subdirectory(Effects)
+add_subdirectory(Params)
+add_subdirectory(DSP)
+add_subdirectory(Nio)
+
+add_library(zynaddsubfx_core STATIC
+ ${zynaddsubfx_dsp_SRCS}
+ ${zynaddsubfx_effect_SRCS}
+ ${zynaddsubfx_misc_SRCS}
+ ${zynaddsubfx_params_SRCS}
+ ${zynaddsubfx_synth_SRCS}
+ )
+
+target_link_libraries(zynaddsubfx_core
+ ${ZLIB_LIBRARIES}
+ ${FFTW_LIBRARIES}
+ ${MXML_LIBRARIES}
+ ${OS_LIBRARIES}
+ pthread)
+
+if(CompileTests)
+ add_subdirectory(Tests)
+endif(CompileTests)
+
+message(STATUS "using link directories: ${AUDIO_LIBRARY_DIRS} ${ZLIB_LIBRARY_DIRS} ${FFTW_LIBRARY_DIRS} ${MXML_LIBRARY_DIRS} ${FLTK_LIBRARY_DIRS}")
+
+
+add_executable(zynaddsubfx main.cpp)
+
+target_link_libraries(zynaddsubfx
+ zynaddsubfx_core
+ zynaddsubfx_nio
+ ${GUI_LIBRARIES}
+ ${NIO_LIBRARIES}
+ ${AUDIO_LIBRARIES}
+ )
+
+if (DssiEnable)
+ add_library(zynaddsubfx_dssi SHARED
+ Output/DSSIaudiooutput.cpp
+ )
+
+ target_link_libraries(zynaddsubfx_dssi
+ zynaddsubfx_core
+ ${OS_LIBRARIES}
+ )
+ if (${CMAKE_SIZEOF_VOID_P} EQUAL "8")
+ install(TARGETS zynaddsubfx_dssi LIBRARY DESTINATION lib64/dssi/)
+ else ()
+ install(TARGETS zynaddsubfx_dssi LIBRARY DESTINATION lib/dssi/)
+ endif ()
+endif()
+
+message(STATUS "Link libraries: ${ZLIB_LIBRARY} ${FFTW_LIBRARY} ${MXML_LIBRARIES} ${AUDIO_LIBRARIES} ${OS_LIBRARIES}")
+install(TARGETS zynaddsubfx
+ RUNTIME DESTINATION bin
+ )
+
+if(NtkGui)
+install(DIRECTORY ../pixmaps DESTINATION share/zynaddsubfx)
+add_definitions(-DPIXMAP_PATH="${CMAKE_INSTALL_PREFIX}/share/zynaddsubfx/pixmaps/")
+add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
+endif(NtkGui)
+
+include(CTest)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.cpp
new file mode 100644
index 0000000..58f46a2
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.cpp
@@ -0,0 +1,428 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ AnalogFilter.cpp - Several analog filters (lowpass, highpass...)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright (C) 2010-2010 Mark McCurry
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cstring> //memcpy
+#include <cmath>
+#include <cassert>
+
+#include "../Misc/Util.h"
+#include "AnalogFilter.h"
+
+AnalogFilter::AnalogFilter(unsigned char Ftype,
+ float Ffreq,
+ float Fq,
+ unsigned char Fstages,
+ unsigned int srate, int bufsize)
+ :Filter(srate, bufsize),
+ type(Ftype),
+ stages(Fstages),
+ freq(Ffreq),
+ q(Fq),
+ gain(1.0),
+ abovenq(false),
+ oldabovenq(false)
+{
+ for(int i = 0; i < 3; ++i)
+ coeff.c[i] = coeff.d[i] = oldCoeff.c[i] = oldCoeff.d[i] = 0.0f;
+ if(stages >= MAX_FILTER_STAGES)
+ stages = MAX_FILTER_STAGES;
+ cleanup();
+ firsttime = false;
+ setfreq_and_q(Ffreq, Fq);
+ firsttime = true;
+ coeff.d[0] = 0; //this is not used
+ outgain = 1.0f;
+}
+
+AnalogFilter::~AnalogFilter()
+{}
+
+void AnalogFilter::cleanup()
+{
+ for(int i = 0; i < MAX_FILTER_STAGES + 1; ++i) {
+ history[i].x1 = 0.0f;
+ history[i].x2 = 0.0f;
+ history[i].y1 = 0.0f;
+ history[i].y2 = 0.0f;
+ oldHistory[i] = history[i];
+ }
+ needsinterpolation = false;
+}
+
+void AnalogFilter::computefiltercoefs(void)
+{
+ float tmp;
+ bool zerocoefs = false; //this is used if the freq is too high
+
+ //do not allow frequencies bigger than samplerate/2
+ float freq = this->freq;
+ if(freq > (halfsamplerate_f - 500.0f)) {
+ freq = halfsamplerate_f - 500.0f;
+ zerocoefs = true;
+ }
+ if(freq < 0.1f)
+ freq = 0.1f;
+ //do not allow bogus Q
+ if(q < 0.0f)
+ q = 0.0f;
+ float tmpq, tmpgain;
+ if(stages == 0) {
+ tmpq = q;
+ tmpgain = gain;
+ }
+ else {
+ tmpq = (q > 1.0f) ? powf(q, 1.0f / (stages + 1)) : q;
+ tmpgain = powf(gain, 1.0f / (stages + 1));
+ }
+
+ //Alias Terms
+ float *c = coeff.c;
+ float *d = coeff.d;
+
+ //General Constants
+ const float omega = 2 * PI * freq / samplerate_f;
+ const float sn = sinf(omega), cs = cosf(omega);
+ float alpha, beta;
+
+ //most of theese are implementations of
+ //the "Cookbook formulae for audio EQ" by Robert Bristow-Johnson
+ //The original location of the Cookbook is:
+ //http://www.harmony-central.com/Computer/Programming/Audio-EQ-Cookbook.txt
+ switch(type) {
+ case 0: //LPF 1 pole
+ if(!zerocoefs)
+ tmp = expf(-2.0f * PI * freq / samplerate_f);
+ else
+ tmp = 0.0f;
+ c[0] = 1.0f - tmp;
+ c[1] = 0.0f;
+ c[2] = 0.0f;
+ d[1] = tmp;
+ d[2] = 0.0f;
+ order = 1;
+ break;
+ case 1: //HPF 1 pole
+ if(!zerocoefs)
+ tmp = expf(-2.0f * PI * freq / samplerate_f);
+ else
+ tmp = 0.0f;
+ c[0] = (1.0f + tmp) / 2.0f;
+ c[1] = -(1.0f + tmp) / 2.0f;
+ c[2] = 0.0f;
+ d[1] = tmp;
+ d[2] = 0.0f;
+ order = 1;
+ break;
+ case 2: //LPF 2 poles
+ if(!zerocoefs) {
+ alpha = sn / (2.0f * tmpq);
+ tmp = 1 + alpha;
+ c[1] = (1.0f - cs) / tmp;
+ c[0] = c[2] = c[1] / 2.0f;
+ d[1] = -2.0f * cs / tmp * -1.0f;
+ d[2] = (1.0f - alpha) / tmp * -1.0f;
+ }
+ else {
+ c[0] = 1.0f;
+ c[1] = c[2] = d[1] = d[2] = 0.0f;
+ }
+ order = 2;
+ break;
+ case 3: //HPF 2 poles
+ if(!zerocoefs) {
+ alpha = sn / (2.0f * tmpq);
+ tmp = 1 + alpha;
+ c[0] = (1.0f + cs) / 2.0f / tmp;
+ c[1] = -(1.0f + cs) / tmp;
+ c[2] = (1.0f + cs) / 2.0f / tmp;
+ d[1] = -2.0f * cs / tmp * -1.0f;
+ d[2] = (1.0f - alpha) / tmp * -1.0f;
+ }
+ else
+ c[0] = c[1] = c[2] = d[1] = d[2] = 0.0f;
+ order = 2;
+ break;
+ case 4: //BPF 2 poles
+ if(!zerocoefs) {
+ alpha = sn / (2.0f * tmpq);
+ tmp = 1.0f + alpha;
+ c[0] = alpha / tmp *sqrtf(tmpq + 1.0f);
+ c[1] = 0.0f;
+ c[2] = -alpha / tmp *sqrtf(tmpq + 1.0f);
+ d[1] = -2.0f * cs / tmp * -1.0f;
+ d[2] = (1.0f - alpha) / tmp * -1.0f;
+ }
+ else
+ c[0] = c[1] = c[2] = d[1] = d[2] = 0.0f;
+ order = 2;
+ break;
+ case 5: //NOTCH 2 poles
+ if(!zerocoefs) {
+ alpha = sn / (2.0f * sqrtf(tmpq));
+ tmp = 1.0f + alpha;
+ c[0] = 1.0f / tmp;
+ c[1] = -2.0f * cs / tmp;
+ c[2] = 1.0f / tmp;
+ d[1] = -2.0f * cs / tmp * -1.0f;
+ d[2] = (1.0f - alpha) / tmp * -1.0f;
+ }
+ else {
+ c[0] = 1.0f;
+ c[1] = c[2] = d[1] = d[2] = 0.0f;
+ }
+ order = 2;
+ break;
+ case 6: //PEAK (2 poles)
+ if(!zerocoefs) {
+ tmpq *= 3.0f;
+ alpha = sn / (2.0f * tmpq);
+ tmp = 1.0f + alpha / tmpgain;
+ c[0] = (1.0f + alpha * tmpgain) / tmp;
+ c[1] = (-2.0f * cs) / tmp;
+ c[2] = (1.0f - alpha * tmpgain) / tmp;
+ d[1] = -2.0f * cs / tmp * -1.0f;
+ d[2] = (1.0f - alpha / tmpgain) / tmp * -1.0f;
+ }
+ else {
+ c[0] = 1.0f;
+ c[1] = c[2] = d[1] = d[2] = 0.0f;
+ }
+ order = 2;
+ break;
+ case 7: //Low Shelf - 2 poles
+ if(!zerocoefs) {
+ tmpq = sqrtf(tmpq);
+ alpha = sn / (2.0f * tmpq);
+ beta = sqrtf(tmpgain) / tmpq;
+ tmp = (tmpgain + 1.0f) + (tmpgain - 1.0f) * cs + beta * sn;
+
+ c[0] = tmpgain
+ * ((tmpgain
+ + 1.0f) - (tmpgain - 1.0f) * cs + beta * sn) / tmp;
+ c[1] = 2.0f * tmpgain
+ * ((tmpgain - 1.0f) - (tmpgain + 1.0f) * cs) / tmp;
+ c[2] = tmpgain
+ * ((tmpgain
+ + 1.0f) - (tmpgain - 1.0f) * cs - beta * sn) / tmp;
+ d[1] = -2.0f * ((tmpgain - 1.0f) + (tmpgain + 1.0f) * cs)
+ / tmp * -1.0f;
+ d[2] = ((tmpgain + 1.0f) + (tmpgain - 1.0f) * cs - beta * sn)
+ / tmp * -1.0f;
+ }
+ else {
+ c[0] = tmpgain;
+ c[1] = c[2] = d[1] = d[2] = 0.0f;
+ }
+ order = 2;
+ break;
+ case 8: //High Shelf - 2 poles
+ if(!zerocoefs) {
+ tmpq = sqrtf(tmpq);
+ alpha = sn / (2.0f * tmpq);
+ beta = sqrtf(tmpgain) / tmpq;
+ tmp = (tmpgain + 1.0f) - (tmpgain - 1.0f) * cs + beta * sn;
+
+ c[0] = tmpgain
+ * ((tmpgain
+ + 1.0f) + (tmpgain - 1.0f) * cs + beta * sn) / tmp;
+ c[1] = -2.0f * tmpgain
+ * ((tmpgain - 1.0f) + (tmpgain + 1.0f) * cs) / tmp;
+ c[2] = tmpgain
+ * ((tmpgain
+ + 1.0f) + (tmpgain - 1.0f) * cs - beta * sn) / tmp;
+ d[1] = 2.0f * ((tmpgain - 1.0f) - (tmpgain + 1.0f) * cs)
+ / tmp * -1.0f;
+ d[2] = ((tmpgain + 1.0f) - (tmpgain - 1.0f) * cs - beta * sn)
+ / tmp * -1.0f;
+ }
+ else {
+ c[0] = 1.0f;
+ c[1] = c[2] = d[1] = d[2] = 0.0f;
+ }
+ order = 2;
+ break;
+ default: //wrong type
+ type = 0;
+ computefiltercoefs();
+ break;
+ }
+}
+
+
+void AnalogFilter::setfreq(float frequency)
+{
+ if(frequency < 0.1f)
+ frequency = 0.1f;
+ float rap = freq / frequency;
+ if(rap < 1.0f)
+ rap = 1.0f / rap;
+
+ oldabovenq = abovenq;
+ abovenq = frequency > (halfsamplerate_f - 500.0f);
+
+ bool nyquistthresh = (abovenq ^ oldabovenq);
+
+
+ //if the frequency is changed fast, it needs interpolation
+ if((rap > 3.0f) || nyquistthresh) { //(now, filter and coeficients backup)
+ oldCoeff = coeff;
+ for(int i = 0; i < MAX_FILTER_STAGES + 1; ++i)
+ oldHistory[i] = history[i];
+ if(!firsttime)
+ needsinterpolation = true;
+ }
+ freq = frequency;
+ computefiltercoefs();
+ firsttime = false;
+}
+
+void AnalogFilter::setfreq_and_q(float frequency, float q_)
+{
+ q = q_;
+ setfreq(frequency);
+}
+
+void AnalogFilter::setq(float q_)
+{
+ q = q_;
+ computefiltercoefs();
+}
+
+void AnalogFilter::settype(int type_)
+{
+ type = type_;
+ computefiltercoefs();
+}
+
+void AnalogFilter::setgain(float dBgain)
+{
+ gain = dB2rap(dBgain);
+ computefiltercoefs();
+}
+
+void AnalogFilter::setstages(int stages_)
+{
+ if(stages_ >= MAX_FILTER_STAGES)
+ stages_ = MAX_FILTER_STAGES - 1;
+ stages = stages_;
+ cleanup();
+ computefiltercoefs();
+}
+
+inline void AnalogBiquadFilterA(const float coeff[5], float &src, float work[4])
+{
+ work[3] = src*coeff[0]
+ + work[0]*coeff[1]
+ + work[1]*coeff[2]
+ + work[2]*coeff[3]
+ + work[3]*coeff[4];
+ work[1] = src;
+ src = work[3];
+}
+
+inline void AnalogBiquadFilterB(const float coeff[5], float &src, float work[4])
+{
+ work[2] = src*coeff[0]
+ + work[1]*coeff[1]
+ + work[0]*coeff[2]
+ + work[3]*coeff[3]
+ + work[2]*coeff[4];
+ work[0] = src;
+ src = work[2];
+}
+
+void AnalogFilter::singlefilterout(float *smp, fstage &hist,
+ const Coeff &coeff)
+{
+ assert((buffersize % 8) == 0);
+ if(order == 1) { //First order filter
+ for(int i = 0; i < buffersize; ++i) {
+ float y0 = smp[i] * coeff.c[0] + hist.x1 * coeff.c[1]
+ + hist.y1 * coeff.d[1];
+ hist.y1 = y0;
+ hist.x1 = smp[i];
+ smp[i] = y0;
+ }
+ } else if(order == 2) {//Second order filter
+ const float coeff_[5] = {coeff.c[0], coeff.c[1], coeff.c[2], coeff.d[1], coeff.d[2]};
+ float work[4] = {hist.x1, hist.x2, hist.y1, hist.y2};
+ for(int i = 0; i < buffersize; i+=8) {
+ AnalogBiquadFilterA(coeff_, smp[i + 0], work);
+ AnalogBiquadFilterB(coeff_, smp[i + 1], work);
+ AnalogBiquadFilterA(coeff_, smp[i + 2], work);
+ AnalogBiquadFilterB(coeff_, smp[i + 3], work);
+ AnalogBiquadFilterA(coeff_, smp[i + 4], work);
+ AnalogBiquadFilterB(coeff_, smp[i + 5], work);
+ AnalogBiquadFilterA(coeff_, smp[i + 6], work);
+ AnalogBiquadFilterB(coeff_, smp[i + 7], work);
+ }
+ hist.x1 = work[0];
+ hist.x2 = work[1];
+ hist.y1 = work[2];
+ hist.y2 = work[3];
+ }
+}
+
+void AnalogFilter::filterout(float *smp)
+{
+ for(int i = 0; i < stages + 1; ++i)
+ singlefilterout(smp, history[i], coeff);
+
+ if(needsinterpolation) {
+ //Merge Filter at old coeff with new coeff
+ float ismp[buffersize];
+ memcpy(ismp, smp, bufferbytes);
+
+ for(int i = 0; i < stages + 1; ++i)
+ singlefilterout(ismp, oldHistory[i], oldCoeff);
+
+ for(int i = 0; i < buffersize; ++i) {
+ float x = (float)i / buffersize_f;
+ smp[i] = ismp[i] * (1.0f - x) + smp[i] * x;
+ }
+ needsinterpolation = false;
+ }
+
+ for(int i = 0; i < buffersize; ++i)
+ smp[i] *= outgain;
+}
+
+float AnalogFilter::H(float freq)
+{
+ float fr = freq / samplerate_f * PI * 2.0f;
+ float x = coeff.c[0], y = 0.0f;
+ for(int n = 1; n < 3; ++n) {
+ x += cosf(n * fr) * coeff.c[n];
+ y -= sinf(n * fr) * coeff.c[n];
+ }
+ float h = x * x + y * y;
+ x = 1.0f;
+ y = 0.0f;
+ for(int n = 1; n < 3; ++n) {
+ x -= cosf(n * fr) * coeff.d[n];
+ y += sinf(n * fr) * coeff.d[n];
+ }
+ h = h / (x * x + y * y);
+ return powf(h, (stages + 1.0f) / 2.0f);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h
new file mode 100644
index 0000000..8a012d4
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h
@@ -0,0 +1,85 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Analog Filter.h - Several analog filters (lowpass, highpass...)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright (C) 2010-2010 Mark McCurry
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef ANALOG_FILTER_H
+#define ANALOG_FILTER_H
+
+#include "../globals.h"
+#include "Filter.h"
+
+/**Implementation of Several analog filters (lowpass, highpass...)
+ * Implemented with IIR filters
+ * Coefficients generated with "Cookbook formulae for audio EQ"*/
+class AnalogFilter:public Filter
+{
+ public:
+ AnalogFilter(unsigned char Ftype, float Ffreq, float Fq,
+ unsigned char Fstages, unsigned int srate, int bufsize);
+ ~AnalogFilter();
+ void filterout(float *smp);
+ void setfreq(float frequency);
+ void setfreq_and_q(float frequency, float q_);
+ void setq(float q_);
+
+ void settype(int type_);
+ void setgain(float dBgain);
+ void setstages(int stages_);
+ void cleanup();
+
+ float H(float freq); //Obtains the response for a given frequency
+
+ private:
+ struct fstage {
+ float x1, x2; //Input History
+ float y1, y2; //Output History
+ } history[MAX_FILTER_STAGES + 1], oldHistory[MAX_FILTER_STAGES + 1];
+
+ struct Coeff {
+ float c[3], //Feed Forward
+ d[3]; //Feed Back
+ } coeff, oldCoeff;
+ //old coeffs are used for interpolation when paremeters change quickly
+
+ //Apply IIR filter to Samples, with coefficients, and past history
+ void singlefilterout(float *smp, fstage &hist, const Coeff &coeff);
+ //Update coeff and order
+ void computefiltercoefs(void);
+
+ int type; //The type of the filter (LPF1,HPF1,LPF2,HPF2...)
+ int stages; //how many times the filter is applied (0->1,1->2,etc.)
+ float freq; //Frequency given in Hz
+ float q; //Q factor (resonance or Q factor)
+ float gain; //the gain of the filter (if are shelf/peak) filters
+
+ int order; //the order of the filter (number of poles)
+
+ bool needsinterpolation, //Interpolation between coeff changes
+ firsttime; //First Iteration of filter
+ bool abovenq, //if the frequency is above the nyquist
+ oldabovenq; //if the last time was above nyquist
+ //(used to see if it needs interpolation)
+};
+
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/CMakeLists.txt
new file mode 100644
index 0000000..84ac385
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/CMakeLists.txt
@@ -0,0 +1,9 @@
+set(zynaddsubfx_dsp_SRCS
+ DSP/AnalogFilter.cpp
+ DSP/FFTwrapper.cpp
+ DSP/Filter.cpp
+ DSP/FormantFilter.cpp
+ DSP/SVFilter.cpp
+ DSP/Unison.cpp
+ PARENT_SCOPE
+)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp
new file mode 100644
index 0000000..4d995b0
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp
@@ -0,0 +1,85 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ FFTwrapper.c - A wrapper for Fast Fourier Transforms
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include <cassert>
+#include <cstring>
+#include "FFTwrapper.h"
+
+FFTwrapper::FFTwrapper(int fftsize_)
+{
+ fftsize = fftsize_;
+ time = new fftw_real[fftsize];
+ fft = new fftwf_complex[fftsize + 1];
+ planfftw = fftwf_plan_dft_r2c_1d(fftsize,
+ time,
+ fft,
+ FFTW_ESTIMATE);
+ planfftw_inv = fftwf_plan_dft_c2r_1d(fftsize,
+ fft,
+ time,
+ FFTW_ESTIMATE);
+}
+
+FFTwrapper::~FFTwrapper()
+{
+ fftwf_destroy_plan(planfftw);
+ fftwf_destroy_plan(planfftw_inv);
+
+ delete [] time;
+ delete [] fft;
+}
+
+void FFTwrapper::smps2freqs(const float *smps, fft_t *freqs)
+{
+ //Load data
+ for(int i = 0; i < fftsize; ++i)
+ time[i] = smps[i];
+
+ //DFT
+ fftwf_execute(planfftw);
+
+ //Grab data
+ memcpy((void *)freqs, (const void *)fft, fftsize * sizeof(fftw_real));
+}
+
+void FFTwrapper::freqs2smps(const fft_t *freqs, float *smps)
+{
+ //Load data
+ memcpy((void *)fft, (const void *)freqs, fftsize * sizeof(fftw_real));
+
+ //clear unused freq channel
+ fft[fftsize / 2][0] = 0.0f;
+ fft[fftsize / 2][1] = 0.0f;
+
+ //IDFT
+ fftwf_execute(planfftw_inv);
+
+ //Grab data
+ for(int i = 0; i < fftsize; ++i)
+ smps[i] = static_cast<float>(time[i]);
+}
+
+void FFT_cleanup()
+{
+ fftwf_cleanup();
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h
new file mode 100644
index 0000000..6eb6033
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h
@@ -0,0 +1,52 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ FFTwrapper.h - A wrapper for Fast Fourier Transforms
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef FFT_WRAPPER_H
+#define FFT_WRAPPER_H
+#include <fftw3.h>
+#include <complex>
+typedef float fftw_real;
+typedef std::complex<fftw_real> fft_t;
+
+/**A wrapper for the FFTW library (Fast Fourier Transforms)*/
+class FFTwrapper
+{
+ public:
+ /**Constructor
+ * @param fftsize The size of samples to be fed to fftw*/
+ FFTwrapper(int fftsize_);
+ /**Destructor*/
+ ~FFTwrapper();
+ /**Convert Samples to Frequencies using Fourier Transform
+ * @param smps Pointer to Samples to be converted; has length fftsize_
+ * @param freqs Structure FFTFREQS which stores the frequencies*/
+ void smps2freqs(const float *smps, fft_t *freqs);
+ void freqs2smps(const fft_t *freqs, float *smps);
+ private:
+ int fftsize;
+ fftw_real *time;
+ fftwf_complex *fft;
+ fftwf_plan planfftw, planfftw_inv;
+};
+
+void FFT_cleanup();
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp
new file mode 100644
index 0000000..9487fb4
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp
@@ -0,0 +1,75 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Filter.cpp - Filters, uses analog,formant,etc. filters
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <math.h>
+#include <stdio.h>
+
+#include "Filter.h"
+#include "AnalogFilter.h"
+#include "FormantFilter.h"
+#include "SVFilter.h"
+#include "../Params/FilterParams.h"
+
+Filter::Filter(unsigned int srate, int bufsize)
+ : outgain(1.0f),
+ samplerate(srate),
+ buffersize(bufsize)
+{
+ alias();
+}
+
+Filter *Filter::generate(FilterParams *pars, unsigned int srate, int bufsize)
+{
+ if (srate == 0)
+ srate = synth->samplerate;
+ if (bufsize == 0)
+ bufsize = synth->buffersize;
+
+ unsigned char Ftype = pars->Ptype;
+ unsigned char Fstages = pars->Pstages;
+
+ Filter *filter;
+ switch(pars->Pcategory) {
+ case 1:
+ filter = new FormantFilter(pars, srate, bufsize);
+ break;
+ case 2:
+ filter = new SVFilter(Ftype, 1000.0f, pars->getq(), Fstages, srate, bufsize);
+ filter->outgain = dB2rap(pars->getgain());
+ if(filter->outgain > 1.0f)
+ filter->outgain = sqrt(filter->outgain);
+ break;
+ default:
+ filter = new AnalogFilter(Ftype, 1000.0f, pars->getq(), Fstages, srate, bufsize);
+ if((Ftype >= 6) && (Ftype <= 8))
+ filter->setgain(pars->getgain());
+ else
+ filter->outgain = dB2rap(pars->getgain());
+ break;
+ }
+ return filter;
+}
+
+float Filter::getrealfreq(float freqpitch)
+{
+ return powf(2.0f, freqpitch + 9.96578428f); //log2(1000)=9.95748f
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h
new file mode 100644
index 0000000..52e3675
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h
@@ -0,0 +1,64 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Filter.h - Filters, uses analog,formant,etc. filters
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef FILTER_H
+#define FILTER_H
+
+#include "../globals.h"
+
+class Filter
+{
+ public:
+ static float getrealfreq(float freqpitch);
+ static Filter *generate(class FilterParams * pars, unsigned int srate = 0, int bufsize = 0);
+
+ Filter(unsigned int srate, int bufsize);
+ virtual ~Filter() {}
+ virtual void filterout(float *smp) = 0;
+ virtual void setfreq(float frequency) = 0;
+ virtual void setfreq_and_q(float frequency, float q_) = 0;
+ virtual void setq(float q_) = 0;
+ virtual void setgain(float dBgain) = 0;
+
+ protected:
+ float outgain;
+
+ // current setup
+ unsigned int samplerate;
+ int buffersize;
+
+ // alias for above terms
+ float samplerate_f;
+ float halfsamplerate_f;
+ float buffersize_f;
+ int bufferbytes;
+
+ inline void alias()
+ {
+ samplerate_f = samplerate;
+ halfsamplerate_f = samplerate_f / 2.0f;
+ buffersize_f = buffersize;
+ bufferbytes = buffersize * sizeof(float);
+ }
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.cpp
new file mode 100644
index 0000000..36db5f6
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.cpp
@@ -0,0 +1,230 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ FormantFilter.cpp - formant filters
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include <cstdio>
+#include "../Misc/Util.h"
+#include "FormantFilter.h"
+#include "AnalogFilter.h"
+#include "../Params/FilterParams.h"
+
+FormantFilter::FormantFilter(FilterParams *pars, unsigned int srate, int bufsize)
+ : Filter(srate, bufsize)
+{
+ numformants = pars->Pnumformants;
+ for(int i = 0; i < numformants; ++i)
+ formant[i] = new AnalogFilter(4 /*BPF*/, 1000.0f, 10.0f, pars->Pstages, srate, bufsize);
+ cleanup();
+
+ for(int j = 0; j < FF_MAX_VOWELS; ++j)
+ for(int i = 0; i < numformants; ++i) {
+ formantpar[j][i].freq = pars->getformantfreq(
+ pars->Pvowels[j].formants[i].freq);
+ formantpar[j][i].amp = pars->getformantamp(
+ pars->Pvowels[j].formants[i].amp);
+ formantpar[j][i].q = pars->getformantq(
+ pars->Pvowels[j].formants[i].q);
+ }
+
+ for(int i = 0; i < FF_MAX_FORMANTS; ++i)
+ oldformantamp[i] = 1.0f;
+ for(int i = 0; i < numformants; ++i) {
+ currentformants[i].freq = 1000.0f;
+ currentformants[i].amp = 1.0f;
+ currentformants[i].q = 2.0f;
+ }
+
+ formantslowness = powf(1.0f - (pars->Pformantslowness / 128.0f), 3.0f);
+
+ sequencesize = pars->Psequencesize;
+ if(sequencesize == 0)
+ sequencesize = 1;
+ for(int k = 0; k < sequencesize; ++k)
+ sequence[k].nvowel = pars->Psequence[k].nvowel;
+
+ vowelclearness = powf(10.0f, (pars->Pvowelclearness - 32.0f) / 48.0f);
+
+ sequencestretch = powf(0.1f, (pars->Psequencestretch - 32.0f) / 48.0f);
+ if(pars->Psequencereversed)
+ sequencestretch *= -1.0f;
+
+ outgain = dB2rap(pars->getgain());
+
+ oldinput = -1.0f;
+ Qfactor = 1.0f;
+ oldQfactor = Qfactor;
+ firsttime = 1;
+}
+
+FormantFilter::~FormantFilter()
+{
+ for(int i = 0; i < numformants; ++i)
+ delete (formant[i]);
+}
+
+void FormantFilter::cleanup()
+{
+ for(int i = 0; i < numformants; ++i)
+ formant[i]->cleanup();
+}
+
+void FormantFilter::setpos(float input)
+{
+ int p1, p2;
+
+ if(firsttime != 0)
+ slowinput = input;
+ else
+ slowinput = slowinput
+ * (1.0f - formantslowness) + input * formantslowness;
+
+ if((fabsf(oldinput - input) < 0.001f) && (fabsf(slowinput - input) < 0.001f)
+ && (fabsf(Qfactor - oldQfactor) < 0.001f)) {
+ // oldinput=input; daca setez asta, o sa faca probleme la schimbari foarte lente
+ firsttime = 0;
+ return;
+ }
+ else
+ oldinput = input;
+
+ float pos = fmodf(input * sequencestretch, 1.0f);
+ if(pos < 0.0f)
+ pos += 1.0f;
+
+ F2I(pos * sequencesize, p2);
+ p1 = p2 - 1;
+ if(p1 < 0)
+ p1 += sequencesize;
+
+ pos = fmodf(pos * sequencesize, 1.0f);
+ if(pos < 0.0f)
+ pos = 0.0f;
+ else
+ if(pos > 1.0f)
+ pos = 1.0f;
+ pos =
+ (atanf((pos * 2.0f
+ - 1.0f)
+ * vowelclearness) / atanf(vowelclearness) + 1.0f) * 0.5f;
+
+ p1 = sequence[p1].nvowel;
+ p2 = sequence[p2].nvowel;
+
+ if(firsttime != 0) {
+ for(int i = 0; i < numformants; ++i) {
+ currentformants[i].freq =
+ formantpar[p1][i].freq
+ * (1.0f - pos) + formantpar[p2][i].freq * pos;
+ currentformants[i].amp =
+ formantpar[p1][i].amp
+ * (1.0f - pos) + formantpar[p2][i].amp * pos;
+ currentformants[i].q =
+ formantpar[p1][i].q * (1.0f - pos) + formantpar[p2][i].q * pos;
+ formant[i]->setfreq_and_q(currentformants[i].freq,
+ currentformants[i].q * Qfactor);
+ oldformantamp[i] = currentformants[i].amp;
+ }
+ firsttime = 0;
+ }
+ else
+ for(int i = 0; i < numformants; ++i) {
+ currentformants[i].freq =
+ currentformants[i].freq * (1.0f - formantslowness)
+ + (formantpar[p1][i].freq
+ * (1.0f - pos) + formantpar[p2][i].freq * pos)
+ * formantslowness;
+
+ currentformants[i].amp =
+ currentformants[i].amp * (1.0f - formantslowness)
+ + (formantpar[p1][i].amp * (1.0f - pos)
+ + formantpar[p2][i].amp * pos) * formantslowness;
+
+ currentformants[i].q = currentformants[i].q
+ * (1.0f - formantslowness)
+ + (formantpar[p1][i].q * (1.0f - pos)
+ + formantpar[p2][i].q
+ * pos) * formantslowness;
+
+
+ formant[i]->setfreq_and_q(currentformants[i].freq,
+ currentformants[i].q * Qfactor);
+ }
+
+ oldQfactor = Qfactor;
+}
+
+void FormantFilter::setfreq(float frequency)
+{
+ setpos(frequency);
+}
+
+void FormantFilter::setq(float q_)
+{
+ Qfactor = q_;
+ for(int i = 0; i < numformants; ++i)
+ formant[i]->setq(Qfactor * currentformants[i].q);
+}
+
+void FormantFilter::setgain(float /*dBgain*/)
+{}
+
+inline float log_2(float x)
+{
+ return logf(x) / logf(2.0f);
+}
+
+void FormantFilter::setfreq_and_q(float frequency, float q_)
+{
+ //Convert form real freq[Hz]
+ const float freq = log_2(frequency) - 9.96578428f; //log2(1000)=9.95748f.
+
+ Qfactor = q_;
+ setpos(freq);
+}
+
+
+void FormantFilter::filterout(float *smp)
+{
+ float inbuffer[buffersize];
+
+ memcpy(inbuffer, smp, bufferbytes);
+ memset(smp, 0, bufferbytes);
+
+ for(int j = 0; j < numformants; ++j) {
+ float tmpbuf[buffersize];
+ for(int i = 0; i < buffersize; ++i)
+ tmpbuf[i] = inbuffer[i] * outgain;
+ formant[j]->filterout(tmpbuf);
+
+ if(ABOVE_AMPLITUDE_THRESHOLD(oldformantamp[j], currentformants[j].amp))
+ for(int i = 0; i < buffersize; ++i)
+ smp[i] += tmpbuf[i]
+ * INTERPOLATE_AMPLITUDE(oldformantamp[j],
+ currentformants[j].amp,
+ i,
+ buffersize);
+ else
+ for(int i = 0; i < buffersize; ++i)
+ smp[i] += tmpbuf[i] * currentformants[j].amp;
+ oldformantamp[j] = currentformants[j].amp;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.h
new file mode 100644
index 0000000..715f00f
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.h
@@ -0,0 +1,66 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ FormantFilter.h - formant filter
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef FORMANT_FILTER_H
+#define FORMANT_FILTER_H
+
+#include "../globals.h"
+#include "Filter.h"
+
+
+class FormantFilter:public Filter
+{
+ public:
+ FormantFilter(class FilterParams *pars, unsigned int srate, int bufsize);
+ ~FormantFilter();
+ void filterout(float *smp);
+ void setfreq(float frequency);
+ void setfreq_and_q(float frequency, float q_);
+ void setq(float q_);
+ void setgain(float dBgain);
+
+ void cleanup(void);
+
+ private:
+ void setpos(float input);
+
+
+ class AnalogFilter * formant[FF_MAX_FORMANTS];
+
+ struct {
+ float freq, amp, q; //frequency,amplitude,Q
+ } formantpar[FF_MAX_VOWELS][FF_MAX_FORMANTS],
+ currentformants[FF_MAX_FORMANTS];
+
+ struct {
+ unsigned char nvowel;
+ } sequence [FF_MAX_SEQUENCE];
+
+ float oldformantamp[FF_MAX_FORMANTS];
+
+ int sequencesize, numformants, firsttime;
+ float oldinput, slowinput;
+ float Qfactor, formantslowness, oldQfactor;
+ float vowelclearness, sequencestretch;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp
new file mode 100644
index 0000000..5e27c39
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp
@@ -0,0 +1,183 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ SVFilter.cpp - Several state-variable filters
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include <cstdio>
+#include <cstring>
+#include <cassert>
+#ifndef WIN32
+#include <err.h>
+#endif
+#include "../Misc/Util.h"
+#include "SVFilter.h"
+
+SVFilter::SVFilter(unsigned char Ftype, float Ffreq, float Fq,
+ unsigned char Fstages, unsigned int srate, int bufsize)
+ :Filter(srate, bufsize),
+ type(Ftype),
+ stages(Fstages),
+ freq(Ffreq),
+ q(Fq),
+ gain(1.0f),
+ needsinterpolation(false),
+ firsttime(true)
+{
+ if(stages >= MAX_FILTER_STAGES)
+ stages = MAX_FILTER_STAGES;
+ outgain = 1.0f;
+ cleanup();
+ setfreq_and_q(Ffreq, Fq);
+}
+
+SVFilter::~SVFilter()
+{}
+
+void SVFilter::cleanup()
+{
+ for(int i = 0; i < MAX_FILTER_STAGES + 1; ++i)
+ st[i].low = st[i].high = st[i].band = st[i].notch = 0.0f;
+ oldabovenq = false;
+ abovenq = false;
+}
+
+void SVFilter::computefiltercoefs(void)
+{
+ par.f = freq / samplerate_f * 4.0f;
+ if(par.f > 0.99999f)
+ par.f = 0.99999f;
+ par.q = 1.0f - atanf(sqrtf(q)) * 2.0f / PI;
+ par.q = powf(par.q, 1.0f / (stages + 1));
+ par.q_sqrt = sqrtf(par.q);
+}
+
+
+void SVFilter::setfreq(float frequency)
+{
+ if(frequency < 0.1f)
+ frequency = 0.1f;
+ float rap = freq / frequency;
+ if(rap < 1.0f)
+ rap = 1.0f / rap;
+
+ oldabovenq = abovenq;
+ abovenq = frequency > (samplerate_f / 2 - 500.0f);
+
+ bool nyquistthresh = (abovenq ^ oldabovenq);
+
+ //if the frequency is changed fast, it needs interpolation
+ if((rap > 3.0f) || nyquistthresh) { //(now, filter and coeficients backup)
+ if(!firsttime)
+ needsinterpolation = true;
+ ipar = par;
+ }
+ freq = frequency;
+ computefiltercoefs();
+ firsttime = false;
+}
+
+void SVFilter::setfreq_and_q(float frequency, float q_)
+{
+ q = q_;
+ setfreq(frequency);
+}
+
+void SVFilter::setq(float q_)
+{
+ q = q_;
+ computefiltercoefs();
+}
+
+void SVFilter::settype(int type_)
+{
+ type = type_;
+ computefiltercoefs();
+}
+
+void SVFilter::setgain(float dBgain)
+{
+ gain = dB2rap(dBgain);
+ computefiltercoefs();
+}
+
+void SVFilter::setstages(int stages_)
+{
+ if(stages_ >= MAX_FILTER_STAGES)
+ stages_ = MAX_FILTER_STAGES - 1;
+ stages = stages_;
+ cleanup();
+ computefiltercoefs();
+}
+
+void SVFilter::singlefilterout(float *smp, fstage &x, parameters &par)
+{
+ float *out = NULL;
+ switch(type) {
+ case 0:
+ out = &x.low;
+ break;
+ case 1:
+ out = &x.high;
+ break;
+ case 2:
+ out = &x.band;
+ break;
+ case 3:
+ out = &x.notch;
+ break;
+ default:
+#ifndef WIN32
+ errx(1, "Impossible SVFilter type encountered [%d]", type);
+#endif
+ break;
+ }
+
+ for(int i = 0; i < buffersize; ++i) {
+ x.low = x.low + par.f * x.band;
+ x.high = par.q_sqrt * smp[i] - x.low - par.q * x.band;
+ x.band = par.f * x.high + x.band;
+ x.notch = x.high + x.low;
+ smp[i] = *out;
+ }
+}
+
+void SVFilter::filterout(float *smp)
+{
+ for(int i = 0; i < stages + 1; ++i)
+ singlefilterout(smp, st[i], par);
+
+ if(needsinterpolation) {
+ float ismp[buffersize];
+ memcpy(ismp, smp, bufferbytes);
+
+ for(int i = 0; i < stages + 1; ++i)
+ singlefilterout(ismp, st[i], ipar);
+
+ for(int i = 0; i < buffersize; ++i) {
+ float x = i / buffersize_f;
+ smp[i] = ismp[i] * (1.0f - x) + smp[i] * x;
+ }
+ needsinterpolation = false;
+ }
+
+ for(int i = 0; i < buffersize; ++i)
+ smp[i] *= outgain;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h
new file mode 100644
index 0000000..e9d002c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h
@@ -0,0 +1,70 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ SV Filter.h - Several state-variable filters
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef SV_FILTER_H
+#define SV_FILTER_H
+
+#include "../globals.h"
+#include "Filter.h"
+
+class SVFilter:public Filter
+{
+ public:
+ SVFilter(unsigned char Ftype,
+ float Ffreq,
+ float Fq,
+ unsigned char Fstages,
+ unsigned int srate, int bufsize);
+ ~SVFilter();
+ void filterout(float *smp);
+ void setfreq(float frequency);
+ void setfreq_and_q(float frequency, float q_);
+ void setq(float q_);
+
+ void settype(int type_);
+ void setgain(float dBgain);
+ void setstages(int stages_);
+ void cleanup();
+
+ private:
+ struct fstage {
+ float low, high, band, notch;
+ } st[MAX_FILTER_STAGES + 1];
+
+ struct parameters {
+ float f, q, q_sqrt;
+ } par, ipar;
+
+ void singlefilterout(float *smp, fstage &x, parameters &par);
+ void computefiltercoefs(void);
+ int type; // The type of the filter (LPF1,HPF1,LPF2,HPF2...)
+ int stages; // how many times the filter is applied (0->1,1->2,etc.)
+ float freq; // Frequency given in Hz
+ float q; // Q factor (resonance or Q factor)
+ float gain; // the gain of the filter (if are shelf/peak) filters
+
+ bool abovenq, //if the frequency is above the nyquist
+ oldabovenq;
+ bool needsinterpolation, firsttime;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp
new file mode 100644
index 0000000..540a7ef
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp
@@ -0,0 +1,203 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Unison.cpp - Unison effect (multivoice chorus)
+ Copyright (C) 2002-2009 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <cmath>
+#include <cstring>
+#ifndef WIN32
+#include <err.h>
+#endif
+
+#include "Unison.h"
+
+Unison::Unison(int update_period_samples_, float max_delay_sec_, float srate_f)
+ :unison_size(0),
+ base_freq(1.0f),
+ uv(NULL),
+ update_period_samples(update_period_samples_),
+ update_period_sample_k(0),
+ max_delay((int)(srate_f * max_delay_sec_) + 1),
+ delay_k(0),
+ first_time(false),
+ delay_buffer(NULL),
+ unison_amplitude_samples(0.0f),
+ unison_bandwidth_cents(10.0f),
+ samplerate_f(srate_f)
+{
+ if(max_delay < 10)
+ max_delay = 10;
+ delay_buffer = new float[max_delay];
+ memset(delay_buffer, 0, max_delay * sizeof(float));
+ setSize(1);
+}
+
+Unison::~Unison() {
+ delete [] delay_buffer;
+ delete [] uv;
+}
+
+void Unison::setSize(int new_size)
+{
+ if(new_size < 1)
+ new_size = 1;
+ unison_size = new_size;
+ if(uv)
+ delete [] uv;
+ uv = new UnisonVoice[unison_size];
+ first_time = true;
+ updateParameters();
+}
+
+void Unison::setBaseFrequency(float freq)
+{
+ base_freq = freq;
+ updateParameters();
+}
+
+void Unison::setBandwidth(float bandwidth)
+{
+ if(bandwidth < 0)
+ bandwidth = 0.0f;
+ if(bandwidth > 1200.0f)
+ bandwidth = 1200.0f;
+
+ /* If the bandwidth is too small, the audio may cancel itself out
+ * (due to the sign change of the outputs)
+ * TODO figure out the acceptable lower bound and codify it
+ */
+ unison_bandwidth_cents = bandwidth;
+ updateParameters();
+}
+
+void Unison::updateParameters(void)
+{
+ if(!uv)
+ return;
+ float increments_per_second = samplerate_f
+ / (float) update_period_samples;
+// printf("#%g, %g\n",increments_per_second,base_freq);
+ for(int i = 0; i < unison_size; ++i) {
+ float base = powf(UNISON_FREQ_SPAN, SYNTH_T::numRandom() * 2.0f - 1.0f);
+ uv[i].relative_amplitude = base;
+ float period = base / base_freq;
+ float m = 4.0f / (period * increments_per_second);
+ if(SYNTH_T::numRandom() < 0.5f)
+ m = -m;
+ uv[i].step = m;
+// printf("%g %g\n",uv[i].relative_amplitude,period);
+ }
+
+ float max_speed = powf(2.0f, unison_bandwidth_cents / 1200.0f);
+ unison_amplitude_samples = 0.125f * (max_speed - 1.0f)
+ * samplerate_f / base_freq;
+
+ //If functions exceed this limit, they should have requested a bigguer delay
+ //and thus are buggy
+ if(unison_amplitude_samples >= max_delay - 1) {
+#ifndef WIN32
+ warnx("BUG: Unison amplitude samples too big");
+ warnx("Unision max_delay should be larger");
+#endif
+ unison_amplitude_samples = max_delay - 2;
+ }
+
+ updateUnisonData();
+}
+
+void Unison::process(int bufsize, float *inbuf, float *outbuf)
+{
+ if(!uv)
+ return;
+ if(!outbuf)
+ outbuf = inbuf;
+
+ float volume = 1.0f / sqrtf(unison_size);
+ float xpos_step = 1.0f / (float) update_period_samples;
+ float xpos = (float) update_period_sample_k * xpos_step;
+ for(int i = 0; i < bufsize; ++i) {
+ if(update_period_sample_k++ >= update_period_samples) {
+ updateUnisonData();
+ update_period_sample_k = 0;
+ xpos = 0.0f;
+ }
+ xpos += xpos_step;
+ float in = inbuf[i], out = 0.0f;
+ float sign = 1.0f;
+ for(int k = 0; k < unison_size; ++k) {
+ float vpos = uv[k].realpos1 * (1.0f - xpos) + uv[k].realpos2 * xpos; //optimize
+ float pos = (float)(delay_k + max_delay) - vpos - 1.0f;
+ int posi;
+ F2I(pos, posi); //optimize!
+ int posi_next = posi + 1;
+ if(posi >= max_delay)
+ posi -= max_delay;
+ if(posi_next >= max_delay)
+ posi_next -= max_delay;
+ float posf = pos - floorf(pos);
+ out += ((1.0f - posf) * delay_buffer[posi] + posf
+ * delay_buffer[posi_next]) * sign;
+ sign = -sign;
+ }
+ outbuf[i] = out * volume;
+// printf("%d %g\n",i,outbuf[i]);
+ delay_buffer[delay_k] = in;
+ delay_k = (++delay_k < max_delay) ? delay_k : 0;
+ }
+}
+
+void Unison::updateUnisonData()
+{
+ if(!uv)
+ return;
+
+ for(int k = 0; k < unison_size; ++k) {
+ float pos = uv[k].position;
+ float step = uv[k].step;
+ pos += step;
+ if(pos <= -1.0f) {
+ pos = -1.0f;
+ step = -step;
+ }
+ else
+ if(pos >= 1.0f) {
+ pos = 1.0f;
+ step = -step;
+ }
+ float vibratto_val = (pos - 0.333333333f * pos * pos * pos) * 1.5f; //make the vibratto lfo smoother
+
+ //Relative amplitude is utilized, so the delay may be larger than the
+ //whole buffer, if the buffer is too small, this indicates a buggy call
+ //to Unison()
+ float newval = 1.0f + 0.5f
+ * (vibratto_val + 1.0f) * unison_amplitude_samples
+ * uv[k].relative_amplitude;
+
+ if(first_time)
+ uv[k].realpos1 = uv[k].realpos2 = newval;
+ else {
+ uv[k].realpos1 = uv[k].realpos2;
+ uv[k].realpos2 = newval;
+ }
+
+ uv[k].position = pos;
+ uv[k].step = step;
+ }
+ first_time = false;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h
new file mode 100644
index 0000000..bca5ee8
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h
@@ -0,0 +1,76 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Unison.h - Unison effect (multivoice chorus)
+ Copyright (C) 2002-2009 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef UNISON_H
+#define UNISON_H
+
+#include "../Misc/Util.h"
+
+//how much the unison frequencies varies (always >= 1.0)
+#define UNISON_FREQ_SPAN 2.0f
+
+class Unison
+{
+ public:
+ Unison(int update_period_samples_, float max_delay_sec_, float srate_f);
+ ~Unison();
+
+ void setSize(int new_size);
+ void setBaseFrequency(float freq);
+ void setBandwidth(float bandwidth_cents);
+
+ void process(int bufsize, float *inbuf, float *outbuf = NULL);
+
+ private:
+ void updateParameters(void);
+ void updateUnisonData(void);
+
+ int unison_size;
+ float base_freq;
+ struct UnisonVoice {
+ float step; //base LFO
+ float position;
+ float realpos1; //the position regarding samples
+ float realpos2;
+ float relative_amplitude;
+ float lin_fpos;
+ float lin_ffreq;
+ UnisonVoice() {
+ position = RND * 1.8f - 0.9f;
+ realpos1 = 0.0f;
+ realpos2 = 0.0f;
+ step = 0.0f;
+ relative_amplitude = 1.0f;
+ }
+ } *uv;
+
+ int update_period_samples;
+ int update_period_sample_k;
+ int max_delay, delay_k;
+ bool first_time;
+ float *delay_buffer;
+ float unison_amplitude_samples;
+ float unison_bandwidth_cents;
+
+ // current setup
+ float samplerate_f;
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.cpp
new file mode 100644
index 0000000..fae1860
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.cpp
@@ -0,0 +1,236 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Alienwah.cpp - "AlienWah" effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include "Alienwah.h"
+
+Alienwah::Alienwah(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize)
+ :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize),
+ lfo(srate, bufsize),
+ oldl(NULL),
+ oldr(NULL)
+{
+ setpreset(Ppreset);
+ cleanup();
+ oldclfol = complex<float>(fb, 0.0f);
+ oldclfor = complex<float>(fb, 0.0f);
+}
+
+Alienwah::~Alienwah()
+{
+ if(oldl != NULL)
+ delete [] oldl;
+ if(oldr != NULL)
+ delete [] oldr;
+}
+
+
+//Apply the effect
+void Alienwah::out(const Stereo<float *> &smp)
+{
+ float lfol, lfor; //Left/Right LFOs
+ complex<float> clfol, clfor;
+ /**\todo Rework, as optimization can be used when the new complex type is
+ * utilized.
+ * Before all calculations needed to be done with individual float,
+ * but now they can be done together*/
+ lfo.effectlfoout(&lfol, &lfor);
+ lfol *= depth * PI * 2.0f;
+ lfor *= depth * PI * 2.0f;
+ clfol = complex<float>(cosf(lfol + phase) * fb, sinf(lfol + phase) * fb); //rework
+ clfor = complex<float>(cosf(lfor + phase) * fb, sinf(lfor + phase) * fb); //rework
+
+ for(int i = 0; i < buffersize; ++i) {
+ float x = ((float) i) / buffersize_f;
+ float x1 = 1.0f - x;
+ //left
+ complex<float> tmp = clfol * x + oldclfol * x1;
+
+ complex<float> out = tmp * oldl[oldk];
+ out += (1 - fabs(fb)) * smp.l[i] * pangainL;
+
+ oldl[oldk] = out;
+ float l = out.real() * 10.0f * (fb + 0.1f);
+
+ //right
+ tmp = clfor * x + oldclfor * x1;
+
+ out = tmp * oldr[oldk];
+ out += (1 - fabs(fb)) * smp.r[i] * pangainR;
+
+ oldr[oldk] = out;
+ float r = out.real() * 10.0f * (fb + 0.1f);
+
+
+ if(++oldk >= Pdelay)
+ oldk = 0;
+ //LRcross
+ efxoutl[i] = l * (1.0f - lrcross) + r * lrcross;
+ efxoutr[i] = r * (1.0f - lrcross) + l * lrcross;
+ }
+
+ oldclfol = clfol;
+ oldclfor = clfor;
+}
+
+//Cleanup the effect
+void Alienwah::cleanup(void)
+{
+ for(int i = 0; i < Pdelay; ++i) {
+ oldl[i] = complex<float>(0.0f, 0.0f);
+ oldr[i] = complex<float>(0.0f, 0.0f);
+ }
+ oldk = 0;
+}
+
+
+//Parameter control
+void Alienwah::setdepth(unsigned char _Pdepth)
+{
+ Pdepth = _Pdepth;
+ depth = Pdepth / 127.0f;
+}
+
+void Alienwah::setfb(unsigned char _Pfb)
+{
+ Pfb = _Pfb;
+ fb = fabs((Pfb - 64.0f) / 64.1f);
+ fb = sqrtf(fb);
+ if(fb < 0.4f)
+ fb = 0.4f;
+ if(Pfb < 64)
+ fb = -fb;
+}
+
+void Alienwah::setvolume(unsigned char _Pvolume)
+{
+ Pvolume = _Pvolume;
+ outvolume = Pvolume / 127.0f;
+ if(insertion == 0)
+ volume = 1.0f;
+ else
+ volume = outvolume;
+}
+
+void Alienwah::setphase(unsigned char _Pphase)
+{
+ Pphase = _Pphase;
+ phase = (Pphase - 64.0f) / 64.0f * PI;
+}
+
+void Alienwah::setdelay(unsigned char _Pdelay)
+{
+ if(oldl != NULL)
+ delete [] oldl;
+ if(oldr != NULL)
+ delete [] oldr;
+ Pdelay = (_Pdelay >= MAX_ALIENWAH_DELAY) ? MAX_ALIENWAH_DELAY : _Pdelay;
+ oldl = new complex<float>[Pdelay];
+ oldr = new complex<float>[Pdelay];
+ cleanup();
+}
+
+void Alienwah::setpreset(unsigned char npreset)
+{
+ const int PRESET_SIZE = 11;
+ const int NUM_PRESETS = 4;
+ unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
+ //AlienWah1
+ {127, 64, 70, 0, 0, 62, 60, 105, 25, 0, 64},
+ //AlienWah2
+ {127, 64, 73, 106, 0, 101, 60, 105, 17, 0, 64},
+ //AlienWah3
+ {127, 64, 63, 0, 1, 100, 112, 105, 31, 0, 42},
+ //AlienWah4
+ {93, 64, 25, 0, 1, 66, 101, 11, 47, 0, 86}
+ };
+
+ if(npreset >= NUM_PRESETS)
+ npreset = NUM_PRESETS - 1;
+ for(int n = 0; n < PRESET_SIZE; ++n)
+ changepar(n, presets[npreset][n]);
+ if(insertion == 0)
+ changepar(0, presets[npreset][0] / 2); //lower the volume if this is system effect
+ Ppreset = npreset;
+}
+
+
+void Alienwah::changepar(int npar, unsigned char value)
+{
+ switch(npar) {
+ case 0:
+ setvolume(value);
+ break;
+ case 1:
+ setpanning(value);
+ break;
+ case 2:
+ lfo.Pfreq = value;
+ lfo.updateparams();
+ break;
+ case 3:
+ lfo.Prandomness = value;
+ lfo.updateparams();
+ break;
+ case 4:
+ lfo.PLFOtype = value;
+ lfo.updateparams();
+ break;
+ case 5:
+ lfo.Pstereo = value;
+ lfo.updateparams();
+ break;
+ case 6:
+ setdepth(value);
+ break;
+ case 7:
+ setfb(value);
+ break;
+ case 8:
+ setdelay(value);
+ break;
+ case 9:
+ setlrcross(value);
+ break;
+ case 10:
+ setphase(value);
+ break;
+ }
+}
+
+unsigned char Alienwah::getpar(int npar) const
+{
+ switch(npar) {
+ case 0: return Pvolume;
+ case 1: return Ppanning;
+ case 2: return lfo.Pfreq;
+ case 3: return lfo.Prandomness;
+ case 4: return lfo.PLFOtype;
+ case 5: return lfo.Pstereo;
+ case 6: return Pdepth;
+ case 7: return Pfb;
+ case 8: return Pdelay;
+ case 9: return Plrcross;
+ case 10: return Pphase;
+ default: return 0;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h
new file mode 100644
index 0000000..52019ac
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h
@@ -0,0 +1,81 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Alienwah.h - "AlienWah" effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef ALIENWAH_H
+#define ALIENWAH_H
+
+#include <complex>
+#include "Effect.h"
+#include "EffectLFO.h"
+
+using namespace std;
+
+#define MAX_ALIENWAH_DELAY 100
+
+/**"AlienWah" Effect*/
+class Alienwah:public Effect
+{
+ public:
+ /**
+ * Constructor
+ * @param insertion_ true for insertion Effect
+ * @param efxoutl_ Pointer to Alienwah's left channel output buffer
+ * @param efxoutr_ Pointer to Alienwah's left channel output buffer
+ * @return Initialized Alienwah
+ */
+ Alienwah(bool insertion_,
+ float *const efxoutl_,
+ float *const efxoutr_,
+ unsigned int srate, int bufsize);
+ ~Alienwah();
+ void out(const Stereo<float *> &smp);
+
+ void setpreset(unsigned char npreset);
+ void changepar(int npar, unsigned char value);
+ unsigned char getpar(int npar) const;
+ void cleanup(void);
+
+ private:
+ //Alienwah Parameters
+ EffectLFO lfo; //lfo-ul Alienwah
+ unsigned char Pvolume;
+ unsigned char Pdepth; //the depth of the Alienwah
+ unsigned char Pfb; //feedback
+ unsigned char Pdelay;
+ unsigned char Pphase;
+
+
+ //Control Parameters
+ void setvolume(unsigned char _Pvolume);
+ void setdepth(unsigned char _Pdepth);
+ void setfb(unsigned char _Pfb);
+ void setdelay(unsigned char _Pdelay);
+ void setphase(unsigned char _Pphase);
+
+ //Internal Values
+ float fb, depth, phase;
+ complex<float> *oldl, *oldr;
+ complex<float> oldclfol, oldclfor;
+ int oldk;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/CMakeLists.txt
new file mode 100644
index 0000000..803cbca
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/CMakeLists.txt
@@ -0,0 +1,14 @@
+set(zynaddsubfx_effect_SRCS
+ Effects/Alienwah.cpp
+ Effects/Chorus.cpp
+ Effects/Distorsion.cpp
+ Effects/DynamicFilter.cpp
+ Effects/Echo.cpp
+ Effects/Effect.cpp
+ Effects/EffectLFO.cpp
+ Effects/EffectMgr.cpp
+ Effects/EQ.cpp
+ Effects/Phaser.cpp
+ Effects/Reverb.cpp
+ PARENT_SCOPE
+)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp
new file mode 100644
index 0000000..7e95a21
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp
@@ -0,0 +1,269 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Chorus.cpp - Chorus and Flange effects
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include "Chorus.h"
+#include <iostream>
+
+using namespace std;
+
+Chorus::Chorus(bool insertion_, float *const efxoutl_, float *efxoutr_, unsigned int srate, int bufsize)
+ :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize),
+ lfo(srate, bufsize),
+ maxdelay((int)(MAX_CHORUS_DELAY / 1000.0f * samplerate_f)),
+ delaySample(new float[maxdelay], new float[maxdelay])
+{
+ dlk = 0;
+ drk = 0;
+ setpreset(Ppreset);
+ changepar(1, 64);
+ lfo.effectlfoout(&lfol, &lfor);
+ dl2 = getdelay(lfol);
+ dr2 = getdelay(lfor);
+ cleanup();
+}
+
+Chorus::~Chorus()
+{
+ delete [] delaySample.l;
+ delete [] delaySample.r;
+}
+
+//get the delay value in samples; xlfo is the current lfo value
+float Chorus::getdelay(float xlfo)
+{
+ float result =
+ (Pflangemode) ? 0 : (delay + xlfo * depth) * samplerate_f;
+
+ //check if delay is too big (caused by bad setdelay() and setdepth()
+ if((result + 0.5f) >= maxdelay) {
+ cerr
+ <<
+ "WARNING: Chorus.cpp::getdelay(..) too big delay (see setdelay and setdepth funcs.)"
+ << endl;
+ result = maxdelay - 1.0f;
+ }
+ return result;
+}
+
+//Apply the effect
+void Chorus::out(const Stereo<float *> &input)
+{
+ const float one = 1.0f;
+ dl1 = dl2;
+ dr1 = dr2;
+ lfo.effectlfoout(&lfol, &lfor);
+
+ dl2 = getdelay(lfol);
+ dr2 = getdelay(lfor);
+
+ for(int i = 0; i < buffersize; ++i) {
+ float inL = input.l[i];
+ float inR = input.r[i];
+ //LRcross
+ Stereo<float> tmpc(inL, inR);
+ inL = tmpc.l * (1.0f - lrcross) + tmpc.r * lrcross;
+ inR = tmpc.r * (1.0f - lrcross) + tmpc.l * lrcross;
+
+ //Left channel
+
+ //compute the delay in samples using linear interpolation between the lfo delays
+ float mdel =
+ (dl1 * (buffersize - i) + dl2 * i) / buffersize_f;
+ if(++dlk >= maxdelay)
+ dlk = 0;
+ float tmp = dlk - mdel + maxdelay * 2.0f; //where should I get the sample from
+
+ dlhi = (int) tmp;
+ dlhi %= maxdelay;
+
+ float dlhi2 = (dlhi - 1 + maxdelay) % maxdelay;
+ float dllo = 1.0f - fmod(tmp, one);
+ efxoutl[i] = cinterpolate(delaySample.l, maxdelay, dlhi2) * dllo
+ + cinterpolate(delaySample.l, maxdelay,
+ dlhi) * (1.0f - dllo);
+ delaySample.l[dlk] = inL + efxoutl[i] * fb;
+
+ //Right channel
+
+ //compute the delay in samples using linear interpolation between the lfo delays
+ mdel = (dr1 * (buffersize - i) + dr2 * i) / buffersize_f;
+ if(++drk >= maxdelay)
+ drk = 0;
+ tmp = drk * 1.0f - mdel + maxdelay * 2.0f; //where should I get the sample from
+
+ dlhi = (int) tmp;
+ dlhi %= maxdelay;
+
+ dlhi2 = (dlhi - 1 + maxdelay) % maxdelay;
+ dllo = 1.0f - fmodf(tmp, one);
+ efxoutr[i] = cinterpolate(delaySample.r, maxdelay, dlhi2) * dllo
+ + cinterpolate(delaySample.r, maxdelay,
+ dlhi) * (1.0f - dllo);
+ delaySample.r[dlk] = inR + efxoutr[i] * fb;
+ }
+
+ if(Poutsub)
+ for(int i = 0; i < buffersize; ++i) {
+ efxoutl[i] *= -1.0f;
+ efxoutr[i] *= -1.0f;
+ }
+
+ for(int i = 0; i < buffersize; ++i) {
+ efxoutl[i] *= pangainL;
+ efxoutr[i] *= pangainR;
+ }
+}
+
+//Cleanup the effect
+void Chorus::cleanup(void)
+{
+ memset(delaySample.l, 0, maxdelay * sizeof(float));
+ memset(delaySample.r, 0, maxdelay * sizeof(float));
+}
+
+//Parameter control
+void Chorus::setdepth(unsigned char _Pdepth)
+{
+ Pdepth = _Pdepth;
+ depth = (powf(8.0f, (Pdepth / 127.0f) * 2.0f) - 1.0f) / 1000.0f; //seconds
+}
+
+void Chorus::setdelay(unsigned char _Pdelay)
+{
+ Pdelay = _Pdelay;
+ delay = (powf(10.0f, (Pdelay / 127.0f) * 2.0f) - 1.0f) / 1000.0f; //seconds
+}
+
+void Chorus::setfb(unsigned char _Pfb)
+{
+ Pfb = _Pfb;
+ fb = (Pfb - 64.0f) / 64.1f;
+}
+
+void Chorus::setvolume(unsigned char _Pvolume)
+{
+ Pvolume = _Pvolume;
+ outvolume = Pvolume / 127.0f;
+ volume = (!insertion) ? 1.0f : outvolume;
+}
+
+
+void Chorus::setpreset(unsigned char npreset)
+{
+ const int PRESET_SIZE = 12;
+ const int NUM_PRESETS = 10;
+ unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
+ //Chorus1
+ {64, 64, 50, 0, 0, 90, 40, 85, 64, 119, 0, 0},
+ //Chorus2
+ {64, 64, 45, 0, 0, 98, 56, 90, 64, 19, 0, 0},
+ //Chorus3
+ {64, 64, 29, 0, 1, 42, 97, 95, 90, 127, 0, 0},
+ //Celeste1
+ {64, 64, 26, 0, 0, 42, 115, 18, 90, 127, 0, 0},
+ //Celeste2
+ {64, 64, 29, 117, 0, 50, 115, 9, 31, 127, 0, 1},
+ //Flange1
+ {64, 64, 57, 0, 0, 60, 23, 3, 62, 0, 0, 0},
+ //Flange2
+ {64, 64, 33, 34, 1, 40, 35, 3, 109, 0, 0, 0},
+ //Flange3
+ {64, 64, 53, 34, 1, 94, 35, 3, 54, 0, 0, 1},
+ //Flange4
+ {64, 64, 40, 0, 1, 62, 12, 19, 97, 0, 0, 0},
+ //Flange5
+ {64, 64, 55, 105, 0, 24, 39, 19, 17, 0, 0, 1}
+ };
+
+ if(npreset >= NUM_PRESETS)
+ npreset = NUM_PRESETS - 1;
+ for(int n = 0; n < PRESET_SIZE; ++n)
+ changepar(n, presets[npreset][n]);
+ Ppreset = npreset;
+}
+
+
+void Chorus::changepar(int npar, unsigned char value)
+{
+ switch(npar) {
+ case 0:
+ setvolume(value);
+ break;
+ case 1:
+ setpanning(value);
+ break;
+ case 2:
+ lfo.Pfreq = value;
+ lfo.updateparams();
+ break;
+ case 3:
+ lfo.Prandomness = value;
+ lfo.updateparams();
+ break;
+ case 4:
+ lfo.PLFOtype = value;
+ lfo.updateparams();
+ break;
+ case 5:
+ lfo.Pstereo = value;
+ lfo.updateparams();
+ break;
+ case 6:
+ setdepth(value);
+ break;
+ case 7:
+ setdelay(value);
+ break;
+ case 8:
+ setfb(value);
+ break;
+ case 9:
+ setlrcross(value);
+ break;
+ case 10:
+ Pflangemode = (value > 1) ? 1 : value;
+ break;
+ case 11:
+ Poutsub = (value > 1) ? 1 : value;
+ break;
+ }
+}
+
+unsigned char Chorus::getpar(int npar) const
+{
+ switch(npar) {
+ case 0: return Pvolume;
+ case 1: return Ppanning;
+ case 2: return lfo.Pfreq;
+ case 3: return lfo.Prandomness;
+ case 4: return lfo.PLFOtype;
+ case 5: return lfo.Pstereo;
+ case 6: return Pdepth;
+ case 7: return Pdelay;
+ case 8: return Pfb;
+ case 9: return Plrcross;
+ case 10: return Pflangemode;
+ case 11: return Poutsub;
+ default: return 0;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h
new file mode 100644
index 0000000..7772d46
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h
@@ -0,0 +1,106 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Chorus.h - Chorus and Flange effects
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef CHORUS_H
+#define CHORUS_H
+#include "Effect.h"
+#include "EffectLFO.h"
+#include "../Misc/Stereo.h"
+
+#define MAX_CHORUS_DELAY 250.0f //ms
+
+/**Chorus and Flange effects*/
+class Chorus:public Effect
+{
+ public:
+ Chorus(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize);
+ /**Destructor*/
+ ~Chorus();
+ void out(const Stereo<float *> &input);
+ void setpreset(unsigned char npreset);
+ /**
+ * Sets the value of the chosen variable
+ *
+ * The possible parameters are:
+ * -# Volume
+ * -# Panning
+ * -# LFO Frequency
+ * -# LFO Randomness
+ * -# LFO Type
+ * -# LFO stereo
+ * -# Depth
+ * -# Delay
+ * -# Feedback
+ * -# Flange Mode
+ * -# Subtractive
+ * @param npar number of chosen parameter
+ * @param value the new value
+ */
+ void changepar(int npar, unsigned char value);
+ /**
+ * Gets the value of the chosen variable
+ *
+ * The possible parameters are:
+ * -# Volume
+ * -# Panning
+ * -# LFO Frequency
+ * -# LFO Randomness
+ * -# LFO Type
+ * -# LFO stereo
+ * -# Depth
+ * -# Delay
+ * -# Feedback
+ * -# Flange Mode
+ * -# Subtractive
+ * @param npar number of chosen parameter
+ * @return the value of the parameter
+ */
+ unsigned char getpar(int npar) const;
+ void cleanup(void);
+
+ private:
+ //Chorus Parameters
+ unsigned char Pvolume;
+ unsigned char Pdepth; //the depth of the Chorus(ms)
+ unsigned char Pdelay; //the delay (ms)
+ unsigned char Pfb; //feedback
+ unsigned char Pflangemode; //how the LFO is scaled, to result chorus or flange
+ unsigned char Poutsub; //if I wish to substract the output instead of the adding it
+ EffectLFO lfo; //lfo-ul chorus
+
+
+ //Parameter Controls
+ void setvolume(unsigned char _Pvolume);
+ void setdepth(unsigned char _Pdepth);
+ void setdelay(unsigned char _Pdelay);
+ void setfb(unsigned char _Pfb);
+
+ //Internal Values
+ float depth, delay, fb;
+ float dl1, dl2, dr1, dr2, lfol, lfor;
+ int maxdelay;
+ Stereo<float *> delaySample;
+ int dlk, drk, dlhi;
+ float getdelay(float xlfo);
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.cpp
new file mode 100644
index 0000000..5d5c8f6
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.cpp
@@ -0,0 +1,245 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Distorsion.cpp - Distorsion effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Distorsion.h"
+#include "../DSP/AnalogFilter.h"
+#include "../Misc/WaveShapeSmps.h"
+#include <cmath>
+
+Distorsion::Distorsion(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize)
+ :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize),
+ Pvolume(50),
+ Pdrive(90),
+ Plevel(64),
+ Ptype(0),
+ Pnegate(0),
+ Plpf(127),
+ Phpf(0),
+ Pstereo(0),
+ Pprefiltering(0)
+{
+ lpfl = new AnalogFilter(2, 22000, 1, 0, srate, bufsize);
+ lpfr = new AnalogFilter(2, 22000, 1, 0, srate, bufsize);
+ hpfl = new AnalogFilter(3, 20, 1, 0, srate, bufsize);
+ hpfr = new AnalogFilter(3, 20, 1, 0, srate, bufsize);
+ setpreset(Ppreset);
+ cleanup();
+}
+
+Distorsion::~Distorsion()
+{
+ delete lpfl;
+ delete lpfr;
+ delete hpfl;
+ delete hpfr;
+}
+
+//Cleanup the effect
+void Distorsion::cleanup(void)
+{
+ lpfl->cleanup();
+ hpfl->cleanup();
+ lpfr->cleanup();
+ hpfr->cleanup();
+}
+
+
+//Apply the filters
+void Distorsion::applyfilters(float *efxoutl, float *efxoutr)
+{
+ lpfl->filterout(efxoutl);
+ hpfl->filterout(efxoutl);
+ if(Pstereo != 0) { //stereo
+ lpfr->filterout(efxoutr);
+ hpfr->filterout(efxoutr);
+ }
+}
+
+
+//Effect output
+void Distorsion::out(const Stereo<float *> &smp)
+{
+ float inputvol = powf(5.0f, (Pdrive - 32.0f) / 127.0f);
+ if(Pnegate)
+ inputvol *= -1.0f;
+
+ if(Pstereo) //Stereo
+ for(int i = 0; i < buffersize; ++i) {
+ efxoutl[i] = smp.l[i] * inputvol * pangainL;
+ efxoutr[i] = smp.r[i] * inputvol * pangainR;
+ }
+ else //Mono
+ for(int i = 0; i < buffersize; ++i)
+ efxoutl[i] = (smp.l[i] * pangainL + smp.r[i] * pangainR) * inputvol;
+
+ if(Pprefiltering)
+ applyfilters(efxoutl, efxoutr);
+
+ waveShapeSmps(buffersize, efxoutl, Ptype + 1, Pdrive);
+ if(Pstereo)
+ waveShapeSmps(buffersize, efxoutr, Ptype + 1, Pdrive);
+
+ if(!Pprefiltering)
+ applyfilters(efxoutl, efxoutr);
+
+ if(!Pstereo)
+ memcpy(efxoutr, efxoutl, bufferbytes);
+
+ float level = dB2rap(60.0f * Plevel / 127.0f - 40.0f);
+ for(int i = 0; i < buffersize; ++i) {
+ float lout = efxoutl[i];
+ float rout = efxoutr[i];
+ float l = lout * (1.0f - lrcross) + rout * lrcross;
+ float r = rout * (1.0f - lrcross) + lout * lrcross;
+ lout = l;
+ rout = r;
+
+ efxoutl[i] = lout * 2.0f * level;
+ efxoutr[i] = rout * 2.0f * level;
+ }
+}
+
+
+//Parameter control
+void Distorsion::setvolume(unsigned char _Pvolume)
+{
+ Pvolume = _Pvolume;
+
+ if(insertion == 0) {
+ outvolume = powf(0.01f, (1.0f - Pvolume / 127.0f)) * 4.0f;
+ volume = 1.0f;
+ }
+ else
+ volume = outvolume = Pvolume / 127.0f;
+ if(Pvolume == 0)
+ cleanup();
+}
+
+void Distorsion::setlpf(unsigned char _Plpf)
+{
+ Plpf = _Plpf;
+ float fr = expf(powf(Plpf / 127.0f, 0.5f) * logf(25000.0f)) + 40.0f;
+ lpfl->setfreq(fr);
+ lpfr->setfreq(fr);
+}
+
+void Distorsion::sethpf(unsigned char _Phpf)
+{
+ Phpf = _Phpf;
+ float fr = expf(powf(Phpf / 127.0f, 0.5f) * logf(25000.0f)) + 20.0f;
+ hpfl->setfreq(fr);
+ hpfr->setfreq(fr);
+}
+
+
+void Distorsion::setpreset(unsigned char npreset)
+{
+ const int PRESET_SIZE = 11;
+ const int NUM_PRESETS = 6;
+ unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
+ //Overdrive 1
+ {127, 64, 35, 56, 70, 0, 0, 96, 0, 0, 0},
+ //Overdrive 2
+ {127, 64, 35, 29, 75, 1, 0, 127, 0, 0, 0},
+ //A. Exciter 1
+ {64, 64, 35, 75, 80, 5, 0, 127, 105, 1, 0},
+ //A. Exciter 2
+ {64, 64, 35, 85, 62, 1, 0, 127, 118, 1, 0},
+ //Guitar Amp
+ {127, 64, 35, 63, 75, 2, 0, 55, 0, 0, 0},
+ //Quantisize
+ {127, 64, 35, 88, 75, 4, 0, 127, 0, 1, 0}
+ };
+
+ if(npreset >= NUM_PRESETS)
+ npreset = NUM_PRESETS - 1;
+ for(int n = 0; n < PRESET_SIZE; ++n)
+ changepar(n, presets[npreset][n]);
+ if(!insertion) //lower the volume if this is system effect
+ changepar(0, (int) (presets[npreset][0] / 1.5f));
+ Ppreset = npreset;
+ cleanup();
+}
+
+
+void Distorsion::changepar(int npar, unsigned char value)
+{
+ switch(npar) {
+ case 0:
+ setvolume(value);
+ break;
+ case 1:
+ setpanning(value);
+ break;
+ case 2:
+ setlrcross(value);
+ break;
+ case 3:
+ Pdrive = value;
+ break;
+ case 4:
+ Plevel = value;
+ break;
+ case 5:
+ if(value > 13)
+ Ptype = 13; //this must be increased if more distorsion types are added
+ else
+ Ptype = value;
+ break;
+ case 6:
+ if(value > 1)
+ Pnegate = 1;
+ else
+ Pnegate = value;
+ break;
+ case 7:
+ setlpf(value);
+ break;
+ case 8:
+ sethpf(value);
+ break;
+ case 9:
+ Pstereo = (value > 1) ? 1 : value;
+ break;
+ case 10:
+ Pprefiltering = value;
+ break;
+ }
+}
+
+unsigned char Distorsion::getpar(int npar) const
+{
+ switch(npar) {
+ case 0: return Pvolume;
+ case 1: return Ppanning;
+ case 2: return Plrcross;
+ case 3: return Pdrive;
+ case 4: return Plevel;
+ case 5: return Ptype;
+ case 6: return Pnegate;
+ case 7: return Plpf;
+ case 8: return Phpf;
+ case 9: return Pstereo;
+ case 10: return Pprefiltering;
+ default: return 0; //in case of bogus parameter number
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.h
new file mode 100644
index 0000000..9d577dd
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.h
@@ -0,0 +1,61 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Distorsion.h - Distorsion Effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef DISTORSION_H
+#define DISTORSION_H
+
+#include "Effect.h"
+
+/**Distortion Effect*/
+class Distorsion:public Effect
+{
+ public:
+ Distorsion(bool insertion, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize);
+ ~Distorsion();
+ void out(const Stereo<float *> &smp);
+ void setpreset(unsigned char npreset);
+ void changepar(int npar, unsigned char value);
+ unsigned char getpar(int npar) const;
+ void cleanup(void);
+ void applyfilters(float *efxoutl, float *efxoutr);
+
+ private:
+ //Parameters
+ unsigned char Pvolume; //Volume or E/R
+ unsigned char Pdrive; //the input amplification
+ unsigned char Plevel; //the output amplification
+ unsigned char Ptype; //Distorsion type
+ unsigned char Pnegate; //if the input is negated
+ unsigned char Plpf; //lowpass filter
+ unsigned char Phpf; //highpass filter
+ unsigned char Pstereo; //0=mono, 1=stereo
+ unsigned char Pprefiltering; //if you want to do the filtering before the distorsion
+
+ void setvolume(unsigned char _Pvolume);
+ void setlpf(unsigned char _Plpf);
+ void sethpf(unsigned char _Phpf);
+
+ //Real Parameters
+ class AnalogFilter * lpfl, *lpfr, *hpfl, *hpfr;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.cpp
new file mode 100644
index 0000000..650a882
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.cpp
@@ -0,0 +1,312 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ DynamicFilter.cpp - "WahWah" effect and others
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include "DynamicFilter.h"
+#include "../DSP/Filter.h"
+
+DynamicFilter::DynamicFilter(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize)
+ :Effect(insertion_, efxoutl_, efxoutr_, new FilterParams(0, 64, 64), 0, srate, bufsize),
+ lfo(srate, bufsize),
+ Pvolume(110),
+ Pdepth(0),
+ Pampsns(90),
+ Pampsnsinv(0),
+ Pampsmooth(60),
+ filterl(NULL),
+ filterr(NULL)
+{
+ setpreset(Ppreset);
+ cleanup();
+}
+
+DynamicFilter::~DynamicFilter()
+{
+ delete filterpars;
+ delete filterl;
+ delete filterr;
+}
+
+
+// Apply the effect
+void DynamicFilter::out(const Stereo<float *> &smp)
+{
+ if(filterpars->changed) {
+ filterpars->changed = false;
+ cleanup();
+ }
+
+ float lfol, lfor;
+ lfo.effectlfoout(&lfol, &lfor);
+ lfol *= depth * 5.0f;
+ lfor *= depth * 5.0f;
+ const float freq = filterpars->getfreq();
+ const float q = filterpars->getq();
+
+ for(int i = 0; i < buffersize; ++i) {
+ efxoutl[i] = smp.l[i];
+ efxoutr[i] = smp.r[i];
+
+ const float x = (fabsf(smp.l[i]) + fabsf(smp.r[i])) * 0.5f;
+ ms1 = ms1 * (1.0f - ampsmooth) + x * ampsmooth + 1e-10;
+ }
+
+ const float ampsmooth2 = powf(ampsmooth, 0.2f) * 0.3f;
+ ms2 = ms2 * (1.0f - ampsmooth2) + ms1 * ampsmooth2;
+ ms3 = ms3 * (1.0f - ampsmooth2) + ms2 * ampsmooth2;
+ ms4 = ms4 * (1.0f - ampsmooth2) + ms3 * ampsmooth2;
+ const float rms = (sqrtf(ms4)) * ampsns;
+
+ const float frl = Filter::getrealfreq(freq + lfol + rms);
+ const float frr = Filter::getrealfreq(freq + lfor + rms);
+
+ filterl->setfreq_and_q(frl, q);
+ filterr->setfreq_and_q(frr, q);
+
+ filterl->filterout(efxoutl);
+ filterr->filterout(efxoutr);
+
+ //panning
+ for(int i = 0; i < buffersize; ++i) {
+ efxoutl[i] *= pangainL;
+ efxoutr[i] *= pangainR;
+ }
+}
+
+// Cleanup the effect
+void DynamicFilter::cleanup(void)
+{
+ reinitfilter();
+ ms1 = ms2 = ms3 = ms4 = 0.0f;
+}
+
+
+//Parameter control
+void DynamicFilter::setdepth(unsigned char _Pdepth)
+{
+ Pdepth = _Pdepth;
+ depth = powf(Pdepth / 127.0f, 2.0f);
+}
+
+
+void DynamicFilter::setvolume(unsigned char _Pvolume)
+{
+ Pvolume = _Pvolume;
+ outvolume = Pvolume / 127.0f;
+ if(!insertion)
+ volume = 1.0f;
+ else
+ volume = outvolume;
+}
+
+void DynamicFilter::setampsns(unsigned char _Pampsns)
+{
+ Pampsns = _Pampsns;
+ ampsns = powf(Pampsns / 127.0f, 2.5f) * 10.0f;
+ if(Pampsnsinv)
+ ampsns = -ampsns;
+ ampsmooth = expf(-Pampsmooth / 127.0f * 10.0f) * 0.99f;
+}
+
+void DynamicFilter::reinitfilter(void)
+{
+ delete filterl;
+ delete filterr;
+ filterl = Filter::generate(filterpars, samplerate, buffersize);
+ filterr = Filter::generate(filterpars, samplerate, buffersize);
+}
+
+void DynamicFilter::setpreset(unsigned char npreset)
+{
+ const int PRESET_SIZE = 10;
+ const int NUM_PRESETS = 5;
+ unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
+ //WahWah
+ {110, 64, 80, 0, 0, 64, 0, 90, 0, 60},
+ //AutoWah
+ {110, 64, 70, 0, 0, 80, 70, 0, 0, 60},
+ //Sweep
+ {100, 64, 30, 0, 0, 50, 80, 0, 0, 60},
+ //VocalMorph1
+ {110, 64, 80, 0, 0, 64, 0, 64, 0, 60},
+ //VocalMorph1
+ {127, 64, 50, 0, 0, 96, 64, 0, 0, 60}
+ };
+
+ if(npreset >= NUM_PRESETS)
+ npreset = NUM_PRESETS - 1;
+ for(int n = 0; n < PRESET_SIZE; ++n)
+ changepar(n, presets[npreset][n]);
+
+ filterpars->defaults();
+
+ switch(npreset) {
+ case 0:
+ filterpars->Pcategory = 0;
+ filterpars->Ptype = 2;
+ filterpars->Pfreq = 45;
+ filterpars->Pq = 64;
+ filterpars->Pstages = 1;
+ filterpars->Pgain = 64;
+ break;
+ case 1:
+ filterpars->Pcategory = 2;
+ filterpars->Ptype = 0;
+ filterpars->Pfreq = 72;
+ filterpars->Pq = 64;
+ filterpars->Pstages = 0;
+ filterpars->Pgain = 64;
+ break;
+ case 2:
+ filterpars->Pcategory = 0;
+ filterpars->Ptype = 4;
+ filterpars->Pfreq = 64;
+ filterpars->Pq = 64;
+ filterpars->Pstages = 2;
+ filterpars->Pgain = 64;
+ break;
+ case 3:
+ filterpars->Pcategory = 1;
+ filterpars->Ptype = 0;
+ filterpars->Pfreq = 50;
+ filterpars->Pq = 70;
+ filterpars->Pstages = 1;
+ filterpars->Pgain = 64;
+
+ filterpars->Psequencesize = 2;
+ // "I"
+ filterpars->Pvowels[0].formants[0].freq = 34;
+ filterpars->Pvowels[0].formants[0].amp = 127;
+ filterpars->Pvowels[0].formants[0].q = 64;
+ filterpars->Pvowels[0].formants[1].freq = 99;
+ filterpars->Pvowels[0].formants[1].amp = 122;
+ filterpars->Pvowels[0].formants[1].q = 64;
+ filterpars->Pvowels[0].formants[2].freq = 108;
+ filterpars->Pvowels[0].formants[2].amp = 112;
+ filterpars->Pvowels[0].formants[2].q = 64;
+ // "A"
+ filterpars->Pvowels[1].formants[0].freq = 61;
+ filterpars->Pvowels[1].formants[0].amp = 127;
+ filterpars->Pvowels[1].formants[0].q = 64;
+ filterpars->Pvowels[1].formants[1].freq = 71;
+ filterpars->Pvowels[1].formants[1].amp = 121;
+ filterpars->Pvowels[1].formants[1].q = 64;
+ filterpars->Pvowels[1].formants[2].freq = 99;
+ filterpars->Pvowels[1].formants[2].amp = 117;
+ filterpars->Pvowels[1].formants[2].q = 64;
+ break;
+ case 4:
+ filterpars->Pcategory = 1;
+ filterpars->Ptype = 0;
+ filterpars->Pfreq = 64;
+ filterpars->Pq = 70;
+ filterpars->Pstages = 1;
+ filterpars->Pgain = 64;
+
+ filterpars->Psequencesize = 2;
+ filterpars->Pnumformants = 2;
+ filterpars->Pvowelclearness = 0;
+
+ filterpars->Pvowels[0].formants[0].freq = 70;
+ filterpars->Pvowels[0].formants[0].amp = 127;
+ filterpars->Pvowels[0].formants[0].q = 64;
+ filterpars->Pvowels[0].formants[1].freq = 80;
+ filterpars->Pvowels[0].formants[1].amp = 122;
+ filterpars->Pvowels[0].formants[1].q = 64;
+
+ filterpars->Pvowels[1].formants[0].freq = 20;
+ filterpars->Pvowels[1].formants[0].amp = 127;
+ filterpars->Pvowels[1].formants[0].q = 64;
+ filterpars->Pvowels[1].formants[1].freq = 100;
+ filterpars->Pvowels[1].formants[1].amp = 121;
+ filterpars->Pvowels[1].formants[1].q = 64;
+ break;
+ }
+
+// for (int i=0;i<5;i++){
+// printf("freq=%d amp=%d q=%d\n",filterpars->Pvowels[0].formants[i].freq,filterpars->Pvowels[0].formants[i].amp,filterpars->Pvowels[0].formants[i].q);
+// };
+ if(insertion == 0) //lower the volume if this is system effect
+ changepar(0, presets[npreset][0] * 0.5f);
+ Ppreset = npreset;
+ reinitfilter();
+}
+
+
+void DynamicFilter::changepar(int npar, unsigned char value)
+{
+ switch(npar) {
+ case 0:
+ setvolume(value);
+ break;
+ case 1:
+ setpanning(value);
+ break;
+ case 2:
+ lfo.Pfreq = value;
+ lfo.updateparams();
+ break;
+ case 3:
+ lfo.Prandomness = value;
+ lfo.updateparams();
+ break;
+ case 4:
+ lfo.PLFOtype = value;
+ lfo.updateparams();
+ break;
+ case 5:
+ lfo.Pstereo = value;
+ lfo.updateparams();
+ break;
+ case 6:
+ setdepth(value);
+ break;
+ case 7:
+ setampsns(value);
+ break;
+ case 8:
+ Pampsnsinv = value;
+ setampsns(Pampsns);
+ break;
+ case 9:
+ Pampsmooth = value;
+ setampsns(Pampsns);
+ break;
+ }
+}
+
+unsigned char DynamicFilter::getpar(int npar) const
+{
+ switch(npar) {
+ case 0: return Pvolume;
+ case 1: return Ppanning;
+ case 2: return lfo.Pfreq;
+ case 3: return lfo.Prandomness;
+ case 4: return lfo.PLFOtype;
+ case 5: return lfo.Pstereo;
+ case 6: return Pdepth;
+ case 7: return Pampsns;
+ case 8: return Pampsnsinv;
+ case 9: return Pampsmooth;
+ default: return 0;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.h
new file mode 100644
index 0000000..91d1f5e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.h
@@ -0,0 +1,65 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ DynamicFilter.h - "WahWah" effect and others
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef DYNAMICFILTER_H
+#define DYNAMICFILTER_H
+
+#include "Effect.h"
+#include "EffectLFO.h"
+
+/**DynamicFilter Effect*/
+class DynamicFilter:public Effect
+{
+ public:
+ DynamicFilter(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize);
+ ~DynamicFilter();
+ void out(const Stereo<float *> &smp);
+
+ void setpreset(unsigned char npreset);
+ void changepar(int npar, unsigned char value);
+ unsigned char getpar(int npar) const;
+ void cleanup(void);
+
+ private:
+ //Parametrii DynamicFilter
+ EffectLFO lfo; //lfo-ul DynamicFilter
+ unsigned char Pvolume; //Volume
+ unsigned char Pdepth; //the depth of the lfo
+ unsigned char Pampsns; //how the filter varies according to the input amplitude
+ unsigned char Pampsnsinv; //if the filter freq is lowered if the input amplitude rises
+ unsigned char Pampsmooth; //how smooth the input amplitude changes the filter
+
+ //Parameter Control
+ void setvolume(unsigned char _Pvolume);
+ void setdepth(unsigned char _Pdepth);
+ void setampsns(unsigned char _Pampsns);
+
+ void reinitfilter(void);
+
+ //Internal Values
+ float depth, ampsns, ampsmooth;
+
+ class Filter * filterl, *filterr;
+ float ms1, ms2, ms3, ms4; //mean squares
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp
new file mode 100644
index 0000000..e03fcef
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp
@@ -0,0 +1,198 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EQ.cpp - EQ effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include "EQ.h"
+#include "../DSP/AnalogFilter.h"
+
+EQ::EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize)
+ :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize)
+{
+ for(int i = 0; i < MAX_EQ_BANDS; ++i) {
+ filter[i].Ptype = 0;
+ filter[i].Pfreq = 64;
+ filter[i].Pgain = 64;
+ filter[i].Pq = 64;
+ filter[i].Pstages = 0;
+ filter[i].l = new AnalogFilter(6, 1000.0f, 1.0f, 0, srate, bufsize);
+ filter[i].r = new AnalogFilter(6, 1000.0f, 1.0f, 0, srate, bufsize);
+ }
+ //default values
+ Pvolume = 50;
+
+ setpreset(Ppreset);
+ cleanup();
+}
+
+
+// Cleanup the effect
+void EQ::cleanup(void)
+{
+ for(int i = 0; i < MAX_EQ_BANDS; ++i) {
+ filter[i].l->cleanup();
+ filter[i].r->cleanup();
+ }
+}
+
+//Effect output
+void EQ::out(const Stereo<float *> &smp)
+{
+ for(int i = 0; i < buffersize; ++i) {
+ efxoutl[i] = smp.l[i] * volume;
+ efxoutr[i] = smp.r[i] * volume;
+ }
+
+ for(int i = 0; i < MAX_EQ_BANDS; ++i) {
+ if(filter[i].Ptype == 0)
+ continue;
+ filter[i].l->filterout(efxoutl);
+ filter[i].r->filterout(efxoutr);
+ }
+}
+
+
+//Parameter control
+void EQ::setvolume(unsigned char _Pvolume)
+{
+ Pvolume = _Pvolume;
+ outvolume = powf(0.005f, (1.0f - Pvolume / 127.0f)) * 10.0f;
+ volume = (!insertion) ? 1.0f : outvolume;
+}
+
+
+void EQ::setpreset(unsigned char npreset)
+{
+ const int PRESET_SIZE = 1;
+ const int NUM_PRESETS = 2;
+ unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
+ {67}, //EQ 1
+ {67} //EQ 2
+ };
+
+ if(npreset >= NUM_PRESETS)
+ npreset = NUM_PRESETS - 1;
+ for(int n = 0; n < PRESET_SIZE; ++n)
+ changepar(n, presets[npreset][n]);
+ Ppreset = npreset;
+}
+
+
+void EQ::changepar(int npar, unsigned char value)
+{
+ switch(npar) {
+ case 0:
+ setvolume(value);
+ break;
+ }
+ if(npar < 10)
+ return;
+
+ int nb = (npar - 10) / 5; //number of the band (filter)
+ if(nb >= MAX_EQ_BANDS)
+ return;
+ int bp = npar % 5; //band paramenter
+
+ float tmp;
+ switch(bp) {
+ case 0:
+ filter[nb].Ptype = value;
+ if(value > 9)
+ filter[nb].Ptype = 0; //has to be changed if more filters will be added
+ if(filter[nb].Ptype != 0) {
+ filter[nb].l->settype(value - 1);
+ filter[nb].r->settype(value - 1);
+ }
+ break;
+ case 1:
+ filter[nb].Pfreq = value;
+ tmp = 600.0f * powf(30.0f, (value - 64.0f) / 64.0f);
+ filter[nb].l->setfreq(tmp);
+ filter[nb].r->setfreq(tmp);
+ break;
+ case 2:
+ filter[nb].Pgain = value;
+ tmp = 30.0f * (value - 64.0f) / 64.0f;
+ filter[nb].l->setgain(tmp);
+ filter[nb].r->setgain(tmp);
+ break;
+ case 3:
+ filter[nb].Pq = value;
+ tmp = powf(30.0f, (value - 64.0f) / 64.0f);
+ filter[nb].l->setq(tmp);
+ filter[nb].r->setq(tmp);
+ break;
+ case 4:
+ filter[nb].Pstages = value;
+ if(value >= MAX_FILTER_STAGES)
+ filter[nb].Pstages = MAX_FILTER_STAGES - 1;
+ filter[nb].l->setstages(value);
+ filter[nb].r->setstages(value);
+ break;
+ }
+}
+
+unsigned char EQ::getpar(int npar) const
+{
+ switch(npar) {
+ case 0:
+ return Pvolume;
+ break;
+ }
+
+ if(npar < 10)
+ return 0;
+
+ int nb = (npar - 10) / 5; //number of the band (filter)
+ if(nb >= MAX_EQ_BANDS)
+ return 0;
+ int bp = npar % 5; //band paramenter
+ switch(bp) {
+ case 0:
+ return filter[nb].Ptype;
+ break;
+ case 1:
+ return filter[nb].Pfreq;
+ break;
+ case 2:
+ return filter[nb].Pgain;
+ break;
+ case 3:
+ return filter[nb].Pq;
+ break;
+ case 4:
+ return filter[nb].Pstages;
+ break;
+ default: return 0; //in case of bogus parameter number
+ }
+}
+
+
+float EQ::getfreqresponse(float freq)
+{
+ float resp = 1.0f;
+ for(int i = 0; i < MAX_EQ_BANDS; ++i) {
+ if(filter[i].Ptype == 0)
+ continue;
+ resp *= filter[i].l->H(freq);
+ }
+ return rap2dB(resp * outvolume);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h
new file mode 100644
index 0000000..b2e9e89
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h
@@ -0,0 +1,55 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EQ.h - EQ Effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef EQ_H
+#define EQ_H
+
+#include "Effect.h"
+
+/**EQ Effect*/
+class EQ:public Effect
+{
+ public:
+ EQ(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize);
+ ~EQ() {}
+ void out(const Stereo<float *> &smp);
+ void setpreset(unsigned char npreset);
+ void changepar(int npar, unsigned char value);
+ unsigned char getpar(int npar) const;
+ void cleanup(void);
+ float getfreqresponse(float freq);
+
+ private:
+ //Parameters
+ unsigned char Pvolume;
+
+ void setvolume(unsigned char _Pvolume);
+
+ struct {
+ //parameters
+ unsigned char Ptype, Pfreq, Pgain, Pq, Pstages;
+ //internal values
+ class AnalogFilter * l, *r;
+ } filter[MAX_EQ_BANDS];
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp
new file mode 100644
index 0000000..712f291
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp
@@ -0,0 +1,232 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Echo.cpp - Echo effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2010 Mark McCurry
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include "Echo.h"
+
+#define MAX_DELAY 2
+
+Echo::Echo(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize)
+ :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize),
+ samplerate(srate),
+ Pvolume(50),
+ Pdelay(60),
+ Plrdelay(100),
+ Pfb(40),
+ Phidamp(60),
+ delayTime(1),
+ lrdelay(0),
+ avgDelay(0),
+ delay(new float[(int)(MAX_DELAY * srate)],
+ new float[(int)(MAX_DELAY * srate)]),
+ old(0.0f),
+ pos(0),
+ delta(1),
+ ndelta(1)
+{
+ initdelays();
+ setpreset(Ppreset);
+}
+
+Echo::~Echo()
+{
+ delete[] delay.l;
+ delete[] delay.r;
+}
+
+//Cleanup the effect
+void Echo::cleanup(void)
+{
+ memset(delay.l, 0, MAX_DELAY * samplerate * sizeof(float));
+ memset(delay.r, 0, MAX_DELAY * samplerate * sizeof(float));
+ old = Stereo<float>(0.0f);
+}
+
+inline int max(int a, int b)
+{
+ return a > b ? a : b;
+}
+
+//Initialize the delays
+void Echo::initdelays(void)
+{
+ cleanup();
+ //number of seconds to delay left chan
+ float dl = avgDelay - lrdelay;
+
+ //number of seconds to delay right chan
+ float dr = avgDelay + lrdelay;
+
+ ndelta.l = max(1, (int) (dl * samplerate));
+ ndelta.r = max(1, (int) (dr * samplerate));
+}
+
+//Effect output
+void Echo::out(const Stereo<float *> &input)
+{
+ for(int i = 0; i < buffersize; ++i) {
+ float ldl = delay.l[pos.l];
+ float rdl = delay.r[pos.r];
+ ldl = ldl * (1.0f - lrcross) + rdl * lrcross;
+ rdl = rdl * (1.0f - lrcross) + ldl * lrcross;
+
+ efxoutl[i] = ldl * 2.0f;
+ efxoutr[i] = rdl * 2.0f;
+
+ ldl = input.l[i] * pangainL - ldl * fb;
+ rdl = input.r[i] * pangainR - rdl * fb;
+
+ //LowPass Filter
+ old.l = delay.l[(pos.l + delta.l) % (MAX_DELAY * samplerate)] =
+ ldl * hidamp + old.l * (1.0f - hidamp);
+ old.r = delay.r[(pos.r + delta.r) % (MAX_DELAY * samplerate)] =
+ rdl * hidamp + old.r * (1.0f - hidamp);
+
+ //increment
+ ++pos.l; // += delta.l;
+ ++pos.r; // += delta.r;
+
+ //ensure that pos is still in bounds
+ pos.l %= MAX_DELAY * samplerate;
+ pos.r %= MAX_DELAY * samplerate;
+
+ //adjust delay if needed
+ delta.l = (15 * delta.l + ndelta.l) / 16;
+ delta.r = (15 * delta.r + ndelta.r) / 16;
+ }
+}
+
+
+//Parameter control
+void Echo::setvolume(unsigned char _Pvolume)
+{
+ Pvolume = _Pvolume;
+
+ if(insertion == 0) {
+ outvolume = powf(0.01f, (1.0f - Pvolume / 127.0f)) * 4.0f;
+ volume = 1.0f;
+ }
+ else
+ volume = outvolume = Pvolume / 127.0f;
+ if(Pvolume == 0)
+ cleanup();
+}
+
+void Echo::setdelay(unsigned char _Pdelay)
+{
+ Pdelay = _Pdelay;
+ avgDelay = (Pdelay / 127.0f * 1.5f); //0 .. 1.5 sec
+ initdelays();
+}
+
+void Echo::setlrdelay(unsigned char _Plrdelay)
+{
+ float tmp;
+ Plrdelay = _Plrdelay;
+ tmp =
+ (powf(2.0f, fabsf(Plrdelay - 64.0f) / 64.0f * 9.0f) - 1.0f) / 1000.0f;
+ if(Plrdelay < 64.0f)
+ tmp = -tmp;
+ lrdelay = tmp;
+ initdelays();
+}
+
+void Echo::setfb(unsigned char _Pfb)
+{
+ Pfb = _Pfb;
+ fb = Pfb / 128.0f;
+}
+
+void Echo::sethidamp(unsigned char _Phidamp)
+{
+ Phidamp = _Phidamp;
+ hidamp = 1.0f - Phidamp / 127.0f;
+}
+
+void Echo::setpreset(unsigned char npreset)
+{
+ const int PRESET_SIZE = 7;
+ const int NUM_PRESETS = 9;
+ unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
+ {67, 64, 35, 64, 30, 59, 0 }, //Echo 1
+ {67, 64, 21, 64, 30, 59, 0 }, //Echo 2
+ {67, 75, 60, 64, 30, 59, 10}, //Echo 3
+ {67, 60, 44, 64, 30, 0, 0 }, //Simple Echo
+ {67, 60, 102, 50, 30, 82, 48}, //Canyon
+ {67, 64, 44, 17, 0, 82, 24}, //Panning Echo 1
+ {81, 60, 46, 118, 100, 68, 18}, //Panning Echo 2
+ {81, 60, 26, 100, 127, 67, 36}, //Panning Echo 3
+ {62, 64, 28, 64, 100, 90, 55} //Feedback Echo
+ };
+
+ if(npreset >= NUM_PRESETS)
+ npreset = NUM_PRESETS - 1;
+ for(int n = 0; n < PRESET_SIZE; ++n)
+ changepar(n, presets[npreset][n]);
+ if(insertion)
+ setvolume(presets[npreset][0] / 2); //lower the volume if this is insertion effect
+ Ppreset = npreset;
+}
+
+
+void Echo::changepar(int npar, unsigned char value)
+{
+ switch(npar) {
+ case 0:
+ setvolume(value);
+ break;
+ case 1:
+ setpanning(value);
+ break;
+ case 2:
+ setdelay(value);
+ break;
+ case 3:
+ setlrdelay(value);
+ break;
+ case 4:
+ setlrcross(value);
+ break;
+ case 5:
+ setfb(value);
+ break;
+ case 6:
+ sethidamp(value);
+ break;
+ }
+}
+
+unsigned char Echo::getpar(int npar) const
+{
+ switch(npar) {
+ case 0: return Pvolume;
+ case 1: return Ppanning;
+ case 2: return Pdelay;
+ case 3: return Plrdelay;
+ case 4: return Plrcross;
+ case 5: return Pfb;
+ case 6: return Phidamp;
+ default: return 0; // in case of bogus parameter number
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h
new file mode 100644
index 0000000..4eb606b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h
@@ -0,0 +1,106 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Echo.h - Echo Effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef ECHO_H
+#define ECHO_H
+
+#include "Effect.h"
+#include "../Misc/Stereo.h"
+
+/**Echo Effect*/
+class Echo:public Effect
+{
+ public:
+ Echo(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize);
+ ~Echo();
+
+ void out(const Stereo<float *> &input);
+ void setpreset(unsigned char npreset);
+ /**
+ * Sets the value of the chosen variable
+ *
+ * The possible parameters are:
+ * -# Volume
+ * -# Panning
+ * -# Delay
+ * -# L/R Delay
+ * -# L/R Crossover
+ * -# Feedback
+ * -# Dampening
+ * @param npar number of chosen parameter
+ * @param value the new value
+ */
+ void changepar(int npar, unsigned char value);
+
+ /**
+ * Gets the specified parameter
+ *
+ * The possible parameters are
+ * -# Volume
+ * -# Panning
+ * -# Delay
+ * -# L/R Delay
+ * -# L/R Crossover
+ * -# Feedback
+ * -# Dampening
+ * @param npar number of chosen parameter
+ * @return value of parameter
+ */
+ unsigned char getpar(int npar) const;
+ int getnumparams(void);
+ void cleanup(void);
+ private:
+ int samplerate;
+
+ //Parameters
+ unsigned char Pvolume; /**<#1 Volume or Dry/Wetness*/
+ unsigned char Pdelay; /**<#3 Delay of the Echo*/
+ unsigned char Plrdelay; /**<#4 L/R delay difference*/
+ unsigned char Pfb; /**<#6Feedback*/
+ unsigned char Phidamp; /**<#7Dampening of the Echo*/
+
+ void setvolume(unsigned char _Pvolume);
+ void setdelay(unsigned char _Pdelay);
+ void setlrdelay(unsigned char _Plrdelay);
+ void setfb(unsigned char _Pfb);
+ void sethidamp(unsigned char _Phidamp);
+
+ //Real Parameters
+ float fb, hidamp;
+ //Left/Right delay lengths
+ Stereo<int> delayTime;
+ float lrdelay;
+ float avgDelay;
+
+ void initdelays(void);
+ //2 channel ring buffer
+ Stereo<float *> delay;
+ Stereo<float> old;
+
+ //position of reading/writing from delaysample
+ Stereo<int> pos;
+ //step size for delay buffer
+ Stereo<int> delta;
+ Stereo<int> ndelta;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp
new file mode 100644
index 0000000..bc1c0b0
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp
@@ -0,0 +1,67 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Effect.cpp - this class is inherited by the all effects(Reverb, Echo, ..)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright 2011, Alan Calvert
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Effect.h"
+#include "../Params/FilterParams.h"
+#include <cmath>
+
+Effect::Effect(bool insertion_, float *efxoutl_, float *efxoutr_,
+ FilterParams *filterpars_, unsigned char Ppreset_,
+ unsigned int srate, int bufsize)
+ :Ppreset(Ppreset_),
+ efxoutl(efxoutl_),
+ efxoutr(efxoutr_),
+ filterpars(filterpars_),
+ insertion(insertion_),
+ samplerate(srate),
+ buffersize(bufsize)
+{
+ alias();
+}
+
+void Effect::out(float *const smpsl, float *const smpsr)
+{
+ out(Stereo<float *>(smpsl, smpsr));
+}
+
+void Effect::crossover(float &a, float &b, float crossover)
+{
+ float tmpa = a;
+ float tmpb = b;
+ a = tmpa * (1.0f - crossover) + tmpb * crossover;
+ b = tmpb * (1.0f - crossover) + tmpa * crossover;
+}
+
+void Effect::setpanning(char Ppanning_)
+{
+ Ppanning = Ppanning_;
+ float t = (Ppanning > 0) ? (float)(Ppanning - 1) / 126.0f : 0.0f;
+ pangainL = cosf(t * PI / 2.0f);
+ pangainR = cosf((1.0f - t) * PI / 2.0f);
+}
+
+void Effect::setlrcross(char Plrcross_)
+{
+ Plrcross = Plrcross_;
+ lrcross = (float)Plrcross / 127.0f;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.h
new file mode 100644
index 0000000..d53bb9b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.h
@@ -0,0 +1,124 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Effect.h - this class is inherited by the all effects(Reverb, Echo, ..)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef EFFECT_H
+#define EFFECT_H
+
+#include "../Misc/Util.h"
+#include "../globals.h"
+#include "../Params/FilterParams.h"
+#include "../Misc/Stereo.h"
+
+class FilterParams;
+
+/**this class is inherited by the all effects(Reverb, Echo, ..)*/
+class Effect
+{
+ public:
+ /**
+ * Effect Constructor
+ * @param insertion_ 1 when it is an insertion Effect
+ * @param efxoutl_ Effect output buffer Left channel
+ * @param efxoutr_ Effect output buffer Right channel
+ * @param filterpars_ pointer to FilterParams array
+ * @param Ppreset_ chosen preset
+ * @return Initialized Effect object*/
+ Effect(bool insertion_, float *efxoutl_, float *efxoutr_,
+ FilterParams *filterpars_, unsigned char Ppreset_,
+ unsigned int srate, int bufsize);
+ virtual ~Effect() {}
+ /**
+ * Choose a preset
+ * @param npreset number of chosen preset*/
+ virtual void setpreset(unsigned char npreset) = 0;
+ /**Change parameter npar to value
+ * @param npar chosen parameter
+ * @param value chosen new value*/
+ virtual void changepar(int npar, unsigned char value) = 0;
+ /**Get the value of parameter npar
+ * @param npar chosen parameter
+ * @return the value of the parameter in an unsigned char or 0 if it
+ * does not exist*/
+ virtual unsigned char getpar(int npar) const = 0;
+ /**Output result of effect based on the given buffers
+ *
+ * This method should result in the effect generating its results
+ * and placing them into the efxoutl and efxoutr buffers.
+ * Every Effect should overide this method.
+ *
+ * @param smpsl Input buffer for the Left channel
+ * @param smpsr Input buffer for the Right channel
+ */
+ void out(float *const smpsl, float *const smpsr);
+ virtual void out(const Stereo<float *> &smp) = 0;
+ /**Reset the state of the effect*/
+ virtual void cleanup(void) {}
+ virtual float getfreqresponse(float freq) { return freq; }
+
+ unsigned char Ppreset; /**<Currently used preset*/
+ float *const efxoutl; /**<Effect out Left Channel*/
+ float *const efxoutr; /**<Effect out Right Channel*/
+ float outvolume; /**<This is the volume of effect and is public because
+ * it is needed in system effects.
+ * The out volume of such effects are always 1.0f, so
+ * this setting tells me how is the volume to the
+ * Master Output only.*/
+
+ float volume;
+
+ FilterParams *filterpars; /**<Parameters for filters used by Effect*/
+
+ //Perform L/R crossover
+ static void crossover(float &a, float &b, float crossover);
+
+ protected:
+ void setpanning(char Ppanning_);
+ void setlrcross(char Plrcross_);
+
+ const bool insertion;
+ //panning parameters
+ char Ppanning;
+ float pangainL;
+ float pangainR;
+ char Plrcross; // L/R mix
+ float lrcross;
+
+ // current setup
+ unsigned int samplerate;
+ int buffersize;
+
+ // alias for above terms
+ float samplerate_f;
+ float halfsamplerate_f;
+ float buffersize_f;
+ int bufferbytes;
+
+ inline void alias()
+ {
+ samplerate_f = samplerate;
+ halfsamplerate_f = samplerate_f / 2.0f;
+ buffersize_f = buffersize;
+ bufferbytes = buffersize * sizeof(float);
+ }
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.cpp
new file mode 100644
index 0000000..1ec507a
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.cpp
@@ -0,0 +1,113 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EffectLFO.cpp - Stereo LFO used by some effects
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "EffectLFO.h"
+#include "../Misc/Util.h"
+
+#include <cmath>
+
+EffectLFO::EffectLFO(float srate_f, float bufsize_f)
+ :Pfreq(40),
+ Prandomness(0),
+ PLFOtype(0),
+ Pstereo(64),
+ xl(0.0f),
+ xr(0.0f),
+ ampl1(RND),
+ ampl2(RND),
+ ampr1(RND),
+ ampr2(RND),
+ lfornd(0.0f),
+ samplerate_f(srate_f),
+ buffersize_f(bufsize_f)
+{
+ updateparams();
+}
+
+EffectLFO::~EffectLFO() {}
+
+//Update the changed parameters
+void EffectLFO::updateparams(void)
+{
+ float lfofreq = (powf(2.0f, Pfreq / 127.0f * 10.0f) - 1.0f) * 0.03f;
+ incx = fabsf(lfofreq) * buffersize_f / samplerate_f;
+ if(incx > 0.49999999f)
+ incx = 0.499999999f; //Limit the Frequency
+
+ lfornd = Prandomness / 127.0f;
+ lfornd = (lfornd > 1.0f) ? 1.0f : lfornd;
+
+ if(PLFOtype > 1)
+ PLFOtype = 1; //this has to be updated if more lfo's are added
+ lfotype = PLFOtype;
+ xr = fmodf(xl + (Pstereo - 64.0f) / 127.0f + 1.0f, 1.0f);
+}
+
+
+//Compute the shape of the LFO
+float EffectLFO::getlfoshape(float x)
+{
+ float out;
+ switch(lfotype) {
+ case 1: //EffectLFO_TRIANGLE
+ if((x > 0.0f) && (x < 0.25f))
+ out = 4.0f * x;
+ else
+ if((x > 0.25f) && (x < 0.75f))
+ out = 2.0f - 4.0f * x;
+ else
+ out = 4.0f * x - 4.0f;
+ break;
+ //when adding more, ensure ::updateparams() gets updated
+ default:
+ out = cosf(x * 2.0f * PI); //EffectLFO_SINE
+ }
+ return out;
+}
+
+//LFO output
+void EffectLFO::effectlfoout(float *outl, float *outr)
+{
+ float out;
+
+ out = getlfoshape(xl);
+ if((lfotype == 0) || (lfotype == 1))
+ out *= (ampl1 + xl * (ampl2 - ampl1));
+ xl += incx;
+ if(xl > 1.0f) {
+ xl -= 1.0f;
+ ampl1 = ampl2;
+ ampl2 = (1.0f - lfornd) + lfornd * RND;
+ }
+ *outl = (out + 1.0f) * 0.5f;
+
+ out = getlfoshape(xr);
+ if((lfotype == 0) || (lfotype == 1))
+ out *= (ampr1 + xr * (ampr2 - ampr1));
+ xr += incx;
+ if(xr > 1.0f) {
+ xr -= 1.0f;
+ ampr1 = ampr2;
+ ampr2 = (1.0f - lfornd) + lfornd * RND;
+ }
+ *outr = (out + 1.0f) * 0.5f;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.h
new file mode 100644
index 0000000..82cbf87
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.h
@@ -0,0 +1,53 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EffectLFO.h - Stereo LFO used by some effects
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef EFFECT_LFO_H
+#define EFFECT_LFO_H
+
+/**LFO for some of the Effect objects
+ * \todo see if this should inherit LFO*/
+class EffectLFO
+{
+ public:
+ EffectLFO(float srate_f, float bufsize_f);
+ ~EffectLFO();
+ void effectlfoout(float *outl, float *outr);
+ void updateparams(void);
+ unsigned char Pfreq;
+ unsigned char Prandomness;
+ unsigned char PLFOtype;
+ unsigned char Pstereo; // 64 is centered
+ private:
+ float getlfoshape(float x);
+
+ float xl, xr;
+ float incx;
+ float ampl1, ampl2, ampr1, ampr2; //necessary for "randomness"
+ float lfornd;
+ char lfotype;
+
+ // current setup
+ float samplerate_f;
+ float buffersize_f;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.cpp
new file mode 100644
index 0000000..08d4f1d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.cpp
@@ -0,0 +1,311 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EffectMgr.cpp - Effect manager, an interface betwen the program and effects
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "EffectMgr.h"
+#include "Effect.h"
+#include "Reverb.h"
+#include "Echo.h"
+#include "Chorus.h"
+#include "Distorsion.h"
+#include "EQ.h"
+#include "DynamicFilter.h"
+#include "../Misc/XMLwrapper.h"
+#include "../Params/FilterParams.h"
+
+#include <iostream>
+using namespace std;
+
+EffectMgr::EffectMgr(const bool insertion_, pthread_mutex_t *mutex_)
+ :insertion(insertion_),
+ efxoutl(new float[synth->buffersize]),
+ efxoutr(new float[synth->buffersize]),
+ filterpars(NULL),
+ nefx(0),
+ efx(NULL),
+ mutex(mutex_),
+ dryonly(false)
+{
+ setpresettype("Peffect");
+ memset(efxoutl, 0, synth->bufferbytes);
+ memset(efxoutr, 0, synth->bufferbytes);
+ defaults();
+}
+
+
+EffectMgr::~EffectMgr()
+{
+ delete efx;
+ delete [] efxoutl;
+ delete [] efxoutr;
+}
+
+void EffectMgr::defaults(void)
+{
+ changeeffect(0);
+ setdryonly(false);
+}
+
+//Change the effect
+void EffectMgr::changeeffect(int _nefx)
+{
+ cleanup();
+ if(nefx == _nefx)
+ return;
+ nefx = _nefx;
+ memset(efxoutl, 0, synth->bufferbytes);
+ memset(efxoutr, 0, synth->bufferbytes);
+ delete efx;
+ switch(nefx) {
+ case 1:
+ efx = new Reverb(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize);
+ break;
+ case 2:
+ efx = new Echo(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize);
+ break;
+ case 3:
+ efx = new Chorus(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize);
+ break;
+ case 4:
+ efx = new Phaser(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize);
+ break;
+ case 5:
+ efx = new Alienwah(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize);
+ break;
+ case 6:
+ efx = new Distorsion(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize);
+ break;
+ case 7:
+ efx = new EQ(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize);
+ break;
+ case 8:
+ efx = new DynamicFilter(insertion, efxoutl, efxoutr, synth->samplerate, synth->buffersize);
+ break;
+ //put more effect here
+ default:
+ efx = NULL;
+ break; //no effect (thru)
+ }
+
+ if(efx)
+ filterpars = efx->filterpars;
+}
+
+//Obtain the effect number
+int EffectMgr::geteffect(void)
+{
+ return nefx;
+}
+
+// Cleanup the current effect
+void EffectMgr::cleanup(void)
+{
+ if(efx)
+ efx->cleanup();
+}
+
+
+// Get the preset of the current effect
+unsigned char EffectMgr::getpreset(void)
+{
+ if(efx)
+ return efx->Ppreset;
+ else
+ return 0;
+}
+
+// Change the preset of the current effect
+void EffectMgr::changepreset_nolock(unsigned char npreset)
+{
+ if(efx)
+ efx->setpreset(npreset);
+}
+
+//Change the preset of the current effect(with thread locking)
+void EffectMgr::changepreset(unsigned char npreset)
+{
+ pthread_mutex_lock(mutex);
+ changepreset_nolock(npreset);
+ pthread_mutex_unlock(mutex);
+}
+
+
+//Change a parameter of the current effect
+void EffectMgr::seteffectpar_nolock(int npar, unsigned char value)
+{
+ if(!efx)
+ return;
+ efx->changepar(npar, value);
+}
+
+// Change a parameter of the current effect (with thread locking)
+void EffectMgr::seteffectpar(int npar, unsigned char value)
+{
+ pthread_mutex_lock(mutex);
+ seteffectpar_nolock(npar, value);
+ pthread_mutex_unlock(mutex);
+}
+
+//Get a parameter of the current effect
+unsigned char EffectMgr::geteffectpar(int npar)
+{
+ if(!efx)
+ return 0;
+ return efx->getpar(npar);
+}
+
+// Apply the effect
+void EffectMgr::out(float *smpsl, float *smpsr)
+{
+ if(!efx) {
+ if(!insertion)
+ for(int i = 0; i < synth->buffersize; ++i) {
+ smpsl[i] = 0.0f;
+ smpsr[i] = 0.0f;
+ efxoutl[i] = 0.0f;
+ efxoutr[i] = 0.0f;
+ }
+ return;
+ }
+ for(int i = 0; i < synth->buffersize; ++i) {
+ smpsl[i] += denormalkillbuf[i];
+ smpsr[i] += denormalkillbuf[i];
+ efxoutl[i] = 0.0f;
+ efxoutr[i] = 0.0f;
+ }
+ efx->out(smpsl, smpsr);
+
+ float volume = efx->volume;
+
+ if(nefx == 7) { //this is need only for the EQ effect
+ memcpy(smpsl, efxoutl, synth->bufferbytes);
+ memcpy(smpsr, efxoutr, synth->bufferbytes);
+ return;
+ }
+
+ //Insertion effect
+ if(insertion != 0) {
+ float v1, v2;
+ if(volume < 0.5f) {
+ v1 = 1.0f;
+ v2 = volume * 2.0f;
+ }
+ else {
+ v1 = (1.0f - volume) * 2.0f;
+ v2 = 1.0f;
+ }
+ if((nefx == 1) || (nefx == 2))
+ v2 *= v2; //for Reverb and Echo, the wet function is not liniar
+
+ if(dryonly) //this is used for instrument effect only
+ for(int i = 0; i < synth->buffersize; ++i) {
+ smpsl[i] *= v1;
+ smpsr[i] *= v1;
+ efxoutl[i] *= v2;
+ efxoutr[i] *= v2;
+ }
+ else // normal instrument/insertion effect
+ for(int i = 0; i < synth->buffersize; ++i) {
+ smpsl[i] = smpsl[i] * v1 + efxoutl[i] * v2;
+ smpsr[i] = smpsr[i] * v1 + efxoutr[i] * v2;
+ }
+ }
+ else // System effect
+ for(int i = 0; i < synth->buffersize; ++i) {
+ efxoutl[i] *= 2.0f * volume;
+ efxoutr[i] *= 2.0f * volume;
+ smpsl[i] = efxoutl[i];
+ smpsr[i] = efxoutr[i];
+ }
+}
+
+
+// Get the effect volume for the system effect
+float EffectMgr::sysefxgetvolume(void)
+{
+ return (!efx) ? 1.0f : efx->outvolume;
+}
+
+
+// Get the EQ response
+float EffectMgr::getEQfreqresponse(float freq)
+{
+ return (nefx == 7) ? efx->getfreqresponse(freq) : 0.0f;
+}
+
+
+void EffectMgr::setdryonly(bool value)
+{
+ dryonly = value;
+}
+
+void EffectMgr::add2XML(XMLwrapper *xml)
+{
+ xml->addpar("type", geteffect());
+
+ if(!efx || !geteffect())
+ return;
+ xml->addpar("preset", efx->Ppreset);
+
+ xml->beginbranch("EFFECT_PARAMETERS");
+ for(int n = 0; n < 128; ++n) {
+ int par = geteffectpar(n);
+ if(par == 0)
+ continue;
+ xml->beginbranch("par_no", n);
+ xml->addpar("par", par);
+ xml->endbranch();
+ }
+ if(filterpars) {
+ xml->beginbranch("FILTER");
+ filterpars->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->endbranch();
+}
+
+void EffectMgr::getfromXML(XMLwrapper *xml)
+{
+ changeeffect(xml->getpar127("type", geteffect()));
+
+ if(!efx || !geteffect())
+ return;
+
+ efx->Ppreset = xml->getpar127("preset", efx->Ppreset);
+
+ if(xml->enterbranch("EFFECT_PARAMETERS")) {
+ for(int n = 0; n < 128; ++n) {
+ seteffectpar_nolock(n, 0); //erase effect parameter
+ if(xml->enterbranch("par_no", n) == 0)
+ continue;
+ int par = geteffectpar(n);
+ seteffectpar_nolock(n, xml->getpar127("par", par));
+ xml->exitbranch();
+ }
+ if(filterpars)
+ if(xml->enterbranch("FILTER")) {
+ filterpars->getfromXML(xml);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+ cleanup();
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.h
new file mode 100644
index 0000000..256a8d8
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.h
@@ -0,0 +1,86 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EffectMgr.h - Effect manager, an interface betwen the program and effects
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef EFFECTMGR_H
+#define EFFECTMGR_H
+
+#include <pthread.h>
+
+#include "Alienwah.h"
+#include "Phaser.h"
+#include "../Params/Presets.h"
+
+class Effect;
+class FilterParams;
+class XMLwrapper;
+
+#include "Distorsion.h"
+#include "EQ.h"
+#include "DynamicFilter.h"
+#include "../Misc/XMLwrapper.h"
+#include "../Params/FilterParams.h"
+#include "../Params/Presets.h"
+
+/**Effect manager, an interface betwen the program and effects*/
+class EffectMgr:public Presets
+{
+ public:
+ EffectMgr(const bool insertion_, pthread_mutex_t *mutex_);
+ ~EffectMgr();
+
+ void add2XML(XMLwrapper *xml);
+ void defaults(void);
+ void getfromXML(XMLwrapper *xml);
+
+ void out(float *smpsl, float *smpsr);
+
+ void setdryonly(bool value);
+
+ /**get the output(to speakers) volume of the systemeffect*/
+ float sysefxgetvolume(void);
+
+ void cleanup(void);
+
+ void changeeffect(int nefx_);
+ int geteffect(void);
+ void changepreset(unsigned char npreset);
+ void changepreset_nolock(unsigned char npreset);
+ unsigned char getpreset(void);
+ void seteffectpar(int npar, unsigned char value);
+ void seteffectpar_nolock(int npar, unsigned char value);
+ unsigned char geteffectpar(int npar);
+
+ const bool insertion;
+ float *efxoutl, *efxoutr;
+
+ // used by UI
+ float getEQfreqresponse(float freq);
+
+ FilterParams *filterpars;
+
+ private:
+ int nefx;
+ Effect *efx;
+ pthread_mutex_t *mutex;
+ bool dryonly;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp
new file mode 100644
index 0000000..66a9283
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp
@@ -0,0 +1,470 @@
+/*
+
+ Phaser.cpp - Phasing and Approximate digital model of an analog JFET phaser.
+ Analog modeling implemented by Ryan Billing aka Transmogrifox.
+ ZynAddSubFX - a software synthesizer
+
+ Phaser.cpp - Phaser effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2010 Ryan Billing
+ Copyright (C) 2010-2010 Mark McCurry
+ Author: Nasca Octavian Paul
+ Ryan Billing
+ Mark McCurry
+
+ DSP analog modeling theory & practice largely influenced by various CCRMA publications, particularly works by Julius O. Smith.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include <algorithm>
+#include "Phaser.h"
+
+using namespace std;
+
+#define PHASER_LFO_SHAPE 2
+#define ONE_ 0.99999f // To prevent LFO ever reaching 1.0f for filter stability purposes
+#define ZERO_ 0.00001f // Same idea as above.
+
+Phaser::Phaser(const int &insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize)
+ :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize), lfo(srate, bufsize), old(NULL), xn1(NULL),
+ yn1(NULL), diff(0.0f), oldgain(0.0f), fb(0.0f)
+{
+ analog_setup();
+ setpreset(Ppreset);
+ cleanup();
+}
+
+void Phaser::analog_setup()
+{
+ //model mismatch between JFET devices
+ offset[0] = -0.2509303f;
+ offset[1] = 0.9408924f;
+ offset[2] = 0.998f;
+ offset[3] = -0.3486182f;
+ offset[4] = -0.2762545f;
+ offset[5] = -0.5215785f;
+ offset[6] = 0.2509303f;
+ offset[7] = -0.9408924f;
+ offset[8] = -0.998f;
+ offset[9] = 0.3486182f;
+ offset[10] = 0.2762545f;
+ offset[11] = 0.5215785f;
+
+ barber = 0; //Deactivate barber pole phasing by default
+
+ mis = 1.0f;
+ Rmin = 625.0f; // 2N5457 typical on resistance at Vgs = 0
+ Rmax = 22000.0f; // Resistor parallel to FET
+ Rmx = Rmin / Rmax;
+ Rconst = 1.0f + Rmx; // Handle parallel resistor relationship
+ C = 0.00000005f; // 50 nF
+ CFs = 2.0f * samplerate_f * C;
+ invperiod = 1.0f / buffersize_f;
+}
+
+Phaser::~Phaser()
+{
+ if(old.l)
+ delete[] old.l;
+ if(xn1.l)
+ delete[] xn1.l;
+ if(yn1.l)
+ delete[] yn1.l;
+ if(old.r)
+ delete[] old.r;
+ if(xn1.r)
+ delete[] xn1.r;
+ if(yn1.r)
+ delete[] yn1.r;
+}
+
+/*
+ * Effect output
+ */
+void Phaser::out(const Stereo<float *> &input)
+{
+ if(Panalog)
+ AnalogPhase(input);
+ else
+ normalPhase(input);
+}
+
+void Phaser::AnalogPhase(const Stereo<float *> &input)
+{
+ Stereo<float> gain(0.0f), lfoVal(0.0f), mod(0.0f), g(0.0f), b(0.0f), hpf(
+ 0.0f);
+
+ lfo.effectlfoout(&lfoVal.l, &lfoVal.r);
+ mod.l = lfoVal.l * width + (depth - 0.5f);
+ mod.r = lfoVal.r * width + (depth - 0.5f);
+
+ mod.l = limit(mod.l, ZERO_, ONE_);
+ mod.r = limit(mod.r, ZERO_, ONE_);
+
+ if(Phyper) {
+ //Triangle wave squared is approximately sin on bottom, tri on top
+ //Result is exponential sweep more akin to filter in synth with
+ //exponential generator circuitry.
+ mod.l *= mod.l;
+ mod.r *= mod.r;
+ }
+
+ //g.l,g.r is Vp - Vgs. Typical FET drain-source resistance follows constant/[1-sqrt(Vp - Vgs)]
+ mod.l = sqrtf(1.0f - mod.l);
+ mod.r = sqrtf(1.0f - mod.r);
+
+ diff.r = (mod.r - oldgain.r) * invperiod;
+ diff.l = (mod.l - oldgain.l) * invperiod;
+
+ g = oldgain;
+ oldgain = mod;
+
+ for(int i = 0; i < buffersize; ++i) {
+ g.l += diff.l; // Linear interpolation between LFO samples
+ g.r += diff.r;
+
+ Stereo<float> xn(input.l[i] * pangainL, input.r[i] * pangainR);
+
+ if(barber) {
+ g.l = fmodf((g.l + 0.25f), ONE_);
+ g.r = fmodf((g.r + 0.25f), ONE_);
+ }
+
+ xn.l = applyPhase(xn.l, g.l, fb.l, hpf.l, yn1.l, xn1.l);
+ xn.r = applyPhase(xn.r, g.r, fb.r, hpf.r, yn1.r, xn1.r);
+
+
+ fb.l = xn.l * feedback;
+ fb.r = xn.r * feedback;
+ efxoutl[i] = xn.l;
+ efxoutr[i] = xn.r;
+ }
+
+ if(Poutsub) {
+ invSignal(efxoutl, buffersize);
+ invSignal(efxoutr, buffersize);
+ }
+}
+
+float Phaser::applyPhase(float x, float g, float fb,
+ float &hpf, float *yn1, float *xn1)
+{
+ for(int j = 0; j < Pstages; ++j) { //Phasing routine
+ mis = 1.0f + offsetpct * offset[j];
+
+ //This is symmetrical.
+ //FET is not, so this deviates slightly, however sym dist. is
+ //better sounding than a real FET.
+ float d = (1.0f + 2.0f * (0.25f + g) * hpf * hpf * distortion) * mis;
+ Rconst = 1.0f + mis * Rmx;
+
+ // This is 1/R. R is being modulated to control filter fc.
+ float b = (Rconst - g) / (d * Rmin);
+ float gain = (CFs - b) / (CFs + b);
+ yn1[j] = gain * (x + yn1[j]) - xn1[j];
+
+ //high pass filter:
+ //Distortion depends on the high-pass part of the AP stage.
+ hpf = yn1[j] + (1.0f - gain) * xn1[j];
+
+ xn1[j] = x;
+ x = yn1[j];
+ if(j == 1)
+ x += fb; //Insert feedback after first phase stage
+ }
+ return x;
+}
+void Phaser::normalPhase(const Stereo<float *> &input)
+{
+ Stereo<float> gain(0.0f), lfoVal(0.0f);
+
+ lfo.effectlfoout(&lfoVal.l, &lfoVal.r);
+ gain.l =
+ (expf(lfoVal.l
+ * PHASER_LFO_SHAPE) - 1) / (expf(PHASER_LFO_SHAPE) - 1.0f);
+ gain.r =
+ (expf(lfoVal.r
+ * PHASER_LFO_SHAPE) - 1) / (expf(PHASER_LFO_SHAPE) - 1.0f);
+
+ gain.l = 1.0f - phase * (1.0f - depth) - (1.0f - phase) * gain.l * depth;
+ gain.r = 1.0f - phase * (1.0f - depth) - (1.0f - phase) * gain.r * depth;
+
+ gain.l = limit(gain.l, ZERO_, ONE_);
+ gain.r = limit(gain.r, ZERO_, ONE_);
+
+ for(int i = 0; i < buffersize; ++i) {
+ float x = (float) i / buffersize_f;
+ float x1 = 1.0f - x;
+ //TODO think about making panning an external feature
+ Stereo<float> xn(input.l[i] * pangainL + fb.l,
+ input.r[i] * pangainR + fb.r);
+
+ Stereo<float> g(gain.l * x + oldgain.l * x1,
+ gain.r * x + oldgain.r * x1);
+
+ xn.l = applyPhase(xn.l, g.l, old.l);
+ xn.r = applyPhase(xn.r, g.r, old.r);
+
+ //Left/Right crossing
+ crossover(xn.l, xn.r, lrcross);
+
+ fb.l = xn.l * feedback;
+ fb.r = xn.r * feedback;
+ efxoutl[i] = xn.l;
+ efxoutr[i] = xn.r;
+ }
+
+ oldgain = gain;
+
+ if(Poutsub) {
+ invSignal(efxoutl, buffersize);
+ invSignal(efxoutr, buffersize);
+ }
+}
+
+float Phaser::applyPhase(float x, float g, float *old)
+{
+ for(int j = 0; j < Pstages * 2; ++j) { //Phasing routine
+ float tmp = old[j];
+ old[j] = g * tmp + x;
+ x = tmp - g * old[j];
+ }
+ return x;
+}
+
+/*
+ * Cleanup the effect
+ */
+void Phaser::cleanup()
+{
+ fb = oldgain = Stereo<float>(0.0f);
+ for(int i = 0; i < Pstages * 2; ++i) {
+ old.l[i] = 0.0f;
+ old.r[i] = 0.0f;
+ }
+ for(int i = 0; i < Pstages; ++i) {
+ xn1.l[i] = 0.0f;
+ yn1.l[i] = 0.0f;
+ xn1.r[i] = 0.0f;
+ yn1.r[i] = 0.0f;
+ }
+}
+
+/*
+ * Parameter control
+ */
+void Phaser::setwidth(unsigned char Pwidth)
+{
+ this->Pwidth = Pwidth;
+ width = ((float)Pwidth / 127.0f);
+}
+
+void Phaser::setfb(unsigned char Pfb)
+{
+ this->Pfb = Pfb;
+ feedback = (float) (Pfb - 64) / 64.2f;
+}
+
+void Phaser::setvolume(unsigned char Pvolume)
+{
+ this->Pvolume = Pvolume;
+ outvolume = Pvolume / 127.0f;
+ if(insertion == 0)
+ volume = 1.0f;
+ else
+ volume = outvolume;
+}
+
+void Phaser::setdistortion(unsigned char Pdistortion)
+{
+ this->Pdistortion = Pdistortion;
+ distortion = (float)Pdistortion / 127.0f;
+}
+
+void Phaser::setoffset(unsigned char Poffset)
+{
+ this->Poffset = Poffset;
+ offsetpct = (float)Poffset / 127.0f;
+}
+
+void Phaser::setstages(unsigned char Pstages)
+{
+ if(old.l)
+ delete[] old.l;
+ if(xn1.l)
+ delete[] xn1.l;
+ if(yn1.l)
+ delete[] yn1.l;
+ if(old.r)
+ delete[] old.r;
+ if(xn1.r)
+ delete[] xn1.r;
+ if(yn1.r)
+ delete[] yn1.r;
+
+
+ this->Pstages = min(MAX_PHASER_STAGES, (int)Pstages);
+
+ old = Stereo<float *>(new float[Pstages * 2],
+ new float[Pstages * 2]);
+
+ xn1 = Stereo<float *>(new float[Pstages],
+ new float[Pstages]);
+
+ yn1 = Stereo<float *>(new float[Pstages],
+ new float[Pstages]);
+
+ cleanup();
+}
+
+void Phaser::setphase(unsigned char Pphase)
+{
+ this->Pphase = Pphase;
+ phase = (Pphase / 127.0f);
+}
+
+void Phaser::setdepth(unsigned char Pdepth)
+{
+ this->Pdepth = Pdepth;
+ depth = (float)(Pdepth) / 127.0f;
+}
+
+
+void Phaser::setpreset(unsigned char npreset)
+{
+ const int PRESET_SIZE = 15;
+ const int NUM_PRESETS = 12;
+ unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
+ //Phaser
+ //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ {64, 64, 36, 0, 0, 64, 110, 64, 1, 0, 0, 20,
+ 0, 0,
+ 0 },
+ {64, 64, 35, 0, 0, 88, 40, 64, 3, 0, 0, 20, 0, 0,
+ 0 },
+ {64, 64, 31, 0, 0, 66, 68, 107, 2, 0, 0, 20, 0, 0,
+ 0 },
+ {39, 64, 22, 0, 0, 66, 67, 10, 5, 0, 1, 20, 0, 0,
+ 0 },
+ {64, 64, 20, 0, 1, 110, 67, 78, 10, 0, 0, 20, 0, 0,
+ 0 },
+ {64, 64, 53, 100, 0, 58, 37, 78, 3, 0, 0, 20, 0, 0,
+ 0 },
+ //APhaser
+ //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ {64, 64, 14, 0, 1, 64, 64, 40, 4, 10, 0, 110,1, 20,
+ 1 },
+ {64, 64, 14, 5, 1, 64, 70, 40, 6, 10, 0, 110,1, 20,
+ 1 },
+ {64, 64, 9, 0, 0, 64, 60, 40, 8, 10, 0, 40, 0, 20,
+ 1 },
+ {64, 64, 14, 10, 0, 64, 45, 80, 7, 10, 1, 110,1, 20,
+ 1 },
+ {25, 64, 127, 10, 0, 64, 25, 16, 8, 100, 0, 25, 0, 20,
+ 1 },
+ {64, 64, 1, 10, 1, 64, 70, 40, 12, 10, 0, 110,1, 20,
+ 1 }
+ };
+ if(npreset >= NUM_PRESETS)
+ npreset = NUM_PRESETS - 1;
+ for(int n = 0; n < PRESET_SIZE; ++n)
+ changepar(n, presets[npreset][n]);
+ Ppreset = npreset;
+}
+
+
+void Phaser::changepar(int npar, unsigned char value)
+{
+ switch(npar) {
+ case 0:
+ setvolume(value);
+ break;
+ case 1:
+ setpanning(value);
+ break;
+ case 2:
+ lfo.Pfreq = value;
+ lfo.updateparams();
+ break;
+ case 3:
+ lfo.Prandomness = value;
+ lfo.updateparams();
+ break;
+ case 4:
+ lfo.PLFOtype = value;
+ lfo.updateparams();
+ barber = (2 == value);
+ break;
+ case 5:
+ lfo.Pstereo = value;
+ lfo.updateparams();
+ break;
+ case 6:
+ setdepth(value);
+ break;
+ case 7:
+ setfb(value);
+ break;
+ case 8:
+ setstages(value);
+ break;
+ case 9:
+ setlrcross(value);
+ setoffset(value);
+ break;
+ case 10:
+ Poutsub = min((int)value, 1);
+ break;
+ case 11:
+ setphase(value);
+ setwidth(value);
+ break;
+ case 12:
+ Phyper = min((int)value, 1);
+ break;
+ case 13:
+ setdistortion(value);
+ break;
+ case 14:
+ Panalog = value;
+ break;
+ }
+}
+
+unsigned char Phaser::getpar(int npar) const
+{
+ switch(npar) {
+ case 0: return Pvolume;
+ case 1: return Ppanning;
+ case 2: return lfo.Pfreq;
+ case 3: return lfo.Prandomness;
+ case 4: return lfo.PLFOtype;
+ case 5: return lfo.Pstereo;
+ case 6: return Pdepth;
+ case 7: return Pfb;
+ case 8: return Pstages;
+ case 9: return Plrcross;
+ return Poffset; //same
+ case 10: return Poutsub;
+ case 11: return Pphase;
+ return Pwidth; //same
+ case 12: return Phyper;
+ case 13: return Pdistortion;
+ case 14: return Panalog;
+ default: return 0;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h
new file mode 100644
index 0000000..4796187
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h
@@ -0,0 +1,98 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Phaser.h - Phaser effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2010 Ryan Billing
+ Copyright (C) 2010-2010 Mark McCurry
+ Author: Nasca Octavian Paul
+ Ryan Billing
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef PHASER_H
+#define PHASER_H
+#include "../globals.h"
+#include "Effect.h"
+#include "EffectLFO.h"
+
+#define MAX_PHASER_STAGES 12
+
+class Phaser:public Effect
+{
+ public:
+ Phaser(const int &insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize);
+ ~Phaser();
+ void out(const Stereo<float *> &input);
+ void setpreset(unsigned char npreset);
+ void changepar(int npar, unsigned char value);
+ unsigned char getpar(int npar) const;
+ void cleanup();
+
+ private:
+ //Phaser parameters
+ EffectLFO lfo; //Phaser modulator
+ unsigned char Pvolume; //Used to set wet/dry mix
+ unsigned char Pdistortion; //Model distortion added by FET element
+ unsigned char Pdepth; //Depth of phaser sweep
+ unsigned char Pwidth; //Phaser width (LFO amplitude)
+ unsigned char Pfb; //feedback
+ unsigned char Poffset; //Model mismatch between variable resistors
+ unsigned char Pstages; //Number of first-order All-Pass stages
+ unsigned char Poutsub; //if I wish to subtract the output instead of adding
+ unsigned char Pphase;
+ unsigned char Phyper; //lfo^2 -- converts tri into hyper-sine
+ unsigned char Panalog;
+
+ //Control parameters
+ void setvolume(unsigned char Pvolume);
+ void setdepth(unsigned char Pdepth);
+ void setfb(unsigned char Pfb);
+ void setdistortion(unsigned char Pdistortion);
+ void setwidth(unsigned char Pwidth);
+ void setoffset(unsigned char Poffset);
+ void setstages(unsigned char Pstages);
+ void setphase(unsigned char Pphase);
+
+ //Internal Variables
+ bool barber; //Barber pole phasing flag
+ float distortion, width, offsetpct;
+ float feedback, depth, phase;
+ Stereo<float *> old, xn1, yn1;
+ Stereo<float> diff, oldgain, fb;
+ float invperiod;
+ float offset[12];
+
+ float mis;
+ float Rmin; // 3N5457 typical on resistance at Vgs = 0
+ float Rmax; // Resistor parallel to FET
+ float Rmx; // Rmin/Rmax to avoid division in loop
+ float Rconst; // Handle parallel resistor relationship
+ float C; // Capacitor
+ float CFs; // A constant derived from capacitor and resistor relationships
+
+ void analog_setup();
+ void AnalogPhase(const Stereo<float *> &input);
+ //analog case
+ float applyPhase(float x, float g, float fb,
+ float &hpf, float *yn1, float *xn1);
+
+ void normalPhase(const Stereo<float *> &input);
+ float applyPhase(float x, float g, float *old);
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp
new file mode 100644
index 0000000..74961b2
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp
@@ -0,0 +1,491 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Reverb.cpp - Reverberation effect
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Reverb.h"
+#include "../Misc/Util.h"
+#include "../DSP/AnalogFilter.h"
+#include "../DSP/Unison.h"
+#include <cmath>
+
+Reverb::Reverb(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize)
+ :Effect(insertion_, efxoutl_, efxoutr_, NULL, 0, srate, bufsize),
+ // defaults
+ Pvolume(48),
+ Ptime(64),
+ Pidelay(40),
+ Pidelayfb(0),
+ Plpf(127),
+ Phpf(0),
+ Plohidamp(80),
+ Ptype(1),
+ Proomsize(64),
+ Pbandwidth(30),
+ roomsize(1.0f),
+ rs(1.0f),
+ bandwidth(NULL),
+ idelay(NULL),
+ lpf(NULL),
+ hpf(NULL) // no filter
+{
+ for(int i = 0; i < REV_COMBS * 2; ++i) {
+ comblen[i] = 800 + (int)(RND * 1400.0f);
+ combk[i] = 0;
+ lpcomb[i] = 0;
+ combfb[i] = -0.97f;
+ comb[i] = NULL;
+ }
+
+ for(int i = 0; i < REV_APS * 2; ++i) {
+ aplen[i] = 500 + (int)(RND * 500.0f);
+ apk[i] = 0;
+ ap[i] = NULL;
+ }
+ setpreset(Ppreset);
+ cleanup(); //do not call this before the comb initialisation
+}
+
+
+Reverb::~Reverb()
+{
+ delete [] idelay;
+ delete hpf;
+ delete lpf;
+
+ for(int i = 0; i < REV_APS * 2; ++i)
+ delete [] ap[i];
+ for(int i = 0; i < REV_COMBS * 2; ++i)
+ delete [] comb[i];
+
+ if(bandwidth)
+ delete bandwidth;
+}
+
+//Cleanup the effect
+void Reverb::cleanup(void)
+{
+ int i, j;
+ for(i = 0; i < REV_COMBS * 2; ++i) {
+ lpcomb[i] = 0.0f;
+ for(j = 0; j < comblen[i]; ++j)
+ comb[i][j] = 0.0f;
+ }
+
+ for(i = 0; i < REV_APS * 2; ++i)
+ for(j = 0; j < aplen[i]; ++j)
+ ap[i][j] = 0.0f;
+
+ if(idelay)
+ for(i = 0; i < idelaylen; ++i)
+ idelay[i] = 0.0f;
+ if(hpf)
+ hpf->cleanup();
+ if(lpf)
+ lpf->cleanup();
+}
+
+//Process one channel; 0=left, 1=right
+void Reverb::processmono(int ch, float *output, float *inputbuf)
+{
+ //todo: implement the high part from lohidamp
+
+ for(int j = REV_COMBS * ch; j < REV_COMBS * (ch + 1); ++j) {
+ int &ck = combk[j];
+ const int comblength = comblen[j];
+ float &lpcombj = lpcomb[j];
+
+ for(int i = 0; i < buffersize; ++i) {
+ float fbout = comb[j][ck] * combfb[j];
+ fbout = fbout * (1.0f - lohifb) + lpcombj * lohifb;
+ lpcombj = fbout;
+
+ comb[j][ck] = inputbuf[i] + fbout;
+ output[i] += fbout;
+
+ if((++ck) >= comblength)
+ ck = 0;
+ }
+ }
+
+ for(int j = REV_APS * ch; j < REV_APS * (1 + ch); ++j) {
+ int &ak = apk[j];
+ const int aplength = aplen[j];
+ for(int i = 0; i < buffersize; ++i) {
+ float tmp = ap[j][ak];
+ ap[j][ak] = 0.7f * tmp + output[i];
+ output[i] = tmp - 0.7f * ap[j][ak];
+ if((++ak) >= aplength)
+ ak = 0;
+ }
+ }
+}
+
+//Effect output
+void Reverb::out(const Stereo<float *> &smp)
+{
+ if(!Pvolume && insertion)
+ return;
+
+ float inputbuf[buffersize];
+ for(int i = 0; i < buffersize; ++i)
+ inputbuf[i] = (smp.l[i] + smp.r[i]) / 2.0f;
+
+ if(idelay)
+ for(int i = 0; i < buffersize; ++i) {
+ //Initial delay r
+ float tmp = inputbuf[i] + idelay[idelayk] * idelayfb;
+ inputbuf[i] = idelay[idelayk];
+ idelay[idelayk] = tmp;
+ idelayk++;
+ if(idelayk >= idelaylen)
+ idelayk = 0;
+ }
+
+ if(bandwidth)
+ bandwidth->process(buffersize, inputbuf);
+
+ if(lpf)
+ lpf->filterout(inputbuf);
+ if(hpf)
+ hpf->filterout(inputbuf);
+
+ processmono(0, efxoutl, inputbuf); //left
+ processmono(1, efxoutr, inputbuf); //right
+
+ float lvol = rs / REV_COMBS * pangainL;
+ float rvol = rs / REV_COMBS * pangainR;
+ if(insertion != 0) {
+ lvol *= 2.0f;
+ rvol *= 2.0f;
+ }
+ for(int i = 0; i < buffersize; ++i) {
+ efxoutl[i] *= lvol;
+ efxoutr[i] *= rvol;
+ }
+}
+
+
+//Parameter control
+void Reverb::setvolume(unsigned char _Pvolume)
+{
+ Pvolume = _Pvolume;
+ if(!insertion) {
+ outvolume = powf(0.01f, (1.0f - Pvolume / 127.0f)) * 4.0f;
+ volume = 1.0f;
+ }
+ else {
+ volume = outvolume = Pvolume / 127.0f;
+ if(Pvolume == 0)
+ cleanup();
+ }
+}
+
+void Reverb::settime(unsigned char _Ptime)
+{
+ Ptime = _Ptime;
+ float t = powf(60.0f, Ptime / 127.0f) - 0.97f;
+
+ for(int i = 0; i < REV_COMBS * 2; ++i)
+ combfb[i] =
+ -expf((float)comblen[i] / samplerate_f * logf(0.001f) / t);
+ //the feedback is negative because it removes the DC
+}
+
+void Reverb::setlohidamp(unsigned char _Plohidamp)
+{
+ Plohidamp = (_Plohidamp < 64) ? 64 : _Plohidamp;
+ //remove this when the high part from lohidamp is added
+ if(Plohidamp == 64) {
+ lohidamptype = 0;
+ lohifb = 0.0f;
+ }
+ else {
+ if(Plohidamp < 64)
+ lohidamptype = 1;
+ if(Plohidamp > 64)
+ lohidamptype = 2;
+ float x = fabsf((float)(Plohidamp - 64) / 64.1f);
+ lohifb = x * x;
+ }
+}
+
+void Reverb::setidelay(unsigned char _Pidelay)
+{
+ Pidelay = _Pidelay;
+ float delay = powf(50.0f * Pidelay / 127.0f, 2.0f) - 1.0f;
+
+ if(idelay)
+ delete [] idelay;
+ idelay = NULL;
+
+ idelaylen = (int) (samplerate_f * delay / 1000);
+ if(idelaylen > 1) {
+ idelayk = 0;
+ idelay = new float[idelaylen];
+ memset(idelay, 0, idelaylen * sizeof(float));
+ }
+}
+
+void Reverb::setidelayfb(unsigned char _Pidelayfb)
+{
+ Pidelayfb = _Pidelayfb;
+ idelayfb = Pidelayfb / 128.0f;
+}
+
+void Reverb::sethpf(unsigned char _Phpf)
+{
+ Phpf = _Phpf;
+ if(Phpf == 0) { //No HighPass
+ if(hpf)
+ delete hpf;
+ hpf = NULL;
+ }
+ else {
+ float fr = expf(powf(Phpf / 127.0f, 0.5f) * logf(10000.0f)) + 20.0f;
+ if(hpf == NULL)
+ hpf = new AnalogFilter(3, fr, 1, 0, samplerate, buffersize);
+ else
+ hpf->setfreq(fr);
+ }
+}
+
+void Reverb::setlpf(unsigned char _Plpf)
+{
+ Plpf = _Plpf;
+ if(Plpf == 127) { //No LowPass
+ if(lpf)
+ delete lpf;
+ lpf = NULL;
+ }
+ else {
+ float fr = expf(powf(Plpf / 127.0f, 0.5f) * logf(25000.0f)) + 40.0f;
+ if(!lpf)
+ lpf = new AnalogFilter(2, fr, 1, 0, samplerate, buffersize);
+ else
+ lpf->setfreq(fr);
+ }
+}
+
+void Reverb::settype(unsigned char _Ptype)
+{
+ Ptype = _Ptype;
+ const int NUM_TYPES = 3;
+ const int combtunings[NUM_TYPES][REV_COMBS] = {
+ //this is unused (for random)
+ {0, 0, 0, 0, 0, 0, 0, 0 },
+ //Freeverb by Jezar at Dreampoint
+ {1116, 1188, 1277, 1356, 1422, 1491, 1557, 1617 },
+ //duplicate of Freeverb by Jezar at Dreampoint
+ {1116, 1188, 1277, 1356, 1422, 1491, 1557, 1617 }
+ };
+
+ const int aptunings[NUM_TYPES][REV_APS] = {
+ //this is unused (for random)
+ {0, 0, 0, 0 },
+ //Freeverb by Jezar at Dreampoint
+ {225, 341, 441, 556 },
+ //duplicate of Freeverb by Jezar at Dreampoint
+ {225, 341, 441, 556 }
+ };
+
+ if(Ptype >= NUM_TYPES)
+ Ptype = NUM_TYPES - 1;
+
+ // adjust the combs according to the samplerate
+ float samplerate_adjust = samplerate_f / 44100.0f;
+ float tmp;
+ for(int i = 0; i < REV_COMBS * 2; ++i) {
+ if(Ptype == 0)
+ tmp = 800.0f + (int)(RND * 1400.0f);
+ else
+ tmp = combtunings[Ptype][i % REV_COMBS];
+ tmp *= roomsize;
+ if(i > REV_COMBS)
+ tmp += 23.0f;
+ tmp *= samplerate_adjust; //adjust the combs according to the samplerate
+ if(tmp < 10.0f)
+ tmp = 10.0f;
+ comblen[i] = (int) tmp;
+ combk[i] = 0;
+ lpcomb[i] = 0;
+ if(comb[i])
+ delete [] comb[i];
+ comb[i] = new float[comblen[i]];
+ }
+
+ for(int i = 0; i < REV_APS * 2; ++i) {
+ if(Ptype == 0)
+ tmp = 500 + (int)(RND * 500.0f);
+ else
+ tmp = aptunings[Ptype][i % REV_APS];
+ tmp *= roomsize;
+ if(i > REV_APS)
+ tmp += 23.0f;
+ tmp *= samplerate_adjust; //adjust the combs according to the samplerate
+ if(tmp < 10)
+ tmp = 10;
+ aplen[i] = (int) tmp;
+ apk[i] = 0;
+ if(ap[i])
+ delete [] ap[i];
+ ap[i] = new float[aplen[i]];
+ }
+ delete bandwidth;
+ bandwidth = NULL;
+ if(Ptype == 2) { //bandwidth
+ //TODO the size of the unison buffer may be too small, though this has
+ //not been verified yet.
+ //As this cannot be resized in a RT context, a good upper bound should
+ //be found
+ bandwidth = new Unison(buffersize / 4 + 1, 2.0f, samplerate_f);
+ bandwidth->setSize(50);
+ bandwidth->setBaseFrequency(1.0f);
+ }
+ settime(Ptime);
+ cleanup();
+}
+
+void Reverb::setroomsize(unsigned char _Proomsize)
+{
+ Proomsize = _Proomsize;
+ if(!Proomsize)
+ this->Proomsize = 64; //this is because the older versions consider roomsize=0
+ roomsize = (this->Proomsize - 64.0f) / 64.0f;
+ if(roomsize > 0.0f)
+ roomsize *= 2.0f;
+ roomsize = powf(10.0f, roomsize);
+ rs = sqrtf(roomsize);
+ settype(Ptype);
+}
+
+void Reverb::setbandwidth(unsigned char _Pbandwidth)
+{
+ Pbandwidth = _Pbandwidth;
+ float v = Pbandwidth / 127.0f;
+ if(bandwidth)
+ bandwidth->setBandwidth(powf(v, 2.0f) * 200.0f);
+}
+
+void Reverb::setpreset(unsigned char npreset)
+{
+ const int PRESET_SIZE = 13;
+ const int NUM_PRESETS = 13;
+ unsigned char presets[NUM_PRESETS][PRESET_SIZE] = {
+ //Cathedral1
+ {80, 64, 63, 24, 0, 0, 0, 85, 5, 83, 1, 64, 20},
+ //Cathedral2
+ {80, 64, 69, 35, 0, 0, 0, 127, 0, 71, 0, 64, 20},
+ //Cathedral3
+ {80, 64, 69, 24, 0, 0, 0, 127, 75, 78, 1, 85, 20},
+ //Hall1
+ {90, 64, 51, 10, 0, 0, 0, 127, 21, 78, 1, 64, 20},
+ //Hall2
+ {90, 64, 53, 20, 0, 0, 0, 127, 75, 71, 1, 64, 20},
+ //Room1
+ {100, 64, 33, 0, 0, 0, 0, 127, 0, 106, 0, 30, 20},
+ //Room2
+ {100, 64, 21, 26, 0, 0, 0, 62, 0, 77, 1, 45, 20},
+ //Basement
+ {110, 64, 14, 0, 0, 0, 0, 127, 5, 71, 0, 25, 20},
+ //Tunnel
+ {85, 80, 84, 20, 42, 0, 0, 51, 0, 78, 1, 105, 20},
+ //Echoed1
+ {95, 64, 26, 60, 71, 0, 0, 114, 0, 64, 1, 64, 20},
+ //Echoed2
+ {90, 64, 40, 88, 71, 0, 0, 114, 0, 88, 1, 64, 20},
+ //VeryLong1
+ {90, 64, 93, 15, 0, 0, 0, 114, 0, 77, 0, 95, 20},
+ //VeryLong2
+ {90, 64, 111, 30, 0, 0, 0, 114, 90, 74, 1, 80, 20}
+ };
+
+ if(npreset >= NUM_PRESETS)
+ npreset = NUM_PRESETS - 1;
+ for(int n = 0; n < PRESET_SIZE; ++n)
+ changepar(n, presets[npreset][n]);
+ if(insertion)
+ changepar(0, presets[npreset][0] / 2); //lower the volume if reverb is insertion effect
+ Ppreset = npreset;
+}
+
+
+void Reverb::changepar(int npar, unsigned char value)
+{
+ switch(npar) {
+ case 0:
+ setvolume(value);
+ break;
+ case 1:
+ setpanning(value);
+ break;
+ case 2:
+ settime(value);
+ break;
+ case 3:
+ setidelay(value);
+ break;
+ case 4:
+ setidelayfb(value);
+ break;
+// case 5:
+// setrdelay(value);
+// break;
+// case 6:
+// seterbalance(value);
+// break;
+ case 7:
+ setlpf(value);
+ break;
+ case 8:
+ sethpf(value);
+ break;
+ case 9:
+ setlohidamp(value);
+ break;
+ case 10:
+ settype(value);
+ break;
+ case 11:
+ setroomsize(value);
+ break;
+ case 12:
+ setbandwidth(value);
+ break;
+ }
+}
+
+unsigned char Reverb::getpar(int npar) const
+{
+ switch(npar) {
+ case 0: return Pvolume;
+ case 1: return Ppanning;
+ case 2: return Ptime;
+ case 3: return Pidelay;
+ case 4: return Pidelayfb;
+ case 7: return Plpf;
+ case 8: return Phpf;
+ case 9: return Plohidamp;
+ case 10: return Ptype;
+ case 11: return Proomsize;
+ case 12: return Pbandwidth;
+ default: return 0;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h
new file mode 100644
index 0000000..5363759
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h
@@ -0,0 +1,94 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Reverb.h - Reverberation effect
+ Copyright (C) 2002-2009 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef REVERB_H
+#define REVERB_H
+
+#include "Effect.h"
+
+#define REV_COMBS 8
+#define REV_APS 4
+
+/**Creates Reverberation Effects*/
+class Reverb:public Effect
+{
+ public:
+ Reverb(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize);
+ ~Reverb();
+ void out(const Stereo<float *> &smp);
+ void cleanup(void);
+
+ void setpreset(unsigned char npreset);
+ void changepar(int npar, unsigned char value);
+ unsigned char getpar(int npar) const;
+
+ private:
+ //Parametrii
+ unsigned char Pvolume;
+ unsigned char Ptime; //duration
+ unsigned char Pidelay; //initial delay
+ unsigned char Pidelayfb; //initial feedback
+ unsigned char Plpf;
+ unsigned char Phpf;
+ unsigned char Plohidamp; //Low/HighFrequency Damping
+ unsigned char Ptype; //reverb type
+ unsigned char Proomsize; //room size
+ unsigned char Pbandwidth; //bandwidth
+
+ //parameter control
+ void setvolume(unsigned char _Pvolume);
+ void settime(unsigned char _Ptime);
+ void setlohidamp(unsigned char _Plohidamp);
+ void setidelay(unsigned char _Pidelay);
+ void setidelayfb(unsigned char _Pidelayfb);
+ void sethpf(unsigned char _Phpf);
+ void setlpf(unsigned char _Plpf);
+ void settype(unsigned char _Ptype);
+ void setroomsize(unsigned char _Proomsize);
+ void setbandwidth(unsigned char _Pbandwidth);
+ void processmono(int ch, float *output, float *inputbuf);
+
+
+ //Parameters
+ int lohidamptype; //0=disable, 1=highdamp (lowpass), 2=lowdamp (highpass)
+ int idelaylen;
+ int idelayk;
+ float lohifb;
+ float idelayfb;
+ float roomsize;
+ float rs; //rs is used to "normalise" the volume according to the roomsize
+ int comblen[REV_COMBS * 2];
+ int aplen[REV_APS * 2];
+ class Unison * bandwidth;
+
+ //Internal Variables
+ float *comb[REV_COMBS * 2];
+ int combk[REV_COMBS * 2];
+ float combfb[REV_COMBS * 2]; //feedback-ul fiecarui filtru "comb"
+ float lpcomb[REV_COMBS * 2]; //pentru Filtrul LowPass
+ float *ap[REV_APS * 2];
+ int apk[REV_APS * 2];
+ float *idelay;
+ class AnalogFilter * lpf, *hpf; //filters
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp
new file mode 100644
index 0000000..a1f9f5d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp
@@ -0,0 +1,473 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Bank.cpp - Instrument Bank
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright (C) 2010-2010 Mark McCurry
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Bank.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <algorithm>
+#include <iostream>
+
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "Config.h"
+#include "Util.h"
+#include "Part.h"
+
+#define INSTRUMENT_EXTENSION ".xiz"
+
+//if this file exists into a directory, this make the directory to be considered as a bank, even if it not contains a instrument file
+#define FORCE_BANK_DIR_FILE ".bankdir"
+
+using namespace std;
+
+Bank::Bank()
+ :defaultinsname(" ")
+{
+ clearbank();
+ bankfiletitle = dirname;
+ loadbank(config.cfg.currentBankDir);
+}
+
+Bank::~Bank()
+{
+ clearbank();
+}
+
+/*
+ * Get the name of an instrument from the bank
+ */
+string Bank::getname(unsigned int ninstrument)
+{
+ if(emptyslot(ninstrument))
+ return defaultinsname;
+ return ins[ninstrument].name;
+}
+
+/*
+ * Get the numbered name of an instrument from the bank
+ */
+string Bank::getnamenumbered(unsigned int ninstrument)
+{
+ if(emptyslot(ninstrument))
+ return defaultinsname;
+
+ return stringFrom(ninstrument + 1) + ". " + getname(ninstrument);
+}
+
+/*
+ * Changes the name of an instrument (and the filename)
+ */
+void Bank::setname(unsigned int ninstrument, const string &newname, int newslot)
+{
+ if(emptyslot(ninstrument))
+ return;
+
+ string newfilename;
+ char tmpfilename[100 + 1];
+ tmpfilename[100] = 0;
+
+ if(newslot >= 0)
+ snprintf(tmpfilename, 100, "%4d-%s", newslot + 1, newname.c_str());
+ else
+ snprintf(tmpfilename, 100, "%4d-%s", ninstrument + 1, newname.c_str());
+
+ //add the zeroes at the start of filename
+ for(int i = 0; i < 4; ++i)
+ if(tmpfilename[i] == ' ')
+ tmpfilename[i] = '0';
+
+ newfilename = dirname + '/' + legalizeFilename(tmpfilename) + ".xiz";
+
+ rename(ins[ninstrument].filename.c_str(), newfilename.c_str());
+
+ ins[ninstrument].filename = newfilename;
+ ins[ninstrument].name = newname;
+}
+
+/*
+ * Check if there is no instrument on a slot from the bank
+ */
+bool Bank::emptyslot(unsigned int ninstrument)
+{
+ if(ninstrument >= BANK_SIZE)
+ return true;
+ if(ins[ninstrument].filename.empty())
+ return true;
+
+ if(ins[ninstrument].used)
+ return false;
+ else
+ return true;
+}
+
+/*
+ * Removes the instrument from the bank
+ */
+void Bank::clearslot(unsigned int ninstrument)
+{
+ if(emptyslot(ninstrument))
+ return;
+
+ remove(ins[ninstrument].filename.c_str());
+ deletefrombank(ninstrument);
+}
+
+/*
+ * Save the instrument to a slot
+ */
+void Bank::savetoslot(unsigned int ninstrument, Part *part)
+{
+ clearslot(ninstrument);
+
+ const int maxfilename = 200;
+ char tmpfilename[maxfilename + 20];
+ ZERO(tmpfilename, maxfilename + 20);
+
+ snprintf(tmpfilename,
+ maxfilename,
+ "%4d-%s",
+ ninstrument + 1,
+ (char *)part->Pname);
+
+ //add the zeroes at the start of filename
+ for(int i = 0; i < 4; ++i)
+ if(tmpfilename[i] == ' ')
+ tmpfilename[i] = '0';
+
+ string filename = dirname + '/' + legalizeFilename(tmpfilename) + ".xiz";
+
+ remove(filename.c_str());
+ part->saveXML(filename.c_str());
+ addtobank(ninstrument, legalizeFilename(tmpfilename) + ".xiz", (char *) part->Pname);
+}
+
+/*
+ * Loads the instrument from the bank
+ */
+void Bank::loadfromslot(unsigned int ninstrument, Part *part)
+{
+ if(emptyslot(ninstrument))
+ return;
+
+ part->AllNotesOff();
+ part->defaultsinstrument();
+
+ part->loadXMLinstrument(ins[ninstrument].filename.c_str());
+}
+
+/*
+ * Makes current a bank directory
+ */
+int Bank::loadbank(string bankdirname)
+{
+ DIR *dir = opendir(bankdirname.c_str());
+ clearbank();
+
+ if(dir == NULL)
+ return -1;
+
+ dirname = bankdirname;
+
+ bankfiletitle = dirname;
+
+ struct dirent *fn;
+
+ while((fn = readdir(dir))) {
+ const char *filename = fn->d_name;
+
+ //check for extension
+ if(strstr(filename, INSTRUMENT_EXTENSION) == NULL)
+ continue;
+
+ //verify if the name is like this NNNN-name (where N is a digit)
+ int no = 0;
+ unsigned int startname = 0;
+
+ for(unsigned int i = 0; i < 4; ++i) {
+ if(strlen(filename) <= i)
+ break;
+
+ if((filename[i] >= '0') && (filename[i] <= '9')) {
+ no = no * 10 + (filename[i] - '0');
+ startname++;
+ }
+ }
+
+ if((startname + 1) < strlen(filename))
+ startname++; //to take out the "-"
+
+ string name = filename;
+
+ //remove the file extension
+ for(int i = name.size() - 1; i >= 2; i--)
+ if(name[i] == '.') {
+ name = name.substr(0, i);
+ break;
+ }
+
+ if(no != 0) //the instrument position in the bank is found
+ addtobank(no - 1, filename, name.substr(startname));
+ else
+ addtobank(-1, filename, name);
+ }
+
+ closedir(dir);
+
+ if(!dirname.empty())
+ config.cfg.currentBankDir = dirname;
+
+ return 0;
+}
+
+/*
+ * Makes a new bank, put it on a file and makes it current bank
+ */
+int Bank::newbank(string newbankdirname)
+{
+ string bankdir;
+ bankdir = config.cfg.bankRootDirList[0];
+
+ if(((bankdir[bankdir.size() - 1]) != '/')
+ && ((bankdir[bankdir.size() - 1]) != '\\'))
+ bankdir += "/";
+
+ bankdir += newbankdirname;
+#ifdef WIN32
+ if(mkdir(bankdir.c_str()) < 0)
+#else
+ if(mkdir(bankdir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) < 0)
+#endif
+ return -1;
+
+ const string tmpfilename = bankdir + '/' + FORCE_BANK_DIR_FILE;
+
+ FILE *tmpfile = fopen(tmpfilename.c_str(), "w+");
+ fclose(tmpfile);
+
+ return loadbank(bankdir);
+}
+
+/*
+ * Check if the bank is locked (i.e. the file opened was readonly)
+ */
+int Bank::locked()
+{
+ return dirname.empty();
+}
+
+/*
+ * Swaps a slot with another
+ */
+void Bank::swapslot(unsigned int n1, unsigned int n2)
+{
+ if((n1 == n2) || (locked()))
+ return;
+ if(emptyslot(n1) && (emptyslot(n2)))
+ return;
+ if(emptyslot(n1)) //change n1 to n2 in order to make
+ swap(n1, n2);
+
+ if(emptyslot(n2)) { //this is just a movement from slot1 to slot2
+ setname(n1, getname(n1), n2);
+ ins[n2] = ins[n1];
+ ins[n1] = ins_t();
+ }
+ else { //if both slots are used
+ if(ins[n1].name == ins[n2].name) //change the name of the second instrument if the name are equal
+ ins[n2].name += "2";
+
+ setname(n1, getname(n1), n2);
+ setname(n2, getname(n2), n1);
+ swap(ins[n2], ins[n1]);
+ }
+}
+
+
+bool Bank::bankstruct::operator<(const bankstruct &b) const
+{
+ return name < b.name;
+}
+
+/*
+ * Re-scan for directories containing instrument banks
+ */
+
+void Bank::rescanforbanks()
+{
+ //remove old banks
+ banks.clear();
+
+ for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i)
+ if(!config.cfg.bankRootDirList[i].empty())
+ scanrootdir(config.cfg.bankRootDirList[i]);
+
+ //sort the banks
+ sort(banks.begin(), banks.end());
+
+ //remove duplicate bank names
+ int dupl = 0;
+ for(int j = 0; j < (int) banks.size() - 1; ++j)
+ for(int i = j + 1; i < (int) banks.size(); ++i) {
+ if(banks[i].name == banks[j].name) {
+ //add a [1] to the first bankname and [n] to others
+ banks[i].name = banks[i].name + '['
+ + stringFrom(dupl + 2) + ']';
+ if(dupl == 0)
+ banks[j].name += "[1]";
+
+ dupl++;
+ }
+ else
+ dupl = 0;
+ }
+}
+
+
+// private stuff
+
+void Bank::scanrootdir(string rootdir)
+{
+ DIR *dir = opendir(rootdir.c_str());
+ if(dir == NULL)
+ return;
+
+ bankstruct bank;
+
+ const char *separator = "/";
+ if(rootdir.size()) {
+ char tmp = rootdir[rootdir.size() - 1];
+ if((tmp == '/') || (tmp == '\\'))
+ separator = "";
+ }
+
+ struct dirent *fn;
+ while((fn = readdir(dir))) {
+ const char *dirname = fn->d_name;
+ if(dirname[0] == '.')
+ continue;
+
+ bank.dir = rootdir + separator + dirname + '/';
+ bank.name = dirname;
+ //find out if the directory contains at least 1 instrument
+ bool isbank = false;
+
+ DIR *d = opendir(bank.dir.c_str());
+ if(d == NULL)
+ continue;
+
+ struct dirent *fname;
+
+ while((fname = readdir(d))) {
+ if((strstr(fname->d_name, INSTRUMENT_EXTENSION) != NULL)
+ || (strstr(fname->d_name, FORCE_BANK_DIR_FILE) != NULL)) {
+ isbank = true;
+ break; //could put a #instrument counter here instead
+ }
+ }
+
+ if(isbank)
+ banks.push_back(bank);
+
+ closedir(d);
+ }
+
+ closedir(dir);
+}
+
+void Bank::clearbank()
+{
+ for(int i = 0; i < BANK_SIZE; ++i)
+ ins[i] = ins_t();
+
+ bankfiletitle.clear();
+ dirname.clear();
+}
+
+int Bank::addtobank(int pos, string filename, string name)
+{
+ if((pos >= 0) && (pos < BANK_SIZE)) {
+ if(ins[pos].used)
+ pos = -1; //force it to find a new free position
+ }
+ else
+ if(pos >= BANK_SIZE)
+ pos = -1;
+
+
+ if(pos < 0) //find a free position
+ for(int i = BANK_SIZE - 1; i >= 0; i--)
+ if(!ins[i].used) {
+ pos = i;
+ break;
+ }
+
+ if(pos < 0)
+ return -1; //the bank is full
+
+ deletefrombank(pos);
+
+ ins[pos].used = true;
+ ins[pos].name = name;
+ ins[pos].filename = dirname + '/' + filename;
+
+ //see if PADsynth is used
+ if(config.cfg.CheckPADsynth) {
+ XMLwrapper xml;
+ xml.loadXMLfile(ins[pos].filename);
+
+ ins[pos].info.PADsynth_used = xml.hasPadSynth();
+ }
+ else
+ ins[pos].info.PADsynth_used = false;
+
+ return 0;
+}
+
+bool Bank::isPADsynth_used(unsigned int ninstrument)
+{
+ if(config.cfg.CheckPADsynth == 0)
+ return 0;
+ else
+ return ins[ninstrument].info.PADsynth_used;
+}
+
+
+void Bank::deletefrombank(int pos)
+{
+ if((pos < 0) || (pos >= BANK_SIZE))
+ return;
+ ins[pos] = ins_t();
+}
+
+Bank::ins_t::ins_t()
+ :used(false), name(""), filename("")
+{
+ info.PADsynth_used = false;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h
new file mode 100644
index 0000000..5a7ed9d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h
@@ -0,0 +1,103 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Bank.h - Instrument Bank
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef BANK_H
+#define BANK_H
+
+#include <string>
+#include <vector>
+
+//entries in a bank
+#define BANK_SIZE 160
+
+/**The instrument Bank*/
+class Bank
+{
+ public:
+ /**Constructor*/
+ Bank();
+ ~Bank();
+ std::string getname(unsigned int ninstrument);
+ std::string getnamenumbered(unsigned int ninstrument);
+ void setname(unsigned int ninstrument,
+ const std::string &newname,
+ int newslot); //if newslot==-1 then this is ignored, else it will be put on that slot
+ bool isPADsynth_used(unsigned int ninstrument);
+
+ /**returns true when slot is empty*/
+ bool emptyslot(unsigned int ninstrument);
+
+ /**Empties out the selected slot*/
+ void clearslot(unsigned int ninstrument);
+ /**Saves the given Part to slot*/
+ void savetoslot(unsigned int ninstrument, class Part * part);
+ /**Loads the given slot into a Part*/
+ void loadfromslot(unsigned int ninstrument, class Part * part);
+
+ /**Swaps Slots*/
+ void swapslot(unsigned int n1, unsigned int n2);
+
+ int loadbank(std::string bankdirname);
+ int newbank(std::string newbankdirname);
+
+ std::string bankfiletitle; //this is shown on the UI of the bank (the title of the window)
+ int locked();
+
+ void rescanforbanks();
+
+ struct bankstruct {
+ bool operator<(const bankstruct &b) const;
+ std::string dir;
+ std::string name;
+ };
+
+ std::vector<bankstruct> banks;
+
+ private:
+
+ //it adds a filename to the bank
+ //if pos is -1 it try to find a position
+ //returns -1 if the bank is full, or 0 if the instrument was added
+ int addtobank(int pos, std::string filename, std::string name);
+
+ void deletefrombank(int pos);
+
+ void clearbank();
+
+ std::string defaultinsname;
+
+ struct ins_t {
+ ins_t();
+ bool used;
+ std::string name;
+ std::string filename;
+ struct {
+ bool PADsynth_used;
+ } info;
+ } ins[BANK_SIZE];
+
+ std::string dirname;
+
+ void scanrootdir(std::string rootdir); //scans a root dir for banks
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/CMakeLists.txt
new file mode 100644
index 0000000..eab8ca0
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/CMakeLists.txt
@@ -0,0 +1,28 @@
+include_directories(${MXML_INCLUDE_DIR})
+
+set(zynaddsubfx_misc_SRCS
+ Misc/Bank.cpp
+ Misc/Config.cpp
+ Misc/Dump.cpp
+ Misc/Master.cpp
+ Misc/Microtonal.cpp
+ Misc/Part.cpp
+ Misc/Util.cpp
+ Misc/XMLwrapper.cpp
+ Misc/Recorder.cpp
+ Misc/WavFile.cpp
+ Misc/WaveShapeSmps.cpp
+)
+
+
+
+if(LashEnable)
+ set(zynaddsubfx_misc_SRCS
+ ${zynaddsubfx_misc_SRCS}
+ Misc/LASHClient.cpp
+ PARENT_SCOPE)
+else()
+ set(zynaddsubfx_misc_SRCS
+ ${zynaddsubfx_misc_SRCS}
+ PARENT_SCOPE)
+endif()
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp
new file mode 100644
index 0000000..d38c88b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp
@@ -0,0 +1,323 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Config.cpp - Configuration file functions
+ Copyright (C) 2003-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#include "Config.h"
+#include "XMLwrapper.h"
+
+using namespace std;
+
+Config::Config() :
+ workingDir( NULL )
+{}
+void Config::init()
+{
+ maxstringsize = MAX_STRING_SIZE; //for ui
+ //defaults
+ cfg.SampleRate = 44100;
+ cfg.SoundBufferSize = 256;
+ cfg.OscilSize = 1024;
+ cfg.SwapStereo = 0;
+
+ cfg.LinuxOSSWaveOutDev = new char[MAX_STRING_SIZE];
+ snprintf(cfg.LinuxOSSWaveOutDev, MAX_STRING_SIZE, "/dev/dsp");
+ cfg.LinuxOSSSeqInDev = new char[MAX_STRING_SIZE];
+ snprintf(cfg.LinuxOSSSeqInDev, MAX_STRING_SIZE, "/dev/sequencer");
+
+ cfg.DumpFile = "zynaddsubfx_dump.txt";
+
+ cfg.WindowsWaveOutId = 0;
+ cfg.WindowsMidiInId = 0;
+
+ cfg.BankUIAutoClose = 0;
+ cfg.DumpNotesToFile = 0;
+ cfg.DumpAppend = 1;
+
+ cfg.GzipCompression = 3;
+
+ cfg.Interpolation = 0;
+ cfg.CheckPADsynth = 1;
+ cfg.IgnoreProgramChange = 0;
+
+ cfg.UserInterfaceMode = 0;
+ cfg.VirKeybLayout = 1;
+ winwavemax = 1;
+ winmidimax = 1;
+ //try to find out how many input midi devices are there
+ winmididevices = new winmidionedevice[winmidimax];
+ for(int i = 0; i < winmidimax; ++i) {
+ winmididevices[i].name = new char[MAX_STRING_SIZE];
+ for(int j = 0; j < MAX_STRING_SIZE; ++j)
+ winmididevices[i].name[j] = '\0';
+ }
+
+
+//get the midi input devices name
+ cfg.currentBankDir = "./testbnk";
+
+ char filename[MAX_STRING_SIZE];
+ getConfigFileName(filename, MAX_STRING_SIZE);
+ readConfig(filename);
+
+ if(cfg.bankRootDirList[0].empty()) {
+ //banks
+ cfg.bankRootDirList[0] = "~/banks";
+ cfg.bankRootDirList[1] = "./";
+ cfg.bankRootDirList[2] = "/usr/share/zynaddsubfx/banks";
+ cfg.bankRootDirList[3] = "/usr/local/share/zynaddsubfx/banks";
+#ifdef __APPLE__
+ cfg.bankRootDirList[4] = "../Resources/banks";
+#else
+ cfg.bankRootDirList[4] = "../banks";
+#endif
+ cfg.bankRootDirList[5] = "banks";
+ }
+
+ if(cfg.presetsDirList[0].empty()) {
+ //presets
+ cfg.presetsDirList[0] = "./";
+#ifdef __APPLE__
+ cfg.presetsDirList[1] = "../Resources/presets";
+#else
+ cfg.presetsDirList[1] = "../presets";
+#endif
+ cfg.presetsDirList[2] = "presets";
+ cfg.presetsDirList[3] = "/usr/share/zynaddsubfx/presets";
+ cfg.presetsDirList[4] = "/usr/local/share/zynaddsubfx/presets";
+ }
+ cfg.LinuxALSAaudioDev = "default";
+ cfg.nameTag = "";
+}
+
+Config::~Config()
+{
+ delete [] cfg.LinuxOSSWaveOutDev;
+ delete [] cfg.LinuxOSSSeqInDev;
+
+ for(int i = 0; i < winmidimax; ++i)
+ delete [] winmididevices[i].name;
+ delete [] winmididevices;
+}
+
+
+void Config::save()
+{
+ char filename[MAX_STRING_SIZE];
+ getConfigFileName(filename, MAX_STRING_SIZE);
+ saveConfig(filename);
+}
+
+void Config::clearbankrootdirlist()
+{
+ for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i)
+ cfg.bankRootDirList[i].clear();
+}
+
+void Config::clearpresetsdirlist()
+{
+ for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i)
+ cfg.presetsDirList[i].clear();
+}
+
+void Config::readConfig(const char *filename)
+{
+ XMLwrapper xmlcfg;
+ if(xmlcfg.loadXMLfile(filename) < 0)
+ return;
+ if(xmlcfg.enterbranch("CONFIGURATION")) {
+ cfg.SampleRate = xmlcfg.getpar("sample_rate",
+ cfg.SampleRate,
+ 4000,
+ 1024000);
+ cfg.SoundBufferSize = xmlcfg.getpar("sound_buffer_size",
+ cfg.SoundBufferSize,
+ 16,
+ 8192);
+ cfg.OscilSize = xmlcfg.getpar("oscil_size",
+ cfg.OscilSize,
+ MAX_AD_HARMONICS * 2,
+ 131072);
+ cfg.SwapStereo = xmlcfg.getpar("swap_stereo",
+ cfg.SwapStereo,
+ 0,
+ 1);
+ cfg.BankUIAutoClose = xmlcfg.getpar("bank_window_auto_close",
+ cfg.BankUIAutoClose,
+ 0,
+ 1);
+
+ cfg.DumpNotesToFile = xmlcfg.getpar("dump_notes_to_file",
+ cfg.DumpNotesToFile,
+ 0,
+ 1);
+ cfg.DumpAppend = xmlcfg.getpar("dump_append",
+ cfg.DumpAppend,
+ 0,
+ 1);
+ cfg.DumpFile = xmlcfg.getparstr("dump_file", "");
+
+ cfg.GzipCompression = xmlcfg.getpar("gzip_compression",
+ cfg.GzipCompression,
+ 0,
+ 9);
+
+ cfg.currentBankDir = xmlcfg.getparstr("bank_current", "");
+ cfg.Interpolation = xmlcfg.getpar("interpolation",
+ cfg.Interpolation,
+ 0,
+ 1);
+
+ cfg.CheckPADsynth = xmlcfg.getpar("check_pad_synth",
+ cfg.CheckPADsynth,
+ 0,
+ 1);
+
+ cfg.IgnoreProgramChange = xmlcfg.getpar("ignore_program_change",
+ cfg.IgnoreProgramChange,
+ 0,
+ 1);
+
+
+ cfg.UserInterfaceMode = xmlcfg.getpar("user_interface_mode",
+ cfg.UserInterfaceMode,
+ 0,
+ 2);
+ cfg.VirKeybLayout = xmlcfg.getpar("virtual_keyboard_layout",
+ cfg.VirKeybLayout,
+ 0,
+ 10);
+
+ //get bankroot dirs
+ for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i)
+ if(xmlcfg.enterbranch("BANKROOT", i)) {
+ cfg.bankRootDirList[i] = xmlcfg.getparstr("bank_root", "");
+ xmlcfg.exitbranch();
+ }
+
+ //get preset root dirs
+ for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i)
+ if(xmlcfg.enterbranch("PRESETSROOT", i)) {
+ cfg.presetsDirList[i] = xmlcfg.getparstr("presets_root", "");
+ xmlcfg.exitbranch();
+ }
+
+ //linux stuff
+ xmlcfg.getparstr("linux_oss_wave_out_dev",
+ cfg.LinuxOSSWaveOutDev,
+ MAX_STRING_SIZE);
+ xmlcfg.getparstr("linux_oss_seq_in_dev",
+ cfg.LinuxOSSSeqInDev,
+ MAX_STRING_SIZE);
+
+ //windows stuff
+ cfg.WindowsWaveOutId = xmlcfg.getpar("windows_wave_out_id",
+ cfg.WindowsWaveOutId,
+ 0,
+ winwavemax);
+ cfg.WindowsMidiInId = xmlcfg.getpar("windows_midi_in_id",
+ cfg.WindowsMidiInId,
+ 0,
+ winmidimax);
+
+ xmlcfg.exitbranch();
+ }
+
+ cfg.OscilSize = (int) powf(2, ceil(logf(cfg.OscilSize - 1.0f) / logf(2.0f)));
+}
+
+void Config::saveConfig(const char *filename)
+{
+ XMLwrapper *xmlcfg = new XMLwrapper();
+
+ xmlcfg->beginbranch("CONFIGURATION");
+
+ xmlcfg->addpar("sample_rate", cfg.SampleRate);
+ xmlcfg->addpar("sound_buffer_size", cfg.SoundBufferSize);
+ xmlcfg->addpar("oscil_size", cfg.OscilSize);
+ xmlcfg->addpar("swap_stereo", cfg.SwapStereo);
+ xmlcfg->addpar("bank_window_auto_close", cfg.BankUIAutoClose);
+
+ xmlcfg->addpar("dump_notes_to_file", cfg.DumpNotesToFile);
+ xmlcfg->addpar("dump_append", cfg.DumpAppend);
+ xmlcfg->addparstr("dump_file", cfg.DumpFile);
+
+ xmlcfg->addpar("gzip_compression", cfg.GzipCompression);
+
+ xmlcfg->addpar("check_pad_synth", cfg.CheckPADsynth);
+ xmlcfg->addpar("ignore_program_change", cfg.IgnoreProgramChange);
+
+ xmlcfg->addparstr("bank_current", cfg.currentBankDir);
+
+ xmlcfg->addpar("user_interface_mode", cfg.UserInterfaceMode);
+ xmlcfg->addpar("virtual_keyboard_layout", cfg.VirKeybLayout);
+
+
+ for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i)
+ if(!cfg.bankRootDirList[i].empty()) {
+ xmlcfg->beginbranch("BANKROOT", i);
+ xmlcfg->addparstr("bank_root", cfg.bankRootDirList[i]);
+ xmlcfg->endbranch();
+ }
+
+ for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i)
+ if(!cfg.presetsDirList[i].empty()) {
+ xmlcfg->beginbranch("PRESETSROOT", i);
+ xmlcfg->addparstr("presets_root", cfg.presetsDirList[i]);
+ xmlcfg->endbranch();
+ }
+
+ xmlcfg->addpar("interpolation", cfg.Interpolation);
+
+ //linux stuff
+ xmlcfg->addparstr("linux_oss_wave_out_dev", cfg.LinuxOSSWaveOutDev);
+ xmlcfg->addparstr("linux_oss_seq_in_dev", cfg.LinuxOSSSeqInDev);
+
+ //windows stuff
+ xmlcfg->addpar("windows_wave_out_id", cfg.WindowsWaveOutId);
+ xmlcfg->addpar("windows_midi_in_id", cfg.WindowsMidiInId);
+
+ xmlcfg->endbranch();
+
+ int tmp = cfg.GzipCompression;
+ cfg.GzipCompression = 0;
+ xmlcfg->saveXMLfile(filename);
+ cfg.GzipCompression = tmp;
+
+ delete (xmlcfg);
+}
+
+void Config::getConfigFileName(char *name, int namesize)
+{
+ name[0] = 0;
+ if( workingDir != NULL )
+ {
+ snprintf(name, namesize, "%s%s", workingDir, ".zynaddsubfxXML.cfg");
+ }
+ else
+ {
+ snprintf(name, namesize, "%s%s", getenv("HOME"), "/.zynaddsubfxXML.cfg");
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h
new file mode 100644
index 0000000..1c875d8
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h
@@ -0,0 +1,76 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Config.h - Configuration file functions
+ Copyright (C) 2003-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+#include "../globals.h"
+#include <string>
+#define MAX_STRING_SIZE 4000
+#define MAX_BANK_ROOT_DIRS 100
+
+/**Configuration file functions*/
+class Config
+{
+ public:
+ /** Constructor*/
+ Config();
+ /** Destructor*/
+ ~Config();
+ struct {
+ char *LinuxOSSWaveOutDev, *LinuxOSSSeqInDev;
+ int SampleRate, SoundBufferSize, OscilSize, SwapStereo;
+ int WindowsWaveOutId, WindowsMidiInId;
+ int BankUIAutoClose;
+ int DumpNotesToFile, DumpAppend;
+ int GzipCompression;
+ int Interpolation;
+ std::string DumpFile;
+ std::string bankRootDirList[MAX_BANK_ROOT_DIRS], currentBankDir;
+ std::string presetsDirList[MAX_BANK_ROOT_DIRS];
+ int CheckPADsynth;
+ int IgnoreProgramChange;
+ int UserInterfaceMode;
+ int VirKeybLayout;
+ std::string LinuxALSAaudioDev;
+ std::string nameTag;
+ } cfg;
+ int winwavemax, winmidimax; //number of wave/midi devices on Windows
+ int maxstringsize;
+
+ char * workingDir;
+
+ struct winmidionedevice {
+ char *name;
+ };
+ winmidionedevice *winmididevices;
+
+ void clearbankrootdirlist();
+ void clearpresetsdirlist();
+ void init();
+ void save();
+
+ private:
+ void readConfig(const char *filename);
+ void saveConfig(const char *filename);
+ void getConfigFileName(char *name, int namesize);
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h
new file mode 100644
index 0000000..a605a66
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h
@@ -0,0 +1,99 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Control.h - Defines a variable that can be controled from a frontend
+
+ Copyright (C) 2009 Harald Hvaal
+ Author: Harald Hvaal
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef _CONTROL_H_
+#define _CONTROL_H_
+
+#include <string>
+
+class Control
+{
+ public:
+ /**
+ * The parent is the logical owner of this control. Parent should only
+ * be null for the root node.
+ * The id is a string uniquely identifying this control within the
+ * context of the parent control. No spaces or dots are allowed in this
+ * id.
+ * Children id's are denoted by <parent-id>.<children-id>, so that one
+ * can refer to any control in the hierarchy by separating them with
+ * dots. Example: Main.AddSynth.FrequencyLFO.Amplitude
+ */
+ Control(Control *parent, string id);
+
+ /**
+ * Will recursively get the XML representation for all the subcontrols.
+ * Used for saving to file and copy-pasting settings
+ */
+ string getXMLRepresentation();
+
+ /**
+ * Set the value of this (and possibly subcomponents as well) based on
+ * a xml description.
+ */
+ void restoreFromXML(string xml);
+
+ /**
+ * Register a controluser. This will cause this user to be notified
+ * whenever the contents of the control changes.
+ */
+ void registerControlUser(ControlUser *user);
+
+ /**
+ * This should return a string representation of the controls internal
+ * value
+ */
+ virtual string getStringRepresentation() = 0;
+};
+
+class FloatControl:public Control
+{
+ public:
+ /**
+ * Set the value of this control. If the ControlUser variable is set,
+ * then this user will not be updated with the new value. This is to
+ * avoid setting a value being set back to the source that set it
+ * (which would be redundant, or possibly causing infinite setValue
+ * loops).
+ * NOTE: this function is thread-safe (using a mutex internally)
+ */
+ void setValue(float value, ControlUser *user = NULL);
+
+ /**
+ * Reimplemented from Control
+ */
+ virtual string getStringRepresentation();
+
+ float value();
+};
+
+class ControlUser
+{
+ public:
+ /**
+ * Pure virtual method, to notify the controluser that the value has
+ * been changed internally, and needs to be read again.
+ */
+ virtual void controlUpdated(Control *control) = 0;
+};
+
+#endif /* _CONTROL_H_ */
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp
new file mode 100644
index 0000000..e98074b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp
@@ -0,0 +1,121 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Dump.cpp - It dumps the notes to a text file
+
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+#include <stdlib.h>
+#include <time.h>
+#include "Util.h"
+#include "Dump.h"
+
+Dump dump;
+
+Dump::Dump()
+{
+ file = NULL;
+ tick = 0;
+ k = 0;
+ keyspressed = 0;
+}
+
+Dump::~Dump()
+{
+ if(file != NULL) {
+ int duration = tick * synth->buffersize_f / synth->samplerate_f;
+ fprintf(
+ file,
+ "\n# statistics: duration = %d seconds; keyspressed = %d\n\n\n\n",
+ duration,
+ keyspressed);
+ fclose(file);
+ }
+}
+
+void Dump::startnow()
+{
+ if(file != NULL)
+ return; //the file is already open
+
+ if(config.cfg.DumpNotesToFile != 0) {
+ if(config.cfg.DumpAppend != 0)
+ file = fopen(config.cfg.DumpFile.c_str(), "a");
+ else
+ file = fopen(config.cfg.DumpFile.c_str(), "w");
+ if(file == NULL)
+ return;
+ if(config.cfg.DumpAppend != 0)
+ fprintf(file, "%s", "#************************************\n");
+
+ time_t tm = time(NULL);
+
+ fprintf(file, "#date/time = %s\n", ctime(&tm));
+ fprintf(file, "#1 tick = %g milliseconds\n",
+ synth->buffersize_f * 1000.0f / synth->samplerate_f);
+ fprintf(file, "SAMPLERATE = %d\n", synth->samplerate);
+ fprintf(file, "TICKSIZE = %d #samples\n", synth->buffersize);
+ fprintf(file, "\n\nSTART\n");
+ }
+}
+
+void Dump::inctick()
+{
+ tick++;
+}
+
+
+void Dump::dumpnote(char chan, char note, char vel)
+{
+ if(file == NULL)
+ return;
+ if(note == 0)
+ return;
+ if(vel == 0)
+ fprintf(file, "n %d -> %d %d \n", tick, chan, note); //note off
+ else
+ fprintf(file, "N %d -> %d %d %d \n", tick, chan, note, vel); //note on
+
+ if(vel != 0)
+ keyspressed++;
+#ifndef JACKAUDIOOUT
+ if(k++ > 25) {
+ fflush(file);
+ k = 0;
+ }
+#endif
+}
+
+void Dump::dumpcontroller(char chan, unsigned int type, int par)
+{
+ if(file == NULL)
+ return;
+ switch(type) {
+ case C_pitchwheel:
+ fprintf(file, "P %d -> %d %d\n", tick, chan, par);
+ break;
+ default:
+ fprintf(file, "C %d -> %d %d %d\n", tick, chan, type, par);
+ break;
+ }
+#ifndef JACKAUDIOOUT
+ if(k++ > 25) {
+ fflush(file);
+ k = 0;
+ }
+#endif
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h
new file mode 100644
index 0000000..dc543cf
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h
@@ -0,0 +1,63 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Dump.h - It dumps the notes to a text file
+
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+#ifndef DUMP_H
+#define DUMP_H
+
+#include <stdio.h>
+
+/**Object used to dump the notes into a text file
+ * \todo see if this object should have knowledge about the file
+ * that it will write to
+ * \todo upgrade from stdio to iostream*/
+class Dump
+{
+ public:
+ /**Constructor*/
+ Dump();
+ /**Destructor
+ * Closes the dumpfile*/
+ ~Dump();
+ /**Open dumpfile and prepare it for dumps
+ * \todo see if this fits better in the constructor*/
+ void startnow();
+ /**Tick the timestamp*/
+ void inctick();
+ /**Dump Note to dumpfile
+ * @param chan The channel of the note
+ * @param note The note
+ * @param vel The velocity of the note*/
+ void dumpnote(char chan, char note, char vel);
+ /** Dump the Controller
+ * @param chan The channel of the Controller
+ * @param type The type
+ * @param par The value of the controller
+ * \todo figure out what type is exactly meaning*/
+ void dumpcontroller(char chan, unsigned int type, int par);
+
+ private:
+ FILE *file;
+ int tick;
+ int k; //This appears to be a constant used to flush the file
+ //periodically when JACK is used
+ int keyspressed;
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.cpp
new file mode 100644
index 0000000..57979a3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.cpp
@@ -0,0 +1,103 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ LASHClient.cpp - LASH support
+ Copyright (C) 2006-2009 Lars Luthman
+ Author: Lars Luthman
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <unistd.h>
+#include <iostream>
+#include <string>
+
+#include "LASHClient.h"
+
+
+LASHClient::LASHClient(int *argc, char ***argv)
+{
+ client = lash_init(lash_extract_args(argc, argv), "ZynAddSubFX",
+ LASH_Config_File, LASH_PROTOCOL(2, 0));
+}
+
+
+void LASHClient::setalsaid(int id)
+{
+ if(lash_enabled(client))
+ if(id != -1)
+ lash_alsa_client_id(client, id);
+}
+
+
+void LASHClient::setjackname(const char *name)
+{
+ if(lash_enabled(client))
+ if(name != NULL) {
+ lash_jack_client_name(client, name);
+
+ lash_event_t *event = lash_event_new_with_type(LASH_Client_Name);
+ lash_event_set_string(event, name);
+ lash_send_event(client, event);
+ }
+}
+
+
+LASHClient::Event LASHClient::checkevents(std::string &filename)
+{
+ if(!lash_enabled(client))
+ return NoEvent;
+
+ Event received = NoEvent;
+ lash_event_t *event;
+ while((event = lash_get_event(client))) {
+ // save
+ if(lash_event_get_type(event) == LASH_Save_File) {
+ std::cerr << "LASH event: LASH_Save_File" << std::endl;
+ filename = std::string(lash_event_get_string(event))
+ + "/master.xmz";
+ received = Save;
+ break;
+ }
+ // restore
+ else
+ if(lash_event_get_type(event) == LASH_Restore_File) {
+ std::cerr << "LASH event: LASH_Restore_File" << std::endl;
+ filename = std::string(lash_event_get_string(event))
+ + "/master.xmz";
+ received = Restore;
+ break;
+ }
+ // quit
+ else
+ if(lash_event_get_type(event) == LASH_Quit) {
+ std::cerr << "LASH event: LASH_Quit" << std::endl;
+ received = Quit;
+ break;
+ }
+
+ lash_event_destroy(event);
+ }
+ return received;
+}
+
+
+void LASHClient::confirmevent(Event event)
+{
+ if(event == Save)
+ lash_send_event(client, lash_event_new_with_type(LASH_Save_File));
+ else
+ if(event == Restore)
+ lash_send_event(client, lash_event_new_with_type(LASH_Restore_File));
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h
new file mode 100644
index 0000000..1f3a494
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h
@@ -0,0 +1,63 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ LASHClient.h - LASH support
+ Copyright (C) 2006-2009 Lars Luthman
+ Author: Lars Luthman
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#ifndef LASHClient_h
+#define LASHClient_h
+
+#include <string>
+#include <pthread.h>
+#include <lash/lash.h>
+
+
+/** This class wraps up some functions for initialising and polling
+ * the LASH daemon.*/
+class LASHClient
+{
+ public:
+ /**Enum to represent the LASH events that are currently handled*/
+ enum Event {
+ Save,
+ Restore,
+ Quit,
+ NoEvent
+ };
+
+ /** Constructor
+ * @param argc number of arguments
+ * @param argv the text arguments*/
+ LASHClient(int *argc, char ***argv);
+
+ /**set the ALSA id
+ * @param id new ALSA id*/
+ void setalsaid(int id);
+ /**Set the JACK name
+ * @param name the new name*/
+ void setjackname(const char *name);
+ Event checkevents(std::string &filename);
+ void confirmevent(Event event);
+
+ private:
+
+ lash_client_t *client;
+};
+
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp
new file mode 100644
index 0000000..c4b8947
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp
@@ -0,0 +1,808 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Master.cpp - It sends Midi Messages to Parts, receives samples from parts,
+ process them with system/insertion effects and mix them
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Master.h"
+
+#include "Part.h"
+
+#include "../Params/LFOParams.h"
+#include "../Effects/EffectMgr.h"
+#include "../DSP/FFTwrapper.h"
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <iostream>
+#include <algorithm>
+#include <cmath>
+
+#include <unistd.h>
+
+using namespace std;
+
+vuData::vuData(void)
+ :outpeakl(0.0f), outpeakr(0.0f), maxoutpeakl(0.0f), maxoutpeakr(0.0f),
+ rmspeakl(0.0f), rmspeakr(0.0f), clipped(0)
+{}
+
+static Master* masterInstance = NULL;
+
+Master::Master()
+{
+ swaplr = 0;
+ off = 0;
+ smps = 0;
+ bufl = new float[synth->buffersize];
+ bufr = new float[synth->buffersize];
+
+ pthread_mutex_init(&mutex, NULL);
+ pthread_mutex_init(&vumutex, NULL);
+ fft = new FFTwrapper(synth->oscilsize);
+
+ shutup = 0;
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ vuoutpeakpart[npart] = 1e-9;
+ fakepeakpart[npart] = 0;
+ }
+
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ part[npart] = new Part(µtonal, fft, &mutex);
+
+ //Insertion Effects init
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx)
+ insefx[nefx] = new EffectMgr(1, &mutex);
+
+ //System Effects init
+ for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx)
+ sysefx[nefx] = new EffectMgr(0, &mutex);
+
+
+ defaults();
+}
+
+void Master::defaults()
+{
+ volume = 1.0f;
+ setPvolume(80);
+ setPkeyshift(64);
+
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ part[npart]->defaults();
+ part[npart]->Prcvchn = npart % NUM_MIDI_CHANNELS;
+ }
+
+ partonoff(0, 1); //enable the first part
+
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) {
+ insefx[nefx]->defaults();
+ Pinsparts[nefx] = -1;
+ }
+
+ //System Effects init
+ for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) {
+ sysefx[nefx]->defaults();
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ setPsysefxvol(npart, nefx, 0);
+
+ for(int nefxto = 0; nefxto < NUM_SYS_EFX; ++nefxto)
+ setPsysefxsend(nefx, nefxto, 0);
+ }
+
+ microtonal.defaults();
+ ShutUp();
+}
+
+bool Master::mutexLock(lockset request)
+{
+ switch(request) {
+ case MUTEX_TRYLOCK:
+ return !pthread_mutex_trylock(&mutex);
+ case MUTEX_LOCK:
+ return !pthread_mutex_lock(&mutex);
+ case MUTEX_UNLOCK:
+ return !pthread_mutex_unlock(&mutex);
+ }
+ return false;
+}
+
+Master &Master::getInstance()
+{
+ if (!masterInstance)
+ masterInstance = new Master;
+
+ return *masterInstance;
+}
+
+void Master::deleteInstance()
+{
+ if (masterInstance)
+ {
+ delete masterInstance;
+ masterInstance = NULL;
+ }
+}
+
+/*
+ * Note On Messages (velocity=0 for NoteOff)
+ */
+void Master::noteOn(char chan, char note, char velocity)
+{
+ if(velocity) {
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ if(chan == part[npart]->Prcvchn) {
+ fakepeakpart[npart] = velocity * 2;
+ if(part[npart]->Penabled)
+ part[npart]->NoteOn(note, velocity, keyshift);
+ }
+ }
+ else
+ this->noteOff(chan, note);
+ HDDRecorder.triggernow();
+}
+
+/*
+ * Note Off Messages
+ */
+void Master::noteOff(char chan, char note)
+{
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ if((chan == part[npart]->Prcvchn) && part[npart]->Penabled)
+ part[npart]->NoteOff(note);
+}
+
+/*
+ * Pressure Messages (velocity=0 for NoteOff)
+ */
+void Master::polyphonicAftertouch(char chan, char note, char velocity)
+{
+ if(velocity) {
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ if(chan == part[npart]->Prcvchn)
+ if(part[npart]->Penabled)
+ part[npart]->PolyphonicAftertouch(note, velocity, keyshift);
+
+ }
+ else
+ this->noteOff(chan, note);
+}
+
+/*
+ * Controllers
+ */
+void Master::setController(char chan, int type, int par)
+{
+ if((type == C_dataentryhi) || (type == C_dataentrylo)
+ || (type == C_nrpnhi) || (type == C_nrpnlo)) { //Process RPN and NRPN by the Master (ignore the chan)
+ ctl.setparameternumber(type, par);
+
+ int parhi = -1, parlo = -1, valhi = -1, vallo = -1;
+ if(ctl.getnrpn(&parhi, &parlo, &valhi, &vallo) == 0) //this is NRPN
+ //fprintf(stderr,"rcv. NRPN: %d %d %d %d\n",parhi,parlo,valhi,vallo);
+ switch(parhi) {
+ case 0x04: //System Effects
+ if(parlo < NUM_SYS_EFX)
+ sysefx[parlo]->seteffectpar_nolock(valhi, vallo);
+ ;
+ break;
+ case 0x08: //Insertion Effects
+ if(parlo < NUM_INS_EFX)
+ insefx[parlo]->seteffectpar_nolock(valhi, vallo);
+ ;
+ break;
+ }
+ ;
+ }
+ else
+ if(type == C_bankselectmsb) { // Change current bank
+ if(((unsigned int)par < bank.banks.size())
+ && (bank.banks[par].dir != bank.bankfiletitle))
+ bank.loadbank(bank.banks[par].dir);
+ }
+ else { //other controllers
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) //Send the controller to all part assigned to the channel
+ if((chan == part[npart]->Prcvchn) && (part[npart]->Penabled != 0))
+ part[npart]->SetController(type, par);
+ ;
+
+ if(type == C_allsoundsoff) { //cleanup insertion/system FX
+ for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx)
+ sysefx[nefx]->cleanup();
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx)
+ insefx[nefx]->cleanup();
+ }
+ }
+}
+
+void Master::setProgram(char chan, unsigned int pgm)
+{
+ if(config.cfg.IgnoreProgramChange)
+ return;
+
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ if(chan == part[npart]->Prcvchn) {
+ bank.loadfromslot(pgm, part[npart]);
+
+ //Hack to get pad note parameters to update
+ //this is not real time safe and makes assumptions about the calling
+ //convention of this function...
+ pthread_mutex_unlock(&mutex);
+ part[npart]->applyparameters();
+ pthread_mutex_lock(&mutex);
+ }
+}
+
+void Master::vuUpdate(const float *outl, const float *outr)
+{
+ //Peak computation (for vumeters)
+ vu.outpeakl = 1e-12;
+ vu.outpeakr = 1e-12;
+ for(int i = 0; i < synth->buffersize; ++i) {
+ if(fabs(outl[i]) > vu.outpeakl)
+ vu.outpeakl = fabs(outl[i]);
+ if(fabs(outr[i]) > vu.outpeakr)
+ vu.outpeakr = fabs(outr[i]);
+ }
+ if((vu.outpeakl > 1.0f) || (vu.outpeakr > 1.0f))
+ vu.clipped = 1;
+ if(vu.maxoutpeakl < vu.outpeakl)
+ vu.maxoutpeakl = vu.outpeakl;
+ if(vu.maxoutpeakr < vu.outpeakr)
+ vu.maxoutpeakr = vu.outpeakr;
+
+ //RMS Peak computation (for vumeters)
+ vu.rmspeakl = 1e-12;
+ vu.rmspeakr = 1e-12;
+ for(int i = 0; i < synth->buffersize; ++i) {
+ vu.rmspeakl += outl[i] * outl[i];
+ vu.rmspeakr += outr[i] * outr[i];
+ }
+ vu.rmspeakl = sqrt(vu.rmspeakl / synth->buffersize_f);
+ vu.rmspeakr = sqrt(vu.rmspeakr / synth->buffersize_f);
+
+ //Part Peak computation (for Part vumeters or fake part vumeters)
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ vuoutpeakpart[npart] = 1.0e-12f;
+ if(part[npart]->Penabled != 0) {
+ float *outl = part[npart]->partoutl,
+ *outr = part[npart]->partoutr;
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float tmp = fabs(outl[i] + outr[i]);
+ if(tmp > vuoutpeakpart[npart])
+ vuoutpeakpart[npart] = tmp;
+ }
+ vuoutpeakpart[npart] *= volume;
+ }
+ else
+ if(fakepeakpart[npart] > 1)
+ fakepeakpart[npart]--;
+ }
+}
+
+/*
+ * Enable/Disable a part
+ */
+void Master::partonoff(int npart, int what)
+{
+ if(npart >= NUM_MIDI_PARTS)
+ return;
+ if(what == 0) { //disable part
+ fakepeakpart[npart] = 0;
+ part[npart]->Penabled = 0;
+ part[npart]->cleanup();
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) {
+ if(Pinsparts[nefx] == npart)
+ insefx[nefx]->cleanup();
+ ;
+ }
+ }
+ else { //enabled
+ part[npart]->Penabled = 1;
+ fakepeakpart[npart] = 0;
+ }
+}
+
+/*
+ * Master audio out (the final sound)
+ */
+void Master::AudioOut(float *outl, float *outr)
+{
+ //Swaps the Left channel with Right Channel
+ if(swaplr)
+ swap(outl, outr);
+
+ //clean up the output samples (should not be needed?)
+ memset(outl, 0, synth->bufferbytes);
+ memset(outr, 0, synth->bufferbytes);
+
+ //Compute part samples and store them part[npart]->partoutl,partoutr
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ if(part[npart]->Penabled != 0 && !pthread_mutex_trylock(&part[npart]->load_mutex)) {
+ part[npart]->ComputePartSmps();
+ pthread_mutex_unlock(&part[npart]->load_mutex);
+ }
+ }
+
+ //Insertion effects
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx)
+ if(Pinsparts[nefx] >= 0) {
+ int efxpart = Pinsparts[nefx];
+ if(part[efxpart]->Penabled)
+ insefx[nefx]->out(part[efxpart]->partoutl,
+ part[efxpart]->partoutr);
+ }
+
+
+ //Apply the part volumes and pannings (after insertion effects)
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ if(part[npart]->Penabled == 0)
+ continue;
+
+ Stereo<float> newvol(part[npart]->volume),
+ oldvol(part[npart]->oldvolumel,
+ part[npart]->oldvolumer);
+
+ float pan = part[npart]->panning;
+ if(pan < 0.5f)
+ newvol.l *= pan * 2.0f;
+ else
+ newvol.r *= (1.0f - pan) * 2.0f;
+
+ //the volume or the panning has changed and needs interpolation
+ if(ABOVE_AMPLITUDE_THRESHOLD(oldvol.l, newvol.l)
+ || ABOVE_AMPLITUDE_THRESHOLD(oldvol.r, newvol.r)) {
+ for(int i = 0; i < synth->buffersize; ++i) {
+ Stereo<float> vol(INTERPOLATE_AMPLITUDE(oldvol.l, newvol.l,
+ i, synth->buffersize),
+ INTERPOLATE_AMPLITUDE(oldvol.r, newvol.r,
+ i, synth->buffersize));
+ part[npart]->partoutl[i] *= vol.l;
+ part[npart]->partoutr[i] *= vol.r;
+ }
+ part[npart]->oldvolumel = newvol.l;
+ part[npart]->oldvolumer = newvol.r;
+ }
+ else
+ for(int i = 0; i < synth->buffersize; ++i) { //the volume did not changed
+ part[npart]->partoutl[i] *= newvol.l;
+ part[npart]->partoutr[i] *= newvol.r;
+ }
+ }
+
+
+ //System effects
+ for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) {
+ if(sysefx[nefx]->geteffect() == 0)
+ continue; //the effect is disabled
+
+ float tmpmixl[synth->buffersize];
+ float tmpmixr[synth->buffersize];
+ //Clean up the samples used by the system effects
+ memset(tmpmixl, 0, synth->bufferbytes);
+ memset(tmpmixr, 0, synth->bufferbytes);
+
+ //Mix the channels according to the part settings about System Effect
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ //skip if the part has no output to effect
+ if(Psysefxvol[nefx][npart] == 0)
+ continue;
+
+ //skip if the part is disabled
+ if(part[npart]->Penabled == 0)
+ continue;
+
+ //the output volume of each part to system effect
+ const float vol = sysefxvol[nefx][npart];
+ for(int i = 0; i < synth->buffersize; ++i) {
+ tmpmixl[i] += part[npart]->partoutl[i] * vol;
+ tmpmixr[i] += part[npart]->partoutr[i] * vol;
+ }
+ }
+
+ // system effect send to next ones
+ for(int nefxfrom = 0; nefxfrom < nefx; ++nefxfrom)
+ if(Psysefxsend[nefxfrom][nefx] != 0) {
+ const float vol = sysefxsend[nefxfrom][nefx];
+ for(int i = 0; i < synth->buffersize; ++i) {
+ tmpmixl[i] += sysefx[nefxfrom]->efxoutl[i] * vol;
+ tmpmixr[i] += sysefx[nefxfrom]->efxoutr[i] * vol;
+ }
+ }
+
+ sysefx[nefx]->out(tmpmixl, tmpmixr);
+
+ //Add the System Effect to sound output
+ const float outvol = sysefx[nefx]->sysefxgetvolume();
+ for(int i = 0; i < synth->buffersize; ++i) {
+ outl[i] += tmpmixl[i] * outvol;
+ outr[i] += tmpmixr[i] * outvol;
+ }
+ }
+
+ //Mix all parts
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ if(part[npart]->Penabled) //only mix active parts
+ for(int i = 0; i < synth->buffersize; ++i) { //the volume did not changed
+ outl[i] += part[npart]->partoutl[i];
+ outr[i] += part[npart]->partoutr[i];
+ }
+
+ //Insertion effects for Master Out
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx)
+ if(Pinsparts[nefx] == -2)
+ insefx[nefx]->out(outl, outr);
+
+
+ //Master Volume
+ for(int i = 0; i < synth->buffersize; ++i) {
+ outl[i] *= volume;
+ outr[i] *= volume;
+ }
+
+ if(!pthread_mutex_trylock(&vumutex)) {
+ vuUpdate(outl, outr);
+ pthread_mutex_unlock(&vumutex);
+ }
+
+ //Shutup if it is asked (with fade-out)
+ if(shutup) {
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float tmp = (synth->buffersize_f - i) / synth->buffersize_f;
+ outl[i] *= tmp;
+ outr[i] *= tmp;
+ }
+ ShutUp();
+ }
+
+ //update the LFO's time
+ LFOParams::time++;
+
+ dump.inctick();
+}
+
+//TODO review the respective code from yoshimi for this
+//If memory serves correctly, libsamplerate was used
+void Master::GetAudioOutSamples(size_t nsamples,
+ unsigned samplerate,
+ float *outl,
+ float *outr)
+{
+ off_t out_off = 0;
+
+ //Fail when resampling rather than doing a poor job
+ if(synth->samplerate != samplerate) {
+ printf("darn it: %d vs %d\n", synth->samplerate, samplerate);
+ return;
+ }
+
+ while(nsamples) {
+ //use all available samples
+ if(nsamples >= smps) {
+ memcpy(outl + out_off, bufl + off, sizeof(float) * smps);
+ memcpy(outr + out_off, bufr + off, sizeof(float) * smps);
+ nsamples -= smps;
+
+ //generate samples
+ AudioOut(bufl, bufr);
+ off = 0;
+ out_off += smps;
+ smps = synth->buffersize;
+ }
+ else { //use some samples
+ memcpy(outl + out_off, bufl + off, sizeof(float) * nsamples);
+ memcpy(outr + out_off, bufr + off, sizeof(float) * nsamples);
+ smps -= nsamples;
+ off += nsamples;
+ nsamples = 0;
+ }
+ }
+}
+
+Master::~Master()
+{
+ delete []bufl;
+ delete []bufr;
+
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ delete part[npart];
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx)
+ delete insefx[nefx];
+ for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx)
+ delete sysefx[nefx];
+
+ delete fft;
+
+ pthread_mutex_destroy(&mutex);
+ pthread_mutex_destroy(&vumutex);
+}
+
+
+/*
+ * Parameter control
+ */
+void Master::setPvolume(char Pvolume_)
+{
+ Pvolume = Pvolume_;
+ volume = dB2rap((Pvolume - 96.0f) / 96.0f * 40.0f);
+}
+
+void Master::setPkeyshift(char Pkeyshift_)
+{
+ Pkeyshift = Pkeyshift_;
+ keyshift = (int)Pkeyshift - 64;
+}
+
+
+void Master::setPsysefxvol(int Ppart, int Pefx, char Pvol)
+{
+ Psysefxvol[Pefx][Ppart] = Pvol;
+ sysefxvol[Pefx][Ppart] = powf(0.1f, (1.0f - Pvol / 96.0f) * 2.0f);
+}
+
+void Master::setPsysefxsend(int Pefxfrom, int Pefxto, char Pvol)
+{
+ Psysefxsend[Pefxfrom][Pefxto] = Pvol;
+ sysefxsend[Pefxfrom][Pefxto] = powf(0.1f, (1.0f - Pvol / 96.0f) * 2.0f);
+}
+
+
+/*
+ * Panic! (Clean up all parts and effects)
+ */
+void Master::ShutUp()
+{
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ part[npart]->cleanup();
+ fakepeakpart[npart] = 0;
+ }
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx)
+ insefx[nefx]->cleanup();
+ for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx)
+ sysefx[nefx]->cleanup();
+ vuresetpeaks();
+ shutup = 0;
+}
+
+
+/*
+ * Reset peaks and clear the "cliped" flag (for VU-meter)
+ */
+void Master::vuresetpeaks()
+{
+ pthread_mutex_lock(&vumutex);
+ vu.outpeakl = 1e-9;
+ vu.outpeakr = 1e-9;
+ vu.maxoutpeakl = 1e-9;
+ vu.maxoutpeakr = 1e-9;
+ vu.clipped = 0;
+ pthread_mutex_unlock(&vumutex);
+}
+
+vuData Master::getVuData()
+{
+ vuData tmp;
+ pthread_mutex_lock(&vumutex);
+ tmp = vu;
+ pthread_mutex_unlock(&vumutex);
+ return tmp;
+}
+
+void Master::applyparameters(bool lockmutex)
+{
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart)
+ part[npart]->applyparameters(lockmutex);
+}
+
+void Master::add2XML(XMLwrapper *xml)
+{
+ xml->addpar("volume", Pvolume);
+ xml->addpar("key_shift", Pkeyshift);
+ xml->addparbool("nrpn_receive", ctl.NRPN.receive);
+
+ xml->beginbranch("MICROTONAL");
+ microtonal.add2XML(xml);
+ xml->endbranch();
+
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ xml->beginbranch("PART", npart);
+ part[npart]->add2XML(xml);
+ xml->endbranch();
+ }
+
+ xml->beginbranch("SYSTEM_EFFECTS");
+ for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) {
+ xml->beginbranch("SYSTEM_EFFECT", nefx);
+ xml->beginbranch("EFFECT");
+ sysefx[nefx]->add2XML(xml);
+ xml->endbranch();
+
+ for(int pefx = 0; pefx < NUM_MIDI_PARTS; ++pefx) {
+ xml->beginbranch("VOLUME", pefx);
+ xml->addpar("vol", Psysefxvol[nefx][pefx]);
+ xml->endbranch();
+ }
+
+ for(int tonefx = nefx + 1; tonefx < NUM_SYS_EFX; ++tonefx) {
+ xml->beginbranch("SENDTO", tonefx);
+ xml->addpar("send_vol", Psysefxsend[nefx][tonefx]);
+ xml->endbranch();
+ }
+
+
+ xml->endbranch();
+ }
+ xml->endbranch();
+
+ xml->beginbranch("INSERTION_EFFECTS");
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) {
+ xml->beginbranch("INSERTION_EFFECT", nefx);
+ xml->addpar("part", Pinsparts[nefx]);
+
+ xml->beginbranch("EFFECT");
+ insefx[nefx]->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+ }
+
+ xml->endbranch();
+}
+
+
+int Master::getalldata(char **data)
+{
+ XMLwrapper *xml = new XMLwrapper();
+
+ xml->beginbranch("MASTER");
+
+ pthread_mutex_lock(&mutex);
+ add2XML(xml);
+ pthread_mutex_unlock(&mutex);
+
+ xml->endbranch();
+
+ *data = xml->getXMLdata();
+ delete (xml);
+ return strlen(*data) + 1;
+}
+
+void Master::putalldata(char *data, int /*size*/)
+{
+ XMLwrapper *xml = new XMLwrapper();
+ if(!xml->putXMLdata(data)) {
+ delete (xml);
+ return;
+ }
+
+ if(xml->enterbranch("MASTER") == 0)
+ return;
+
+ pthread_mutex_lock(&mutex);
+ getfromXML(xml);
+ pthread_mutex_unlock(&mutex);
+
+ xml->exitbranch();
+
+ delete (xml);
+}
+
+int Master::saveXML(const char *filename)
+{
+ XMLwrapper *xml = new XMLwrapper();
+
+ xml->beginbranch("MASTER");
+ add2XML(xml);
+ xml->endbranch();
+
+ int result = xml->saveXMLfile(filename);
+ delete (xml);
+ return result;
+}
+
+
+
+int Master::loadXML(const char *filename)
+{
+ XMLwrapper *xml = new XMLwrapper();
+ if(xml->loadXMLfile(filename) < 0) {
+ delete (xml);
+ return -1;
+ }
+
+ if(xml->enterbranch("MASTER") == 0)
+ return -10;
+ getfromXML(xml);
+ xml->exitbranch();
+
+ delete (xml);
+ return 0;
+}
+
+void Master::getfromXML(XMLwrapper *xml)
+{
+ setPvolume(xml->getpar127("volume", Pvolume));
+ setPkeyshift(xml->getpar127("key_shift", Pkeyshift));
+ ctl.NRPN.receive = xml->getparbool("nrpn_receive", ctl.NRPN.receive);
+
+
+ part[0]->Penabled = 0;
+ for(int npart = 0; npart < NUM_MIDI_PARTS; ++npart) {
+ if(xml->enterbranch("PART", npart) == 0)
+ continue;
+ part[npart]->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("MICROTONAL")) {
+ microtonal.getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ sysefx[0]->changeeffect(0);
+ if(xml->enterbranch("SYSTEM_EFFECTS")) {
+ for(int nefx = 0; nefx < NUM_SYS_EFX; ++nefx) {
+ if(xml->enterbranch("SYSTEM_EFFECT", nefx) == 0)
+ continue;
+ if(xml->enterbranch("EFFECT")) {
+ sysefx[nefx]->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ for(int partefx = 0; partefx < NUM_MIDI_PARTS; ++partefx) {
+ if(xml->enterbranch("VOLUME", partefx) == 0)
+ continue;
+ setPsysefxvol(partefx, nefx,
+ xml->getpar127("vol", Psysefxvol[partefx][nefx]));
+ xml->exitbranch();
+ }
+
+ for(int tonefx = nefx + 1; tonefx < NUM_SYS_EFX; ++tonefx) {
+ if(xml->enterbranch("SENDTO", tonefx) == 0)
+ continue;
+ setPsysefxsend(nefx, tonefx,
+ xml->getpar127("send_vol",
+ Psysefxsend[nefx][tonefx]));
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+
+ if(xml->enterbranch("INSERTION_EFFECTS")) {
+ for(int nefx = 0; nefx < NUM_INS_EFX; ++nefx) {
+ if(xml->enterbranch("INSERTION_EFFECT", nefx) == 0)
+ continue;
+ Pinsparts[nefx] = xml->getpar("part",
+ Pinsparts[nefx],
+ -2,
+ NUM_MIDI_PARTS);
+ if(xml->enterbranch("EFFECT")) {
+ insefx[nefx]->getfromXML(xml);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+ xml->exitbranch();
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h
new file mode 100644
index 0000000..2238d75
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h
@@ -0,0 +1,183 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Master.h - It sends Midi Messages to Parts, receives samples from parts,
+ process them with system/insertion effects and mix them
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef MASTER_H
+#define MASTER_H
+#include <pthread.h>
+
+#include "../globals.h"
+#include "Microtonal.h"
+
+#include "Bank.h"
+#include "Recorder.h"
+#include "Dump.h"
+#include "XMLwrapper.h"
+
+#include "../Params/Controller.h"
+
+typedef enum {
+ MUTEX_TRYLOCK, MUTEX_LOCK, MUTEX_UNLOCK
+} lockset;
+
+extern Dump dump;
+
+struct vuData {
+ vuData(void);
+ float outpeakl, outpeakr, maxoutpeakl, maxoutpeakr,
+ rmspeakl, rmspeakr;
+ int clipped;
+};
+
+
+/** It sends Midi Messages to Parts, receives samples from parts,
+ * process them with system/insertion effects and mix them */
+class Master
+{
+ public:
+ /** Constructor TODO make private*/
+ Master();
+ /** Destructor*/
+ ~Master();
+
+ static Master &getInstance();
+ static void deleteInstance();
+
+ /**Saves all settings to a XML file
+ * @return 0 for ok or <0 if there is an error*/
+ int saveXML(const char *filename);
+
+ /**This adds the parameters to the XML data*/
+ void add2XML(XMLwrapper *xml);
+
+ void defaults();
+
+
+ /**loads all settings from a XML file
+ * @return 0 for ok or -1 if there is an error*/
+ int loadXML(const char *filename);
+ void applyparameters(bool lockmutex = true);
+
+ void getfromXML(XMLwrapper *xml);
+
+ /**get all data to a newly allocated array (used for VST)
+ * @return the datasize*/
+ int getalldata(char **data);
+ /**put all data from the *data array to zynaddsubfx parameters (used for VST)*/
+ void putalldata(char *data, int size);
+
+ //Mutex control
+ /**Control the Master's mutex state.
+ * @param lockset either trylock, lock, or unlock.
+ * @return true when successful false otherwise.*/
+ bool mutexLock(lockset request);
+
+ //Midi IN
+ void noteOn(char chan, char note, char velocity);
+ void noteOff(char chan, char note);
+ void polyphonicAftertouch(char chan, char note, char velocity);
+ void setController(char chan, int type, int par);
+ void setProgram(char chan, unsigned int pgm);
+ //void NRPN...
+
+
+ void ShutUp();
+ int shutup;
+
+ void vuUpdate(const float *outl, const float *outr);
+
+ /**Audio Output*/
+ void AudioOut(float *outl, float *outr);
+ /**Audio Output (for callback mode). This allows the program to be controled by an external program*/
+ void GetAudioOutSamples(size_t nsamples,
+ unsigned samplerate,
+ float *outl,
+ float *outr);
+
+
+ void partonoff(int npart, int what);
+
+ /**parts \todo see if this can be made to be dynamic*/
+ class Part * part[NUM_MIDI_PARTS];
+
+ //parameters
+
+ unsigned char Pvolume;
+ unsigned char Pkeyshift;
+ unsigned char Psysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
+ unsigned char Psysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
+
+ //parameters control
+ void setPvolume(char Pvolume_);
+ void setPkeyshift(char Pkeyshift_);
+ void setPsysefxvol(int Ppart, int Pefx, char Pvol);
+ void setPsysefxsend(int Pefxfrom, int Pefxto, char Pvol);
+
+ //effects
+ class EffectMgr * sysefx[NUM_SYS_EFX]; //system
+ class EffectMgr * insefx[NUM_INS_EFX]; //insertion
+// void swapcopyeffects(int what,int type,int neff1,int neff2);
+
+ //HDD recorder
+ Recorder HDDRecorder;
+
+ //part that's apply the insertion effect; -1 to disable
+ short int Pinsparts[NUM_INS_EFX];
+
+
+ //peaks for VU-meter
+ void vuresetpeaks();
+ //get VU-meter data
+ vuData getVuData();
+
+ //peaks for part VU-meters
+ /**\todo synchronize this with a mutex*/
+ float vuoutpeakpart[NUM_MIDI_PARTS];
+ unsigned char fakepeakpart[NUM_MIDI_PARTS]; //this is used to compute the "peak" when the part is disabled
+
+ Controller ctl;
+ bool swaplr; //if L and R are swapped
+
+ //other objects
+ Microtonal microtonal;
+ Bank bank;
+
+ class FFTwrapper * fft;
+ pthread_mutex_t mutex;
+ pthread_mutex_t vumutex;
+
+
+ private:
+ vuData vu;
+ float volume;
+ float sysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
+ float sysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
+ int keyshift;
+
+ //information relevent to generating plugin audio samples
+ float *bufl;
+ float *bufr;
+ off_t off;
+ size_t smps;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.cpp
new file mode 100644
index 0000000..fc0e015
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.cpp
@@ -0,0 +1,694 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Microtonal.cpp - Tuning settings and microtonal capabilities
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <math.h>
+#include <string.h>
+#include "Microtonal.h"
+
+#define MAX_LINE_SIZE 80
+
+Microtonal::Microtonal()
+{
+ Pname = new unsigned char[MICROTONAL_MAX_NAME_LEN];
+ Pcomment = new unsigned char[MICROTONAL_MAX_NAME_LEN];
+ defaults();
+}
+
+void Microtonal::defaults()
+{
+ Pinvertupdown = 0;
+ Pinvertupdowncenter = 60;
+ octavesize = 12;
+ Penabled = 0;
+ PAnote = 69;
+ PAfreq = 440.0f;
+ Pscaleshift = 64;
+
+ Pfirstkey = 0;
+ Plastkey = 127;
+ Pmiddlenote = 60;
+ Pmapsize = 12;
+ Pmappingenabled = 0;
+
+ for(int i = 0; i < 128; ++i)
+ Pmapping[i] = i;
+
+ for(int i = 0; i < MAX_OCTAVE_SIZE; ++i) {
+ octave[i].tuning = tmpoctave[i].tuning = powf(
+ 2,
+ (i % octavesize
+ + 1) / 12.0f);
+ octave[i].type = tmpoctave[i].type = 1;
+ octave[i].x1 = tmpoctave[i].x1 = (i % octavesize + 1) * 100;
+ octave[i].x2 = tmpoctave[i].x2 = 0;
+ }
+ octave[11].type = 2;
+ octave[11].x1 = 2;
+ octave[11].x2 = 1;
+ for(int i = 0; i < MICROTONAL_MAX_NAME_LEN; ++i) {
+ Pname[i] = '\0';
+ Pcomment[i] = '\0';
+ }
+ snprintf((char *) Pname, MICROTONAL_MAX_NAME_LEN, "12tET");
+ snprintf((char *) Pcomment,
+ MICROTONAL_MAX_NAME_LEN,
+ "Equal Temperament 12 notes per octave");
+ Pglobalfinedetune = 64;
+}
+
+Microtonal::~Microtonal()
+{
+ delete [] Pname;
+ delete [] Pcomment;
+}
+
+/*
+ * Get the size of the octave
+ */
+unsigned char Microtonal::getoctavesize() const
+{
+ if(Penabled != 0)
+ return octavesize;
+ else
+ return 12;
+}
+
+/*
+ * Get the frequency according the note number
+ */
+float Microtonal::getnotefreq(int note, int keyshift) const
+{
+ // in this function will appears many times things like this:
+ // var=(a+b*100)%b
+ // I had written this way because if I use var=a%b gives unwanted results when a<0
+ // This is the same with divisions.
+
+ if((Pinvertupdown != 0) && ((Pmappingenabled == 0) || (Penabled == 0)))
+ note = (int) Pinvertupdowncenter * 2 - note;
+
+ //compute global fine detune
+ float globalfinedetunerap = powf(2.0f,
+ (Pglobalfinedetune - 64.0f) / 1200.0f); //-64.0f .. 63.0f cents
+
+ if(Penabled == 0)
+ return powf(2.0f,
+ (note - PAnote
+ + keyshift) / 12.0f) * PAfreq * globalfinedetunerap; //12tET
+
+ int scaleshift =
+ ((int)Pscaleshift - 64 + (int) octavesize * 100) % octavesize;
+
+ //compute the keyshift
+ float rap_keyshift = 1.0f;
+ if(keyshift != 0) {
+ int kskey = (keyshift + (int)octavesize * 100) % octavesize;
+ int ksoct = (keyshift + (int)octavesize * 100) / octavesize - 100;
+ rap_keyshift = (kskey == 0) ? (1.0f) : (octave[kskey - 1].tuning);
+ rap_keyshift *= powf(octave[octavesize - 1].tuning, ksoct);
+ }
+
+ //if the mapping is enabled
+ if(Pmappingenabled != 0) {
+ if((note < Pfirstkey) || (note > Plastkey))
+ return -1.0f;
+ //Compute how many mapped keys are from middle note to reference note
+ //and find out the proportion between the freq. of middle note and "A" note
+ int tmp = PAnote - Pmiddlenote, minus = 0;
+ if(tmp < 0) {
+ tmp = -tmp;
+ minus = 1;
+ }
+ int deltanote = 0;
+ for(int i = 0; i < tmp; ++i)
+ if(Pmapping[i % Pmapsize] >= 0)
+ deltanote++;
+ float rap_anote_middlenote =
+ (deltanote ==
+ 0) ? (1.0f) : (octave[(deltanote - 1) % octavesize].tuning);
+ if(deltanote != 0)
+ rap_anote_middlenote *=
+ powf(octave[octavesize - 1].tuning,
+ (deltanote - 1) / octavesize);
+ if(minus != 0)
+ rap_anote_middlenote = 1.0f / rap_anote_middlenote;
+
+ //Convert from note (midi) to degree (note from the tunning)
+ int degoct =
+ (note - (int)Pmiddlenote + (int) Pmapsize
+ * 200) / (int)Pmapsize - 200;
+ int degkey = (note - Pmiddlenote + (int)Pmapsize * 100) % Pmapsize;
+ degkey = Pmapping[degkey];
+ if(degkey < 0)
+ return -1.0f; //this key is not mapped
+
+ //invert the keyboard upside-down if it is asked for
+ //TODO: do the right way by using Pinvertupdowncenter
+ if(Pinvertupdown != 0) {
+ degkey = octavesize - degkey - 1;
+ degoct = -degoct;
+ }
+ //compute the frequency of the note
+ degkey = degkey + scaleshift;
+ degoct += degkey / octavesize;
+ degkey %= octavesize;
+
+ float freq = (degkey == 0) ? (1.0f) : octave[degkey - 1].tuning;
+ freq *= powf(octave[octavesize - 1].tuning, degoct);
+ freq *= PAfreq / rap_anote_middlenote;
+ freq *= globalfinedetunerap;
+ if(scaleshift != 0)
+ freq /= octave[scaleshift - 1].tuning;
+ return freq * rap_keyshift;
+ }
+ else { //if the mapping is disabled
+ int nt = note - PAnote + scaleshift;
+ int ntkey = (nt + (int)octavesize * 100) % octavesize;
+ int ntoct = (nt - ntkey) / octavesize;
+
+ float oct = octave[octavesize - 1].tuning;
+ float freq =
+ octave[(ntkey + octavesize - 1) % octavesize].tuning * powf(oct,
+ ntoct)
+ * PAfreq;
+ if(ntkey == 0)
+ freq /= oct;
+ if(scaleshift != 0)
+ freq /= octave[scaleshift - 1].tuning;
+// fprintf(stderr,"note=%d freq=%.3f cents=%d\n",note,freq,(int)floor(logf(freq/PAfreq)/logf(2.0f)*1200.0f+0.5f));
+ freq *= globalfinedetunerap;
+ return freq * rap_keyshift;
+ }
+}
+
+bool Microtonal::operator==(const Microtonal µ) const
+{
+ return !(*this != micro);
+}
+
+bool Microtonal::operator!=(const Microtonal µ) const
+{
+ //A simple macro to test equality MiCRotonal EQuals (not the perfect
+ //approach, but good enough)
+#define MCREQ(x) if(x != micro.x) \
+ return true
+
+ //for floats
+#define FMCREQ(x) if(!((x < micro.x + 0.0001f) && (x > micro.x - 0.0001f))) \
+ return true
+
+ MCREQ(Pinvertupdown);
+ MCREQ(Pinvertupdowncenter);
+ MCREQ(octavesize);
+ MCREQ(Penabled);
+ MCREQ(PAnote);
+ FMCREQ(PAfreq);
+ MCREQ(Pscaleshift);
+
+ MCREQ(Pfirstkey);
+ MCREQ(Plastkey);
+ MCREQ(Pmiddlenote);
+ MCREQ(Pmapsize);
+ MCREQ(Pmappingenabled);
+
+ for(int i = 0; i < 128; ++i)
+ MCREQ(Pmapping[i]);
+
+ for(int i = 0; i < octavesize; ++i) {
+ FMCREQ(octave[i].tuning);
+ MCREQ(octave[i].type);
+ MCREQ(octave[i].x1);
+ MCREQ(octave[i].x2);
+ }
+ if(strcmp((const char *)this->Pname, (const char *)micro.Pname))
+ return true;
+ if(strcmp((const char *)this->Pcomment, (const char *)micro.Pcomment))
+ return true;
+ MCREQ(Pglobalfinedetune);
+ return false;
+
+ //undefine macros, as they are no longer needed
+#undef MCREQ
+#undef FMCREQ
+}
+
+
+/*
+ * Convert a line to tunings; returns -1 if it ok
+ */
+int Microtonal::linetotunings(unsigned int nline, const char *line)
+{
+ int x1 = -1, x2 = -1, type = -1;
+ float x = -1.0f, tmp, tuning = 1.0f;
+ if(strstr(line, "/") == NULL) {
+ if(strstr(line, ".") == NULL) { // M case (M=M/1)
+ sscanf(line, "%d", &x1);
+ x2 = 1;
+ type = 2; //division
+ }
+ else { // float number case
+ sscanf(line, "%f", &x);
+ if(x < 0.000001f)
+ return 1;
+ type = 1; //float type(cents)
+ }
+ }
+ else { // M/N case
+ sscanf(line, "%d/%d", &x1, &x2);
+ if((x1 < 0) || (x2 < 0))
+ return 1;
+ if(x2 == 0)
+ x2 = 1;
+ type = 2; //division
+ }
+
+ if(x1 <= 0)
+ x1 = 1; //not allow zero frequency sounds (consider 0 as 1)
+
+ //convert to float if the number are too big
+ if((type == 2)
+ && ((x1 > (128 * 128 * 128 - 1)) || (x2 > (128 * 128 * 128 - 1)))) {
+ type = 1;
+ x = ((float) x1) / x2;
+ }
+ switch(type) {
+ case 1:
+ x1 = (int) floor(x);
+ tmp = fmod(x, 1.0f);
+ x2 = (int) (floor(tmp * 1e6));
+ tuning = powf(2.0f, x / 1200.0f);
+ break;
+ case 2:
+ x = ((float)x1) / x2;
+ tuning = x;
+ break;
+ }
+
+ tmpoctave[nline].tuning = tuning;
+ tmpoctave[nline].type = type;
+ tmpoctave[nline].x1 = x1;
+ tmpoctave[nline].x2 = x2;
+
+ return -1; //ok
+}
+
+/*
+ * Convert the text to tunnings
+ */
+int Microtonal::texttotunings(const char *text)
+{
+ unsigned int i, k = 0, nl = 0;
+ char *lin;
+ lin = new char[MAX_LINE_SIZE + 1];
+ while(k < strlen(text)) {
+ for(i = 0; i < MAX_LINE_SIZE; ++i) {
+ lin[i] = text[k++];
+ if(lin[i] < 0x20)
+ break;
+ }
+ lin[i] = '\0';
+ if(strlen(lin) == 0)
+ continue;
+ int err = linetotunings(nl, lin);
+ if(err != -1) {
+ delete [] lin;
+ return nl; //Parse error
+ }
+ nl++;
+ }
+ delete [] lin;
+ if(nl > MAX_OCTAVE_SIZE)
+ nl = MAX_OCTAVE_SIZE;
+ if(nl == 0)
+ return -2; //the input is empty
+ octavesize = nl;
+ for(i = 0; i < octavesize; ++i) {
+ octave[i].tuning = tmpoctave[i].tuning;
+ octave[i].type = tmpoctave[i].type;
+ octave[i].x1 = tmpoctave[i].x1;
+ octave[i].x2 = tmpoctave[i].x2;
+ }
+ return -1; //ok
+}
+
+/*
+ * Convert the text to mapping
+ */
+void Microtonal::texttomapping(const char *text)
+{
+ unsigned int i, k = 0;
+ char *lin;
+ lin = new char[MAX_LINE_SIZE + 1];
+ for(i = 0; i < 128; ++i)
+ Pmapping[i] = -1;
+ int tx = 0;
+ while(k < strlen(text)) {
+ for(i = 0; i < MAX_LINE_SIZE; ++i) {
+ lin[i] = text[k++];
+ if(lin[i] < 0x20)
+ break;
+ }
+ lin[i] = '\0';
+ if(strlen(lin) == 0)
+ continue;
+
+ int tmp = 0;
+ if(sscanf(lin, "%d", &tmp) == 0)
+ tmp = -1;
+ if(tmp < -1)
+ tmp = -1;
+ Pmapping[tx] = tmp;
+
+ if((tx++) > 127)
+ break;
+ }
+ delete [] lin;
+
+ if(tx == 0)
+ tx = 1;
+ Pmapsize = tx;
+}
+
+/*
+ * Convert tunning to text line
+ */
+void Microtonal::tuningtoline(int n, char *line, int maxn)
+{
+ if((n > octavesize) || (n > MAX_OCTAVE_SIZE)) {
+ line[0] = '\0';
+ return;
+ }
+ if(octave[n].type == 1)
+ snprintf(line, maxn, "%d.%06d", octave[n].x1, octave[n].x2);
+ if(octave[n].type == 2)
+ snprintf(line, maxn, "%d/%d", octave[n].x1, octave[n].x2);
+}
+
+
+int Microtonal::loadline(FILE *file, char *line)
+{
+ do {
+ if(fgets(line, 500, file) == 0)
+ return 1;
+ } while(line[0] == '!');
+ return 0;
+}
+/*
+ * Loads the tunnings from a scl file
+ */
+int Microtonal::loadscl(const char *filename)
+{
+ FILE *file = fopen(filename, "r");
+ char tmp[500];
+ fseek(file, 0, SEEK_SET);
+ //loads the short description
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ for(int i = 0; i < 500; ++i)
+ if(tmp[i] < 32)
+ tmp[i] = 0;
+ snprintf((char *) Pname, MICROTONAL_MAX_NAME_LEN, "%s", tmp);
+ snprintf((char *) Pcomment, MICROTONAL_MAX_NAME_LEN, "%s", tmp);
+ //loads the number of the notes
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ int nnotes = MAX_OCTAVE_SIZE;
+ sscanf(&tmp[0], "%d", &nnotes);
+ if(nnotes > MAX_OCTAVE_SIZE)
+ return 2;
+ //load the tunnings
+ for(int nline = 0; nline < nnotes; ++nline) {
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ linetotunings(nline, &tmp[0]);
+ }
+ fclose(file);
+
+ octavesize = nnotes;
+ for(int i = 0; i < octavesize; ++i) {
+ octave[i].tuning = tmpoctave[i].tuning;
+ octave[i].type = tmpoctave[i].type;
+ octave[i].x1 = tmpoctave[i].x1;
+ octave[i].x2 = tmpoctave[i].x2;
+ }
+
+ return 0;
+}
+
+/*
+ * Loads the mapping from a kbm file
+ */
+int Microtonal::loadkbm(const char *filename)
+{
+ FILE *file = fopen(filename, "r");
+ int x;
+ char tmp[500];
+
+ fseek(file, 0, SEEK_SET);
+ //loads the mapsize
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ if(sscanf(&tmp[0], "%d", &x) == 0)
+ return 2;
+ if(x < 1)
+ x = 0;
+ if(x > 127)
+ x = 127; //just in case...
+ Pmapsize = x;
+ //loads first MIDI note to retune
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ if(sscanf(&tmp[0], "%d", &x) == 0)
+ return 2;
+ if(x < 1)
+ x = 0;
+ if(x > 127)
+ x = 127; //just in case...
+ Pfirstkey = x;
+ //loads last MIDI note to retune
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ if(sscanf(&tmp[0], "%d", &x) == 0)
+ return 2;
+ if(x < 1)
+ x = 0;
+ if(x > 127)
+ x = 127; //just in case...
+ Plastkey = x;
+ //loads last the middle note where scale fro scale degree=0
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ if(sscanf(&tmp[0], "%d", &x) == 0)
+ return 2;
+ if(x < 1)
+ x = 0;
+ if(x > 127)
+ x = 127; //just in case...
+ Pmiddlenote = x;
+ //loads the reference note
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ if(sscanf(&tmp[0], "%d", &x) == 0)
+ return 2;
+ if(x < 1)
+ x = 0;
+ if(x > 127)
+ x = 127; //just in case...
+ PAnote = x;
+ //loads the reference freq.
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ float tmpPAfreq = 440.0f;
+ if(sscanf(&tmp[0], "%f", &tmpPAfreq) == 0)
+ return 2;
+ PAfreq = tmpPAfreq;
+
+ //the scale degree(which is the octave) is not loaded, it is obtained by the tunnings with getoctavesize() method
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+
+ //load the mappings
+ if(Pmapsize != 0) {
+ for(int nline = 0; nline < Pmapsize; ++nline) {
+ if(loadline(file, &tmp[0]) != 0)
+ return 2;
+ if(sscanf(&tmp[0], "%d", &x) == 0)
+ x = -1;
+ Pmapping[nline] = x;
+ }
+ Pmappingenabled = 1;
+ }
+ else {
+ Pmappingenabled = 0;
+ Pmapping[0] = 0;
+ Pmapsize = 1;
+ }
+ fclose(file);
+
+ return 0;
+}
+
+
+
+void Microtonal::add2XML(XMLwrapper *xml) const
+{
+ xml->addparstr("name", (char *) Pname);
+ xml->addparstr("comment", (char *) Pcomment);
+
+ xml->addparbool("invert_up_down", Pinvertupdown);
+ xml->addpar("invert_up_down_center", Pinvertupdowncenter);
+
+ xml->addparbool("enabled", Penabled);
+ xml->addpar("global_fine_detune", Pglobalfinedetune);
+
+ xml->addpar("a_note", PAnote);
+ xml->addparreal("a_freq", PAfreq);
+
+ if((Penabled == 0) && (xml->minimal))
+ return;
+
+ xml->beginbranch("SCALE");
+ xml->addpar("scale_shift", Pscaleshift);
+ xml->addpar("first_key", Pfirstkey);
+ xml->addpar("last_key", Plastkey);
+ xml->addpar("middle_note", Pmiddlenote);
+
+ xml->beginbranch("OCTAVE");
+ xml->addpar("octave_size", octavesize);
+ for(int i = 0; i < octavesize; ++i) {
+ xml->beginbranch("DEGREE", i);
+ if(octave[i].type == 1)
+ xml->addparreal("cents", octave[i].tuning);
+ ;
+ if(octave[i].type == 2) {
+ xml->addpar("numerator", octave[i].x1);
+ xml->addpar("denominator", octave[i].x2);
+ }
+ xml->endbranch();
+ }
+ xml->endbranch();
+
+ xml->beginbranch("KEYBOARD_MAPPING");
+ xml->addpar("map_size", Pmapsize);
+ xml->addpar("mapping_enabled", Pmappingenabled);
+ for(int i = 0; i < Pmapsize; ++i) {
+ xml->beginbranch("KEYMAP", i);
+ xml->addpar("degree", Pmapping[i]);
+ xml->endbranch();
+ }
+
+ xml->endbranch();
+ xml->endbranch();
+}
+
+void Microtonal::getfromXML(XMLwrapper *xml)
+{
+ xml->getparstr("name", (char *) Pname, MICROTONAL_MAX_NAME_LEN);
+ xml->getparstr("comment", (char *) Pcomment, MICROTONAL_MAX_NAME_LEN);
+
+ Pinvertupdown = xml->getparbool("invert_up_down", Pinvertupdown);
+ Pinvertupdowncenter = xml->getpar127("invert_up_down_center",
+ Pinvertupdowncenter);
+
+ Penabled = xml->getparbool("enabled", Penabled);
+ Pglobalfinedetune = xml->getpar127("global_fine_detune", Pglobalfinedetune);
+
+ PAnote = xml->getpar127("a_note", PAnote);
+ PAfreq = xml->getparreal("a_freq", PAfreq, 1.0f, 10000.0f);
+
+ if(xml->enterbranch("SCALE")) {
+ Pscaleshift = xml->getpar127("scale_shift", Pscaleshift);
+ Pfirstkey = xml->getpar127("first_key", Pfirstkey);
+ Plastkey = xml->getpar127("last_key", Plastkey);
+ Pmiddlenote = xml->getpar127("middle_note", Pmiddlenote);
+
+ if(xml->enterbranch("OCTAVE")) {
+ octavesize = xml->getpar127("octave_size", octavesize);
+ for(int i = 0; i < octavesize; ++i) {
+ if(xml->enterbranch("DEGREE", i) == 0)
+ continue;
+ octave[i].x2 = 0;
+ octave[i].tuning = xml->getparreal("cents", octave[i].tuning);
+ octave[i].x1 = xml->getpar127("numerator", octave[i].x1);
+ octave[i].x2 = xml->getpar127("denominator", octave[i].x2);
+
+ if(octave[i].x2 != 0)
+ octave[i].type = 2;
+ else {
+ octave[i].type = 1;
+ //populate fields for display
+ float x = logf(octave[i].tuning) / LOG_2 * 1200.0f;
+ octave[i].x1 = (int) floor(x);
+ octave[i].x2 = (int) (floor(fmodf(x, 1.0f) * 1e6));
+ }
+
+
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("KEYBOARD_MAPPING")) {
+ Pmapsize = xml->getpar127("map_size", Pmapsize);
+ Pmappingenabled = xml->getpar127("mapping_enabled", Pmappingenabled);
+ for(int i = 0; i < Pmapsize; ++i) {
+ if(xml->enterbranch("KEYMAP", i) == 0)
+ continue;
+ Pmapping[i] = xml->getpar127("degree", Pmapping[i]);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+}
+
+
+
+int Microtonal::saveXML(const char *filename) const
+{
+ XMLwrapper *xml = new XMLwrapper();
+
+ xml->beginbranch("MICROTONAL");
+ add2XML(xml);
+ xml->endbranch();
+
+ int result = xml->saveXMLfile(filename);
+ delete (xml);
+ return result;
+}
+
+int Microtonal::loadXML(const char *filename)
+{
+ XMLwrapper *xml = new XMLwrapper();
+ if(xml->loadXMLfile(filename) < 0) {
+ delete (xml);
+ return -1;
+ }
+
+ if(xml->enterbranch("MICROTONAL") == 0)
+ return -10;
+ getfromXML(xml);
+ xml->exitbranch();
+
+ delete (xml);
+ return 0;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h
new file mode 100644
index 0000000..638a159
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h
@@ -0,0 +1,134 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Microtonal.h - Tuning settings and microtonal capabilities
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef MICROTONAL_H
+#define MICROTONAL_H
+
+#include "../globals.h"
+#include "XMLwrapper.h"
+
+#define MAX_OCTAVE_SIZE 128
+#define MICROTONAL_MAX_NAME_LEN 120
+
+#include <stdio.h>
+
+
+/**Tuning settings and microtonal capabilities*/
+class Microtonal
+{
+ public:
+ /**Constructor*/
+ Microtonal();
+ /**Destructor*/
+ ~Microtonal();
+ void defaults();
+ /**Calculates the frequency for a given note
+ */
+ float getnotefreq(int note, int keyshift) const;
+
+
+ //Parameters
+ /**if the keys are inversed (the pitch is lower to keys from the right direction)*/
+ unsigned char Pinvertupdown;
+
+ /**the central key of the inversion*/
+ unsigned char Pinvertupdowncenter;
+
+ /**0 for 12 key temperate scale, 1 for microtonal*/
+ unsigned char Penabled;
+
+ /**the note of "A" key*/
+ unsigned char PAnote;
+
+ /**the frequency of the "A" note*/
+ float PAfreq;
+
+ /**if the scale is "tuned" to a note, you can tune to other note*/
+ unsigned char Pscaleshift;
+
+ //first and last key (to retune)
+ unsigned char Pfirstkey;
+ unsigned char Plastkey;
+
+ /**The middle note where scale degree 0 is mapped to*/
+ unsigned char Pmiddlenote;
+
+ /**Map size*/
+ unsigned char Pmapsize;
+
+ /**Mapping ON/OFF*/
+ unsigned char Pmappingenabled;
+ /**Mapping (keys)*/
+ short int Pmapping[128];
+
+ /**Fine detune to be applied to all notes*/
+ unsigned char Pglobalfinedetune;
+
+ // Functions
+ /** Return the current octave size*/
+ unsigned char getoctavesize() const;
+ /**Convert tunning to string*/
+ void tuningtoline(int n, char *line, int maxn);
+ /**load the tunnings from a .scl file*/
+ int loadscl(const char *filename);
+ /**load the mapping from .kbm file*/
+ int loadkbm(const char *filename);
+ /**Load text into the internal tunings
+ *
+ *\todo better description*/
+ int texttotunings(const char *text);
+ /**Load text into the internal mappings
+ *
+ *\todo better description*/
+ void texttomapping(const char *text);
+
+ /**Name of Microtonal tuning*/
+ unsigned char *Pname;
+ /**Comment about the tuning*/
+ unsigned char *Pcomment;
+
+ void add2XML(XMLwrapper *xml) const;
+ void getfromXML(XMLwrapper *xml);
+ int saveXML(const char *filename) const;
+ int loadXML(const char *filename);
+
+ //simple operators primarily for debug
+ bool operator==(const Microtonal µ) const;
+ bool operator!=(const Microtonal µ) const;
+
+ private:
+ int linetotunings(unsigned int nline, const char *line);
+ int loadline(FILE *file, char *line); //loads a line from the text file, while ignoring the lines beggining with "!"
+ unsigned char octavesize;
+ struct {
+ unsigned char type; //1 for cents or 2 for division
+
+ // the real tuning (eg. +1.05946f for one halftone)
+ // or 2.0f for one octave
+ float tuning;
+
+ //the real tunning is x1/x2
+ unsigned int x1, x2;
+ } octave[MAX_OCTAVE_SIZE], tmpoctave[MAX_OCTAVE_SIZE];
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp
new file mode 100644
index 0000000..184a0e2
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp
@@ -0,0 +1,1339 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Part.cpp - Part implementation
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Part.h"
+#include "Microtonal.h"
+#include "Util.h"
+#include "XMLwrapper.h"
+#include "../Effects/EffectMgr.h"
+#include "../Params/ADnoteParameters.h"
+#include "../Params/SUBnoteParameters.h"
+#include "../Params/PADnoteParameters.h"
+#include "../Synth/ADnote.h"
+#include "../Synth/SUBnote.h"
+#include "../Synth/PADnote.h"
+#include "../DSP/FFTwrapper.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+Part::Part(Microtonal *microtonal_, FFTwrapper *fft_, pthread_mutex_t *mutex_)
+{
+ microtonal = microtonal_;
+ fft = fft_;
+ mutex = mutex_;
+ pthread_mutex_init(&load_mutex, NULL);
+ partoutl = new float [synth->buffersize];
+ partoutr = new float [synth->buffersize];
+
+ for(int n = 0; n < NUM_KIT_ITEMS; ++n) {
+ kit[n].Pname = new unsigned char [PART_MAX_NAME_LEN];
+ kit[n].adpars = NULL;
+ kit[n].subpars = NULL;
+ kit[n].padpars = NULL;
+ }
+
+ kit[0].adpars = new ADnoteParameters(fft);
+ kit[0].subpars = new SUBnoteParameters();
+ kit[0].padpars = new PADnoteParameters(fft, mutex);
+
+ //Part's Insertion Effects init
+ for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) {
+ partefx[nefx] = new EffectMgr(1, mutex);
+ Pefxbypass[nefx] = false;
+ }
+
+ for(int n = 0; n < NUM_PART_EFX + 1; ++n) {
+ partfxinputl[n] = new float [synth->buffersize];
+ partfxinputr[n] = new float [synth->buffersize];
+ }
+
+ killallnotes = 0;
+ oldfreq = -1.0f;
+
+ for(int i = 0; i < POLIPHONY; ++i) {
+ partnote[i].status = KEY_OFF;
+ partnote[i].note = -1;
+ partnote[i].itemsplaying = 0;
+ for(int j = 0; j < NUM_KIT_ITEMS; ++j) {
+ partnote[i].kititem[j].adnote = NULL;
+ partnote[i].kititem[j].subnote = NULL;
+ partnote[i].kititem[j].padnote = NULL;
+ }
+ partnote[i].time = 0;
+ }
+ cleanup();
+
+ Pname = new unsigned char [PART_MAX_NAME_LEN];
+
+ oldvolumel = oldvolumer = 0.5f;
+ lastnote = -1;
+ lastpos = 0; // lastpos will store previously used NoteOn(...)'s pos.
+ lastlegatomodevalid = false; // To store previous legatomodevalid value.
+
+ defaults();
+}
+
+void Part::defaults()
+{
+ Penabled = 0;
+ Pminkey = 0;
+ Pmaxkey = 127;
+ Pnoteon = 1;
+ Ppolymode = 1;
+ Plegatomode = 0;
+ setPvolume(96);
+ Pkeyshift = 64;
+ Prcvchn = 0;
+ setPpanning(64);
+ Pvelsns = 64;
+ Pveloffs = 64;
+ Pkeylimit = 15;
+ defaultsinstrument();
+ ctl.defaults();
+}
+
+void Part::defaultsinstrument()
+{
+ ZERO(Pname, PART_MAX_NAME_LEN);
+
+ info.Ptype = 0;
+ ZERO(info.Pauthor, MAX_INFO_TEXT_SIZE + 1);
+ ZERO(info.Pcomments, MAX_INFO_TEXT_SIZE + 1);
+
+ Pkitmode = 0;
+ Pdrummode = 0;
+
+ for(int n = 0; n < NUM_KIT_ITEMS; ++n) {
+ kit[n].Penabled = 0;
+ kit[n].Pmuted = 0;
+ kit[n].Pminkey = 0;
+ kit[n].Pmaxkey = 127;
+ kit[n].Padenabled = 0;
+ kit[n].Psubenabled = 0;
+ kit[n].Ppadenabled = 0;
+ ZERO(kit[n].Pname, PART_MAX_NAME_LEN);
+ kit[n].Psendtoparteffect = 0;
+ if(n != 0)
+ setkititemstatus(n, 0);
+ }
+ kit[0].Penabled = 1;
+ kit[0].Padenabled = 1;
+ kit[0].adpars->defaults();
+ kit[0].subpars->defaults();
+ kit[0].padpars->defaults();
+
+ for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) {
+ partefx[nefx]->defaults();
+ Pefxroute[nefx] = 0; //route to next effect
+ }
+}
+
+
+
+/*
+ * Cleanup the part
+ */
+void Part::cleanup(bool final_)
+{
+ for(int k = 0; k < POLIPHONY; ++k)
+ KillNotePos(k);
+ for(int i = 0; i < synth->buffersize; ++i) {
+ partoutl[i] = final_ ? 0.0f : denormalkillbuf[i];
+ partoutr[i] = final_ ? 0.0f : denormalkillbuf[i];
+ }
+ ctl.resetall();
+ for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx)
+ partefx[nefx]->cleanup();
+ for(int n = 0; n < NUM_PART_EFX + 1; ++n)
+ for(int i = 0; i < synth->buffersize; ++i) {
+ partfxinputl[n][i] = final_ ? 0.0f : denormalkillbuf[i];
+ partfxinputr[n][i] = final_ ? 0.0f : denormalkillbuf[i];
+ }
+}
+
+Part::~Part()
+{
+ cleanup(true);
+ for(int n = 0; n < NUM_KIT_ITEMS; ++n) {
+ if(kit[n].adpars != NULL)
+ delete (kit[n].adpars);
+ if(kit[n].subpars != NULL)
+ delete (kit[n].subpars);
+ if(kit[n].padpars != NULL)
+ delete (kit[n].padpars);
+ kit[n].adpars = NULL;
+ kit[n].subpars = NULL;
+ kit[n].padpars = NULL;
+ delete [] kit[n].Pname;
+ }
+
+ delete [] Pname;
+ delete [] partoutl;
+ delete [] partoutr;
+ for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx)
+ delete (partefx[nefx]);
+ for(int n = 0; n < NUM_PART_EFX + 1; ++n) {
+ delete [] partfxinputl[n];
+ delete [] partfxinputr[n];
+ }
+}
+
+/*
+ * Note On Messages
+ */
+void Part::NoteOn(unsigned char note,
+ unsigned char velocity,
+ int masterkeyshift)
+{
+ int i, pos;
+
+ // Legato and MonoMem used vars:
+ int posb = POLIPHONY - 1; // Just a dummy initial value.
+ bool legatomodevalid = false; //true when legato mode is determined applicable.
+ bool doinglegato = false; // true when we determined we do a legato note.
+ bool ismonofirstnote = false; /*(In Mono/Legato) true when we determined
+ no other notes are held down or sustained.*/
+ int lastnotecopy = lastnote; //Useful after lastnote has been changed.
+
+ if(Pnoteon == 0)
+ return;
+ if((note < Pminkey) || (note > Pmaxkey))
+ return;
+
+ // MonoMem stuff:
+ if(Ppolymode == 0) { // If Poly is off
+ monomemnotes.push_back(note); // Add note to the list.
+ monomem[note].velocity = velocity; // Store this note's velocity.
+ monomem[note].mkeyshift = masterkeyshift; /* Store masterkeyshift too,
+ I'm not sure why though... */
+ if((partnote[lastpos].status != KEY_PLAYING)
+ && (partnote[lastpos].status != KEY_RELASED_AND_SUSTAINED))
+ ismonofirstnote = true; // No other keys are held or sustained.
+ }
+ else
+ // Poly mode is On so just make sure the list is empty.
+ if(not monomemnotes.empty())
+ monomemnotes.clear();
+
+ lastnote = note;
+
+ pos = -1;
+ for(i = 0; i < POLIPHONY; ++i)
+ if(partnote[i].status == KEY_OFF) {
+ pos = i;
+ break;
+ }
+
+ if((Plegatomode != 0) && (Pdrummode == 0)) {
+ if(Ppolymode != 0) {
+ fprintf(
+ stderr,
+ "ZynAddSubFX WARNING: Poly and Legato modes are both On, that should not happen ! ... Disabling Legato mode ! - (Part.cpp::NoteOn(..))\n");
+ Plegatomode = 0;
+ }
+ else {
+ // Legato mode is on and applicable.
+ legatomodevalid = true;
+ if((not ismonofirstnote) && (lastlegatomodevalid)) {
+ // At least one other key is held or sustained, and the
+ // previous note was played while in valid legato mode.
+ doinglegato = true; // So we'll do a legato note.
+ pos = lastpos; // A legato note uses same pos as previous..
+ posb = lastposb; // .. same goes for posb.
+ }
+ else {
+ // Legato mode is valid, but this is only a first note.
+ for(i = 0; i < POLIPHONY; ++i)
+ if((partnote[i].status == KEY_PLAYING)
+ || (partnote[i].status == KEY_RELASED_AND_SUSTAINED))
+ RelaseNotePos(i);
+
+ // Set posb
+ posb = (pos + 1) % POLIPHONY; //We really want it (if the following fails)
+ for(i = 0; i < POLIPHONY; ++i)
+ if((partnote[i].status == KEY_OFF) && (pos != i)) {
+ posb = i;
+ break;
+ }
+ }
+ lastposb = posb; // Keep a trace of used posb
+ }
+ }
+ else // Legato mode is either off or non-applicable.
+ if(Ppolymode == 0) { //if the mode is 'mono' turn off all other notes
+ for(i = 0; i < POLIPHONY; ++i)
+ if(partnote[i].status == KEY_PLAYING)
+ RelaseNotePos(i);
+ RelaseSustainedKeys();
+ }
+ lastlegatomodevalid = legatomodevalid;
+
+ if(pos == -1)
+ //test
+ fprintf(stderr,
+ "%s",
+ "NOTES TOO MANY (> POLIPHONY) - (Part.cpp::NoteOn(..))\n");
+ else {
+ //start the note
+ partnote[pos].status = KEY_PLAYING;
+ partnote[pos].note = note;
+ if(legatomodevalid) {
+ partnote[posb].status = KEY_PLAYING;
+ partnote[posb].note = note;
+ }
+
+ //this computes the velocity sensing of the part
+ float vel = VelF(velocity / 127.0f, Pvelsns);
+
+ //compute the velocity offset
+ vel += (Pveloffs - 64.0f) / 64.0f;
+ if(vel < 0.0f)
+ vel = 0.0f;
+ else
+ if(vel > 1.0f)
+ vel = 1.0f;
+
+ //compute the keyshift
+ int partkeyshift = (int)Pkeyshift - 64;
+ int keyshift = masterkeyshift + partkeyshift;
+
+ //initialise note frequency
+ float notebasefreq;
+ if(Pdrummode == 0) {
+ notebasefreq = microtonal->getnotefreq(note, keyshift);
+ if(notebasefreq < 0.0f)
+ return; //the key is no mapped
+ }
+ else
+ notebasefreq = 440.0f * powf(2.0f, (note - 69.0f) / 12.0f);
+ ;
+
+ //Portamento
+ if(oldfreq < 1.0f)
+ oldfreq = notebasefreq; //this is only the first note is played
+
+ // For Mono/Legato: Force Portamento Off on first
+ // notes. That means it is required that the previous note is
+ // still held down or sustained for the Portamento to activate
+ // (that's like Legato).
+ int portamento = 0;
+ if((Ppolymode != 0) || (not ismonofirstnote))
+ // I added a third argument to the
+ // ctl.initportamento(...) function to be able
+ // to tell it if we're doing a legato note.
+ portamento = ctl.initportamento(oldfreq, notebasefreq, doinglegato);
+
+ if(portamento != 0)
+ ctl.portamento.noteusing = pos;
+ oldfreq = notebasefreq;
+
+ lastpos = pos; // Keep a trace of used pos.
+
+ if(doinglegato) {
+ // Do Legato note
+ if(Pkitmode == 0) { // "normal mode" legato note
+ if((kit[0].Padenabled != 0)
+ && (partnote[pos].kititem[0].adnote != NULL)
+ && (partnote[posb].kititem[0].adnote != NULL)) {
+ partnote[pos].kititem[0].adnote->legatonote(notebasefreq,
+ vel,
+ portamento,
+ note,
+ true); //'true' is to tell it it's being called from here.
+ partnote[posb].kititem[0].adnote->legatonote(notebasefreq,
+ vel,
+ portamento,
+ note,
+ true);
+ }
+
+ if((kit[0].Psubenabled != 0)
+ && (partnote[pos].kititem[0].subnote != NULL)
+ && (partnote[posb].kititem[0].subnote != NULL)) {
+ partnote[pos].kititem[0].subnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ partnote[posb].kititem[0].subnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ }
+
+ if((kit[0].Ppadenabled != 0)
+ && (partnote[pos].kititem[0].padnote != NULL)
+ && (partnote[posb].kititem[0].padnote != NULL)) {
+ partnote[pos].kititem[0].padnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ partnote[posb].kititem[0].padnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ }
+ }
+ else { // "kit mode" legato note
+ int ci = 0;
+ for(int item = 0; item < NUM_KIT_ITEMS; ++item) {
+ if(kit[item].Pmuted != 0)
+ continue;
+ if((note < kit[item].Pminkey) || (note > kit[item].Pmaxkey))
+ continue;
+
+ if((lastnotecopy < kit[item].Pminkey)
+ || (lastnotecopy > kit[item].Pmaxkey))
+ continue; // We will not perform legato across 2 key regions.
+
+ partnote[pos].kititem[ci].sendtoparteffect =
+ (kit[item].Psendtoparteffect <
+ NUM_PART_EFX ? kit[item].Psendtoparteffect :
+ NUM_PART_EFX); //if this parameter is 127 for "unprocessed"
+ partnote[posb].kititem[ci].sendtoparteffect =
+ (kit[item].Psendtoparteffect <
+ NUM_PART_EFX ? kit[item].Psendtoparteffect :
+ NUM_PART_EFX);
+
+ if((kit[item].Padenabled != 0) && (kit[item].adpars != NULL)
+ && (partnote[pos].kititem[ci].adnote != NULL)
+ && (partnote[posb].kititem[ci].adnote != NULL)) {
+ partnote[pos].kititem[ci].adnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ partnote[posb].kititem[ci].adnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ }
+ if((kit[item].Psubenabled != 0)
+ && (kit[item].subpars != NULL)
+ && (partnote[pos].kititem[ci].subnote != NULL)
+ && (partnote[posb].kititem[ci].subnote != NULL)) {
+ partnote[pos].kititem[ci].subnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ partnote[posb].kititem[ci].subnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ }
+ if((kit[item].Ppadenabled != 0)
+ && (kit[item].padpars != NULL)
+ && (partnote[pos].kititem[ci].padnote != NULL)
+ && (partnote[posb].kititem[ci].padnote != NULL)) {
+ partnote[pos].kititem[ci].padnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ partnote[posb].kititem[ci].padnote->legatonote(
+ notebasefreq, vel, portamento, note, true);
+ }
+
+ if((kit[item].adpars != NULL)
+ || (kit[item].subpars != NULL)
+ || (kit[item].padpars != NULL)) {
+ ci++;
+ if(((kit[item].Padenabled != 0)
+ || (kit[item].Psubenabled != 0)
+ || (kit[item].Ppadenabled != 0)) && (Pkitmode == 2))
+ break;
+ }
+ }
+ if(ci == 0) {
+ // No legato were performed at all, so pretend nothing happened:
+ monomemnotes.pop_back(); // Remove last note from the list.
+ lastnote = lastnotecopy; // Set lastnote back to previous value.
+ }
+ }
+ return; // Ok, Legato note done, return.
+ }
+
+ partnote[pos].itemsplaying = 0;
+ if(legatomodevalid)
+ partnote[posb].itemsplaying = 0;
+
+ if(Pkitmode == 0) { //init the notes for the "normal mode"
+ partnote[pos].kititem[0].sendtoparteffect = 0;
+ if(kit[0].Padenabled != 0)
+ partnote[pos].kititem[0].adnote = new ADnote(kit[0].adpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ false);
+ if(kit[0].Psubenabled != 0)
+ partnote[pos].kititem[0].subnote = new SUBnote(kit[0].subpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ false);
+ if(kit[0].Ppadenabled != 0)
+ partnote[pos].kititem[0].padnote = new PADnote(kit[0].padpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ false);
+ if((kit[0].Padenabled != 0) || (kit[0].Psubenabled != 0)
+ || (kit[0].Ppadenabled != 0))
+ partnote[pos].itemsplaying++;
+
+ // Spawn another note (but silent) if legatomodevalid==true
+ if(legatomodevalid) {
+ partnote[posb].kititem[0].sendtoparteffect = 0;
+ if(kit[0].Padenabled != 0)
+ partnote[posb].kititem[0].adnote = new ADnote(kit[0].adpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ true); //true for silent.
+ if(kit[0].Psubenabled != 0)
+ partnote[posb].kititem[0].subnote = new SUBnote(
+ kit[0].subpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ true);
+ if(kit[0].Ppadenabled != 0)
+ partnote[posb].kititem[0].padnote = new PADnote(
+ kit[0].padpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ true);
+ if((kit[0].Padenabled != 0) || (kit[0].Psubenabled != 0)
+ || (kit[0].Ppadenabled != 0))
+ partnote[posb].itemsplaying++;
+ }
+ }
+ else //init the notes for the "kit mode"
+ for(int item = 0; item < NUM_KIT_ITEMS; ++item) {
+ if(kit[item].Pmuted != 0)
+ continue;
+ if((note < kit[item].Pminkey) || (note > kit[item].Pmaxkey))
+ continue;
+
+ int ci = partnote[pos].itemsplaying; //ci=current item
+
+ //if this parameter is 127 for "unprocessed"
+ partnote[pos].kititem[ci].sendtoparteffect =
+ (kit[item].Psendtoparteffect < NUM_PART_EFX ?
+ kit[item].Psendtoparteffect : NUM_PART_EFX);
+
+ if((kit[item].adpars != NULL) && ((kit[item].Padenabled) != 0))
+ partnote[pos].kititem[ci].adnote = new ADnote(
+ kit[item].adpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ false);
+
+ if((kit[item].subpars != NULL) && ((kit[item].Psubenabled) != 0))
+ partnote[pos].kititem[ci].subnote = new SUBnote(
+ kit[item].subpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ false);
+
+ if((kit[item].padpars != NULL) && ((kit[item].Ppadenabled) != 0))
+ partnote[pos].kititem[ci].padnote = new PADnote(
+ kit[item].padpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ false);
+
+ // Spawn another note (but silent) if legatomodevalid==true
+ if(legatomodevalid) {
+ partnote[posb].kititem[ci].sendtoparteffect =
+ (kit[item].Psendtoparteffect <
+ NUM_PART_EFX ? kit[item].Psendtoparteffect :
+ NUM_PART_EFX); //if this parameter is 127 for "unprocessed"
+
+ if((kit[item].adpars != NULL)
+ && ((kit[item].Padenabled) != 0))
+ partnote[posb].kititem[ci].adnote = new ADnote(
+ kit[item].adpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ true); //true for silent.
+ if((kit[item].subpars != NULL)
+ && ((kit[item].Psubenabled) != 0))
+ partnote[posb].kititem[ci].subnote =
+ new SUBnote(kit[item].subpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ true);
+ if((kit[item].padpars != NULL)
+ && ((kit[item].Ppadenabled) != 0))
+ partnote[posb].kititem[ci].padnote =
+ new PADnote(kit[item].padpars,
+ &ctl,
+ notebasefreq,
+ vel,
+ portamento,
+ note,
+ true);
+
+ if((kit[item].adpars != NULL) || (kit[item].subpars != NULL))
+ partnote[posb].itemsplaying++;
+ }
+
+ if((kit[item].adpars != NULL) || (kit[item].subpars != NULL)) {
+ partnote[pos].itemsplaying++;
+ if(((kit[item].Padenabled != 0)
+ || (kit[item].Psubenabled != 0)
+ || (kit[item].Ppadenabled != 0))
+ && (Pkitmode == 2))
+ break;
+ }
+ }
+ }
+
+ //this only relase the keys if there is maximum number of keys allowed
+ setkeylimit(Pkeylimit);
+}
+
+/*
+ * Note Off Messages
+ */
+void Part::NoteOff(unsigned char note) //relase the key
+{
+ int i;
+
+ // This note is released, so we remove it from the list.
+ if(not monomemnotes.empty())
+ monomemnotes.remove(note);
+
+ for(i = POLIPHONY - 1; i >= 0; i--) //first note in, is first out if there are same note multiple times
+ if((partnote[i].status == KEY_PLAYING) && (partnote[i].note == note)) {
+ if(ctl.sustain.sustain == 0) { //the sustain pedal is not pushed
+ if((Ppolymode == 0) && (not monomemnotes.empty()))
+ MonoMemRenote(); // To play most recent still held note.
+ else
+ RelaseNotePos(i);
+ /// break;
+ }
+ else //the sustain pedal is pushed
+ partnote[i].status = KEY_RELASED_AND_SUSTAINED;
+ }
+}
+
+void Part::PolyphonicAftertouch(unsigned char note,
+ unsigned char velocity,
+ int masterkeyshift)
+{
+ (void) masterkeyshift;
+ if(!Pnoteon || (note < Pminkey) || (note > Pmaxkey))
+ return;
+ if(Pdrummode)
+ return;
+
+ // MonoMem stuff:
+ if(!Ppolymode) // if Poly is off
+
+ monomem[note].velocity = velocity; // Store this note's velocity.
+
+
+ for(int i = 0; i < POLIPHONY; ++i)
+ if((partnote[i].note == note) && (partnote[i].status == KEY_PLAYING)) {
+ /* update velocity */
+ // compute the velocity offset
+ float vel =
+ VelF(velocity / 127.0f, Pvelsns) + (Pveloffs - 64.0f) / 64.0f;
+ vel = (vel < 0.0f) ? 0.0f : vel;
+ vel = (vel > 1.0f) ? 1.0f : vel;
+
+ if(!Pkitmode) { // "normal mode"
+ if(kit[0].Padenabled && partnote[i].kititem[0].adnote)
+ partnote[i].kititem[0].adnote->setVelocity(vel);
+ if(kit[0].Psubenabled && partnote[i].kititem[0].subnote)
+ partnote[i].kititem[0].subnote->setVelocity(vel);
+ if(kit[0].Ppadenabled && partnote[i].kititem[0].padnote)
+ partnote[i].kititem[0].padnote->setVelocity(vel);
+ }
+ else // "kit mode"
+ for(int item = 0; item < NUM_KIT_ITEMS; ++item) {
+ if(kit[item].Pmuted)
+ continue;
+ if((note < kit[item].Pminkey)
+ || (note > kit[item].Pmaxkey))
+ continue;
+
+ if(kit[item].Padenabled && partnote[i].kititem[item].adnote)
+ partnote[i].kititem[item].adnote->setVelocity(vel);
+ if(kit[item].Psubenabled && partnote[i].kititem[item].subnote)
+ partnote[i].kititem[item].subnote->setVelocity(vel);
+ if(kit[item].Ppadenabled && partnote[i].kititem[item].padnote)
+ partnote[i].kititem[item].padnote->setVelocity(vel);
+ }
+ }
+
+}
+
+/*
+ * Controllers
+ */
+void Part::SetController(unsigned int type, int par)
+{
+ switch(type) {
+ case C_pitchwheel:
+ ctl.setpitchwheel(par);
+ break;
+ case C_expression:
+ ctl.setexpression(par);
+ setPvolume(Pvolume); //update the volume
+ break;
+ case C_portamento:
+ ctl.setportamento(par);
+ break;
+ case C_panning:
+ ctl.setpanning(par);
+ setPpanning(Ppanning); //update the panning
+ break;
+ case C_filtercutoff:
+ ctl.setfiltercutoff(par);
+ break;
+ case C_filterq:
+ ctl.setfilterq(par);
+ break;
+ case C_bandwidth:
+ ctl.setbandwidth(par);
+ break;
+ case C_modwheel:
+ ctl.setmodwheel(par);
+ break;
+ case C_fmamp:
+ ctl.setfmamp(par);
+ break;
+ case C_volume:
+ ctl.setvolume(par);
+ if(ctl.volume.receive != 0)
+ volume = ctl.volume.volume;
+ else
+ setPvolume(Pvolume);
+ break;
+ case C_sustain:
+ ctl.setsustain(par);
+ if(ctl.sustain.sustain == 0)
+ RelaseSustainedKeys();
+ break;
+ case C_allsoundsoff:
+ AllNotesOff(); //Panic
+ break;
+ case C_resetallcontrollers:
+ ctl.resetall();
+ RelaseSustainedKeys();
+ if(ctl.volume.receive != 0)
+ volume = ctl.volume.volume;
+ else
+ setPvolume(Pvolume);
+ setPvolume(Pvolume); //update the volume
+ setPpanning(Ppanning); //update the panning
+
+ for(int item = 0; item < NUM_KIT_ITEMS; ++item) {
+ if(kit[item].adpars == NULL)
+ continue;
+ kit[item].adpars->GlobalPar.Reson->
+ sendcontroller(C_resonance_center, 1.0f);
+
+ kit[item].adpars->GlobalPar.Reson->
+ sendcontroller(C_resonance_bandwidth, 1.0f);
+ }
+ //more update to add here if I add controllers
+ break;
+ case C_allnotesoff:
+ RelaseAllKeys();
+ break;
+ case C_resonance_center:
+ ctl.setresonancecenter(par);
+ for(int item = 0; item < NUM_KIT_ITEMS; ++item) {
+ if(kit[item].adpars == NULL)
+ continue;
+ kit[item].adpars->GlobalPar.Reson->
+ sendcontroller(C_resonance_center,
+ ctl.resonancecenter.relcenter);
+ }
+ break;
+ case C_resonance_bandwidth:
+ ctl.setresonancebw(par);
+ kit[0].adpars->GlobalPar.Reson->
+ sendcontroller(C_resonance_bandwidth, ctl.resonancebandwidth.relbw);
+ break;
+ }
+}
+/*
+ * Relase the sustained keys
+ */
+
+void Part::RelaseSustainedKeys()
+{
+ // Let's call MonoMemRenote() on some conditions:
+ if((Ppolymode == 0) && (not monomemnotes.empty()))
+ if(monomemnotes.back() != lastnote) // Sustain controller manipulation would cause repeated same note respawn without this check.
+ MonoMemRenote(); // To play most recent still held note.
+
+ for(int i = 0; i < POLIPHONY; ++i)
+ if(partnote[i].status == KEY_RELASED_AND_SUSTAINED)
+ RelaseNotePos(i);
+}
+
+/*
+ * Relase all keys
+ */
+
+void Part::RelaseAllKeys()
+{
+ for(int i = 0; i < POLIPHONY; ++i)
+ if((partnote[i].status != KEY_RELASED)
+ && (partnote[i].status != KEY_OFF)) //thanks to Frank Neumann
+ RelaseNotePos(i);
+}
+
+// Call NoteOn(...) with the most recent still held key as new note
+// (Made for Mono/Legato).
+void Part::MonoMemRenote()
+{
+ unsigned char mmrtempnote = monomemnotes.back(); // Last list element.
+ monomemnotes.pop_back(); // We remove it, will be added again in NoteOn(...).
+ if(Pnoteon == 0)
+ RelaseNotePos(lastpos);
+ else
+ NoteOn(mmrtempnote, monomem[mmrtempnote].velocity,
+ monomem[mmrtempnote].mkeyshift);
+}
+
+/*
+ * Release note at position
+ */
+void Part::RelaseNotePos(int pos)
+{
+ for(int j = 0; j < NUM_KIT_ITEMS; ++j) {
+ if(partnote[pos].kititem[j].adnote != NULL)
+ if(partnote[pos].kititem[j].adnote)
+ partnote[pos].kititem[j].adnote->relasekey();
+
+ if(partnote[pos].kititem[j].subnote != NULL)
+ if(partnote[pos].kititem[j].subnote != NULL)
+ partnote[pos].kititem[j].subnote->relasekey();
+
+ if(partnote[pos].kititem[j].padnote != NULL)
+ if(partnote[pos].kititem[j].padnote)
+ partnote[pos].kititem[j].padnote->relasekey();
+ }
+ partnote[pos].status = KEY_RELASED;
+}
+
+
+/*
+ * Kill note at position
+ */
+void Part::KillNotePos(int pos)
+{
+ partnote[pos].status = KEY_OFF;
+ partnote[pos].note = -1;
+ partnote[pos].time = 0;
+ partnote[pos].itemsplaying = 0;
+
+ for(int j = 0; j < NUM_KIT_ITEMS; ++j) {
+ if(partnote[pos].kititem[j].adnote != NULL) {
+ delete (partnote[pos].kititem[j].adnote);
+ partnote[pos].kititem[j].adnote = NULL;
+ }
+ if(partnote[pos].kititem[j].subnote != NULL) {
+ delete (partnote[pos].kititem[j].subnote);
+ partnote[pos].kititem[j].subnote = NULL;
+ }
+ if(partnote[pos].kititem[j].padnote != NULL) {
+ delete (partnote[pos].kititem[j].padnote);
+ partnote[pos].kititem[j].padnote = NULL;
+ }
+ }
+ if(pos == ctl.portamento.noteusing) {
+ ctl.portamento.noteusing = -1;
+ ctl.portamento.used = 0;
+ }
+}
+
+
+/*
+ * Set Part's key limit
+ */
+void Part::setkeylimit(unsigned char Pkeylimit)
+{
+ this->Pkeylimit = Pkeylimit;
+ int keylimit = Pkeylimit;
+ if(keylimit == 0)
+ keylimit = POLIPHONY - 5;
+
+ //release old keys if the number of notes>keylimit
+ if(Ppolymode != 0) {
+ int notecount = 0;
+ for(int i = 0; i < POLIPHONY; ++i)
+ if((partnote[i].status == KEY_PLAYING)
+ || (partnote[i].status == KEY_RELASED_AND_SUSTAINED))
+ notecount++;
+
+ int oldestnotepos = -1;
+ if(notecount > keylimit) //find out the oldest note
+ for(int i = 0; i < POLIPHONY; ++i) {
+ int maxtime = 0;
+ if(((partnote[i].status == KEY_PLAYING)
+ || (partnote[i].status == KEY_RELASED_AND_SUSTAINED))
+ && (partnote[i].time > maxtime)) {
+ maxtime = partnote[i].time;
+ oldestnotepos = i;
+ }
+ }
+ if(oldestnotepos != -1)
+ RelaseNotePos(oldestnotepos);
+ }
+}
+
+
+/*
+ * Prepare all notes to be turned off
+ */
+void Part::AllNotesOff()
+{
+ killallnotes = 1;
+}
+
+void Part::RunNote(unsigned int k)
+{
+ unsigned noteplay = 0;
+ for(int item = 0; item < partnote[k].itemsplaying; ++item) {
+ int sendcurrenttofx = partnote[k].kititem[item].sendtoparteffect;
+
+ for(unsigned type = 0; type < 3; ++type) {
+ //Select a note
+ SynthNote **note = NULL;
+ if(type == 0)
+ note = &partnote[k].kititem[item].adnote;
+ else if(type == 1)
+ note = &partnote[k].kititem[item].subnote;
+ else if(type == 2)
+ note = &partnote[k].kititem[item].padnote;
+
+ //Process if it exists
+ if(!(*note))
+ continue;
+ noteplay++;
+
+ float tmpoutr[synth->buffersize];
+ float tmpoutl[synth->buffersize];
+ (*note)->noteout(&tmpoutl[0], &tmpoutr[0]);
+
+ if((*note)->finished()) {
+ delete (*note);
+ (*note) = NULL;
+ }
+ for(int i = 0; i < synth->buffersize; ++i) { //add the note to part(mix)
+ partfxinputl[sendcurrenttofx][i] += tmpoutl[i];
+ partfxinputr[sendcurrenttofx][i] += tmpoutr[i];
+ }
+ }
+ }
+
+ //Kill note if there is no synth on that note
+ if(noteplay == 0)
+ KillNotePos(k);
+}
+
+/*
+ * Compute Part samples and store them in the partoutl[] and partoutr[]
+ */
+void Part::ComputePartSmps()
+{
+ for(unsigned nefx = 0; nefx < NUM_PART_EFX + 1; ++nefx)
+ for(int i = 0; i < synth->buffersize; ++i) {
+ partfxinputl[nefx][i] = 0.0f;
+ partfxinputr[nefx][i] = 0.0f;
+ }
+
+ for(unsigned k = 0; k < POLIPHONY; ++k) {
+ if(partnote[k].status == KEY_OFF)
+ continue;
+ partnote[k].time++;
+ //get the sampledata of the note and kill it if it's finished
+ RunNote(k);
+ }
+
+
+ //Apply part's effects and mix them
+ for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) {
+ if(!Pefxbypass[nefx]) {
+ partefx[nefx]->out(partfxinputl[nefx], partfxinputr[nefx]);
+ if(Pefxroute[nefx] == 2)
+ for(int i = 0; i < synth->buffersize; ++i) {
+ partfxinputl[nefx + 1][i] += partefx[nefx]->efxoutl[i];
+ partfxinputr[nefx + 1][i] += partefx[nefx]->efxoutr[i];
+ }
+ }
+ int routeto = ((Pefxroute[nefx] == 0) ? nefx + 1 : NUM_PART_EFX);
+ for(int i = 0; i < synth->buffersize; ++i) {
+ partfxinputl[routeto][i] += partfxinputl[nefx][i];
+ partfxinputr[routeto][i] += partfxinputr[nefx][i];
+ }
+ }
+ for(int i = 0; i < synth->buffersize; ++i) {
+ partoutl[i] = partfxinputl[NUM_PART_EFX][i];
+ partoutr[i] = partfxinputr[NUM_PART_EFX][i];
+ }
+
+ //Kill All Notes if killallnotes!=0
+ if(killallnotes != 0) {
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float tmp = (synth->buffersize_f - i) / synth->buffersize_f;
+ partoutl[i] *= tmp;
+ partoutr[i] *= tmp;
+ }
+ for(int k = 0; k < POLIPHONY; ++k)
+ KillNotePos(k);
+ killallnotes = 0;
+ for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx)
+ partefx[nefx]->cleanup();
+ monomemnotes.clear();
+ }
+ ctl.updateportamento();
+}
+
+/*
+ * Parameter control
+ */
+void Part::setPvolume(char Pvolume_)
+{
+ Pvolume = Pvolume_;
+ volume =
+ dB2rap((Pvolume - 96.0f) / 96.0f * 40.0f) * ctl.expression.relvolume;
+}
+
+void Part::setPpanning(char Ppanning_)
+{
+ Ppanning = Ppanning_;
+ panning = Ppanning / 127.0f + ctl.panning.pan;
+ if(panning < 0.0f)
+ panning = 0.0f;
+ else
+ if(panning > 1.0f)
+ panning = 1.0f;
+}
+
+/*
+ * Enable or disable a kit item
+ */
+void Part::setkititemstatus(int kititem, int Penabled_)
+{
+ if((kititem == 0) || (kititem >= NUM_KIT_ITEMS))
+ return; //nonexistent kit item and the first kit item is always enabled
+ kit[kititem].Penabled = Penabled_;
+
+ bool resetallnotes = false;
+ if(Penabled_ == 0) {
+ if(kit[kititem].adpars != NULL)
+ delete (kit[kititem].adpars);
+ if(kit[kititem].subpars != NULL)
+ delete (kit[kititem].subpars);
+ if(kit[kititem].padpars != NULL) {
+ delete (kit[kititem].padpars);
+ resetallnotes = true;
+ }
+ kit[kititem].adpars = NULL;
+ kit[kititem].subpars = NULL;
+ kit[kititem].padpars = NULL;
+ kit[kititem].Pname[0] = '\0';
+ }
+ else {
+ if(kit[kititem].adpars == NULL)
+ kit[kititem].adpars = new ADnoteParameters(fft);
+ if(kit[kititem].subpars == NULL)
+ kit[kititem].subpars = new SUBnoteParameters();
+ if(kit[kititem].padpars == NULL)
+ kit[kititem].padpars = new PADnoteParameters(fft, mutex);
+ }
+
+ if(resetallnotes)
+ for(int k = 0; k < POLIPHONY; ++k)
+ KillNotePos(k);
+}
+
+void Part::add2XMLinstrument(XMLwrapper *xml)
+{
+ xml->beginbranch("INFO");
+ xml->addparstr("name", (char *)Pname);
+ xml->addparstr("author", (char *)info.Pauthor);
+ xml->addparstr("comments", (char *)info.Pcomments);
+ xml->addpar("type", info.Ptype);
+ xml->endbranch();
+
+
+ xml->beginbranch("INSTRUMENT_KIT");
+ xml->addpar("kit_mode", Pkitmode);
+ xml->addparbool("drum_mode", Pdrummode);
+
+ for(int i = 0; i < NUM_KIT_ITEMS; ++i) {
+ xml->beginbranch("INSTRUMENT_KIT_ITEM", i);
+ xml->addparbool("enabled", kit[i].Penabled);
+ if(kit[i].Penabled != 0) {
+ xml->addparstr("name", (char *)kit[i].Pname);
+
+ xml->addparbool("muted", kit[i].Pmuted);
+ xml->addpar("min_key", kit[i].Pminkey);
+ xml->addpar("max_key", kit[i].Pmaxkey);
+
+ xml->addpar("send_to_instrument_effect", kit[i].Psendtoparteffect);
+
+ xml->addparbool("add_enabled", kit[i].Padenabled);
+ if((kit[i].Padenabled != 0) && (kit[i].adpars != NULL)) {
+ xml->beginbranch("ADD_SYNTH_PARAMETERS");
+ kit[i].adpars->add2XML(xml);
+ xml->endbranch();
+ }
+
+ xml->addparbool("sub_enabled", kit[i].Psubenabled);
+ if((kit[i].Psubenabled != 0) && (kit[i].subpars != NULL)) {
+ xml->beginbranch("SUB_SYNTH_PARAMETERS");
+ kit[i].subpars->add2XML(xml);
+ xml->endbranch();
+ }
+
+ xml->addparbool("pad_enabled", kit[i].Ppadenabled);
+ if((kit[i].Ppadenabled != 0) && (kit[i].padpars != NULL)) {
+ xml->beginbranch("PAD_SYNTH_PARAMETERS");
+ kit[i].padpars->add2XML(xml);
+ xml->endbranch();
+ }
+ }
+ xml->endbranch();
+ }
+ xml->endbranch();
+
+ xml->beginbranch("INSTRUMENT_EFFECTS");
+ for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) {
+ xml->beginbranch("INSTRUMENT_EFFECT", nefx);
+ xml->beginbranch("EFFECT");
+ partefx[nefx]->add2XML(xml);
+ xml->endbranch();
+
+ xml->addpar("route", Pefxroute[nefx]);
+ partefx[nefx]->setdryonly(Pefxroute[nefx] == 2);
+ xml->addparbool("bypass", Pefxbypass[nefx]);
+ xml->endbranch();
+ }
+ xml->endbranch();
+}
+
+void Part::add2XML(XMLwrapper *xml)
+{
+ //parameters
+ xml->addparbool("enabled", Penabled);
+ if((Penabled == 0) && (xml->minimal))
+ return;
+
+ xml->addpar("volume", Pvolume);
+ xml->addpar("panning", Ppanning);
+
+ xml->addpar("min_key", Pminkey);
+ xml->addpar("max_key", Pmaxkey);
+ xml->addpar("key_shift", Pkeyshift);
+ xml->addpar("rcv_chn", Prcvchn);
+
+ xml->addpar("velocity_sensing", Pvelsns);
+ xml->addpar("velocity_offset", Pveloffs);
+
+ xml->addparbool("note_on", Pnoteon);
+ xml->addparbool("poly_mode", Ppolymode);
+ xml->addpar("legato_mode", Plegatomode);
+ xml->addpar("key_limit", Pkeylimit);
+
+ xml->beginbranch("INSTRUMENT");
+ add2XMLinstrument(xml);
+ xml->endbranch();
+
+ xml->beginbranch("CONTROLLER");
+ ctl.add2XML(xml);
+ xml->endbranch();
+}
+
+int Part::saveXML(const char *filename)
+{
+ XMLwrapper *xml;
+ xml = new XMLwrapper();
+
+ xml->beginbranch("INSTRUMENT");
+ add2XMLinstrument(xml);
+ xml->endbranch();
+
+ int result = xml->saveXMLfile(filename);
+ delete (xml);
+ return result;
+}
+
+int Part::loadXMLinstrument(const char *filename) /*{*/
+{
+ XMLwrapper *xml = new XMLwrapper();
+ if(xml->loadXMLfile(filename) < 0) {
+ delete (xml);
+ return -1;
+ }
+
+ if(xml->enterbranch("INSTRUMENT") == 0)
+ return -10;
+ getfromXMLinstrument(xml);
+ xml->exitbranch();
+
+ delete (xml);
+ return 0;
+} /*}*/
+
+void Part::applyparameters(bool lockmutex) /*{*/
+{
+ for(int n = 0; n < NUM_KIT_ITEMS; ++n)
+ if((kit[n].padpars != NULL) && (kit[n].Ppadenabled != 0))
+ kit[n].padpars->applyparameters(lockmutex);
+} /*}*/
+
+void Part::getfromXMLinstrument(XMLwrapper *xml)
+{
+ if(xml->enterbranch("INFO")) {
+ xml->getparstr("name", (char *)Pname, PART_MAX_NAME_LEN);
+ xml->getparstr("author", (char *)info.Pauthor, MAX_INFO_TEXT_SIZE);
+ xml->getparstr("comments", (char *)info.Pcomments, MAX_INFO_TEXT_SIZE);
+ info.Ptype = xml->getpar("type", info.Ptype, 0, 16);
+
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("INSTRUMENT_KIT")) {
+ Pkitmode = xml->getpar127("kit_mode", Pkitmode);
+ Pdrummode = xml->getparbool("drum_mode", Pdrummode);
+
+ setkititemstatus(0, 0);
+ for(int i = 0; i < NUM_KIT_ITEMS; ++i) {
+ if(xml->enterbranch("INSTRUMENT_KIT_ITEM", i) == 0)
+ continue;
+ setkititemstatus(i, xml->getparbool("enabled", kit[i].Penabled));
+ if(kit[i].Penabled == 0) {
+ xml->exitbranch();
+ continue;
+ }
+
+ xml->getparstr("name", (char *)kit[i].Pname, PART_MAX_NAME_LEN);
+
+ kit[i].Pmuted = xml->getparbool("muted", kit[i].Pmuted);
+ kit[i].Pminkey = xml->getpar127("min_key", kit[i].Pminkey);
+ kit[i].Pmaxkey = xml->getpar127("max_key", kit[i].Pmaxkey);
+
+ kit[i].Psendtoparteffect = xml->getpar127(
+ "send_to_instrument_effect",
+ kit[i].Psendtoparteffect);
+
+ kit[i].Padenabled = xml->getparbool("add_enabled",
+ kit[i].Padenabled);
+ if(xml->enterbranch("ADD_SYNTH_PARAMETERS")) {
+ kit[i].adpars->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ kit[i].Psubenabled = xml->getparbool("sub_enabled",
+ kit[i].Psubenabled);
+ if(xml->enterbranch("SUB_SYNTH_PARAMETERS")) {
+ kit[i].subpars->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ kit[i].Ppadenabled = xml->getparbool("pad_enabled",
+ kit[i].Ppadenabled);
+ if(xml->enterbranch("PAD_SYNTH_PARAMETERS")) {
+ kit[i].padpars->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ xml->exitbranch();
+ }
+
+ xml->exitbranch();
+ }
+
+
+ if(xml->enterbranch("INSTRUMENT_EFFECTS")) {
+ for(int nefx = 0; nefx < NUM_PART_EFX; ++nefx) {
+ if(xml->enterbranch("INSTRUMENT_EFFECT", nefx) == 0)
+ continue;
+ if(xml->enterbranch("EFFECT")) {
+ partefx[nefx]->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ Pefxroute[nefx] = xml->getpar("route",
+ Pefxroute[nefx],
+ 0,
+ NUM_PART_EFX);
+ partefx[nefx]->setdryonly(Pefxroute[nefx] == 2);
+ Pefxbypass[nefx] = xml->getparbool("bypass", Pefxbypass[nefx]);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+}
+
+void Part::getfromXML(XMLwrapper *xml)
+{
+ Penabled = xml->getparbool("enabled", Penabled);
+
+ setPvolume(xml->getpar127("volume", Pvolume));
+ setPpanning(xml->getpar127("panning", Ppanning));
+
+ Pminkey = xml->getpar127("min_key", Pminkey);
+ Pmaxkey = xml->getpar127("max_key", Pmaxkey);
+ Pkeyshift = xml->getpar127("key_shift", Pkeyshift);
+ Prcvchn = xml->getpar127("rcv_chn", Prcvchn);
+
+ Pvelsns = xml->getpar127("velocity_sensing", Pvelsns);
+ Pveloffs = xml->getpar127("velocity_offset", Pveloffs);
+
+ Pnoteon = xml->getparbool("note_on", Pnoteon);
+ Ppolymode = xml->getparbool("poly_mode", Ppolymode);
+ Plegatomode = xml->getparbool("legato_mode", Plegatomode); //older versions
+ if(!Plegatomode)
+ Plegatomode = xml->getpar127("legato_mode", Plegatomode);
+ Pkeylimit = xml->getpar127("key_limit", Pkeylimit);
+
+
+ if(xml->enterbranch("INSTRUMENT")) {
+ getfromXMLinstrument(xml);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("CONTROLLER")) {
+ ctl.getfromXML(xml);
+ xml->exitbranch();
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h
new file mode 100644
index 0000000..ed247d3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h
@@ -0,0 +1,202 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Part.h - Part implementation
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef PART_H
+#define PART_H
+
+#define MAX_INFO_TEXT_SIZE 1000
+
+#include "../globals.h"
+#include "../Params/Controller.h"
+#include "../Misc/Microtonal.h"
+
+#include <pthread.h>
+#include <list> // For the monomemnotes list.
+
+class EffectMgr;
+class ADnoteParameters;
+class SUBnoteParameters;
+class PADnoteParameters;
+class SynthNote;
+class XMLWrapper;
+class FFTwrapper;
+
+/** Part implementation*/
+class Part
+{
+ public:
+ /**Constructor
+ * @param microtonal_ Pointer to the microtonal object
+ * @param fft_ Pointer to the FFTwrapper
+ * @param mutex_ Pointer to the master pthread_mutex_t*/
+ Part(Microtonal *microtonal_, FFTwrapper *fft_, pthread_mutex_t *mutex_);
+ /**Destructor*/
+ ~Part();
+
+ // Midi commands implemented
+ void NoteOn(unsigned char note,
+ unsigned char velocity,
+ int masterkeyshift);
+ void NoteOff(unsigned char note);
+ void PolyphonicAftertouch(unsigned char note,
+ unsigned char velocity,
+ int masterkeyshift);
+ void AllNotesOff(); //panic
+ void SetController(unsigned int type, int par);
+ void RelaseSustainedKeys(); //this is called when the sustain pedal is relased
+ void RelaseAllKeys(); //this is called on AllNotesOff controller
+
+ /* The synthesizer part output */
+ void ComputePartSmps(); //Part output
+
+ //instrumentonly: 0 - save all, 1 - save only instrumnet, 2 - save only instrument without the name(used in bank)
+
+
+ //saves the instrument settings to a XML file
+ //returns 0 for ok or <0 if there is an error
+ int saveXML(const char *filename);
+ int loadXMLinstrument(const char *filename);
+
+ void add2XML(XMLwrapper *xml);
+ void add2XMLinstrument(XMLwrapper *xml);
+
+ void defaults();
+ void defaultsinstrument();
+
+ void applyparameters(bool lockmutex = true);
+
+ void getfromXML(XMLwrapper *xml);
+ void getfromXMLinstrument(XMLwrapper *xml);
+
+ void cleanup(bool final = false);
+
+ //the part's kit
+ struct {
+ unsigned char Penabled, Pmuted, Pminkey, Pmaxkey;
+ unsigned char *Pname;
+ unsigned char Padenabled, Psubenabled, Ppadenabled;
+ unsigned char Psendtoparteffect;
+ ADnoteParameters *adpars;
+ SUBnoteParameters *subpars;
+ PADnoteParameters *padpars;
+ } kit[NUM_KIT_ITEMS];
+
+
+ //Part parameters
+ void setkeylimit(unsigned char Pkeylimit);
+ void setkititemstatus(int kititem, int Penabled_);
+
+ unsigned char Penabled; /**<if the part is enabled*/
+ unsigned char Pvolume; /**<part volume*/
+ unsigned char Pminkey; /**<the minimum key that the part receives noteon messages*/
+ unsigned char Pmaxkey; //the maximum key that the part receives noteon messages
+ void setPvolume(char Pvolume);
+ unsigned char Pkeyshift; //Part keyshift
+ unsigned char Prcvchn; //from what midi channel it receive commnads
+ unsigned char Ppanning; //part panning
+ void setPpanning(char Ppanning);
+ unsigned char Pvelsns; //velocity sensing (amplitude velocity scale)
+ unsigned char Pveloffs; //velocity offset
+ unsigned char Pnoteon; //if the part receives NoteOn messages
+ unsigned char Pkitmode; //if the kitmode is enabled
+ unsigned char Pdrummode; //if all keys are mapped and the system is 12tET (used for drums)
+
+ unsigned char Ppolymode; //Part mode - 0=monophonic , 1=polyphonic
+ unsigned char Plegatomode; // 0=normal, 1=legato
+ unsigned char Pkeylimit; //how many keys are alowed to be played same time (0=off), the older will be relased
+
+ unsigned char *Pname; //name of the instrument
+ struct { //instrument additional information
+ unsigned char Ptype;
+ unsigned char Pauthor[MAX_INFO_TEXT_SIZE + 1];
+ unsigned char Pcomments[MAX_INFO_TEXT_SIZE + 1];
+ } info;
+
+
+ float *partoutl; //Left channel output of the part
+ float *partoutr; //Right channel output of the part
+
+ float *partfxinputl[NUM_PART_EFX + 1], //Left and right signal that pass thru part effects;
+ *partfxinputr[NUM_PART_EFX + 1]; //partfxinput l/r [NUM_PART_EFX] is for "no effect" buffer
+
+ enum NoteStatus {
+ KEY_OFF, KEY_PLAYING, KEY_RELASED_AND_SUSTAINED, KEY_RELASED
+ };
+
+ float volume, oldvolumel, oldvolumer; //this is applied by Master
+ float panning; //this is applied by Master, too
+
+ Controller ctl; //Part controllers
+
+ EffectMgr *partefx[NUM_PART_EFX]; //insertion part effects (they are part of the instrument)
+ unsigned char Pefxroute[NUM_PART_EFX]; //how the effect's output is routed(to next effect/to out)
+ bool Pefxbypass[NUM_PART_EFX]; //if the effects are bypassed
+
+
+ pthread_mutex_t *mutex;
+ pthread_mutex_t load_mutex;
+
+ int lastnote;
+
+ private:
+ void RunNote(unsigned k);
+ void KillNotePos(int pos);
+ void RelaseNotePos(int pos);
+ void MonoMemRenote(); // MonoMem stuff.
+
+ int killallnotes; //is set to 1 if I want to kill all notes
+
+ struct PartNotes {
+ NoteStatus status;
+ int note; //if there is no note playing, the "note"=-1
+ int itemsplaying;
+ struct {
+ SynthNote *adnote,
+ *subnote,
+ *padnote;
+ int sendtoparteffect;
+ } kititem[NUM_KIT_ITEMS];
+ int time;
+ };
+
+ int lastpos, lastposb; // To keep track of previously used pos and posb.
+ bool lastlegatomodevalid; // To keep track of previous legatomodevalid.
+
+ // MonoMem stuff
+ std::list<unsigned char> monomemnotes; // A list to remember held notes.
+ struct {
+ unsigned char velocity;
+ int mkeyshift; // I'm not sure masterkeyshift should be remembered.
+ } monomem[256];
+ /* 256 is to cover all possible note values.
+ monomem[] is used in conjunction with the list to
+ store the velocity and masterkeyshift values of a given note (the list only store note values).
+ For example 'monomem[note].velocity' would be the velocity value of the note 'note'.*/
+
+ PartNotes partnote[POLIPHONY];
+
+ float oldfreq; //this is used for portamento
+ Microtonal *microtonal;
+ FFTwrapper *fft;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp
new file mode 100644
index 0000000..435522d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp
@@ -0,0 +1,550 @@
+/*
+ * QtXmlWrapper.cpp - a QtXml based XML backend for ZynAddSubxFX
+ *
+ * Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+/* File derived from QtXmlWrapper.C: */
+/*
+ ZynAddSubFX - a software synthesizer
+
+ QtXmlWrapper.C - XML wrapper
+ Copyright (C) 2003-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2009 Mark McCurry
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <QtXml/QDomDocument>
+#include <QtCore/QDebug>
+#include "QtXmlWrapper.h"
+#include <string>
+#include <sstream>
+#include <cstdarg>
+#include <zlib.h>
+#include "lmmsconfig.h"
+#include "../globals.h"
+#include "Util.h"
+
+
+struct XmlData
+{
+ XmlData() :
+ m_doc( "ZynAddSubFX-data" )
+ {
+ }
+ QDomDocument m_doc;
+ QDomElement m_node;
+ QDomElement m_info;
+
+ QDomElement addparams( const char *name, unsigned int params, ... );
+} ;
+
+
+
+QtXmlWrapper::QtXmlWrapper() :
+ d( new XmlData )
+{
+ version.Major = 2;
+ version.Minor = 4;
+ version.Revision = 1;
+
+ minimal = true;
+
+ d->m_node = d->m_doc.createElement( "ZynAddSubFX-data" );
+ d->m_node.setAttribute( "version-major", QString::number( version.Major ) );
+ d->m_node.setAttribute( "version-minor", QString::number( version.Minor ) );
+ d->m_node.setAttribute( "version-revision", QString::number( version.Revision ) );
+ d->m_node.setAttribute( "ZynAddSubFX-author", "Nasca Octavian Paul" );
+ d->m_doc.appendChild( d->m_node );
+
+ //make the empty branch that will contain the information parameters
+ d->m_info = d->addparams("INFORMATION", 0);
+
+ //save zynaddsubfx specifications
+ beginbranch("BASE_PARAMETERS");
+ addpar("max_midi_parts", NUM_MIDI_PARTS);
+ addpar("max_kit_items_per_instrument", NUM_KIT_ITEMS);
+
+ addpar("max_system_effects", NUM_SYS_EFX);
+ addpar("max_insertion_effects", NUM_INS_EFX);
+ addpar("max_instrument_effects", NUM_PART_EFX);
+
+ addpar("max_addsynth_voices", NUM_VOICES);
+ endbranch();
+}
+
+
+
+
+QtXmlWrapper::~QtXmlWrapper()
+{
+ delete d;
+}
+
+
+
+
+void QtXmlWrapper::setPadSynth(bool enabled)
+{
+ /**@bug this might create multiple nodes when only one is needed*/
+ QDomElement oldNode = d->m_node;
+ d->m_node = d->m_info;
+ //Info storing
+ addparbool("PADsynth_used", enabled);
+ d->m_node = oldNode;
+}
+
+QDomElement findElement( QDomElement root, const QString & tagname, const QString & attrname,
+ const QString & attrval )
+{
+ QDomNodeList list = root.elementsByTagName( tagname );
+ for( int i = 0; i < list.size(); ++i )
+ {
+ QDomNode n = list.at( i );
+ if( n.isElement() )
+ {
+ QDomElement e = n.toElement();
+ if( e.hasAttribute( attrname ) && e.attribute( attrname ) == attrval )
+ {
+ return e;
+ }
+ }
+ }
+
+ return QDomElement();
+}
+
+
+
+
+bool QtXmlWrapper::hasPadSynth() const
+{
+ /**Right now this has a copied implementation of setparbool, so this should
+ * be reworked as XMLwrapper evolves*/
+ QDomElement tmp = d->m_doc.elementsByTagName( "INFORMATION" ).at( 0 ).toElement();
+ QDomElement parameter = findElement( tmp, "par_bool", "name", "PADsynth_used" );
+ if( !parameter.isNull() )
+ {
+ const QString val = parameter.attribute( "value" ).toLower();
+ return val[0] == 'y';
+ }
+ return false;
+}
+
+
+/* SAVE XML members */
+
+int QtXmlWrapper::saveXMLfile(const std::string &filename) const
+{
+ char *xmldata = getXMLdata();
+ if(xmldata == NULL)
+ return -2;
+
+ int compression = config.cfg.GzipCompression;
+ int result = dosavefile(filename.c_str(), compression, xmldata);
+
+ delete[] xmldata;
+ return result;
+}
+
+
+char *QtXmlWrapper::getXMLdata() const
+{
+ QString xml = d->m_doc.toString( 1 );
+ return qstrdup( xml.toUtf8().constData() );
+}
+
+
+int QtXmlWrapper::dosavefile(const char *filename,
+ int compression,
+ const char *xmldata) const
+{
+ if(compression == 0) {
+ FILE *file;
+ file = fopen(filename, "w");
+ if(file == NULL)
+ return -1;
+ fputs(xmldata, file);
+ fclose(file);
+ }
+ else {
+ if(compression > 9)
+ compression = 9;
+ if(compression < 1)
+ compression = 1;
+ char options[10];
+ snprintf(options, 10, "wb%d", compression);
+
+ gzFile gzfile;
+ gzfile = gzopen(filename, options);
+ if(gzfile == NULL)
+ return -1;
+ gzputs(gzfile, xmldata);
+ gzclose(gzfile);
+ }
+
+ return 0;
+}
+
+
+
+void QtXmlWrapper::addpar(const std::string &name, int val)
+{
+ d->addparams("par", 2, "name", name.c_str(), "value", stringFrom<int>(
+ val).c_str());
+}
+
+void QtXmlWrapper::addparreal(const std::string &name, float val)
+{
+ d->addparams("par_real", 2, "name", name.c_str(), "value",
+ stringFrom<float>(val).c_str());
+}
+
+void QtXmlWrapper::addparbool(const std::string &name, int val)
+{
+ if(val != 0)
+ d->addparams("par_bool", 2, "name", name.c_str(), "value", "yes");
+ else
+ d->addparams("par_bool", 2, "name", name.c_str(), "value", "no");
+}
+
+void QtXmlWrapper::addparstr(const std::string &name, const std::string &val)
+{
+ QDomElement e = d->m_doc.createElement( "string" );
+ e.setAttribute( "name", name.c_str() );
+ e.appendChild( d->m_doc.createTextNode( val.c_str() ) );
+ d->m_node.appendChild( e );
+}
+
+
+void QtXmlWrapper::beginbranch(const std::string &name)
+{
+ d->m_node = d->addparams(name.c_str(), 0);
+}
+
+void QtXmlWrapper::beginbranch(const std::string &name, int id)
+{
+ d->m_node = d->addparams(name.c_str(), 1, "id", stringFrom<int>(id).c_str());
+}
+
+void QtXmlWrapper::endbranch()
+{
+ d->m_node = d->m_node.parentNode().toElement();
+}
+
+
+
+/* LOAD XML members */
+
+int QtXmlWrapper::loadXMLfile(const std::string &filename)
+{
+ const char *xmldata = doloadfile(filename.c_str());
+ if(xmldata == NULL)
+ {
+ qDebug() << "QtXmlWrapper::loadXMLfile(): empty data";
+ return -1; //the file could not be loaded or uncompressed
+ }
+
+ QByteArray b( xmldata );
+ while( !b.isEmpty() && b[0] != '<' )
+ {
+ // remove first blank line
+ b.remove( 0, 1 );
+ }
+
+ if( !d->m_doc.setContent( b ) )
+ {
+ qDebug() << "QtXmlWrapper::loadXMLfile(): could not set document content";
+ delete[] xmldata;
+ return -2;
+ }
+ delete[] xmldata;
+
+ d->m_node = d->m_doc.elementsByTagName( "ZynAddSubFX-data" ).at( 0 ).toElement();
+ if( d->m_node.isNull() || !d->m_node.isElement() )
+ {
+ qDebug() << "QtXmlWrapper::loadXMLfile(): missing root node";
+ return -3; //the XML doesnt embbed zynaddsubfx data
+ }
+ QDomElement root = d->m_node.toElement();
+ //fetch version information
+ version.Major = root.attribute( "version-major").toInt();
+ version.Minor = root.attribute( "version-minor").toInt();
+ version.Revision = root.attribute( "version-revision").toInt();
+
+ return 0;
+}
+
+
+char *QtXmlWrapper::doloadfile(const std::string &filename) const
+{
+ char *xmldata = NULL;
+ gzFile gzfile = gzopen(filename.c_str(), "rb");
+
+ if(gzfile != NULL) { //The possibly compressed file opened
+ std::stringstream strBuf; //reading stream
+ const int bufSize = 500; //fetch size
+ char fetchBuf[bufSize + 1]; //fetch buffer
+ int read = 0; //chars read in last fetch
+
+ fetchBuf[bufSize] = 0; //force null termination
+
+ while(bufSize == (read = gzread(gzfile, fetchBuf, bufSize)))
+ strBuf << fetchBuf;
+
+ fetchBuf[read] = 0; //Truncate last partial read
+ strBuf << fetchBuf;
+
+ gzclose(gzfile);
+
+ //Place data in output format
+ std::string tmp = strBuf.str();
+ xmldata = new char[tmp.size() + 1];
+ strncpy(xmldata, tmp.c_str(), tmp.size() + 1);
+ }
+
+ return xmldata;
+}
+
+bool QtXmlWrapper::putXMLdata(const char *xmldata)
+{
+ d->m_doc.setContent( QString::fromUtf8( xmldata ) );
+
+ d->m_node = d->m_doc.elementsByTagName( "ZynAddSubFX-data" ).at( 0 ).toElement();
+ if( d->m_node.isNull() )
+ {
+ return false;
+ }
+
+ return true;
+}
+
+
+
+int QtXmlWrapper::enterbranch(const std::string &name)
+{
+ QDomElement tmp = d->m_node.firstChildElement( name.c_str() );
+ if( tmp.isNull() )
+ {
+ return 0;
+ }
+
+ d->m_node = tmp;
+
+ return 1;
+}
+
+int QtXmlWrapper::enterbranch(const std::string &name, int id)
+{
+ QDomElement tmp = findElement( d->m_node, name.c_str(),
+ "id", QString::number( id ) );
+ if( tmp.isNull() )
+ {
+ return 0;
+ }
+
+ d->m_node = tmp;
+
+ return 1;
+}
+
+
+void QtXmlWrapper::exitbranch()
+{
+ d->m_node = d->m_node.parentNode().toElement();
+}
+
+
+int QtXmlWrapper::getbranchid(int min, int max) const
+{
+ if( !d->m_node.isElement() )
+ {
+ return min;
+ }
+ QDomElement tmp = d->m_node.toElement();
+ if( !tmp.hasAttribute( "id" ) )
+ {
+ return min;
+ }
+ int id = tmp.attribute( "id" ).toInt();
+ if((min == 0) && (max == 0))
+ return id;
+
+ if(id < min)
+ id = min;
+ else
+ if(id > max)
+ id = max;
+
+ return id;
+}
+
+int QtXmlWrapper::getpar(const std::string &name, int defaultpar, int min,
+ int max) const
+{
+ QDomElement tmp = findElement( d->m_node, "par", "name", name.c_str() );
+ if( tmp.isNull() || !tmp.hasAttribute( "value" ) )
+ {
+ return defaultpar;
+ }
+
+ int val = tmp.attribute( "value" ).toInt();
+ if(val < min)
+ val = min;
+ else
+ if(val > max)
+ val = max;
+
+ return val;
+}
+
+int QtXmlWrapper::getpar127(const std::string &name, int defaultpar) const
+{
+ return getpar(name, defaultpar, 0, 127);
+}
+
+int QtXmlWrapper::getparbool(const std::string &name, int defaultpar) const
+{
+ QDomElement tmp = findElement( d->m_node, "par_bool", "name", name.c_str() );
+ if( tmp.isNull() || !tmp.hasAttribute( "value" ) )
+ {
+ return defaultpar;
+ }
+
+ const QString val = tmp.attribute( "value" ).toLower();
+ if( val[0] == 'y' )
+ {
+ return 1;
+ }
+ return 0;
+}
+
+void QtXmlWrapper::getparstr(const std::string &name, char *par, int maxstrlen) const
+{
+ ZERO(par, maxstrlen);
+ QDomNode tmp = findElement( d->m_node, "string", "name", name.c_str() );
+ if( tmp.isNull() || !tmp.hasChildNodes() )
+ {
+ return;
+ }
+
+ tmp = tmp.firstChild();
+ if( tmp.nodeType() == QDomNode::ElementNode )
+ {
+ snprintf(par, maxstrlen, "%s", tmp.toElement().tagName().toUtf8().constData() );
+ return;
+ }
+ if( tmp.nodeType() == QDomNode::TextNode )
+ {
+ snprintf(par, maxstrlen, "%s", tmp.toText().data().toUtf8().constData() );
+ return;
+ }
+}
+
+std::string QtXmlWrapper::getparstr(const std::string &name,
+ const std::string &defaultpar) const
+{
+ QDomNode tmp = findElement( d->m_node, "string", "name", name.c_str() );
+ if( tmp.isNull() || !tmp.hasChildNodes() )
+ {
+ return defaultpar;
+ }
+
+ tmp = tmp.firstChild();
+ if( tmp.nodeType() == QDomNode::ElementNode && !tmp.toElement().tagName().isEmpty() )
+ {
+ return tmp.toElement().tagName().toUtf8().constData();
+ }
+ if( tmp.nodeType() == QDomNode::TextNode && !tmp.toText().data().isEmpty() )
+ {
+ return tmp.toText().data().toUtf8().constData();
+ }
+
+ return defaultpar;
+}
+
+float QtXmlWrapper::getparreal(const char *name, float defaultpar) const
+{
+ QDomElement tmp = findElement( d->m_node, "par_real", "name", name );
+ if( tmp.isNull() || !tmp.hasAttribute( "value" ) )
+ {
+ return defaultpar;
+ }
+
+ return tmp.attribute( "value" ).toFloat();
+}
+
+float QtXmlWrapper::getparreal(const char *name,
+ float defaultpar,
+ float min,
+ float max) const
+{
+ float result = getparreal(name, defaultpar);
+
+ if(result < min)
+ result = min;
+ else
+ if(result > max)
+ result = max;
+ return result;
+}
+
+
+/** Private members **/
+
+QDomElement XmlData::addparams(const char *name, unsigned int params,
+ ...)
+{
+ /**@todo make this function send out a good error message if something goes
+ * wrong**/
+ QDomElement element = m_doc.createElement( name );
+ m_node.appendChild( element );
+
+ if(params) {
+ va_list variableList;
+ va_start(variableList, params);
+
+ const char *ParamName;
+ const char *ParamValue;
+ while(params--) {
+ ParamName = va_arg(variableList, const char *);
+ ParamValue = va_arg(variableList, const char *);
+ element.setAttribute( ParamName, ParamValue);
+ }
+ }
+ return element;
+}
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.h
new file mode 100644
index 0000000..2a2e189
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.h
@@ -0,0 +1,125 @@
+/*
+ * QtXmlWrapper.h - a QtXml based XML backend for ZynAddSubxFX
+ *
+ * Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+/* File derived from XMLwrapper.h: */
+/*
+ ZynAddSubFX - a software synthesizer
+
+ XMLwrapper.h - XML wrapper
+ Copyright (C) 2003-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2009 Mark McCurry
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef QT_XML_WRAPPER_H
+#define QT_XML_WRAPPER_H
+
+#include "../globals.h"
+
+#include <string>
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+
+#define QtXmlWrapper XMLwrapper
+
+struct XmlData;
+
+class QtXmlWrapper
+{
+public:
+ QtXmlWrapper();
+ ~QtXmlWrapper();
+
+ int saveXMLfile( const std::string & filename ) const;
+ int loadXMLfile( const std::string & filename );
+
+ char *getXMLdata() const;
+ bool putXMLdata( const char *xmldata );
+
+ void addpar( const std::string & name, int val );
+ void addparreal( const std::string & name, float val);
+ void addparbool( const std::string & name, int val );
+ void addparstr( const std::string & name, const std::string & val );
+
+ void beginbranch( const std::string & name );
+ void beginbranch( const std::string & name, int id );
+ void endbranch();
+
+
+ int enterbranch( const std::string & name );
+ int enterbranch( const std::string & name, int id );
+ void exitbranch();
+ int getbranchid( int min, int max ) const;
+
+ int getpar( const std::string & name, int defaultpar, int min, int max ) const;
+ int getpar127( const std::string & name, int defaultpar ) const;
+ int getparbool( const std::string & name, int defaultpar ) const;
+
+ void getparstr( const std::string & name, char * par, int maxstrlen ) const;
+ std::string getparstr( const std::string & name, const std::string & defaultpar ) const;
+ float getparreal( const char * name, float defaultpar ) const;
+
+ float getparreal(const char *name, float defaultpar, float min, float max) const;
+
+ bool minimal; /**<false if all parameters will be stored (used only for clipboard)*/
+
+ void setPadSynth( bool enabled );
+ bool hasPadSynth() const;
+
+
+private:
+ int dosavefile(const char *filename, int compression, const char *xmldata) const;
+
+ char *doloadfile(const std::string &filename) const;
+
+ struct
+ {
+ int Major;
+ int Minor;
+ int Revision;
+ } version;
+
+ XmlData * d;
+
+
+};
+
+#endif
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.cpp
new file mode 100644
index 0000000..fede701
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.cpp
@@ -0,0 +1,91 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Recorder.cpp - Records sound to a file
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <sys/stat.h>
+#include "Recorder.h"
+#include "WavFile.h"
+#include "../Nio/Nio.h"
+
+Recorder::Recorder()
+ :status(0), notetrigger(0)
+{}
+
+Recorder::~Recorder()
+{
+ if(recording() == 1)
+ stop();
+}
+
+int Recorder::preparefile(std::string filename_, int overwrite)
+{
+ if(!overwrite) {
+ struct stat fileinfo;
+ int statr;
+ statr = stat(filename_.c_str(), &fileinfo);
+ if(statr == 0) //file exists
+ return 1;
+ }
+
+ Nio::waveNew(new WavFile(filename_, synth->samplerate, 2));
+
+ status = 1; //ready
+
+ return 0;
+}
+
+void Recorder::start()
+{
+ notetrigger = 0;
+ status = 2; //recording
+}
+
+void Recorder::stop()
+{
+ Nio::waveStop();
+ Nio::waveStart();
+ status = 0;
+}
+
+void Recorder::pause()
+{
+ status = 0;
+ Nio::waveStop();
+}
+
+int Recorder::recording()
+{
+ if((status == 2) && (notetrigger != 0))
+ return 1;
+ else
+ return 0;
+}
+
+void Recorder::triggernow()
+{
+ if(status == 2) {
+ if(notetrigger != 1)
+ Nio::waveStart();
+ notetrigger = 1;
+ }
+}
+
+//TODO move recorder inside nio system
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h
new file mode 100644
index 0000000..0e3f02f
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h
@@ -0,0 +1,54 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Recorder.h - Records sound to a file
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef RECORDER_H
+#define RECORDER_H
+#include <string>
+#include "../globals.h"
+
+/**Records sound to a file*/
+class Recorder
+{
+ public:
+
+ Recorder();
+ ~Recorder();
+ /**Prepare the given file.
+ * @returns 1 if the file exists */
+ int preparefile(std::string filename_, int overwrite);
+ void start();
+ void stop();
+ void pause();
+ int recording();
+ void triggernow();
+
+ /** Status:
+ * 0 - not ready(no file selected),
+ * 1 - ready
+ * 2 - recording */
+ int status;
+
+ private:
+ int notetrigger;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp
new file mode 100644
index 0000000..ac2f317
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp
@@ -0,0 +1,38 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Stereo.cpp - Object for storing a pair of objects
+ Copyright (C) 2009-2009 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+template<class T>
+Stereo<T>::Stereo(const T &left, const T &right)
+ :l(left), r(right)
+{}
+
+template<class T>
+Stereo<T>::Stereo(const T &val)
+ :l(val), r(val)
+{}
+
+template<class T>
+Stereo<T> &Stereo<T>::operator=(const Stereo<T> &nstr)
+{
+ l = nstr.l;
+ r = nstr.r;
+ return *this;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h
new file mode 100644
index 0000000..516d318
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h
@@ -0,0 +1,40 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Stereo.h - Object for storing a pair of objects
+ Copyright (C) 2009-2009 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+#ifndef STEREO_H
+#define STEREO_H
+
+template<class T>
+struct Stereo {
+ public:
+ Stereo(const T &left, const T &right);
+
+ /**Initializes Stereo with left and right set to val
+ * @param val the value for both channels*/
+ Stereo(const T &val);
+ ~Stereo() {}
+
+ Stereo<T> &operator=(const Stereo<T> &smp);
+
+ //data
+ T l, r;
+};
+#include "Stereo.cpp"
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp
new file mode 100644
index 0000000..9025c62
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp
@@ -0,0 +1,230 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Util.cpp - Miscellaneous functions
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Util.h"
+#include <vector>
+#include <cassert>
+#include <math.h>
+#include <stdio.h>
+#ifndef WIN32
+#include <err.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#ifdef HAVE_SCHEDULER
+#include <sched.h>
+#endif
+
+
+prng_t prng_state = 0x1234;
+
+Config config;
+float *denormalkillbuf;
+
+
+/*
+ * Transform the velocity according the scaling parameter (velocity sensing)
+ */
+float VelF(float velocity, unsigned char scaling)
+{
+ float x;
+ x = powf(VELOCITY_MAX_SCALE, (64.0f - scaling) / 64.0f);
+ if((scaling == 127) || (velocity > 0.99f))
+ return 1.0f;
+ else
+ return powf(velocity, x);
+}
+
+/*
+ * Get the detune in cents
+ */
+float getdetune(unsigned char type,
+ unsigned short int coarsedetune,
+ unsigned short int finedetune)
+{
+ float det = 0.0f, octdet = 0.0f, cdet = 0.0f, findet = 0.0f;
+ //Get Octave
+ int octave = coarsedetune / 1024;
+ if(octave >= 8)
+ octave -= 16;
+ octdet = octave * 1200.0f;
+
+ //Coarse and fine detune
+ int cdetune = coarsedetune % 1024;
+ if(cdetune > 512)
+ cdetune -= 1024;
+
+ int fdetune = finedetune - 8192;
+
+ switch(type) {
+// case 1: is used for the default (see below)
+ case 2:
+ cdet = fabs(cdetune * 10.0f);
+ findet = fabs(fdetune / 8192.0f) * 10.0f;
+ break;
+ case 3:
+ cdet = fabs(cdetune * 100);
+ findet = powf(10, fabs(fdetune / 8192.0f) * 3.0f) / 10.0f - 0.1f;
+ break;
+ case 4:
+ cdet = fabs(cdetune * 701.95500087f); //perfect fifth
+ findet =
+ (powf(2, fabs(fdetune / 8192.0f) * 12.0f) - 1.0f) / 4095 * 1200;
+ break;
+ //case ...: need to update N_DETUNE_TYPES, if you'll add more
+ default:
+ cdet = fabs(cdetune * 50.0f);
+ findet = fabs(fdetune / 8192.0f) * 35.0f; //almost like "Paul's Sound Designer 2"
+ break;
+ }
+ if(finedetune < 8192)
+ findet = -findet;
+ if(cdetune < 0)
+ cdet = -cdet;
+
+ det = octdet + cdet + findet;
+ return det;
+}
+
+
+bool fileexists(const char *filename)
+{
+ struct stat tmp;
+ int result = stat(filename, &tmp);
+ if(result >= 0)
+ return true;
+
+ return false;
+}
+
+void set_realtime()
+{
+#ifdef HAVE_SCHEDULER
+ sched_param sc;
+ sc.sched_priority = 60;
+ //if you want get "sched_setscheduler undeclared" from compilation,
+ //you can safely remove the folowing line:
+ sched_setscheduler(0, SCHED_FIFO, &sc);
+ //if (err==0) printf("Real-time");
+#endif
+}
+
+void os_sleep(long length)
+{
+ usleep(length);
+}
+
+std::string legalizeFilename(std::string filename)
+{
+ for(int i = 0; i < (int) filename.size(); ++i) {
+ char c = filename[i];
+ if(!(isdigit(c) || isalpha(c) || (c == '-') || (c == ' ')))
+ filename[i] = '_';
+ }
+ return filename;
+}
+
+void invSignal(float *sig, size_t len)
+{
+ for(size_t i = 0; i < len; ++i)
+ sig[i] *= -1.0f;
+}
+
+//Some memory pools for short term buffer use
+//(avoid the use of new in RT thread(s))
+
+struct pool_entry {
+ bool free;
+ float *dat;
+};
+typedef std::vector<pool_entry> pool_t;
+typedef pool_t::iterator pool_itr_t;
+
+pool_t pool;
+
+float *getTmpBuffer()
+{
+ for(pool_itr_t itr = pool.begin(); itr != pool.end(); ++itr)
+ if(itr->free) { //Use Pool
+ itr->free = false;
+ return itr->dat;
+ }
+ pool_entry p; //Extend Pool
+ p.free = false;
+ p.dat = new float[synth->buffersize];
+ pool.push_back(p);
+
+ return p.dat;
+}
+
+void returnTmpBuffer(float *buf)
+{
+ for(pool_itr_t itr = pool.begin(); itr != pool.end(); ++itr)
+ if(itr->dat == buf) { //Return to Pool
+ itr->free = true;
+ return;
+ }
+ fprintf(stderr,
+ "ERROR: invalid buffer returned %s %d\n",
+ __FILE__,
+ __LINE__);
+}
+
+void clearTmpBuffers(void)
+{
+ for(pool_itr_t itr = pool.begin(); itr != pool.end(); ++itr) {
+#ifndef WIN32
+ if(!itr->free) //Warn about used buffers
+ warn("Temporary buffer (%p) about to be freed may be in use",
+ itr->dat);
+#endif
+ delete [] itr->dat;
+ }
+ pool.clear();
+}
+
+float SYNTH_T::numRandom()
+{
+ return RND;
+}
+
+float interpolate(const float *data, size_t len, float pos)
+{
+ assert(len > (size_t)pos + 1);
+ const int l_pos = (int)pos,
+ r_pos = l_pos + 1;
+ const float leftness = pos - l_pos;
+ return data[l_pos] * leftness + data[r_pos] * (1.0f - leftness);
+}
+
+float cinterpolate(const float *data, size_t len, float pos)
+{
+ const int l_pos = ((int)pos) % len,
+ r_pos = (l_pos + 1) % len;
+ const float leftness = pos - l_pos;
+ return data[l_pos] * leftness + data[r_pos] * (1.0f - leftness);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h
new file mode 100644
index 0000000..45d6f84
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h
@@ -0,0 +1,116 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Util.h - Miscellaneous functions
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef UTIL_H
+#define UTIL_H
+
+#include <string>
+#include <sstream>
+#include <stdint.h>
+#include "Config.h"
+#include "../globals.h"
+
+//Velocity Sensing function
+extern float VelF(float velocity, unsigned char scaling);
+
+bool fileexists(const char *filename);
+
+#define N_DETUNE_TYPES 4 //the number of detune types
+extern float getdetune(unsigned char type,
+ unsigned short int coarsedetune,
+ unsigned short int finedetune);
+
+/**Try to set current thread to realtime priority program priority
+ * \todo see if the right pid is being sent
+ * \todo see if this is having desired effect, if not then look at
+ * pthread_attr_t*/
+void set_realtime();
+
+/**Os independent sleep in microsecond*/
+void os_sleep(long length);
+
+std::string legalizeFilename(std::string filename);
+
+extern float *denormalkillbuf; /**<the buffer to add noise in order to avoid denormalisation*/
+
+extern class Config config;
+
+void invSignal(float *sig, size_t len);
+
+template<class T>
+std::string stringFrom(T x)
+{
+ std::stringstream ss;
+ ss << x;
+ return ss.str();
+}
+
+template<class T>
+T stringTo(const char *x)
+{
+ std::string str = x != NULL ? x : "0"; //should work for the basic float/int
+ std::stringstream ss(str);
+ T ans;
+ ss >> ans;
+ return ans;
+}
+
+template<class T>
+T limit(T val, T min, T max)
+{
+ return val < min ? min : (val > max ? max : val);
+}
+
+//Random number generator
+
+typedef uint32_t prng_t;
+extern prng_t prng_state;
+
+// Portable Pseudo-Random Number Generator
+inline prng_t prng_r(prng_t &p)
+{
+ return p = p * 1103515245 + 12345;
+}
+
+inline prng_t prng(void)
+{
+ return prng_r(prng_state) & 0x7fffffff;
+}
+
+inline void sprng(prng_t p)
+{
+ prng_state = p;
+}
+
+/*
+ * The random generator (0.0f..1.0f)
+ */
+# define INT32_MAX (2147483647)
+#define RND (prng() / (INT32_MAX * 1.0f))
+
+//Linear Interpolation
+float interpolate(const float *data, size_t len, float pos);
+
+//Linear circular interpolation
+float cinterpolate(const float *data, size_t len, float pos);
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp
new file mode 100644
index 0000000..78db9d5
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp
@@ -0,0 +1,97 @@
+/*
+ Copyright (C) 2006 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <cstdio>
+#include <cstring>
+#include <cstdlib>
+#include <iostream>
+#include "WavFile.h"
+using namespace std;
+
+WavFile::WavFile(string filename, int samplerate, int channels)
+ :sampleswritten(0), samplerate(samplerate), channels(channels),
+ file(fopen(filename.c_str(), "w"))
+
+{
+ if(file) {
+ cout << "INFO: Making space for wave file header" << endl;
+ //making space for the header written at destruction
+ char tmp[44];
+ memset(tmp, 0, 44 * sizeof(char));
+ fwrite(tmp, 1, 44, file);
+ }
+}
+
+WavFile::~WavFile()
+{
+ if(file) {
+ cout << "INFO: Writing wave file header" << endl;
+
+ unsigned int chunksize;
+ rewind(file);
+
+ fwrite("RIFF", 4, 1, file);
+ chunksize = sampleswritten * 4 + 36;
+ fwrite(&chunksize, 4, 1, file);
+
+ fwrite("WAVEfmt ", 8, 1, file);
+ chunksize = 16;
+ fwrite(&chunksize, 4, 1, file);
+ unsigned short int formattag = 1; //uncompresed wave
+ fwrite(&formattag, 2, 1, file);
+ unsigned short int nchannels = channels; //stereo
+ fwrite(&nchannels, 2, 1, file);
+ unsigned int samplerate_ = samplerate; //samplerate
+ fwrite(&samplerate_, 4, 1, file);
+ unsigned int bytespersec = samplerate * 2 * channels; //bytes/sec
+ fwrite(&bytespersec, 4, 1, file);
+ unsigned short int blockalign = 2 * channels; //2 channels * 16 bits/8
+ fwrite(&blockalign, 2, 1, file);
+ unsigned short int bitspersample = 16;
+ fwrite(&bitspersample, 2, 1, file);
+
+ fwrite("data", 4, 1, file);
+ chunksize = sampleswritten * blockalign;
+ fwrite(&chunksize, 4, 1, file);
+
+ fclose(file);
+ file = NULL;
+ }
+}
+
+bool WavFile::good() const
+{
+ return file;
+}
+
+void WavFile::writeStereoSamples(int nsmps, short int *smps)
+{
+ if(file) {
+ fwrite(smps, nsmps, 4, file);
+ sampleswritten += nsmps;
+ }
+}
+
+void WavFile::writeMonoSamples(int nsmps, short int *smps)
+{
+ if(file) {
+ fwrite(smps, nsmps, 2, file);
+ sampleswritten += nsmps;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h
new file mode 100644
index 0000000..4b29efa
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h
@@ -0,0 +1,44 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ WavFile.h - Records sound to a file
+ Copyright (C) 2008 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef WAVFILE_H
+#define WAVFILE_H
+#include <string>
+
+class WavFile
+{
+ public:
+ WavFile(std::string filename, int samplerate, int channels);
+ ~WavFile();
+
+ bool good() const;
+
+ void writeMonoSamples(int nsmps, short int *smps);
+ void writeStereoSamples(int nsmps, short int *smps);
+
+ private:
+ int sampleswritten;
+ int samplerate;
+ int channels;
+ FILE *file;
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.cpp
new file mode 100644
index 0000000..cf28129
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.cpp
@@ -0,0 +1,189 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ WaveShapeSmps.cpp - Sample Distortion
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "WaveShapeSmps.h"
+#include <cmath>
+
+void waveShapeSmps(int n,
+ float *smps,
+ unsigned char type,
+ unsigned char drive)
+{
+ int i;
+ float ws = drive / 127.0f;
+ float tmpv;
+
+ switch(type) {
+ case 1:
+ ws = powf(10, ws * ws * 3.0f) - 1.0f + 0.001f; //Arctangent
+ for(i = 0; i < n; ++i)
+ smps[i] = atanf(smps[i] * ws) / atanf(ws);
+ break;
+ case 2:
+ ws = ws * ws * 32.0f + 0.0001f; //Asymmetric
+ if(ws < 1.0f)
+ tmpv = sinf(ws) + 0.1f;
+ else
+ tmpv = 1.1f;
+ for(i = 0; i < n; ++i)
+ smps[i] = sinf(smps[i] * (0.1f + ws - ws * smps[i])) / tmpv;
+ ;
+ break;
+ case 3:
+ ws = ws * ws * ws * 20.0f + 0.0001f; //Pow
+ for(i = 0; i < n; ++i) {
+ smps[i] *= ws;
+ if(fabs(smps[i]) < 1.0f) {
+ smps[i] = (smps[i] - powf(smps[i], 3.0f)) * 3.0f;
+ if(ws < 1.0f)
+ smps[i] /= ws;
+ }
+ else
+ smps[i] = 0.0f;
+ }
+ break;
+ case 4:
+ ws = ws * ws * ws * 32.0f + 0.0001f; //Sine
+ if(ws < 1.57f)
+ tmpv = sinf(ws);
+ else
+ tmpv = 1.0f;
+ for(i = 0; i < n; ++i)
+ smps[i] = sinf(smps[i] * ws) / tmpv;
+ break;
+ case 5:
+ ws = ws * ws + 0.000001f; //Quantisize
+ for(i = 0; i < n; ++i)
+ smps[i] = floor(smps[i] / ws + 0.5f) * ws;
+ break;
+ case 6:
+ ws = ws * ws * ws * 32 + 0.0001f; //Zigzag
+ if(ws < 1.0f)
+ tmpv = sinf(ws);
+ else
+ tmpv = 1.0f;
+ for(i = 0; i < n; ++i)
+ smps[i] = asinf(sinf(smps[i] * ws)) / tmpv;
+ break;
+ case 7:
+ ws = powf(2.0f, -ws * ws * 8.0f); //Limiter
+ for(i = 0; i < n; ++i) {
+ float tmp = smps[i];
+ if(fabs(tmp) > ws) {
+ if(tmp >= 0.0f)
+ smps[i] = 1.0f;
+ else
+ smps[i] = -1.0f;
+ }
+ else
+ smps[i] /= ws;
+ }
+ break;
+ case 8:
+ ws = powf(2.0f, -ws * ws * 8.0f); //Upper Limiter
+ for(i = 0; i < n; ++i) {
+ float tmp = smps[i];
+ if(tmp > ws)
+ smps[i] = ws;
+ smps[i] *= 2.0f;
+ }
+ break;
+ case 9:
+ ws = powf(2.0f, -ws * ws * 8.0f); //Lower Limiter
+ for(i = 0; i < n; ++i) {
+ float tmp = smps[i];
+ if(tmp < -ws)
+ smps[i] = -ws;
+ smps[i] *= 2.0f;
+ }
+ break;
+ case 10:
+ ws = (powf(2.0f, ws * 6.0f) - 1.0f) / powf(2.0f, 6.0f); //Inverse Limiter
+ for(i = 0; i < n; ++i) {
+ float tmp = smps[i];
+ if(fabs(tmp) > ws) {
+ if(tmp >= 0.0f)
+ smps[i] = tmp - ws;
+ else
+ smps[i] = tmp + ws;
+ }
+ else
+ smps[i] = 0;
+ }
+ break;
+ case 11:
+ ws = powf(5, ws * ws * 1.0f) - 1.0f; //Clip
+ for(i = 0; i < n; ++i)
+ smps[i] = smps[i]
+ * (ws + 0.5f) * 0.9999f - floor(
+ 0.5f + smps[i] * (ws + 0.5f) * 0.9999f);
+ break;
+ case 12:
+ ws = ws * ws * ws * 30 + 0.001f; //Asym2
+ if(ws < 0.3f)
+ tmpv = ws;
+ else
+ tmpv = 1.0f;
+ for(i = 0; i < n; ++i) {
+ float tmp = smps[i] * ws;
+ if((tmp > -2.0f) && (tmp < 1.0f))
+ smps[i] = tmp * (1.0f - tmp) * (tmp + 2.0f) / tmpv;
+ else
+ smps[i] = 0.0f;
+ }
+ break;
+ case 13:
+ ws = ws * ws * ws * 32.0f + 0.0001f; //Pow2
+ if(ws < 1.0f)
+ tmpv = ws * (1 + ws) / 2.0f;
+ else
+ tmpv = 1.0f;
+ for(i = 0; i < n; ++i) {
+ float tmp = smps[i] * ws;
+ if((tmp > -1.0f) && (tmp < 1.618034f))
+ smps[i] = tmp * (1.0f - tmp) / tmpv;
+ else
+ if(tmp > 0.0f)
+ smps[i] = -1.0f;
+ else
+ smps[i] = -2.0f;
+ }
+ break;
+ case 14:
+ ws = powf(ws, 5.0f) * 80.0f + 0.0001f; //sigmoid
+ if(ws > 10.0f)
+ tmpv = 0.5f;
+ else
+ tmpv = 0.5f - 1.0f / (expf(ws) + 1.0f);
+ for(i = 0; i < n; ++i) {
+ float tmp = smps[i] * ws;
+ if(tmp < -10.0f)
+ tmp = -10.0f;
+ else
+ if(tmp > 10.0f)
+ tmp = 10.0f;
+ tmp = 0.5f - 1.0f / (expf(tmp) + 1.0f);
+ smps[i] = tmp / tmpv;
+ }
+ break;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.h
new file mode 100644
index 0000000..980eb28
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.h
@@ -0,0 +1,31 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ WaveShapeSmps.h - Sample distortions
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#ifndef WAVESHAPESMPS_H
+#define WAVESHAPESMPS_H
+
+//Waveshaping(called by Distorsion effect and waveshape from OscilGen)
+void waveShapeSmps(int n,
+ float *smps,
+ unsigned char type,
+ unsigned char drive);
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp
new file mode 100644
index 0000000..6148d68
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp
@@ -0,0 +1,623 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ XMLwrapper.cpp - XML wrapper
+ Copyright (C) 2003-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2009 Mark McCurry
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "XMLwrapper.h"
+#include <cstring>
+#include <stdio.h>
+#include <stdlib.h>
+#include <cstdarg>
+#include <zlib.h>
+#include <iostream>
+#include <sstream>
+
+#include "../globals.h"
+#include "Util.h"
+
+using namespace std;
+
+int xml_k = 0;
+bool verbose = false;
+
+const char *XMLwrapper_whitespace_callback(mxml_node_t *node, int where)
+{
+ const char *name = node->value.element.name;
+
+ if((where == MXML_WS_BEFORE_OPEN) && (!strcmp(name, "?xml")))
+ return NULL;
+ if((where == MXML_WS_BEFORE_CLOSE) && (!strcmp(name, "string")))
+ return NULL;
+
+ if((where == MXML_WS_BEFORE_OPEN) || (where == MXML_WS_BEFORE_CLOSE))
+ /* const char *tmp=node->value.element.name;
+ if (tmp!=NULL) {
+ if ((strstr(tmp,"par")!=tmp)&&(strstr(tmp,"string")!=tmp)) {
+ printf("%s ",tmp);
+ if (where==MXML_WS_BEFORE_OPEN) xml_k++;
+ if (where==MXML_WS_BEFORE_CLOSE) xml_k--;
+ if (xml_k>=STACKSIZE) xml_k=STACKSIZE-1;
+ if (xml_k<0) xml_k=0;
+ printf("%d\n",xml_k);
+ printf("\n");
+ };
+
+ };
+ int i=0;
+ for (i=1;i<xml_k;i++) tabs[i]='\t';
+ tabs[0]='\n';tabs[i+1]='\0';
+ if (where==MXML_WS_BEFORE_OPEN) return(tabs);
+ else return("\n");
+ */
+ return "\n";
+ ;
+
+ return 0;
+}
+
+//temporary const overload of mxmlFindElement
+const mxml_node_t *mxmlFindElement(const mxml_node_t *node,
+ const mxml_node_t *top,
+ const char *name,
+ const char *attr,
+ const char *value,
+ int descend)
+{
+ return const_cast<const mxml_node_t *>(mxmlFindElement(
+ const_cast<mxml_node_t *>(node),
+ const_cast<mxml_node_t *>(top),
+ name, attr, value, descend));
+}
+
+//temporary const overload of mxmlElementGetAttr
+const char *mxmlElementGetAttr(const mxml_node_t *node, const char *name)
+{
+ return mxmlElementGetAttr(const_cast<mxml_node_t *>(node), name);
+}
+
+XMLwrapper::XMLwrapper()
+{
+ version.Major = 2;
+ version.Minor = 4;
+ version.Revision = 4;
+
+ minimal = true;
+
+ node = tree = mxmlNewElement(MXML_NO_PARENT,
+ "?xml version=\"1.0f\" encoding=\"UTF-8\"?");
+ /* for mxml 2.1f (and older)
+ tree=mxmlNewElement(MXML_NO_PARENT,"?xml");
+ mxmlElementSetAttr(tree,"version","1.0f");
+ mxmlElementSetAttr(tree,"encoding","UTF-8");
+ */
+
+ mxml_node_t *doctype = mxmlNewElement(tree, "!DOCTYPE");
+ mxmlElementSetAttr(doctype, "ZynAddSubFX-data", NULL);
+
+ node = root = addparams("ZynAddSubFX-data", 4,
+ "version-major", stringFrom<int>(
+ version.Major).c_str(),
+ "version-minor", stringFrom<int>(
+ version.Minor).c_str(),
+ "version-revision",
+ stringFrom<int>(version.Revision).c_str(),
+ "ZynAddSubFX-author", "Nasca Octavian Paul");
+
+ //make the empty branch that will contain the information parameters
+ info = addparams("INFORMATION", 0);
+
+ //save zynaddsubfx specifications
+ beginbranch("BASE_PARAMETERS");
+ addpar("max_midi_parts", NUM_MIDI_PARTS);
+ addpar("max_kit_items_per_instrument", NUM_KIT_ITEMS);
+
+ addpar("max_system_effects", NUM_SYS_EFX);
+ addpar("max_insertion_effects", NUM_INS_EFX);
+ addpar("max_instrument_effects", NUM_PART_EFX);
+
+ addpar("max_addsynth_voices", NUM_VOICES);
+ endbranch();
+}
+
+XMLwrapper::~XMLwrapper()
+{
+ if(tree)
+ mxmlDelete(tree);
+}
+
+void XMLwrapper::setPadSynth(bool enabled)
+{
+ /**@bug this might create multiple nodes when only one is needed*/
+ mxml_node_t *oldnode = node;
+ node = info;
+ //Info storing
+ addparbool("PADsynth_used", enabled);
+ node = oldnode;
+}
+
+bool XMLwrapper::hasPadSynth() const
+{
+ /**Right now this has a copied implementation of setparbool, so this should
+ * be reworked as XMLwrapper evolves*/
+ mxml_node_t *tmp = mxmlFindElement(tree,
+ tree,
+ "INFORMATION",
+ NULL,
+ NULL,
+ MXML_DESCEND);
+
+ mxml_node_t *parameter = mxmlFindElement(tmp,
+ tmp,
+ "par_bool",
+ "name",
+ "PADsynth_used",
+ MXML_DESCEND_FIRST);
+ if(parameter == NULL) //no information availiable
+ return false;
+
+ const char *strval = mxmlElementGetAttr(parameter, "value");
+ if(strval == NULL) //no information available
+ return false;
+
+ if((strval[0] == 'Y') || (strval[0] == 'y'))
+ return true;
+ else
+ return false;
+}
+
+
+/* SAVE XML members */
+
+int XMLwrapper::saveXMLfile(const string &filename) const
+{
+ char *xmldata = getXMLdata();
+ if(xmldata == NULL)
+ return -2;
+
+ int compression = config.cfg.GzipCompression;
+ int result = dosavefile(filename.c_str(), compression, xmldata);
+
+ free(xmldata);
+ return result;
+}
+
+char *XMLwrapper::getXMLdata() const
+{
+ xml_k = 0;
+
+ char *xmldata = mxmlSaveAllocString(tree, XMLwrapper_whitespace_callback);
+
+ return xmldata;
+}
+
+
+int XMLwrapper::dosavefile(const char *filename,
+ int compression,
+ const char *xmldata) const
+{
+ if(compression == 0) {
+ FILE *file;
+ file = fopen(filename, "w");
+ if(file == NULL)
+ return -1;
+ fputs(xmldata, file);
+ fclose(file);
+ }
+ else {
+ if(compression > 9)
+ compression = 9;
+ if(compression < 1)
+ compression = 1;
+ char options[10];
+ snprintf(options, 10, "wb%d", compression);
+
+ gzFile gzfile;
+ gzfile = gzopen(filename, options);
+ if(gzfile == NULL)
+ return -1;
+ gzputs(gzfile, xmldata);
+ gzclose(gzfile);
+ }
+
+ return 0;
+}
+
+
+
+void XMLwrapper::addpar(const string &name, int val)
+{
+ addparams("par", 2, "name", name.c_str(), "value", stringFrom<int>(
+ val).c_str());
+}
+
+void XMLwrapper::addparreal(const string &name, float val)
+{
+ addparams("par_real", 2, "name", name.c_str(), "value",
+ stringFrom<float>(val).c_str());
+}
+
+void XMLwrapper::addparbool(const string &name, int val)
+{
+ if(val != 0)
+ addparams("par_bool", 2, "name", name.c_str(), "value", "yes");
+ else
+ addparams("par_bool", 2, "name", name.c_str(), "value", "no");
+}
+
+void XMLwrapper::addparstr(const string &name, const string &val)
+{
+ mxml_node_t *element = mxmlNewElement(node, "string");
+ mxmlElementSetAttr(element, "name", name.c_str());
+ mxmlNewText(element, 0, val.c_str());
+}
+
+
+void XMLwrapper::beginbranch(const string &name)
+{
+ if(verbose)
+ cout << "beginbranch()" << name << endl;
+ node = addparams(name.c_str(), 0);
+}
+
+void XMLwrapper::beginbranch(const string &name, int id)
+{
+ if(verbose)
+ cout << "beginbranch(" << id << ")" << name << endl;
+ node = addparams(name.c_str(), 1, "id", stringFrom<int>(id).c_str());
+}
+
+void XMLwrapper::endbranch()
+{
+ if(verbose)
+ cout << "endbranch()" << node << "-" << node->value.element.name
+ << " To "
+ << node->parent << "-" << node->parent->value.element.name << endl;
+ node = node->parent;
+}
+
+
+//workaround for memory leak
+const char *trimLeadingWhite(const char *c)
+{
+ while(isspace(*c))
+ ++c;
+ return c;
+}
+
+/* LOAD XML members */
+
+int XMLwrapper::loadXMLfile(const string &filename)
+{
+ if(tree != NULL)
+ mxmlDelete(tree);
+ tree = NULL;
+
+ const char *xmldata = doloadfile(filename.c_str());
+ if(xmldata == NULL)
+ return -1; //the file could not be loaded or uncompressed
+
+ root = tree = mxmlLoadString(NULL, trimLeadingWhite(
+ xmldata), MXML_OPAQUE_CALLBACK);
+
+ delete[] xmldata;
+
+ if(tree == NULL)
+ return -2; //this is not XML
+
+ node = root = mxmlFindElement(tree,
+ tree,
+ "ZynAddSubFX-data",
+ NULL,
+ NULL,
+ MXML_DESCEND);
+ if(root == NULL)
+ return -3; //the XML doesnt embbed zynaddsubfx data
+
+ //fetch version information
+ version.Major = stringTo<int>(mxmlElementGetAttr(root, "version-major"));
+ version.Minor = stringTo<int>(mxmlElementGetAttr(root, "version-minor"));
+ version.Revision =
+ stringTo<int>(mxmlElementGetAttr(root, "version-revision"));
+
+ if(verbose)
+ cout << "loadXMLfile() version: " << version.Major << '.'
+ << version.Minor << '.' << version.Revision << endl;
+
+ return 0;
+}
+
+
+char *XMLwrapper::doloadfile(const string &filename) const
+{
+ char *xmldata = NULL;
+ gzFile gzfile = gzopen(filename.c_str(), "rb");
+
+ if(gzfile != NULL) { //The possibly compressed file opened
+ stringstream strBuf; //reading stream
+ const int bufSize = 500; //fetch size
+ char fetchBuf[bufSize + 1]; //fetch buffer
+ int read = 0; //chars read in last fetch
+
+ fetchBuf[bufSize] = 0; //force null termination
+
+ while(bufSize == (read = gzread(gzfile, fetchBuf, bufSize)))
+ strBuf << fetchBuf;
+
+ fetchBuf[read] = 0; //Truncate last partial read
+ strBuf << fetchBuf;
+
+ gzclose(gzfile);
+
+ //Place data in output format
+ string tmp = strBuf.str();
+ xmldata = new char[tmp.size() + 1];
+ strncpy(xmldata, tmp.c_str(), tmp.size() + 1);
+ }
+
+ return xmldata;
+}
+
+bool XMLwrapper::putXMLdata(const char *xmldata)
+{
+ if(tree != NULL)
+ mxmlDelete(tree);
+
+ tree = NULL;
+ if(xmldata == NULL)
+ return false;
+
+ root = tree = mxmlLoadString(NULL, trimLeadingWhite(
+ xmldata), MXML_OPAQUE_CALLBACK);
+ if(tree == NULL)
+ return false;
+
+ node = root = mxmlFindElement(tree,
+ tree,
+ "ZynAddSubFX-data",
+ NULL,
+ NULL,
+ MXML_DESCEND);
+ if(root == NULL)
+ return false;
+
+ return true;
+}
+
+
+
+int XMLwrapper::enterbranch(const string &name)
+{
+ if(verbose)
+ cout << "enterbranch() " << name << endl;
+ mxml_node_t *tmp = mxmlFindElement(node, node,
+ name.c_str(), NULL, NULL,
+ MXML_DESCEND_FIRST);
+ if(tmp == NULL)
+ return 0;
+
+ node = tmp;
+ return 1;
+}
+
+int XMLwrapper::enterbranch(const string &name, int id)
+{
+ if(verbose)
+ cout << "enterbranch(" << id << ") " << name << endl;
+ mxml_node_t *tmp = mxmlFindElement(node, node,
+ name.c_str(), "id", stringFrom<int>(
+ id).c_str(), MXML_DESCEND_FIRST);
+ if(tmp == NULL)
+ return 0;
+
+ node = tmp;
+ return 1;
+}
+
+
+void XMLwrapper::exitbranch()
+{
+ if(verbose)
+ cout << "exitbranch()" << node << "-" << node->value.element.name
+ << " To "
+ << node->parent << "-" << node->parent->value.element.name << endl;
+ node = node->parent;
+}
+
+
+int XMLwrapper::getbranchid(int min, int max) const
+{
+ int id = stringTo<int>(mxmlElementGetAttr(node, "id"));
+ if((min == 0) && (max == 0))
+ return id;
+
+ if(id < min)
+ id = min;
+ else
+ if(id > max)
+ id = max;
+
+ return id;
+}
+
+int XMLwrapper::getpar(const string &name, int defaultpar, int min,
+ int max) const
+{
+ const mxml_node_t *tmp = mxmlFindElement(node,
+ node,
+ "par",
+ "name",
+ name.c_str(),
+ MXML_DESCEND_FIRST);
+
+ if(tmp == NULL)
+ return defaultpar;
+
+ const char *strval = mxmlElementGetAttr(tmp, "value");
+ if(strval == NULL)
+ return defaultpar;
+
+ int val = stringTo<int>(strval);
+ if(val < min)
+ val = min;
+ else
+ if(val > max)
+ val = max;
+
+ return val;
+}
+
+int XMLwrapper::getpar127(const string &name, int defaultpar) const
+{
+ return getpar(name, defaultpar, 0, 127);
+}
+
+int XMLwrapper::getparbool(const string &name, int defaultpar) const
+{
+ const mxml_node_t *tmp = mxmlFindElement(node,
+ node,
+ "par_bool",
+ "name",
+ name.c_str(),
+ MXML_DESCEND_FIRST);
+
+ if(tmp == NULL)
+ return defaultpar;
+
+ const char *strval = mxmlElementGetAttr(tmp, "value");
+ if(strval == NULL)
+ return defaultpar;
+
+ if((strval[0] == 'Y') || (strval[0] == 'y'))
+ return 1;
+ else
+ return 0;
+}
+
+void XMLwrapper::getparstr(const string &name, char *par, int maxstrlen) const
+{
+ ZERO(par, maxstrlen);
+ const mxml_node_t *tmp = mxmlFindElement(node,
+ node,
+ "string",
+ "name",
+ name.c_str(),
+ MXML_DESCEND_FIRST);
+
+ if(tmp == NULL)
+ return;
+ if(tmp->child == NULL)
+ return;
+ if(tmp->child->type == MXML_OPAQUE) {
+ snprintf(par, maxstrlen, "%s", tmp->child->value.element.name);
+ return;
+ }
+ if((tmp->child->type == MXML_TEXT)
+ && (tmp->child->value.text.string != NULL)) {
+ snprintf(par, maxstrlen, "%s", tmp->child->value.text.string);
+ return;
+ }
+}
+
+string XMLwrapper::getparstr(const string &name,
+ const std::string &defaultpar) const
+{
+ const mxml_node_t *tmp = mxmlFindElement(node,
+ node,
+ "string",
+ "name",
+ name.c_str(),
+ MXML_DESCEND_FIRST);
+
+ if((tmp == NULL) || (tmp->child == NULL))
+ return defaultpar;
+
+ if((tmp->child->type == MXML_OPAQUE)
+ && (tmp->child->value.element.name != NULL))
+ return tmp->child->value.element.name;
+
+ if((tmp->child->type == MXML_TEXT)
+ && (tmp->child->value.text.string != NULL))
+ return tmp->child->value.text.string;
+
+ return defaultpar;
+}
+
+float XMLwrapper::getparreal(const char *name, float defaultpar) const
+{
+ const mxml_node_t *tmp = mxmlFindElement(node,
+ node,
+ "par_real",
+ "name",
+ name,
+ MXML_DESCEND_FIRST);
+ if(tmp == NULL)
+ return defaultpar;
+
+ const char *strval = mxmlElementGetAttr(tmp, "value");
+ if(strval == NULL)
+ return defaultpar;
+
+ return stringTo<float>(strval);
+}
+
+float XMLwrapper::getparreal(const char *name,
+ float defaultpar,
+ float min,
+ float max) const
+{
+ float result = getparreal(name, defaultpar);
+
+ if(result < min)
+ result = min;
+ else
+ if(result > max)
+ result = max;
+ return result;
+}
+
+
+/** Private members **/
+
+mxml_node_t *XMLwrapper::addparams(const char *name, unsigned int params,
+ ...) const
+{
+ /**@todo make this function send out a good error message if something goes
+ * wrong**/
+ mxml_node_t *element = mxmlNewElement(node, name);
+
+ if(params) {
+ va_list variableList;
+ va_start(variableList, params);
+
+ const char *ParamName;
+ const char *ParamValue;
+ while(params--) {
+ ParamName = va_arg(variableList, const char *);
+ ParamValue = va_arg(variableList, const char *);
+ if(verbose)
+ cout << "addparams()[" << params << "]=" << name << " "
+ << ParamName << "=\"" << ParamValue << "\"" << endl;
+ mxmlElementSetAttr(element, ParamName, ParamValue);
+ }
+ }
+ return element;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h
new file mode 100644
index 0000000..d046888
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h
@@ -0,0 +1,275 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ XMLwrapper.h - XML wrapper
+ Copyright (C) 2003-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2009 Mark McCurry
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#if 1
+#include "QtXmlWrapper.h"
+#else
+#include <mxml.h>
+#include <string>
+#ifndef float
+#define float float
+#endif
+
+#ifndef XML_WRAPPER_H
+#define XML_WRAPPER_H
+
+/**Mxml wrapper*/
+class XMLwrapper
+{
+ public:
+ /**
+ * Constructor.
+ * Will Construct the object and fill in top level branch
+ * */
+ XMLwrapper();
+
+ /**Destructor*/
+ ~XMLwrapper();
+
+ /**
+ * Saves the XML to a file.
+ * @param filename the name of the destination file.
+ * @returns 0 if ok or -1 if the file cannot be saved.
+ */
+ int saveXMLfile(const std::string &filename) const;
+
+ /**
+ * Return XML tree as a string.
+ * Note: The string must be freed with free() to deallocate
+ * @returns a newly allocated NULL terminated string of the XML data.
+ */
+ char *getXMLdata() const;
+
+ /**
+ * Add simple parameter.
+ * @param name The name of the mXML node.
+ * @param val The string value of the mXml node
+ */
+ void addpar(const std::string &name, int val);
+
+ /**
+ * Adds a realtype parameter.
+ * @param name The name of the mXML node.
+ * @param val The float value of the node.
+ */
+ void addparreal(const std::string &name, float val);
+
+ /**
+ * Add boolean parameter.
+ * \todo Fix this reverse boolean logic.
+ * @param name The name of the mXML node.
+ * @param val The boolean value of the node (0->"yes";else->"no").
+ */
+ void addparbool(const std::string &name, int val);
+
+ /**
+ * Add string parameter.
+ * @param name The name of the mXML node.
+ * @param val The string value of the node.
+ */
+ void addparstr(const std::string &name, const std::string &val);
+
+ /**
+ * Create a new branch.
+ * @param name Name of new branch
+ * @see void endbranch()
+ */
+ void beginbranch(const std::string &name);
+ /**
+ * Create a new branch.
+ * @param name Name of new branch
+ * @param id "id" value of branch
+ * @see void endbranch()
+ */
+ void beginbranch(const std::string &name, int id);
+
+ /**Closes new branches.
+ * This must be called to exit each branch created by beginbranch( ).
+ * @see void beginbranch(const std::string &name)
+ * @see void beginbranch(const std::string &name, int id)
+ */
+ void endbranch();
+
+ /**
+ * Loads file into XMLwrapper.
+ * @param filename file to be loaded
+ * @returns 0 if ok or -1 if the file cannot be loaded
+ */
+ int loadXMLfile(const std::string &filename);
+
+ /**
+ * Loads string into XMLwrapper.
+ * @param xmldata NULL terminated string of XML data.
+ * @returns true if successful.
+ */
+ bool putXMLdata(const char *xmldata);
+
+ /**
+ * Enters the branch.
+ * @param name Name of branch.
+ * @returns 1 if is ok, or 0 otherwise.
+ */
+ int enterbranch(const std::string &name);
+
+ /**
+ * Enter into the branch \c name with id \c id.
+ * @param name Name of branch.
+ * @param id Value of branch's "id".
+ * @returns 1 if is ok, or 0 otherwise.
+ */
+ int enterbranch(const std::string &name, int id);
+
+ /**Exits from a branch*/
+ void exitbranch();
+
+ /**Get the the branch_id and limits it between the min and max.
+ * if min==max==0, it will not limit it
+ * if there isn't any id, will return min
+ * this must be called only imediately after enterbranch()
+ */
+ int getbranchid(int min, int max) const;
+
+ /**
+ * Returns the integer value stored in node name.
+ * It returns the integer value between the limits min and max.
+ * If min==max==0, then the value will not be limited.
+ * If there is no location named name, then defaultpar will be returned.
+ * @param name The parameter name.
+ * @param defaultpar The default value if the real value is not found.
+ * @param min The minimum return value.
+ * @param max The maximum return value.
+ */
+ int getpar(const std::string &name, int defaultpar, int min,
+ int max) const;
+
+ /**
+ * Returns the integer value stored in the node with range [0,127].
+ * @param name The parameter name.
+ * @param defaultpar The default value if the real value is not found.
+ */
+ int getpar127(const std::string &name, int defaultpar) const;
+
+ /**
+ * Returns the boolean value stored in the node.
+ * @param name The parameter name.
+ * @param defaultpar The default value if the real value is not found.
+ */
+ int getparbool(const std::string &name, int defaultpar) const;
+
+ /**
+ * Get the string value stored in the node.
+ * @param name The parameter name.
+ * @param par Pointer to destination string
+ * @param maxstrlen Max string length for destination
+ */
+ void getparstr(const std::string &name, char *par, int maxstrlen) const;
+
+ /**
+ * Get the string value stored in the node.
+ * @param name The parameter name.
+ * @param defaultpar The default value if the real value is not found.
+ */
+ std::string getparstr(const std::string &name,
+ const std::string &defaultpar) const;
+
+ /**
+ * Returns the real value stored in the node.
+ * @param name The parameter name.
+ * @param defaultpar The default value if the real value is not found.
+ */
+ float getparreal(const char *name, float defaultpar) const;
+
+ /**
+ * Returns the real value stored in the node.
+ * @param name The parameter name.
+ * @param defaultpar The default value if the real value is not found.
+ * @param min The minimum value
+ * @param max The maximum value
+ */
+ float getparreal(const char *name,
+ float defaultpar,
+ float min,
+ float max) const;
+
+ bool minimal; /**<false if all parameters will be stored (used only for clipboard)*/
+
+ /**
+ * Sets the current tree's PAD Synth usage
+ */
+ void setPadSynth(bool enabled);
+ /**
+ * Checks the current tree for PADsynth usage
+ */
+ bool hasPadSynth() const;
+
+ private:
+
+ /**
+ * Save the file.
+ * @param filename File to save to
+ * @param compression Level of gzip compression
+ * @param xmldata String to be saved
+ */
+ int dosavefile(const char *filename,
+ int compression,
+ const char *xmldata) const;
+
+ /**
+ * Loads specified file and returns data.
+ *
+ * Will load a gziped file or an uncompressed file.
+ * @param filename the file
+ * @return The decompressed data
+ */
+ char *doloadfile(const std::string &filename) const;
+
+ mxml_node_t *tree; /**<all xml data*/
+ mxml_node_t *root; /**<xml data used by zynaddsubfx*/
+ mxml_node_t *node; /**<current subtree in parsing or writing */
+ mxml_node_t *info; /**<Node used to store the information about the data*/
+
+ /**
+ * Create mxml_node_t with specified name and parameters
+ *
+ * Results should look like:
+ * <name optionalParam1="value1" optionalParam2="value2" ...>
+ *
+ * @param name The name of the xml node
+ * @param params The number of the attributes
+ * @param ... const char * pairs that are in the format attribute_name,
+ * attribute_value
+ */
+ mxml_node_t *addparams(const char *name, unsigned int params,
+ ...) const;
+
+ /**@todo keep these numbers up to date*/
+ struct {
+ int Major; /**<major version number.*/
+ int Minor; /**<minor version number.*/
+ int Revision; /**<version revision number.*/
+ } version;
+};
+
+#endif
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.cpp
new file mode 100644
index 0000000..434e2fb
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.cpp
@@ -0,0 +1,366 @@
+/*
+ AlsaEngine.cpp
+
+ Copyright 2009, Alan Calvert
+ 2010, Mark McCurry
+
+ This file is part of ZynAddSubFX, which 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 3 of the License, or (at your option) any later version.
+
+ ZynAddSubFX is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with ZynAddSubFX. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <iostream>
+#include <cmath>
+
+using namespace std;
+
+#include "../Misc/Util.h"
+#include "../Misc/Config.h"
+#include "InMgr.h"
+#include "AlsaEngine.h"
+
+AlsaEngine::AlsaEngine()
+ :AudioOut()
+{
+ audio.buffer = new short[synth->buffersize * 2];
+ name = "ALSA";
+ audio.handle = NULL;
+
+ midi.handle = NULL;
+ midi.alsaId = -1;
+ midi.pThread = 0;
+}
+
+AlsaEngine::~AlsaEngine()
+{
+ Stop();
+ delete[] audio.buffer;
+}
+
+void *AlsaEngine::_AudioThread(void *arg)
+{
+ return (static_cast<AlsaEngine *>(arg))->AudioThread();
+}
+
+void *AlsaEngine::AudioThread()
+{
+ set_realtime();
+ return processAudio();
+}
+
+bool AlsaEngine::Start()
+{
+ return openAudio() && openMidi();
+}
+
+void AlsaEngine::Stop()
+{
+ if(getMidiEn())
+ setMidiEn(false);
+ if(getAudioEn())
+ setAudioEn(false);
+ snd_config_update_free_global();
+}
+
+void AlsaEngine::setMidiEn(bool nval)
+{
+ if(nval)
+ openMidi();
+ else
+ stopMidi();
+}
+
+bool AlsaEngine::getMidiEn() const
+{
+ return midi.handle;
+}
+
+void AlsaEngine::setAudioEn(bool nval)
+{
+ if(nval)
+ openAudio();
+ else
+ stopAudio();
+}
+
+bool AlsaEngine::getAudioEn() const
+{
+ return audio.handle;
+}
+
+void *AlsaEngine::_MidiThread(void *arg)
+{
+ return static_cast<AlsaEngine *>(arg)->MidiThread();
+}
+
+
+void *AlsaEngine::MidiThread(void)
+{
+ snd_seq_event_t *event;
+ MidiEvent ev;
+ set_realtime();
+ while(snd_seq_event_input(midi.handle, &event) > 0) {
+ //ensure ev is empty
+ ev.channel = 0;
+ ev.num = 0;
+ ev.value = 0;
+ ev.type = 0;
+
+ if(!event)
+ continue;
+ switch(event->type) {
+ case SND_SEQ_EVENT_NOTEON:
+ if(event->data.note.note) {
+ ev.type = M_NOTE;
+ ev.channel = event->data.note.channel;
+ ev.num = event->data.note.note;
+ ev.value = event->data.note.velocity;
+ InMgr::getInstance().putEvent(ev);
+ }
+ break;
+
+ case SND_SEQ_EVENT_NOTEOFF:
+ ev.type = M_NOTE;
+ ev.channel = event->data.note.channel;
+ ev.num = event->data.note.note;
+ ev.value = 0;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case SND_SEQ_EVENT_KEYPRESS:
+ ev.type = M_PRESSURE;
+ ev.channel = event->data.note.channel;
+ ev.num = event->data.note.note;
+ ev.value = event->data.note.velocity;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case SND_SEQ_EVENT_PITCHBEND:
+ ev.type = M_CONTROLLER;
+ ev.channel = event->data.control.channel;
+ ev.num = C_pitchwheel;
+ ev.value = event->data.control.value;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case SND_SEQ_EVENT_CONTROLLER:
+ ev.type = M_CONTROLLER;
+ ev.channel = event->data.control.channel;
+ ev.num = event->data.control.param;
+ ev.value = event->data.control.value;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case SND_SEQ_EVENT_PGMCHANGE:
+ ev.type = M_PGMCHANGE;
+ ev.channel = event->data.control.channel;
+ ev.num = event->data.control.value;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case SND_SEQ_EVENT_RESET: // reset to power-on state
+ ev.type = M_CONTROLLER;
+ ev.channel = event->data.control.channel;
+ ev.num = C_resetallcontrollers;
+ ev.value = 0;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case SND_SEQ_EVENT_PORT_SUBSCRIBED: // ports connected
+ if(true)
+ cout << "Info, alsa midi port connected" << endl;
+ break;
+
+ case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: // ports disconnected
+ if(true)
+ cout << "Info, alsa midi port disconnected" << endl;
+ break;
+
+ case SND_SEQ_EVENT_SYSEX: // system exclusive
+ case SND_SEQ_EVENT_SENSING: // midi device still there
+ break;
+
+ default:
+ if(true)
+ cout << "Info, other non-handled midi event, type: "
+ << (int)event->type << endl;
+ break;
+ }
+ snd_seq_free_event(event);
+ }
+ return NULL;
+}
+
+bool AlsaEngine::openMidi()
+{
+ if(getMidiEn())
+ return true;
+
+ int alsaport;
+ midi.handle = NULL;
+
+ if(snd_seq_open(&midi.handle, "default", SND_SEQ_OPEN_INPUT, 0) != 0)
+ return false;
+
+ snd_seq_set_client_name(midi.handle, "ZynAddSubFX");
+
+ alsaport = snd_seq_create_simple_port(
+ midi.handle,
+ "ZynAddSubFX",
+ SND_SEQ_PORT_CAP_WRITE
+ | SND_SEQ_PORT_CAP_SUBS_WRITE,
+ SND_SEQ_PORT_TYPE_SYNTH);
+ if(alsaport < 0)
+ return false;
+
+ pthread_attr_t attr;
+
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ pthread_create(&midi.pThread, &attr, _MidiThread, this);
+ return true;
+}
+
+void AlsaEngine::stopMidi()
+{
+ if(!getMidiEn())
+ return;
+
+ snd_seq_t *handle = midi.handle;
+ if((NULL != midi.handle) && midi.pThread)
+ pthread_cancel(midi.pThread);
+ midi.handle = NULL;
+ if(handle)
+ snd_seq_close(handle);
+}
+
+short *AlsaEngine::interleave(const Stereo<float *> &smps)
+{
+ /**\todo TODO fix repeated allocation*/
+ short *shortInterleaved = audio.buffer;
+ memset(shortInterleaved, 0, bufferSize * 2 * sizeof(short));
+ int idx = 0; //possible off by one error here
+ double scaled;
+ for(int frame = 0; frame < bufferSize; ++frame) { // with a nod to libsamplerate ...
+ scaled = smps.l[frame] * (8.0f * 0x10000000);
+ shortInterleaved[idx++] = (short int)(lrint(scaled) >> 16);
+ scaled = smps.r[frame] * (8.0f * 0x10000000);
+ shortInterleaved[idx++] = (short int)(lrint(scaled) >> 16);
+ }
+ return shortInterleaved;
+}
+
+bool AlsaEngine::openAudio()
+{
+ if(getAudioEn())
+ return true;
+
+ int rc = 0;
+ /* Open PCM device for playback. */
+ audio.handle = NULL;
+ rc = snd_pcm_open(&audio.handle, "hw:0",
+ SND_PCM_STREAM_PLAYBACK, 0);
+ if(rc < 0) {
+ fprintf(stderr,
+ "unable to open pcm device: %s\n",
+ snd_strerror(rc));
+ return false;
+ }
+
+ /* Allocate a hardware parameters object. */
+ snd_pcm_hw_params_alloca(&audio.params);
+
+ /* Fill it in with default values. */
+ snd_pcm_hw_params_any(audio.handle, audio.params);
+
+ /* Set the desired hardware parameters. */
+
+ /* Interleaved mode */
+ snd_pcm_hw_params_set_access(audio.handle, audio.params,
+ SND_PCM_ACCESS_RW_INTERLEAVED);
+
+ /* Signed 16-bit little-endian format */
+ snd_pcm_hw_params_set_format(audio.handle, audio.params,
+ SND_PCM_FORMAT_S16_LE);
+
+ /* Two channels (stereo) */
+ snd_pcm_hw_params_set_channels(audio.handle, audio.params, 2);
+
+ audio.sampleRate = synth->samplerate;
+ snd_pcm_hw_params_set_rate_near(audio.handle, audio.params,
+ &audio.sampleRate, NULL);
+
+ audio.frames = 512;
+ snd_pcm_hw_params_set_period_size_near(audio.handle,
+ audio.params, &audio.frames, NULL);
+
+ audio.periods = 4;
+ snd_pcm_hw_params_set_periods_near(audio.handle,
+ audio.params, &audio.periods, NULL);
+
+ /* Write the parameters to the driver */
+ rc = snd_pcm_hw_params(audio.handle, audio.params);
+ if(rc < 0) {
+ fprintf(stderr,
+ "unable to set hw parameters: %s\n",
+ snd_strerror(rc));
+ return false;
+ }
+
+ /* Set buffer size (in frames). The resulting latency is given by */
+ /* latency = periodsize * periods / (rate * bytes_per_frame) */
+ snd_pcm_hw_params_set_buffer_size(audio.handle,
+ audio.params,
+ synth->buffersize);
+
+ //snd_pcm_hw_params_get_period_size(audio.params, &audio.frames, NULL);
+ //snd_pcm_hw_params_get_period_time(audio.params, &val, NULL);
+
+
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+ pthread_create(&audio.pThread, &attr, _AudioThread, this);
+ return true;
+}
+
+void AlsaEngine::stopAudio()
+{
+ if(!getAudioEn())
+ return;
+
+ snd_pcm_t *handle = audio.handle;
+ audio.handle = NULL;
+ pthread_join(audio.pThread, NULL);
+ snd_pcm_drain(handle);
+ if(snd_pcm_close(handle))
+ cout << "Error: in snd_pcm_close " << __LINE__ << ' ' << __FILE__
+ << endl;
+}
+
+void *AlsaEngine::processAudio()
+{
+ while(audio.handle) {
+ audio.buffer = interleave(getNext());
+ snd_pcm_t *handle = audio.handle;
+ int rc = snd_pcm_writei(handle, audio.buffer, synth->buffersize);
+ if(rc == -EPIPE) {
+ /* EPIPE means underrun */
+ cerr << "underrun occurred" << endl;
+ snd_pcm_prepare(handle);
+ }
+ else
+ if(rc < 0)
+ cerr << "error from writei: " << snd_strerror(rc) << endl;
+ }
+ return NULL;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h
new file mode 100644
index 0000000..0b9cc3c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h
@@ -0,0 +1,82 @@
+/*
+ AlsaEngine.h
+
+ Copyright 2009, Alan Calvert
+ 2010, Mark McCurry
+
+ This file is part of ZynAddSubFX, which 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 3 of the License, or (at your option) any later version.
+
+ ZynAddSubFX is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with ZynAddSubFX. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef ALSA_ENGINE_H
+#define ALSA_ENGINE_H
+
+#include <pthread.h>
+#include <string>
+#include <alsa/asoundlib.h>
+#include <queue>
+
+#include "AudioOut.h"
+#include "MidiIn.h"
+#include "OutMgr.h"
+#include "../Misc/Stereo.h"
+
+class AlsaEngine:public AudioOut, MidiIn
+{
+ public:
+ AlsaEngine();
+ ~AlsaEngine();
+
+ bool Start();
+ void Stop();
+
+ void setAudioEn(bool nval);
+ bool getAudioEn() const;
+ void setMidiEn(bool nval);
+ bool getMidiEn() const;
+
+ protected:
+ void *AudioThread();
+ static void *_AudioThread(void *arg);
+ void *MidiThread();
+ static void *_MidiThread(void *arg);
+
+ private:
+ bool openMidi();
+ void stopMidi();
+ bool openAudio();
+ void stopAudio();
+
+ short *interleave(const Stereo<float *> &smps);
+
+ struct {
+ std::string device;
+ snd_seq_t *handle;
+ int alsaId;
+ pthread_t pThread;
+ } midi;
+
+ struct {
+ snd_pcm_t *handle;
+ snd_pcm_hw_params_t *params;
+ unsigned int sampleRate;
+ snd_pcm_uframes_t frames;
+ unsigned int periods;
+ short *buffer;
+ pthread_t pThread;
+ } audio;
+
+ void *processAudio();
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp
new file mode 100644
index 0000000..8c4f2d4
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp
@@ -0,0 +1,58 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ AudioOut.h - Audio Output superclass
+ Copyright (C) 2009-2010 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <iostream>
+#include <cstring>
+#include "SafeQueue.h"
+
+using namespace std;
+
+#include "OutMgr.h"
+#include "../Misc/Master.h"
+#include "AudioOut.h"
+
+AudioOut::AudioOut()
+ :samplerate(synth->samplerate), bufferSize(synth->buffersize)
+{}
+
+AudioOut::~AudioOut()
+{}
+
+void AudioOut::setSamplerate(int _samplerate)
+{
+ samplerate = _samplerate;
+}
+
+int AudioOut::getSampleRate()
+{
+ return samplerate;
+}
+
+void AudioOut::setBufferSize(int _bufferSize)
+{
+ bufferSize = _bufferSize;
+}
+
+const Stereo<float *> AudioOut::getNext()
+{
+ return OutMgr::getInstance().tick(bufferSize);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h
new file mode 100644
index 0000000..f8e1a97
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h
@@ -0,0 +1,61 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ AudioOut.h - Audio Output superclass
+ Copyright (C) 2009-2010 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef AUDIO_OUT_H
+#define AUDIO_OUT_H
+
+#include "../Misc/Stereo.h"
+#include "../globals.h"
+#include "Engine.h"
+
+class AudioOut:public virtual Engine
+{
+ public:
+ AudioOut();
+ virtual ~AudioOut();
+
+ /**Sets the Sample Rate of this Output
+ * (used for getNext()).*/
+ void setSamplerate(int _samplerate);
+
+ /**Sets the Samples required per Out of this driver
+ * not a realtime opperation */
+ int getSampleRate();
+ void setBufferSize(int _bufferSize);
+
+ /**Sets the Frame Size for output*/
+ void bufferingSize(int nBuffering);
+ int bufferingSize();
+
+ virtual void setAudioEn(bool nval) = 0;
+ virtual bool getAudioEn() const = 0;
+
+ protected:
+ /**Get the next sample for output.
+ * (has nsamples sampled at a rate of samplerate)*/
+ const Stereo<float *> getNext();
+
+ int samplerate;
+ int bufferSize;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/CMakeLists.txt
new file mode 100644
index 0000000..9386610
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/CMakeLists.txt
@@ -0,0 +1,47 @@
+#Defaults:
+# - Wave Output (enabled with the record function)
+# - Null Output
+# - Null Output Running by default
+# - Managed with OutMgr
+set(zynaddsubfx_nio_SRCS
+ WavEngine.cpp
+ NulEngine.cpp
+ AudioOut.cpp
+ MidiIn.cpp
+ OutMgr.cpp
+ InMgr.cpp
+ Engine.cpp
+ EngineMgr.cpp
+ Nio.cpp
+ )
+
+set(zynaddsubfx_nio_lib )
+
+add_definitions(-DOUT_DEFAULT="${DefaultOutput}")
+add_definitions(-DIN_DEFAULT="${DefaultInput}")
+
+if(JackEnable)
+ include_directories(${JACK_INCLUDE_DIR})
+ list(APPEND zynaddsubfx_nio_SRCS JackEngine.cpp)
+ list(APPEND zynaddsubfx_nio_lib ${JACK_LIBRARIES})
+endif(JackEnable)
+
+if(PaEnable)
+ include_directories(${PORTAUDIO_INCLUDE_DIR})
+ list(APPEND zynaddsubfx_nio_SRCS PaEngine.cpp)
+ list(APPEND zynaddsubfx_nio_lib ${PORTAUDIO_LIBRARIES})
+endif(PaEnable)
+
+if(AlsaEnable)
+ list(APPEND zynaddsubfx_nio_SRCS AlsaEngine.cpp)
+ list(APPEND zynaddsubfx_nio_lib ${ASOUND_LIBRARY})
+endif(AlsaEnable)
+
+if(OssEnable)
+ list(APPEND zynaddsubfx_nio_SRCS OssEngine.cpp)
+endif(OssEnable)
+
+
+add_library(zynaddsubfx_nio STATIC
+ ${zynaddsubfx_nio_SRCS}
+ )
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp
new file mode 100644
index 0000000..5e846b7
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp
@@ -0,0 +1,28 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Engine.cpp - Audio Driver base class
+ Copyright (C) 2009-2010 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include "Engine.h"
+
+Engine::Engine()
+{}
+
+Engine::~Engine()
+{}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h
new file mode 100644
index 0000000..9de4422
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h
@@ -0,0 +1,41 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Engine.h - Audio Driver base class
+ Copyright (C) 2009-2010 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef ENGINE_H
+#define ENGINE_H
+#include <string>
+/**Marker for input/output driver*/
+class Engine
+{
+ public:
+ Engine();
+ virtual ~Engine();
+
+ /**Start the Driver with all capabilities
+ * @return true on success*/
+ virtual bool Start() = 0;
+ /**Completely stop the Driver*/
+ virtual void Stop() = 0;
+
+ std::string name;
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.cpp
new file mode 100644
index 0000000..ee8f7b9
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.cpp
@@ -0,0 +1,156 @@
+#include "EngineMgr.h"
+#include <algorithm>
+#include <iostream>
+#include "Nio.h"
+#include "InMgr.h"
+#include "OutMgr.h"
+#include "AudioOut.h"
+#include "MidiIn.h"
+#include "NulEngine.h"
+#if OSS
+#include "OssEngine.h"
+#endif
+#if ALSA
+#include "AlsaEngine.h"
+#endif
+#if JACK
+#include "JackEngine.h"
+#endif
+#if PORTAUDIO
+#include "PaEngine.h"
+#endif
+
+using namespace std;
+
+EngineMgr &EngineMgr::getInstance()
+{
+ static EngineMgr instance;
+ return instance;
+}
+
+EngineMgr::EngineMgr()
+{
+ Engine *defaultEng = new NulEngine();
+
+ //conditional compiling mess (but contained)
+ engines.push_back(defaultEng);
+#if OSS
+ engines.push_back(new OssEngine());
+#endif
+#if ALSA
+ engines.push_back(new AlsaEngine());
+#endif
+#if JACK
+ engines.push_back(new JackEngine());
+#endif
+#if PORTAUDIO
+ engines.push_back(new PaEngine());
+#endif
+
+ defaultOut = dynamic_cast<AudioOut *>(defaultEng);
+
+ defaultIn = dynamic_cast<MidiIn *>(defaultEng);
+
+ //Accept command line/compile time options
+ if(!Nio::defaultSink.empty())
+ setOutDefault(Nio::defaultSink);
+
+ if(!Nio::defaultSource.empty())
+ setInDefault(Nio::defaultSource);
+}
+
+EngineMgr::~EngineMgr()
+{
+ for(list<Engine *>::iterator itr = engines.begin();
+ itr != engines.end(); ++itr)
+ delete *itr;
+}
+
+Engine *EngineMgr::getEng(string name)
+{
+ transform(name.begin(), name.end(), name.begin(), ::toupper);
+ for(list<Engine *>::iterator itr = engines.begin();
+ itr != engines.end(); ++itr)
+ if((*itr)->name == name)
+ return *itr;
+ return NULL;
+}
+
+bool EngineMgr::start()
+{
+ bool expected = true;
+ if(!(defaultOut && defaultIn)) {
+ cerr << "ERROR: It looks like someone broke the Nio Output\n"
+ << " Attempting to recover by defaulting to the\n"
+ << " Null Engine." << endl;
+ defaultOut = dynamic_cast<AudioOut *>(getEng("NULL"));
+ defaultIn = dynamic_cast<MidiIn *>(getEng("NULL"));
+ }
+
+ OutMgr::getInstance(). currentOut = defaultOut;
+ InMgr::getInstance(). current = defaultIn;
+
+ //open up the default output(s)
+ cout << "Starting Audio: " << defaultOut->name << endl;
+ defaultOut->setAudioEn(true);
+ if(defaultOut->getAudioEn())
+ cout << "Audio Started" << endl;
+ else {
+ expected = false;
+ cerr << "ERROR: The default audio output failed to open!" << endl;
+ OutMgr::getInstance(). currentOut =
+ dynamic_cast<AudioOut *>(getEng("NULL"));
+ OutMgr::getInstance(). currentOut->setAudioEn(true);
+ }
+
+ cout << "Starting MIDI: " << defaultIn->name << endl;
+ defaultIn->setMidiEn(true);
+ if(defaultIn->getMidiEn())
+ cout << "MIDI Started" << endl;
+ else { //recover
+ expected = false;
+ cerr << "ERROR: The default MIDI input failed to open!" << endl;
+ InMgr::getInstance(). current = dynamic_cast<MidiIn *>(getEng("NULL"));
+ InMgr::getInstance(). current->setMidiEn(true);
+ }
+
+ //Show if expected drivers were booted
+ return expected;
+}
+
+void EngineMgr::stop()
+{
+ for(list<Engine *>::iterator itr = engines.begin();
+ itr != engines.end(); ++itr)
+ (*itr)->Stop();
+}
+
+bool EngineMgr::setInDefault(string name)
+{
+ MidiIn *chosen;
+ if((chosen = dynamic_cast<MidiIn *>(getEng(name)))) { //got the input
+ defaultIn = chosen;
+ return true;
+ }
+
+ //Warn user
+ cerr << "Error: " << name << " is not a recognized MIDI input source"
+ << endl;
+ cerr << " Defaulting to the NULL input source" << endl;
+
+ return false;
+}
+
+bool EngineMgr::setOutDefault(string name)
+{
+ AudioOut *chosen;
+ if((chosen = dynamic_cast<AudioOut *>(getEng(name)))) { //got the output
+ defaultOut = chosen;
+ return true;
+ }
+
+ //Warn user
+ cerr << "Error: " << name << " is not a recognized audio backend" << endl;
+ cerr << " Defaulting to the NULL audio backend" << endl;
+ return false;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.h
new file mode 100644
index 0000000..4d56d29
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/EngineMgr.h
@@ -0,0 +1,43 @@
+#ifndef ENGINE_MGR_H
+#define ENGINE_MGR_H
+
+#include <list>
+#include <string>
+#include "Engine.h"
+
+
+class MidiIn;
+class AudioOut;
+class OutMgr;
+/**Container/Owner of the long lived Engines*/
+class EngineMgr
+{
+ public:
+ static EngineMgr &getInstance();
+ ~EngineMgr();
+
+ /**Gets requested engine
+ * @param name case unsensitive name of engine
+ * @return pointer to Engine or NULL
+ */
+ Engine *getEng(std::string name);
+
+ /**Start up defaults*/
+ bool start();
+
+ /**Stop all engines*/
+ void stop();
+
+ std::list<Engine *> engines;
+
+ //return false on failure
+ bool setInDefault(std::string name);
+ bool setOutDefault(std::string name);
+
+ //default I/O
+ AudioOut *defaultOut;
+ MidiIn *defaultIn;
+ private:
+ EngineMgr();
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp
new file mode 100644
index 0000000..441a6dc
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.cpp
@@ -0,0 +1,141 @@
+#include "InMgr.h"
+#include "MidiIn.h"
+#include "EngineMgr.h"
+#include "../Misc/Master.h"
+#include <iostream>
+
+using namespace std;
+
+ostream &operator<<(ostream &out, const MidiEvent &ev)
+{
+ switch(ev.type) {
+ case M_NOTE:
+ out << "MidiNote: note(" << ev.num << ")\n"
+ << " channel(" << ev.channel << ")\n"
+ << " velocity(" << ev.value << ")";
+ break;
+
+ case M_CONTROLLER:
+ out << "MidiCtl: controller(" << ev.num << ")\n"
+ << " channel(" << ev.channel << ")\n"
+ << " value(" << ev.value << ")";
+ break;
+
+ case M_PGMCHANGE:
+ out << "PgmChange: program(" << ev.num << ")\n"
+ << " channel(" << ev.channel << ")";
+ break;
+ }
+
+ return out;
+}
+
+MidiEvent::MidiEvent()
+ :channel(0), type(0), num(0), value(0), time(0)
+{}
+
+InMgr &InMgr::getInstance()
+{
+ static InMgr instance;
+ return instance;
+}
+
+InMgr::InMgr()
+ :queue(100), master(Master::getInstance())
+{
+ current = NULL;
+ work.init(PTHREAD_PROCESS_PRIVATE, 0);
+}
+
+InMgr::~InMgr()
+{
+ //lets stop the consumer thread
+}
+
+void InMgr::putEvent(MidiEvent ev)
+{
+ if(queue.push(ev)) //check for error
+ cerr << "ERROR: Midi Ringbuffer is FULL" << endl;
+ else
+ work.post();
+}
+
+void InMgr::flush(unsigned frameStart, unsigned frameStop)
+{
+ MidiEvent ev;
+ while(!work.trywait()) {
+ queue.peak(ev);
+ if(ev.time < (int)frameStart || ev.time > (int)frameStop) {
+ //Back out of transaction
+ work.post();
+ //printf("%d vs [%d..%d]\n",ev.time, frameStart, frameStop);
+ break;
+ }
+ queue.pop(ev);
+ //cout << ev << endl;
+
+ switch(ev.type) {
+ case M_NOTE:
+ dump.dumpnote(ev.channel, ev.num, ev.value);
+
+ if(ev.value)
+ master.noteOn(ev.channel, ev.num, ev.value);
+ else
+ master.noteOff(ev.channel, ev.num);
+ break;
+
+ case M_CONTROLLER:
+ dump.dumpcontroller(ev.channel, ev.num, ev.value);
+ master.setController(ev.channel, ev.num, ev.value);
+ break;
+
+ case M_PGMCHANGE:
+ master.setProgram(ev.channel, ev.num);
+ break;
+ case M_PRESSURE:
+ master.polyphonicAftertouch(ev.channel, ev.num, ev.value);
+ break;
+ }
+ }
+}
+
+bool InMgr::empty(void) const
+{
+ int semvalue = work.getvalue();
+ return semvalue <= 0;
+}
+
+bool InMgr::setSource(string name)
+{
+ MidiIn *src = getIn(name);
+
+ if(!src)
+ return false;
+
+ if(current)
+ current->setMidiEn(false);
+ current = src;
+ current->setMidiEn(true);
+
+ bool success = current->getMidiEn();
+
+ //Keep system in a valid state (aka with a running driver)
+ if(!success)
+ (current = getIn("NULL"))->setMidiEn(true);
+
+ return success;
+}
+
+string InMgr::getSource() const
+{
+ if(current)
+ return current->name;
+ else
+ return "ERROR";
+}
+
+MidiIn *InMgr::getIn(string name)
+{
+ EngineMgr &eng = EngineMgr::getInstance();
+ return dynamic_cast<MidiIn *>(eng.getEng(name));
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h
new file mode 100644
index 0000000..abaf925
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/InMgr.h
@@ -0,0 +1,55 @@
+#ifndef INMGR_H
+#define INMGR_H
+
+#include <string>
+#include "ZynSema.h"
+#include "SafeQueue.h"
+
+enum midi_type {
+ M_NOTE = 1,
+ M_CONTROLLER = 2,
+ M_PGMCHANGE = 3,
+ M_PRESSURE = 4
+}; //type=1 for note, type=2 for controller, type=3 for program change
+//type=4 for polyphonic aftertouch
+
+struct MidiEvent {
+ MidiEvent();
+ int channel; //the midi channel for the event
+ int type; //type=1 for note, type=2 for controller
+ int num; //note, controller or program number
+ int value; //velocity or controller value
+ int time; //time offset of event (used only in jack->jack case at the moment)
+};
+
+//super simple class to manage the inputs
+class InMgr
+{
+ public:
+ static InMgr &getInstance();
+ ~InMgr();
+
+ void putEvent(MidiEvent ev);
+
+ /**Flush the Midi Queue*/
+ void flush(unsigned frameStart, unsigned frameStop);
+
+ bool empty() const;
+
+ bool setSource(std::string name);
+
+ std::string getSource() const;
+
+ friend class EngineMgr;
+ private:
+ InMgr();
+ class MidiIn *getIn(std::string name);
+ SafeQueue<MidiEvent> queue;
+ mutable ZynSema work;
+ class MidiIn * current;
+
+ /**the link to the rest of zyn*/
+ class Master & master;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp
new file mode 100644
index 0000000..1201024
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp
@@ -0,0 +1,406 @@
+/*
+ JackEngine.cpp
+
+ Copyright 2009, Alan Calvert
+
+ This file is part of yoshimi, which 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 3 of the License, or (at your option) any later version.
+
+ yoshimi is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with yoshimi. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <iostream>
+
+#include <jack/midiport.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <cassert>
+#include <cstring>
+
+#include "Nio.h"
+#include "InMgr.h"
+
+#include "JackEngine.h"
+
+using namespace std;
+
+extern char *instance_name;
+
+JackEngine::JackEngine()
+ :AudioOut(), jackClient(NULL)
+{
+ name = "JACK";
+ audio.jackSamplerate = 0;
+ audio.jackNframes = 0;
+ for(int i = 0; i < 2; ++i) {
+ audio.ports[i] = NULL;
+ audio.portBuffs[i] = NULL;
+ }
+ midi.inport = NULL;
+ midi.jack_sync = false;
+}
+
+bool JackEngine::connectServer(string server)
+{
+ bool autostart_jack = true;
+ if(jackClient)
+ return true;
+
+ string clientname = "zynaddsubfx";
+ string postfix = Nio::getPostfix();
+ if(!postfix.empty())
+ clientname += "_" + postfix;
+ jack_status_t jackstatus;
+ bool use_server_name = server.size() && server.compare("default") != 0;
+ jack_options_t jopts = (jack_options_t)
+ (((!instance_name
+ && use_server_name) ? JackServerName :
+ JackNullOption)
+ | ((autostart_jack) ? JackNullOption :
+ JackNoStartServer));
+
+ if(instance_name)
+ jackClient = jack_client_open(instance_name, jopts, &jackstatus);
+ else {
+ if(use_server_name)
+ jackClient = jack_client_open(
+ clientname.c_str(), jopts, &jackstatus,
+ server.c_str());
+ else
+ jackClient = jack_client_open(
+ clientname.c_str(), jopts, &jackstatus);
+ }
+
+
+ if(NULL != jackClient)
+ return true;
+ else
+ cerr << "Error, failed to open jack client on server: " << server
+ << " status " << jackstatus << endl;
+ return false;
+}
+
+bool JackEngine::connectJack()
+{
+ connectServer("");
+ if(NULL != jackClient) {
+ setBufferSize(jack_get_buffer_size(jackClient));
+ int chk;
+ jack_set_error_function(_errorCallback);
+ jack_set_info_function(_infoCallback);
+ if(jack_set_buffer_size_callback(jackClient, _bufferSizeCallback, this))
+ cerr << "Error setting the bufferSize callback" << endl;
+ if((chk = jack_set_xrun_callback(jackClient, _xrunCallback, this)))
+ cerr << "Error setting jack xrun callback" << endl;
+ if(jack_set_process_callback(jackClient, _processCallback, this)) {
+ cerr << "Error, JackEngine failed to set process callback" << endl;
+ return false;
+ }
+ if(jack_activate(jackClient)) {
+ cerr << "Error, failed to activate jack client" << endl;
+ return false;
+ }
+
+ return true;
+ }
+ else
+ cerr << "Error, NULL jackClient through Start()" << endl;
+ return false;
+}
+
+void JackEngine::disconnectJack()
+{
+ if(jackClient) {
+ cout << "Deactivating and closing JACK client" << endl;
+
+ jack_deactivate(jackClient);
+ jack_client_close(jackClient);
+ jackClient = NULL;
+ }
+}
+
+bool JackEngine::Start()
+{
+ return openMidi() && openAudio();
+}
+
+void JackEngine::Stop()
+{
+ stopMidi();
+ stopAudio();
+}
+
+void JackEngine::setMidiEn(bool nval)
+{
+ if(nval)
+ openMidi();
+ else
+ stopMidi();
+}
+
+bool JackEngine::getMidiEn() const
+{
+ return midi.inport;
+}
+
+void JackEngine::setAudioEn(bool nval)
+{
+ if(nval)
+ openAudio();
+ else
+ stopAudio();
+}
+
+bool JackEngine::getAudioEn() const
+{
+ return audio.ports[0];
+}
+
+bool JackEngine::openAudio()
+{
+ if(getAudioEn())
+ return true;
+
+ if(!getMidiEn())
+ if(!connectJack())
+ return false;
+
+
+ const char *portnames[] = { "out_1", "out_2" };
+ for(int port = 0; port < 2; ++port)
+ audio.ports[port] = jack_port_register(
+ jackClient,
+ portnames[port],
+ JACK_DEFAULT_AUDIO_TYPE,
+ JackPortIsOutput
+ | JackPortIsTerminal,
+ 0);
+ if((NULL != audio.ports[0]) && (NULL != audio.ports[1])) {
+ audio.jackSamplerate = jack_get_sample_rate(jackClient);
+ audio.jackNframes = jack_get_buffer_size(jackClient);
+ samplerate = audio.jackSamplerate;
+ bufferSize = audio.jackNframes;
+
+
+ //Attempt to autoConnect when specified
+ if(Nio::autoConnect) {
+ const char **outPorts = jack_get_ports(
+ jackClient,
+ NULL,
+ NULL,
+ JackPortIsPhysical
+ | JackPortIsInput);
+ if(outPorts != NULL) {
+ //Verify that stereo is available
+ assert(outPorts[0]);
+ assert(outPorts[1]);
+
+ //Connect to physical outputs
+ jack_connect(jackClient, jack_port_name(
+ audio.ports[0]), outPorts[0]);
+ jack_connect(jackClient, jack_port_name(
+ audio.ports[1]), outPorts[1]);
+ }
+ else
+ cerr << "Warning, No outputs to autoconnect to" << endl;
+ }
+ midi.jack_sync = true;
+ return true;
+ }
+ else
+ cerr << "Error, failed to register jack audio ports" << endl;
+ midi.jack_sync = false;
+ return false;
+}
+
+void JackEngine::stopAudio()
+{
+ for(int i = 0; i < 2; ++i) {
+ jack_port_t *port = audio.ports[i];
+ audio.ports[i] = NULL;
+ if(NULL != port)
+ jack_port_unregister(jackClient, port);
+ }
+ midi.jack_sync = false;
+ if(!getMidiEn())
+ disconnectJack();
+}
+
+bool JackEngine::openMidi()
+{
+ if(getMidiEn())
+ return true;
+ if(!getAudioEn())
+ if(!connectJack())
+ return false;
+
+ midi.inport = jack_port_register(jackClient, "midi_input",
+ JACK_DEFAULT_MIDI_TYPE,
+ JackPortIsInput | JackPortIsTerminal, 0);
+ return midi.inport;
+}
+
+void JackEngine::stopMidi()
+{
+ jack_port_t *port = midi.inport;
+ midi.inport = NULL;
+ if(port)
+ jack_port_unregister(jackClient, port);
+
+ if(!getAudioEn())
+ disconnectJack();
+}
+
+int JackEngine::clientId()
+{
+ if(NULL != jackClient)
+ return (long)jack_client_thread_id(jackClient);
+ else
+ return -1;
+}
+
+string JackEngine::clientName()
+{
+ if(NULL != jackClient)
+ return string(jack_get_client_name(jackClient));
+ else
+ cerr << "Error, clientName() with null jackClient" << endl;
+ return string("Oh, yoshimi :-(");
+}
+
+int JackEngine::_processCallback(jack_nframes_t nframes, void *arg)
+{
+ return static_cast<JackEngine *>(arg)->processCallback(nframes);
+}
+
+int JackEngine::processCallback(jack_nframes_t nframes)
+{
+ bool okaudio = true;
+
+ handleMidi(nframes);
+ if((NULL != audio.ports[0]) && (NULL != audio.ports[1]))
+ okaudio = processAudio(nframes);
+ return okaudio ? 0 : -1;
+}
+
+bool JackEngine::processAudio(jack_nframes_t nframes)
+{
+ for(int port = 0; port < 2; ++port) {
+ audio.portBuffs[port] =
+ (jsample_t *)jack_port_get_buffer(audio.ports[port], nframes);
+ if(NULL == audio.portBuffs[port]) {
+ cerr << "Error, failed to get jack audio port buffer: "
+ << port << endl;
+ return false;
+ }
+ }
+
+ Stereo<float *> smp = getNext();
+
+ //Assumes size of smp.l == nframes
+ memcpy(audio.portBuffs[0], smp.l, bufferSize * sizeof(float));
+ memcpy(audio.portBuffs[1], smp.r, bufferSize * sizeof(float));
+ return true;
+}
+
+int JackEngine::_xrunCallback(void *)
+{
+ cerr << "Jack reports xrun" << endl;
+ return 0;
+}
+
+void JackEngine::_errorCallback(const char *msg)
+{
+ cerr << "Jack reports error: " << msg << endl;
+}
+
+void JackEngine::_infoCallback(const char *msg)
+{
+ cerr << "Jack info message: " << msg << endl;
+}
+
+int JackEngine::_bufferSizeCallback(jack_nframes_t nframes, void *arg)
+{
+ return static_cast<JackEngine *>(arg)->bufferSizeCallback(nframes);
+}
+
+int JackEngine::bufferSizeCallback(jack_nframes_t nframes)
+{
+ cerr << "Jack buffer resized" << endl;
+ setBufferSize(nframes);
+ return 0;
+}
+
+void JackEngine::handleMidi(unsigned long frames)
+{
+ if(!midi.inport)
+ return;
+ void *midi_buf = jack_port_get_buffer(midi.inport, frames);
+ jack_midi_event_t jack_midi_event;
+ jack_nframes_t event_index = 0;
+ unsigned char *midi_data;
+ unsigned char type;
+
+ while(jack_midi_event_get(&jack_midi_event, midi_buf,
+ event_index++) == 0) {
+ MidiEvent ev;
+ midi_data = jack_midi_event.buffer;
+ type = midi_data[0] & 0xF0;
+ ev.channel = midi_data[0] & 0x0F;
+ ev.time = midi.jack_sync ? jack_midi_event.time : 0;
+
+ switch(type) {
+ case 0x80: /* note-off */
+ ev.type = M_NOTE;
+ ev.num = midi_data[1];
+ ev.value = 0;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case 0x90: /* note-on */
+ ev.type = M_NOTE;
+ ev.num = midi_data[1];
+ ev.value = midi_data[2];
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case 0xA0: /* pressure, aftertouch */
+ ev.type = M_PRESSURE;
+ ev.num = midi_data[1];
+ ev.value = midi_data[2];
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case 0xB0: /* controller */
+ ev.type = M_CONTROLLER;
+ ev.num = midi_data[1];
+ ev.value = midi_data[2];
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case 0xC0: /* program change */
+ ev.type = M_PGMCHANGE;
+ ev.num = midi_data[1];
+ ev.value = 0;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ case 0xE0: /* pitch bend */
+ ev.type = M_CONTROLLER;
+ ev.num = C_pitchwheel;
+ ev.value = ((midi_data[2] << 7) | midi_data[1]) - 8192;
+ InMgr::getInstance().putEvent(ev);
+ break;
+
+ /* XXX TODO: handle MSB/LSB controllers and RPNs and NRPNs */
+ }
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h
new file mode 100644
index 0000000..705ff3e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h
@@ -0,0 +1,89 @@
+/*
+ JackEngine.h
+
+ Copyright 2009, Alan Calvert
+
+ This file is part of yoshimi, which 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 3 of the License, or (at your option) any later version.
+
+ yoshimi is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with yoshimi. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef JACK_ENGINE_H
+#define JACK_ENGINE_H
+
+#include <string>
+#include <pthread.h>
+#include <semaphore.h>
+#include <jack/jack.h>
+#include <pthread.h>
+
+#include "MidiIn.h"
+#include "AudioOut.h"
+
+typedef jack_default_audio_sample_t jsample_t;
+
+class JackEngine:public AudioOut, MidiIn
+{
+ public:
+ JackEngine();
+ ~JackEngine() { }
+
+ bool Start();
+ void Stop();
+
+ void setMidiEn(bool nval);
+ bool getMidiEn() const;
+
+ void setAudioEn(bool nval);
+ bool getAudioEn() const;
+
+ int getBuffersize() { return audio.jackNframes; }
+
+ std::string clientName();
+ int clientId();
+
+ protected:
+
+ int processCallback(jack_nframes_t nframes);
+ static int _processCallback(jack_nframes_t nframes, void *arg);
+ int bufferSizeCallback(jack_nframes_t nframes);
+ static int _bufferSizeCallback(jack_nframes_t nframes, void *arg);
+ static void _errorCallback(const char *msg);
+ static void _infoCallback(const char *msg);
+ static int _xrunCallback(void *arg);
+
+ private:
+ bool connectServer(std::string server);
+ bool connectJack();
+ void disconnectJack();
+ bool openAudio();
+ void stopAudio();
+ bool processAudio(jack_nframes_t nframes);
+ bool openMidi();
+ void stopMidi();
+
+ jack_client_t *jackClient;
+ struct audio {
+ unsigned int jackSamplerate;
+ unsigned int jackNframes;
+ jack_port_t *ports[2];
+ jsample_t *portBuffs[2];
+ } audio;
+ struct midi {
+ jack_port_t *inport;
+ bool jack_sync;
+ } midi;
+
+ void handleMidi(unsigned long frames);
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp
new file mode 100644
index 0000000..3635bde
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp
@@ -0,0 +1,77 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ MidiIn.C - This class is inherited by all the Midi input classes
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "MidiIn.h"
+#include "../globals.h"
+#include "InMgr.h"
+
+void MidiIn::midiProcess(unsigned char head,
+ unsigned char num,
+ unsigned char value)
+{
+ MidiEvent ev;
+ unsigned char chan = head & 0x0f;
+ switch(head & 0xf0) {
+ case 0x80: //Note Off
+ ev.type = M_NOTE;
+ ev.channel = chan;
+ ev.num = num;
+ ev.value = 0;
+ InMgr::getInstance().putEvent(ev);
+ break;
+ case 0x90: //Note On
+ ev.type = M_NOTE;
+ ev.channel = chan;
+ ev.num = num;
+ ev.value = value;
+ InMgr::getInstance().putEvent(ev);
+ break;
+ case 0xA0: /* pressure, aftertouch */
+ ev.type = M_PRESSURE;
+ ev.channel = chan;
+ ev.num = num;
+ ev.value = value;
+ InMgr::getInstance().putEvent(ev);
+ break;
+ case 0xb0: //Controller
+ ev.type = M_CONTROLLER;
+ ev.channel = chan;
+ ev.num = num;
+ ev.value = value;
+ InMgr::getInstance().putEvent(ev);
+ break;
+ case 0xc0: //Program Change
+ ev.type = M_PGMCHANGE;
+ ev.channel = chan;
+ ev.num = num;
+ ev.value = 0;
+ InMgr::getInstance().putEvent(ev);
+ break;
+ case 0xe0: //Pitch Wheel
+ ev.type = M_CONTROLLER;
+ ev.channel = chan;
+ ev.num = C_pitchwheel;
+ ev.value = (num + value * (int) 128) - 8192;
+ InMgr::getInstance().putEvent(ev);
+ break;
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h
new file mode 100644
index 0000000..780a67f
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h
@@ -0,0 +1,43 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ MidiIn.h - This class is inherited by all the Midi input classes
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright (C) 2009-2010 Mark McCurry
+ Author: Nasca Octavian Paula
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef MIDI_IN_H
+#define MIDI_IN_H
+
+#include "Engine.h"
+
+/**This class is inherited by all the Midi input classes*/
+class MidiIn:public virtual Engine
+{
+ public:
+ /**Enables or disables driver based upon value*/
+ virtual void setMidiEn(bool nval) = 0;
+ /**Returns if driver is initialized*/
+ virtual bool getMidiEn() const = 0;
+ static void midiProcess(unsigned char head,
+ unsigned char num,
+ unsigned char value);
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.cpp
new file mode 100644
index 0000000..0026437
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.cpp
@@ -0,0 +1,138 @@
+#include "Nio.h"
+#include "OutMgr.h"
+#include "InMgr.h"
+#include "EngineMgr.h"
+#include "MidiIn.h"
+#include "AudioOut.h"
+#include "WavEngine.h"
+#include <iostream>
+#include <algorithm>
+using std::string;
+using std::set;
+using std::cerr;
+using std::endl;
+
+InMgr *in = NULL;
+OutMgr *out = NULL;
+EngineMgr *eng = NULL;
+string postfix;
+
+bool Nio::autoConnect = false;
+string Nio::defaultSource = IN_DEFAULT;
+string Nio::defaultSink = OUT_DEFAULT;
+
+void Nio::init(void)
+{
+ in = &InMgr::getInstance(); //Enable input wrapper
+ out = &OutMgr::getInstance(); //Initialize the Output Systems
+ eng = &EngineMgr::getInstance(); //Initialize The Engines
+}
+
+bool Nio::start()
+{
+ init();
+ return eng->start();
+}
+
+void Nio::stop()
+{
+ eng->stop();
+}
+
+void Nio::setDefaultSource(string name)
+{
+ std::transform(name.begin(), name.end(), name.begin(), ::toupper);
+ defaultSource = name;
+}
+
+void Nio::setDefaultSink(string name)
+{
+ std::transform(name.begin(), name.end(), name.begin(), ::toupper);
+ defaultSink = name;
+}
+
+bool Nio::setSource(string name)
+{
+ return in->setSource(name);
+}
+
+bool Nio::setSink(string name)
+{
+ return out->setSink(name);
+}
+
+void Nio::setPostfix(std::string post)
+{
+ postfix = post;
+}
+
+std::string Nio::getPostfix(void)
+{
+ return postfix;
+}
+
+set<string> Nio::getSources(void)
+{
+ set<string> sources;
+ for(std::list<Engine *>::iterator itr = eng->engines.begin();
+ itr != eng->engines.end(); ++itr)
+ if(dynamic_cast<MidiIn *>(*itr))
+ sources.insert((*itr)->name);
+ return sources;
+}
+
+set<string> Nio::getSinks(void)
+{
+ set<string> sinks;
+ for(std::list<Engine *>::iterator itr = eng->engines.begin();
+ itr != eng->engines.end(); ++itr)
+ if(dynamic_cast<AudioOut *>(*itr))
+ sinks.insert((*itr)->name);
+ return sinks;
+}
+
+string Nio::getSource()
+{
+ return in->getSource();
+}
+
+string Nio::getSink()
+{
+ return out->getSink();
+}
+
+#if JACK
+#include <jack/jack.h>
+void Nio::preferedSampleRate(unsigned &rate)
+{
+ jack_client_t *client = jack_client_open("temp-client",
+ JackNoStartServer, 0);
+ if(client) {
+ rate = jack_get_sample_rate(client);
+ jack_client_close(client);
+ }
+}
+#else
+void Nio::preferedSampleRate(unsigned &)
+{}
+#endif
+
+void Nio::waveNew(class WavFile *wave)
+{
+ out->wave->newFile(wave);
+}
+
+void Nio::waveStart(void)
+{
+ out->wave->Start();
+}
+
+void Nio::waveStop(void)
+{
+ out->wave->Stop();
+}
+
+void Nio::waveEnd(void)
+{
+ out->wave->destroyFile();
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.h
new file mode 100644
index 0000000..ba050b8
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Nio.h
@@ -0,0 +1,47 @@
+#ifndef NIO_H
+#define NIO_H
+#include <string>
+#include <set>
+
+class WavFile;
+
+/**Interface to Nio Subsystem
+ *
+ * Should be only externally included header */
+namespace Nio
+{
+ void init(void);
+ bool start(void);
+ void stop(void);
+
+ void setDefaultSource(std::string name);
+ void setDefaultSink(std::string name);
+
+ bool setSource(std::string name);
+ bool setSink(std::string name);
+
+ void setPostfix(std::string post);
+ std::string getPostfix(void);
+
+ std::set<std::string> getSources(void);
+ std::set<std::string> getSinks(void);
+
+ std::string getSource(void);
+ std::string getSink(void);
+
+ //Get the prefered sample rate from jack (if running)
+ void preferedSampleRate(unsigned &rate);
+
+
+ //Wave writing
+ void waveNew(class WavFile *wave);
+ void waveStart(void);
+ void waveStop(void);
+ void waveEnd(void);
+
+ extern bool autoConnect;
+ extern std::string defaultSource;
+ extern std::string defaultSink;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp
new file mode 100644
index 0000000..633e2ae
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp
@@ -0,0 +1,113 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ OSSaudiooutput.C - Audio output for Open Sound System
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "NulEngine.h"
+#include "../globals.h"
+
+#include <unistd.h>
+#include <iostream>
+
+using namespace std;
+
+NulEngine::NulEngine()
+ :AudioOut(), pThread(NULL)
+{
+ name = "NULL";
+ playing_until.tv_sec = 0;
+ playing_until.tv_usec = 0;
+}
+
+void *NulEngine::_AudioThread(void *arg)
+{
+ return (static_cast<NulEngine *>(arg))->AudioThread();
+}
+
+void *NulEngine::AudioThread()
+{
+ while(pThread) {
+ getNext();
+
+ struct timeval now;
+ int remaining = 0;
+ gettimeofday(&now, NULL);
+ if((playing_until.tv_usec == 0) && (playing_until.tv_sec == 0)) {
+ playing_until.tv_usec = now.tv_usec;
+ playing_until.tv_sec = now.tv_sec;
+ }
+ else {
+ remaining = (playing_until.tv_usec - now.tv_usec)
+ + (playing_until.tv_sec - now.tv_sec) * 1000000;
+ if(remaining > 10000) //Don't sleep() less than 10ms.
+ //This will add latency...
+ usleep(remaining - 10000);
+ if(remaining < 0)
+ cerr << "WARNING - too late" << endl;
+ }
+ playing_until.tv_usec += synth->buffersize * 1000000
+ / synth->samplerate;
+ if(remaining < 0)
+ playing_until.tv_usec -= remaining;
+ playing_until.tv_sec += playing_until.tv_usec / 1000000;
+ playing_until.tv_usec %= 1000000;
+ }
+ return NULL;
+}
+
+NulEngine::~NulEngine()
+{}
+
+bool NulEngine::Start()
+{
+ setAudioEn(true);
+ return getAudioEn();
+}
+
+void NulEngine::Stop()
+{
+ setAudioEn(false);
+}
+
+void NulEngine::setAudioEn(bool nval)
+{
+ if(nval) {
+ if(!getAudioEn()) {
+ pthread_t *thread = new pthread_t;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+ pThread = thread;
+ pthread_create(pThread, &attr, _AudioThread, this);
+ }
+ }
+ else
+ if(getAudioEn()) {
+ pthread_t *thread = pThread;
+ pThread = NULL;
+ pthread_join(*thread, NULL);
+ delete thread;
+ }
+}
+
+bool NulEngine::getAudioEn() const
+{
+ return pThread;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h
new file mode 100644
index 0000000..1834180
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h
@@ -0,0 +1,56 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ NulEngine.h - Dummy In/Out driver
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef NUL_ENGINE_H
+#define NUL_ENGINE_H
+
+#include <sys/time.h>
+#include <pthread.h>
+#include "../globals.h"
+#include "AudioOut.h"
+#include "MidiIn.h"
+
+class NulEngine:public AudioOut, MidiIn
+{
+ public:
+ NulEngine();
+ ~NulEngine();
+
+ bool Start();
+ void Stop();
+
+ void setAudioEn(bool nval);
+ bool getAudioEn() const;
+
+ void setMidiEn(bool) {}
+ bool getMidiEn() const {return true; }
+
+ protected:
+ void *AudioThread();
+ static void *_AudioThread(void *arg);
+
+ private:
+ struct timeval playing_until;
+ pthread_t *pThread;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp
new file mode 100644
index 0000000..1c6cdf1
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp
@@ -0,0 +1,285 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ OSSaudiooutput.C - Audio output for Open Sound System
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "OssEngine.h"
+#include "../Misc/Util.h"
+#include "../globals.h"
+
+#include <cstring>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/soundcard.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+#include <iostream>
+
+#include "InMgr.h"
+
+using namespace std;
+
+OssEngine::OssEngine()
+ :AudioOut(), engThread(NULL)
+{
+ name = "OSS";
+
+ midi.handle = -1;
+ audio.handle = -1;
+
+ audio.smps = new short[synth->buffersize * 2];
+ memset(audio.smps, 0, synth->bufferbytes);
+}
+
+OssEngine::~OssEngine()
+{
+ Stop();
+ delete [] audio.smps;
+}
+
+bool OssEngine::openAudio()
+{
+ if(audio.handle != -1)
+ return true; //already open
+
+ int snd_bitsize = 16;
+ int snd_fragment = 0x00080009; //fragment size (?);
+ int snd_stereo = 1; //stereo;
+ int snd_format = AFMT_S16_LE;
+ int snd_samplerate = synth->samplerate;
+
+ const char *device = config.cfg.LinuxOSSWaveOutDev;
+ if(getenv("DSP_DEVICE"))
+ device = getenv("DSP_DEVICE");
+
+ audio.handle = open(device, O_WRONLY, 0);
+ if(audio.handle == -1) {
+ cerr << "ERROR - I can't open the "
+ << device << '.' << endl;
+ return false;
+ }
+ ioctl(audio.handle, SNDCTL_DSP_RESET, NULL);
+ ioctl(audio.handle, SNDCTL_DSP_SETFMT, &snd_format);
+ ioctl(audio.handle, SNDCTL_DSP_STEREO, &snd_stereo);
+ ioctl(audio.handle, SNDCTL_DSP_SPEED, &snd_samplerate);
+ ioctl(audio.handle, SNDCTL_DSP_SAMPLESIZE, &snd_bitsize);
+ ioctl(audio.handle, SNDCTL_DSP_SETFRAGMENT, &snd_fragment);
+
+ if(!getMidiEn()) {
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+ engThread = new pthread_t;
+ pthread_create(engThread, &attr, _thread, this);
+ }
+
+ return true;
+}
+
+void OssEngine::stopAudio()
+{
+ int handle = audio.handle;
+ if(handle == -1) //already closed
+ return;
+ audio.handle = -1;
+
+ if(!getMidiEn() && engThread)
+ pthread_join(*engThread, NULL);
+ delete engThread;
+ engThread = NULL;
+
+ close(handle);
+}
+
+bool OssEngine::Start()
+{
+ bool good = true;
+
+ if(!openAudio()) {
+ cerr << "Failed to open OSS audio" << endl;
+ good = false;
+ }
+
+ if(!openMidi()) {
+ cerr << "Failed to open OSS midi" << endl;
+ good = false;
+ }
+
+ return good;
+}
+
+void OssEngine::Stop()
+{
+ stopAudio();
+ stopMidi();
+}
+
+void OssEngine::setMidiEn(bool nval)
+{
+ if(nval)
+ openMidi();
+ else
+ stopMidi();
+}
+
+bool OssEngine::getMidiEn() const
+{
+ return midi.handle != -1;
+}
+
+void OssEngine::setAudioEn(bool nval)
+{
+ if(nval)
+ openAudio();
+ else
+ stopAudio();
+}
+
+bool OssEngine::getAudioEn() const
+{
+ return audio.handle != -1;
+}
+
+bool OssEngine::openMidi()
+{
+ int handle = midi.handle;
+ if(handle != -1)
+ return true; //already open
+
+ handle = open(config.cfg.LinuxOSSSeqInDev, O_RDONLY, 0);
+
+ if(-1 == handle)
+ return false;
+ midi.handle = handle;
+
+ if(!getAudioEn()) {
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+ engThread = new pthread_t;
+ pthread_create(engThread, &attr, _thread, this);
+ }
+
+ return true;
+}
+
+void OssEngine::stopMidi()
+{
+ int handle = midi.handle;
+ if(handle == -1) //already closed
+ return;
+
+ midi.handle = -1;
+
+ if(!getAudioEn() && engThread) {
+ pthread_join(*engThread, NULL);
+ delete engThread;
+ engThread = NULL;
+ }
+
+ close(handle);
+}
+
+void *OssEngine::_thread(void *arg)
+{
+ return (static_cast<OssEngine *>(arg))->thread();
+}
+
+void *OssEngine::thread()
+{
+ unsigned char tmp[4] = {0, 0, 0, 0};
+ set_realtime();
+ while(getAudioEn() || getMidiEn()) {
+ if(getAudioEn()) {
+ const Stereo<float *> smps = getNext();
+
+ float l, r;
+ for(int i = 0; i < synth->buffersize; ++i) {
+ l = smps.l[i];
+ r = smps.r[i];
+
+ if(l < -1.0f)
+ l = -1.0f;
+ else
+ if(l > 1.0f)
+ l = 1.0f;
+ if(r < -1.0f)
+ r = -1.0f;
+ else
+ if(r > 1.0f)
+ r = 1.0f;
+
+ audio.smps[i * 2] = (short int) (l * 32767.0f);
+ audio.smps[i * 2 + 1] = (short int) (r * 32767.0f);
+ }
+ int handle = audio.handle;
+ if(handle != -1)
+ write(handle, audio.smps, synth->buffersize * 4); // *2 because is 16 bit, again * 2 because is stereo
+ else
+ break;
+ }
+
+ //Collect up to 30 midi events
+ for(int k = 0; k < 30 && getMidiEn(); ++k) {
+ static char escaped;
+
+ memset(tmp, 0, 4);
+
+ if(escaped) {
+ tmp[0] = escaped;
+ escaped = 0;
+ }
+ else {
+ getMidi(tmp);
+ if(!(tmp[0] & 0x80))
+ continue;
+ }
+ getMidi(tmp + 1);
+ if(tmp[1] & 0x80) {
+ escaped = tmp[1];
+ tmp[1] = 0;
+ }
+ else {
+ getMidi(tmp + 2);
+ if(tmp[2] & 0x80) {
+ escaped = tmp[2];
+ tmp[2] = 0;
+ }
+ else {
+ getMidi(tmp + 3);
+ if(tmp[3] & 0x80) {
+ escaped = tmp[3];
+ tmp[3] = 0;
+ }
+ }
+ }
+ midiProcess(tmp[0], tmp[1], tmp[2]);
+ }
+ }
+ pthread_exit(NULL);
+ return NULL;
+}
+
+void OssEngine::getMidi(unsigned char *midiPtr)
+{
+ read(midi.handle, midiPtr, 1);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h
new file mode 100644
index 0000000..cdccc81
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h
@@ -0,0 +1,76 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ OSSaudiooutput.h - Audio output for Open Sound System
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef OSS_ENGINE_H
+#define OSS_ENGINE_H
+
+#include <sys/time.h>
+#include "../globals.h"
+#include "AudioOut.h"
+#include "MidiIn.h"
+
+class OssEngine:public AudioOut, MidiIn
+{
+ public:
+ OssEngine();
+ ~OssEngine();
+
+ bool Start();
+ void Stop();
+
+ void setAudioEn(bool nval);
+ bool getAudioEn() const;
+
+ void setMidiEn(bool nval);
+ bool getMidiEn() const;
+
+
+ protected:
+ void *thread();
+ static void *_thread(void *arg);
+
+ private:
+ pthread_t *engThread;
+
+ //Audio
+ bool openAudio();
+ void stopAudio();
+
+ struct audio {
+ int handle;
+ short int *smps; //Samples to be sent to soundcard
+ bool en;
+ } audio;
+
+ //Midi
+ bool openMidi();
+ void stopMidi();
+ void getMidi(unsigned char *midiPtr);
+
+ struct midi {
+ int handle;
+ bool en;
+ bool run;
+ } midi;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.cpp
new file mode 100644
index 0000000..7fbe241
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.cpp
@@ -0,0 +1,185 @@
+#include "OutMgr.h"
+#include <algorithm>
+#include <iostream>
+#include <cassert>
+#include "AudioOut.h"
+#include "Engine.h"
+#include "EngineMgr.h"
+#include "InMgr.h"
+#include "WavEngine.h"
+#include "../Misc/Master.h"
+#include "../Misc/Util.h" //for set_realtime()
+
+using namespace std;
+
+OutMgr &OutMgr::getInstance()
+{
+ static OutMgr instance;
+ return instance;
+}
+
+OutMgr::OutMgr()
+ :wave(new WavEngine()),
+ priBuf(new float[4096],
+ new float[4096]), priBuffCurrent(priBuf),
+ master(Master::getInstance())
+{
+ currentOut = NULL;
+ stales = 0;
+ master = Master::getInstance();
+
+ //init samples
+ outr = new float[synth->buffersize];
+ outl = new float[synth->buffersize];
+ memset(outl, 0, synth->bufferbytes);
+ memset(outr, 0, synth->bufferbytes);
+}
+
+OutMgr::~OutMgr()
+{
+ delete wave;
+ delete [] priBuf.l;
+ delete [] priBuf.r;
+ delete [] outr;
+ delete [] outl;
+}
+
+/* Sequence of a tick
+ * 1) Lets remove old/stale samples
+ * 2) Apply appliciable midi events
+ * 3) Lets see if we need to generate samples
+ * 4) Lets generate some
+ * 5) Goto 2 if more are needed
+ * 6) Lets return those samples to the primary and secondary outputs
+ * 7) Lets wait for another tick
+ */
+const Stereo<float *> OutMgr::tick(unsigned int frameSize)
+{
+ InMgr &midi = InMgr::getInstance();
+ //SysEv->execute();
+ removeStaleSmps();
+ int i=0;
+ while(frameSize > storedSmps()) {
+ if(!midi.empty()) {
+ pthread_mutex_lock(&(master.mutex));
+ midi.flush(i*synth->buffersize, (i+1)*synth->buffersize);
+ pthread_mutex_unlock(&(master.mutex));
+ }
+ pthread_mutex_lock(&(master.mutex));
+ master.AudioOut(outl, outr);
+ pthread_mutex_unlock(&(master.mutex));
+ addSmps(outl, outr);
+ i++;
+ }
+ stales = frameSize;
+ return priBuf;
+}
+
+AudioOut *OutMgr::getOut(string name)
+{
+ return dynamic_cast<AudioOut *>(EngineMgr::getInstance().getEng(name));
+}
+
+string OutMgr::getDriver() const
+{
+ return currentOut->name;
+}
+
+bool OutMgr::setSink(string name)
+{
+ AudioOut *sink = getOut(name);
+
+ if(!sink)
+ return false;
+
+ if(currentOut)
+ currentOut->setAudioEn(false);
+
+ currentOut = sink;
+ currentOut->setAudioEn(true);
+
+ bool success = currentOut->getAudioEn();
+
+ //Keep system in a valid state (aka with a running driver)
+ if(!success)
+ (currentOut = getOut("NULL"))->setAudioEn(true);
+
+ return success;
+}
+
+string OutMgr::getSink() const
+{
+ if(currentOut)
+ return currentOut->name;
+ else {
+ cerr << "BUG: No current output in OutMgr " << __LINE__ << endl;
+ return "ERROR";
+ }
+ return "ERROR";
+}
+
+//perform a cheap linear interpolation for resampling
+//This will result in some distortion at frame boundries
+//returns number of samples produced
+static size_t resample(float *dest,
+ const float *src,
+ float s_in,
+ float s_out,
+ size_t elms)
+{
+ size_t out_elms = elms * s_out / s_in;
+ float r_pos = 0.0f;
+ for(int i = 0; i < (int)out_elms; ++i, r_pos += s_in / s_out)
+ dest[i] = interpolate(src, elms, r_pos);
+
+ return out_elms;
+}
+
+void OutMgr::addSmps(float *l, float *r)
+{
+ //allow wave file to syphon off stream
+ wave->push(Stereo<float *>(l, r), synth->buffersize);
+
+ const int s_out = currentOut->getSampleRate(),
+ s_sys = synth->samplerate;
+
+ if(s_out != s_sys) { //we need to resample
+ const size_t steps = resample(priBuffCurrent.l,
+ l,
+ s_sys,
+ s_out,
+ synth->buffersize);
+ resample(priBuffCurrent.r, r, s_sys, s_out, synth->buffersize);
+
+ priBuffCurrent.l += steps;
+ priBuffCurrent.r += steps;
+ }
+ else { //just copy the samples
+ memcpy(priBuffCurrent.l, l, synth->bufferbytes);
+ memcpy(priBuffCurrent.r, r, synth->bufferbytes);
+ priBuffCurrent.l += synth->buffersize;
+ priBuffCurrent.r += synth->buffersize;
+ }
+}
+
+void OutMgr::removeStaleSmps()
+{
+ if(!stales)
+ return;
+
+ const int leftover = storedSmps() - stales;
+
+ assert(leftover > -1);
+
+ //leftover samples [seen at very low latencies]
+ if(leftover) {
+ memmove(priBuf.l, priBuffCurrent.l - leftover, leftover * sizeof(float));
+ memmove(priBuf.r, priBuffCurrent.r - leftover, leftover * sizeof(float));
+ priBuffCurrent.l = priBuf.l + leftover;
+ priBuffCurrent.r = priBuf.r + leftover;
+ }
+ else
+ priBuffCurrent = priBuf;
+
+ stales = 0;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.h
new file mode 100644
index 0000000..bc3a922
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OutMgr.h
@@ -0,0 +1,65 @@
+#ifndef OUTMGR_H
+#define OUTMGR_H
+
+#include "../Misc/Stereo.h"
+#include <list>
+#include <string>
+#include <pthread.h>
+#include <semaphore.h>
+
+
+class AudioOut;
+class OutMgr
+{
+ public:
+ static OutMgr &getInstance();
+ ~OutMgr();
+
+ /**Execute a tick*/
+ const Stereo<float *> tick(unsigned int frameSize);
+
+ /**Request a new set of samples
+ * @param n number of requested samples (defaults to 1)
+ * @return -1 for locking issues 0 for valid request*/
+ void requestSamples(unsigned int n = 1);
+
+ /**Gets requested driver
+ * @param name case unsensitive name of driver
+ * @return pointer to Audio Out or NULL
+ */
+ AudioOut *getOut(std::string name);
+
+ /**Gets the name of the first running driver
+ * Deprecated
+ * @return if no running output, "" is returned
+ */
+ std::string getDriver() const;
+
+ bool setSink(std::string name);
+
+ std::string getSink() const;
+
+ class WavEngine * wave; /**<The Wave Recorder*/
+ friend class EngineMgr;
+ private:
+ OutMgr();
+ void addSmps(float *l, float *r);
+ unsigned int storedSmps() const {return priBuffCurrent.l - priBuf.l; }
+ void removeStaleSmps();
+
+ AudioOut *currentOut; /**<The current output driver*/
+
+ sem_t requested;
+
+ /**Buffer*/
+ Stereo<float *> priBuf; //buffer for primary drivers
+ Stereo<float *> priBuffCurrent; //current array accessor
+
+ float *outl;
+ float *outr;
+ class Master & master;
+
+ int stales;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp
new file mode 100644
index 0000000..d41543b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp
@@ -0,0 +1,118 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PaEngine.cpp - Audio output for PortAudio
+ Copyright (C) 2002 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "PaEngine.h"
+#include <iostream>
+
+using namespace std;
+
+PaEngine::PaEngine()
+ :stream(NULL)
+{
+ name = "PA";
+}
+
+
+PaEngine::~PaEngine()
+{
+ Stop();
+}
+
+bool PaEngine::Start()
+{
+ if(getAudioEn())
+ return true;
+ Pa_Initialize();
+
+ PaStreamParameters outputParameters;
+ outputParameters.device = Pa_GetDefaultOutputDevice();
+ if(outputParameters.device == paNoDevice) {
+ cerr << "Error: No default output device." << endl;
+ Pa_Terminate();
+ return false;
+ }
+ outputParameters.channelCount = 2; /* stereo output */
+ outputParameters.sampleFormat = paFloat32; /* 32 bit floating point output */
+ outputParameters.suggestedLatency =
+ Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency;
+ outputParameters.hostApiSpecificStreamInfo = NULL;
+
+
+ Pa_OpenStream(&stream,
+ NULL,
+ &outputParameters,
+ synth->samplerate,
+ synth->buffersize,
+ 0,
+ PAprocess,
+ (void *) this);
+ Pa_StartStream(stream);
+ return true;
+}
+
+void PaEngine::setAudioEn(bool nval)
+{
+ if(nval)
+ Start();
+ else
+ Stop();
+}
+
+bool PaEngine::getAudioEn() const
+{
+ return stream;
+}
+
+int PaEngine::PAprocess(const void *inputBuffer,
+ void *outputBuffer,
+ unsigned long framesPerBuffer,
+ const PaStreamCallbackTimeInfo *outTime,
+ PaStreamCallbackFlags flags,
+ void *userData)
+{
+ (void) inputBuffer;
+ (void) outTime;
+ (void) flags;
+ return static_cast<PaEngine *>(userData)->process((float *) outputBuffer,
+ framesPerBuffer);
+}
+
+int PaEngine::process(float *out, unsigned long framesPerBuffer)
+{
+ const Stereo<float *> smp = getNext();
+ for(unsigned i = 0; i < framesPerBuffer; ++i) {
+ *out++ = smp.l[i];
+ *out++ = smp.r[i];
+ }
+
+ return 0;
+}
+
+void PaEngine::Stop()
+{
+ if(!getAudioEn())
+ return;
+ Pa_StopStream(stream);
+ Pa_CloseStream(stream);
+ stream = NULL;
+ Pa_Terminate();
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h
new file mode 100644
index 0000000..12fd766
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h
@@ -0,0 +1,57 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PAaudiooutput.h - Audio output for PortAudio
+ Copyright (C) 2002 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#ifndef PA_ENGINE_H
+#define PA_ENGINE_H
+
+#include <portaudio.h>
+
+#include "../globals.h"
+#include "AudioOut.h"
+
+class PaEngine:public AudioOut
+{
+ public:
+ PaEngine();
+ ~PaEngine();
+
+ bool Start();
+ void Stop();
+
+ void setAudioEn(bool nval);
+ bool getAudioEn() const;
+
+ protected:
+ static int PAprocess(const void *inputBuffer,
+ void *outputBuffer,
+ unsigned long framesPerBuffer,
+ const PaStreamCallbackTimeInfo *outTime,
+ PaStreamCallbackFlags flags,
+ void *userData);
+ int process(float *out, unsigned long framesPerBuffer);
+ private:
+ PaStream *stream;
+};
+
+
+void PAfinish();
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp
new file mode 100644
index 0000000..510e4b2
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.cpp
@@ -0,0 +1,89 @@
+
+template<class T>
+SafeQueue<T>::SafeQueue(size_t maxlen)
+ :writePtr(0), readPtr(0), bufSize(maxlen)
+{
+ w_space.init(PTHREAD_PROCESS_PRIVATE, maxlen - 1);
+ r_space.init(PTHREAD_PROCESS_PRIVATE, 0);
+ buffer = new T[maxlen];
+}
+
+template<class T>
+SafeQueue<T>::~SafeQueue()
+{
+ delete [] buffer;
+}
+
+template<class T>
+unsigned int SafeQueue<T>::size() const
+{
+ return rSpace();
+}
+
+template<class T>
+unsigned int SafeQueue<T>::rSpace() const
+{
+ return r_space.getvalue();
+}
+
+template<class T>
+unsigned int SafeQueue<T>::wSpace() const
+{
+ return w_space.getvalue();
+}
+
+template<class T>
+int SafeQueue<T>::push(const T &in)
+{
+ if(!wSpace())
+ return -1;
+
+ //ok, there is space to write
+ size_t w = (writePtr + 1) % bufSize;
+ buffer[w] = in;
+ writePtr = w;
+
+ //adjust ranges
+ w_space.wait(); //guaranteed not to wait
+ r_space.post();
+ return 0;
+}
+
+template<class T>
+int SafeQueue<T>::peak(T &out) const
+{
+ if(!rSpace())
+ return -1;
+
+ //ok, there is space to read
+ size_t r = (readPtr + 1) % bufSize;
+ out = buffer[r];
+
+ return 0;
+}
+
+template<class T>
+int SafeQueue<T>::pop(T &out)
+{
+ if(!rSpace())
+ return -1;
+
+ //ok, there is space to read
+ size_t r = (readPtr + 1) % bufSize;
+ out = buffer[r];
+ readPtr = r;
+
+ //adjust ranges
+ r_space.wait(); //guaranteed not to wait
+ w_space.post();
+ return 0;
+}
+
+template<class T>
+void SafeQueue<T>::clear()
+{
+ //thread unsafe
+ while(!r_space.trywait())
+ w_space.post();
+ readPtr = writePtr;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h
new file mode 100644
index 0000000..9bba53a
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/SafeQueue.h
@@ -0,0 +1,49 @@
+
+#ifndef SAFEQUEUE_H
+#define SAFEQUEUE_H
+#include <cstdlib>
+#include "ZynSema.h"
+#include <pthread.h>
+#include <semaphore.h>
+
+/**
+ * C++ thread safe lockless queue
+ * Based off of jack's ringbuffer*/
+template<class T>
+class SafeQueue
+{
+ public:
+ SafeQueue(size_t maxlen);
+ ~SafeQueue();
+
+ /**Return read size*/
+ unsigned int size() const;
+
+ /**Returns 0 for normal
+ * Returns -1 on error*/
+ int push(const T &in);
+ int peak(T &out) const;
+ int pop(T &out);
+
+ //clears reading space
+ void clear();
+
+ private:
+ unsigned int wSpace() const;
+ unsigned int rSpace() const;
+
+ //write space
+ mutable ZynSema w_space;
+ //read space
+ mutable ZynSema r_space;
+
+ //next writing spot
+ size_t writePtr;
+ //next reading spot
+ size_t readPtr;
+ const size_t bufSize;
+ T *buffer;
+};
+
+#include "SafeQueue.cpp"
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp
new file mode 100644
index 0000000..1c3d66e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp
@@ -0,0 +1,133 @@
+/*
+ Copyright (C) 2006 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "WavEngine.h"
+#include <cstdio>
+#include <iostream>
+#include <cstdlib>
+#include "../Misc/WavFile.h"
+#include "../Misc/Util.h"
+
+using namespace std;
+
+WavEngine::WavEngine()
+ :AudioOut(), file(NULL), buffer(synth->samplerate * 4), pThread(NULL)
+{
+ work.init(PTHREAD_PROCESS_PRIVATE, 0);
+}
+
+WavEngine::~WavEngine()
+{
+ Stop();
+ destroyFile();
+}
+
+bool WavEngine::openAudio()
+{
+ return file && file->good();
+}
+
+bool WavEngine::Start()
+{
+ if(pThread)
+ return true;
+ pThread = new pthread_t;
+
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+ pthread_create(pThread, &attr, _AudioThread, this);
+
+ return true;
+}
+
+void WavEngine::Stop()
+{
+ if(!pThread)
+ return;
+
+ pthread_t *tmp = pThread;
+ pThread = NULL;
+
+ work.post();
+ pthread_join(*tmp, NULL);
+ delete pThread;
+}
+
+void WavEngine::push(Stereo<float *> smps, size_t len)
+{
+ if(!pThread)
+ return;
+
+
+ //copy the input [overflow when needed]
+ for(size_t i = 0; i < len; ++i) {
+ buffer.push(*smps.l++);
+ buffer.push(*smps.r++);
+ }
+ work.post();
+}
+
+void WavEngine::newFile(WavFile *_file)
+{
+ //ensure system is clean
+ destroyFile();
+ file = _file;
+
+ //check state
+ if(!file->good())
+ cerr
+ << "ERROR: WavEngine handed bad file output WavEngine::newFile()"
+ << endl;
+}
+
+void WavEngine::destroyFile()
+{
+ if(file)
+ delete file;
+ file = NULL;
+}
+
+void *WavEngine::_AudioThread(void *arg)
+{
+ return (static_cast<WavEngine *>(arg))->AudioThread();
+}
+
+void *WavEngine::AudioThread()
+{
+ short *recordbuf_16bit = new short[2 * synth->buffersize];
+
+ while(!work.wait() && pThread) {
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float left = 0.0f, right = 0.0f;
+ buffer.pop(left);
+ buffer.pop(right);
+ recordbuf_16bit[2 * i] = limit((int)(left * 32767.0f),
+ -32768,
+ 32767);
+ recordbuf_16bit[2 * i + 1] = limit((int)(right * 32767.0f),
+ -32768,
+ 32767);
+ }
+ file->writeStereoSamples(synth->buffersize, recordbuf_16bit);
+ }
+
+ delete[] recordbuf_16bit;
+
+ return NULL;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h
new file mode 100644
index 0000000..73f553c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h
@@ -0,0 +1,61 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ WavEngine.h - Records sound to a file
+ Copyright (C) 2008 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+ Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef WAVENGINE_H
+#define WAVENGINE_H
+#include "AudioOut.h"
+#include <string>
+#include <pthread.h>
+#include "ZynSema.h"
+#include "SafeQueue.h"
+
+class WavFile;
+class WavEngine:public AudioOut
+{
+ public:
+ WavEngine();
+ ~WavEngine();
+
+ bool openAudio();
+ bool Start();
+ void Stop();
+
+ void setAudioEn(bool /*nval*/) {}
+ bool getAudioEn() const {return true; }
+
+ void push(Stereo<float *> smps, size_t len);
+
+ void newFile(WavFile *_file);
+ void destroyFile();
+
+ protected:
+ void *AudioThread();
+ static void *_AudioThread(void *arg);
+
+ private:
+ WavFile *file;
+ ZynSema work;
+ SafeQueue<float> buffer;
+
+ pthread_t *pThread;
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h
new file mode 100644
index 0000000..c41477e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/ZynSema.h
@@ -0,0 +1,112 @@
+#ifndef ZYNSEMA_H
+#define ZYNSEMA_H
+
+#if defined __APPLE__ || defined WIN32
+
+#include <pthread.h>
+
+class ZynSema
+{
+public:
+ ZynSema (void) : _count (0)
+ {
+ }
+
+ ~ZynSema (void)
+ {
+ pthread_mutex_destroy (&_mutex);
+ pthread_cond_destroy (&_cond);
+ }
+
+ int init (int, int v)
+ {
+ _count = v;
+ return pthread_mutex_init (&_mutex, 0) || pthread_cond_init (&_cond, 0);
+ }
+
+ int post (void)
+ {
+ pthread_mutex_lock (&_mutex);
+ if (++_count == 1) pthread_cond_signal (&_cond);
+ pthread_mutex_unlock (&_mutex);
+ return 0;
+ }
+
+ int wait (void)
+ {
+ pthread_mutex_lock (&_mutex);
+ while (_count < 1) pthread_cond_wait (&_cond, &_mutex);
+ --_count;
+ pthread_mutex_unlock (&_mutex);
+ return 0;
+ }
+
+ int trywait (void)
+ {
+ if (pthread_mutex_trylock (&_mutex)) return -1;
+ if (_count < 1)
+ {
+ pthread_mutex_unlock (&_mutex);
+ return -1;
+ }
+ --_count;
+ pthread_mutex_unlock (&_mutex);
+ return 0;
+ }
+
+ int getvalue (void) const
+ {
+ return _count;
+ }
+
+
+private:
+ int _count;
+ pthread_mutex_t _mutex;
+ pthread_cond_t _cond;
+};
+
+#else // POSIX sempahore
+
+#include <semaphore.h>
+
+class ZynSema
+{
+public:
+ ZynSema (void)
+ {
+ }
+ ~ZynSema (void)
+ {
+ sem_destroy (&_sema);
+ }
+ int init (int s, int v)
+ {
+ return sem_init (&_sema, s, v);
+ }
+ int post (void)
+ {
+ return sem_post (&_sema);
+ }
+ int wait (void)
+ {
+ return sem_wait (&_sema);
+ }
+ int trywait (void)
+ {
+ return sem_trywait (&_sema);
+ }
+ int getvalue(void)
+ {
+ int v = 0;
+ sem_getvalue(&_sema, &v);
+ return v;
+ }
+
+private:
+ sem_t _sema;
+};
+
+#endif // POSIX semapore
+
+#endif // ZYNSEMA_H
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.cpp
new file mode 100644
index 0000000..b343a48
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.cpp
@@ -0,0 +1,711 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ DSSIaudiooutput.cpp - Audio functions for DSSI
+ Copyright (C) 2002 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+/*
+ * Inital working DSSI output code contributed by Stephen G. Parry
+ */
+
+//this file contains code used from trivial_synth.c from
+//the DSSI (published by Steve Harris under public domain) as a template.
+
+#include "DSSIaudiooutput.h"
+#include "../Misc/Config.h"
+#include "../Misc/Bank.h"
+#include "../Misc/Util.h"
+#include <string.h>
+#include <limits.h>
+
+using std::string;
+using std::vector;
+
+//Dummy variables and functions for linking purposes
+const char *instance_name = 0;
+class WavFile;
+namespace Nio {
+ bool start(void){return 1;};
+ void stop(void){};
+ void waveNew(WavFile *){}
+ void waveStart(void){}
+ void waveStop(void){}
+ void waveEnd(void){}
+}
+
+//
+// Static stubs for LADSPA member functions
+//
+// LADSPA is essentially a C handle based API; This plug-in implementation is
+// a C++ OO one so we need stub functions to map from C API calls to C++ object
+// method calls.
+void DSSIaudiooutput::stub_connectPort(LADSPA_Handle instance,
+ unsigned long port,
+ LADSPA_Data *data)
+{
+ getInstance(instance)->connectPort(port, data);
+}
+
+void DSSIaudiooutput::stub_activate(LADSPA_Handle instance)
+{
+ getInstance(instance)->activate();
+}
+
+void DSSIaudiooutput::stub_run(LADSPA_Handle instance,
+ unsigned long sample_count)
+{
+ getInstance(instance)->run(sample_count);
+}
+
+void DSSIaudiooutput::stub_deactivate(LADSPA_Handle instance)
+{
+ getInstance(instance)->deactivate();
+}
+
+
+void DSSIaudiooutput::stub_cleanup(LADSPA_Handle instance)
+{
+ DSSIaudiooutput *plugin_instance = getInstance(instance);
+ plugin_instance->cleanup();
+ delete plugin_instance;
+}
+
+
+const LADSPA_Descriptor *ladspa_descriptor(unsigned long index)
+{
+ return DSSIaudiooutput::getLadspaDescriptor(index);
+}
+
+//
+// Static stubs for DSSI member functions
+//
+// DSSI is essentially a C handle based API; This plug-in implementation is
+// a C++ OO one so we need stub functions to map from C API calls to C++ object
+// method calls.
+const DSSI_Program_Descriptor *DSSIaudiooutput::stub_getProgram(
+ LADSPA_Handle instance,
+ unsigned long index)
+{
+ return getInstance(instance)->getProgram(index);
+}
+
+void DSSIaudiooutput::stub_selectProgram(LADSPA_Handle instance,
+ unsigned long bank,
+ unsigned long program)
+{
+ getInstance(instance)->selectProgram(bank, program);
+}
+
+int DSSIaudiooutput::stub_getMidiControllerForPort(LADSPA_Handle instance,
+ unsigned long port)
+{
+ return getInstance(instance)->getMidiControllerForPort(port);
+}
+
+void DSSIaudiooutput::stub_runSynth(LADSPA_Handle instance,
+ unsigned long sample_count,
+ snd_seq_event_t *events,
+ unsigned long event_count)
+{
+ getInstance(instance)->runSynth(sample_count, events, event_count);
+}
+
+const DSSI_Descriptor *dssi_descriptor(unsigned long index)
+{
+ return DSSIaudiooutput::getDssiDescriptor(index);
+}
+
+//
+// LADSPA member functions
+//
+
+/**
+ * Instantiates a plug-in.
+ *
+ * This LADSPA member function instantiates a plug-in.
+ * Note that instance initialisation should generally occur in
+ * activate() rather than here.
+ *
+ * Zyn Implementation
+ * ------------------
+ * This implementation creates a C++ class object and hides its pointer
+ * in the handle by type casting.
+ *
+ * @param descriptor [in] the descriptor for this plug-in
+ * @param s_rate [in] the sample rate
+ * @return the plug-in instance handle if successful else NULL
+ */
+LADSPA_Handle DSSIaudiooutput::instantiate(const LADSPA_Descriptor *descriptor,
+ unsigned long s_rate)
+{
+ if(descriptor->UniqueID == dssiDescriptor->LADSPA_Plugin->UniqueID)
+ return (LADSPA_Handle)(new DSSIaudiooutput(s_rate));
+ else
+ return NULL;
+}
+
+/**
+ * Connects a port on an instantiated plug-in.
+ *
+ * This LADSPA member function connects a port on an instantiated plug-in 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 plug-in 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.
+ *
+ * Zyn Implementation
+ * ------------------
+ * The buffer pointers are stored as member variables
+ *
+ * @param port [in] the port to be connected
+ * @param data [in] the data buffer to write to / read from
+ */
+void DSSIaudiooutput::connectPort(unsigned long port, LADSPA_Data *data)
+{
+ switch(port) {
+ case 0:
+ outl = data;
+ break;
+ case 1:
+ outr = data;
+ break;
+ }
+}
+
+/**
+ * Initialises a plug-in instance and activates it for use.
+ *
+ * This LADSPA member function initialises a plug-in instance and activates it
+ * for use. This is separated from instantiate() to aid real-time support and
+ * so that hosts can reinitialise a plug-in instance by calling deactivate() and
+ * then activate(). In this case the plug-in instance must reset all state
+ * information dependent on the history of the plug-in instance except for any
+ * data locations provided by connect_port() and any gain set by
+ * set_run_adding_gain().
+ *
+ * Zyn Implementation
+ * ------------------
+ * Currently this does nothing; Care must be taken as to code placed here as
+ * too much code here seems to cause time-out problems in jack-dssi-host.
+*/
+void DSSIaudiooutput::activate()
+{}
+
+/**
+ * Runs an instance of a plug-in for a block.
+ *
+ * This LADSPA member function runs an instance of a plug-in for a block.
+ * Note that if an activate() function exists then it must be called before
+ * run() or run_adding(). If deactivate() is called for a plug-in instance then
+ * the plug-in instance may not be reused until activate() has been called again.
+ *
+ * Zyn Implementation
+ * ------------------
+ * This is a LADSPA function that does not process any MIDI events; it is hence
+ * implemented by simply calling runSynth() with an empty event list.
+ *
+ * @param sample_count [in] the block size (in samples) for which the plug-in instance may run
+ */
+void DSSIaudiooutput::run(unsigned long sample_count)
+{
+ runSynth(sample_count, NULL, (unsigned long)0);
+}
+
+/**
+ * Counterpart to activate().
+ *
+ * This LADSPA member function is the counterpart to activate() (see above).
+ * Deactivation is not similar to pausing as the plug-in instance will be
+ * reinitialised when activate() is called to reuse it.
+ *
+ * Zyn Implementation
+ * ------------------
+ * Currently this function does nothing.
+ */
+void DSSIaudiooutput::deactivate()
+{}
+
+/**
+ * Deletes a plug-in instance that is no longer required.
+ *
+ * LADSPA member function; once an instance of a plug-in has been finished with
+ * it can be deleted using this function. The instance handle ceases to be
+ * valid after this call.
+ *
+ * If activate() was called for a plug-in instance then a corresponding call to
+ * deactivate() must be made before cleanup() is called.
+ *
+ * Zyn Implementation
+ * ------------------
+ * Currently cleanup is deferred to the destructor that is invoked after cleanup()
+ */
+void DSSIaudiooutput::cleanup()
+{}
+
+/**
+ * Initial entry point for the LADSPA plug-in library.
+ *
+ * This LADSPA function is the initial entry point for the plug-in library.
+ * The LADSPA host looks for this entry point in each shared library object it
+ * finds and then calls the function to enumerate the plug-ins within the
+ * library.
+ *
+ * Zyn Implementation
+ * ------------------
+ * As the Zyn plug-in is a DSSI plug-in, the LADSPA descriptor is embedded inside
+ * the DSSI descriptor, which is created by DSSIaudiooutput::initDssiDescriptor()
+ * statically when the library is loaded. This function then merely returns a pointer
+ * to that embedded descriptor.
+ *
+ * @param index [in] the index number of the plug-in within the library.
+ * @return if index is in range, a pointer to the plug-in descriptor is returned, else NULL
+ */
+const LADSPA_Descriptor *DSSIaudiooutput::getLadspaDescriptor(
+ unsigned long index)
+{
+ if((index > 0) || (dssiDescriptor == NULL))
+ return NULL;
+ else
+ return dssiDescriptor->LADSPA_Plugin;
+}
+
+//
+// DSSI member functions
+//
+
+/**
+ * Provides a description of a program available on this synth.
+ *
+ * This DSSI member function pointer provides a description of a program (named
+ * preset sound) available on this synth.
+ *
+ * Zyn Implementation
+ * ------------------
+ * The instruments in all Zyn's bank directories, as shown by the `instrument
+ * -> show instrument bank` command, are enumerated to the host by this
+ * function, allowing access to all those instruments.
+ * The first time an instrument is requested, the bank it is in and any
+ * unmapped ones preceding that are mapped; all the instruments names and
+ * filenames from those banks are stored in the programMap member variable for
+ * later use. This is done on demand in this way, rather than up front in one
+ * go because loading all the instrument names in one go can lead to timeouts
+ * and zombies.
+ *
+ * @param index [in] index into the plug-in's list of
+ * programs, not a program number as represented by the Program
+ * field of the DSSI_Program_Descriptor. (This distinction is
+ * needed to support synths that use non-contiguous program or
+ * bank numbers.)
+ * @return a DSSI_Program_Descriptor pointer that is
+ * guaranteed to be valid only until the next call to get_program,
+ * deactivate, or configure, on the same plug-in instance, or NULL if index is out of range.
+ */
+const DSSI_Program_Descriptor *DSSIaudiooutput::getProgram(unsigned long index)
+{
+ static DSSI_Program_Descriptor retVal;
+
+ /* Make sure we have the list of banks loaded */
+ initBanks();
+
+ /* Make sure that the bank containing the instrument has been mapped */
+ while(index >= programMap.size() && mapNextBank())
+ /* DO NOTHING MORE */;
+
+ if(index >= programMap.size())
+ /* No more instruments */
+ return NULL;
+ else {
+ /* OK, return the instrument */
+ retVal.Name = programMap[index].name.c_str();
+ retVal.Program = programMap[index].program;
+ retVal.Bank = programMap[index].bank;
+ return &retVal;
+ }
+}
+
+/**
+ * Selects a new program for this synth.
+ *
+ * This DSSI member function selects a new program for this synth. The program
+ * change will take effect immediately at the start of the next run_synth()
+ * call. An invalid bank / instrument combination is ignored.
+ *
+ * Zyn Implementation
+ * ------------------
+ * the banks and instruments are as shown in the `instrument -> show instrument
+ * bank` command in Zyn. The bank no is a 1-based index into the list of banks
+ * Zyn loads and shows in the drop down and the program number is the
+ * instrument within that bank.
+ *
+ * @param bank [in] the bank number to select
+ * @param program [in] the program number within the bank to select
+ */
+void DSSIaudiooutput::selectProgram(unsigned long bank, unsigned long program)
+{
+ initBanks();
+// cerr << "selectProgram(" << (bank & 0x7F) << ':' << ((bank >> 7) & 0x7F) << "," << program << ")" << '\n';
+ if((bank < master->bank.banks.size()) && (program < BANK_SIZE)) {
+ const std::string bankdir = master->bank.banks[bank].dir;
+ if(!bankdir.empty()) {
+ pthread_mutex_lock(&master->mutex);
+
+ /* We have to turn off the CheckPADsynth functionality, else
+ * the program change takes way too long and we get timeouts
+ * and hence zombies (!) */
+ int save = config.cfg.CheckPADsynth;
+ config.cfg.CheckPADsynth = 0;
+
+ /* Load the bank... */
+ master->bank.loadbank(bankdir);
+
+ /* restore the CheckPADsynth flag */
+ config.cfg.CheckPADsynth = save;
+
+ /* Now load the instrument... */
+ master->bank.loadfromslot((unsigned int)program, master->part[0]);
+
+ pthread_mutex_unlock(&master->mutex);
+ }
+ }
+}
+
+/**
+ * Returns the MIDI controller number or NRPN for a input control port
+ *
+ * This DSSI member function returns the MIDI controller number or NRPN that
+ * should be mapped to the given input control port. If the given port should
+ * not have any MIDI controller mapped to it, the function will return DSSI_NONE.
+ * The behaviour of this function is undefined if the given port
+ * number does not correspond to an input control port.
+ *
+ * Zyn Implementation
+ * ------------------
+ * Currently Zyn does not define any controller ports, but may do in the future.
+ *
+ * @param port [in] the input controller port
+ * @return the CC and NRPN values shifted and ORed together.
+ */
+int DSSIaudiooutput::getMidiControllerForPort(unsigned long /*port*/)
+{
+ return DSSI_NONE;
+}
+
+/**
+ * Runs the synth for a block.
+ *
+ * This DSSI member function runs the synth for a block. This is identical in
+ * function to the LADSPA run() function, except that it also supplies events
+ * to the synth.
+ *
+ * Zyn Implementation
+ * ------------------
+ * Zyn implements synthesis in Master::GetAudioOutSamples; runSynth calls this
+ * function in chunks delimited by the sample_count and the frame indexes in
+ * the events block, calling the appropriate NoteOn, NoteOff and SetController
+ * members of Master to process the events supplied between each chunk.
+ *
+ * @param sample_count [in] the block size (in samples) for which the synth
+ * instance may run.
+ * @param events [in] The Events pointer points to a block of ALSA
+ * sequencer events, used to communicate MIDI and related events to the synth.
+ * Each event must be timestamped relative to the start of the block,
+ * (mis)using the ALSA "tick time" field as a frame count. The host is
+ * responsible for ensuring that events with differing timestamps are already
+ * ordered by time. Must not include NOTE (only NOTE_ON / NOTE_OFF), LSB or MSB
+ * events.
+ * @param event_count [in] the number of entries in the `events` block
+ */
+void DSSIaudiooutput::runSynth(unsigned long sample_count,
+ snd_seq_event_t *events,
+ unsigned long event_count)
+{
+ unsigned long from_frame = 0;
+ unsigned long event_index = 0;
+ unsigned long next_event_frame = 0;
+ unsigned long to_frame = 0;
+ pthread_mutex_lock(&master->mutex);
+
+ do {
+ /* Find the time of the next event, if any */
+ if((events == NULL) || (event_index >= event_count))
+ next_event_frame = ULONG_MAX;
+ else
+ next_event_frame = events[event_index].time.tick;
+
+ /* find the end of the sub-sample to be processed this time round... */
+ /* if the next event falls within the desired sample interval... */
+ if((next_event_frame < sample_count) && (next_event_frame >= to_frame))
+ /* set the end to be at that event */
+ to_frame = next_event_frame;
+ else
+ /* ...else go for the whole remaining sample */
+ to_frame = sample_count;
+ if(from_frame < to_frame) {
+ // call master to fill from `from_frame` to `to_frame`:
+ master->GetAudioOutSamples(to_frame - from_frame,
+ (int)sampleRate,
+ &(outl[from_frame]),
+ &(outr[from_frame]));
+ // next sub-sample please...
+ from_frame = to_frame;
+ }
+
+ // Now process any event(s) at the current timing point
+ while(events != NULL && event_index < event_count
+ && events[event_index].time.tick == to_frame) {
+ if(events[event_index].type == SND_SEQ_EVENT_NOTEON)
+ master->noteOn(events[event_index].data.note.channel,
+ events[event_index].data.note.note,
+ events[event_index].data.note.velocity);
+ else
+ if(events[event_index].type == SND_SEQ_EVENT_NOTEOFF)
+ master->noteOff(events[event_index].data.note.channel,
+ events[event_index].data.note.note);
+ else
+ if(events[event_index].type == SND_SEQ_EVENT_CONTROLLER)
+ master->setController(events[event_index].data.control.channel,
+ events[event_index].data.control.param,
+ events[event_index].data.control.value);
+ else {}
+ event_index++;
+ }
+
+ // Keep going until we have the desired total length of sample...
+ } while(to_frame < sample_count);
+
+ pthread_mutex_unlock(&master->mutex);
+}
+
+/**
+ * Initial entry point for the DSSI plug-in library.
+ *
+ * This DSSI function is the initial entry point for the plug-in library.
+ * The DSSI host looks for this entry point in each shared library object it
+ * finds and then calls the function to enumerate the plug-ins within the
+ * library.
+ *
+ * Zyn Implementation
+ * ------------------
+ * The descriptor is created statically by DSSIaudiooutput::initDssiDescriptor()
+ * when the plug-in library is loaded. This function merely returns a pointer to
+ * that descriptor.
+ *
+ * @param index [in] the index number of the plug-in within the library.
+ * @return if index is in range, a pointer to the plug-in descriptor is returned, else NULL
+ */
+const DSSI_Descriptor *DSSIaudiooutput::getDssiDescriptor(unsigned long index)
+{
+ if((index > 0) || (dssiDescriptor == NULL))
+ return NULL;
+ else
+ return dssiDescriptor;
+}
+
+//
+// Internal member functions
+//
+
+// Initialise the DSSI descriptor, statically:
+DSSI_Descriptor *DSSIaudiooutput::dssiDescriptor =
+ DSSIaudiooutput::initDssiDescriptor();
+
+/**
+ * Initializes the DSSI (and LADSPA) descriptor, returning it is an object.
+ */
+DSSI_Descriptor *DSSIaudiooutput::initDssiDescriptor()
+{
+ DSSI_Descriptor *newDssiDescriptor = new DSSI_Descriptor;
+
+ LADSPA_PortDescriptor *newPortDescriptors;
+ const char **newPortNames;
+ LADSPA_PortRangeHint *newPortRangeHints;
+
+ if(newDssiDescriptor) {
+ LADSPA_Descriptor *newLadspaDescriptor = new LADSPA_Descriptor;
+ if(newLadspaDescriptor) {
+ newLadspaDescriptor->UniqueID = 100;
+ newLadspaDescriptor->Label = "ZASF";
+ newLadspaDescriptor->Properties = 0;
+ newLadspaDescriptor->Name = "ZynAddSubFX";
+ newLadspaDescriptor->Maker =
+ "Nasca Octavian Paul <zynaddsubfx at yahoo.com>";
+ newLadspaDescriptor->Copyright = "GNU General Public License v.2";
+ newLadspaDescriptor->PortCount = 2;
+
+ newPortNames = new const char *[newLadspaDescriptor->PortCount];
+ newPortNames[0] = "Output L";
+ newPortNames[1] = "Output R";
+ newLadspaDescriptor->PortNames = newPortNames;
+
+ newPortDescriptors =
+ new LADSPA_PortDescriptor[newLadspaDescriptor->PortCount];
+ newPortDescriptors[0] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
+ newPortDescriptors[1] = LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
+ newLadspaDescriptor->PortDescriptors = newPortDescriptors;
+
+ newPortRangeHints =
+ new LADSPA_PortRangeHint[newLadspaDescriptor->PortCount];
+ newPortRangeHints[0].HintDescriptor = 0;
+ newPortRangeHints[1].HintDescriptor = 0;
+ newLadspaDescriptor->PortRangeHints = newPortRangeHints;
+
+ newLadspaDescriptor->activate = stub_activate;
+ newLadspaDescriptor->cleanup = stub_cleanup;
+ newLadspaDescriptor->connect_port = stub_connectPort;
+ newLadspaDescriptor->deactivate = stub_deactivate;
+ newLadspaDescriptor->instantiate = instantiate;
+ newLadspaDescriptor->run = stub_run;
+ newLadspaDescriptor->run_adding = NULL;
+ newLadspaDescriptor->set_run_adding_gain = NULL;
+ }
+ newDssiDescriptor->LADSPA_Plugin = newLadspaDescriptor;
+ newDssiDescriptor->DSSI_API_Version = 1;
+ newDssiDescriptor->configure = NULL;
+ newDssiDescriptor->get_program = stub_getProgram;
+ newDssiDescriptor->get_midi_controller_for_port =
+ stub_getMidiControllerForPort;
+ newDssiDescriptor->select_program = stub_selectProgram;
+ newDssiDescriptor->run_synth = stub_runSynth;
+ newDssiDescriptor->run_synth_adding = NULL;
+ newDssiDescriptor->run_multiple_synths = NULL;
+ newDssiDescriptor->run_multiple_synths_adding = NULL;
+ }
+
+ dssiDescriptor = newDssiDescriptor;
+
+ return dssiDescriptor;
+}
+
+/**
+ * Converts a LADSPA / DSSI handle into a DSSIaudiooutput instance.
+ *
+ * @param instance [in]
+ * @return the instance
+ */
+DSSIaudiooutput *DSSIaudiooutput::getInstance(LADSPA_Handle instance)
+{
+ return (DSSIaudiooutput *)(instance);
+}
+
+SYNTH_T *synth;
+
+/**
+ * The private sole constructor for the DSSIaudiooutput class.
+ *
+ * Only ever called via instantiate().
+ * @param sampleRate [in] the sample rate to be used by the synth.
+ * @return
+ */
+DSSIaudiooutput::DSSIaudiooutput(unsigned long sampleRate)
+{
+ synth = new SYNTH_T;
+ synth->samplerate = sampleRate;
+
+ this->sampleRate = sampleRate;
+ this->banksInited = false;
+
+ config.init();
+
+ sprng(time(NULL));
+ denormalkillbuf = new float [synth->buffersize];
+ for(int i = 0; i < synth->buffersize; i++)
+ denormalkillbuf[i] = (RND - 0.5f) * 1e-16;
+
+ synth->alias();
+ this->master = new Master();
+}
+
+/**
+ * The destructor for the DSSIaudiooutput class
+ * @return
+ */
+DSSIaudiooutput::~DSSIaudiooutput()
+{}
+
+/**
+ * Ensures the list of bank (directories) has been initialised.
+ */
+void DSSIaudiooutput::initBanks(void)
+{
+ if(!banksInited) {
+ pthread_mutex_lock(&master->mutex);
+ master->bank.rescanforbanks();
+ banksInited = true;
+ pthread_mutex_unlock(&master->mutex);
+ }
+}
+
+/**
+ * constructor for the internally used ProgramDescriptor class
+ *
+ * @param _bank [in] bank number
+ * @param _program [in] program number
+ * @param _name [in] instrument / sample name
+ * @return
+ */
+DSSIaudiooutput::ProgramDescriptor::ProgramDescriptor(unsigned long _bank,
+ unsigned long _program,
+ char *_name)
+ :bank(_bank), program(_program), name(_name)
+{}
+
+/**
+ * The map of programs available; held as a single shared statically allocated object.
+ */
+vector<DSSIaudiooutput::ProgramDescriptor> DSSIaudiooutput::programMap =
+ vector<DSSIaudiooutput::ProgramDescriptor>();
+
+/**
+ * Index controlling the map of banks
+ */
+long DSSIaudiooutput::bankNoToMap = 1;
+
+/**
+ * Queries and maps the next available bank of instruments.
+ *
+ * If the program index requested to getProgram() lies beyond the banks mapped to date,
+ * this member function is called to map the next one.
+ * @return true if a new bank has been found and mapped, else false.
+ */
+bool DSSIaudiooutput::mapNextBank()
+{
+ pthread_mutex_lock(&master->mutex);
+ Bank &bank = master->bank;
+ bool retval;
+ if((bankNoToMap >= (int)bank.banks.size())
+ || bank.banks[bankNoToMap].dir.empty())
+ retval = false;
+ else {
+ bank.loadbank(bank.banks[bankNoToMap].dir);
+ for(unsigned long instrument = 0; instrument < BANK_SIZE;
+ ++instrument) {
+ string insName = bank.getname(instrument);
+ if(!insName.empty() && (insName[0] != '\0') && (insName[0] != ' '))
+ programMap.push_back(ProgramDescriptor(bankNoToMap, instrument,
+ const_cast<char *>(
+ insName.c_str())));
+ }
+ bankNoToMap++;
+ retval = true;
+ }
+ pthread_mutex_unlock(&master->mutex);
+ return retval;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.h b/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.h
new file mode 100644
index 0000000..f7eaaf3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.h
@@ -0,0 +1,123 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ VSTaudiooutput.h - Audio output for VST
+ Copyright (C) 2002 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#ifndef VST_AUDIO_OUTPUT_H
+#define VST_AUDIO_OUTPUT_H
+
+#include <pthread.h>
+
+#include "../globals.h"
+#include "../Misc/Master.h"
+
+#include <dssi.h>
+#include <ladspa.h>
+#include <vector>
+
+class DSSIaudiooutput
+{
+ public:
+ //
+ // Static stubs for LADSPA member functions
+ //
+ static void stub_connectPort(LADSPA_Handle instance,
+ unsigned long port,
+ LADSPA_Data *data);
+ static void stub_activate(LADSPA_Handle instance);
+ static void stub_run(LADSPA_Handle instance, unsigned long sample_count);
+ static void stub_deactivate(LADSPA_Handle Instance);
+ static void stub_cleanup(LADSPA_Handle instance);
+
+ //
+ // Static stubs for DSSI member functions
+ //
+ static const DSSI_Program_Descriptor *stub_getProgram(
+ LADSPA_Handle instance,
+ unsigned long Index);
+ static void stub_selectProgram(LADSPA_Handle instance,
+ unsigned long bank,
+ unsigned long program);
+ static int stub_getMidiControllerForPort(LADSPA_Handle instance,
+ unsigned long port);
+ static void stub_runSynth(LADSPA_Handle instance,
+ unsigned long sample_count,
+ snd_seq_event_t *events,
+ unsigned long event_count);
+
+ /*
+ * LADSPA member functions
+ */
+ static LADSPA_Handle instantiate(const LADSPA_Descriptor *descriptor,
+ unsigned long s_rate);
+ void connectPort(unsigned long port, LADSPA_Data *data);
+ void activate();
+ void run(unsigned long sample_count);
+ void deactivate();
+ void cleanup();
+ static const LADSPA_Descriptor *getLadspaDescriptor(unsigned long index);
+
+ /*
+ * DSSI member functions
+ */
+ const DSSI_Program_Descriptor *getProgram(unsigned long Index);
+ void selectProgram(unsigned long bank, unsigned long program);
+ int getMidiControllerForPort(unsigned long port);
+ void runSynth(unsigned long sample_count,
+ snd_seq_event_t *events,
+ unsigned long event_count);
+ static const DSSI_Descriptor *getDssiDescriptor(unsigned long index);
+
+ struct ProgramDescriptor {
+ unsigned long bank;
+ unsigned long program;
+ std::string name;
+ ProgramDescriptor(unsigned long _bank,
+ unsigned long _program,
+ char *_name);
+ };
+
+ private:
+
+ DSSIaudiooutput(unsigned long sampleRate);
+ ~DSSIaudiooutput();
+ static DSSI_Descriptor *initDssiDescriptor();
+ static DSSIaudiooutput *getInstance(LADSPA_Handle instance);
+ void initBanks();
+ bool mapNextBank();
+
+ LADSPA_Data *outl;
+ LADSPA_Data *outr;
+ long sampleRate;
+ Master *master;
+ static DSSI_Descriptor *dssiDescriptor;
+ static std::string bankDirNames[];
+ static
+ std::vector<ProgramDescriptor> programMap;
+
+ /**
+ * Flag controlling the list of bank directories
+ */
+ bool banksInited;
+
+ static
+ long bankNoToMap;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp
new file mode 100644
index 0000000..02564db
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp
@@ -0,0 +1,796 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ ADnoteParameters.cpp - Parameters for ADnote (ADsynth)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+#include "ADnoteParameters.h"
+#include "EnvelopeParams.h"
+#include "LFOParams.h"
+#include "../Misc/XMLwrapper.h"
+#include "../DSP/FFTwrapper.h"
+#include "../Synth/OscilGen.h"
+#include "../Synth/Resonance.h"
+#include "FilterParams.h"
+
+int ADnote_unison_sizes[] =
+{1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 25, 30, 40, 50, 0};
+
+ADnoteParameters::ADnoteParameters(FFTwrapper *fft_)
+ :PresetsArray()
+{
+ setpresettype("Padsynth");
+ fft = fft_;
+
+
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice)
+ EnableVoice(nvoice);
+
+ defaults();
+}
+
+ADnoteGlobalParam::ADnoteGlobalParam()
+{
+ FreqEnvelope = new EnvelopeParams(0, 0);
+ FreqEnvelope->ASRinit(64, 50, 64, 60);
+ FreqLfo = new LFOParams(70, 0, 64, 0, 0, 0, 0, 0);
+
+ AmpEnvelope = new EnvelopeParams(64, 1);
+ AmpEnvelope->ADSRinit_dB(0, 40, 127, 25);
+ AmpLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 1);
+
+ GlobalFilter = new FilterParams(2, 94, 40);
+ FilterEnvelope = new EnvelopeParams(0, 1);
+ FilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64);
+ FilterLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 2);
+ Reson = new Resonance();
+}
+
+void ADnoteParameters::defaults()
+{
+ //Default Parameters
+ GlobalPar.defaults();
+
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice)
+ defaults(nvoice);
+
+ VoicePar[0].Enabled = 1;
+}
+
+void ADnoteGlobalParam::defaults()
+{
+ /* Frequency Global Parameters */
+ PStereo = 1; //stereo
+ PDetune = 8192; //zero
+ PCoarseDetune = 0;
+ PDetuneType = 1;
+ FreqEnvelope->defaults();
+ FreqLfo->defaults();
+ PBandwidth = 64;
+
+ /* Amplitude Global Parameters */
+ PVolume = 90;
+ PPanning = 64; //center
+ PAmpVelocityScaleFunction = 64;
+ AmpEnvelope->defaults();
+ AmpLfo->defaults();
+ PPunchStrength = 0;
+ PPunchTime = 60;
+ PPunchStretch = 64;
+ PPunchVelocitySensing = 72;
+ Hrandgrouping = 0;
+
+ /* Filter Global Parameters*/
+ PFilterVelocityScale = 64;
+ PFilterVelocityScaleFunction = 64;
+ GlobalFilter->defaults();
+ FilterEnvelope->defaults();
+ FilterLfo->defaults();
+ Reson->defaults();
+}
+
+/*
+ * Defaults a voice
+ */
+void ADnoteParameters::defaults(int n)
+{
+ VoicePar[n].defaults();
+}
+
+void ADnoteVoiceParam::defaults()
+{
+ Enabled = 0;
+
+ Unison_size = 1;
+ Unison_frequency_spread = 60;
+ Unison_stereo_spread = 64;
+ Unison_vibratto = 64;
+ Unison_vibratto_speed = 64;
+ Unison_invert_phase = 0;
+ Unison_phase_randomness = 127;
+
+ Type = 0;
+ Pfixedfreq = 0;
+ PfixedfreqET = 0;
+ Presonance = 1;
+ Pfilterbypass = 0;
+ Pextoscil = -1;
+ PextFMoscil = -1;
+ Poscilphase = 64;
+ PFMoscilphase = 64;
+ PDelay = 0;
+ PVolume = 100;
+ PVolumeminus = 0;
+ PPanning = 64; //center
+ PDetune = 8192; //8192=0
+ PCoarseDetune = 0;
+ PDetuneType = 0;
+ PFreqLfoEnabled = 0;
+ PFreqEnvelopeEnabled = 0;
+ PAmpEnvelopeEnabled = 0;
+ PAmpLfoEnabled = 0;
+ PAmpVelocityScaleFunction = 127;
+ PFilterEnabled = 0;
+ PFilterEnvelopeEnabled = 0;
+ PFilterLfoEnabled = 0;
+ PFMEnabled = 0;
+
+ //I use the internal oscillator (-1)
+ PFMVoice = -1;
+
+ PFMVolume = 90;
+ PFMVolumeDamp = 64;
+ PFMDetune = 8192;
+ PFMCoarseDetune = 0;
+ PFMDetuneType = 0;
+ PFMFreqEnvelopeEnabled = 0;
+ PFMAmpEnvelopeEnabled = 0;
+ PFMVelocityScaleFunction = 64;
+
+ OscilSmp->defaults();
+ FMSmp->defaults();
+
+ AmpEnvelope->defaults();
+ AmpLfo->defaults();
+
+ FreqEnvelope->defaults();
+ FreqLfo->defaults();
+
+ VoiceFilter->defaults();
+ FilterEnvelope->defaults();
+ FilterLfo->defaults();
+
+ FMFreqEnvelope->defaults();
+ FMAmpEnvelope->defaults();
+}
+
+
+
+/*
+ * Init the voice parameters
+ */
+void ADnoteParameters::EnableVoice(int nvoice)
+{
+ VoicePar[nvoice].enable(fft, GlobalPar.Reson);
+}
+
+void ADnoteVoiceParam::enable(FFTwrapper *fft, Resonance *Reson)
+{
+ OscilSmp = new OscilGen(fft, Reson);
+ FMSmp = new OscilGen(fft, NULL);
+
+ AmpEnvelope = new EnvelopeParams(64, 1);
+ AmpEnvelope->ADSRinit_dB(0, 100, 127, 100);
+ AmpLfo = new LFOParams(90, 32, 64, 0, 0, 30, 0, 1);
+
+ FreqEnvelope = new EnvelopeParams(0, 0);
+ FreqEnvelope->ASRinit(30, 40, 64, 60);
+ FreqLfo = new LFOParams(50, 40, 0, 0, 0, 0, 0, 0);
+
+ VoiceFilter = new FilterParams(2, 50, 60);
+ FilterEnvelope = new EnvelopeParams(0, 0);
+ FilterEnvelope->ADSRinit_filter(90, 70, 40, 70, 10, 40);
+ FilterLfo = new LFOParams(50, 20, 64, 0, 0, 0, 0, 2);
+
+ FMFreqEnvelope = new EnvelopeParams(0, 0);
+ FMFreqEnvelope->ASRinit(20, 90, 40, 80);
+ FMAmpEnvelope = new EnvelopeParams(64, 1);
+ FMAmpEnvelope->ADSRinit(80, 90, 127, 100);
+}
+
+/*
+ * Get the Multiplier of the fine detunes of the voices
+ */
+float ADnoteParameters::getBandwidthDetuneMultiplier()
+{
+ float bw = (GlobalPar.PBandwidth - 64.0f) / 64.0f;
+ bw = powf(2.0f, bw * powf(fabs(bw), 0.2f) * 5.0f);
+
+ return bw;
+}
+
+/*
+ * Get the unison spread in cents for a voice
+ */
+
+float ADnoteParameters::getUnisonFrequencySpreadCents(int nvoice) {
+ float unison_spread = VoicePar[nvoice].Unison_frequency_spread / 127.0f;
+ unison_spread = powf(unison_spread * 2.0f, 2.0f) * 50.0f; //cents
+ return unison_spread;
+}
+
+/*
+ * Kill the voice
+ */
+void ADnoteParameters::KillVoice(int nvoice)
+{
+ VoicePar[nvoice].kill();
+}
+
+void ADnoteVoiceParam::kill()
+{
+ delete OscilSmp;
+ delete FMSmp;
+
+ delete AmpEnvelope;
+ delete AmpLfo;
+
+ delete FreqEnvelope;
+ delete FreqLfo;
+
+ delete VoiceFilter;
+ delete FilterEnvelope;
+ delete FilterLfo;
+
+ delete FMFreqEnvelope;
+ delete FMAmpEnvelope;
+}
+
+
+ADnoteGlobalParam::~ADnoteGlobalParam()
+{
+ delete FreqEnvelope;
+ delete FreqLfo;
+ delete AmpEnvelope;
+ delete AmpLfo;
+ delete GlobalFilter;
+ delete FilterEnvelope;
+ delete FilterLfo;
+ delete Reson;
+}
+
+ADnoteParameters::~ADnoteParameters()
+{
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice)
+ KillVoice(nvoice);
+}
+
+int ADnoteParameters::get_unison_size_index(int nvoice) {
+ int index = 0;
+ if(nvoice >= NUM_VOICES)
+ return 0;
+ int unison = VoicePar[nvoice].Unison_size;
+
+ while(1) {
+ if(ADnote_unison_sizes[index] >= unison)
+ return index;
+
+ if(ADnote_unison_sizes[index] == 0)
+ return index - 1;
+
+ index++;
+ }
+ return 0;
+}
+
+void ADnoteParameters::set_unison_size_index(int nvoice, int index) {
+ int unison = 1;
+ for(int i = 0; i <= index; ++i) {
+ unison = ADnote_unison_sizes[i];
+ if(unison == 0) {
+ unison = ADnote_unison_sizes[i - 1];
+ break;
+ }
+ }
+
+ VoicePar[nvoice].Unison_size = unison;
+}
+
+
+
+void ADnoteParameters::add2XMLsection(XMLwrapper *xml, int n)
+{
+ int nvoice = n;
+ if(nvoice >= NUM_VOICES)
+ return;
+
+ int oscilused = 0, fmoscilused = 0; //if the oscil or fmoscil are used by another voice
+
+ for(int i = 0; i < NUM_VOICES; ++i) {
+ if(VoicePar[i].Pextoscil == nvoice)
+ oscilused = 1;
+ if(VoicePar[i].PextFMoscil == nvoice)
+ fmoscilused = 1;
+ }
+
+ xml->addparbool("enabled", VoicePar[nvoice].Enabled);
+ if(((VoicePar[nvoice].Enabled == 0) && (oscilused == 0)
+ && (fmoscilused == 0)) && (xml->minimal))
+ return;
+
+ VoicePar[nvoice].add2XML(xml, fmoscilused);
+}
+
+void ADnoteVoiceParam::add2XML(XMLwrapper *xml, bool fmoscilused)
+{
+ xml->addpar("type", Type);
+
+ xml->addpar("unison_size", Unison_size);
+ xml->addpar("unison_frequency_spread",
+ Unison_frequency_spread);
+ xml->addpar("unison_stereo_spread", Unison_stereo_spread);
+ xml->addpar("unison_vibratto", Unison_vibratto);
+ xml->addpar("unison_vibratto_speed", Unison_vibratto_speed);
+ xml->addpar("unison_invert_phase", Unison_invert_phase);
+ xml->addpar("unison_phase_randomness", Unison_phase_randomness);
+
+ xml->addpar("delay", PDelay);
+ xml->addparbool("resonance", Presonance);
+
+ xml->addpar("ext_oscil", Pextoscil);
+ xml->addpar("ext_fm_oscil", PextFMoscil);
+
+ xml->addpar("oscil_phase", Poscilphase);
+ xml->addpar("oscil_fm_phase", PFMoscilphase);
+
+ xml->addparbool("filter_enabled", PFilterEnabled);
+ xml->addparbool("filter_bypass", Pfilterbypass);
+
+ xml->addpar("fm_enabled", PFMEnabled);
+
+ xml->beginbranch("OSCIL");
+ OscilSmp->add2XML(xml);
+ xml->endbranch();
+
+
+ xml->beginbranch("AMPLITUDE_PARAMETERS");
+ xml->addpar("panning", PPanning);
+ xml->addpar("volume", PVolume);
+ xml->addparbool("volume_minus", PVolumeminus);
+ xml->addpar("velocity_sensing", PAmpVelocityScaleFunction);
+
+ xml->addparbool("amp_envelope_enabled",
+ PAmpEnvelopeEnabled);
+ if((PAmpEnvelopeEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("AMPLITUDE_ENVELOPE");
+ AmpEnvelope->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->addparbool("amp_lfo_enabled", PAmpLfoEnabled);
+ if((PAmpLfoEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("AMPLITUDE_LFO");
+ AmpLfo->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->endbranch();
+
+ xml->beginbranch("FREQUENCY_PARAMETERS");
+ xml->addparbool("fixed_freq", Pfixedfreq);
+ xml->addpar("fixed_freq_et", PfixedfreqET);
+ xml->addpar("detune", PDetune);
+ xml->addpar("coarse_detune", PCoarseDetune);
+ xml->addpar("detune_type", PDetuneType);
+
+ xml->addparbool("freq_envelope_enabled",
+ PFreqEnvelopeEnabled);
+ if((PFreqEnvelopeEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("FREQUENCY_ENVELOPE");
+ FreqEnvelope->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->addparbool("freq_lfo_enabled", PFreqLfoEnabled);
+ if((PFreqLfoEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("FREQUENCY_LFO");
+ FreqLfo->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->endbranch();
+
+
+ if((PFilterEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("FILTER_PARAMETERS");
+ xml->beginbranch("FILTER");
+ VoiceFilter->add2XML(xml);
+ xml->endbranch();
+
+ xml->addparbool("filter_envelope_enabled",
+ PFilterEnvelopeEnabled);
+ if((PFilterEnvelopeEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("FILTER_ENVELOPE");
+ FilterEnvelope->add2XML(xml);
+ xml->endbranch();
+ }
+
+ xml->addparbool("filter_lfo_enabled",
+ PFilterLfoEnabled);
+ if((PFilterLfoEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("FILTER_LFO");
+ FilterLfo->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->endbranch();
+ }
+
+ if((PFMEnabled != 0) || (fmoscilused != 0)
+ || (!xml->minimal)) {
+ xml->beginbranch("FM_PARAMETERS");
+ xml->addpar("input_voice", PFMVoice);
+
+ xml->addpar("volume", PFMVolume);
+ xml->addpar("volume_damp", PFMVolumeDamp);
+ xml->addpar("velocity_sensing",
+ PFMVelocityScaleFunction);
+
+ xml->addparbool("amp_envelope_enabled",
+ PFMAmpEnvelopeEnabled);
+ if((PFMAmpEnvelopeEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("AMPLITUDE_ENVELOPE");
+ FMAmpEnvelope->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->beginbranch("MODULATOR");
+ xml->addpar("detune", PFMDetune);
+ xml->addpar("coarse_detune", PFMCoarseDetune);
+ xml->addpar("detune_type", PFMDetuneType);
+
+ xml->addparbool("freq_envelope_enabled",
+ PFMFreqEnvelopeEnabled);
+ if((PFMFreqEnvelopeEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("FREQUENCY_ENVELOPE");
+ FMFreqEnvelope->add2XML(xml);
+ xml->endbranch();
+ }
+
+ xml->beginbranch("OSCIL");
+ FMSmp->add2XML(xml);
+ xml->endbranch();
+
+ xml->endbranch();
+ xml->endbranch();
+ }
+}
+
+void ADnoteGlobalParam::add2XML(XMLwrapper *xml)
+{
+ xml->addparbool("stereo", PStereo);
+
+ xml->beginbranch("AMPLITUDE_PARAMETERS");
+ xml->addpar("volume", PVolume);
+ xml->addpar("panning", PPanning);
+ xml->addpar("velocity_sensing", PAmpVelocityScaleFunction);
+ xml->addpar("punch_strength", PPunchStrength);
+ xml->addpar("punch_time", PPunchTime);
+ xml->addpar("punch_stretch", PPunchStretch);
+ xml->addpar("punch_velocity_sensing", PPunchVelocitySensing);
+ xml->addpar("harmonic_randomness_grouping", Hrandgrouping);
+
+ xml->beginbranch("AMPLITUDE_ENVELOPE");
+ AmpEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("AMPLITUDE_LFO");
+ AmpLfo->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+
+ xml->beginbranch("FREQUENCY_PARAMETERS");
+ xml->addpar("detune", PDetune);
+
+ xml->addpar("coarse_detune", PCoarseDetune);
+ xml->addpar("detune_type", PDetuneType);
+
+ xml->addpar("bandwidth", PBandwidth);
+
+ xml->beginbranch("FREQUENCY_ENVELOPE");
+ FreqEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("FREQUENCY_LFO");
+ FreqLfo->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+
+
+ xml->beginbranch("FILTER_PARAMETERS");
+ xml->addpar("velocity_sensing_amplitude", PFilterVelocityScale);
+ xml->addpar("velocity_sensing", PFilterVelocityScaleFunction);
+
+ xml->beginbranch("FILTER");
+ GlobalFilter->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("FILTER_ENVELOPE");
+ FilterEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("FILTER_LFO");
+ FilterLfo->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+
+ xml->beginbranch("RESONANCE");
+ Reson->add2XML(xml);
+ xml->endbranch();
+}
+
+void ADnoteParameters::add2XML(XMLwrapper *xml)
+{
+ GlobalPar.add2XML(xml);
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ xml->beginbranch("VOICE", nvoice);
+ add2XMLsection(xml, nvoice);
+ xml->endbranch();
+ }
+}
+
+
+void ADnoteGlobalParam::getfromXML(XMLwrapper *xml)
+{
+ PStereo = xml->getparbool("stereo", PStereo);
+
+ if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
+ PVolume = xml->getpar127("volume", PVolume);
+ PPanning = xml->getpar127("panning", PPanning);
+ PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing",
+ PAmpVelocityScaleFunction);
+
+ PPunchStrength = xml->getpar127("punch_strength", PPunchStrength);
+ PPunchTime = xml->getpar127("punch_time", PPunchTime);
+ PPunchStretch = xml->getpar127("punch_stretch", PPunchStretch);
+ PPunchVelocitySensing = xml->getpar127("punch_velocity_sensing",
+ PPunchVelocitySensing);
+ Hrandgrouping = xml->getpar127("harmonic_randomness_grouping",
+ Hrandgrouping);
+
+ if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
+ AmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("AMPLITUDE_LFO")) {
+ AmpLfo->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
+ PDetune = xml->getpar("detune", PDetune, 0, 16383);
+ PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383);
+ PDetuneType = xml->getpar127("detune_type", PDetuneType);
+ PBandwidth = xml->getpar127("bandwidth", PBandwidth);
+
+ xml->enterbranch("FREQUENCY_ENVELOPE");
+ FreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FREQUENCY_LFO");
+ FreqLfo->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->exitbranch();
+ }
+
+
+ if(xml->enterbranch("FILTER_PARAMETERS")) {
+ PFilterVelocityScale = xml->getpar127("velocity_sensing_amplitude",
+ PFilterVelocityScale);
+ PFilterVelocityScaleFunction = xml->getpar127(
+ "velocity_sensing",
+ PFilterVelocityScaleFunction);
+
+ xml->enterbranch("FILTER");
+ GlobalFilter->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FILTER_ENVELOPE");
+ FilterEnvelope->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FILTER_LFO");
+ FilterLfo->getfromXML(xml);
+ xml->exitbranch();
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("RESONANCE")) {
+ Reson->getfromXML(xml);
+ xml->exitbranch();
+ }
+}
+
+void ADnoteParameters::getfromXML(XMLwrapper *xml)
+{
+ GlobalPar.getfromXML(xml);
+
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ VoicePar[nvoice].Enabled = 0;
+ if(xml->enterbranch("VOICE", nvoice) == 0)
+ continue;
+ getfromXMLsection(xml, nvoice);
+ xml->exitbranch();
+ }
+}
+
+void ADnoteParameters::getfromXMLsection(XMLwrapper *xml, int n)
+{
+ int nvoice = n;
+ if(nvoice >= NUM_VOICES)
+ return;
+
+ VoicePar[nvoice].getfromXML(xml, nvoice);
+}
+
+
+void ADnoteVoiceParam::getfromXML(XMLwrapper *xml, unsigned nvoice)
+{
+ Enabled = xml->getparbool("enabled", 0);
+ Unison_size = xml->getpar127("unison_size", Unison_size);
+ Unison_frequency_spread = xml->getpar127("unison_frequency_spread",
+ Unison_frequency_spread);
+ Unison_stereo_spread = xml->getpar127("unison_stereo_spread",
+ Unison_stereo_spread);
+ Unison_vibratto = xml->getpar127("unison_vibratto", Unison_vibratto);
+ Unison_vibratto_speed = xml->getpar127("unison_vibratto_speed",
+ Unison_vibratto_speed);
+ Unison_invert_phase = xml->getpar127("unison_invert_phase",
+ Unison_invert_phase);
+ Unison_phase_randomness = xml->getpar127("unison_phase_randomness",
+ Unison_phase_randomness);
+
+ Type = xml->getpar127("type", Type);
+ PDelay = xml->getpar127("delay", PDelay);
+ Presonance = xml->getparbool("resonance", Presonance);
+
+ Pextoscil = xml->getpar("ext_oscil", -1, -1, nvoice - 1);
+ PextFMoscil = xml->getpar("ext_fm_oscil", -1, -1, nvoice - 1);
+
+ Poscilphase = xml->getpar127("oscil_phase", Poscilphase);
+ PFMoscilphase = xml->getpar127("oscil_fm_phase", PFMoscilphase);
+ PFilterEnabled = xml->getparbool("filter_enabled", PFilterEnabled);
+ Pfilterbypass = xml->getparbool("filter_bypass", Pfilterbypass);
+ PFMEnabled = xml->getpar127("fm_enabled", PFMEnabled);
+
+ if(xml->enterbranch("OSCIL")) {
+ OscilSmp->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+
+ if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
+ PPanning = xml->getpar127("panning", PPanning);
+ PVolume = xml->getpar127("volume", PVolume);
+ PVolumeminus = xml->getparbool("volume_minus", PVolumeminus);
+ PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing",
+ PAmpVelocityScaleFunction);
+
+ PAmpEnvelopeEnabled = xml->getparbool("amp_envelope_enabled",
+ PAmpEnvelopeEnabled);
+ if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
+ AmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ PAmpLfoEnabled = xml->getparbool("amp_lfo_enabled", PAmpLfoEnabled);
+ if(xml->enterbranch("AMPLITUDE_LFO")) {
+ AmpLfo->getfromXML(xml);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
+ Pfixedfreq = xml->getparbool("fixed_freq", Pfixedfreq);
+ PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET);
+ PDetune = xml->getpar("detune", PDetune, 0, 16383);
+ PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383);
+ PDetuneType = xml->getpar127("detune_type", PDetuneType);
+ PFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled",
+ PFreqEnvelopeEnabled);
+
+ if(xml->enterbranch("FREQUENCY_ENVELOPE")) {
+ FreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ PFreqLfoEnabled = xml->getparbool("freq_lfo_enabled", PFreqLfoEnabled);
+
+ if(xml->enterbranch("FREQUENCY_LFO")) {
+ FreqLfo->getfromXML(xml);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("FILTER_PARAMETERS")) {
+ if(xml->enterbranch("FILTER")) {
+ VoiceFilter->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ PFilterEnvelopeEnabled = xml->getparbool("filter_envelope_enabled",
+ PFilterEnvelopeEnabled);
+ if(xml->enterbranch("FILTER_ENVELOPE")) {
+ FilterEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ PFilterLfoEnabled = xml->getparbool("filter_lfo_enabled",
+ PFilterLfoEnabled);
+ if(xml->enterbranch("FILTER_LFO")) {
+ FilterLfo->getfromXML(xml);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("FM_PARAMETERS")) {
+ PFMVoice = xml->getpar("input_voice", PFMVoice, -1, nvoice - 1);
+ PFMVolume = xml->getpar127("volume", PFMVolume);
+ PFMVolumeDamp = xml->getpar127("volume_damp", PFMVolumeDamp);
+ PFMVelocityScaleFunction = xml->getpar127("velocity_sensing",
+ PFMVelocityScaleFunction);
+
+ PFMAmpEnvelopeEnabled = xml->getparbool("amp_envelope_enabled",
+ PFMAmpEnvelopeEnabled);
+ if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
+ FMAmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("MODULATOR")) {
+ PFMDetune = xml->getpar("detune", PFMDetune, 0, 16383);
+ PFMCoarseDetune = xml->getpar("coarse_detune",
+ PFMCoarseDetune,
+ 0,
+ 16383);
+ PFMDetuneType = xml->getpar127("detune_type", PFMDetuneType);
+
+ PFMFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled",
+ PFMFreqEnvelopeEnabled);
+ if(xml->enterbranch("FREQUENCY_ENVELOPE")) {
+ FMFreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("OSCIL")) {
+ FMSmp->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h
new file mode 100644
index 0000000..a95e1d1
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h
@@ -0,0 +1,319 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ ADnoteParameters.h - Parameters for ADnote (ADsynth)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef AD_NOTE_PARAMETERS_H
+#define AD_NOTE_PARAMETERS_H
+
+
+#include "../globals.h"
+#include "../Misc/Util.h"
+#include "PresetsArray.h"
+
+class EnvelopeParams;
+class LFOParams;
+class FilterParams;
+class Resonance;
+class OscilGen;
+class FFTwrapper;
+
+enum FMTYPE {
+ NONE, MORPH, RING_MOD, PHASE_MOD, FREQ_MOD, PITCH_MOD
+};
+extern int ADnote_unison_sizes[];
+
+/*****************************************************************/
+/* GLOBAL PARAMETERS */
+/*****************************************************************/
+
+struct ADnoteGlobalParam {
+ ADnoteGlobalParam();
+ ~ADnoteGlobalParam();
+ void defaults();
+ void add2XML(XMLwrapper *xml);
+ void getfromXML(XMLwrapper *xml);
+ /* The instrument type - MONO/STEREO
+ If the mode is MONO, the panning of voices are not used
+ Stereo=1, Mono=0. */
+
+ unsigned char PStereo;
+
+
+ /******************************************
+ * FREQUENCY GLOBAL PARAMETERS *
+ ******************************************/
+ unsigned short int PDetune; //fine detune
+ unsigned short int PCoarseDetune; //coarse detune+octave
+ unsigned char PDetuneType; //detune type
+
+ unsigned char PBandwidth; //how much the relative fine detunes of the voices are changed
+
+ EnvelopeParams *FreqEnvelope; //Frequency Envelope
+
+ LFOParams *FreqLfo; //Frequency LFO
+
+ /********************************************
+ * AMPLITUDE GLOBAL PARAMETERS *
+ ********************************************/
+
+ /* Panning - 0 - random
+ 1 - left
+ 64 - center
+ 127 - right */
+ unsigned char PPanning;
+
+ unsigned char PVolume;
+
+ unsigned char PAmpVelocityScaleFunction;
+
+ EnvelopeParams *AmpEnvelope;
+
+ LFOParams *AmpLfo;
+
+ unsigned char PPunchStrength, PPunchTime, PPunchStretch,
+ PPunchVelocitySensing;
+
+ /******************************************
+ * FILTER GLOBAL PARAMETERS *
+ ******************************************/
+ FilterParams *GlobalFilter;
+
+ // filter velocity sensing
+ unsigned char PFilterVelocityScale;
+
+ // filter velocity sensing
+ unsigned char PFilterVelocityScaleFunction;
+
+ EnvelopeParams *FilterEnvelope;
+
+ LFOParams *FilterLfo;
+
+ // RESONANCE
+ Resonance *Reson;
+
+ //how the randomness is applied to the harmonics on more voices using the same oscillator
+ unsigned char Hrandgrouping;
+};
+
+
+
+/***********************************************************/
+/* VOICE PARAMETERS */
+/***********************************************************/
+struct ADnoteVoiceParam {
+ void getfromXML(XMLwrapper *xml, unsigned nvoice);
+ void add2XML(XMLwrapper *xml, bool fmoscilused);
+ void defaults();
+ void enable(FFTwrapper *fft, Resonance *Reson);
+ void kill();
+ /** If the voice is enabled */
+ unsigned char Enabled;
+
+ /** How many subvoices are used in this voice */
+ unsigned char Unison_size;
+
+ /** How subvoices are spread */
+ unsigned char Unison_frequency_spread;
+
+ /** How much phase randomization */
+ unsigned char Unison_phase_randomness;
+
+ /** Stereo spread of the subvoices*/
+ unsigned char Unison_stereo_spread;
+
+ /** Vibratto of the subvoices (which makes the unison more "natural")*/
+ unsigned char Unison_vibratto;
+
+ /** Medium speed of the vibratto of the subvoices*/
+ unsigned char Unison_vibratto_speed;
+
+ /** Unison invert phase */
+ unsigned char Unison_invert_phase; //0=none,1=random,2=50%,3=33%,4=25%
+
+ /** Type of the voice (0=Sound,1=Noise)*/
+ unsigned char Type;
+
+ /** Voice Delay */
+ unsigned char PDelay;
+
+ /** If the resonance is enabled for this voice */
+ unsigned char Presonance;
+
+ // What external oscil should I use, -1 for internal OscilSmp&FMSmp
+ short int Pextoscil, PextFMoscil;
+ // it is not allowed that the externoscil,externFMoscil => current voice
+
+ // oscillator phases
+ unsigned char Poscilphase, PFMoscilphase;
+
+ // filter bypass
+ unsigned char Pfilterbypass;
+
+ /** Voice oscillator */
+ OscilGen *OscilSmp;
+
+ /**********************************
+ * FREQUENCY PARAMETERS *
+ **********************************/
+
+ /** If the base frequency is fixed to 440 Hz*/
+ unsigned char Pfixedfreq;
+
+ /* Equal temperate (this is used only if the Pfixedfreq is enabled)
+ If this parameter is 0, the frequency is fixed (to 440 Hz);
+ if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
+ unsigned char PfixedfreqET;
+
+ /** Fine detune */
+ unsigned short int PDetune;
+
+ /** Coarse detune + octave */
+ unsigned short int PCoarseDetune;
+
+ /** Detune type */
+ unsigned char PDetuneType;
+
+ /* Frequency Envelope */
+ unsigned char PFreqEnvelopeEnabled;
+ EnvelopeParams *FreqEnvelope;
+
+ /* Frequency LFO */
+ unsigned char PFreqLfoEnabled;
+ LFOParams *FreqLfo;
+
+
+ /***************************
+ * AMPLITUDE PARAMETERS *
+ ***************************/
+
+ /* Panning 0 - random
+ 1 - left
+ 64 - center
+ 127 - right
+ The Panning is ignored if the instrument is mono */
+ unsigned char PPanning;
+
+ /* Voice Volume */
+ unsigned char PVolume;
+
+ /* If the Volume negative */
+ unsigned char PVolumeminus;
+
+ /* Velocity sensing */
+ unsigned char PAmpVelocityScaleFunction;
+
+ /* Amplitude Envelope */
+ unsigned char PAmpEnvelopeEnabled;
+ EnvelopeParams *AmpEnvelope;
+
+ /* Amplitude LFO */
+ unsigned char PAmpLfoEnabled;
+ LFOParams *AmpLfo;
+
+
+
+ /*************************
+ * FILTER PARAMETERS *
+ *************************/
+
+ /* Voice Filter */
+ unsigned char PFilterEnabled;
+ FilterParams *VoiceFilter;
+
+ /* Filter Envelope */
+ unsigned char PFilterEnvelopeEnabled;
+ EnvelopeParams *FilterEnvelope;
+
+ /* LFO Envelope */
+ unsigned char PFilterLfoEnabled;
+ LFOParams *FilterLfo;
+
+ /****************************
+ * MODULLATOR PARAMETERS *
+ ****************************/
+
+ /* Modullator Parameters (0=off,1=Morph,2=RM,3=PM,4=FM.. */
+ unsigned char PFMEnabled;
+
+ /* Voice that I use as modullator instead of FMSmp.
+ It is -1 if I use FMSmp(default).
+ It maynot be equal or bigger than current voice */
+ short int PFMVoice;
+
+ /* Modullator oscillator */
+ OscilGen *FMSmp;
+
+ /* Modullator Volume */
+ unsigned char PFMVolume;
+
+ /* Modullator damping at higher frequencies */
+ unsigned char PFMVolumeDamp;
+
+ /* Modullator Velocity Sensing */
+ unsigned char PFMVelocityScaleFunction;
+
+ /* Fine Detune of the Modullator*/
+ unsigned short int PFMDetune;
+
+ /* Coarse Detune of the Modullator */
+ unsigned short int PFMCoarseDetune;
+
+ /* The detune type */
+ unsigned char PFMDetuneType;
+
+ /* Frequency Envelope of the Modullator */
+ unsigned char PFMFreqEnvelopeEnabled;
+ EnvelopeParams *FMFreqEnvelope;
+
+ /* Frequency Envelope of the Modullator */
+ unsigned char PFMAmpEnvelopeEnabled;
+ EnvelopeParams *FMAmpEnvelope;
+};
+
+class ADnoteParameters:public PresetsArray
+{
+ public:
+ ADnoteParameters(FFTwrapper *fft_);
+ ~ADnoteParameters();
+
+ ADnoteGlobalParam GlobalPar;
+ ADnoteVoiceParam VoicePar[NUM_VOICES];
+
+ void defaults();
+ void add2XML(XMLwrapper *xml);
+ void getfromXML(XMLwrapper *xml);
+
+ float getBandwidthDetuneMultiplier();
+ float getUnisonFrequencySpreadCents(int nvoice);
+ int get_unison_size_index(int nvoice);
+ void set_unison_size_index(int nvoice, int index);
+ private:
+ void defaults(int n); //n is the nvoice
+
+ void EnableVoice(int nvoice);
+ void KillVoice(int nvoice);
+ FFTwrapper *fft;
+
+ void add2XMLsection(XMLwrapper *xml, int n);
+ void getfromXMLsection(XMLwrapper *xml, int n);
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/Params/CMakeLists.txt
new file mode 100644
index 0000000..d5758af
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/CMakeLists.txt
@@ -0,0 +1,13 @@
+set(zynaddsubfx_params_SRCS
+ Params/ADnoteParameters.cpp
+ Params/Controller.cpp
+ Params/EnvelopeParams.cpp
+ Params/FilterParams.cpp
+ Params/LFOParams.cpp
+ Params/PADnoteParameters.cpp
+ Params/Presets.cpp
+ Params/PresetsArray.cpp
+ Params/PresetsStore.cpp
+ Params/SUBnoteParameters.cpp
+ PARENT_SCOPE
+)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.cpp
new file mode 100644
index 0000000..5d12654
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.cpp
@@ -0,0 +1,419 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Controller.cpp - (Midi) Controllers implementation
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Controller.h"
+#include <math.h>
+#include <stdio.h>
+
+Controller::Controller()
+{
+ defaults();
+ resetall();
+}
+
+Controller::~Controller()
+{}
+
+void Controller::defaults()
+{
+ setpitchwheelbendrange(100); //1 halftones
+ expression.receive = 1;
+ panning.depth = 64;
+ filtercutoff.depth = 64;
+ filterq.depth = 64;
+ bandwidth.depth = 64;
+ bandwidth.exponential = 0;
+ modwheel.depth = 80;
+ modwheel.exponential = 0;
+ fmamp.receive = 1;
+ volume.receive = 1;
+ sustain.receive = 1;
+ NRPN.receive = 1;
+
+ portamento.portamento = 0;
+ portamento.used = 0;
+ portamento.proportional = 0;
+ portamento.propRate = 80;
+ portamento.propDepth = 90;
+ portamento.receive = 1;
+ portamento.time = 64;
+ portamento.updowntimestretch = 64;
+ portamento.pitchthresh = 3;
+ portamento.pitchthreshtype = 1;
+ portamento.noteusing = -1;
+ resonancecenter.depth = 64;
+ resonancebandwidth.depth = 64;
+
+ initportamento(440.0f, 440.0f, false); // Now has a third argument
+ setportamento(0);
+}
+
+void Controller::resetall()
+{
+ setpitchwheel(0); //center
+ setexpression(127);
+ setpanning(64);
+ setfiltercutoff(64);
+ setfilterq(64);
+ setbandwidth(64);
+ setmodwheel(64);
+ setfmamp(127);
+ setvolume(127);
+ setsustain(0);
+ setresonancecenter(64);
+ setresonancebw(64);
+
+ //reset the NRPN
+ NRPN.parhi = -1;
+ NRPN.parlo = -1;
+ NRPN.valhi = -1;
+ NRPN.vallo = -1;
+}
+
+void Controller::setpitchwheel(int value)
+{
+ pitchwheel.data = value;
+ float cents = value / 8192.0f;
+ cents *= pitchwheel.bendrange;
+ pitchwheel.relfreq = powf(2, cents / 1200.0f);
+ //fprintf(stderr,"%ld %ld -> %.3f\n",pitchwheel.bendrange,pitchwheel.data,pitchwheel.relfreq);fflush(stderr);
+}
+
+void Controller::setpitchwheelbendrange(unsigned short int value)
+{
+ pitchwheel.bendrange = value;
+}
+
+void Controller::setexpression(int value)
+{
+ expression.data = value;
+ if(expression.receive != 0)
+ expression.relvolume = value / 127.0f;
+ else
+ expression.relvolume = 1.0f;
+}
+
+void Controller::setpanning(int value)
+{
+ panning.data = value;
+ panning.pan = (value / 128.0f - 0.5f) * (panning.depth / 64.0f);
+}
+
+void Controller::setfiltercutoff(int value)
+{
+ filtercutoff.data = value;
+ filtercutoff.relfreq =
+ (value - 64.0f) * filtercutoff.depth / 4096.0f * 3.321928f; //3.3219f..=ln2(10)
+}
+
+void Controller::setfilterq(int value)
+{
+ filterq.data = value;
+ filterq.relq = powf(30.0f, (value - 64.0f) / 64.0f * (filterq.depth / 64.0f));
+}
+
+void Controller::setbandwidth(int value)
+{
+ bandwidth.data = value;
+ if(bandwidth.exponential == 0) {
+ float tmp = powf(25.0f, powf(bandwidth.depth / 127.0f, 1.5f)) - 1.0f;
+ if((value < 64) && (bandwidth.depth >= 64))
+ tmp = 1.0f;
+ bandwidth.relbw = (value / 64.0f - 1.0f) * tmp + 1.0f;
+ if(bandwidth.relbw < 0.01f)
+ bandwidth.relbw = 0.01f;
+ }
+ else
+ bandwidth.relbw =
+ powf(25.0f, (value - 64.0f) / 64.0f * (bandwidth.depth / 64.0f));
+ ;
+}
+
+void Controller::setmodwheel(int value)
+{
+ modwheel.data = value;
+ if(modwheel.exponential == 0) {
+ float tmp =
+ powf(25.0f, powf(modwheel.depth / 127.0f, 1.5f) * 2.0f) / 25.0f;
+ if((value < 64) && (modwheel.depth >= 64))
+ tmp = 1.0f;
+ modwheel.relmod = (value / 64.0f - 1.0f) * tmp + 1.0f;
+ if(modwheel.relmod < 0.0f)
+ modwheel.relmod = 0.0f;
+ }
+ else
+ modwheel.relmod =
+ powf(25.0f, (value - 64.0f) / 64.0f * (modwheel.depth / 80.0f));
+}
+
+void Controller::setfmamp(int value)
+{
+ fmamp.data = value;
+ fmamp.relamp = value / 127.0f;
+ if(fmamp.receive != 0)
+ fmamp.relamp = value / 127.0f;
+ else
+ fmamp.relamp = 1.0f;
+}
+
+void Controller::setvolume(int value)
+{
+ volume.data = value;
+ if(volume.receive != 0)
+ volume.volume = powf(0.1f, (127 - value) / 127.0f * 2.0f);
+ else
+ volume.volume = 1.0f;
+}
+
+void Controller::setsustain(int value)
+{
+ sustain.data = value;
+ if(sustain.receive != 0)
+ sustain.sustain = ((value < 64) ? 0 : 1);
+ else
+ sustain.sustain = 0;
+}
+
+void Controller::setportamento(int value)
+{
+ portamento.data = value;
+ if(portamento.receive != 0)
+ portamento.portamento = ((value < 64) ? 0 : 1);
+}
+
+int Controller::initportamento(float oldfreq,
+ float newfreq,
+ bool legatoflag)
+{
+ portamento.x = 0.0f;
+
+ if(legatoflag) { // Legato in progress
+ if(portamento.portamento == 0)
+ return 0;
+ }
+ else // No legato, do the original if...return
+ if((portamento.used != 0) || (portamento.portamento == 0))
+ return 0;
+ ;
+
+ float portamentotime = powf(100.0f, portamento.time / 127.0f) / 50.0f; //portamento time in seconds
+
+ if(portamento.proportional) {
+ //If there is a min(float,float) and a max(float,float) then they
+ //could be used here
+ //Linear functors could also make this nicer
+ if(oldfreq > newfreq) //2 is the center of propRate
+ portamentotime *=
+ powf(oldfreq / newfreq
+ / (portamento.propRate / 127.0f * 3 + .05),
+ (portamento.propDepth / 127.0f * 1.6f + .2));
+ else //1 is the center of propDepth
+ portamentotime *=
+ powf(newfreq / oldfreq
+ / (portamento.propRate / 127.0f * 3 + .05),
+ (portamento.propDepth / 127.0f * 1.6f + .2));
+ }
+
+ if((portamento.updowntimestretch >= 64) && (newfreq < oldfreq)) {
+ if(portamento.updowntimestretch == 127)
+ return 0;
+ portamentotime *= powf(0.1f,
+ (portamento.updowntimestretch - 64) / 63.0f);
+ }
+ if((portamento.updowntimestretch < 64) && (newfreq > oldfreq)) {
+ if(portamento.updowntimestretch == 0)
+ return 0;
+ portamentotime *= powf(0.1f,
+ (64.0f - portamento.updowntimestretch) / 64.0f);
+ }
+
+ //printf("%f->%f : Time %f\n",oldfreq,newfreq,portamentotime);
+
+ portamento.dx = synth->buffersize_f / (portamentotime * synth->samplerate_f);
+ portamento.origfreqrap = oldfreq / newfreq;
+
+ float tmprap = ((portamento.origfreqrap > 1.0f) ?
+ (portamento.origfreqrap) :
+ (1.0f / portamento.origfreqrap));
+
+ float thresholdrap = powf(2.0f, portamento.pitchthresh / 12.0f);
+ if((portamento.pitchthreshtype == 0) && (tmprap - 0.00001f > thresholdrap))
+ return 0;
+ if((portamento.pitchthreshtype == 1) && (tmprap + 0.00001f < thresholdrap))
+ return 0;
+
+ portamento.used = 1;
+ portamento.freqrap = portamento.origfreqrap;
+ return 1;
+}
+
+void Controller::updateportamento()
+{
+ if(portamento.used == 0)
+ return;
+
+ portamento.x += portamento.dx;
+ if(portamento.x > 1.0f) {
+ portamento.x = 1.0f;
+ portamento.used = 0;
+ }
+ portamento.freqrap =
+ (1.0f - portamento.x) * portamento.origfreqrap + portamento.x;
+}
+
+
+void Controller::setresonancecenter(int value)
+{
+ resonancecenter.data = value;
+ resonancecenter.relcenter =
+ powf(3.0f, (value - 64.0f) / 64.0f * (resonancecenter.depth / 64.0f));
+}
+void Controller::setresonancebw(int value)
+{
+ resonancebandwidth.data = value;
+ resonancebandwidth.relbw =
+ powf(1.5f, (value - 64.0f) / 64.0f * (resonancebandwidth.depth / 127.0f));
+}
+
+
+//Returns 0 if there is NRPN or 1 if there is not
+int Controller::getnrpn(int *parhi, int *parlo, int *valhi, int *vallo)
+{
+ if(NRPN.receive == 0)
+ return 1;
+ if((NRPN.parhi < 0) || (NRPN.parlo < 0) || (NRPN.valhi < 0)
+ || (NRPN.vallo < 0))
+ return 1;
+
+ *parhi = NRPN.parhi;
+ *parlo = NRPN.parlo;
+ *valhi = NRPN.valhi;
+ *vallo = NRPN.vallo;
+ return 0;
+}
+
+
+void Controller::setparameternumber(unsigned int type, int value)
+{
+ switch(type) {
+ case C_nrpnhi:
+ NRPN.parhi = value;
+ NRPN.valhi = -1;
+ NRPN.vallo = -1; //clear the values
+ break;
+ case C_nrpnlo:
+ NRPN.parlo = value;
+ NRPN.valhi = -1;
+ NRPN.vallo = -1; //clear the values
+ break;
+ case C_dataentryhi:
+ if((NRPN.parhi >= 0) && (NRPN.parlo >= 0))
+ NRPN.valhi = value;
+ break;
+ case C_dataentrylo:
+ if((NRPN.parhi >= 0) && (NRPN.parlo >= 0))
+ NRPN.vallo = value;
+ break;
+ }
+}
+
+
+
+void Controller::add2XML(XMLwrapper *xml)
+{
+ xml->addpar("pitchwheel_bendrange", pitchwheel.bendrange);
+
+ xml->addparbool("expression_receive", expression.receive);
+ xml->addpar("panning_depth", panning.depth);
+ xml->addpar("filter_cutoff_depth", filtercutoff.depth);
+ xml->addpar("filter_q_depth", filterq.depth);
+ xml->addpar("bandwidth_depth", bandwidth.depth);
+ xml->addpar("mod_wheel_depth", modwheel.depth);
+ xml->addparbool("mod_wheel_exponential", modwheel.exponential);
+ xml->addparbool("fm_amp_receive", fmamp.receive);
+ xml->addparbool("volume_receive", volume.receive);
+ xml->addparbool("sustain_receive", sustain.receive);
+
+ xml->addparbool("portamento_receive", portamento.receive);
+ xml->addpar("portamento_time", portamento.time);
+ xml->addpar("portamento_pitchthresh", portamento.pitchthresh);
+ xml->addpar("portamento_pitchthreshtype", portamento.pitchthreshtype);
+ xml->addpar("portamento_portamento", portamento.portamento);
+ xml->addpar("portamento_updowntimestretch", portamento.updowntimestretch);
+ xml->addpar("portamento_proportional", portamento.proportional);
+ xml->addpar("portamento_proprate", portamento.propRate);
+ xml->addpar("portamento_propdepth", portamento.propDepth);
+
+ xml->addpar("resonance_center_depth", resonancecenter.depth);
+ xml->addpar("resonance_bandwidth_depth", resonancebandwidth.depth);
+}
+
+void Controller::getfromXML(XMLwrapper *xml)
+{
+ pitchwheel.bendrange = xml->getpar("pitchwheel_bendrange",
+ pitchwheel.bendrange,
+ -6400,
+ 6400);
+
+ expression.receive = xml->getparbool("expression_receive",
+ expression.receive);
+ panning.depth = xml->getpar127("panning_depth", panning.depth);
+ filtercutoff.depth = xml->getpar127("filter_cutoff_depth",
+ filtercutoff.depth);
+ filterq.depth = xml->getpar127("filter_q_depth", filterq.depth);
+ bandwidth.depth = xml->getpar127("bandwidth_depth", bandwidth.depth);
+ modwheel.depth = xml->getpar127("mod_wheel_depth", modwheel.depth);
+ modwheel.exponential = xml->getparbool("mod_wheel_exponential",
+ modwheel.exponential);
+ fmamp.receive = xml->getparbool("fm_amp_receive",
+ fmamp.receive);
+ volume.receive = xml->getparbool("volume_receive",
+ volume.receive);
+ sustain.receive = xml->getparbool("sustain_receive",
+ sustain.receive);
+
+ portamento.receive = xml->getparbool("portamento_receive",
+ portamento.receive);
+ portamento.time = xml->getpar127("portamento_time",
+ portamento.time);
+ portamento.pitchthresh = xml->getpar127("portamento_pitchthresh",
+ portamento.pitchthresh);
+ portamento.pitchthreshtype = xml->getpar127("portamento_pitchthreshtype",
+ portamento.pitchthreshtype);
+ portamento.portamento = xml->getpar127("portamento_portamento",
+ portamento.portamento);
+ portamento.updowntimestretch = xml->getpar127(
+ "portamento_updowntimestretch",
+ portamento.updowntimestretch);
+ portamento.proportional = xml->getpar127("portamento_proportional",
+ portamento.proportional);
+ portamento.propRate = xml->getpar127("portamento_proprate",
+ portamento.propRate);
+ portamento.propDepth = xml->getpar127("portamento_propdepth",
+ portamento.propDepth);
+
+
+ resonancecenter.depth = xml->getpar127("resonance_center_depth",
+ resonancecenter.depth);
+ resonancebandwidth.depth = xml->getpar127("resonance_bandwidth_depth",
+ resonancebandwidth.depth);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.h
new file mode 100644
index 0000000..22483ea
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.h
@@ -0,0 +1,220 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Controller.h - (Midi) Controllers implementation
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+
+#ifndef CONTROLLER_H
+#define CONTROLLER_H
+
+#include "../globals.h"
+#include "../Misc/XMLwrapper.h"
+
+/**(Midi) Controllers implementation*/
+class Controller
+{
+ public:
+ Controller();
+ ~Controller();
+ void resetall();
+
+ void add2XML(XMLwrapper *xml);
+ void defaults();
+ void getfromXML(XMLwrapper *xml);
+
+ //Controllers functions
+ void setpitchwheel(int value);
+ void setpitchwheelbendrange(unsigned short int value);
+ void setexpression(int value);
+ void setpanning(int value);
+ void setfiltercutoff(int value);
+ void setfilterq(int value);
+ void setbandwidth(int value);
+ void setmodwheel(int value);
+ void setfmamp(int value);
+ void setvolume(int value);
+ void setsustain(int value);
+ /**Enable or disable portamento
+ * @param value 0-127 MIDI value (greater than 64 enables)*/
+ void setportamento(int value);
+ void setresonancecenter(int value);
+ void setresonancebw(int value);
+
+
+ void setparameternumber(unsigned int type, int value); //used for RPN and NRPN's
+ int getnrpn(int *parhi, int *parlo, int *valhi, int *vallo);
+
+ /**
+ * Initialize a portamento
+ *
+ * @param oldfreq Starting frequency of the portamento (Hz)
+ * @param newfreq Ending frequency of the portamento (Hz)
+ * @param legatoflag true when legato is in progress, false otherwise
+ * @returns 1 if properly initialized, 0 otherwise*/
+ int initportamento(float oldfreq, float newfreq, bool legatoflag);
+ /**Update portamento's freqrap to next value based upon dx*/
+ void updateportamento();
+
+ // Controllers values
+ struct { //Pitch Wheel
+ int data;
+ short int bendrange; //bendrange is in cents
+ float relfreq; //the relative frequency (default is 1.0f)
+ } pitchwheel;
+
+ struct { //Expression
+ int data;
+ float relvolume;
+ unsigned char receive;
+ } expression;
+
+ struct { //Panning
+ int data;
+ float pan;
+ unsigned char depth;
+ } panning;
+
+
+ struct { //Filter cutoff
+ int data;
+ float relfreq;
+ unsigned char depth;
+ } filtercutoff;
+
+ struct { //Filter Q
+ int data;
+ float relq;
+ unsigned char depth;
+ } filterq;
+
+ struct { //Bandwidth
+ int data;
+ float relbw;
+ unsigned char depth;
+ unsigned char exponential;
+ } bandwidth;
+
+ struct { //Modulation Wheel
+ int data;
+ float relmod;
+ unsigned char depth;
+ unsigned char exponential;
+ } modwheel;
+
+ struct { //FM amplitude
+ int data;
+ float relamp;
+ unsigned char receive;
+ } fmamp;
+
+ struct { //Volume
+ int data;
+ float volume;
+ unsigned char receive;
+ } volume;
+
+ struct { //Sustain
+ int data, sustain;
+ unsigned char receive;
+ } sustain;
+
+ struct { /**<Portamento*/
+ //parameters
+ int data;
+ unsigned char portamento;
+ /**Whether the portamento midi events are received or not*/
+ unsigned char receive;
+ /** The time that it takes for the portamento to complete
+ *
+ * Translates in an expontal fashion to 0 Seconds to 1.93f Seconds
+ * of completion time*/
+ unsigned char time;
+ /**If the portamento is proportinal to the distance spanned
+ *
+ * 0 - constant time(default)
+ * 1 - proportional*/
+ unsigned char proportional;
+ /**Rate of proportinal portamento*/
+ unsigned char propRate;
+ /**Depth of proportinal portamento*/
+ unsigned char propDepth;
+ /**pitchthresh is the threshold of enabling protamento*/
+ unsigned char pitchthresh;
+ /**enable the portamento only below(0)/above(1) the threshold*/
+ unsigned char pitchthreshtype;
+
+ /**this value represent how the portamento time is reduced
+ * 0 - for down portamento
+ * 1-63 - the up portamento's time is smaller than the down portamento
+ * 64 - the portamento time is always the same
+ * 64-126 - the down portamento's time is smaller than the up portamento
+ * 127 - for upper portamento
+ * 'up portamento' means when the frequency is rising
+ * (eg: the portamento is from 200Hz to 300 Hz)
+ * 'down portamento' means when the frequency is lowering
+ * (eg: the portamento is from 300Hz to 200 Hz)
+ */
+ unsigned char updowntimestretch;
+ /**this value is used to compute the actual portamento
+ *
+ * This is a multiplyer to change the frequency of the newer
+ * frequency to fit the profile of the portamento.
+ * This will be linear with respect to x.*/
+ float freqrap;
+ /**this is used by the Part for knowing which note uses the portamento*/
+ int noteusing;
+ /**if a the portamento is used by a note
+ * \todo see if this can be a bool*/
+ int used;
+
+ //Internal data
+
+ /**x is from 0.0f (start portamento) to 1.0f (finished portamento)*/
+ float x;
+ /**dx is the increment to x when updateportamento is called*/
+ float dx;
+ /** this is used for computing oldfreq value from x*/
+ float origfreqrap;
+ } portamento;
+
+ struct { //Resonance Center Frequency
+ int data;
+ float relcenter;
+ unsigned char depth;
+ } resonancecenter;
+
+ struct { //Resonance Bandwidth
+ int data;
+ float relbw;
+ unsigned char depth;
+ } resonancebandwidth;
+
+
+ /** RPN and NPRPN */
+ struct { //nrpn
+ int parhi, parlo;
+ int valhi, vallo;
+ unsigned char receive; //this is saved to disk by Master
+ } NRPN;
+
+ private:
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.cpp
new file mode 100644
index 0000000..a06704d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.cpp
@@ -0,0 +1,296 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EnvelopeParams.cpp - Parameters for Envelope
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <stdio.h>
+
+#include <math.h>
+#include <stdlib.h>
+#include "EnvelopeParams.h"
+
+EnvelopeParams::EnvelopeParams(unsigned char Penvstretch_,
+ unsigned char Pforcedrelease_):Presets()
+{
+ int i;
+
+ PA_dt = 10;
+ PD_dt = 10;
+ PR_dt = 10;
+ PA_val = 64;
+ PD_val = 64;
+ PS_val = 64;
+ PR_val = 64;
+
+ for(i = 0; i < MAX_ENVELOPE_POINTS; ++i) {
+ Penvdt[i] = 32;
+ Penvval[i] = 64;
+ }
+ Penvdt[0] = 0; //no used
+ Penvsustain = 1;
+ Penvpoints = 1;
+ Envmode = 1;
+ Penvstretch = Penvstretch_;
+ Pforcedrelease = Pforcedrelease_;
+ Pfreemode = 1;
+ Plinearenvelope = 0;
+
+ store2defaults();
+}
+
+EnvelopeParams::~EnvelopeParams()
+{}
+
+float EnvelopeParams::getdt(char i)
+{
+ float result = (powf(2.0f, Penvdt[(int)i] / 127.0f * 12.0f) - 1.0f) * 10.0f; //miliseconds
+ return result;
+}
+
+
+/*
+ * ADSR/ASR... initialisations
+ */
+void EnvelopeParams::ADSRinit(char A_dt, char D_dt, char S_val, char R_dt)
+{
+ setpresettype("Penvamplitude");
+ Envmode = 1;
+ PA_dt = A_dt;
+ PD_dt = D_dt;
+ PS_val = S_val;
+ PR_dt = R_dt;
+ Pfreemode = 0;
+ converttofree();
+
+ store2defaults();
+}
+
+void EnvelopeParams::ADSRinit_dB(char A_dt, char D_dt, char S_val, char R_dt)
+{
+ setpresettype("Penvamplitude");
+ Envmode = 2;
+ PA_dt = A_dt;
+ PD_dt = D_dt;
+ PS_val = S_val;
+ PR_dt = R_dt;
+ Pfreemode = 0;
+ converttofree();
+
+ store2defaults();
+}
+
+void EnvelopeParams::ASRinit(char A_val, char A_dt, char R_val, char R_dt)
+{
+ setpresettype("Penvfrequency");
+ Envmode = 3;
+ PA_val = A_val;
+ PA_dt = A_dt;
+ PR_val = R_val;
+ PR_dt = R_dt;
+ Pfreemode = 0;
+ converttofree();
+
+ store2defaults();
+}
+
+void EnvelopeParams::ADSRinit_filter(char A_val,
+ char A_dt,
+ char D_val,
+ char D_dt,
+ char R_dt,
+ char R_val)
+{
+ setpresettype("Penvfilter");
+ Envmode = 4;
+ PA_val = A_val;
+ PA_dt = A_dt;
+ PD_val = D_val;
+ PD_dt = D_dt;
+ PR_dt = R_dt;
+ PR_val = R_val;
+ Pfreemode = 0;
+ converttofree();
+ store2defaults();
+}
+
+void EnvelopeParams::ASRinit_bw(char A_val, char A_dt, char R_val, char R_dt)
+{
+ setpresettype("Penvbandwidth");
+ Envmode = 5;
+ PA_val = A_val;
+ PA_dt = A_dt;
+ PR_val = R_val;
+ PR_dt = R_dt;
+ Pfreemode = 0;
+ converttofree();
+ store2defaults();
+}
+
+/*
+ * Convert the Envelope to freemode
+ */
+void EnvelopeParams::converttofree()
+{
+ switch(Envmode) {
+ case 1:
+ Penvpoints = 4;
+ Penvsustain = 2;
+ Penvval[0] = 0;
+ Penvdt[1] = PA_dt;
+ Penvval[1] = 127;
+ Penvdt[2] = PD_dt;
+ Penvval[2] = PS_val;
+ Penvdt[3] = PR_dt;
+ Penvval[3] = 0;
+ break;
+ case 2:
+ Penvpoints = 4;
+ Penvsustain = 2;
+ Penvval[0] = 0;
+ Penvdt[1] = PA_dt;
+ Penvval[1] = 127;
+ Penvdt[2] = PD_dt;
+ Penvval[2] = PS_val;
+ Penvdt[3] = PR_dt;
+ Penvval[3] = 0;
+ break;
+ case 3:
+ Penvpoints = 3;
+ Penvsustain = 1;
+ Penvval[0] = PA_val;
+ Penvdt[1] = PA_dt;
+ Penvval[1] = 64;
+ Penvdt[2] = PR_dt;
+ Penvval[2] = PR_val;
+ break;
+ case 4:
+ Penvpoints = 4;
+ Penvsustain = 2;
+ Penvval[0] = PA_val;
+ Penvdt[1] = PA_dt;
+ Penvval[1] = PD_val;
+ Penvdt[2] = PD_dt;
+ Penvval[2] = 64;
+ Penvdt[3] = PR_dt;
+ Penvval[3] = PR_val;
+ break;
+ case 5:
+ Penvpoints = 3;
+ Penvsustain = 1;
+ Penvval[0] = PA_val;
+ Penvdt[1] = PA_dt;
+ Penvval[1] = 64;
+ Penvdt[2] = PR_dt;
+ Penvval[2] = PR_val;
+ break;
+ }
+}
+
+
+
+
+void EnvelopeParams::add2XML(XMLwrapper *xml)
+{
+ xml->addparbool("free_mode", Pfreemode);
+ xml->addpar("env_points", Penvpoints);
+ xml->addpar("env_sustain", Penvsustain);
+ xml->addpar("env_stretch", Penvstretch);
+ xml->addparbool("forced_release", Pforcedrelease);
+ xml->addparbool("linear_envelope", Plinearenvelope);
+ xml->addpar("A_dt", PA_dt);
+ xml->addpar("D_dt", PD_dt);
+ xml->addpar("R_dt", PR_dt);
+ xml->addpar("A_val", PA_val);
+ xml->addpar("D_val", PD_val);
+ xml->addpar("S_val", PS_val);
+ xml->addpar("R_val", PR_val);
+
+ if((Pfreemode != 0) || (!xml->minimal))
+ for(int i = 0; i < Penvpoints; ++i) {
+ xml->beginbranch("POINT", i);
+ if(i != 0)
+ xml->addpar("dt", Penvdt[i]);
+ xml->addpar("val", Penvval[i]);
+ xml->endbranch();
+ }
+}
+
+
+
+void EnvelopeParams::getfromXML(XMLwrapper *xml)
+{
+ Pfreemode = xml->getparbool("free_mode", Pfreemode);
+ Penvpoints = xml->getpar127("env_points", Penvpoints);
+ Penvsustain = xml->getpar127("env_sustain", Penvsustain);
+ Penvstretch = xml->getpar127("env_stretch", Penvstretch);
+ Pforcedrelease = xml->getparbool("forced_release", Pforcedrelease);
+ Plinearenvelope = xml->getparbool("linear_envelope", Plinearenvelope);
+
+ PA_dt = xml->getpar127("A_dt", PA_dt);
+ PD_dt = xml->getpar127("D_dt", PD_dt);
+ PR_dt = xml->getpar127("R_dt", PR_dt);
+ PA_val = xml->getpar127("A_val", PA_val);
+ PD_val = xml->getpar127("D_val", PD_val);
+ PS_val = xml->getpar127("S_val", PS_val);
+ PR_val = xml->getpar127("R_val", PR_val);
+
+ for(int i = 0; i < Penvpoints; ++i) {
+ if(xml->enterbranch("POINT", i) == 0)
+ continue;
+ if(i != 0)
+ Penvdt[i] = xml->getpar127("dt", Penvdt[i]);
+ Penvval[i] = xml->getpar127("val", Penvval[i]);
+ xml->exitbranch();
+ }
+
+ if(!Pfreemode)
+ converttofree();
+}
+
+
+void EnvelopeParams::defaults()
+{
+ Penvstretch = Denvstretch;
+ Pforcedrelease = Dforcedrelease;
+ Plinearenvelope = Dlinearenvelope;
+ PA_dt = DA_dt;
+ PD_dt = DD_dt;
+ PR_dt = DR_dt;
+ PA_val = DA_val;
+ PD_val = DD_val;
+ PS_val = DS_val;
+ PR_val = DR_val;
+ Pfreemode = 0;
+ converttofree();
+}
+
+void EnvelopeParams::store2defaults()
+{
+ Denvstretch = Penvstretch;
+ Dforcedrelease = Pforcedrelease;
+ Dlinearenvelope = Plinearenvelope;
+ DA_dt = PA_dt;
+ DD_dt = PD_dt;
+ DR_dt = PR_dt;
+ DA_val = PA_val;
+ DD_val = PD_val;
+ DS_val = PS_val;
+ DR_val = PR_val;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.h
new file mode 100644
index 0000000..0b3e99c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.h
@@ -0,0 +1,89 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EnvelopeParams.h - Parameters for Envelope
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef ENVELOPE_PARAMS_H
+#define ENVELOPE_PARAMS_H
+
+#include "../globals.h"
+#include "../Misc/XMLwrapper.h"
+#include "Presets.h"
+
+#define MAX_ENVELOPE_POINTS 40
+#define MIN_ENVELOPE_DB -400
+
+class EnvelopeParams:public Presets
+{
+ public:
+ EnvelopeParams(unsigned char Penvstretch_,
+ unsigned char Pforcedrelease_);
+ ~EnvelopeParams();
+ void ADSRinit(char A_dt, char D_dt, char S_val, char R_dt);
+ void ADSRinit_dB(char A_dt, char D_dt, char S_val, char R_dt);
+ void ASRinit(char A_val, char A_dt, char R_val, char R_dt);
+ void ADSRinit_filter(char A_val,
+ char A_dt,
+ char D_val,
+ char D_dt,
+ char R_dt,
+ char R_val);
+ void ASRinit_bw(char A_val, char A_dt, char R_val, char R_dt);
+ void converttofree();
+
+ void add2XML(XMLwrapper *xml);
+ void defaults();
+ void getfromXML(XMLwrapper *xml);
+
+ float getdt(char i);
+
+ /* MIDI Parameters */
+ unsigned char Pfreemode; //1 daca este in modul free sau 0 daca este in mod ADSR,ASR,...
+ unsigned char Penvpoints;
+ unsigned char Penvsustain; //127 pentru dezactivat
+ unsigned char Penvdt[MAX_ENVELOPE_POINTS];
+ unsigned char Penvval[MAX_ENVELOPE_POINTS];
+ unsigned char Penvstretch; //64=normal stretch (piano-like), 0=no stretch
+ unsigned char Pforcedrelease; //0 - OFF, 1 - ON
+ unsigned char Plinearenvelope; //if the amplitude envelope is linear
+
+ unsigned char PA_dt, PD_dt, PR_dt,
+ PA_val, PD_val, PS_val, PR_val;
+
+
+
+ int Envmode; // 1 for ADSR parameters (linear amplitude)
+ // 2 for ADSR_dB parameters (dB amplitude)
+ // 3 for ASR parameters (frequency LFO)
+ // 4 for ADSR_filter parameters (filter parameters)
+ // 5 for ASR_bw parameters (bandwidth parameters)
+
+ private:
+ void store2defaults();
+
+ /* Default parameters */
+ unsigned char Denvstretch;
+ unsigned char Dforcedrelease;
+ unsigned char Dlinearenvelope;
+ unsigned char DA_dt, DD_dt, DR_dt,
+ DA_val, DD_val, DS_val, DR_val;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.cpp
new file mode 100644
index 0000000..81309d6
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.cpp
@@ -0,0 +1,392 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ FilterParams.cpp - Parameters for filter
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "FilterParams.h"
+#include "../Misc/Util.h"
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+FilterParams::FilterParams(unsigned char Ptype_,
+ unsigned char Pfreq_,
+ unsigned char Pq_)
+ :PresetsArray()
+{
+ setpresettype("Pfilter");
+ Dtype = Ptype_;
+ Dfreq = Pfreq_;
+ Dq = Pq_;
+
+ changed = false;
+ defaults();
+}
+
+FilterParams::~FilterParams()
+{}
+
+
+void FilterParams::defaults()
+{
+ Ptype = Dtype;
+ Pfreq = Dfreq;
+ Pq = Dq;
+
+ Pstages = 0;
+ Pfreqtrack = 64;
+ Pgain = 64;
+ Pcategory = 0;
+
+ Pnumformants = 3;
+ Pformantslowness = 64;
+ for(int j = 0; j < FF_MAX_VOWELS; ++j)
+ defaults(j);
+ ;
+
+ Psequencesize = 3;
+ for(int i = 0; i < FF_MAX_SEQUENCE; ++i)
+ Psequence[i].nvowel = i % FF_MAX_VOWELS;
+
+ Psequencestretch = 40;
+ Psequencereversed = 0;
+ Pcenterfreq = 64; //1 kHz
+ Poctavesfreq = 64;
+ Pvowelclearness = 64;
+}
+
+void FilterParams::defaults(int n)
+{
+ int j = n;
+ for(int i = 0; i < FF_MAX_FORMANTS; ++i) {
+ Pvowels[j].formants[i].freq = (int)(RND * 127.0f); //some random freqs
+ Pvowels[j].formants[i].q = 64;
+ Pvowels[j].formants[i].amp = 127;
+ }
+}
+
+
+/*
+ * Get the parameters from other FilterParams
+ */
+
+void FilterParams::getfromFilterParams(FilterParams *pars)
+{
+ defaults();
+
+ if(pars == NULL)
+ return;
+
+ Ptype = pars->Ptype;
+ Pfreq = pars->Pfreq;
+ Pq = pars->Pq;
+
+ Pstages = pars->Pstages;
+ Pfreqtrack = pars->Pfreqtrack;
+ Pgain = pars->Pgain;
+ Pcategory = pars->Pcategory;
+
+ Pnumformants = pars->Pnumformants;
+ Pformantslowness = pars->Pformantslowness;
+ for(int j = 0; j < FF_MAX_VOWELS; ++j)
+ for(int i = 0; i < FF_MAX_FORMANTS; ++i) {
+ Pvowels[j].formants[i].freq = pars->Pvowels[j].formants[i].freq;
+ Pvowels[j].formants[i].q = pars->Pvowels[j].formants[i].q;
+ Pvowels[j].formants[i].amp = pars->Pvowels[j].formants[i].amp;
+ }
+
+ Psequencesize = pars->Psequencesize;
+ for(int i = 0; i < FF_MAX_SEQUENCE; ++i)
+ Psequence[i].nvowel = pars->Psequence[i].nvowel;
+
+ Psequencestretch = pars->Psequencestretch;
+ Psequencereversed = pars->Psequencereversed;
+ Pcenterfreq = pars->Pcenterfreq;
+ Poctavesfreq = pars->Poctavesfreq;
+ Pvowelclearness = pars->Pvowelclearness;
+}
+
+
+/*
+ * Parameter control
+ */
+float FilterParams::getfreq()
+{
+ return (Pfreq / 64.0f - 1.0f) * 5.0f;
+}
+
+float FilterParams::getq()
+{
+ return expf(powf((float) Pq / 127.0f, 2) * logf(1000.0f)) - 0.9f;
+}
+float FilterParams::getfreqtracking(float notefreq)
+{
+ return logf(notefreq / 440.0f) * (Pfreqtrack - 64.0f) / (64.0f * LOG_2);
+}
+
+float FilterParams::getgain()
+{
+ return (Pgain / 64.0f - 1.0f) * 30.0f; //-30..30dB
+}
+
+/*
+ * Get the center frequency of the formant's graph
+ */
+float FilterParams::getcenterfreq()
+{
+ return 10000.0f * powf(10, -(1.0f - Pcenterfreq / 127.0f) * 2.0f);
+}
+
+/*
+ * Get the number of octave that the formant functions applies to
+ */
+float FilterParams::getoctavesfreq()
+{
+ return 0.25f + 10.0f * Poctavesfreq / 127.0f;
+}
+
+/*
+ * Get the frequency from x, where x is [0..1]
+ */
+float FilterParams::getfreqx(float x)
+{
+ if(x > 1.0f)
+ x = 1.0f;
+ float octf = powf(2.0f, getoctavesfreq());
+ return getcenterfreq() / sqrt(octf) * powf(octf, x);
+}
+
+/*
+ * Get the x coordinate from frequency (used by the UI)
+ */
+float FilterParams::getfreqpos(float freq)
+{
+ return (logf(freq) - logf(getfreqx(0.0f))) / logf(2.0f) / getoctavesfreq();
+}
+
+
+/*
+ * Get the freq. response of the formant filter
+ */
+void FilterParams::formantfilterH(int nvowel, int nfreqs, float *freqs)
+{
+ float c[3], d[3];
+ float filter_freq, filter_q, filter_amp;
+ float omega, sn, cs, alpha;
+
+ for(int i = 0; i < nfreqs; ++i)
+ freqs[i] = 0.0f;
+
+ //for each formant...
+ for(int nformant = 0; nformant < Pnumformants; ++nformant) {
+ //compute formant parameters(frequency,amplitude,etc.)
+ filter_freq = getformantfreq(Pvowels[nvowel].formants[nformant].freq);
+ filter_q = getformantq(Pvowels[nvowel].formants[nformant].q) * getq();
+ if(Pstages > 0)
+ filter_q =
+ (filter_q >
+ 1.0f ? powf(filter_q, 1.0f / (Pstages + 1)) : filter_q);
+
+ filter_amp = getformantamp(Pvowels[nvowel].formants[nformant].amp);
+
+
+ if(filter_freq <= (synth->samplerate / 2 - 100.0f)) {
+ omega = 2 * PI * filter_freq / synth->samplerate_f;
+ sn = sinf(omega);
+ cs = cosf(omega);
+ alpha = sn / (2 * filter_q);
+ float tmp = 1 + alpha;
+ c[0] = alpha / tmp *sqrt(filter_q + 1);
+ c[1] = 0;
+ c[2] = -alpha / tmp *sqrt(filter_q + 1);
+ d[1] = -2 * cs / tmp * (-1);
+ d[2] = (1 - alpha) / tmp * (-1);
+ }
+ else
+ continue;
+
+
+ for(int i = 0; i < nfreqs; ++i) {
+ float freq = getfreqx(i / (float) nfreqs);
+ if(freq > synth->samplerate / 2) {
+ for(int tmp = i; tmp < nfreqs; ++tmp)
+ freqs[tmp] = 0.0f;
+ break;
+ }
+ float fr = freq / synth->samplerate * PI * 2.0f;
+ float x = c[0], y = 0.0f;
+ for(int n = 1; n < 3; ++n) {
+ x += cosf(n * fr) * c[n];
+ y -= sinf(n * fr) * c[n];
+ }
+ float h = x * x + y * y;
+ x = 1.0f;
+ y = 0.0f;
+ for(int n = 1; n < 3; ++n) {
+ x -= cosf(n * fr) * d[n];
+ y += sinf(n * fr) * d[n];
+ }
+ h = h / (x * x + y * y);
+
+ freqs[i] += powf(h, (Pstages + 1.0f) / 2.0f) * filter_amp;
+ }
+ }
+ for(int i = 0; i < nfreqs; ++i) {
+ if(freqs[i] > 0.000000001f)
+ freqs[i] = rap2dB(freqs[i]) + getgain();
+ else
+ freqs[i] = -90.0f;
+ }
+}
+
+/*
+ * Transforms a parameter to the real value
+ */
+float FilterParams::getformantfreq(unsigned char freq)
+{
+ float result = getfreqx(freq / 127.0f);
+ return result;
+}
+
+float FilterParams::getformantamp(unsigned char amp)
+{
+ float result = powf(0.1f, (1.0f - amp / 127.0f) * 4.0f);
+ return result;
+}
+
+float FilterParams::getformantq(unsigned char q)
+{
+ //temp
+ float result = powf(25.0f, (q - 32.0f) / 64.0f);
+ return result;
+}
+
+
+
+void FilterParams::add2XMLsection(XMLwrapper *xml, int n)
+{
+ int nvowel = n;
+ for(int nformant = 0; nformant < FF_MAX_FORMANTS; ++nformant) {
+ xml->beginbranch("FORMANT", nformant);
+ xml->addpar("freq", Pvowels[nvowel].formants[nformant].freq);
+ xml->addpar("amp", Pvowels[nvowel].formants[nformant].amp);
+ xml->addpar("q", Pvowels[nvowel].formants[nformant].q);
+ xml->endbranch();
+ }
+}
+
+void FilterParams::add2XML(XMLwrapper *xml)
+{
+ //filter parameters
+ xml->addpar("category", Pcategory);
+ xml->addpar("type", Ptype);
+ xml->addpar("freq", Pfreq);
+ xml->addpar("q", Pq);
+ xml->addpar("stages", Pstages);
+ xml->addpar("freq_track", Pfreqtrack);
+ xml->addpar("gain", Pgain);
+
+ //formant filter parameters
+ if((Pcategory == 1) || (!xml->minimal)) {
+ xml->beginbranch("FORMANT_FILTER");
+ xml->addpar("num_formants", Pnumformants);
+ xml->addpar("formant_slowness", Pformantslowness);
+ xml->addpar("vowel_clearness", Pvowelclearness);
+ xml->addpar("center_freq", Pcenterfreq);
+ xml->addpar("octaves_freq", Poctavesfreq);
+ for(int nvowel = 0; nvowel < FF_MAX_VOWELS; ++nvowel) {
+ xml->beginbranch("VOWEL", nvowel);
+ add2XMLsection(xml, nvowel);
+ xml->endbranch();
+ }
+ xml->addpar("sequence_size", Psequencesize);
+ xml->addpar("sequence_stretch", Psequencestretch);
+ xml->addparbool("sequence_reversed", Psequencereversed);
+ for(int nseq = 0; nseq < FF_MAX_SEQUENCE; ++nseq) {
+ xml->beginbranch("SEQUENCE_POS", nseq);
+ xml->addpar("vowel_id", Psequence[nseq].nvowel);
+ xml->endbranch();
+ }
+ xml->endbranch();
+ }
+}
+
+
+void FilterParams::getfromXMLsection(XMLwrapper *xml, int n)
+{
+ int nvowel = n;
+ for(int nformant = 0; nformant < FF_MAX_FORMANTS; ++nformant) {
+ if(xml->enterbranch("FORMANT", nformant) == 0)
+ continue;
+ Pvowels[nvowel].formants[nformant].freq = xml->getpar127(
+ "freq",
+ Pvowels[nvowel
+ ].formants[nformant].freq);
+ Pvowels[nvowel].formants[nformant].amp = xml->getpar127(
+ "amp",
+ Pvowels[nvowel
+ ].formants[nformant].amp);
+ Pvowels[nvowel].formants[nformant].q =
+ xml->getpar127("q", Pvowels[nvowel].formants[nformant].q);
+ xml->exitbranch();
+ }
+}
+
+void FilterParams::getfromXML(XMLwrapper *xml)
+{
+ //filter parameters
+ Pcategory = xml->getpar127("category", Pcategory);
+ Ptype = xml->getpar127("type", Ptype);
+ Pfreq = xml->getpar127("freq", Pfreq);
+ Pq = xml->getpar127("q", Pq);
+ Pstages = xml->getpar127("stages", Pstages);
+ Pfreqtrack = xml->getpar127("freq_track", Pfreqtrack);
+ Pgain = xml->getpar127("gain", Pgain);
+
+ //formant filter parameters
+ if(xml->enterbranch("FORMANT_FILTER")) {
+ Pnumformants = xml->getpar127("num_formants", Pnumformants);
+ Pformantslowness = xml->getpar127("formant_slowness", Pformantslowness);
+ Pvowelclearness = xml->getpar127("vowel_clearness", Pvowelclearness);
+ Pcenterfreq = xml->getpar127("center_freq", Pcenterfreq);
+ Poctavesfreq = xml->getpar127("octaves_freq", Poctavesfreq);
+
+ for(int nvowel = 0; nvowel < FF_MAX_VOWELS; ++nvowel) {
+ if(xml->enterbranch("VOWEL", nvowel) == 0)
+ continue;
+ getfromXMLsection(xml, nvowel);
+ xml->exitbranch();
+ }
+ Psequencesize = xml->getpar127("sequence_size", Psequencesize);
+ Psequencestretch = xml->getpar127("sequence_stretch", Psequencestretch);
+ Psequencereversed = xml->getparbool("sequence_reversed",
+ Psequencereversed);
+ for(int nseq = 0; nseq < FF_MAX_SEQUENCE; ++nseq) {
+ if(xml->enterbranch("SEQUENCE_POS", nseq) == 0)
+ continue;
+ Psequence[nseq].nvowel = xml->getpar("vowel_id",
+ Psequence[nseq].nvowel,
+ 0,
+ FF_MAX_VOWELS - 1);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.h
new file mode 100644
index 0000000..22a1a94
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.h
@@ -0,0 +1,102 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ FilterParams.h - Parameters for filter
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef FILTER_PARAMS_H
+#define FILTER_PARAMS_H
+
+#include "../globals.h"
+#include "../Misc/XMLwrapper.h"
+#include "PresetsArray.h"
+
+class FilterParams:public PresetsArray
+{
+ public:
+ FilterParams(unsigned char Ptype_,
+ unsigned char Pfreq,
+ unsigned char Pq_);
+ ~FilterParams();
+
+ void add2XML(XMLwrapper *xml);
+ void add2XMLsection(XMLwrapper *xml, int n);
+ void defaults();
+ void getfromXML(XMLwrapper *xml);
+ void getfromXMLsection(XMLwrapper *xml, int n);
+
+
+ void getfromFilterParams(FilterParams *pars);
+
+ float getfreq();
+ float getq();
+ float getfreqtracking(float notefreq);
+ float getgain();
+
+ unsigned char Pcategory; //Filter category (Analog/Formant/StVar)
+ unsigned char Ptype; // Filter type (for analog lpf,hpf,bpf..)
+ unsigned char Pfreq; // Frequency (64-central frequency)
+ unsigned char Pq; // Q parameters (resonance or bandwidth)
+ unsigned char Pstages; //filter stages+1
+ unsigned char Pfreqtrack; //how the filter frequency is changing according the note frequency
+ unsigned char Pgain; //filter's output gain
+
+ //Formant filter parameters
+ unsigned char Pnumformants; //how many formants are used
+ unsigned char Pformantslowness; //how slow varies the formants
+ unsigned char Pvowelclearness; //how vowels are kept clean (how much try to avoid "mixed" vowels)
+ unsigned char Pcenterfreq, Poctavesfreq; //the center frequency of the res. func., and the number of octaves
+
+ struct {
+ struct {
+ unsigned char freq, amp, q; //frequency,amplitude,Q
+ } formants[FF_MAX_FORMANTS];
+ } Pvowels[FF_MAX_VOWELS];
+
+
+ unsigned char Psequencesize; //how many vowels are in the sequence
+ unsigned char Psequencestretch; //how the sequence is stretched (how the input from filter envelopes/LFOs/etc. is "stretched")
+ unsigned char Psequencereversed; //if the input from filter envelopes/LFOs/etc. is reversed(negated)
+ struct {
+ unsigned char nvowel; //the vowel from the position
+ } Psequence[FF_MAX_SEQUENCE];
+
+ float getcenterfreq();
+ float getoctavesfreq();
+ float getfreqpos(float freq);
+ float getfreqx(float x);
+
+ void formantfilterH(int nvowel, int nfreqs, float *freqs); //used by UI
+
+ float getformantfreq(unsigned char freq);
+ float getformantamp(unsigned char amp);
+ float getformantq(unsigned char q);
+
+ bool changed;
+
+ private:
+ void defaults(int n);
+
+ //stored default parameters
+ unsigned char Dtype;
+ unsigned char Dfreq;
+ unsigned char Dq;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.cpp
new file mode 100644
index 0000000..72f2269
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.cpp
@@ -0,0 +1,104 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ LFOParams.cpp - Parameters for LFO
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <math.h>
+#include <stdio.h>
+#include "../globals.h"
+#include "LFOParams.h"
+
+int LFOParams::time;
+
+LFOParams::LFOParams(char Pfreq_,
+ char Pintensity_,
+ char Pstartphase_,
+ char PLFOtype_,
+ char Prandomness_,
+ char Pdelay_,
+ char Pcontinous_,
+ char fel_):Presets()
+{
+ switch(fel_) {
+ case 0:
+ setpresettype("Plfofrequency");
+ break;
+ case 1:
+ setpresettype("Plfoamplitude");
+ break;
+ case 2:
+ setpresettype("Plfofilter");
+ break;
+ }
+ Dfreq = Pfreq_;
+ Dintensity = Pintensity_;
+ Dstartphase = Pstartphase_;
+ DLFOtype = PLFOtype_;
+ Drandomness = Prandomness_;
+ Ddelay = Pdelay_;
+ Dcontinous = Pcontinous_;
+ fel = fel_;
+ time = 0;
+
+ defaults();
+}
+
+LFOParams::~LFOParams()
+{}
+
+void LFOParams::defaults()
+{
+ Pfreq = Dfreq / 127.0f;
+ Pintensity = Dintensity;
+ Pstartphase = Dstartphase;
+ PLFOtype = DLFOtype;
+ Prandomness = Drandomness;
+ Pdelay = Ddelay;
+ Pcontinous = Dcontinous;
+ Pfreqrand = 0;
+ Pstretch = 64;
+}
+
+
+void LFOParams::add2XML(XMLwrapper *xml)
+{
+ xml->addparreal("freq", Pfreq);
+ xml->addpar("intensity", Pintensity);
+ xml->addpar("start_phase", Pstartphase);
+ xml->addpar("lfo_type", PLFOtype);
+ xml->addpar("randomness_amplitude", Prandomness);
+ xml->addpar("randomness_frequency", Pfreqrand);
+ xml->addpar("delay", Pdelay);
+ xml->addpar("stretch", Pstretch);
+ xml->addparbool("continous", Pcontinous);
+}
+
+void LFOParams::getfromXML(XMLwrapper *xml)
+{
+ Pfreq = xml->getparreal("freq", Pfreq, 0.0f, 1.0f);
+ Pintensity = xml->getpar127("intensity", Pintensity);
+ Pstartphase = xml->getpar127("start_phase", Pstartphase);
+ PLFOtype = xml->getpar127("lfo_type", PLFOtype);
+ Prandomness = xml->getpar127("randomness_amplitude", Prandomness);
+ Pfreqrand = xml->getpar127("randomness_frequency", Pfreqrand);
+ Pdelay = xml->getpar127("delay", Pdelay);
+ Pstretch = xml->getpar127("stretch", Pstretch);
+ Pcontinous = xml->getparbool("continous", Pcontinous);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h
new file mode 100644
index 0000000..6ca3071
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h
@@ -0,0 +1,71 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ LFOParams.h - Parameters for LFO
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef LFO_PARAMS_H
+#define LFO_PARAMS_H
+
+#include "../Misc/XMLwrapper.h"
+#include "Presets.h"
+
+class LFOParams:public Presets
+{
+ public:
+ LFOParams(char Pfreq_,
+ char Pintensity_,
+ char Pstartphase_,
+ char PLFOtype_,
+ char Prandomness_,
+ char Pdelay_,
+ char Pcontinous,
+ char fel_);
+ ~LFOParams();
+
+ void add2XML(XMLwrapper *xml);
+ void defaults();
+ /**Loads the LFO from the xml*/
+ void getfromXML(XMLwrapper *xml);
+
+ /* MIDI Parameters*/
+ float Pfreq; /**<frequency*/
+ unsigned char Pintensity; /**<intensity*/
+ unsigned char Pstartphase; /**<start phase (0=random)*/
+ unsigned char PLFOtype; /**<LFO type (sin,triangle,square,ramp,...)*/
+ unsigned char Prandomness; /**<randomness (0=off)*/
+ unsigned char Pfreqrand; /**<frequency randomness (0=off)*/
+ unsigned char Pdelay; /**<delay (0=off)*/
+ unsigned char Pcontinous; /**<1 if LFO is continous*/
+ unsigned char Pstretch; /**<how the LFO is "stretched" according the note frequency (64=no stretch)*/
+
+ int fel; //what kind is the LFO (0 - frequency, 1 - amplitude, 2 - filter)
+ static int time; //is used by Pcontinous parameter
+ private:
+ /* Default parameters */
+ unsigned char Dfreq;
+ unsigned char Dintensity;
+ unsigned char Dstartphase;
+ unsigned char DLFOtype;
+ unsigned char Drandomness;
+ unsigned char Ddelay;
+ unsigned char Dcontinous;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp
new file mode 100644
index 0000000..027289b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp
@@ -0,0 +1,906 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PADnoteParameters.cpp - Parameters for PADnote (PADsynth)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <math.h>
+#include "PADnoteParameters.h"
+#include "../Misc/WavFile.h"
+
+PADnoteParameters::PADnoteParameters(FFTwrapper *fft_,
+ pthread_mutex_t *mutex_):Presets()
+{
+ setpresettype("Ppadsynth");
+
+ fft = fft_;
+ mutex = mutex_;
+
+ resonance = new Resonance();
+ oscilgen = new OscilGen(fft_, resonance);
+ oscilgen->ADvsPAD = true;
+
+ FreqEnvelope = new EnvelopeParams(0, 0);
+ FreqEnvelope->ASRinit(64, 50, 64, 60);
+ FreqLfo = new LFOParams(70, 0, 64, 0, 0, 0, 0, 0);
+
+ AmpEnvelope = new EnvelopeParams(64, 1);
+ AmpEnvelope->ADSRinit_dB(0, 40, 127, 25);
+ AmpLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 1);
+
+ GlobalFilter = new FilterParams(2, 94, 40);
+ FilterEnvelope = new EnvelopeParams(0, 1);
+ FilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64);
+ FilterLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 2);
+
+ for(int i = 0; i < PAD_MAX_SAMPLES; ++i)
+ sample[i].smp = NULL;
+ newsample.smp = NULL;
+
+ defaults();
+}
+
+PADnoteParameters::~PADnoteParameters()
+{
+ deletesamples();
+ delete (oscilgen);
+ delete (resonance);
+
+ delete (FreqEnvelope);
+ delete (FreqLfo);
+ delete (AmpEnvelope);
+ delete (AmpLfo);
+ delete (GlobalFilter);
+ delete (FilterEnvelope);
+ delete (FilterLfo);
+}
+
+void PADnoteParameters::defaults()
+{
+ Pmode = 0;
+ Php.base.type = 0;
+ Php.base.par1 = 80;
+ Php.freqmult = 0;
+ Php.modulator.par1 = 0;
+ Php.modulator.freq = 30;
+ Php.width = 127;
+ Php.amp.type = 0;
+ Php.amp.mode = 0;
+ Php.amp.par1 = 80;
+ Php.amp.par2 = 64;
+ Php.autoscale = true;
+ Php.onehalf = 0;
+
+ setPbandwidth(500);
+ Pbwscale = 0;
+
+ resonance->defaults();
+ oscilgen->defaults();
+
+ Phrpos.type = 0;
+ Phrpos.par1 = 64;
+ Phrpos.par2 = 64;
+ Phrpos.par3 = 0;
+
+ Pquality.samplesize = 3;
+ Pquality.basenote = 4;
+ Pquality.oct = 3;
+ Pquality.smpoct = 2;
+
+ PStereo = 1; //stereo
+ /* Frequency Global Parameters */
+ Pfixedfreq = 0;
+ PfixedfreqET = 0;
+ PDetune = 8192; //zero
+ PCoarseDetune = 0;
+ PDetuneType = 1;
+ FreqEnvelope->defaults();
+ FreqLfo->defaults();
+
+ /* Amplitude Global Parameters */
+ PVolume = 90;
+ PPanning = 64; //center
+ PAmpVelocityScaleFunction = 64;
+ AmpEnvelope->defaults();
+ AmpLfo->defaults();
+ PPunchStrength = 0;
+ PPunchTime = 60;
+ PPunchStretch = 64;
+ PPunchVelocitySensing = 72;
+
+ /* Filter Global Parameters*/
+ PFilterVelocityScale = 64;
+ PFilterVelocityScaleFunction = 64;
+ GlobalFilter->defaults();
+ FilterEnvelope->defaults();
+ FilterLfo->defaults();
+
+ deletesamples();
+}
+
+void PADnoteParameters::deletesample(int n)
+{
+ if((n < 0) || (n >= PAD_MAX_SAMPLES))
+ return;
+ if(sample[n].smp != NULL) {
+ delete[] sample[n].smp;
+ sample[n].smp = NULL;
+ }
+ sample[n].size = 0;
+ sample[n].basefreq = 440.0f;
+}
+
+void PADnoteParameters::deletesamples()
+{
+ for(int i = 0; i < PAD_MAX_SAMPLES; ++i)
+ deletesample(i);
+}
+
+/*
+ * Get the harmonic profile (i.e. the frequency distributio of a single harmonic)
+ */
+float PADnoteParameters::getprofile(float *smp, int size)
+{
+ for(int i = 0; i < size; ++i)
+ smp[i] = 0.0f;
+ const int supersample = 16;
+ float basepar = powf(2.0f, (1.0f - Php.base.par1 / 127.0f) * 12.0f);
+ float freqmult = floor(powf(2.0f,
+ Php.freqmult / 127.0f
+ * 5.0f) + 0.000001f);
+
+ float modfreq = floor(powf(2.0f,
+ Php.modulator.freq / 127.0f
+ * 5.0f) + 0.000001f);
+ float modpar1 = powf(Php.modulator.par1 / 127.0f, 4.0f) * 5.0f / sqrt(
+ modfreq);
+ float amppar1 =
+ powf(2.0f, powf(Php.amp.par1 / 127.0f, 2.0f) * 10.0f) - 0.999f;
+ float amppar2 = (1.0f - Php.amp.par2 / 127.0f) * 0.998f + 0.001f;
+ float width = powf(150.0f / (Php.width + 22.0f), 2.0f);
+
+ for(int i = 0; i < size * supersample; ++i) {
+ bool makezero = false;
+ float x = i * 1.0f / (size * (float) supersample);
+
+ float origx = x;
+
+ //do the sizing (width)
+ x = (x - 0.5f) * width + 0.5f;
+ if(x < 0.0f) {
+ x = 0.0f;
+ makezero = true;
+ }
+ else
+ if(x > 1.0f) {
+ x = 1.0f;
+ makezero = true;
+ }
+
+ //compute the full profile or one half
+ switch(Php.onehalf) {
+ case 1:
+ x = x * 0.5f + 0.5f;
+ break;
+ case 2:
+ x = x * 0.5f;
+ break;
+ }
+
+ float x_before_freq_mult = x;
+
+ //do the frequency multiplier
+ x *= freqmult;
+
+ //do the modulation of the profile
+ x += sinf(x_before_freq_mult * 3.1415926f * modfreq) * modpar1;
+ x = fmod(x + 1000.0f, 1.0f) * 2.0f - 1.0f;
+
+
+ //this is the base function of the profile
+ float f;
+ switch(Php.base.type) {
+ case 1:
+ f = expf(-(x * x) * basepar);
+ if(f < 0.4f)
+ f = 0.0f;
+ else
+ f = 1.0f;
+ break;
+ case 2:
+ f = expf(-(fabs(x)) * sqrt(basepar));
+ break;
+ default:
+ f = expf(-(x * x) * basepar);
+ break;
+ }
+ if(makezero)
+ f = 0.0f;
+
+ float amp = 1.0f;
+ origx = origx * 2.0f - 1.0f;
+
+ //compute the amplitude multiplier
+ switch(Php.amp.type) {
+ case 1:
+ amp = expf(-(origx * origx) * 10.0f * amppar1);
+ break;
+ case 2:
+ amp = 0.5f
+ * (1.0f
+ + cosf(3.1415926f * origx * sqrt(amppar1 * 4.0f + 1.0f)));
+ break;
+ case 3:
+ amp = 1.0f
+ / (powf(origx * (amppar1 * 2.0f + 0.8f), 14.0f) + 1.0f);
+ break;
+ }
+
+ //apply the amplitude multiplier
+ float finalsmp = f;
+ if(Php.amp.type != 0)
+ switch(Php.amp.mode) {
+ case 0:
+ finalsmp = amp * (1.0f - amppar2) + finalsmp * amppar2;
+ break;
+ case 1:
+ finalsmp *= amp * (1.0f - amppar2) + amppar2;
+ break;
+ case 2:
+ finalsmp = finalsmp
+ / (amp + powf(amppar2, 4.0f) * 20.0f + 0.0001f);
+ break;
+ case 3:
+ finalsmp = amp
+ / (finalsmp
+ + powf(amppar2, 4.0f) * 20.0f + 0.0001f);
+ break;
+ }
+ ;
+
+ smp[i / supersample] += finalsmp / supersample;
+ }
+
+ //normalize the profile (make the max. to be equal to 1.0f)
+ float max = 0.0f;
+ for(int i = 0; i < size; ++i) {
+ if(smp[i] < 0.0f)
+ smp[i] = 0.0f;
+ if(smp[i] > max)
+ max = smp[i];
+ }
+ if(max < 0.00001f)
+ max = 1.0f;
+ for(int i = 0; i < size; ++i)
+ smp[i] /= max;
+
+ if(!Php.autoscale)
+ return 0.5f;
+
+ //compute the estimated perceived bandwidth
+ float sum = 0.0f;
+ int i;
+ for(i = 0; i < size / 2 - 2; ++i) {
+ sum += smp[i] * smp[i] + smp[size - i - 1] * smp[size - i - 1];
+ if(sum >= 4.0f)
+ break;
+ }
+
+ float result = 1.0f - 2.0f * i / (float) size;
+ return result;
+}
+
+/*
+ * Compute the real bandwidth in cents and returns it
+ * Also, sets the bandwidth parameter
+ */
+float PADnoteParameters::setPbandwidth(int Pbandwidth)
+{
+ this->Pbandwidth = Pbandwidth;
+ float result = powf(Pbandwidth / 1000.0f, 1.1f);
+ result = powf(10.0f, result * 4.0f) * 0.25f;
+ return result;
+}
+
+/*
+ * Get the harmonic(overtone) position
+ */
+float PADnoteParameters::getNhr(int n)
+{
+ float result = 1.0f;
+ float par1 = powf(10.0f, -(1.0f - Phrpos.par1 / 255.0f) * 3.0f);
+ float par2 = Phrpos.par2 / 255.0f;
+
+ float n0 = n - 1.0f;
+ float tmp = 0.0f;
+ int thresh = 0;
+ switch(Phrpos.type) {
+ case 1:
+ thresh = (int)(par2 * par2 * 100.0f) + 1;
+ if(n < thresh)
+ result = n;
+ else
+ result = 1.0f + n0 + (n0 - thresh + 1.0f) * par1 * 8.0f;
+ break;
+ case 2:
+ thresh = (int)(par2 * par2 * 100.0f) + 1;
+ if(n < thresh)
+ result = n;
+ else
+ result = 1.0f + n0 - (n0 - thresh + 1.0f) * par1 * 0.90f;
+ break;
+ case 3:
+ tmp = par1 * 100.0f + 1.0f;
+ result = powf(n0 / tmp, 1.0f - par2 * 0.8f) * tmp + 1.0f;
+ break;
+ case 4:
+ result = n0
+ * (1.0f
+ - par1)
+ + powf(n0 * 0.1f, par2 * 3.0f
+ + 1.0f) * par1 * 10.0f + 1.0f;
+ break;
+ case 5:
+ result = n0
+ + sinf(n0 * par2 * par2 * PI
+ * 0.999f) * sqrt(par1) * 2.0f + 1.0f;
+ break;
+ case 6:
+ tmp = powf(par2 * 2.0f, 2.0f) + 0.1f;
+ result = n0 * powf(1.0f + par1 * powf(n0 * 0.8f, tmp), tmp) + 1.0f;
+ break;
+ case 7:
+ result = (n + Phrpos.par1 / 255.0f) / (Phrpos.par1 / 255.0f + 1);
+ break;
+ default:
+ result = n;
+ break;
+ }
+
+ float par3 = Phrpos.par3 / 255.0f;
+
+ float iresult = floor(result + 0.5f);
+ float dresult = result - iresult;
+
+ result = iresult + (1.0f - par3) * dresult;
+
+ return result;
+}
+
+/*
+ * Generates the long spectrum for Bandwidth mode (only amplitudes are generated; phases will be random)
+ */
+void PADnoteParameters::generatespectrum_bandwidthMode(float *spectrum,
+ int size,
+ float basefreq,
+ float *profile,
+ int profilesize,
+ float bwadjust)
+{
+ for(int i = 0; i < size; ++i)
+ spectrum[i] = 0.0f;
+
+ float harmonics[synth->oscilsize / 2];
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ harmonics[i] = 0.0f;
+ //get the harmonic structure from the oscillator (I am using the frequency amplitudes, only)
+ oscilgen->get(harmonics, basefreq, false);
+
+ //normalize
+ float max = 0.0f;
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ if(harmonics[i] > max)
+ max = harmonics[i];
+ if(max < 0.000001f)
+ max = 1;
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ harmonics[i] /= max;
+
+ for(int nh = 1; nh < synth->oscilsize / 2; ++nh) { //for each harmonic
+ float realfreq = getNhr(nh) * basefreq;
+ if(realfreq > synth->samplerate_f * 0.49999f)
+ break;
+ if(realfreq < 20.0f)
+ break;
+ if(harmonics[nh - 1] < 1e-4)
+ continue;
+
+ //compute the bandwidth of each harmonic
+ float bandwidthcents = setPbandwidth(Pbandwidth);
+ float bw =
+ (powf(2.0f, bandwidthcents / 1200.0f) - 1.0f) * basefreq / bwadjust;
+ float power = 1.0f;
+ switch(Pbwscale) {
+ case 0:
+ power = 1.0f;
+ break;
+ case 1:
+ power = 0.0f;
+ break;
+ case 2:
+ power = 0.25f;
+ break;
+ case 3:
+ power = 0.5f;
+ break;
+ case 4:
+ power = 0.75f;
+ break;
+ case 5:
+ power = 1.5f;
+ break;
+ case 6:
+ power = 2.0f;
+ break;
+ case 7:
+ power = -0.5f;
+ break;
+ }
+ bw = bw * powf(realfreq / basefreq, power);
+ int ibw = (int)((bw / (synth->samplerate_f * 0.5f) * size)) + 1;
+
+ float amp = harmonics[nh - 1];
+ if(resonance->Penabled)
+ amp *= resonance->getfreqresponse(realfreq);
+
+ if(ibw > profilesize) { //if the bandwidth is larger than the profilesize
+ float rap = sqrt((float)profilesize / (float)ibw);
+ int cfreq =
+ (int) (realfreq
+ / (synth->samplerate_f * 0.5f) * size) - ibw / 2;
+ for(int i = 0; i < ibw; ++i) {
+ int src = (int)(i * rap * rap);
+ int spfreq = i + cfreq;
+ if(spfreq < 0)
+ continue;
+ if(spfreq >= size)
+ break;
+ spectrum[spfreq] += amp * profile[src] * rap;
+ }
+ }
+ else { //if the bandwidth is smaller than the profilesize
+ float rap = sqrt((float)ibw / (float)profilesize);
+ float ibasefreq = realfreq / (synth->samplerate_f * 0.5f) * size;
+ for(int i = 0; i < profilesize; ++i) {
+ float idfreq = i / (float)profilesize - 0.5f;
+ idfreq *= ibw;
+ int spfreq = (int) (idfreq + ibasefreq);
+ float fspfreq = fmodf((float)idfreq + ibasefreq, 1.0f);
+ if(spfreq <= 0)
+ continue;
+ if(spfreq >= size - 1)
+ break;
+ spectrum[spfreq] += amp * profile[i] * rap
+ * (1.0f - fspfreq);
+ spectrum[spfreq + 1] += amp * profile[i] * rap * fspfreq;
+ }
+ }
+ }
+}
+
+/*
+ * Generates the long spectrum for non-Bandwidth modes (only amplitudes are generated; phases will be random)
+ */
+void PADnoteParameters::generatespectrum_otherModes(float *spectrum,
+ int size,
+ float basefreq)
+{
+ for(int i = 0; i < size; ++i)
+ spectrum[i] = 0.0f;
+
+ float harmonics[synth->oscilsize / 2];
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ harmonics[i] = 0.0f;
+ //get the harmonic structure from the oscillator (I am using the frequency amplitudes, only)
+ oscilgen->get(harmonics, basefreq, false);
+
+ //normalize
+ float max = 0.0f;
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ if(harmonics[i] > max)
+ max = harmonics[i];
+ if(max < 0.000001f)
+ max = 1;
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ harmonics[i] /= max;
+
+ for(int nh = 1; nh < synth->oscilsize / 2; ++nh) { //for each harmonic
+ float realfreq = getNhr(nh) * basefreq;
+
+ ///sa fac aici interpolarea si sa am grija daca frecv descresc
+
+ if(realfreq > synth->samplerate_f * 0.49999f)
+ break;
+ if(realfreq < 20.0f)
+ break;
+// if (harmonics[nh-1]<1e-4) continue;
+
+
+ float amp = harmonics[nh - 1];
+ if(resonance->Penabled)
+ amp *= resonance->getfreqresponse(realfreq);
+ int cfreq = (int) (realfreq / (synth->samplerate_f * 0.5f) * size);
+
+ spectrum[cfreq] = amp + 1e-9;
+ }
+
+ if(Pmode != 1) {
+ int old = 0;
+ for(int k = 1; k < size; ++k)
+ if((spectrum[k] > 1e-10) || (k == (size - 1))) {
+ int delta = k - old;
+ float val1 = spectrum[old];
+ float val2 = spectrum[k];
+ float idelta = 1.0f / delta;
+ for(int i = 0; i < delta; ++i) {
+ float x = idelta * i;
+ spectrum[old + i] = val1 * (1.0f - x) + val2 * x;
+ }
+ old = k;
+ }
+ }
+}
+
+/*
+ * Applies the parameters (i.e. computes all the samples, based on parameters);
+ */
+void PADnoteParameters::applyparameters(bool lockmutex)
+{
+ const int samplesize = (((int) 1) << (Pquality.samplesize + 14));
+ int spectrumsize = samplesize / 2;
+ float *spectrum = new float[spectrumsize];
+ int profilesize = 512;
+ float profile[profilesize];
+
+
+ float bwadjust = getprofile(profile, profilesize);
+// for (int i=0;i<profilesize;i++) profile[i]*=profile[i];
+ float basefreq = 65.406f * powf(2.0f, Pquality.basenote / 2);
+ if(Pquality.basenote % 2 == 1)
+ basefreq *= 1.5f;
+
+ int samplemax = Pquality.oct + 1;
+ int smpoct = Pquality.smpoct;
+ if(Pquality.smpoct == 5)
+ smpoct = 6;
+ if(Pquality.smpoct == 6)
+ smpoct = 12;
+ if(smpoct != 0)
+ samplemax *= smpoct;
+ else
+ samplemax = samplemax / 2 + 1;
+ if(samplemax == 0)
+ samplemax = 1;
+
+ //prepare a BIG FFT stuff
+ FFTwrapper *fft = new FFTwrapper(samplesize);
+ fft_t *fftfreqs = new fft_t[samplesize / 2];
+
+ float adj[samplemax]; //this is used to compute frequency relation to the base frequency
+ for(int nsample = 0; nsample < samplemax; ++nsample)
+ adj[nsample] = (Pquality.oct + 1.0f) * (float)nsample / samplemax;
+ for(int nsample = 0; nsample < samplemax; ++nsample) {
+ float tmp = adj[nsample] - adj[samplemax - 1] * 0.5f;
+ float basefreqadjust = powf(2.0f, tmp);
+
+ if(Pmode == 0)
+ generatespectrum_bandwidthMode(spectrum,
+ spectrumsize,
+ basefreq * basefreqadjust,
+ profile,
+ profilesize,
+ bwadjust);
+ else
+ generatespectrum_otherModes(spectrum, spectrumsize,
+ basefreq * basefreqadjust);
+
+ const int extra_samples = 5; //the last samples contains the first samples (used for linear/cubic interpolation)
+ newsample.smp = new float[samplesize + extra_samples];
+
+ newsample.smp[0] = 0.0f;
+ for(int i = 1; i < spectrumsize; ++i) //randomize the phases
+ fftfreqs[i] = std::polar(spectrum[i], (float)RND * 6.29f);
+ fft->freqs2smps(fftfreqs, newsample.smp); //that's all; here is the only ifft for the whole sample; no windows are used ;-)
+
+
+ //normalize(rms)
+ float rms = 0.0f;
+ for(int i = 0; i < samplesize; ++i)
+ rms += newsample.smp[i] * newsample.smp[i];
+ rms = sqrt(rms);
+ if(rms < 0.000001f)
+ rms = 1.0f;
+ rms *= sqrt(262144.0f / samplesize);
+ for(int i = 0; i < samplesize; ++i)
+ newsample.smp[i] *= 1.0f / rms * 50.0f;
+
+ //prepare extra samples used by the linear or cubic interpolation
+ for(int i = 0; i < extra_samples; ++i)
+ newsample.smp[i + samplesize] = newsample.smp[i];
+
+ //replace the current sample with the new computed sample
+ if(lockmutex) {
+ pthread_mutex_lock(mutex);
+ deletesample(nsample);
+ sample[nsample].smp = newsample.smp;
+ sample[nsample].size = samplesize;
+ sample[nsample].basefreq = basefreq * basefreqadjust;
+ pthread_mutex_unlock(mutex);
+ }
+ else {
+ deletesample(nsample);
+ sample[nsample].smp = newsample.smp;
+ sample[nsample].size = samplesize;
+ sample[nsample].basefreq = basefreq * basefreqadjust;
+ }
+ newsample.smp = NULL;
+ }
+ delete (fft);
+ delete[] fftfreqs;
+ delete[] spectrum;
+
+ //delete the additional samples that might exists and are not useful
+ if(lockmutex) {
+ pthread_mutex_lock(mutex);
+ for(int i = samplemax; i < PAD_MAX_SAMPLES; ++i)
+ deletesample(i);
+ pthread_mutex_unlock(mutex);
+ }
+ else
+ for(int i = samplemax; i < PAD_MAX_SAMPLES; ++i)
+ deletesample(i);
+ ;
+}
+
+void PADnoteParameters::export2wav(std::string basefilename)
+{
+ applyparameters(true);
+ basefilename += "_PADsynth_";
+ for(int k = 0; k < PAD_MAX_SAMPLES; ++k) {
+ if(sample[k].smp == NULL)
+ continue;
+ char tmpstr[20];
+ snprintf(tmpstr, 20, "_%02d", k + 1);
+ std::string filename = basefilename + std::string(tmpstr) + ".wav";
+ WavFile wav(filename, synth->samplerate, 1);
+ if(wav.good()) {
+ int nsmps = sample[k].size;
+ short int *smps = new short int[nsmps];
+ for(int i = 0; i < nsmps; ++i)
+ smps[i] = (short int)(sample[k].smp[i] * 32767.0f);
+ wav.writeMonoSamples(nsmps, smps);
+ }
+ }
+}
+
+void PADnoteParameters::add2XML(XMLwrapper *xml)
+{
+ xml->setPadSynth(true);
+
+ xml->addparbool("stereo", PStereo);
+ xml->addpar("mode", Pmode);
+ xml->addpar("bandwidth", Pbandwidth);
+ xml->addpar("bandwidth_scale", Pbwscale);
+
+ xml->beginbranch("HARMONIC_PROFILE");
+ xml->addpar("base_type", Php.base.type);
+ xml->addpar("base_par1", Php.base.par1);
+ xml->addpar("frequency_multiplier", Php.freqmult);
+ xml->addpar("modulator_par1", Php.modulator.par1);
+ xml->addpar("modulator_frequency", Php.modulator.freq);
+ xml->addpar("width", Php.width);
+ xml->addpar("amplitude_multiplier_type", Php.amp.type);
+ xml->addpar("amplitude_multiplier_mode", Php.amp.mode);
+ xml->addpar("amplitude_multiplier_par1", Php.amp.par1);
+ xml->addpar("amplitude_multiplier_par2", Php.amp.par2);
+ xml->addparbool("autoscale", Php.autoscale);
+ xml->addpar("one_half", Php.onehalf);
+ xml->endbranch();
+
+ xml->beginbranch("OSCIL");
+ oscilgen->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("RESONANCE");
+ resonance->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("HARMONIC_POSITION");
+ xml->addpar("type", Phrpos.type);
+ xml->addpar("parameter1", Phrpos.par1);
+ xml->addpar("parameter2", Phrpos.par2);
+ xml->addpar("parameter3", Phrpos.par3);
+ xml->endbranch();
+
+ xml->beginbranch("SAMPLE_QUALITY");
+ xml->addpar("samplesize", Pquality.samplesize);
+ xml->addpar("basenote", Pquality.basenote);
+ xml->addpar("octaves", Pquality.oct);
+ xml->addpar("samples_per_octave", Pquality.smpoct);
+ xml->endbranch();
+
+ xml->beginbranch("AMPLITUDE_PARAMETERS");
+ xml->addpar("volume", PVolume);
+ xml->addpar("panning", PPanning);
+ xml->addpar("velocity_sensing", PAmpVelocityScaleFunction);
+ xml->addpar("punch_strength", PPunchStrength);
+ xml->addpar("punch_time", PPunchTime);
+ xml->addpar("punch_stretch", PPunchStretch);
+ xml->addpar("punch_velocity_sensing", PPunchVelocitySensing);
+
+ xml->beginbranch("AMPLITUDE_ENVELOPE");
+ AmpEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("AMPLITUDE_LFO");
+ AmpLfo->add2XML(xml);
+ xml->endbranch();
+
+ xml->endbranch();
+
+ xml->beginbranch("FREQUENCY_PARAMETERS");
+ xml->addpar("fixed_freq", Pfixedfreq);
+ xml->addpar("fixed_freq_et", PfixedfreqET);
+ xml->addpar("detune", PDetune);
+ xml->addpar("coarse_detune", PCoarseDetune);
+ xml->addpar("detune_type", PDetuneType);
+
+ xml->beginbranch("FREQUENCY_ENVELOPE");
+ FreqEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("FREQUENCY_LFO");
+ FreqLfo->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+
+ xml->beginbranch("FILTER_PARAMETERS");
+ xml->addpar("velocity_sensing_amplitude", PFilterVelocityScale);
+ xml->addpar("velocity_sensing", PFilterVelocityScaleFunction);
+
+ xml->beginbranch("FILTER");
+ GlobalFilter->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("FILTER_ENVELOPE");
+ FilterEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("FILTER_LFO");
+ FilterLfo->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+}
+
+void PADnoteParameters::getfromXML(XMLwrapper *xml)
+{
+ PStereo = xml->getparbool("stereo", PStereo);
+ Pmode = xml->getpar127("mode", 0);
+ Pbandwidth = xml->getpar("bandwidth", Pbandwidth, 0, 1000);
+ Pbwscale = xml->getpar127("bandwidth_scale", Pbwscale);
+
+ if(xml->enterbranch("HARMONIC_PROFILE")) {
+ Php.base.type = xml->getpar127("base_type", Php.base.type);
+ Php.base.par1 = xml->getpar127("base_par1", Php.base.par1);
+ Php.freqmult = xml->getpar127("frequency_multiplier",
+ Php.freqmult);
+ Php.modulator.par1 = xml->getpar127("modulator_par1",
+ Php.modulator.par1);
+ Php.modulator.freq = xml->getpar127("modulator_frequency",
+ Php.modulator.freq);
+ Php.width = xml->getpar127("width", Php.width);
+ Php.amp.type = xml->getpar127("amplitude_multiplier_type",
+ Php.amp.type);
+ Php.amp.mode = xml->getpar127("amplitude_multiplier_mode",
+ Php.amp.mode);
+ Php.amp.par1 = xml->getpar127("amplitude_multiplier_par1",
+ Php.amp.par1);
+ Php.amp.par2 = xml->getpar127("amplitude_multiplier_par2",
+ Php.amp.par2);
+ Php.autoscale = xml->getparbool("autoscale", Php.autoscale);
+ Php.onehalf = xml->getpar127("one_half", Php.onehalf);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("OSCIL")) {
+ oscilgen->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("RESONANCE")) {
+ resonance->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("HARMONIC_POSITION")) {
+ Phrpos.type = xml->getpar127("type", Phrpos.type);
+ Phrpos.par1 = xml->getpar("parameter1", Phrpos.par1, 0, 255);
+ Phrpos.par2 = xml->getpar("parameter2", Phrpos.par2, 0, 255);
+ Phrpos.par3 = xml->getpar("parameter3", Phrpos.par3, 0, 255);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("SAMPLE_QUALITY")) {
+ Pquality.samplesize = xml->getpar127("samplesize", Pquality.samplesize);
+ Pquality.basenote = xml->getpar127("basenote", Pquality.basenote);
+ Pquality.oct = xml->getpar127("octaves", Pquality.oct);
+ Pquality.smpoct = xml->getpar127("samples_per_octave",
+ Pquality.smpoct);
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
+ PVolume = xml->getpar127("volume", PVolume);
+ PPanning = xml->getpar127("panning", PPanning);
+ PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing",
+ PAmpVelocityScaleFunction);
+ PPunchStrength = xml->getpar127("punch_strength", PPunchStrength);
+ PPunchTime = xml->getpar127("punch_time", PPunchTime);
+ PPunchStretch = xml->getpar127("punch_stretch", PPunchStretch);
+ PPunchVelocitySensing = xml->getpar127("punch_velocity_sensing",
+ PPunchVelocitySensing);
+
+ xml->enterbranch("AMPLITUDE_ENVELOPE");
+ AmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("AMPLITUDE_LFO");
+ AmpLfo->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
+ Pfixedfreq = xml->getpar127("fixed_freq", Pfixedfreq);
+ PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET);
+ PDetune = xml->getpar("detune", PDetune, 0, 16383);
+ PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383);
+ PDetuneType = xml->getpar127("detune_type", PDetuneType);
+
+ xml->enterbranch("FREQUENCY_ENVELOPE");
+ FreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FREQUENCY_LFO");
+ FreqLfo->getfromXML(xml);
+ xml->exitbranch();
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("FILTER_PARAMETERS")) {
+ PFilterVelocityScale = xml->getpar127("velocity_sensing_amplitude",
+ PFilterVelocityScale);
+ PFilterVelocityScaleFunction = xml->getpar127(
+ "velocity_sensing",
+ PFilterVelocityScaleFunction);
+
+ xml->enterbranch("FILTER");
+ GlobalFilter->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FILTER_ENVELOPE");
+ FilterEnvelope->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FILTER_LFO");
+ FilterLfo->getfromXML(xml);
+ xml->exitbranch();
+ xml->exitbranch();
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.h
new file mode 100644
index 0000000..b328321
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.h
@@ -0,0 +1,179 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PADnoteParameters.h - Parameters for PADnote (PADsynth)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef PAD_NOTE_PARAMETERS_H
+#define PAD_NOTE_PARAMETERS_H
+
+#include "../Misc/XMLwrapper.h"
+#include "../DSP/FFTwrapper.h"
+#include "../globals.h"
+#include "../Synth/OscilGen.h"
+#include "../Synth/Resonance.h"
+#include "../Misc/Util.h"
+
+#include "EnvelopeParams.h"
+#include "LFOParams.h"
+#include "FilterParams.h"
+#include "Presets.h"
+#include <string>
+#include <pthread.h>
+
+class PADnoteParameters:public Presets
+{
+ public:
+ PADnoteParameters(FFTwrapper *fft_, pthread_mutex_t *mutex_);
+ ~PADnoteParameters();
+
+ void defaults();
+ void add2XML(XMLwrapper *xml);
+ void getfromXML(XMLwrapper *xml);
+
+ //returns a value between 0.0f-1.0f that represents the estimation perceived bandwidth
+ float getprofile(float *smp, int size);
+
+ //parameters
+
+ //the mode: 0 - bandwidth, 1 - discrete (bandwidth=0), 2 - continous
+ //the harmonic profile is used only on mode 0
+ unsigned char Pmode;
+
+ //Harmonic profile (the frequency distribution of a single harmonic)
+ struct {
+ struct { //base function
+ unsigned char type;
+ unsigned char par1;
+ } base;
+ unsigned char freqmult; //frequency multiplier of the distribution
+ struct { //the modulator of the distribution
+ unsigned char par1;
+ unsigned char freq;
+ } modulator;
+
+ unsigned char width; //the width of the resulting function after the modulation
+ struct { //the amplitude multiplier of the harmonic profile
+ unsigned char mode;
+ unsigned char type;
+ unsigned char par1;
+ unsigned char par2;
+ } amp;
+ bool autoscale; //if the scale of the harmonic profile is computed automaticaly
+ unsigned char onehalf; //what part of the base function is used to make the distribution
+ } Php;
+
+
+ unsigned int Pbandwidth; //the values are from 0 to 1000
+ unsigned char Pbwscale; //how the bandwidth is increased according to the harmonic's frequency
+
+ struct { //where are positioned the harmonics (on integer multimplier or different places)
+ unsigned char type;
+ unsigned char par1, par2, par3; //0..255
+ } Phrpos;
+
+ struct { //quality of the samples (how many samples, the length of them,etc.)
+ unsigned char samplesize;
+ unsigned char basenote, oct, smpoct;
+ } Pquality;
+
+ //frequency parameters
+ //If the base frequency is fixed to 440 Hz
+ unsigned char Pfixedfreq;
+
+ /* Equal temperate (this is used only if the Pfixedfreq is enabled)
+ If this parameter is 0, the frequency is fixed (to 440 Hz);
+ if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
+ unsigned char PfixedfreqET;
+ unsigned short int PDetune; //fine detune
+ unsigned short int PCoarseDetune; //coarse detune+octave
+ unsigned char PDetuneType; //detune type
+
+ EnvelopeParams *FreqEnvelope; //Frequency Envelope
+ LFOParams *FreqLfo; //Frequency LFO
+
+ //Amplitude parameters
+ unsigned char PStereo;
+ /* Panning - 0 - random
+ 1 - left
+ 64 - center
+ 127 - right */
+ unsigned char PPanning;
+
+ unsigned char PVolume;
+
+ unsigned char PAmpVelocityScaleFunction;
+
+ EnvelopeParams *AmpEnvelope;
+
+ LFOParams *AmpLfo;
+
+ unsigned char PPunchStrength, PPunchTime, PPunchStretch,
+ PPunchVelocitySensing;
+
+ //Filter Parameters
+ FilterParams *GlobalFilter;
+
+ // filter velocity sensing
+ unsigned char PFilterVelocityScale;
+
+ // filter velocity sensing
+ unsigned char PFilterVelocityScaleFunction;
+
+ EnvelopeParams *FilterEnvelope;
+ LFOParams *FilterLfo;
+
+
+
+
+ float setPbandwidth(int Pbandwidth); //returns the BandWidth in cents
+ float getNhr(int n); //gets the n-th overtone position relatively to N harmonic
+
+ void applyparameters(bool lockmutex);
+ void export2wav(std::string basefilename);
+
+ OscilGen *oscilgen;
+ Resonance *resonance;
+
+ struct {
+ int size;
+ float basefreq;
+ float *smp;
+ } sample[PAD_MAX_SAMPLES], newsample;
+
+ private:
+ void generatespectrum_bandwidthMode(float *spectrum,
+ int size,
+ float basefreq,
+ float *profile,
+ int profilesize,
+ float bwadjust);
+ void generatespectrum_otherModes(float *spectrum,
+ int size,
+ float basefreq);
+ void deletesamples();
+ void deletesample(int n);
+
+ FFTwrapper *fft;
+ pthread_mutex_t *mutex;
+};
+
+
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp
new file mode 100644
index 0000000..d96fc53
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp
@@ -0,0 +1,119 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Presets.cpp - Presets and Clipboard management
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "Presets.h"
+#include <string.h>
+
+
+Presets::Presets()
+{
+ type[0] = 0;
+}
+
+Presets::~Presets()
+{}
+
+void Presets::setpresettype(const char *type)
+{
+ strcpy(this->type, type);
+}
+
+void Presets::copy(const char *name)
+{
+ XMLwrapper *xml = new XMLwrapper();
+
+ //used only for the clipboard
+ if(name == NULL)
+ xml->minimal = false;
+
+ char type[MAX_PRESETTYPE_SIZE];
+ strcpy(type, this->type);
+ //strcat(type, "n");
+ if(name == NULL)
+ if(strstr(type, "Plfo") != NULL)
+ strcpy(type, "Plfo");
+
+ xml->beginbranch(type);
+ add2XML(xml);
+ xml->endbranch();
+
+ if(name == NULL)
+ presetsstore.copyclipboard(xml, type);
+ else
+ presetsstore.copypreset(xml, type, name);
+
+ delete (xml);
+}
+
+void Presets::paste(int npreset)
+{
+ char type[MAX_PRESETTYPE_SIZE];
+ strcpy(type, this->type);
+ //strcat(type, "n");
+
+ if(npreset == 0)
+ if(strstr(type, "Plfo") != NULL)
+ strcpy(type, "Plfo");
+
+ XMLwrapper *xml = new XMLwrapper();
+ if(npreset == 0) {
+ if(!checkclipboardtype()) {
+ delete (xml);
+ return;
+ }
+ if(!presetsstore.pasteclipboard(xml)) {
+ delete (xml);
+ return;
+ }
+ }
+ else
+ if(!presetsstore.pastepreset(xml, npreset)) {
+ delete (xml);
+ return;
+ }
+
+ if(xml->enterbranch(type) == 0)
+ return;
+
+ defaults();
+ getfromXML(xml);
+
+ xml->exitbranch();
+
+ delete (xml);
+}
+
+bool Presets::checkclipboardtype()
+{
+ return presetsstore.checkclipboardtype(type);
+}
+
+void Presets::rescanforpresets()
+{
+ presetsstore.rescanforpresets(type);
+}
+
+
+void Presets::deletepreset(int npreset)
+{
+ presetsstore.deletepreset(npreset);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.h
new file mode 100644
index 0000000..a64d25e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.h
@@ -0,0 +1,56 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Presets.h - Presets and Clipboard management
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef PRESETS_H
+#define PRESETS_H
+
+#include "../Misc/XMLwrapper.h"
+
+#include "PresetsStore.h"
+
+/**Presets and Clipboard management*/
+class Presets
+{
+ friend class PresetsArray;
+ public:
+ Presets();
+ virtual ~Presets();
+
+ virtual void copy(const char *name); /**<if name==NULL, the clipboard is used*/
+ virtual void paste(int npreset); //npreset==0 for clipboard
+ virtual bool checkclipboardtype();
+ void deletepreset(int npreset);
+
+ char type[MAX_PRESETTYPE_SIZE];
+ //void setelement(int n);
+
+ void rescanforpresets();
+
+ protected:
+ void setpresettype(const char *type);
+ private:
+ virtual void add2XML(XMLwrapper *xml) = 0;
+ virtual void getfromXML(XMLwrapper *xml) = 0;
+ virtual void defaults() = 0;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.cpp
new file mode 100644
index 0000000..3dcf126
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.cpp
@@ -0,0 +1,146 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PresetsArray.cpp - PresetsArray and Clipboard management
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "PresetsArray.h"
+#include <string.h>
+
+
+PresetsArray::PresetsArray()
+{
+ type[0] = 0;
+ nelement = -1;
+}
+
+PresetsArray::~PresetsArray()
+{}
+
+void PresetsArray::setpresettype(const char *type)
+{
+ strcpy(this->type, type);
+}
+
+void PresetsArray::copy(const char *name)
+{
+ XMLwrapper *xml = new XMLwrapper();
+
+ //used only for the clipboard
+ if(name == NULL)
+ xml->minimal = false;
+
+ char type[MAX_PRESETTYPE_SIZE];
+ strcpy(type, this->type);
+ if(nelement != -1)
+ strcat(type, "n");
+ if(name == NULL)
+ if(strstr(type, "Plfo") != NULL)
+ strcpy(type, "Plfo");
+ ;
+
+ xml->beginbranch(type);
+ if(nelement == -1)
+ add2XML(xml);
+ else
+ add2XMLsection(xml, nelement);
+ xml->endbranch();
+
+ if(name == NULL)
+ presetsstore.copyclipboard(xml, type);
+ else
+ presetsstore.copypreset(xml, type, name);
+
+ delete (xml);
+ nelement = -1;
+}
+
+void PresetsArray::paste(int npreset)
+{
+ char type[MAX_PRESETTYPE_SIZE];
+ strcpy(type, this->type);
+ if(nelement != -1)
+ strcat(type, "n");
+ if(npreset == 0)
+ if(strstr(type, "Plfo") != NULL)
+ strcpy(type, "Plfo");
+ ;
+
+ XMLwrapper *xml = new XMLwrapper();
+ if(npreset == 0) {
+ if(!checkclipboardtype()) {
+ nelement = -1;
+ delete (xml);
+ return;
+ }
+ if(!presetsstore.pasteclipboard(xml)) {
+ delete (xml);
+ nelement = -1;
+ return;
+ }
+ }
+ else
+ if(!presetsstore.pastepreset(xml, npreset)) {
+ delete (xml);
+ nelement = -1;
+ return;
+ }
+
+ if(xml->enterbranch(type) == 0) {
+ nelement = -1;
+ return;
+ }
+ if(nelement == -1) {
+ defaults();
+ getfromXML(xml);
+ }
+ else {
+ defaults(nelement);
+ getfromXMLsection(xml, nelement);
+ }
+ xml->exitbranch();
+
+ delete (xml);
+ nelement = -1;
+}
+
+bool PresetsArray::checkclipboardtype()
+{
+ char type[MAX_PRESETTYPE_SIZE];
+ strcpy(type, this->type);
+ if(nelement != -1)
+ strcat(type, "n");
+
+ return presetsstore.checkclipboardtype(type);
+}
+
+void PresetsArray::rescanforpresets()
+{
+ char type[MAX_PRESETTYPE_SIZE];
+ strcpy(type, this->type);
+ if(nelement != -1)
+ strcat(type, "n");
+
+ presetsstore.rescanforpresets(type);
+}
+
+void PresetsArray::setelement(int n)
+{
+ nelement = n;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.h
new file mode 100644
index 0000000..724dc0b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.h
@@ -0,0 +1,59 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PresetsArray.h - PresetsArray and Clipboard management
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef PRESETSARRAY_H
+#define PRESETSARRAY_H
+
+#include "../Misc/XMLwrapper.h"
+
+#include "Presets.h"
+
+/**PresetsArray and Clipboard management*/
+class PresetsArray:public Presets
+{
+ public:
+ PresetsArray();
+ virtual ~PresetsArray();
+
+ void copy(const char *name); /**<if name==NULL, the clipboard is used*/
+ void paste(int npreset); //npreset==0 for clipboard
+ bool checkclipboardtype();
+ // INHERITED - void deletepreset(int npreset);
+
+ // INHERITED - char type[MAX_PRESETTYPE_SIZE];
+ void setelement(int n);
+
+ void rescanforpresets();
+
+ protected:
+ void setpresettype(const char *type);
+ private:
+ virtual void add2XML(XMLwrapper *xml) = 0;
+ virtual void getfromXML(XMLwrapper *xml) = 0;
+ virtual void defaults() = 0;
+ virtual void add2XMLsection(XMLwrapper *xml, int n) = 0;
+ virtual void getfromXMLsection(XMLwrapper *xml, int n) = 0;
+ virtual void defaults(int n) = 0;
+ int nelement;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.cpp
new file mode 100644
index 0000000..7a6366a
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.cpp
@@ -0,0 +1,184 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PresetsStore.cpp - Presets and Clipboard store
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <iostream>
+#include <algorithm>
+#include <cctype>
+#include <stdlib.h>
+#include <string.h>
+#include <dirent.h>
+#include <sys/stat.h>
+
+#include "PresetsStore.h"
+#include "../Misc/Util.h"
+
+using namespace std;
+
+PresetsStore presetsstore;
+
+PresetsStore::PresetsStore()
+{
+ clipboard.data = NULL;
+ clipboard.type[0] = 0;
+}
+
+PresetsStore::~PresetsStore()
+{
+ if(clipboard.data != NULL)
+ free(clipboard.data);
+ clearpresets();
+}
+
+//Clipboard management
+
+void PresetsStore::copyclipboard(XMLwrapper *xml, char *type)
+{
+ strcpy(clipboard.type, type);
+ if(clipboard.data != NULL)
+ free(clipboard.data);
+ clipboard.data = xml->getXMLdata();
+}
+
+bool PresetsStore::pasteclipboard(XMLwrapper *xml)
+{
+ if(clipboard.data != NULL)
+ xml->putXMLdata(clipboard.data);
+ else
+ return false;
+ return true;
+}
+
+bool PresetsStore::checkclipboardtype(const char *type)
+{
+ //makes LFO's compatible
+ if((strstr(type,
+ "Plfo") != NULL) && (strstr(clipboard.type, "Plfo") != NULL))
+ return true;
+ return strcmp(type, clipboard.type) == 0;
+}
+
+//Presets management
+void PresetsStore::clearpresets()
+{
+ presets.clear();
+}
+
+//a helper function that compares 2 presets[]
+bool PresetsStore::presetstruct::operator<(const presetstruct &b) const
+{
+ return name < b.name;
+}
+
+
+void PresetsStore::rescanforpresets(const string &type)
+{
+ //std::cout << "Scanning For Presets" << std::endl;
+ //std::cout << "Of Type: " << type << std::endl;
+
+ clearpresets();
+ string ftype = "." + type.substr(1) + ".xpz";
+
+ for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) {
+ if(config.cfg.presetsDirList[i].empty())
+ continue;
+
+ //open directory
+ string dirname = config.cfg.presetsDirList[i];
+ DIR *dir = opendir(dirname.c_str());
+ if(dir == NULL)
+ continue;
+ struct dirent *fn;
+
+ //check all files in directory
+ while((fn = readdir(dir))) {
+ string filename = fn->d_name;
+ if(filename.find(ftype) == string::npos)
+ continue;
+
+ //ensure proper path is formed
+ char tmpc = dirname[dirname.size() - 1];
+ const char *tmps;
+ if((tmpc == '/') || (tmpc == '\\'))
+ tmps = "";
+ else
+ tmps = "/";
+
+ string location = "" + dirname + tmps + filename;
+
+ //trim file type off of name
+ string name = filename.substr(0, filename.find(ftype));
+
+ //put on list
+ presets.push_back(presetstruct(location, name));
+ }
+
+ closedir(dir);
+ }
+
+ //sort the presets
+ sort(presets.begin(), presets.end());
+}
+
+
+void PresetsStore::copypreset(XMLwrapper *xml, char *type, string name)
+{
+ if(config.cfg.presetsDirList[0].empty())
+ return;
+
+ //make the filenames legal
+ name = legalizeFilename(name);
+
+ //make path legal
+ const string dirname = config.cfg.presetsDirList[0];
+ char tmpc = dirname[dirname.size() - 1];
+ const char *tmps;
+ if((tmpc == '/') || (tmpc == '\\'))
+ tmps = "";
+ else
+ tmps = "/";
+
+ string filename("" + dirname + tmps + name + "." + &type[1] + ".xpz");
+
+ xml->saveXMLfile(filename);
+}
+
+bool PresetsStore::pastepreset(XMLwrapper *xml, unsigned int npreset)
+{
+ npreset--;
+ if(npreset >= presets.size())
+ return false;
+ string filename = presets[npreset].file;
+ if(filename.empty())
+ return false;
+ bool result = (xml->loadXMLfile(filename) >= 0);
+ return result;
+}
+
+void PresetsStore::deletepreset(unsigned int npreset)
+{
+ npreset--;
+ if(npreset >= presets.size())
+ return;
+ string filename = presets[npreset].file;
+ if(filename.empty())
+ return;
+ remove(filename.c_str());
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.h
new file mode 100644
index 0000000..a2f48fd
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.h
@@ -0,0 +1,70 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PresetsStore.cpp - Presets and Clipboard store
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef PRESETSTORE_H
+#define PRESETSTORE_H
+
+#include <string>
+#include <vector>
+#include "../Misc/XMLwrapper.h"
+#include "../Misc/Config.h"
+
+#define MAX_PRESETTYPE_SIZE 30
+
+class PresetsStore
+{
+ public:
+ PresetsStore();
+ ~PresetsStore();
+
+ //Clipboard stuff
+ void copyclipboard(XMLwrapper *xml, char *type);
+ bool pasteclipboard(XMLwrapper *xml);
+ bool checkclipboardtype(const char *type);
+
+ //presets stuff
+ void copypreset(XMLwrapper *xml, char *type, std::string name);
+ bool pastepreset(XMLwrapper *xml, unsigned int npreset);
+ void deletepreset(unsigned int npreset);
+
+ struct presetstruct {
+ presetstruct(std::string _file, std::string _name)
+ :file(_file), name(_name) {}
+ bool operator<(const presetstruct &b) const;
+ std::string file;
+ std::string name;
+ };
+ std::vector<presetstruct> presets;
+
+ void rescanforpresets(const std::string &type);
+
+ private:
+ struct {
+ char *data;
+ char type[MAX_PRESETTYPE_SIZE];
+ } clipboard;
+
+ void clearpresets();
+};
+
+extern PresetsStore presetsstore;
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp
new file mode 100644
index 0000000..7e30374
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp
@@ -0,0 +1,330 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ SUBnoteParameters.cpp - Parameters for SUBnote (SUBsynth)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "../globals.h"
+#include "SUBnoteParameters.h"
+#include <stdio.h>
+#include <cmath>
+
+SUBnoteParameters::SUBnoteParameters():Presets()
+{
+ setpresettype("Psubsynth");
+ AmpEnvelope = new EnvelopeParams(64, 1);
+ AmpEnvelope->ADSRinit_dB(0, 40, 127, 25);
+ FreqEnvelope = new EnvelopeParams(64, 0);
+ FreqEnvelope->ASRinit(30, 50, 64, 60);
+ BandWidthEnvelope = new EnvelopeParams(64, 0);
+ BandWidthEnvelope->ASRinit_bw(100, 70, 64, 60);
+
+ GlobalFilter = new FilterParams(2, 80, 40);
+ GlobalFilterEnvelope = new EnvelopeParams(0, 1);
+ GlobalFilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64);
+
+ defaults();
+}
+
+
+void SUBnoteParameters::defaults()
+{
+ PVolume = 96;
+ PPanning = 64;
+ PAmpVelocityScaleFunction = 90;
+
+ Pfixedfreq = 0;
+ PfixedfreqET = 0;
+ Pnumstages = 2;
+ Pbandwidth = 40;
+ Phmagtype = 0;
+ Pbwscale = 64;
+ Pstereo = 1;
+ Pstart = 1;
+
+ PDetune = 8192;
+ PCoarseDetune = 0;
+ PDetuneType = 1;
+ PFreqEnvelopeEnabled = 0;
+ PBandWidthEnvelopeEnabled = 0;
+
+ POvertoneSpread.type = 0;
+ POvertoneSpread.par1 = 0;
+ POvertoneSpread.par2 = 0;
+ POvertoneSpread.par3 = 0;
+ updateFrequencyMultipliers();
+
+ for(int n = 0; n < MAX_SUB_HARMONICS; ++n) {
+ Phmag[n] = 0;
+ Phrelbw[n] = 64;
+ }
+ Phmag[0] = 127;
+
+ PGlobalFilterEnabled = 0;
+ PGlobalFilterVelocityScale = 64;
+ PGlobalFilterVelocityScaleFunction = 64;
+
+ AmpEnvelope->defaults();
+ FreqEnvelope->defaults();
+ BandWidthEnvelope->defaults();
+ GlobalFilter->defaults();
+ GlobalFilterEnvelope->defaults();
+}
+
+
+
+SUBnoteParameters::~SUBnoteParameters()
+{
+ delete (AmpEnvelope);
+ delete (FreqEnvelope);
+ delete (BandWidthEnvelope);
+ delete (GlobalFilter);
+ delete (GlobalFilterEnvelope);
+}
+
+
+
+
+void SUBnoteParameters::add2XML(XMLwrapper *xml)
+{
+ xml->addpar("num_stages", Pnumstages);
+ xml->addpar("harmonic_mag_type", Phmagtype);
+ xml->addpar("start", Pstart);
+
+ xml->beginbranch("HARMONICS");
+ for(int i = 0; i < MAX_SUB_HARMONICS; ++i) {
+ if((Phmag[i] == 0) && (xml->minimal))
+ continue;
+ xml->beginbranch("HARMONIC", i);
+ xml->addpar("mag", Phmag[i]);
+ xml->addpar("relbw", Phrelbw[i]);
+ xml->endbranch();
+ }
+ xml->endbranch();
+
+ xml->beginbranch("AMPLITUDE_PARAMETERS");
+ xml->addparbool("stereo", Pstereo);
+ xml->addpar("volume", PVolume);
+ xml->addpar("panning", PPanning);
+ xml->addpar("velocity_sensing", PAmpVelocityScaleFunction);
+ xml->beginbranch("AMPLITUDE_ENVELOPE");
+ AmpEnvelope->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+
+ xml->beginbranch("FREQUENCY_PARAMETERS");
+ xml->addparbool("fixed_freq", Pfixedfreq);
+ xml->addpar("fixed_freq_et", PfixedfreqET);
+
+ xml->addpar("detune", PDetune);
+ xml->addpar("coarse_detune", PCoarseDetune);
+ xml->addpar("overtone_spread_type", POvertoneSpread.type);
+ xml->addpar("overtone_spread_par1", POvertoneSpread.par1);
+ xml->addpar("overtone_spread_par2", POvertoneSpread.par2);
+ xml->addpar("overtone_spread_par3", POvertoneSpread.par3);
+ xml->addpar("detune_type", PDetuneType);
+
+ xml->addpar("bandwidth", Pbandwidth);
+ xml->addpar("bandwidth_scale", Pbwscale);
+
+ xml->addparbool("freq_envelope_enabled", PFreqEnvelopeEnabled);
+ if((PFreqEnvelopeEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("FREQUENCY_ENVELOPE");
+ FreqEnvelope->add2XML(xml);
+ xml->endbranch();
+ }
+
+ xml->addparbool("band_width_envelope_enabled", PBandWidthEnvelopeEnabled);
+ if((PBandWidthEnvelopeEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("BANDWIDTH_ENVELOPE");
+ BandWidthEnvelope->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->endbranch();
+
+ xml->beginbranch("FILTER_PARAMETERS");
+ xml->addparbool("enabled", PGlobalFilterEnabled);
+ if((PGlobalFilterEnabled != 0) || (!xml->minimal)) {
+ xml->beginbranch("FILTER");
+ GlobalFilter->add2XML(xml);
+ xml->endbranch();
+
+ xml->addpar("filter_velocity_sensing",
+ PGlobalFilterVelocityScaleFunction);
+ xml->addpar("filter_velocity_sensing_amplitude",
+ PGlobalFilterVelocityScale);
+
+ xml->beginbranch("FILTER_ENVELOPE");
+ GlobalFilterEnvelope->add2XML(xml);
+ xml->endbranch();
+ }
+ xml->endbranch();
+}
+
+
+
+void SUBnoteParameters::updateFrequencyMultipliers(void) {
+ float par1 = POvertoneSpread.par1 / 255.0f;
+ float par1pow = powf(10.0f,
+ -(1.0f - POvertoneSpread.par1 / 255.0f) * 3.0f);
+ float par2 = POvertoneSpread.par2 / 255.0f;
+ float par3 = 1.0f - POvertoneSpread.par3 / 255.0f;
+ float result;
+ float tmp = 0.0f;
+ int thresh = 0;
+
+ for(int n = 0; n < MAX_SUB_HARMONICS; ++n) {
+ float n1 = n + 1.0f;
+ switch(POvertoneSpread.type) {
+ case 1:
+ thresh = (int)(100.0f * par2 * par2) + 1;
+ if (n1 < thresh)
+ result = n1;
+ else
+ result = n1 + 8.0f * (n1 - thresh) * par1pow;
+ break;
+ case 2:
+ thresh = (int)(100.0f * par2 * par2) + 1;
+ if (n1 < thresh)
+ result = n1;
+ else
+ result = n1 + 0.9f * (thresh - n1) * par1pow;
+ break;
+ case 3:
+ tmp = par1pow * 100.0f + 1.0f;
+ result = powf(n / tmp, 1.0f - 0.8f * par2) * tmp + 1.0f;
+ break;
+ case 4:
+ result = n * (1.0f - par1pow) +
+ powf(0.1f * n, 3.0f * par2 + 1.0f) *
+ 10.0f * par1pow + 1.0f;
+ break;
+
+ case 5:
+ result = n1 + 2.0f * sinf(n * par2 * par2 * PI * 0.999f) *
+ sqrt(par1pow);
+ break;
+ case 6:
+ tmp = powf(2.0f * par2, 2.0f) + 0.1f;
+ result = n * powf(par1 * powf(0.8f * n, tmp) + 1.0f, tmp) +
+ 1.0f;
+ break;
+
+ case 7:
+ result = (n1 + par1) / (par1 + 1);
+ break;
+ default:
+ result = n1;
+ }
+ float iresult = floor(result + 0.5f);
+ POvertoneFreqMult[n] = iresult + par3 * (result - iresult);
+ }
+}
+
+void SUBnoteParameters::getfromXML(XMLwrapper *xml)
+{
+ Pnumstages = xml->getpar127("num_stages", Pnumstages);
+ Phmagtype = xml->getpar127("harmonic_mag_type", Phmagtype);
+ Pstart = xml->getpar127("start", Pstart);
+
+ if(xml->enterbranch("HARMONICS")) {
+ Phmag[0] = 0;
+ for(int i = 0; i < MAX_SUB_HARMONICS; ++i) {
+ if(xml->enterbranch("HARMONIC", i) == 0)
+ continue;
+ Phmag[i] = xml->getpar127("mag", Phmag[i]);
+ Phrelbw[i] = xml->getpar127("relbw", Phrelbw[i]);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
+ Pstereo = xml->getparbool("stereo", Pstereo);
+ PVolume = xml->getpar127("volume", PVolume);
+ PPanning = xml->getpar127("panning", PPanning);
+ PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing",
+ PAmpVelocityScaleFunction);
+ if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
+ AmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
+ Pfixedfreq = xml->getparbool("fixed_freq", Pfixedfreq);
+ PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET);
+
+ PDetune = xml->getpar("detune", PDetune, 0, 16383);
+ PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383);
+ POvertoneSpread.type =
+ xml->getpar127("overtone_spread_type", POvertoneSpread.type);
+ POvertoneSpread.par1 =
+ xml->getpar("overtone_spread_par1", POvertoneSpread.par1, 0, 255);
+ POvertoneSpread.par2 =
+ xml->getpar("overtone_spread_par2", POvertoneSpread.par2, 0, 255);
+ POvertoneSpread.par3 =
+ xml->getpar("overtone_spread_par3", POvertoneSpread.par3, 0, 255);
+ updateFrequencyMultipliers();
+ PDetuneType = xml->getpar127("detune_type", PDetuneType);
+
+ Pbandwidth = xml->getpar127("bandwidth", Pbandwidth);
+ Pbwscale = xml->getpar127("bandwidth_scale", Pbwscale);
+
+ PFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled",
+ PFreqEnvelopeEnabled);
+ if(xml->enterbranch("FREQUENCY_ENVELOPE")) {
+ FreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ PBandWidthEnvelopeEnabled = xml->getparbool(
+ "band_width_envelope_enabled",
+ PBandWidthEnvelopeEnabled);
+ if(xml->enterbranch("BANDWIDTH_ENVELOPE")) {
+ BandWidthEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ xml->exitbranch();
+ }
+
+ if(xml->enterbranch("FILTER_PARAMETERS")) {
+ PGlobalFilterEnabled = xml->getparbool("enabled", PGlobalFilterEnabled);
+ if(xml->enterbranch("FILTER")) {
+ GlobalFilter->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ PGlobalFilterVelocityScaleFunction = xml->getpar127(
+ "filter_velocity_sensing",
+ PGlobalFilterVelocityScaleFunction);
+ PGlobalFilterVelocityScale = xml->getpar127(
+ "filter_velocity_sensing_amplitude",
+ PGlobalFilterVelocityScale);
+
+ if(xml->enterbranch("FILTER_ENVELOPE")) {
+ GlobalFilterEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ }
+
+ xml->exitbranch();
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h
new file mode 100644
index 0000000..adbfca3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h
@@ -0,0 +1,112 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ SUBnoteParameters.h - Parameters for SUBnote (SUBsynth)
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef SUB_NOTE_PARAMETERS_H
+#define SUB_NOTE_PARAMETERS_H
+
+#include "../globals.h"
+#include "../Misc/XMLwrapper.h"
+#include "EnvelopeParams.h"
+#include "FilterParams.h"
+#include "Presets.h"
+
+class SUBnoteParameters:public Presets
+{
+ public:
+ SUBnoteParameters();
+ ~SUBnoteParameters();
+
+ void add2XML(XMLwrapper *xml);
+ void defaults();
+ void getfromXML(XMLwrapper *xml);
+ void updateFrequencyMultipliers(void);
+
+ //Parameters
+ //AMPLITUDE PARAMETRERS
+ unsigned char Pstereo; //0 for mono,1 for stereo
+ unsigned char PVolume;
+ unsigned char PPanning;
+ unsigned char PAmpVelocityScaleFunction;
+ EnvelopeParams *AmpEnvelope;
+
+ //Frequency Parameters
+ unsigned short int PDetune;
+ unsigned short int PCoarseDetune;
+ unsigned char PDetuneType;
+ unsigned char PFreqEnvelopeEnabled;
+ EnvelopeParams *FreqEnvelope;
+ unsigned char PBandWidthEnvelopeEnabled;
+ EnvelopeParams *BandWidthEnvelope;
+
+ //Filter Parameters (Global)
+ unsigned char PGlobalFilterEnabled;
+ FilterParams *GlobalFilter;
+ unsigned char PGlobalFilterVelocityScale;
+ unsigned char PGlobalFilterVelocityScaleFunction;
+ EnvelopeParams *GlobalFilterEnvelope;
+
+
+ //Other Parameters
+
+ //If the base frequency is fixed to 440 Hz
+ unsigned char Pfixedfreq;
+
+ /* Equal temperate (this is used only if the Pfixedfreq is enabled)
+ If this parameter is 0, the frequency is fixed (to 440 Hz);
+ if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
+ unsigned char PfixedfreqET;
+
+ // Overtone spread parameters
+ struct {
+ unsigned char type;
+ unsigned char par1;
+ unsigned char par2;
+ unsigned char par3;
+ } POvertoneSpread;
+ float POvertoneFreqMult[MAX_SUB_HARMONICS];
+
+ //how many times the filters are applied
+ unsigned char Pnumstages;
+
+ //bandwidth
+ unsigned char Pbandwidth;
+
+ //How the magnitudes are computed (0=linear,1=-60dB,2=-60dB)
+ unsigned char Phmagtype;
+
+ //Magnitudes
+ unsigned char Phmag[MAX_SUB_HARMONICS];
+
+ //Relative BandWidth ("64"=1.0f)
+ unsigned char Phrelbw[MAX_SUB_HARMONICS];
+
+ //how much the bandwidth is increased according to lower/higher frequency; 64-default
+ unsigned char Pbwscale;
+
+ //how the harmonics start("0"=0,"1"=random,"2"=1)
+ unsigned char Pstart;
+
+
+ private:
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp
new file mode 100644
index 0000000..c43f1fa
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp
@@ -0,0 +1,1822 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ ADnote.cpp - The "additive" synthesizer
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <cmath>
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
+#include <cassert>
+#include <stdint.h>
+
+#include "../globals.h"
+#include "../Misc/Util.h"
+#include "../DSP/Filter.h"
+#include "OscilGen.h"
+#include "ADnote.h"
+
+
+ADnote::ADnote(ADnoteParameters *pars,
+ Controller *ctl_,
+ float freq,
+ float velocity,
+ int portamento_,
+ int midinote_,
+ bool besilent)
+ :SynthNote(freq, velocity, portamento_, midinote_, besilent)
+{
+ tmpwavel = new float [synth->buffersize];
+ tmpwaver = new float [synth->buffersize];
+ bypassl = new float [synth->buffersize];
+ bypassr = new float [synth->buffersize];
+
+ partparams = pars;
+ ctl = ctl_;
+ portamento = portamento_;
+ midinote = midinote_;
+ NoteEnabled = ON;
+ basefreq = freq;
+ if(velocity > 1.0f)
+ velocity = 1.0f;
+ this->velocity = velocity;
+ time = 0.0f;
+ stereo = pars->GlobalPar.PStereo;
+
+ NoteGlobalPar.Detune = getdetune(pars->GlobalPar.PDetuneType,
+ pars->GlobalPar.PCoarseDetune,
+ pars->GlobalPar.PDetune);
+ bandwidthDetuneMultiplier = pars->getBandwidthDetuneMultiplier();
+
+ if(pars->GlobalPar.PPanning == 0)
+ NoteGlobalPar.Panning = RND;
+ else
+ NoteGlobalPar.Panning = pars->GlobalPar.PPanning / 128.0f;
+
+
+ NoteGlobalPar.FilterCenterPitch = pars->GlobalPar.GlobalFilter->getfreq() //center freq
+ + pars->GlobalPar.PFilterVelocityScale
+ / 127.0f * 6.0f //velocity sensing
+ * (VelF(velocity,
+ pars->GlobalPar.
+ PFilterVelocityScaleFunction) - 1);
+
+ if(pars->GlobalPar.PPunchStrength != 0) {
+ NoteGlobalPar.Punch.Enabled = 1;
+ NoteGlobalPar.Punch.t = 1.0f; //start from 1.0f and to 0.0f
+ NoteGlobalPar.Punch.initialvalue =
+ ((powf(10, 1.5f * pars->GlobalPar.PPunchStrength / 127.0f) - 1.0f)
+ * VelF(velocity,
+ pars->GlobalPar.PPunchVelocitySensing));
+ float time =
+ powf(10, 3.0f * pars->GlobalPar.PPunchTime / 127.0f) / 10000.0f; //0.1f .. 100 ms
+ float stretch = powf(440.0f / freq,
+ pars->GlobalPar.PPunchStretch / 64.0f);
+ NoteGlobalPar.Punch.dt = 1.0f / (time * synth->samplerate_f * stretch);
+ }
+ else
+ NoteGlobalPar.Punch.Enabled = 0;
+
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ pars->VoicePar[nvoice].OscilSmp->newrandseed(prng());
+ NoteVoicePar[nvoice].OscilSmp = NULL;
+ NoteVoicePar[nvoice].FMSmp = NULL;
+ NoteVoicePar[nvoice].VoiceOut = NULL;
+
+ NoteVoicePar[nvoice].FMVoice = -1;
+ unison_size[nvoice] = 1;
+
+ if(pars->VoicePar[nvoice].Enabled == 0) {
+ NoteVoicePar[nvoice].Enabled = OFF;
+ continue; //the voice is disabled
+ }
+
+ unison_stereo_spread[nvoice] =
+ pars->VoicePar[nvoice].Unison_stereo_spread / 127.0f;
+ int unison = pars->VoicePar[nvoice].Unison_size;
+ if(unison < 1)
+ unison = 1;
+
+ //compute unison
+ unison_size[nvoice] = unison;
+
+ unison_base_freq_rap[nvoice] = new float[unison];
+ unison_freq_rap[nvoice] = new float[unison];
+ unison_invert_phase[nvoice] = new bool[unison];
+ float unison_spread = pars->getUnisonFrequencySpreadCents(
+ nvoice);
+ float unison_real_spread = powf(2.0f, (unison_spread * 0.5f) / 1200.0f);
+ float unison_vibratto_a = pars->VoicePar[nvoice].Unison_vibratto
+ / 127.0f; //0.0f .. 1.0f
+
+
+ switch(unison) {
+ case 1:
+ unison_base_freq_rap[nvoice][0] = 1.0f; //if the unison is not used, always make the only subvoice to have the default note
+ break;
+ case 2: { //unison for 2 subvoices
+ unison_base_freq_rap[nvoice][0] = 1.0f / unison_real_spread;
+ unison_base_freq_rap[nvoice][1] = unison_real_spread;
+ };
+ break;
+ default: { //unison for more than 2 subvoices
+ float unison_values[unison];
+ float min = -1e-6, max = 1e-6;
+ for(int k = 0; k < unison; ++k) {
+ float step = (k / (float) (unison - 1)) * 2.0f - 1.0f; //this makes the unison spread more uniform
+ float val = step + (RND * 2.0f - 1.0f) / (unison - 1);
+ unison_values[k] = val;
+ if (min > val) {
+ min = val;
+ }
+ if (max < val) {
+ max = val;
+ }
+ }
+ float diff = max - min;
+ for(int k = 0; k < unison; ++k) {
+ unison_values[k] =
+ (unison_values[k] - (max + min) * 0.5f) / diff; //the lowest value will be -1 and the highest will be 1
+ unison_base_freq_rap[nvoice][k] =
+ powf(2.0f, (unison_spread * unison_values[k]) / 1200);
+ }
+ };
+ }
+
+ //unison vibrattos
+ if(unison > 1)
+ for(int k = 0; k < unison; ++k) //reduce the frequency difference for larger vibrattos
+ unison_base_freq_rap[nvoice][k] = 1.0f
+ + (unison_base_freq_rap[
+ nvoice][k] - 1.0f)
+ * (1.0f - unison_vibratto_a);
+ unison_vibratto[nvoice].step = new float[unison];
+ unison_vibratto[nvoice].position = new float[unison];
+ unison_vibratto[nvoice].amplitude =
+ (unison_real_spread - 1.0f) * unison_vibratto_a;
+
+ float increments_per_second = synth->samplerate_f / synth->buffersize_f;
+ float vibratto_base_period = 0.25f
+ * powf(
+ 2.0f,
+ (1.0f
+ - pars->VoicePar[nvoice].
+ Unison_vibratto_speed
+ / 127.0f) * 4.0f);
+ for(int k = 0; k < unison; ++k) {
+ unison_vibratto[nvoice].position[k] = RND * 1.8f - 0.9f;
+ //make period to vary randomly from 50% to 200% vibratto base period
+ float vibratto_period = vibratto_base_period
+ * powf(2.0f, RND * 2.0f - 1.0f);
+
+ float m = 4.0f / (vibratto_period * increments_per_second);
+ if(RND < 0.5f)
+ m = -m;
+ unison_vibratto[nvoice].step[k] = m;
+ }
+
+ if(unison == 1) { //no vibratto for a single voice
+ unison_vibratto[nvoice].step[0] = 0.0f;
+ unison_vibratto[nvoice].position[0] = 0.0f;
+ unison_vibratto[nvoice].amplitude = 0.0f;
+ }
+
+ //phase invert for unison
+ unison_invert_phase[nvoice][0] = false;
+ if(unison != 1) {
+ int inv = pars->VoicePar[nvoice].Unison_invert_phase;
+ switch(inv) {
+ case 0: for(int k = 0; k < unison; ++k)
+ unison_invert_phase[nvoice][k] = false;
+ break;
+ case 1: for(int k = 0; k < unison; ++k)
+ unison_invert_phase[nvoice][k] = (RND > 0.5f);
+ break;
+ default: for(int k = 0; k < unison; ++k)
+ unison_invert_phase[nvoice][k] =
+ (k % inv == 0) ? true : false;
+ break;
+ }
+ }
+
+
+ oscfreqhi[nvoice] = new int[unison];
+ oscfreqlo[nvoice] = new float[unison];
+ oscfreqhiFM[nvoice] = new unsigned int[unison];
+ oscfreqloFM[nvoice] = new float[unison];
+ oscposhi[nvoice] = new int[unison];
+ oscposlo[nvoice] = new float[unison];
+ oscposhiFM[nvoice] = new unsigned int[unison];
+ oscposloFM[nvoice] = new float[unison];
+
+ NoteVoicePar[nvoice].Enabled = ON;
+ NoteVoicePar[nvoice].fixedfreq = pars->VoicePar[nvoice].Pfixedfreq;
+ NoteVoicePar[nvoice].fixedfreqET = pars->VoicePar[nvoice].PfixedfreqET;
+
+ //use the Globalpars.detunetype if the detunetype is 0
+ if(pars->VoicePar[nvoice].PDetuneType != 0) {
+ NoteVoicePar[nvoice].Detune = getdetune(
+ pars->VoicePar[nvoice].PDetuneType,
+ pars->VoicePar[nvoice].
+ PCoarseDetune,
+ 8192); //coarse detune
+ NoteVoicePar[nvoice].FineDetune = getdetune(
+ pars->VoicePar[nvoice].PDetuneType,
+ 0,
+ pars->VoicePar[nvoice].PDetune); //fine detune
+ }
+ else {
+ NoteVoicePar[nvoice].Detune = getdetune(
+ pars->GlobalPar.PDetuneType,
+ pars->VoicePar[nvoice].
+ PCoarseDetune,
+ 8192); //coarse detune
+ NoteVoicePar[nvoice].FineDetune = getdetune(
+ pars->GlobalPar.PDetuneType,
+ 0,
+ pars->VoicePar[nvoice].PDetune); //fine detune
+ }
+ if(pars->VoicePar[nvoice].PFMDetuneType != 0)
+ NoteVoicePar[nvoice].FMDetune = getdetune(
+ pars->VoicePar[nvoice].PFMDetuneType,
+ pars->VoicePar[nvoice].
+ PFMCoarseDetune,
+ pars->VoicePar[nvoice].PFMDetune);
+ else
+ NoteVoicePar[nvoice].FMDetune = getdetune(
+ pars->GlobalPar.PDetuneType,
+ pars->VoicePar[nvoice].
+ PFMCoarseDetune,
+ pars->VoicePar[nvoice].PFMDetune);
+
+
+
+ for(int k = 0; k < unison; ++k) {
+ oscposhi[nvoice][k] = 0;
+ oscposlo[nvoice][k] = 0.0f;
+ oscposhiFM[nvoice][k] = 0;
+ oscposloFM[nvoice][k] = 0.0f;
+ }
+
+ //the extra points contains the first point
+ NoteVoicePar[nvoice].OscilSmp =
+ new float[synth->oscilsize + OSCIL_SMP_EXTRA_SAMPLES];
+
+ //Get the voice's oscil or external's voice oscil
+ int vc = nvoice;
+ if(pars->VoicePar[nvoice].Pextoscil != -1)
+ vc = pars->VoicePar[nvoice].Pextoscil;
+ if(!pars->GlobalPar.Hrandgrouping)
+ pars->VoicePar[vc].OscilSmp->newrandseed(prng());
+ int oscposhi_start =
+ pars->VoicePar[vc].OscilSmp->get(NoteVoicePar[nvoice].OscilSmp,
+ getvoicebasefreq(nvoice),
+ pars->VoicePar[nvoice].Presonance);
+
+ //I store the first elments to the last position for speedups
+ for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i)
+ NoteVoicePar[nvoice].OscilSmp[synth->oscilsize
+ + i] =
+ NoteVoicePar[nvoice].OscilSmp[i];
+
+ oscposhi_start +=
+ (int)((pars->VoicePar[nvoice].Poscilphase
+ - 64.0f) / 128.0f * synth->oscilsize + synth->oscilsize * 4);
+ oscposhi_start %= synth->oscilsize;
+
+ for(int k = 0; k < unison; ++k) {
+ oscposhi[nvoice][k] = oscposhi_start;
+ //put random starting point for other subvoices
+ oscposhi_start =
+ (int)(RND * pars->VoicePar[nvoice].Unison_phase_randomness /
+ 127.0f * (synth->oscilsize - 1));
+ }
+
+ NoteVoicePar[nvoice].FreqLfo = NULL;
+ NoteVoicePar[nvoice].FreqEnvelope = NULL;
+
+ NoteVoicePar[nvoice].AmpLfo = NULL;
+ NoteVoicePar[nvoice].AmpEnvelope = NULL;
+
+ NoteVoicePar[nvoice].VoiceFilterL = NULL;
+ NoteVoicePar[nvoice].VoiceFilterR = NULL;
+ NoteVoicePar[nvoice].FilterEnvelope = NULL;
+ NoteVoicePar[nvoice].FilterLfo = NULL;
+
+ NoteVoicePar[nvoice].FilterCenterPitch =
+ pars->VoicePar[nvoice].VoiceFilter->getfreq();
+ NoteVoicePar[nvoice].filterbypass =
+ pars->VoicePar[nvoice].Pfilterbypass;
+
+ switch(pars->VoicePar[nvoice].PFMEnabled) {
+ case 1:
+ NoteVoicePar[nvoice].FMEnabled = MORPH;
+ break;
+ case 2:
+ NoteVoicePar[nvoice].FMEnabled = RING_MOD;
+ break;
+ case 3:
+ NoteVoicePar[nvoice].FMEnabled = PHASE_MOD;
+ break;
+ case 4:
+ NoteVoicePar[nvoice].FMEnabled = FREQ_MOD;
+ break;
+ case 5:
+ NoteVoicePar[nvoice].FMEnabled = PITCH_MOD;
+ break;
+ default:
+ NoteVoicePar[nvoice].FMEnabled = NONE;
+ }
+
+ NoteVoicePar[nvoice].FMVoice = pars->VoicePar[nvoice].PFMVoice;
+ NoteVoicePar[nvoice].FMFreqEnvelope = NULL;
+ NoteVoicePar[nvoice].FMAmpEnvelope = NULL;
+
+ //Compute the Voice's modulator volume (incl. damping)
+ float fmvoldamp = powf(440.0f / getvoicebasefreq(
+ nvoice),
+ pars->VoicePar[nvoice].PFMVolumeDamp / 64.0f
+ - 1.0f);
+ switch(NoteVoicePar[nvoice].FMEnabled) {
+ case PHASE_MOD:
+ fmvoldamp =
+ powf(440.0f / getvoicebasefreq(
+ nvoice), pars->VoicePar[nvoice].PFMVolumeDamp
+ / 64.0f);
+ NoteVoicePar[nvoice].FMVolume =
+ (expf(pars->VoicePar[nvoice].PFMVolume / 127.0f
+ * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f;
+ break;
+ case FREQ_MOD:
+ NoteVoicePar[nvoice].FMVolume =
+ (expf(pars->VoicePar[nvoice].PFMVolume / 127.0f
+ * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f;
+ break;
+ // case PITCH_MOD:NoteVoicePar[nvoice].FMVolume=(pars->VoicePar[nvoice].PFMVolume/127.0f*8.0f)*fmvoldamp;//???????????
+ // break;
+ default:
+ if(fmvoldamp > 1.0f)
+ fmvoldamp = 1.0f;
+ NoteVoicePar[nvoice].FMVolume =
+ pars->VoicePar[nvoice].PFMVolume
+ / 127.0f * fmvoldamp;
+ }
+
+ //Voice's modulator velocity sensing
+ NoteVoicePar[nvoice].FMVolume *=
+ VelF(velocity,
+ partparams->VoicePar[nvoice].PFMVelocityScaleFunction);
+
+ FMoldsmp[nvoice] = new float [unison];
+ for(int k = 0; k < unison; ++k)
+ FMoldsmp[nvoice][k] = 0.0f; //this is for FM (integration)
+
+ firsttick[nvoice] = 1;
+ NoteVoicePar[nvoice].DelayTicks =
+ (int)((expf(pars->VoicePar[nvoice].PDelay / 127.0f
+ * logf(50.0f))
+ - 1.0f) / synth->buffersize_f / 10.0f * synth->samplerate_f);
+ }
+
+ max_unison = 1;
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice)
+ if(unison_size[nvoice] > max_unison)
+ max_unison = unison_size[nvoice];
+
+
+ tmpwave_unison = new float *[max_unison];
+ for(int k = 0; k < max_unison; ++k) {
+ tmpwave_unison[k] = new float[synth->buffersize];
+ memset(tmpwave_unison[k], 0, synth->bufferbytes);
+ }
+
+ initparameters();
+}
+
+// ADlegatonote: This function is (mostly) a copy of ADnote(...) and
+// initparameters() stuck together with some lines removed so that it
+// only alter the already playing note (to perform legato). It is
+// possible I left stuff that is not required for this.
+void ADnote::legatonote(float freq, float velocity, int portamento_,
+ int midinote_, bool externcall)
+{
+ ADnoteParameters *pars = partparams;
+
+ // Manage legato stuff
+ if(legato.update(freq, velocity, portamento_, midinote_, externcall))
+ return;
+
+ portamento = portamento_;
+ midinote = midinote_;
+ basefreq = freq;
+
+ if(velocity > 1.0f)
+ velocity = 1.0f;
+ this->velocity = velocity;
+
+ NoteGlobalPar.Detune = getdetune(pars->GlobalPar.PDetuneType,
+ pars->GlobalPar.PCoarseDetune,
+ pars->GlobalPar.PDetune);
+ bandwidthDetuneMultiplier = pars->getBandwidthDetuneMultiplier();
+
+ if(pars->GlobalPar.PPanning == 0)
+ NoteGlobalPar.Panning = RND;
+ else
+ NoteGlobalPar.Panning = pars->GlobalPar.PPanning / 128.0f;
+
+ //center freq
+ NoteGlobalPar.FilterCenterPitch = pars->GlobalPar.GlobalFilter->getfreq()
+ + pars->GlobalPar.PFilterVelocityScale
+ / 127.0f * 6.0f //velocity sensing
+ * (VelF(velocity,
+ pars->GlobalPar.
+ PFilterVelocityScaleFunction) - 1);
+
+
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ if(NoteVoicePar[nvoice].Enabled == OFF)
+ continue; //(gf) Stay the same as first note in legato.
+
+ NoteVoicePar[nvoice].fixedfreq = pars->VoicePar[nvoice].Pfixedfreq;
+ NoteVoicePar[nvoice].fixedfreqET = pars->VoicePar[nvoice].PfixedfreqET;
+
+ //use the Globalpars.detunetype if the detunetype is 0
+ if(pars->VoicePar[nvoice].PDetuneType != 0) {
+ NoteVoicePar[nvoice].Detune = getdetune(
+ pars->VoicePar[nvoice].PDetuneType,
+ pars->VoicePar[nvoice].PCoarseDetune,
+ 8192); //coarse detune
+ NoteVoicePar[nvoice].FineDetune = getdetune(
+ pars->VoicePar[nvoice].PDetuneType,
+ 0,
+ pars->VoicePar[nvoice].PDetune); //fine detune
+ }
+ else {
+ NoteVoicePar[nvoice].Detune = getdetune(
+ pars->GlobalPar.PDetuneType,
+ pars->VoicePar[nvoice].PCoarseDetune,
+ 8192); //coarse detune
+ NoteVoicePar[nvoice].FineDetune = getdetune(
+ pars->GlobalPar.PDetuneType,
+ 0,
+ pars->VoicePar[nvoice].PDetune); //fine detune
+ }
+ if(pars->VoicePar[nvoice].PFMDetuneType != 0)
+ NoteVoicePar[nvoice].FMDetune = getdetune(
+ pars->VoicePar[nvoice].PFMDetuneType,
+ pars->VoicePar[nvoice].PFMCoarseDetune,
+ pars->VoicePar[nvoice].PFMDetune);
+ else
+ NoteVoicePar[nvoice].FMDetune = getdetune(
+ pars->GlobalPar.PDetuneType,
+ pars->VoicePar[nvoice].PFMCoarseDetune,
+ pars->VoicePar[nvoice].PFMDetune);
+
+
+ //Get the voice's oscil or external's voice oscil
+ int vc = nvoice;
+ if(pars->VoicePar[nvoice].Pextoscil != -1)
+ vc = pars->VoicePar[nvoice].Pextoscil;
+ if(!pars->GlobalPar.Hrandgrouping)
+ pars->VoicePar[vc].OscilSmp->newrandseed(prng());
+
+ pars->VoicePar[vc].OscilSmp->get(NoteVoicePar[nvoice].OscilSmp,
+ getvoicebasefreq(nvoice),
+ pars->VoicePar[nvoice].Presonance); //(gf)Modif of the above line.
+
+ //I store the first elments to the last position for speedups
+ for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i)
+ NoteVoicePar[nvoice].OscilSmp[synth->oscilsize
+ + i] =
+ NoteVoicePar[nvoice].OscilSmp[i];
+
+
+ NoteVoicePar[nvoice].FilterCenterPitch =
+ pars->VoicePar[nvoice].VoiceFilter->getfreq();
+ NoteVoicePar[nvoice].filterbypass =
+ pars->VoicePar[nvoice].Pfilterbypass;
+
+
+ NoteVoicePar[nvoice].FMVoice = pars->VoicePar[nvoice].PFMVoice;
+
+ //Compute the Voice's modulator volume (incl. damping)
+ float fmvoldamp = powf(440.0f / getvoicebasefreq(nvoice),
+ pars->VoicePar[nvoice].PFMVolumeDamp / 64.0f
+ - 1.0f);
+
+ switch(NoteVoicePar[nvoice].FMEnabled) {
+ case PHASE_MOD:
+ fmvoldamp =
+ powf(440.0f / getvoicebasefreq(
+ nvoice), pars->VoicePar[nvoice].PFMVolumeDamp
+ / 64.0f);
+ NoteVoicePar[nvoice].FMVolume =
+ (expf(pars->VoicePar[nvoice].PFMVolume / 127.0f
+ * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f;
+ break;
+ case FREQ_MOD:
+ NoteVoicePar[nvoice].FMVolume =
+ (expf(pars->VoicePar[nvoice].PFMVolume / 127.0f
+ * FM_AMP_MULTIPLIER) - 1.0f) * fmvoldamp * 4.0f;
+ break;
+ // case PITCH_MOD:NoteVoicePar[nvoice].FMVolume=(pars->VoicePar[nvoice].PFMVolume/127.0f*8.0f)*fmvoldamp;//???????????
+ // break;
+ default:
+ if(fmvoldamp > 1.0f)
+ fmvoldamp = 1.0f;
+ NoteVoicePar[nvoice].FMVolume =
+ pars->VoicePar[nvoice].PFMVolume
+ / 127.0f * fmvoldamp;
+ }
+
+ //Voice's modulator velocity sensing
+ NoteVoicePar[nvoice].FMVolume *=
+ VelF(velocity,
+ partparams->VoicePar[nvoice].PFMVelocityScaleFunction);
+
+ NoteVoicePar[nvoice].DelayTicks =
+ (int)((expf(pars->VoicePar[nvoice].PDelay / 127.0f
+ * logf(50.0f))
+ - 1.0f) / synth->buffersize_f / 10.0f * synth->samplerate_f);
+ }
+
+ /// initparameters();
+
+ ///////////////
+ // Altered content of initparameters():
+
+ int tmp[NUM_VOICES];
+
+ NoteGlobalPar.Volume = 4.0f
+ * powf(0.1f, 3.0f
+ * (1.0f - partparams->GlobalPar.PVolume
+ / 96.0f)) //-60 dB .. 0 dB
+ * VelF(
+ velocity,
+ partparams->GlobalPar.
+ PAmpVelocityScaleFunction); //velocity sensing
+
+ globalnewamplitude = NoteGlobalPar.Volume
+ * NoteGlobalPar.AmpEnvelope->envout_dB()
+ * NoteGlobalPar.AmpLfo->amplfoout();
+
+ NoteGlobalPar.FilterQ = partparams->GlobalPar.GlobalFilter->getq();
+ NoteGlobalPar.FilterFreqTracking =
+ partparams->GlobalPar.GlobalFilter->getfreqtracking(basefreq);
+
+ // Forbids the Modulation Voice to be greater or equal than voice
+ for(int i = 0; i < NUM_VOICES; ++i)
+ if(NoteVoicePar[i].FMVoice >= i)
+ NoteVoicePar[i].FMVoice = -1;
+
+ // Voice Parameter init
+ for(unsigned nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ if(NoteVoicePar[nvoice].Enabled == 0)
+ continue;
+
+ NoteVoicePar[nvoice].noisetype = partparams->VoicePar[nvoice].Type;
+ /* Voice Amplitude Parameters Init */
+ NoteVoicePar[nvoice].Volume =
+ powf(0.1f, 3.0f
+ * (1.0f - partparams->VoicePar[nvoice].PVolume / 127.0f)) // -60 dB .. 0 dB
+ * VelF(velocity,
+ partparams->VoicePar[nvoice].PAmpVelocityScaleFunction); //velocity
+
+ if(partparams->VoicePar[nvoice].PVolumeminus != 0)
+ NoteVoicePar[nvoice].Volume = -NoteVoicePar[nvoice].Volume;
+
+ if(partparams->VoicePar[nvoice].PPanning == 0)
+ NoteVoicePar[nvoice].Panning = RND; // random panning
+ else
+ NoteVoicePar[nvoice].Panning =
+ partparams->VoicePar[nvoice].PPanning / 128.0f;
+
+ newamplitude[nvoice] = 1.0f;
+ if((partparams->VoicePar[nvoice].PAmpEnvelopeEnabled != 0)
+ && (NoteVoicePar[nvoice].AmpEnvelope != NULL))
+ newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpEnvelope->envout_dB();
+
+
+ if((partparams->VoicePar[nvoice].PAmpLfoEnabled != 0)
+ && (NoteVoicePar[nvoice].AmpLfo != NULL))
+ newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpLfo->amplfoout();
+
+
+
+ NoteVoicePar[nvoice].FilterFreqTracking =
+ partparams->VoicePar[nvoice].VoiceFilter->getfreqtracking(basefreq);
+
+ /* Voice Modulation Parameters Init */
+ if((NoteVoicePar[nvoice].FMEnabled != NONE)
+ && (NoteVoicePar[nvoice].FMVoice < 0)) {
+ partparams->VoicePar[nvoice].FMSmp->newrandseed(prng());
+
+ //Perform Anti-aliasing only on MORPH or RING MODULATION
+
+ int vc = nvoice;
+ if(partparams->VoicePar[nvoice].PextFMoscil != -1)
+ vc = partparams->VoicePar[nvoice].PextFMoscil;
+
+ if(!partparams->GlobalPar.Hrandgrouping)
+ partparams->VoicePar[vc].FMSmp->newrandseed(prng());
+
+ for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i)
+ NoteVoicePar[nvoice].FMSmp[synth->oscilsize + i] =
+ NoteVoicePar[nvoice].FMSmp[i];
+ }
+
+ FMnewamplitude[nvoice] = NoteVoicePar[nvoice].FMVolume
+ * ctl->fmamp.relamp;
+
+ if((partparams->VoicePar[nvoice].PFMAmpEnvelopeEnabled != 0)
+ && (NoteVoicePar[nvoice].FMAmpEnvelope != NULL))
+ FMnewamplitude[nvoice] *=
+ NoteVoicePar[nvoice].FMAmpEnvelope->envout_dB();
+ }
+
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ for(unsigned i = nvoice + 1; i < NUM_VOICES; ++i)
+ tmp[i] = 0;
+ for(unsigned i = nvoice + 1; i < NUM_VOICES; ++i)
+ if((NoteVoicePar[i].FMVoice == nvoice) && (tmp[i] == 0))
+ tmp[i] = 1;
+ }
+}
+
+
+/*
+ * Kill a voice of ADnote
+ */
+void ADnote::KillVoice(int nvoice)
+{
+ delete [] oscfreqhi[nvoice];
+ delete [] oscfreqlo[nvoice];
+ delete [] oscfreqhiFM[nvoice];
+ delete [] oscfreqloFM[nvoice];
+ delete [] oscposhi[nvoice];
+ delete [] oscposlo[nvoice];
+ delete [] oscposhiFM[nvoice];
+ delete [] oscposloFM[nvoice];
+
+ delete [] unison_base_freq_rap[nvoice];
+ delete [] unison_freq_rap[nvoice];
+ delete [] unison_invert_phase[nvoice];
+ delete [] FMoldsmp[nvoice];
+ delete [] unison_vibratto[nvoice].step;
+ delete [] unison_vibratto[nvoice].position;
+
+ NoteVoicePar[nvoice].kill();
+}
+
+/*
+ * Kill the note
+ */
+void ADnote::KillNote()
+{
+ for(unsigned nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ if(NoteVoicePar[nvoice].Enabled == ON)
+ KillVoice(nvoice);
+
+ if(NoteVoicePar[nvoice].VoiceOut)
+ delete NoteVoicePar[nvoice].VoiceOut;
+ NoteVoicePar[nvoice].VoiceOut = NULL;
+ }
+
+ NoteGlobalPar.kill();
+
+ NoteEnabled = OFF;
+}
+
+ADnote::~ADnote()
+{
+ if(NoteEnabled == ON)
+ KillNote();
+ delete [] tmpwavel;
+ delete [] tmpwaver;
+ delete [] bypassl;
+ delete [] bypassr;
+ for(int k = 0; k < max_unison; ++k)
+ delete[] tmpwave_unison[k];
+ delete[] tmpwave_unison;
+}
+
+
+/*
+ * Init the parameters
+ */
+void ADnote::initparameters()
+{
+ int tmp[NUM_VOICES];
+
+ // Global Parameters
+ NoteGlobalPar.initparameters(partparams->GlobalPar, basefreq, velocity,
+ stereo);
+
+ NoteGlobalPar.AmpEnvelope->envout_dB(); //discard the first envelope output
+ globalnewamplitude = NoteGlobalPar.Volume
+ * NoteGlobalPar.AmpEnvelope->envout_dB()
+ * NoteGlobalPar.AmpLfo->amplfoout();
+
+ // Forbids the Modulation Voice to be greater or equal than voice
+ for(int i = 0; i < NUM_VOICES; ++i)
+ if(NoteVoicePar[i].FMVoice >= i)
+ NoteVoicePar[i].FMVoice = -1;
+
+ // Voice Parameter init
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ Voice &vce = NoteVoicePar[nvoice];
+ ADnoteVoiceParam ¶m = partparams->VoicePar[nvoice];
+
+ if(vce.Enabled == 0)
+ continue;
+
+ vce.noisetype = param.Type;
+ /* Voice Amplitude Parameters Init */
+ vce.Volume = powf(0.1f, 3.0f * (1.0f - param.PVolume / 127.0f)) // -60dB..0dB
+ * VelF(velocity, param.PAmpVelocityScaleFunction);
+
+ if(param.PVolumeminus)
+ vce.Volume = -vce.Volume;
+
+ if(param.PPanning == 0)
+ vce.Panning = RND; // random panning
+ else
+ vce.Panning = param.PPanning / 128.0f;
+
+ newamplitude[nvoice] = 1.0f;
+ if(param.PAmpEnvelopeEnabled) {
+ vce.AmpEnvelope = new Envelope(param.AmpEnvelope, basefreq);
+ vce.AmpEnvelope->envout_dB(); //discard the first envelope sample
+ newamplitude[nvoice] *= vce.AmpEnvelope->envout_dB();
+ }
+
+ if(param.PAmpLfoEnabled) {
+ vce.AmpLfo = new LFO(param.AmpLfo, basefreq);
+ newamplitude[nvoice] *= vce.AmpLfo->amplfoout();
+ }
+
+ /* Voice Frequency Parameters Init */
+ if(param.PFreqEnvelopeEnabled != 0)
+ vce.FreqEnvelope = new Envelope(param.FreqEnvelope, basefreq);
+
+ if(param.PFreqLfoEnabled != 0)
+ vce.FreqLfo = new LFO(param.FreqLfo, basefreq);
+
+ /* Voice Filter Parameters Init */
+ if(param.PFilterEnabled != 0) {
+ vce.VoiceFilterL = Filter::generate(param.VoiceFilter);
+ vce.VoiceFilterR = Filter::generate(param.VoiceFilter);
+ }
+
+ if(param.PFilterEnvelopeEnabled != 0)
+ vce.FilterEnvelope = new Envelope(param.FilterEnvelope, basefreq);
+
+ if(param.PFilterLfoEnabled != 0)
+ vce.FilterLfo = new LFO(param.FilterLfo, basefreq);
+
+ vce.FilterFreqTracking =
+ param.VoiceFilter->getfreqtracking(basefreq);
+
+ /* Voice Modulation Parameters Init */
+ if((vce.FMEnabled != NONE) && (vce.FMVoice < 0)) {
+ param.FMSmp->newrandseed(prng());
+ vce.FMSmp = new float[synth->oscilsize + OSCIL_SMP_EXTRA_SAMPLES];
+
+ //Perform Anti-aliasing only on MORPH or RING MODULATION
+
+ int vc = nvoice;
+ if(param.PextFMoscil != -1)
+ vc = param.PextFMoscil;
+
+ float tmp = 1.0f;
+ if((partparams->VoicePar[vc].FMSmp->Padaptiveharmonics != 0)
+ || (vce.FMEnabled == MORPH)
+ || (vce.FMEnabled == RING_MOD))
+ tmp = getFMvoicebasefreq(nvoice);
+
+ if(!partparams->GlobalPar.Hrandgrouping)
+ partparams->VoicePar[vc].FMSmp->newrandseed(prng());
+
+ for(int k = 0; k < unison_size[nvoice]; ++k)
+ oscposhiFM[nvoice][k] = (oscposhi[nvoice][k]
+ + partparams->VoicePar[vc].FMSmp->get(
+ vce.FMSmp, tmp))
+ % synth->oscilsize;
+
+ for(int i = 0; i < OSCIL_SMP_EXTRA_SAMPLES; ++i)
+ vce.FMSmp[synth->oscilsize + i] = vce.FMSmp[i];
+ int oscposhiFM_add =
+ (int)((param.PFMoscilphase
+ - 64.0f) / 128.0f * synth->oscilsize
+ + synth->oscilsize * 4);
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ oscposhiFM[nvoice][k] += oscposhiFM_add;
+ oscposhiFM[nvoice][k] %= synth->oscilsize;
+ }
+ }
+
+ if(param.PFMFreqEnvelopeEnabled != 0)
+ vce.FMFreqEnvelope = new Envelope(param.FMFreqEnvelope, basefreq);
+
+ FMnewamplitude[nvoice] = vce.FMVolume * ctl->fmamp.relamp;
+
+ if(param.PFMAmpEnvelopeEnabled != 0) {
+ vce.FMAmpEnvelope = new Envelope(param.FMAmpEnvelope,
+ basefreq);
+ FMnewamplitude[nvoice] *= vce.FMAmpEnvelope->envout_dB();
+ }
+ }
+
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ for(int i = nvoice + 1; i < NUM_VOICES; ++i)
+ tmp[i] = 0;
+ for(int i = nvoice + 1; i < NUM_VOICES; ++i)
+ if((NoteVoicePar[i].FMVoice == nvoice) && (tmp[i] == 0)) {
+ NoteVoicePar[nvoice].VoiceOut = new float[synth->buffersize];
+ tmp[i] = 1;
+ }
+
+ if(NoteVoicePar[nvoice].VoiceOut)
+ memset(NoteVoicePar[nvoice].VoiceOut, 0, synth->bufferbytes);
+ }
+}
+
+
+/*
+ * Computes the relative frequency of each unison voice and it's vibratto
+ * This must be called before setfreq* functions
+ */
+void ADnote::compute_unison_freq_rap(int nvoice) {
+ if(unison_size[nvoice] == 1) { //no unison
+ unison_freq_rap[nvoice][0] = 1.0f;
+ return;
+ }
+ float relbw = ctl->bandwidth.relbw * bandwidthDetuneMultiplier;
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float pos = unison_vibratto[nvoice].position[k];
+ float step = unison_vibratto[nvoice].step[k];
+ pos += step;
+ if(pos <= -1.0f) {
+ pos = -1.0f;
+ step = -step;
+ }
+ if(pos >= 1.0f) {
+ pos = 1.0f;
+ step = -step;
+ }
+ float vibratto_val = (pos - 0.333333333f * pos * pos * pos) * 1.5f; //make the vibratto lfo smoother
+ unison_freq_rap[nvoice][k] = 1.0f
+ + ((unison_base_freq_rap[nvoice][k]
+ - 1.0f) + vibratto_val
+ * unison_vibratto[nvoice].amplitude)
+ * relbw;
+
+ unison_vibratto[nvoice].position[k] = pos;
+ step = unison_vibratto[nvoice].step[k] = step;
+ }
+}
+
+
+/*
+ * Computes the frequency of an oscillator
+ */
+void ADnote::setfreq(int nvoice, float in_freq)
+{
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float freq = fabs(in_freq) * unison_freq_rap[nvoice][k];
+ float speed = freq * synth->oscilsize_f / synth->samplerate_f;
+ if(speed > synth->oscilsize_f)
+ speed = synth->oscilsize_f;
+
+ F2I(speed, oscfreqhi[nvoice][k]);
+ oscfreqlo[nvoice][k] = speed - floor(speed);
+ }
+}
+
+/*
+ * Computes the frequency of an modullator oscillator
+ */
+void ADnote::setfreqFM(int nvoice, float in_freq)
+{
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float freq = fabs(in_freq) * unison_freq_rap[nvoice][k];
+ float speed = freq * synth->oscilsize_f / synth->samplerate_f;
+ if(speed > synth->samplerate_f)
+ speed = synth->samplerate_f;
+
+ F2I(speed, oscfreqhiFM[nvoice][k]);
+ oscfreqloFM[nvoice][k] = speed - floor(speed);
+ }
+}
+
+/*
+ * Get Voice base frequency
+ */
+float ADnote::getvoicebasefreq(int nvoice) const
+{
+ float detune = NoteVoicePar[nvoice].Detune / 100.0f
+ + NoteVoicePar[nvoice].FineDetune / 100.0f
+ * ctl->bandwidth.relbw * bandwidthDetuneMultiplier
+ + NoteGlobalPar.Detune / 100.0f;
+
+ if(NoteVoicePar[nvoice].fixedfreq == 0)
+ return this->basefreq * powf(2, detune / 12.0f);
+ else { //the fixed freq is enabled
+ float fixedfreq = 440.0f;
+ int fixedfreqET = NoteVoicePar[nvoice].fixedfreqET;
+ if(fixedfreqET != 0) { //if the frequency varies according the keyboard note
+ float tmp =
+ (midinote
+ - 69.0f) / 12.0f
+ * (powf(2.0f, (fixedfreqET - 1) / 63.0f) - 1.0f);
+ if(fixedfreqET <= 64)
+ fixedfreq *= powf(2.0f, tmp);
+ else
+ fixedfreq *= powf(3.0f, tmp);
+ }
+ return fixedfreq * powf(2.0f, detune / 12.0f);
+ }
+}
+
+/*
+ * Get Voice's Modullator base frequency
+ */
+float ADnote::getFMvoicebasefreq(int nvoice) const
+{
+ float detune = NoteVoicePar[nvoice].FMDetune / 100.0f;
+ return getvoicebasefreq(nvoice) * powf(2, detune / 12.0f);
+}
+
+/*
+ * Computes all the parameters for each tick
+ */
+void ADnote::computecurrentparameters()
+{
+ int nvoice;
+ float voicefreq, voicepitch, filterpitch, filterfreq, FMfreq,
+ FMrelativepitch, globalpitch, globalfilterpitch;
+ globalpitch = 0.01f * (NoteGlobalPar.FreqEnvelope->envout()
+ + NoteGlobalPar.FreqLfo->lfoout()
+ * ctl->modwheel.relmod);
+ globaloldamplitude = globalnewamplitude;
+ globalnewamplitude = NoteGlobalPar.Volume
+ * NoteGlobalPar.AmpEnvelope->envout_dB()
+ * NoteGlobalPar.AmpLfo->amplfoout();
+
+ globalfilterpitch = NoteGlobalPar.FilterEnvelope->envout()
+ + NoteGlobalPar.FilterLfo->lfoout()
+ + NoteGlobalPar.FilterCenterPitch;
+
+ float tmpfilterfreq = globalfilterpitch + ctl->filtercutoff.relfreq
+ + NoteGlobalPar.FilterFreqTracking;
+
+ tmpfilterfreq = Filter::getrealfreq(tmpfilterfreq);
+
+ float globalfilterq = NoteGlobalPar.FilterQ * ctl->filterq.relq;
+ NoteGlobalPar.GlobalFilterL->setfreq_and_q(tmpfilterfreq, globalfilterq);
+ if(stereo != 0)
+ NoteGlobalPar.GlobalFilterR->setfreq_and_q(tmpfilterfreq, globalfilterq);
+
+ //compute the portamento, if it is used by this note
+ float portamentofreqrap = 1.0f;
+ if(portamento != 0) { //this voice use portamento
+ portamentofreqrap = ctl->portamento.freqrap;
+ if(ctl->portamento.used == 0) //the portamento has finished
+ portamento = 0; //this note is no longer "portamented"
+ }
+
+ //compute parameters for all voices
+ for(nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ if(NoteVoicePar[nvoice].Enabled != ON)
+ continue;
+ NoteVoicePar[nvoice].DelayTicks -= 1;
+ if(NoteVoicePar[nvoice].DelayTicks > 0)
+ continue;
+
+ compute_unison_freq_rap(nvoice);
+
+ /*******************/
+ /* Voice Amplitude */
+ /*******************/
+ oldamplitude[nvoice] = newamplitude[nvoice];
+ newamplitude[nvoice] = 1.0f;
+
+ if(NoteVoicePar[nvoice].AmpEnvelope != NULL)
+ newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpEnvelope->envout_dB();
+
+ if(NoteVoicePar[nvoice].AmpLfo != NULL)
+ newamplitude[nvoice] *= NoteVoicePar[nvoice].AmpLfo->amplfoout();
+
+ /****************/
+ /* Voice Filter */
+ /****************/
+ if(NoteVoicePar[nvoice].VoiceFilterL != NULL) {
+ filterpitch = NoteVoicePar[nvoice].FilterCenterPitch;
+
+ if(NoteVoicePar[nvoice].FilterEnvelope != NULL)
+ filterpitch += NoteVoicePar[nvoice].FilterEnvelope->envout();
+
+ if(NoteVoicePar[nvoice].FilterLfo != NULL)
+ filterpitch += NoteVoicePar[nvoice].FilterLfo->lfoout();
+
+ filterfreq = filterpitch + NoteVoicePar[nvoice].FilterFreqTracking;
+ filterfreq = Filter::getrealfreq(filterfreq);
+
+ NoteVoicePar[nvoice].VoiceFilterL->setfreq(filterfreq);
+ if(stereo && NoteVoicePar[nvoice].VoiceFilterR)
+ NoteVoicePar[nvoice].VoiceFilterR->setfreq(filterfreq);
+ }
+
+ if(NoteVoicePar[nvoice].noisetype == 0) { //compute only if the voice isn't noise
+ /*******************/
+ /* Voice Frequency */
+ /*******************/
+ voicepitch = 0.0f;
+ if(NoteVoicePar[nvoice].FreqLfo != NULL)
+ voicepitch += NoteVoicePar[nvoice].FreqLfo->lfoout() / 100.0f
+ * ctl->bandwidth.relbw;
+
+ if(NoteVoicePar[nvoice].FreqEnvelope != NULL)
+ voicepitch += NoteVoicePar[nvoice].FreqEnvelope->envout()
+ / 100.0f;
+ voicefreq = getvoicebasefreq(nvoice)
+ * powf(2, (voicepitch + globalpitch) / 12.0f); //Hz frequency
+ voicefreq *= ctl->pitchwheel.relfreq; //change the frequency by the controller
+ setfreq(nvoice, voicefreq * portamentofreqrap);
+
+ /***************/
+ /* Modulator */
+ /***************/
+ if(NoteVoicePar[nvoice].FMEnabled != NONE) {
+ FMrelativepitch = NoteVoicePar[nvoice].FMDetune / 100.0f;
+ if(NoteVoicePar[nvoice].FMFreqEnvelope != NULL)
+ FMrelativepitch +=
+ NoteVoicePar[nvoice].FMFreqEnvelope->envout() / 100;
+ FMfreq =
+ powf(2.0f, FMrelativepitch
+ / 12.0f) * voicefreq * portamentofreqrap;
+ setfreqFM(nvoice, FMfreq);
+
+ FMoldamplitude[nvoice] = FMnewamplitude[nvoice];
+ FMnewamplitude[nvoice] = NoteVoicePar[nvoice].FMVolume
+ * ctl->fmamp.relamp;
+ if(NoteVoicePar[nvoice].FMAmpEnvelope != NULL)
+ FMnewamplitude[nvoice] *=
+ NoteVoicePar[nvoice].FMAmpEnvelope->envout_dB();
+ }
+ }
+ }
+ time += synth->buffersize_f / synth->samplerate_f;
+}
+
+
+/*
+ * Fadein in a way that removes clicks but keep sound "punchy"
+ */
+inline void ADnote::fadein(float *smps) const
+{
+ int zerocrossings = 0;
+ for(int i = 1; i < synth->buffersize; ++i)
+ if((smps[i - 1] < 0.0f) && (smps[i] > 0.0f))
+ zerocrossings++; //this is only the possitive crossings
+
+ float tmp = (synth->buffersize_f - 1.0f) / (zerocrossings + 1) / 3.0f;
+ if(tmp < 8.0f)
+ tmp = 8.0f;
+
+ int n;
+ F2I(tmp, n); //how many samples is the fade-in
+ if(n > synth->buffersize)
+ n = synth->buffersize;
+ for(int i = 0; i < n; ++i) { //fade-in
+ float tmp = 0.5f - cosf((float)i / (float) n * PI) * 0.5f;
+ smps[i] *= tmp;
+ }
+}
+
+/*
+ * Computes the Oscillator (Without Modulation) - LinearInterpolation
+ */
+
+/* As the code here is a bit odd due to optimization, here is what happens
+ * First the current possition and frequency are retrieved from the running
+ * state. These are broken up into high and low portions to indicate how many
+ * samples are skipped in one step and how many fractional samples are skipped.
+ * Outside of this method the fractional samples are just handled with floating
+ * point code, but that's a bit slower than it needs to be. In this code the low
+ * portions are known to exist between 0.0 and 1.0 and it is known that they are
+ * stored in single precision floating point IEEE numbers. This implies that
+ * a maximum of 24 bits are significant. The below code does your standard
+ * linear interpolation that you'll see throughout this codebase, but by
+ * sticking to integers for tracking the overflow of the low portion, around 15%
+ * of the execution time was shaved off in the ADnote test.
+ */
+inline void ADnote::ComputeVoiceOscillator_LinearInterpolation(int nvoice)
+{
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ int poshi = oscposhi[nvoice][k];
+ int poslo = oscposlo[nvoice][k] * (1<<24);
+ int freqhi = oscfreqhi[nvoice][k];
+ int freqlo = oscfreqlo[nvoice][k] * (1<<24);
+ float *smps = NoteVoicePar[nvoice].OscilSmp;
+ float *tw = tmpwave_unison[k];
+ assert(oscfreqlo[nvoice][k] < 1.0f);
+ for(int i = 0; i < synth->buffersize; ++i) {
+ tw[i] = (smps[poshi] * ((1<<24) - poslo) + smps[poshi + 1] * poslo)/(1.0f*(1<<24));
+ poslo += freqlo;
+ poshi += freqhi + (poslo>>24);
+ poslo &= 0xffffff;
+ poshi &= synth->oscilsize - 1;
+ }
+ oscposhi[nvoice][k] = poshi;
+ oscposlo[nvoice][k] = poslo/(1.0f*(1<<24));
+ }
+}
+
+
+
+/*
+ * Computes the Oscillator (Without Modulation) - CubicInterpolation
+ *
+ The differences from the Linear are to little to deserve to be used. This is because I am using a large synth->oscilsize (>512)
+inline void ADnote::ComputeVoiceOscillator_CubicInterpolation(int nvoice){
+ int i,poshi;
+ float poslo;
+
+ poshi=oscposhi[nvoice];
+ poslo=oscposlo[nvoice];
+ float *smps=NoteVoicePar[nvoice].OscilSmp;
+ float xm1,x0,x1,x2,a,b,c;
+ for (i=0;i<synth->buffersize;i++){
+ xm1=smps[poshi];
+ x0=smps[poshi+1];
+ x1=smps[poshi+2];
+ x2=smps[poshi+3];
+ a=(3.0f * (x0-x1) - xm1 + x2) / 2.0f;
+ b = 2.0f*x1 + xm1 - (5.0f*x0 + x2) / 2.0f;
+ c = (x1 - xm1) / 2.0f;
+ tmpwave[i]=(((a * poslo) + b) * poslo + c) * poslo + x0;
+ printf("a\n");
+ //tmpwave[i]=smps[poshi]*(1.0f-poslo)+smps[poshi+1]*poslo;
+ poslo+=oscfreqlo[nvoice];
+ if (poslo>=1.0f) {
+ poslo-=1.0f;
+ poshi++;
+ };
+ poshi+=oscfreqhi[nvoice];
+ poshi&=synth->oscilsize-1;
+ };
+ oscposhi[nvoice]=poshi;
+ oscposlo[nvoice]=poslo;
+};
+*/
+/*
+ * Computes the Oscillator (Morphing)
+ */
+inline void ADnote::ComputeVoiceOscillatorMorph(int nvoice)
+{
+ int i;
+ float amp;
+ ComputeVoiceOscillator_LinearInterpolation(nvoice);
+ if(FMnewamplitude[nvoice] > 1.0f)
+ FMnewamplitude[nvoice] = 1.0f;
+ if(FMoldamplitude[nvoice] > 1.0f)
+ FMoldamplitude[nvoice] = 1.0f;
+
+ if(NoteVoicePar[nvoice].FMVoice >= 0) {
+ //if I use VoiceOut[] as modullator
+ int FMVoice = NoteVoicePar[nvoice].FMVoice;
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ for(i = 0; i < synth->buffersize; ++i) {
+ amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
+ FMnewamplitude[nvoice],
+ i,
+ synth->buffersize);
+ tw[i] = tw[i]
+ * (1.0f
+ - amp) + amp * NoteVoicePar[FMVoice].VoiceOut[i];
+ }
+ }
+ }
+ else
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ int poshiFM = oscposhiFM[nvoice][k];
+ float posloFM = oscposloFM[nvoice][k];
+ int freqhiFM = oscfreqhiFM[nvoice][k];
+ float freqloFM = oscfreqloFM[nvoice][k];
+ float *tw = tmpwave_unison[k];
+
+ for(i = 0; i < synth->buffersize; ++i) {
+ amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
+ FMnewamplitude[nvoice],
+ i,
+ synth->buffersize);
+ tw[i] = tw[i] * (1.0f - amp) + amp
+ * (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1 - posloFM)
+ + NoteVoicePar[nvoice].FMSmp[poshiFM + 1] * posloFM);
+ posloFM += freqloFM;
+ if(posloFM >= 1.0f) {
+ posloFM -= 1.0f;
+ poshiFM++;
+ }
+ poshiFM += freqhiFM;
+ poshiFM &= synth->oscilsize - 1;
+ }
+ oscposhiFM[nvoice][k] = poshiFM;
+ oscposloFM[nvoice][k] = posloFM;
+ }
+}
+
+/*
+ * Computes the Oscillator (Ring Modulation)
+ */
+inline void ADnote::ComputeVoiceOscillatorRingModulation(int nvoice)
+{
+ int i;
+ float amp;
+ ComputeVoiceOscillator_LinearInterpolation(nvoice);
+ if(FMnewamplitude[nvoice] > 1.0f)
+ FMnewamplitude[nvoice] = 1.0f;
+ if(FMoldamplitude[nvoice] > 1.0f)
+ FMoldamplitude[nvoice] = 1.0f;
+ if(NoteVoicePar[nvoice].FMVoice >= 0)
+ // if I use VoiceOut[] as modullator
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ for(i = 0; i < synth->buffersize; ++i) {
+ amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
+ FMnewamplitude[nvoice],
+ i,
+ synth->buffersize);
+ int FMVoice = NoteVoicePar[nvoice].FMVoice;
+ tw[i] *= (1.0f - amp) + amp * NoteVoicePar[FMVoice].VoiceOut[i];
+ }
+ }
+ else
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ int poshiFM = oscposhiFM[nvoice][k];
+ float posloFM = oscposloFM[nvoice][k];
+ int freqhiFM = oscfreqhiFM[nvoice][k];
+ float freqloFM = oscfreqloFM[nvoice][k];
+ float *tw = tmpwave_unison[k];
+
+ for(i = 0; i < synth->buffersize; ++i) {
+ amp = INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
+ FMnewamplitude[nvoice],
+ i,
+ synth->buffersize);
+ tw[i] *= (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1.0f - posloFM)
+ + NoteVoicePar[nvoice].FMSmp[poshiFM
+ + 1] * posloFM) * amp
+ + (1.0f - amp);
+ posloFM += freqloFM;
+ if(posloFM >= 1.0f) {
+ posloFM -= 1.0f;
+ poshiFM++;
+ }
+ poshiFM += freqhiFM;
+ poshiFM &= synth->oscilsize - 1;
+ }
+ oscposhiFM[nvoice][k] = poshiFM;
+ oscposloFM[nvoice][k] = posloFM;
+ }
+}
+
+
+
+/*
+ * Computes the Oscillator (Phase Modulation or Frequency Modulation)
+ */
+inline void ADnote::ComputeVoiceOscillatorFrequencyModulation(int nvoice,
+ int FMmode)
+{
+ int carposhi = 0;
+ int i, FMmodfreqhi = 0;
+ float FMmodfreqlo = 0, carposlo = 0;
+
+ if(NoteVoicePar[nvoice].FMVoice >= 0)
+ //if I use VoiceOut[] as modulator
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ memcpy(tw, NoteVoicePar[NoteVoicePar[nvoice].FMVoice].VoiceOut,
+ synth->bufferbytes);
+ }
+ else
+ //Compute the modulator and store it in tmpwave_unison[][]
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ int poshiFM = oscposhiFM[nvoice][k];
+ float posloFM = oscposloFM[nvoice][k];
+ int freqhiFM = oscfreqhiFM[nvoice][k];
+ float freqloFM = oscfreqloFM[nvoice][k];
+ float *tw = tmpwave_unison[k];
+
+ for(i = 0; i < synth->buffersize; ++i) {
+ tw[i] =
+ (NoteVoicePar[nvoice].FMSmp[poshiFM] * (1.0f - posloFM)
+ + NoteVoicePar[nvoice].FMSmp[poshiFM + 1] * posloFM);
+ posloFM += freqloFM;
+ if(posloFM >= 1.0f) {
+ posloFM = fmod(posloFM, 1.0f);
+ poshiFM++;
+ }
+ poshiFM += freqhiFM;
+ poshiFM &= synth->oscilsize - 1;
+ }
+ oscposhiFM[nvoice][k] = poshiFM;
+ oscposloFM[nvoice][k] = posloFM;
+ }
+ // Amplitude interpolation
+ if(ABOVE_AMPLITUDE_THRESHOLD(FMoldamplitude[nvoice],
+ FMnewamplitude[nvoice]))
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ for(i = 0; i < synth->buffersize; ++i)
+ tw[i] *= INTERPOLATE_AMPLITUDE(FMoldamplitude[nvoice],
+ FMnewamplitude[nvoice],
+ i,
+ synth->buffersize);
+ }
+ else
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ for(i = 0; i < synth->buffersize; ++i)
+ tw[i] *= FMnewamplitude[nvoice];
+ }
+
+
+ //normalize: makes all sample-rates, oscil_sizes to produce same sound
+ if(FMmode != 0) { //Frequency modulation
+ float normalize = synth->oscilsize_f / 262144.0f * 44100.0f
+ / synth->samplerate_f;
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ float fmold = FMoldsmp[nvoice][k];
+ for(i = 0; i < synth->buffersize; ++i) {
+ fmold = fmod(fmold + tw[i] * normalize, synth->oscilsize);
+ tw[i] = fmold;
+ }
+ FMoldsmp[nvoice][k] = fmold;
+ }
+ }
+ else { //Phase modulation
+ float normalize = synth->oscilsize_f / 262144.0f;
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ for(i = 0; i < synth->buffersize; ++i)
+ tw[i] *= normalize;
+ }
+ }
+
+ //do the modulation
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ int poshi = oscposhi[nvoice][k];
+ float poslo = oscposlo[nvoice][k];
+ int freqhi = oscfreqhi[nvoice][k];
+ float freqlo = oscfreqlo[nvoice][k];
+
+ for(i = 0; i < synth->buffersize; ++i) {
+ F2I(tw[i], FMmodfreqhi);
+ FMmodfreqlo = fmod(tw[i] + 0.0000000001f, 1.0f);
+ if(FMmodfreqhi < 0)
+ FMmodfreqlo++;
+
+ //carrier
+ carposhi = poshi + FMmodfreqhi;
+ carposlo = poslo + FMmodfreqlo;
+
+ if(carposlo >= 1.0f) {
+ carposhi++;
+ carposlo = fmod(carposlo, 1.0f);
+ }
+ carposhi &= (synth->oscilsize - 1);
+
+ tw[i] = NoteVoicePar[nvoice].OscilSmp[carposhi]
+ * (1.0f - carposlo)
+ + NoteVoicePar[nvoice].OscilSmp[carposhi
+ + 1] * carposlo;
+
+ poslo += freqlo;
+ if(poslo >= 1.0f) {
+ poslo = fmod(poslo, 1.0f);
+ poshi++;
+ }
+
+ poshi += freqhi;
+ poshi &= synth->oscilsize - 1;
+ }
+ oscposhi[nvoice][k] = poshi;
+ oscposlo[nvoice][k] = poslo;
+ }
+}
+
+
+/*Calculeaza Oscilatorul cu PITCH MODULATION*/
+inline void ADnote::ComputeVoiceOscillatorPitchModulation(int /*nvoice*/)
+{
+//TODO
+}
+
+/*
+ * Computes the Noise
+ */
+inline void ADnote::ComputeVoiceNoise(int nvoice)
+{
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ for(int i = 0; i < synth->buffersize; ++i)
+ tw[i] = RND * 2.0f - 1.0f;
+ }
+}
+
+
+
+/*
+ * Compute the ADnote samples
+ * Returns 0 if the note is finished
+ */
+int ADnote::noteout(float *outl, float *outr)
+{
+ memcpy(outl, denormalkillbuf, synth->bufferbytes);
+ memcpy(outr, denormalkillbuf, synth->bufferbytes);
+
+ if(NoteEnabled == OFF)
+ return 0;
+
+ memset(bypassl, 0, synth->bufferbytes);
+ memset(bypassr, 0, synth->bufferbytes);
+ computecurrentparameters();
+
+ for(unsigned nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
+ if((NoteVoicePar[nvoice].Enabled != ON)
+ || (NoteVoicePar[nvoice].DelayTicks > 0))
+ continue;
+ if(NoteVoicePar[nvoice].noisetype == 0) //voice mode=sound
+ switch(NoteVoicePar[nvoice].FMEnabled) {
+ case MORPH:
+ ComputeVoiceOscillatorMorph(nvoice);
+ break;
+ case RING_MOD:
+ ComputeVoiceOscillatorRingModulation(nvoice);
+ break;
+ case PHASE_MOD:
+ ComputeVoiceOscillatorFrequencyModulation(nvoice, 0);
+ break;
+ case FREQ_MOD:
+ ComputeVoiceOscillatorFrequencyModulation(nvoice, 1);
+ break;
+ //case PITCH_MOD:ComputeVoiceOscillatorPitchModulation(nvoice);break;
+ default:
+ ComputeVoiceOscillator_LinearInterpolation(nvoice);
+ //if (config.cfg.Interpolation) ComputeVoiceOscillator_CubicInterpolation(nvoice);
+ }
+ else
+ ComputeVoiceNoise(nvoice);
+ // Voice Processing
+
+
+ //mix subvoices into voice
+ memset(tmpwavel, 0, synth->bufferbytes);
+ if(stereo)
+ memset(tmpwaver, 0, synth->bufferbytes);
+ for(int k = 0; k < unison_size[nvoice]; ++k) {
+ float *tw = tmpwave_unison[k];
+ if(stereo) {
+ float stereo_pos = 0;
+ if(unison_size[nvoice] > 1)
+ stereo_pos = k
+ / (float)(unison_size[nvoice]
+ - 1) * 2.0f - 1.0f;
+ float stereo_spread = unison_stereo_spread[nvoice] * 2.0f; //between 0 and 2.0f
+ if(stereo_spread > 1.0f) {
+ float stereo_pos_1 = (stereo_pos >= 0.0f) ? 1.0f : -1.0f;
+ stereo_pos =
+ (2.0f
+ - stereo_spread) * stereo_pos
+ + (stereo_spread - 1.0f) * stereo_pos_1;
+ }
+ else
+ stereo_pos *= stereo_spread;
+
+ if(unison_size[nvoice] == 1)
+ stereo_pos = 0.0f;
+ float panning = (stereo_pos + 1.0f) * 0.5f;
+
+
+ float lvol = (1.0f - panning) * 2.0f;
+ if(lvol > 1.0f)
+ lvol = 1.0f;
+
+ float rvol = panning * 2.0f;
+ if(rvol > 1.0f)
+ rvol = 1.0f;
+
+ if(unison_invert_phase[nvoice][k]) {
+ lvol = -lvol;
+ rvol = -rvol;
+ }
+
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmpwavel[i] += tw[i] * lvol;
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmpwaver[i] += tw[i] * rvol;
+ }
+ else
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmpwavel[i] += tw[i];
+ }
+
+
+ float unison_amplitude = 1.0f / sqrt(unison_size[nvoice]); //reduce the amplitude for large unison sizes
+ // Amplitude
+ float oldam = oldamplitude[nvoice] * unison_amplitude;
+ float newam = newamplitude[nvoice] * unison_amplitude;
+
+ if(ABOVE_AMPLITUDE_THRESHOLD(oldam, newam)) {
+ int rest = synth->buffersize;
+ //test if the amplitude if raising and the difference is high
+ if((newam > oldam) && ((newam - oldam) > 0.25f)) {
+ rest = 10;
+ if(rest > synth->buffersize)
+ rest = synth->buffersize;
+ for(int i = 0; i < synth->buffersize - rest; ++i)
+ tmpwavel[i] *= oldam;
+ if(stereo)
+ for(int i = 0; i < synth->buffersize - rest; ++i)
+ tmpwaver[i] *= oldam;
+ }
+ // Amplitude interpolation
+ for(int i = 0; i < rest; ++i) {
+ float amp = INTERPOLATE_AMPLITUDE(oldam, newam, i, rest);
+ tmpwavel[i + (synth->buffersize - rest)] *= amp;
+ if(stereo)
+ tmpwaver[i + (synth->buffersize - rest)] *= amp;
+ }
+ }
+ else {
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmpwavel[i] *= newam;
+ if(stereo)
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmpwaver[i] *= newam;
+ }
+
+ // Fade in
+ if(firsttick[nvoice] != 0) {
+ fadein(&tmpwavel[0]);
+ if(stereo)
+ fadein(&tmpwaver[0]);
+ firsttick[nvoice] = 0;
+ }
+
+
+ // Filter
+ if(NoteVoicePar[nvoice].VoiceFilterL != NULL)
+ NoteVoicePar[nvoice].VoiceFilterL->filterout(&tmpwavel[0]);
+ if((stereo) && (NoteVoicePar[nvoice].VoiceFilterR != NULL))
+ NoteVoicePar[nvoice].VoiceFilterR->filterout(&tmpwaver[0]);
+
+ //check if the amplitude envelope is finished, if yes, the voice will be fadeout
+ if(NoteVoicePar[nvoice].AmpEnvelope != NULL)
+ if(NoteVoicePar[nvoice].AmpEnvelope->finished() != 0) {
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmpwavel[i] *= 1.0f - (float)i / synth->buffersize_f;
+ if(stereo)
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmpwaver[i] *= 1.0f - (float)i / synth->buffersize_f;
+ }
+ //the voice is killed later
+
+
+ // Put the ADnote samples in VoiceOut (without appling Global volume, because I wish to use this voice as a modullator)
+ if(NoteVoicePar[nvoice].VoiceOut != NULL) {
+ if(stereo)
+ for(int i = 0; i < synth->buffersize; ++i)
+ NoteVoicePar[nvoice].VoiceOut[i] = tmpwavel[i]
+ + tmpwaver[i];
+ else //mono
+ for(int i = 0; i < synth->buffersize; ++i)
+ NoteVoicePar[nvoice].VoiceOut[i] = tmpwavel[i];
+ }
+
+
+ // Add the voice that do not bypass the filter to out
+ if(NoteVoicePar[nvoice].filterbypass == 0) { //no bypass
+ if(stereo)
+ for(int i = 0; i < synth->buffersize; ++i) { //stereo
+ outl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume
+ * NoteVoicePar[nvoice].Panning * 2.0f;
+ outr[i] += tmpwaver[i] * NoteVoicePar[nvoice].Volume
+ * (1.0f - NoteVoicePar[nvoice].Panning) * 2.0f;
+ }
+ else
+ for(int i = 0; i < synth->buffersize; ++i) //mono
+ outl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume;
+ }
+ else { //bypass the filter
+ if(stereo)
+ for(int i = 0; i < synth->buffersize; ++i) { //stereo
+ bypassl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume
+ * NoteVoicePar[nvoice].Panning * 2.0f;
+ bypassr[i] += tmpwaver[i] * NoteVoicePar[nvoice].Volume
+ * (1.0f
+ - NoteVoicePar[nvoice].Panning) * 2.0f;
+ }
+ else
+ for(int i = 0; i < synth->buffersize; ++i) //mono
+ bypassl[i] += tmpwavel[i] * NoteVoicePar[nvoice].Volume;
+ }
+ // chech if there is necesary to proces the voice longer (if the Amplitude envelope isn't finished)
+ if(NoteVoicePar[nvoice].AmpEnvelope != NULL)
+ if(NoteVoicePar[nvoice].AmpEnvelope->finished() != 0)
+ KillVoice(nvoice);
+ }
+
+
+ //Processing Global parameters
+ NoteGlobalPar.GlobalFilterL->filterout(&outl[0]);
+
+ if(stereo == 0) { //set the right channel=left channel
+ memcpy(outr, outl, synth->bufferbytes);
+ memcpy(bypassr, bypassl, synth->bufferbytes);
+ }
+ else
+ NoteGlobalPar.GlobalFilterR->filterout(&outr[0]);
+
+ for(int i = 0; i < synth->buffersize; ++i) {
+ outl[i] += bypassl[i];
+ outr[i] += bypassr[i];
+ }
+
+ if(ABOVE_AMPLITUDE_THRESHOLD(globaloldamplitude, globalnewamplitude))
+ // Amplitude Interpolation
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float tmpvol = INTERPOLATE_AMPLITUDE(globaloldamplitude,
+ globalnewamplitude,
+ i,
+ synth->buffersize);
+ outl[i] *= tmpvol * NoteGlobalPar.Panning;
+ outr[i] *= tmpvol * (1.0f - NoteGlobalPar.Panning);
+ }
+ else
+ for(int i = 0; i < synth->buffersize; ++i) {
+ outl[i] *= globalnewamplitude * NoteGlobalPar.Panning;
+ outr[i] *= globalnewamplitude * (1.0f - NoteGlobalPar.Panning);
+ }
+
+ //Apply the punch
+ if(NoteGlobalPar.Punch.Enabled != 0)
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float punchamp = NoteGlobalPar.Punch.initialvalue
+ * NoteGlobalPar.Punch.t + 1.0f;
+ outl[i] *= punchamp;
+ outr[i] *= punchamp;
+ NoteGlobalPar.Punch.t -= NoteGlobalPar.Punch.dt;
+ if(NoteGlobalPar.Punch.t < 0.0f) {
+ NoteGlobalPar.Punch.Enabled = 0;
+ break;
+ }
+ }
+
+
+ // Apply legato-specific sound signal modifications
+ legato.apply(*this, outl, outr);
+
+
+ // Check if the global amplitude is finished.
+ // If it does, disable the note
+ if(NoteGlobalPar.AmpEnvelope->finished()) {
+ for(int i = 0; i < synth->buffersize; ++i) { //fade-out
+ float tmp = 1.0f - (float)i / synth->buffersize_f;
+ outl[i] *= tmp;
+ outr[i] *= tmp;
+ }
+ KillNote();
+ }
+ return 1;
+}
+
+
+/*
+ * Relase the key (NoteOff)
+ */
+void ADnote::relasekey()
+{
+ for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice)
+ NoteVoicePar[nvoice].releasekey();
+ NoteGlobalPar.FreqEnvelope->relasekey();
+ NoteGlobalPar.FilterEnvelope->relasekey();
+ NoteGlobalPar.AmpEnvelope->relasekey();
+}
+
+/*
+ * Check if the note is finished
+ */
+int ADnote::finished() const
+{
+ if(NoteEnabled == ON)
+ return 0;
+ else
+ return 1;
+}
+
+void ADnote::Voice::releasekey()
+{
+ if(!Enabled)
+ return;
+ if(AmpEnvelope)
+ AmpEnvelope->relasekey();
+ if(FreqEnvelope)
+ FreqEnvelope->relasekey();
+ if(FilterEnvelope)
+ FilterEnvelope->relasekey();
+ if(FMFreqEnvelope)
+ FMFreqEnvelope->relasekey();
+ if(FMAmpEnvelope)
+ FMAmpEnvelope->relasekey();
+}
+
+template<class T>
+static inline void nullify(T &t) {delete t; t = NULL; }
+template<class T>
+static inline void arrayNullify(T &t) {delete [] t; t = NULL; }
+
+void ADnote::Voice::kill()
+{
+ arrayNullify(OscilSmp);
+ nullify(FreqEnvelope);
+ nullify(FreqLfo);
+ nullify(AmpEnvelope);
+ nullify(AmpLfo);
+ nullify(VoiceFilterL);
+ nullify(VoiceFilterR);
+ nullify(FilterEnvelope);
+ nullify(FilterLfo);
+ nullify(FMFreqEnvelope);
+ nullify(FMAmpEnvelope);
+
+ if((FMEnabled != NONE) && (FMVoice < 0)) {
+ delete[] FMSmp;
+ FMSmp = NULL;
+ }
+
+ if(VoiceOut)
+ memset(VoiceOut, 0, synth->bufferbytes);
+ //do not delete, yet: perhaps is used by another voice
+
+ Enabled = OFF;
+}
+
+void ADnote::Global::kill()
+{
+ nullify(FreqEnvelope);
+ nullify(FreqLfo);
+ nullify(AmpEnvelope);
+ nullify(AmpLfo);
+ nullify(GlobalFilterL);
+ nullify(GlobalFilterR);
+ nullify(FilterEnvelope);
+ nullify(FilterLfo);
+}
+
+void ADnote::Global::initparameters(const ADnoteGlobalParam ¶m,
+ float basefreq, float velocity,
+ bool stereo)
+{
+ FreqEnvelope = new Envelope(param.FreqEnvelope, basefreq);
+ FreqLfo = new LFO(param.FreqLfo, basefreq);
+
+ AmpEnvelope = new Envelope(param.AmpEnvelope, basefreq);
+ AmpLfo = new LFO(param.AmpLfo, basefreq);
+
+ Volume = 4.0f * powf(0.1f, 3.0f * (1.0f - param.PVolume / 96.0f)) //-60 dB .. 0 dB
+ * VelF(velocity, param.PAmpVelocityScaleFunction); //sensing
+
+ GlobalFilterL = Filter::generate(param.GlobalFilter);
+ if(stereo)
+ GlobalFilterR = Filter::generate(param.GlobalFilter);
+ else
+ GlobalFilterR = NULL;
+
+ FilterEnvelope = new Envelope(param.FilterEnvelope, basefreq);
+ FilterLfo = new LFO(param.FilterLfo, basefreq);
+ FilterQ = param.GlobalFilter->getq();
+ FilterFreqTracking = param.GlobalFilter->getfreqtracking(basefreq);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h
new file mode 100644
index 0000000..53420ee
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h
@@ -0,0 +1,325 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ ADnote.h - The "additive" synthesizer
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef AD_NOTE_H
+#define AD_NOTE_H
+
+#include "SynthNote.h"
+#include "Envelope.h"
+#include "LFO.h"
+#include "../Params/ADnoteParameters.h"
+#include "../Params/Controller.h"
+
+//Globals
+
+/**FM amplitude tune*/
+#define FM_AMP_MULTIPLIER 14.71280603f
+
+#define OSCIL_SMP_EXTRA_SAMPLES 5
+
+/**The "additive" synthesizer*/
+class ADnote:public SynthNote
+{
+ public:
+ /**Constructor.
+ * @param pars Note Parameters
+ * @param ctl_ Pointer to system Controller
+ * @param freq Base frequency for note
+ * @param velocity Velocity of note
+ * @param portamento_ 1 if the note has portamento
+ * @param midinote_ The midi number of the note
+ * @param besilent Start silent note if true*/
+ ADnote(ADnoteParameters *pars, Controller *ctl_, float freq,
+ float velocity, int portamento_, int midinote_,
+ bool besilent);
+ /**Destructor*/
+ ~ADnote();
+
+ /**Alters the playing note for legato effect*/
+ void legatonote(float freq, float velocity, int portamento_,
+ int midinote_, bool externcall);
+
+ int noteout(float *outl, float *outr);
+ void relasekey();
+ int finished() const;
+ private:
+
+ /**Changes the frequency of an oscillator.
+ * @param nvoice voice to run computations on
+ * @param in_freq new frequency*/
+ void setfreq(int nvoice, float in_freq);
+ /**Set the frequency of the modulator oscillator*/
+ void setfreqFM(int nvoice, float in_freq);
+ /**Computes relative frequency for unison and unison's vibratto.
+ * Note: Must be called before setfreq* functions.*/
+ void compute_unison_freq_rap(int nvoice);
+ /**Compute parameters for next tick*/
+ void computecurrentparameters();
+ /**Initializes All Parameters*/
+ void initparameters();
+ /**Deallocate/Cleanup given voice*/
+ void KillVoice(int nvoice);
+ /**Deallocate Note resources and voice resources*/
+ void KillNote();
+ /**Get the Voice's base frequency*/
+ inline float getvoicebasefreq(int nvoice) const;
+ /**Get modulator's base frequency*/
+ inline float getFMvoicebasefreq(int nvoice) const;
+ /**Compute the Oscillator's samples.
+ * Affects tmpwave_unison and updates oscposhi/oscposlo*/
+ inline void ComputeVoiceOscillator_LinearInterpolation(int nvoice);
+ /**Compute the Oscillator's samples.
+ * Affects tmpwave_unison and updates oscposhi/oscposlo
+ * @todo remove this declaration if it is commented out*/
+ inline void ComputeVoiceOscillator_CubicInterpolation(int nvoice);
+ /**Computes the Oscillator samples with morphing.
+ * updates tmpwave_unison*/
+ inline void ComputeVoiceOscillatorMorph(int nvoice);
+ /**Computes the Ring Modulated Oscillator.*/
+ inline void ComputeVoiceOscillatorRingModulation(int nvoice);
+ /**Computes the Frequency Modulated Oscillator.
+ * @param FMmode modulation type 0=Phase 1=Frequency*/
+ inline void ComputeVoiceOscillatorFrequencyModulation(int nvoice,
+ int FMmode);
+ // inline void ComputeVoiceOscillatorFrequencyModulation(int nvoice);
+ /**TODO*/
+ inline void ComputeVoiceOscillatorPitchModulation(int nvoice);
+
+ /**Generate Noise Samples for Voice*/
+ inline void ComputeVoiceNoise(int nvoice);
+
+ /**Fadein in a way that removes clicks but keep sound "punchy"*/
+ inline void fadein(float *smps) const;
+
+
+ //GLOBALS
+ ADnoteParameters *partparams;
+ unsigned char stereo; //if the note is stereo (allows note Panning)
+ int midinote;
+ float velocity, basefreq;
+
+ ONOFFTYPE NoteEnabled;
+ Controller *ctl;
+
+ /*****************************************************************/
+ /* GLOBAL PARAMETERS */
+ /*****************************************************************/
+
+ struct Global {
+ void kill();
+ void initparameters(const ADnoteGlobalParam ¶m,
+ float basefreq, float velocity,
+ bool stereo);
+ /******************************************
+ * FREQUENCY GLOBAL PARAMETERS *
+ ******************************************/
+ float Detune; //cents
+
+ Envelope *FreqEnvelope;
+ LFO *FreqLfo;
+
+ /********************************************
+ * AMPLITUDE GLOBAL PARAMETERS *
+ ********************************************/
+ float Volume; // [ 0 .. 1 ]
+
+ float Panning; // [ 0 .. 1 ]
+
+ Envelope *AmpEnvelope;
+ LFO *AmpLfo;
+
+ struct {
+ int Enabled;
+ float initialvalue, dt, t;
+ } Punch;
+
+ /******************************************
+ * FILTER GLOBAL PARAMETERS *
+ ******************************************/
+ class Filter * GlobalFilterL, *GlobalFilterR;
+
+ float FilterCenterPitch; //octaves
+ float FilterQ;
+ float FilterFreqTracking;
+
+ Envelope *FilterEnvelope;
+
+ LFO *FilterLfo;
+ } NoteGlobalPar;
+
+
+
+ /***********************************************************/
+ /* VOICE PARAMETERS */
+ /***********************************************************/
+ struct Voice {
+ void releasekey();
+ void kill();
+ /* If the voice is enabled */
+ ONOFFTYPE Enabled;
+
+ /* Voice Type (sound/noise)*/
+ int noisetype;
+
+ /* Filter Bypass */
+ int filterbypass;
+
+ /* Delay (ticks) */
+ int DelayTicks;
+
+ /* Waveform of the Voice */
+ float *OscilSmp;
+
+ /************************************
+ * FREQUENCY PARAMETERS *
+ ************************************/
+ int fixedfreq; //if the frequency is fixed to 440 Hz
+ int fixedfreqET; //if the "fixed" frequency varies according to the note (ET)
+
+ // cents = basefreq*VoiceDetune
+ float Detune, FineDetune;
+
+ Envelope *FreqEnvelope;
+ LFO *FreqLfo;
+
+
+ /***************************
+ * AMPLITUDE PARAMETERS *
+ ***************************/
+
+ /* Panning 0.0f=left, 0.5f - center, 1.0f = right */
+ float Panning;
+ float Volume; // [-1.0f .. 1.0f]
+
+ Envelope *AmpEnvelope;
+ LFO *AmpLfo;
+
+ /*************************
+ * FILTER PARAMETERS *
+ *************************/
+
+ class Filter * VoiceFilterL;
+ class Filter * VoiceFilterR;
+
+ float FilterCenterPitch; /* Filter center Pitch*/
+ float FilterFreqTracking;
+
+ Envelope *FilterEnvelope;
+ LFO *FilterLfo;
+
+
+ /****************************
+ * MODULLATOR PARAMETERS *
+ ****************************/
+
+ FMTYPE FMEnabled;
+
+ int FMVoice;
+
+ // Voice Output used by other voices if use this as modullator
+ float *VoiceOut;
+
+ /* Wave of the Voice */
+ float *FMSmp;
+
+ float FMVolume;
+ float FMDetune; //in cents
+
+ Envelope *FMFreqEnvelope;
+ Envelope *FMAmpEnvelope;
+ } NoteVoicePar[NUM_VOICES];
+
+
+ /********************************************************/
+ /* INTERNAL VALUES OF THE NOTE AND OF THE VOICES */
+ /********************************************************/
+
+ //time from the start of the note
+ float time;
+
+ //the size of unison for a single voice
+ int unison_size[NUM_VOICES];
+
+ //the stereo spread of the unison subvoices (0.0f=mono,1.0f=max)
+ float unison_stereo_spread[NUM_VOICES];
+
+ //fractional part (skip)
+ float *oscposlo[NUM_VOICES], *oscfreqlo[NUM_VOICES];
+
+ //integer part (skip)
+ int *oscposhi[NUM_VOICES], *oscfreqhi[NUM_VOICES];
+
+ //fractional part (skip) of the Modullator
+ float *oscposloFM[NUM_VOICES], *oscfreqloFM[NUM_VOICES];
+
+ //the unison base_value
+ float *unison_base_freq_rap[NUM_VOICES];
+
+ //how the unison subvoice's frequency is changed (1.0f for no change)
+ float *unison_freq_rap[NUM_VOICES];
+
+ //which subvoice has phase inverted
+ bool *unison_invert_phase[NUM_VOICES];
+
+ //unison vibratto
+ struct {
+ float amplitude; //amplitude which be added to unison_freq_rap
+ float *step; //value which increments the position
+ float *position; //between -1.0f and 1.0f
+ } unison_vibratto[NUM_VOICES];
+
+
+ //integer part (skip) of the Modullator
+ unsigned int *oscposhiFM[NUM_VOICES], *oscfreqhiFM[NUM_VOICES];
+
+ //used to compute and interpolate the amplitudes of voices and modullators
+ float oldamplitude[NUM_VOICES],
+ newamplitude[NUM_VOICES],
+ FMoldamplitude[NUM_VOICES],
+ FMnewamplitude[NUM_VOICES];
+
+ //used by Frequency Modulation (for integration)
+ float *FMoldsmp[NUM_VOICES];
+
+ //temporary buffer
+ float *tmpwavel;
+ float *tmpwaver;
+ int max_unison;
+ float **tmpwave_unison;
+
+ //Filter bypass samples
+ float *bypassl, *bypassr;
+
+ //interpolate the amplitudes
+ float globaloldamplitude, globalnewamplitude;
+
+ //1 - if it is the fitst tick (used to fade in the sound)
+ char firsttick[NUM_VOICES];
+
+ //1 if the note has portamento
+ int portamento;
+
+ //how the fine detunes are made bigger or smaller
+ float bandwidthDetuneMultiplier;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/CMakeLists.txt
new file mode 100644
index 0000000..ce45fa5
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/CMakeLists.txt
@@ -0,0 +1,11 @@
+set(zynaddsubfx_synth_SRCS
+ Synth/SynthNote.cpp
+ Synth/ADnote.cpp
+ Synth/Envelope.cpp
+ Synth/LFO.cpp
+ Synth/OscilGen.cpp
+ Synth/PADnote.cpp
+ Synth/Resonance.cpp
+ Synth/SUBnote.cpp
+ PARENT_SCOPE
+)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp
new file mode 100644
index 0000000..41bb804
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp
@@ -0,0 +1,206 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Envelope.cpp - Envelope implementation
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include "Envelope.h"
+#include "../Params/EnvelopeParams.h"
+
+Envelope::Envelope(EnvelopeParams *envpars, float basefreq)
+{
+ int i;
+ envpoints = envpars->Penvpoints;
+ if(envpoints > MAX_ENVELOPE_POINTS)
+ envpoints = MAX_ENVELOPE_POINTS;
+ envsustain = (envpars->Penvsustain == 0) ? -1 : envpars->Penvsustain;
+ forcedrelase = envpars->Pforcedrelease;
+ envstretch = powf(440.0f / basefreq, envpars->Penvstretch / 64.0f);
+ linearenvelope = envpars->Plinearenvelope;
+
+ if(envpars->Pfreemode == 0)
+ envpars->converttofree();
+
+ float bufferdt = synth->buffersize_f / synth->samplerate_f;
+
+ int mode = envpars->Envmode;
+
+ //for amplitude envelopes
+ if((mode == 1) && (linearenvelope == 0))
+ mode = 2; //change to log envelope
+ if((mode == 2) && (linearenvelope != 0))
+ mode = 1; //change to linear
+
+ for(i = 0; i < MAX_ENVELOPE_POINTS; ++i) {
+ float tmp = envpars->getdt(i) / 1000.0f * envstretch;
+ if(tmp > bufferdt)
+ envdt[i] = bufferdt / tmp;
+ else
+ envdt[i] = 2.0f; //any value larger than 1
+
+ switch(mode) {
+ case 2:
+ envval[i] = (1.0f - envpars->Penvval[i] / 127.0f) * -40;
+ break;
+ case 3:
+ envval[i] =
+ (powf(2, 6.0f
+ * fabs(envpars->Penvval[i]
+ - 64.0f) / 64.0f) - 1.0f) * 100.0f;
+ if(envpars->Penvval[i] < 64)
+ envval[i] = -envval[i];
+ break;
+ case 4:
+ envval[i] = (envpars->Penvval[i] - 64.0f) / 64.0f * 6.0f; //6 octaves (filtru)
+ break;
+ case 5:
+ envval[i] = (envpars->Penvval[i] - 64.0f) / 64.0f * 10;
+ break;
+ default:
+ envval[i] = envpars->Penvval[i] / 127.0f;
+ }
+ }
+
+ envdt[0] = 1.0f;
+
+ currentpoint = 1; //the envelope starts from 1
+ keyreleased = false;
+ t = 0.0f;
+ envfinish = false;
+ inct = envdt[1];
+ envoutval = 0.0f;
+}
+
+Envelope::~Envelope()
+{}
+
+
+/*
+ * Relase the key (note envelope)
+ */
+void Envelope::relasekey()
+{
+ if(keyreleased)
+ return;
+ keyreleased = true;
+ if(forcedrelase != 0)
+ t = 0.0f;
+}
+
+/*
+ * Envelope Output
+ */
+float Envelope::envout()
+{
+ float out;
+
+ if(envfinish) { //if the envelope is finished
+ envoutval = envval[envpoints - 1];
+ return envoutval;
+ }
+ if((currentpoint == envsustain + 1) && !keyreleased) { //if it is sustaining now
+ envoutval = envval[envsustain];
+ return envoutval;
+ }
+
+ if(keyreleased && (forcedrelase != 0)) { //do the forced release
+ int tmp = (envsustain < 0) ? (envpoints - 1) : (envsustain + 1); //if there is no sustain point, use the last point for release
+
+ if(envdt[tmp] < 0.00000001f)
+ out = envval[tmp];
+ else
+ out = envoutval + (envval[tmp] - envoutval) * t;
+ t += envdt[tmp] * envstretch;
+
+ if(t >= 1.0f) {
+ currentpoint = envsustain + 2;
+ forcedrelase = 0;
+ t = 0.0f;
+ inct = envdt[currentpoint];
+ if((currentpoint >= envpoints) || (envsustain < 0))
+ envfinish = true;
+ }
+ return out;
+ }
+ if(inct >= 1.0f)
+ out = envval[currentpoint];
+ else
+ out = envval[currentpoint - 1]
+ + (envval[currentpoint] - envval[currentpoint - 1]) * t;
+
+ t += inct;
+ if(t >= 1.0f) {
+ if(currentpoint >= envpoints - 1)
+ envfinish = true;
+ else
+ currentpoint++;
+ t = 0.0f;
+ inct = envdt[currentpoint];
+ }
+
+ envoutval = out;
+ return out;
+}
+
+inline float Envelope::env_dB2rap(float db) {
+ return (powf(10.0f, db / 20.0f) - 0.01)/.99f;
+}
+
+inline float Envelope::env_rap2dB(float rap) {
+ return 20.0f * log10f(rap * 0.99f + 0.01);
+}
+
+/*
+ * Envelope Output (dB)
+ */
+float Envelope::envout_dB()
+{
+ float out;
+ if(linearenvelope != 0)
+ return envout();
+
+ if((currentpoint == 1) && (!keyreleased || (forcedrelase == 0))) { //first point is always lineary interpolated
+ float v1 = env_dB2rap(envval[0]);
+ float v2 = env_dB2rap(envval[1]);
+ out = v1 + (v2 - v1) * t;
+
+ t += inct;
+ if(t >= 1.0f) {
+ t = 0.0f;
+ inct = envdt[2];
+ currentpoint++;
+ out = v2;
+ }
+
+ if(out > 0.001f)
+ envoutval = env_rap2dB(out);
+ else
+ envoutval = MIN_ENVELOPE_DB;
+ }
+ else
+ out = env_dB2rap(envout());
+
+ return out;
+}
+
+bool Envelope::finished() const
+{
+ return envfinish;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h
new file mode 100644
index 0000000..8c6b082
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h
@@ -0,0 +1,64 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Envelope.h - Envelope implementation
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef ENVELOPE_H
+#define ENVELOPE_H
+
+#include "../globals.h"
+#include "../Params/EnvelopeParams.h"
+
+/**Implementation of a general Envelope*/
+class Envelope
+{
+ public:
+
+ /**Constructor*/
+ Envelope(class EnvelopeParams *envpars, float basefreq);
+ /**Destructor*/
+ ~Envelope();
+ void relasekey();
+ float envout();
+ float envout_dB();
+ /**Determines the status of the Envelope
+ * @return returns 1 if the envelope is finished*/
+ bool finished() const;
+ private:
+ float env_rap2dB(float rap);
+ float env_dB2rap(float db);
+ int envpoints;
+ int envsustain; //"-1" means disabled
+ float envdt[MAX_ENVELOPE_POINTS]; //millisecons
+ float envval[MAX_ENVELOPE_POINTS]; // [0.0f .. 1.0f]
+ float envstretch;
+ int linearenvelope;
+
+ int currentpoint; //current envelope point (starts from 1)
+ int forcedrelase;
+ bool keyreleased; //if the key was released
+ bool envfinish;
+ float t; // the time from the last point
+ float inct; // the time increment
+ float envoutval; //used to do the forced release
+};
+
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp
new file mode 100644
index 0000000..af9d10d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp
@@ -0,0 +1,183 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ LFO.cpp - LFO implementation
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "LFO.h"
+#include "../Misc/Util.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+LFO::LFO(LFOParams *lfopars, float basefreq)
+{
+ if(lfopars->Pstretch == 0)
+ lfopars->Pstretch = 1;
+ float lfostretch = powf(basefreq / 440.0f,
+ (lfopars->Pstretch - 64.0f) / 63.0f); //max 2x/octave
+
+ float lfofreq =
+ (powf(2, lfopars->Pfreq * 10.0f) - 1.0f) / 12.0f * lfostretch;
+ incx = fabs(lfofreq) * synth->buffersize_f / synth->samplerate_f;
+
+ if(lfopars->Pcontinous == 0) {
+ if(lfopars->Pstartphase == 0)
+ x = RND;
+ else
+ x = fmod((lfopars->Pstartphase - 64.0f) / 127.0f + 1.0f, 1.0f);
+ }
+ else {
+ float tmp = fmod(lfopars->time * incx, 1.0f);
+ x = fmod((lfopars->Pstartphase - 64.0f) / 127.0f + 1.0f + tmp, 1.0f);
+ }
+
+ //Limit the Frequency(or else...)
+ if(incx > 0.49999999f)
+ incx = 0.499999999f;
+
+
+ lfornd = lfopars->Prandomness / 127.0f;
+ if(lfornd < 0.0f)
+ lfornd = 0.0f;
+ else
+ if(lfornd > 1.0f)
+ lfornd = 1.0f;
+
+// lfofreqrnd=powf(lfopars->Pfreqrand/127.0f,2.0f)*2.0f*4.0f;
+ lfofreqrnd = powf(lfopars->Pfreqrand / 127.0f, 2.0f) * 4.0f;
+
+ switch(lfopars->fel) {
+ case 1:
+ lfointensity = lfopars->Pintensity / 127.0f;
+ break;
+ case 2:
+ lfointensity = lfopars->Pintensity / 127.0f * 4.0f;
+ break; //in octave
+ default:
+ lfointensity = powf(2, lfopars->Pintensity / 127.0f * 11.0f) - 1.0f; //in centi
+ x -= 0.25f; //chance the starting phase
+ break;
+ }
+
+ amp1 = (1 - lfornd) + lfornd * RND;
+ amp2 = (1 - lfornd) + lfornd * RND;
+ lfotype = lfopars->PLFOtype;
+ lfodelay = lfopars->Pdelay / 127.0f * 4.0f; //0..4 sec
+ incrnd = nextincrnd = 1.0f;
+ freqrndenabled = (lfopars->Pfreqrand != 0);
+ computenextincrnd();
+ computenextincrnd(); //twice because I want incrnd & nextincrnd to be random
+}
+
+LFO::~LFO()
+{}
+
+/*
+ * LFO out
+ */
+float LFO::lfoout()
+{
+ float out;
+ switch(lfotype) {
+ case 1: //LFO_TRIANGLE
+ if((x >= 0.0f) && (x < 0.25f))
+ out = 4.0f * x;
+ else
+ if((x > 0.25f) && (x < 0.75f))
+ out = 2 - 4 * x;
+ else
+ out = 4.0f * x - 4.0f;
+ break;
+ case 2: //LFO_SQUARE
+ if(x < 0.5f)
+ out = -1;
+ else
+ out = 1;
+ break;
+ case 3: //LFO_RAMPUP
+ out = (x - 0.5f) * 2.0f;
+ break;
+ case 4: //LFO_RAMPDOWN
+ out = (0.5f - x) * 2.0f;
+ break;
+ case 5: //LFO_EXP_DOWN 1
+ out = powf(0.05f, x) * 2.0f - 1.0f;
+ break;
+ case 6: //LFO_EXP_DOWN 2
+ out = powf(0.001f, x) * 2.0f - 1.0f;
+ break;
+ default:
+ out = cosf(x * 2.0f * PI); //LFO_SINE
+ }
+
+
+ if((lfotype == 0) || (lfotype == 1))
+ out *= lfointensity * (amp1 + x * (amp2 - amp1));
+ else
+ out *= lfointensity * amp2;
+ if(lfodelay < 0.00001f) {
+ if(freqrndenabled == 0)
+ x += incx;
+ else {
+ float tmp = (incrnd * (1.0f - x) + nextincrnd * x);
+ if(tmp > 1.0f)
+ tmp = 1.0f;
+ else
+ if(tmp < 0.0f)
+ tmp = 0.0f;
+ x += incx * tmp;
+ }
+ if(x >= 1) {
+ x = fmod(x, 1.0f);
+ amp1 = amp2;
+ amp2 = (1 - lfornd) + lfornd * RND;
+
+ computenextincrnd();
+ }
+ }
+ else
+ lfodelay -= synth->buffersize_f / synth->samplerate_f;
+ return out;
+}
+
+/*
+ * LFO out (for amplitude)
+ */
+float LFO::amplfoout()
+{
+ float out;
+ out = 1.0f - lfointensity + lfoout();
+ if(out < -1.0f)
+ out = -1.0f;
+ else
+ if(out > 1.0f)
+ out = 1.0f;
+ return out;
+}
+
+
+void LFO::computenextincrnd()
+{
+ if(freqrndenabled == 0)
+ return;
+ incrnd = nextincrnd;
+ nextincrnd = powf(0.5f, lfofreqrnd) + RND * (powf(2.0f, lfofreqrnd) - 1.0f);
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h
new file mode 100644
index 0000000..2b933a3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h
@@ -0,0 +1,58 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ LFO.h - LFO implementation
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef LFO_H
+#define LFO_H
+
+#include "../globals.h"
+#include "../Params/LFOParams.h"
+
+/**Class for creating Low Frequency Ocillators*/
+class LFO
+{
+ public:
+ /**Constructor
+ *
+ * @param lfopars pointer to a LFOParams object
+ * @param basefreq base frequency of LFO
+ */
+ LFO(LFOParams *lfopars, float basefreq);
+ /**Deconstructor*/
+ ~LFO();
+ float lfoout();
+ float amplfoout();
+ private:
+ float x;
+ float incx, incrnd, nextincrnd;
+ float amp1, amp2; // used for randomness
+ float lfointensity;
+ float lfornd, lfofreqrnd;
+ float lfodelay;
+ /**\todo see if an enum would be better here*/
+ char lfotype;
+ int freqrndenabled;
+
+
+ void computenextincrnd();
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp
new file mode 100644
index 0000000..d51957e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp
@@ -0,0 +1,1503 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ OscilGen.cpp - Waveform generator for ADnote
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "OscilGen.h"
+#include "../Misc/WaveShapeSmps.h"
+
+#include <cassert>
+#include <stdlib.h>
+#include <math.h>
+#include <stdio.h>
+
+
+//operations on FFTfreqs
+inline void clearAll(fft_t *freqs)
+{
+ memset(freqs, 0, synth->oscilsize / 2 * sizeof(fft_t));
+}
+
+inline void clearDC(fft_t *freqs)
+{
+ freqs[0] = fft_t(0.0f, 0.0f);
+}
+
+//return magnitude squared
+inline float normal(const fft_t *freqs, off_t x)
+{
+ return norm(freqs[x]);
+}
+
+//return magnitude
+inline float abs(const fft_t *freqs, off_t x)
+{
+ return abs(freqs[x]);
+}
+
+//return angle aka phase from a sine (not cosine wave)
+inline float arg(const fft_t *freqs, off_t x)
+{
+ const fft_t tmp(freqs[x].imag(), freqs[x].real());
+ return arg(tmp);
+}
+
+/**
+ * Take frequency spectrum and ensure values are normalized based upon
+ * magnitude to 0<=x<=1
+ */
+void normalize(fft_t *freqs)
+{
+ float normMax = 0.0f;
+ for(int i = 0; i < synth->oscilsize / 2; ++i) {
+ //magnitude squared
+ const float norm = normal(freqs, i);
+ if(normMax < norm)
+ normMax = norm;
+ }
+
+ const float max = sqrt(normMax);
+ if(max < 1e-8) //data is all ~zero, do not amplify noise
+ return;
+
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ freqs[i] /= max;
+}
+
+//Full RMS normalize
+void rmsNormalize(fft_t *freqs)
+{
+ float sum = 0.0f;
+ for(int i = 1; i < synth->oscilsize / 2; ++i)
+ sum += normal(freqs, i);
+
+ if(sum < 0.000001f)
+ return; //data is all ~zero, do not amplify noise
+
+ const float gain = 1.0f / sqrt(sum);
+
+ for(int i = 1; i < synth->oscilsize / 2; ++i)
+ freqs[i] *= gain;
+}
+
+#define DIFF(par) (old ## par != P ## par)
+
+OscilGen::OscilGen(FFTwrapper *fft_, Resonance *res_):Presets()
+{
+ assert(fft_);
+
+ setpresettype("Poscilgen");
+ fft = fft_;
+ res = res_;
+
+
+ tmpsmps = new float[synth->oscilsize];
+ outoscilFFTfreqs = new fft_t[synth->oscilsize / 2];
+ oscilFFTfreqs = new fft_t[synth->oscilsize / 2];
+ basefuncFFTfreqs = new fft_t[synth->oscilsize / 2];
+
+ randseed = 1;
+ ADvsPAD = false;
+
+ defaults();
+}
+
+OscilGen::~OscilGen()
+{
+ delete[] tmpsmps;
+ delete[] outoscilFFTfreqs;
+ delete[] basefuncFFTfreqs;
+ delete[] oscilFFTfreqs;
+}
+
+
+void OscilGen::defaults()
+{
+ oldbasefunc = 0;
+ oldbasepar = 64;
+ oldhmagtype = 0;
+ oldwaveshapingfunction = 0;
+ oldwaveshaping = 64;
+ oldbasefuncmodulation = 0;
+ oldharmonicshift = 0;
+ oldbasefuncmodulationpar1 = 0;
+ oldbasefuncmodulationpar2 = 0;
+ oldbasefuncmodulationpar3 = 0;
+ oldmodulation = 0;
+ oldmodulationpar1 = 0;
+ oldmodulationpar2 = 0;
+ oldmodulationpar3 = 0;
+
+ for(int i = 0; i < MAX_AD_HARMONICS; ++i) {
+ hmag[i] = 0.0f;
+ hphase[i] = 0.0f;
+ Phmag[i] = 64;
+ Phphase[i] = 64;
+ }
+ Phmag[0] = 127;
+ Phmagtype = 0;
+ if(ADvsPAD)
+ Prand = 127; //max phase randomness (usefull if the oscil will be imported to a ADsynth from a PADsynth
+ else
+ Prand = 64; //no randomness
+
+ Pcurrentbasefunc = 0;
+ Pbasefuncpar = 64;
+
+ Pbasefuncmodulation = 0;
+ Pbasefuncmodulationpar1 = 64;
+ Pbasefuncmodulationpar2 = 64;
+ Pbasefuncmodulationpar3 = 32;
+
+ Pmodulation = 0;
+ Pmodulationpar1 = 64;
+ Pmodulationpar2 = 64;
+ Pmodulationpar3 = 32;
+
+ Pwaveshapingfunction = 0;
+ Pwaveshaping = 64;
+ Pfiltertype = 0;
+ Pfilterpar1 = 64;
+ Pfilterpar2 = 64;
+ Pfilterbeforews = 0;
+ Psatype = 0;
+ Psapar = 64;
+
+ Pamprandpower = 64;
+ Pamprandtype = 0;
+
+ Pharmonicshift = 0;
+ Pharmonicshiftfirst = 0;
+
+ Padaptiveharmonics = 0;
+ Padaptiveharmonicspower = 100;
+ Padaptiveharmonicsbasefreq = 128;
+ Padaptiveharmonicspar = 50;
+
+ clearAll(oscilFFTfreqs);
+ clearAll(basefuncFFTfreqs);
+ oscilprepared = 0;
+ oldfilterpars = 0;
+ oldsapars = 0;
+ prepare();
+}
+
+void OscilGen::convert2sine()
+{
+ float mag[MAX_AD_HARMONICS], phase[MAX_AD_HARMONICS];
+ float oscil[synth->oscilsize];
+ fft_t *freqs = new fft_t[synth->oscilsize / 2];
+
+ get(oscil, -1.0f);
+ FFTwrapper *fft = new FFTwrapper(synth->oscilsize);
+ fft->smps2freqs(oscil, freqs);
+ delete (fft);
+
+ normalize(freqs);
+
+ mag[0] = 0;
+ phase[0] = 0;
+ for(int i = 0; i < MAX_AD_HARMONICS; ++i) {
+ mag[i] = abs(freqs, i + 1);
+ phase[i] = arg(freqs, i + 1);
+ }
+
+ defaults();
+
+ for(int i = 0; i < MAX_AD_HARMONICS - 1; ++i) {
+ float newmag = mag[i];
+ float newphase = phase[i];
+
+ Phmag[i] = (int) ((newmag) * 64.0f) + 64;
+
+ Phphase[i] = 64 - (int) (64.0f * newphase / PI);
+ if(Phphase[i] > 127)
+ Phphase[i] = 127;
+
+ if(Phmag[i] == 64)
+ Phphase[i] = 64;
+ }
+ delete[] freqs;
+ prepare();
+}
+
+/*
+ * Get the base function
+ */
+void OscilGen::getbasefunction(float *smps)
+{
+ int i;
+ float par = (Pbasefuncpar + 0.5f) / 128.0f;
+ if(Pbasefuncpar == 64)
+ par = 0.5f;
+
+ float basefuncmodulationpar1 = Pbasefuncmodulationpar1 / 127.0f,
+ basefuncmodulationpar2 = Pbasefuncmodulationpar2 / 127.0f,
+ basefuncmodulationpar3 = Pbasefuncmodulationpar3 / 127.0f;
+
+ switch(Pbasefuncmodulation) {
+ case 1:
+ basefuncmodulationpar1 =
+ (powf(2, basefuncmodulationpar1 * 5.0f) - 1.0f) / 10.0f;
+ basefuncmodulationpar3 =
+ floor((powf(2, basefuncmodulationpar3 * 5.0f) - 1.0f));
+ if(basefuncmodulationpar3 < 0.9999f)
+ basefuncmodulationpar3 = -1.0f;
+ break;
+ case 2:
+ basefuncmodulationpar1 =
+ (powf(2, basefuncmodulationpar1 * 5.0f) - 1.0f) / 10.0f;
+ basefuncmodulationpar3 = 1.0f
+ + floor((powf(2, basefuncmodulationpar3
+ * 5.0f) - 1.0f));
+ break;
+ case 3:
+ basefuncmodulationpar1 =
+ (powf(2, basefuncmodulationpar1 * 7.0f) - 1.0f) / 10.0f;
+ basefuncmodulationpar3 = 0.01f
+ + (powf(2, basefuncmodulationpar3
+ * 16.0f) - 1.0f) / 10.0f;
+ break;
+ }
+
+ base_func func = getBaseFunction(Pcurrentbasefunc);
+
+ for(i = 0; i < synth->oscilsize; ++i) {
+ float t = i * 1.0f / synth->oscilsize;
+
+ switch(Pbasefuncmodulation) {
+ case 1:
+ t = t * basefuncmodulationpar3 + sinf(
+ (t
+ + basefuncmodulationpar2) * 2.0f
+ * PI) * basefuncmodulationpar1; //rev
+ break;
+ case 2:
+ t = t + sinf(
+ (t * basefuncmodulationpar3
+ + basefuncmodulationpar2) * 2.0f
+ * PI) * basefuncmodulationpar1; //sine
+ break;
+ case 3:
+ t = t + powf((1.0f - cosf(
+ (t
+ + basefuncmodulationpar2) * 2.0f
+ * PI)) * 0.5f,
+ basefuncmodulationpar3) * basefuncmodulationpar1; //power
+ break;
+ }
+
+ t = t - floor(t);
+
+ if(func)
+ smps[i] = func(t, par);
+ else
+ smps[i] = -sinf(2.0f * PI * i / synth->oscilsize);
+ }
+}
+
+
+/*
+ * Filter the oscillator
+ */
+void OscilGen::oscilfilter()
+{
+ if(Pfiltertype == 0)
+ return;
+
+ const float par = 1.0f - Pfilterpar1 / 128.0f;
+ const float par2 = Pfilterpar2 / 127.0f;
+ filter_func filter = getFilter(Pfiltertype);
+
+ for(int i = 1; i < synth->oscilsize / 2; ++i)
+ oscilFFTfreqs[i] *= filter(i, par, par2);
+
+ normalize(oscilFFTfreqs);
+}
+
+
+/*
+ * Change the base function
+ */
+void OscilGen::changebasefunction()
+{
+ if(Pcurrentbasefunc != 0) {
+ getbasefunction(tmpsmps);
+ fft->smps2freqs(tmpsmps, basefuncFFTfreqs);
+ clearDC(basefuncFFTfreqs);
+ }
+ else //in this case basefuncFFTfreqs are not used
+ clearAll(basefuncFFTfreqs);
+ oscilprepared = 0;
+ oldbasefunc = Pcurrentbasefunc;
+ oldbasepar = Pbasefuncpar;
+ oldbasefuncmodulation = Pbasefuncmodulation;
+ oldbasefuncmodulationpar1 = Pbasefuncmodulationpar1;
+ oldbasefuncmodulationpar2 = Pbasefuncmodulationpar2;
+ oldbasefuncmodulationpar3 = Pbasefuncmodulationpar3;
+}
+
+inline void normalize(float *smps, size_t N)
+{
+ //Find max
+ float max = 0.0f;
+ for(size_t i = 0; i < N; ++i)
+ if(max < fabs(smps[i]))
+ max = fabs(smps[i]);
+ if(max < 0.00001f)
+ max = 1.0f;
+
+ //Normalize to +-1
+ for(size_t i = 0; i < N; ++i)
+ smps[i] /= max;
+}
+
+/*
+ * Waveshape
+ */
+void OscilGen::waveshape()
+{
+ oldwaveshapingfunction = Pwaveshapingfunction;
+ oldwaveshaping = Pwaveshaping;
+ if(Pwaveshapingfunction == 0)
+ return;
+
+ clearDC(oscilFFTfreqs);
+ //reduce the amplitude of the freqs near the nyquist
+ for(int i = 1; i < synth->oscilsize / 8; ++i) {
+ float gain = i / (synth->oscilsize / 8.0f);
+ oscilFFTfreqs[synth->oscilsize / 2 - i] *= gain;
+ }
+ fft->freqs2smps(oscilFFTfreqs, tmpsmps);
+
+ //Normalize
+ normalize(tmpsmps, synth->oscilsize);
+
+ //Do the waveshaping
+ waveShapeSmps(synth->oscilsize, tmpsmps, Pwaveshapingfunction, Pwaveshaping);
+
+ fft->smps2freqs(tmpsmps, oscilFFTfreqs); //perform FFT
+}
+
+
+/*
+ * Do the Frequency Modulation of the Oscil
+ */
+void OscilGen::modulation()
+{
+ int i;
+
+ oldmodulation = Pmodulation;
+ oldmodulationpar1 = Pmodulationpar1;
+ oldmodulationpar2 = Pmodulationpar2;
+ oldmodulationpar3 = Pmodulationpar3;
+ if(Pmodulation == 0)
+ return;
+
+
+ float modulationpar1 = Pmodulationpar1 / 127.0f,
+ modulationpar2 = 0.5f - Pmodulationpar2 / 127.0f,
+ modulationpar3 = Pmodulationpar3 / 127.0f;
+
+ switch(Pmodulation) {
+ case 1:
+ modulationpar1 = (powf(2, modulationpar1 * 7.0f) - 1.0f) / 100.0f;
+ modulationpar3 = floor((powf(2, modulationpar3 * 5.0f) - 1.0f));
+ if(modulationpar3 < 0.9999f)
+ modulationpar3 = -1.0f;
+ break;
+ case 2:
+ modulationpar1 = (powf(2, modulationpar1 * 7.0f) - 1.0f) / 100.0f;
+ modulationpar3 = 1.0f
+ + floor((powf(2, modulationpar3 * 5.0f) - 1.0f));
+ break;
+ case 3:
+ modulationpar1 = (powf(2, modulationpar1 * 9.0f) - 1.0f) / 100.0f;
+ modulationpar3 = 0.01f
+ + (powf(2, modulationpar3 * 16.0f) - 1.0f) / 10.0f;
+ break;
+ }
+
+ clearDC(oscilFFTfreqs); //remove the DC
+ //reduce the amplitude of the freqs near the nyquist
+ for(i = 1; i < synth->oscilsize / 8; ++i) {
+ float tmp = i / (synth->oscilsize / 8.0f);
+ oscilFFTfreqs[synth->oscilsize / 2 - i] *= tmp;
+ }
+ fft->freqs2smps(oscilFFTfreqs, tmpsmps);
+ int extra_points = 2;
+ float *in = new float[synth->oscilsize + extra_points];
+
+ //Normalize
+ normalize(tmpsmps, synth->oscilsize);
+
+ for(i = 0; i < synth->oscilsize; ++i)
+ in[i] = tmpsmps[i];
+ for(i = 0; i < extra_points; ++i)
+ in[i + synth->oscilsize] = tmpsmps[i];
+
+ //Do the modulation
+ for(i = 0; i < synth->oscilsize; ++i) {
+ float t = i * 1.0f / synth->oscilsize;
+
+ switch(Pmodulation) {
+ case 1:
+ t = t * modulationpar3
+ + sinf((t + modulationpar2) * 2.0f * PI) * modulationpar1; //rev
+ break;
+ case 2:
+ t = t
+ + sinf((t * modulationpar3
+ + modulationpar2) * 2.0f * PI) * modulationpar1; //sine
+ break;
+ case 3:
+ t = t + powf((1.0f - cosf(
+ (t + modulationpar2) * 2.0f * PI)) * 0.5f,
+ modulationpar3) * modulationpar1; //power
+ break;
+ }
+
+ t = (t - floor(t)) * synth->oscilsize;
+
+ int poshi = (int) t;
+ float poslo = t - floor(t);
+
+ tmpsmps[i] = in[poshi] * (1.0f - poslo) + in[poshi + 1] * poslo;
+ }
+
+ delete [] in;
+ fft->smps2freqs(tmpsmps, oscilFFTfreqs); //perform FFT
+}
+
+
+/*
+ * Adjust the spectrum
+ */
+void OscilGen::spectrumadjust()
+{
+ if(Psatype == 0)
+ return;
+ float par = Psapar / 127.0f;
+ switch(Psatype) {
+ case 1:
+ par = 1.0f - par * 2.0f;
+ if(par >= 0.0f)
+ par = powf(5.0f, par);
+ else
+ par = powf(8.0f, par);
+ break;
+ case 2:
+ par = powf(10.0f, (1.0f - par) * 3.0f) * 0.001f;
+ break;
+ case 3:
+ par = powf(10.0f, (1.0f - par) * 3.0f) * 0.001f;
+ break;
+ }
+
+
+ normalize(oscilFFTfreqs);
+
+ for(int i = 0; i < synth->oscilsize / 2; ++i) {
+ float mag = abs(oscilFFTfreqs, i);
+ float phase = M_PI_2 - arg(oscilFFTfreqs, i);
+
+ switch(Psatype) {
+ case 1:
+ mag = powf(mag, par);
+ break;
+ case 2:
+ if(mag < par)
+ mag = 0.0f;
+ break;
+ case 3:
+ mag /= par;
+ if(mag > 1.0f)
+ mag = 1.0f;
+ break;
+ }
+ oscilFFTfreqs[i] = std::polar<fftw_real>(mag, phase);
+ }
+}
+
+void OscilGen::shiftharmonics()
+{
+ if(Pharmonicshift == 0)
+ return;
+
+ int harmonicshift = -Pharmonicshift;
+ fft_t h;
+
+ if(harmonicshift > 0)
+ for(int i = synth->oscilsize / 2 - 2; i >= 0; i--) {
+ int oldh = i - harmonicshift;
+ if(oldh < 0)
+ h = 0.0f;
+ else
+ h = oscilFFTfreqs[oldh + 1];
+ oscilFFTfreqs[i + 1] = h;
+ }
+ else
+ for(int i = 0; i < synth->oscilsize / 2 - 1; ++i) {
+ int oldh = i + abs(harmonicshift);
+ if(oldh >= (synth->oscilsize / 2 - 1))
+ h = 0.0f;
+ else {
+ h = oscilFFTfreqs[oldh + 1];
+ if(abs(h) < 0.000001f)
+ h = 0.0f;
+ }
+
+ oscilFFTfreqs[i + 1] = h;
+ }
+
+ clearDC(oscilFFTfreqs);
+}
+
+/*
+ * Prepare the Oscillator
+ */
+void OscilGen::prepare()
+{
+ if((oldbasepar != Pbasefuncpar) || (oldbasefunc != Pcurrentbasefunc)
+ || DIFF(basefuncmodulation) || DIFF(basefuncmodulationpar1)
+ || DIFF(basefuncmodulationpar2) || DIFF(basefuncmodulationpar3))
+ changebasefunction();
+
+ for(int i = 0; i < MAX_AD_HARMONICS; ++i)
+ hphase[i] = (Phphase[i] - 64.0f) / 64.0f * PI / (i + 1);
+
+ for(int i = 0; i < MAX_AD_HARMONICS; ++i) {
+ const float hmagnew = 1.0f - fabs(Phmag[i] / 64.0f - 1.0f);
+ switch(Phmagtype) {
+ case 1:
+ hmag[i] = expf(hmagnew * logf(0.01f));
+ break;
+ case 2:
+ hmag[i] = expf(hmagnew * logf(0.001f));
+ break;
+ case 3:
+ hmag[i] = expf(hmagnew * logf(0.0001f));
+ break;
+ case 4:
+ hmag[i] = expf(hmagnew * logf(0.00001f));
+ break;
+ default:
+ hmag[i] = 1.0f - hmagnew;
+ break;
+ }
+
+ if(Phmag[i] < 64)
+ hmag[i] = -hmag[i];
+ }
+
+ //remove the harmonics where Phmag[i]==64
+ for(int i = 0; i < MAX_AD_HARMONICS; ++i)
+ if(Phmag[i] == 64)
+ hmag[i] = 0.0f;
+
+
+ clearAll(oscilFFTfreqs);
+ if(Pcurrentbasefunc == 0) //the sine case
+ for(int i = 0; i < MAX_AD_HARMONICS - 1; ++i) {
+ oscilFFTfreqs[i + 1] =
+ std::complex<float>(-hmag[i] * sinf(hphase[i] * (i + 1)) / 2.0f,
+ hmag[i] * cosf(hphase[i] * (i + 1)) / 2.0f);
+ }
+ else
+ for(int j = 0; j < MAX_AD_HARMONICS; ++j) {
+ if(Phmag[j] == 64)
+ continue;
+ for(int i = 1; i < synth->oscilsize / 2; ++i) {
+ int k = i * (j + 1);
+ if(k >= synth->oscilsize / 2)
+ break;
+ oscilFFTfreqs[k] += basefuncFFTfreqs[i] * std::polar<fftw_real>(
+ hmag[j],
+ hphase[j] * k);
+ }
+ }
+
+ if(Pharmonicshiftfirst != 0)
+ shiftharmonics();
+
+ if(Pfilterbeforews == 0) {
+ waveshape();
+ oscilfilter();
+ }
+ else {
+ oscilfilter();
+ waveshape();
+ }
+
+ modulation();
+ spectrumadjust();
+ if(Pharmonicshiftfirst == 0)
+ shiftharmonics();
+
+ clearDC(oscilFFTfreqs);
+
+ oldhmagtype = Phmagtype;
+ oldharmonicshift = Pharmonicshift + Pharmonicshiftfirst * 256;
+
+ oscilprepared = 1;
+}
+
+void OscilGen::adaptiveharmonic(fft_t *f, float freq)
+{
+ if(Padaptiveharmonics == 0 /*||(freq<1.0f)*/)
+ return;
+ if(freq < 1.0f)
+ freq = 440.0f;
+
+ fft_t *inf = new fft_t[synth->oscilsize / 2];
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ inf[i] = f[i];
+ clearAll(f);
+ clearDC(inf);
+
+ float hc = 0.0f, hs = 0.0f;
+ float basefreq = 30.0f * powf(10.0f, Padaptiveharmonicsbasefreq / 128.0f);
+ float power = (Padaptiveharmonicspower + 1.0f) / 101.0f;
+
+ float rap = freq / basefreq;
+
+ rap = powf(rap, power);
+
+ bool down = false;
+ if(rap > 1.0f) {
+ rap = 1.0f / rap;
+ down = true;
+ }
+
+ for(int i = 0; i < synth->oscilsize / 2 - 2; ++i) {
+ float h = i * rap;
+ int high = (int)(i * rap);
+ float low = fmod(h, 1.0f);
+
+ if(high >= (synth->oscilsize / 2 - 2))
+ break;
+ else {
+ if(down) {
+ f[high] =
+ std::complex<float>(f[high].real() + inf[i].real() * (1.0f - low),
+ f[high].imag() + inf[i].imag() * (1.0f - low));
+
+ f[high + 1] = std::complex<float>(f[high + 1].real() + inf[i].real() * low,
+ f[high + 1].imag() + inf[i].imag() * low);
+ }
+ else {
+ hc = inf[high].real()
+ * (1.0f - low) + inf[high + 1].real() * low;
+ hs = inf[high].imag()
+ * (1.0f - low) + inf[high + 1].imag() * low;
+ }
+ if(fabs(hc) < 0.000001f)
+ hc = 0.0f;
+ if(fabs(hs) < 0.000001f)
+ hs = 0.0f;
+ }
+
+ if(!down) {
+ if(i == 0) { //corect the aplitude of the first harmonic
+ hc *= rap;
+ hs *= rap;
+ }
+ f[i] = fft_t(hc, hs);
+ }
+ }
+
+ f[1] += f[0];
+ clearDC(f);
+ delete[] inf;
+}
+
+void OscilGen::adaptiveharmonicpostprocess(fft_t *f, int size)
+{
+ if(Padaptiveharmonics <= 1)
+ return;
+ fft_t *inf = new fft_t[size];
+ float par = Padaptiveharmonicspar * 0.01f;
+ par = 1.0f - powf((1.0f - par), 1.5f);
+
+ for(int i = 0; i < size; ++i) {
+ inf[i] = f[i] * par;
+ f[i] *= (1.0f - par);
+ }
+
+
+ if(Padaptiveharmonics == 2) { //2n+1
+ for(int i = 0; i < size; ++i)
+ if((i % 2) == 0)
+ f[i] += inf[i]; //i=0 pt prima armonica,etc.
+ }
+ else { //celelalte moduri
+ int nh = (Padaptiveharmonics - 3) / 2 + 2;
+ int sub_vs_add = (Padaptiveharmonics - 3) % 2;
+ if(sub_vs_add == 0) {
+ for(int i = 0; i < size; ++i)
+ if(((i + 1) % nh) == 0)
+ f[i] += inf[i];
+ }
+ else
+ for(int i = 0; i < size / nh - 1; ++i)
+ f[(i + 1) * nh - 1] += inf[i];
+ }
+
+ delete [] inf;
+}
+
+void OscilGen::newrandseed(unsigned int randseed)
+{
+ this->randseed = randseed;
+}
+
+bool OscilGen::needPrepare(void)
+{
+ bool outdated = false;
+
+ //Check function parameters
+ if((oldbasepar != Pbasefuncpar) || (oldbasefunc != Pcurrentbasefunc)
+ || DIFF(hmagtype) || DIFF(waveshaping) || DIFF(waveshapingfunction))
+ outdated = true;
+
+ //Check filter parameters
+ if(oldfilterpars != Pfiltertype * 256 + Pfilterpar1 + Pfilterpar2 * 65536
+ + Pfilterbeforews * 16777216) {
+ outdated = true;
+ oldfilterpars = Pfiltertype * 256 + Pfilterpar1 + Pfilterpar2 * 65536
+ + Pfilterbeforews * 16777216;
+ }
+
+ //Check spectrum adjustments
+ if(oldsapars != Psatype * 256 + Psapar) {
+ outdated = true;
+ oldsapars = Psatype * 256 + Psapar;
+ }
+
+ //Check function modulation
+ if(DIFF(basefuncmodulation) || DIFF(basefuncmodulationpar1)
+ || DIFF(basefuncmodulationpar2) || DIFF(basefuncmodulationpar3))
+ outdated = true;
+
+ //Check overall modulation
+ if(DIFF(modulation) || DIFF(modulationpar1)
+ || DIFF(modulationpar2) || DIFF(modulationpar3))
+ outdated = true;
+
+ //Check harmonic shifts
+ if(oldharmonicshift != Pharmonicshift + Pharmonicshiftfirst * 256)
+ outdated = true;
+
+ return outdated == true || oscilprepared == false;
+}
+
+/*
+ * Get the oscillator function
+ */
+short int OscilGen::get(float *smps, float freqHz, int resonance)
+{
+ if(needPrepare())
+ prepare();
+
+ int outpos =
+ (int)((RND * 2.0f
+ - 1.0f) * synth->oscilsize_f * (Prand - 64.0f) / 64.0f);
+ outpos = (outpos + 2 * synth->oscilsize) % synth->oscilsize;
+
+
+ clearAll(outoscilFFTfreqs);
+
+ int nyquist = (int)(0.5f * synth->samplerate_f / fabs(freqHz)) + 2;
+ if(ADvsPAD)
+ nyquist = (int)(synth->oscilsize / 2);
+ if(nyquist > synth->oscilsize / 2)
+ nyquist = synth->oscilsize / 2;
+
+ //Process harmonics
+ {
+ int realnyquist = nyquist;
+
+ if(Padaptiveharmonics != 0)
+ nyquist = synth->oscilsize / 2;
+ for(int i = 1; i < nyquist - 1; ++i)
+ outoscilFFTfreqs[i] = oscilFFTfreqs[i];
+
+ adaptiveharmonic(outoscilFFTfreqs, freqHz);
+ adaptiveharmonicpostprocess(&outoscilFFTfreqs[1],
+ synth->oscilsize / 2 - 1);
+
+ nyquist = realnyquist;
+ }
+
+ if(Padaptiveharmonics) //do the antialiasing in the case of adaptive harmonics
+ for(int i = nyquist; i < synth->oscilsize / 2; ++i)
+ outoscilFFTfreqs[i] = fft_t(0.0f, 0.0f);
+
+ // Randomness (each harmonic), the block type is computed
+ // in ADnote by setting start position according to this setting
+ if((Prand > 64) && (freqHz >= 0.0f) && (!ADvsPAD)) {
+ const float rnd = PI * powf((Prand - 64.0f) / 64.0f, 2.0f);
+ for(int i = 1; i < nyquist - 1; ++i) //to Nyquist only for AntiAliasing
+ outoscilFFTfreqs[i] *=
+ std::polar<fftw_real>(1.0f, (float)(rnd * i * RND));
+ }
+
+ //Harmonic Amplitude Randomness
+ if((freqHz > 0.1f) && (!ADvsPAD)) {
+ unsigned int realrnd = prng();
+ sprng(randseed);
+ float power = Pamprandpower / 127.0f;
+ float normalize = 1.0f / (1.2f - power);
+ switch(Pamprandtype) {
+ case 1:
+ power = power * 2.0f - 0.5f;
+ power = powf(15.0f, power);
+ for(int i = 1; i < nyquist - 1; ++i)
+ outoscilFFTfreqs[i] *= powf(RND, power) * normalize;
+ break;
+ case 2:
+ power = power * 2.0f - 0.5f;
+ power = powf(15.0f, power) * 2.0f;
+ float rndfreq = 2 * PI * RND;
+ for(int i = 1; i < nyquist - 1; ++i)
+ outoscilFFTfreqs[i] *= powf(fabs(sinf(i * rndfreq)), power)
+ * normalize;
+ break;
+ }
+ sprng(realrnd + 1);
+ }
+
+ if((freqHz > 0.1f) && (resonance != 0))
+ res->applyres(nyquist - 1, outoscilFFTfreqs, freqHz);
+
+ rmsNormalize(outoscilFFTfreqs);
+
+ if((ADvsPAD) && (freqHz > 0.1f)) //in this case the smps will contain the freqs
+ for(int i = 1; i < synth->oscilsize / 2; ++i)
+ smps[i - 1] = abs(outoscilFFTfreqs, i);
+ else {
+ fft->freqs2smps(outoscilFFTfreqs, smps);
+ for(int i = 0; i < synth->oscilsize; ++i)
+ smps[i] *= 0.25f; //correct the amplitude
+ }
+
+ if(Prand < 64)
+ return outpos;
+ else
+ return 0;
+}
+
+
+/*
+ * Get the spectrum of the oscillator for the UI
+ */
+void OscilGen::getspectrum(int n, float *spc, int what)
+{
+ if(n > synth->oscilsize / 2)
+ n = synth->oscilsize / 2;
+
+ for(int i = 1; i < n; ++i) {
+ if(what == 0)
+ spc[i - 1] = abs(oscilFFTfreqs, i);
+ else {
+ if(Pcurrentbasefunc == 0)
+ spc[i - 1] = ((i == 1) ? (1.0f) : (0.0f));
+ else
+ spc[i - 1] = abs(basefuncFFTfreqs, i);
+ }
+ }
+
+ if(what == 0) {
+ for(int i = 0; i < n; ++i)
+ outoscilFFTfreqs[i] = fft_t(spc[i], spc[i]);
+ memset(outoscilFFTfreqs + n, 0,
+ (synth->oscilsize / 2 - n) * sizeof(fft_t));
+ adaptiveharmonic(outoscilFFTfreqs, 0.0f);
+ adaptiveharmonicpostprocess(outoscilFFTfreqs, n - 1);
+ for(int i = 0; i < n; ++i)
+ spc[i] = outoscilFFTfreqs[i].imag();
+ }
+}
+
+
+/*
+ * Convert the oscillator as base function
+ */
+void OscilGen::useasbase()
+{
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ basefuncFFTfreqs[i] = oscilFFTfreqs[i];
+
+ oldbasefunc = Pcurrentbasefunc = 127;
+ prepare();
+}
+
+
+/*
+ * Get the base function for UI
+ */
+void OscilGen::getcurrentbasefunction(float *smps)
+{
+ if(Pcurrentbasefunc != 0)
+ fft->freqs2smps(basefuncFFTfreqs, smps);
+ else
+ getbasefunction(smps); //the sine case
+}
+
+void OscilGen::add2XML(XMLwrapper *xml)
+{
+ xml->addpar("harmonic_mag_type", Phmagtype);
+
+ xml->addpar("base_function", Pcurrentbasefunc);
+ xml->addpar("base_function_par", Pbasefuncpar);
+ xml->addpar("base_function_modulation", Pbasefuncmodulation);
+ xml->addpar("base_function_modulation_par1", Pbasefuncmodulationpar1);
+ xml->addpar("base_function_modulation_par2", Pbasefuncmodulationpar2);
+ xml->addpar("base_function_modulation_par3", Pbasefuncmodulationpar3);
+
+ xml->addpar("modulation", Pmodulation);
+ xml->addpar("modulation_par1", Pmodulationpar1);
+ xml->addpar("modulation_par2", Pmodulationpar2);
+ xml->addpar("modulation_par3", Pmodulationpar3);
+
+ xml->addpar("wave_shaping", Pwaveshaping);
+ xml->addpar("wave_shaping_function", Pwaveshapingfunction);
+
+ xml->addpar("filter_type", Pfiltertype);
+ xml->addpar("filter_par1", Pfilterpar1);
+ xml->addpar("filter_par2", Pfilterpar2);
+ xml->addpar("filter_before_wave_shaping", Pfilterbeforews);
+
+ xml->addpar("spectrum_adjust_type", Psatype);
+ xml->addpar("spectrum_adjust_par", Psapar);
+
+ xml->addpar("rand", Prand);
+ xml->addpar("amp_rand_type", Pamprandtype);
+ xml->addpar("amp_rand_power", Pamprandpower);
+
+ xml->addpar("harmonic_shift", Pharmonicshift);
+ xml->addparbool("harmonic_shift_first", Pharmonicshiftfirst);
+
+ xml->addpar("adaptive_harmonics", Padaptiveharmonics);
+ xml->addpar("adaptive_harmonics_base_frequency", Padaptiveharmonicsbasefreq);
+ xml->addpar("adaptive_harmonics_power", Padaptiveharmonicspower);
+
+ xml->beginbranch("HARMONICS");
+ for(int n = 0; n < MAX_AD_HARMONICS; ++n) {
+ if((Phmag[n] == 64) && (Phphase[n] == 64))
+ continue;
+ xml->beginbranch("HARMONIC", n + 1);
+ xml->addpar("mag", Phmag[n]);
+ xml->addpar("phase", Phphase[n]);
+ xml->endbranch();
+ }
+ xml->endbranch();
+
+ if(Pcurrentbasefunc == 127) {
+ normalize(basefuncFFTfreqs);
+
+ xml->beginbranch("BASE_FUNCTION");
+ for(int i = 1; i < synth->oscilsize / 2; ++i) {
+ float xc = basefuncFFTfreqs[i].real();
+ float xs = basefuncFFTfreqs[i].imag();
+ if((fabs(xs) > 0.00001f) && (fabs(xs) > 0.00001f)) {
+ xml->beginbranch("BF_HARMONIC", i);
+ xml->addparreal("cos", xc);
+ xml->addparreal("sin", xs);
+ xml->endbranch();
+ }
+ }
+ xml->endbranch();
+ }
+}
+
+void OscilGen::getfromXML(XMLwrapper *xml)
+{
+ Phmagtype = xml->getpar127("harmonic_mag_type", Phmagtype);
+
+ Pcurrentbasefunc = xml->getpar127("base_function", Pcurrentbasefunc);
+ Pbasefuncpar = xml->getpar127("base_function_par", Pbasefuncpar);
+
+ Pbasefuncmodulation = xml->getpar127("base_function_modulation",
+ Pbasefuncmodulation);
+ Pbasefuncmodulationpar1 = xml->getpar127("base_function_modulation_par1",
+ Pbasefuncmodulationpar1);
+ Pbasefuncmodulationpar2 = xml->getpar127("base_function_modulation_par2",
+ Pbasefuncmodulationpar2);
+ Pbasefuncmodulationpar3 = xml->getpar127("base_function_modulation_par3",
+ Pbasefuncmodulationpar3);
+
+ Pmodulation = xml->getpar127("modulation", Pmodulation);
+ Pmodulationpar1 = xml->getpar127("modulation_par1",
+ Pmodulationpar1);
+ Pmodulationpar2 = xml->getpar127("modulation_par2",
+ Pmodulationpar2);
+ Pmodulationpar3 = xml->getpar127("modulation_par3",
+ Pmodulationpar3);
+
+ Pwaveshaping = xml->getpar127("wave_shaping", Pwaveshaping);
+ Pwaveshapingfunction = xml->getpar127("wave_shaping_function",
+ Pwaveshapingfunction);
+
+ Pfiltertype = xml->getpar127("filter_type", Pfiltertype);
+ Pfilterpar1 = xml->getpar127("filter_par1", Pfilterpar1);
+ Pfilterpar2 = xml->getpar127("filter_par2", Pfilterpar2);
+ Pfilterbeforews = xml->getpar127("filter_before_wave_shaping",
+ Pfilterbeforews);
+
+ Psatype = xml->getpar127("spectrum_adjust_type", Psatype);
+ Psapar = xml->getpar127("spectrum_adjust_par", Psapar);
+
+ Prand = xml->getpar127("rand", Prand);
+ Pamprandtype = xml->getpar127("amp_rand_type", Pamprandtype);
+ Pamprandpower = xml->getpar127("amp_rand_power", Pamprandpower);
+
+ Pharmonicshift = xml->getpar("harmonic_shift",
+ Pharmonicshift,
+ -64,
+ 64);
+ Pharmonicshiftfirst = xml->getparbool("harmonic_shift_first",
+ Pharmonicshiftfirst);
+
+ Padaptiveharmonics = xml->getpar("adaptive_harmonics",
+ Padaptiveharmonics,
+ 0,
+ 127);
+ Padaptiveharmonicsbasefreq = xml->getpar(
+ "adaptive_harmonics_base_frequency",
+ Padaptiveharmonicsbasefreq,
+ 0,
+ 255);
+ Padaptiveharmonicspower = xml->getpar("adaptive_harmonics_power",
+ Padaptiveharmonicspower,
+ 0,
+ 200);
+
+
+ if(xml->enterbranch("HARMONICS")) {
+ Phmag[0] = 64;
+ Phphase[0] = 64;
+ for(int n = 0; n < MAX_AD_HARMONICS; ++n) {
+ if(xml->enterbranch("HARMONIC", n + 1) == 0)
+ continue;
+ Phmag[n] = xml->getpar127("mag", 64);
+ Phphase[n] = xml->getpar127("phase", 64);
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+ }
+
+ if(Pcurrentbasefunc != 0)
+ changebasefunction();
+
+
+ if(xml->enterbranch("BASE_FUNCTION")) {
+ for(int i = 1; i < synth->oscilsize / 2; ++i)
+ if(xml->enterbranch("BF_HARMONIC", i)) {
+ basefuncFFTfreqs[i] =
+ std::complex<float>(xml->getparreal("cos", 0.0f),
+ xml->getparreal("sin", 0.0f));
+ xml->exitbranch();
+ }
+ xml->exitbranch();
+
+ clearDC(basefuncFFTfreqs);
+ normalize(basefuncFFTfreqs);
+ }
+}
+
+
+//Define basic functions
+#define FUNC(b) float basefunc_ ## b(float x, float a)
+
+FUNC(pulse)
+{
+ return (fmod(x, 1.0f) < a) ? -1.0f : 1.0f;
+}
+
+FUNC(saw)
+{
+ if(a < 0.00001f)
+ a = 0.00001f;
+ else
+ if(a > 0.99999f)
+ a = 0.99999f;
+ x = fmod(x, 1);
+ if(x < a)
+ return x / a * 2.0f - 1.0f;
+ else
+ return (1.0f - x) / (1.0f - a) * 2.0f - 1.0f;
+}
+
+FUNC(triangle)
+{
+ x = fmod(x + 0.25f, 1);
+ a = 1 - a;
+ if(a < 0.00001f)
+ a = 0.00001f;
+ if(x < 0.5f)
+ x = x * 4 - 1.0f;
+ else
+ x = (1.0f - x) * 4 - 1.0f;
+ x /= -a;
+ if(x < -1.0f)
+ x = -1.0f;
+ if(x > 1.0f)
+ x = 1.0f;
+ return x;
+}
+
+FUNC(power)
+{
+ x = fmod(x, 1);
+ if(a < 0.00001f)
+ a = 0.00001f;
+ else
+ if(a > 0.99999f)
+ a = 0.99999f;
+ return powf(x, expf((a - 0.5f) * 10.0f)) * 2.0f - 1.0f;
+}
+
+FUNC(gauss)
+{
+ x = fmod(x, 1) * 2.0f - 1.0f;
+ if(a < 0.00001f)
+ a = 0.00001f;
+ return expf(-x * x * (expf(a * 8) + 5.0f)) * 2.0f - 1.0f;
+}
+
+FUNC(diode)
+{
+ if(a < 0.00001f)
+ a = 0.00001f;
+ else
+ if(a > 0.99999f)
+ a = 0.99999f;
+ a = a * 2.0f - 1.0f;
+ x = cosf((x + 0.5f) * 2.0f * PI) - a;
+ if(x < 0.0f)
+ x = 0.0f;
+ return x / (1.0f - a) * 2 - 1.0f;
+}
+
+FUNC(abssine)
+{
+ x = fmod(x, 1);
+ if(a < 0.00001f)
+ a = 0.00001f;
+ else
+ if(a > 0.99999f)
+ a = 0.99999f;
+ return sinf(powf(x, expf((a - 0.5f) * 5.0f)) * PI) * 2.0f - 1.0f;
+}
+
+FUNC(pulsesine)
+{
+ if(a < 0.00001f)
+ a = 0.00001f;
+ x = (fmod(x, 1) - 0.5f) * expf((a - 0.5f) * logf(128));
+ if(x < -0.5f)
+ x = -0.5f;
+ else
+ if(x > 0.5f)
+ x = 0.5f;
+ x = sinf(x * PI * 2.0f);
+ return x;
+}
+
+FUNC(stretchsine)
+{
+ x = fmod(x + 0.5f, 1) * 2.0f - 1.0f;
+ a = (a - 0.5f) * 4;
+ if(a > 0.0f)
+ a *= 2;
+ a = powf(3.0f, a);
+ float b = powf(fabs(x), a);
+ if(x < 0)
+ b = -b;
+ return -sinf(b * PI);
+}
+
+FUNC(chirp)
+{
+ x = fmod(x, 1.0f) * 2.0f * PI;
+ a = (a - 0.5f) * 4;
+ if(a < 0.0f)
+ a *= 2.0f;
+ a = powf(3.0f, a);
+ return sinf(x / 2.0f) * sinf(a * x * x);
+}
+
+FUNC(absstretchsine)
+{
+ x = fmod(x + 0.5f, 1) * 2.0f - 1.0f;
+ a = (a - 0.5f) * 9;
+ a = powf(3.0f, a);
+ float b = powf(fabs(x), a);
+ if(x < 0)
+ b = -b;
+ return -powf(sinf(b * PI), 2);
+}
+
+FUNC(chebyshev)
+{
+ a = a * a * a * 30.0f + 1.0f;
+ return cosf(acosf(x * 2.0f - 1.0f) * a);
+}
+
+FUNC(sqr)
+{
+ a = a * a * a * a * 160.0f + 0.001f;
+ return -atanf(sinf(x * 2.0f * PI) * a);
+}
+
+FUNC(spike)
+{
+ float b = a * 0.66666; // the width of the range: if a == 0.5, b == 0.33333
+
+ if(x < 0.5) {
+ if(x < (0.5 - (b / 2.0)))
+ return 0.0;
+ else {
+ x = (x + (b / 2) - 0.5) * (2.0 / b); // shift to zero, and expand to range from 0 to 1
+ return x * (2.0 / b); // this is the slope: 1 / (b / 2)
+ }
+ }
+ else {
+ if(x > (0.5 + (b / 2.0)))
+ return 0.0;
+ else {
+ x = (x - 0.5) * (2.0 / b);
+ return (1 - x) * (2.0 / b);
+ }
+ }
+}
+
+FUNC(circle)
+{
+ // a is parameter: 0 -> 0.5 -> 1 // O.5 = circle
+ float b, y;
+
+ b = 2 - (a * 2); // b goes from 2 to 0
+ x = x * 4;
+
+ if(x < 2) {
+ x = x - 1; // x goes from -1 to 1
+ if((x < -b) || (x > b))
+ y = 0;
+ else
+ y = sqrt(1 - (pow(x, 2) / pow(b, 2))); // normally * a^2, but a stays 1
+ }
+ else {
+ x = x - 3; // x goes from -1 to 1 as well
+ if((x < -b) || (x > b))
+ y = 0;
+ else
+ y = -sqrt(1 - (pow(x, 2) / pow(b, 2)));
+ }
+ return y;
+}
+
+typedef float (*base_func)(float, float);
+
+base_func getBaseFunction(unsigned char func)
+{
+ if(!func)
+ return NULL;
+
+ if(func == 127) //should be the custom wave
+ return NULL;
+
+ func--;
+ assert(func < 15);
+ base_func functions[] = {
+ basefunc_triangle,
+ basefunc_pulse,
+ basefunc_saw,
+ basefunc_power,
+ basefunc_gauss,
+ basefunc_diode,
+ basefunc_abssine,
+ basefunc_pulsesine,
+ basefunc_stretchsine,
+ basefunc_chirp,
+ basefunc_absstretchsine,
+ basefunc_chebyshev,
+ basefunc_sqr,
+ basefunc_spike,
+ basefunc_circle,
+ };
+ return functions[func];
+}
+
+//And filters
+
+#define FILTER(x) float osc_ ## x(unsigned int i, float par, float par2)
+FILTER(lp)
+{
+ float gain = powf(1.0f - par * par * par * 0.99f, i);
+ float tmp = par2 * par2 * par2 * par2 * 0.5f + 0.0001f;
+ if(gain < tmp)
+ gain = powf(gain, 10.0f) / powf(tmp, 9.0f);
+ return gain;
+}
+
+FILTER(hp1)
+{
+ float gain = 1.0f - powf(1.0f - par * par, i + 1);
+ return powf(gain, par2 * 2.0f + 0.1f);
+}
+
+FILTER(hp1b)
+{
+ if(par < 0.2f)
+ par = par * 0.25f + 0.15f;
+ float gain = 1.0f - powf(1.0f - par * par * 0.999f + 0.001f,
+ i * 0.05f * i + 1.0f);
+ float tmp = powf(5.0f, par2 * 2.0f);
+ return powf(gain, tmp);
+}
+
+FILTER(bp1)
+{
+ float gain = i + 1 - powf(2, (1.0f - par) * 7.5f);
+ gain = 1.0f / (1.0f + gain * gain / (i + 1.0f));
+ float tmp = powf(5.0f, par2 * 2.0f);
+ gain = powf(gain, tmp);
+ if(gain < 1e-5)
+ gain = 1e-5;
+ return gain;
+}
+
+FILTER(bs1)
+{
+ float gain = i + 1 - powf(2, (1.0f - par) * 7.5f);
+ gain = powf(atanf(gain / (i / 10.0f + 1)) / 1.57f, 6);
+ return powf(gain, par2 * par2 * 3.9f + 0.1f);
+}
+
+FILTER(lp2)
+{
+ return (i + 1 >
+ powf(2, (1.0f - par) * 10) ? 0.0f : 1.0f) * par2 + (1.0f - par2);
+}
+
+FILTER(hp2)
+{
+ if(par == 1)
+ return 1.0f;
+ return (i + 1 >
+ powf(2, (1.0f - par) * 7) ? 1.0f : 0.0f) * par2 + (1.0f - par2);
+}
+
+FILTER(bp2)
+{
+ return (fabs(powf(2,
+ (1.0f
+ - par)
+ * 7)
+ - i) > i / 2 + 1 ? 0.0f : 1.0f) * par2 + (1.0f - par2);
+}
+
+FILTER(bs2)
+{
+ return (fabs(powf(2,
+ (1.0f
+ - par)
+ * 7)
+ - i) < i / 2 + 1 ? 0.0f : 1.0f) * par2 + (1.0f - par2);
+}
+
+bool floatEq(float a, float b)
+{
+ const float fudge = .01;
+ return a + fudge > b && a - fudge < b;
+}
+
+FILTER(cos)
+{
+ float tmp = powf(5.0f, par2 * 2.0f - 1.0f);
+ tmp = powf(i / 32.0f, tmp) * 32.0f;
+ if(floatEq(par2 * 127.0f, 64.0f))
+ tmp = i;
+ float gain = cosf(par * par * PI / 2.0f * tmp);
+ gain *= gain;
+ return gain;
+}
+
+FILTER(sin)
+{
+ float tmp = powf(5.0f, par2 * 2.0f - 1.0f);
+ tmp = powf(i / 32.0f, tmp) * 32.0f;
+ if(floatEq(par2 * 127.0f, 64.0f))
+ tmp = i;
+ float gain = sinf(par * par * PI / 2.0f * tmp);
+ gain *= gain;
+ return gain;
+}
+
+FILTER(low_shelf)
+{
+ float p2 = 1.0f - par + 0.2f;
+ float x = i / (64.0f * p2 * p2);
+ if(x < 0.0f)
+ x = 0.0f;
+ else
+ if(x > 1.0f)
+ x = 1.0f;
+ float tmp = powf(1.0f - par2, 2.0f);
+ return cosf(x * PI) * (1.0f - tmp) + 1.01f + tmp;
+}
+
+FILTER(s)
+{
+ unsigned int tmp = (int) (powf(2.0f, (1.0f - par) * 7.2f));
+ float gain = 1.0f;
+ if(i == tmp)
+ gain = powf(2.0f, par2 * par2 * 8.0f);
+ return gain;
+}
+#undef FILTER
+
+typedef float (*filter_func)(unsigned int, float, float);
+filter_func getFilter(unsigned char func)
+{
+ if(!func)
+ return NULL;
+
+ func--;
+ assert(func < 13);
+ filter_func functions[] = {
+ osc_lp,
+ osc_hp1,
+ osc_hp1b,
+ osc_bp1,
+ osc_bs1,
+ osc_lp2,
+ osc_hp2,
+ osc_bp2,
+ osc_bs2,
+ osc_cos,
+ osc_sin,
+ osc_low_shelf,
+ osc_s
+ };
+ return functions[func];
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h
new file mode 100644
index 0000000..483a385
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h
@@ -0,0 +1,175 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ OscilGen.h - Waveform generator for ADnote
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef OSCIL_GEN_H
+#define OSCIL_GEN_H
+
+#include "../globals.h"
+#include "../Misc/XMLwrapper.h"
+#include "../DSP/FFTwrapper.h"
+#include "../Params/Presets.h"
+#include "Resonance.h"
+
+class OscilGen:public Presets
+{
+ public:
+ OscilGen(FFTwrapper *fft_, Resonance *res_);
+ ~OscilGen();
+
+ /**computes the full spectrum of oscil from harmonics,phases and basefunc*/
+ void prepare();
+
+ /**do the antialiasing(cut off higher freqs.),apply randomness and do a IFFT*/
+ //returns where should I start getting samples, used in block type randomness
+ short get(float *smps, float freqHz, int resonance = 0);
+ //if freqHz is smaller than 0, return the "un-randomized" sample for UI
+
+ void getbasefunction(float *smps);
+
+ //called by UI
+ void getspectrum(int n, float *spc, int what); //what=0 pt. oscil,1 pt. basefunc
+ void getcurrentbasefunction(float *smps);
+ /**convert oscil to base function*/
+ void useasbase();
+
+ void add2XML(XMLwrapper *xml);
+ void defaults();
+ void getfromXML(XMLwrapper *xml);
+
+ void convert2sine();
+
+ //Parameters
+
+ /**
+ * The hmag and hphase starts counting from 0, so the first harmonic(1) has the index 0,
+ * 2-nd harmonic has index 1, ..the 128 harminic has index 127
+ */
+ unsigned char Phmag[MAX_AD_HARMONICS], Phphase[MAX_AD_HARMONICS]; //the MIDI parameters for mag. and phases
+
+
+ /**The Type of magnitude:
+ * 0 - Linear
+ * 1 - dB scale (-40)
+ * 2 - dB scale (-60)
+ * 3 - dB scale (-80)
+ * 4 - dB scale (-100)*/
+ unsigned char Phmagtype;
+
+ unsigned char Pcurrentbasefunc; //The base function used - 0=sin, 1=...
+ unsigned char Pbasefuncpar; //the parameter of the base function
+
+ unsigned char Pbasefuncmodulation; //what modulation is applied to the basefunc
+ unsigned char Pbasefuncmodulationpar1, Pbasefuncmodulationpar2,
+ Pbasefuncmodulationpar3; //the parameter of the base function modulation
+
+ /*the Randomness:
+ 64=no randomness
+ 63..0 - block type randomness - 0 is maximum
+ 65..127 - each harmonic randomness - 127 is maximum*/
+ unsigned char Prand;
+ unsigned char Pwaveshaping, Pwaveshapingfunction;
+ unsigned char Pfiltertype, Pfilterpar1, Pfilterpar2;
+ unsigned char Pfilterbeforews;
+ unsigned char Psatype, Psapar; //spectrum adjust
+
+ unsigned char Pamprandpower, Pamprandtype; //amplitude randomness
+ int Pharmonicshift; //how the harmonics are shifted
+ int Pharmonicshiftfirst; //if the harmonic shift is done before waveshaping and filter
+
+ unsigned char Padaptiveharmonics; //the adaptive harmonics status (off=0,on=1,etc..)
+ unsigned char Padaptiveharmonicsbasefreq; //the base frequency of the adaptive harmonic (30..3000Hz)
+ unsigned char Padaptiveharmonicspower; //the strength of the effect (0=off,100=full)
+ unsigned char Padaptiveharmonicspar; //the parameters in 2,3,4.. modes of adaptive harmonics
+
+ unsigned char Pmodulation; //what modulation is applied to the oscil
+ unsigned char Pmodulationpar1, Pmodulationpar2, Pmodulationpar3; //the parameter of the parameters
+
+
+ //makes a new random seed for Amplitude Randomness
+ //this should be called every note on event
+ void newrandseed(unsigned int randseed);
+
+ bool ADvsPAD; //if it is used by ADsynth or by PADsynth
+
+ private:
+ //This array stores some termporary data and it has OSCIL_SIZE elements
+ float *tmpsmps;
+ fft_t *outoscilFFTfreqs;
+
+ float hmag[MAX_AD_HARMONICS], hphase[MAX_AD_HARMONICS]; //the magnituides and the phases of the sine/nonsine harmonics
+// private:
+ FFTwrapper *fft;
+ //computes the basefunction and make the FFT; newbasefunc<0 = same basefunc
+ void changebasefunction();
+ //Waveshaping
+ void waveshape();
+
+ //Filter the oscillator accotding to Pfiltertype and Pfilterpar
+ void oscilfilter();
+
+ //Adjust the spectrum
+ void spectrumadjust();
+
+ //Shift the harmonics
+ void shiftharmonics();
+
+ //Do the oscil modulation stuff
+ void modulation();
+
+ //Check system for needed updates
+ bool needPrepare(void);
+
+ //Do the adaptive harmonic stuff
+ void adaptiveharmonic(fft_t *f, float freq);
+
+ //Do the adaptive harmonic postprocessing (2n+1,2xS,2xA,etc..)
+ //this function is called even for the user interface
+ //this can be called for the sine and components, and for the spectrum
+ //(that's why the sine and cosine components should be processed with a separate call)
+ void adaptiveharmonicpostprocess(fft_t *f, int size);
+
+ //Internal Data
+ unsigned char oldbasefunc, oldbasepar, oldhmagtype,
+ oldwaveshapingfunction, oldwaveshaping;
+ int oldfilterpars, oldsapars, oldbasefuncmodulation,
+ oldbasefuncmodulationpar1, oldbasefuncmodulationpar2,
+ oldbasefuncmodulationpar3, oldharmonicshift;
+ int oldmodulation, oldmodulationpar1, oldmodulationpar2,
+ oldmodulationpar3;
+
+
+ fft_t *basefuncFFTfreqs; //Base Function Frequencies
+ fft_t *oscilFFTfreqs; //Oscillator Frequencies - this is different than the hamonics set-up by the user, it may contains time-domain data if the antialiasing is turned off
+ int oscilprepared; //1 if the oscil is prepared, 0 if it is not prepared and is need to call ::prepare() before ::get()
+
+ Resonance *res;
+
+ unsigned int randseed;
+};
+
+typedef float (*filter_func)(unsigned int, float, float);
+filter_func getFilter(unsigned char func);
+typedef float (*base_func)(float, float);
+base_func getBaseFunction(unsigned char func);
+
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp
new file mode 100644
index 0000000..1778b33
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp
@@ -0,0 +1,432 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ pADnote.cpp - The "pad" synthesizer
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+#include <math.h>
+#include "PADnote.h"
+#include "../Misc/Config.h"
+#include "../DSP/Filter.h"
+
+PADnote::PADnote(PADnoteParameters *parameters,
+ Controller *ctl_,
+ float freq,
+ float velocity,
+ int portamento_,
+ int midinote,
+ bool besilent)
+ :SynthNote(freq, velocity, portamento_, midinote, besilent)
+{
+ pars = parameters;
+
+ ctl = ctl_;
+ firsttime = true;
+ setup(freq, velocity, portamento_, midinote);
+}
+
+
+void PADnote::setup(float freq,
+ float velocity,
+ int portamento_,
+ int midinote,
+ bool legato)
+{
+ portamento = portamento_;
+ this->velocity = velocity;
+ finished_ = false;
+
+
+ if(pars->Pfixedfreq == 0)
+ basefreq = freq;
+ else {
+ basefreq = 440.0f;
+ int fixedfreqET = pars->PfixedfreqET;
+ if(fixedfreqET != 0) { //if the frequency varies according the keyboard note
+ float tmp =
+ (midinote
+ - 69.0f) / 12.0f
+ * (powf(2.0f, (fixedfreqET - 1) / 63.0f) - 1.0f);
+ if(fixedfreqET <= 64)
+ basefreq *= powf(2.0f, tmp);
+ else
+ basefreq *= powf(3.0f, tmp);
+ }
+ }
+
+ firsttime = true;
+ released = false;
+ realfreq = basefreq;
+ if(!legato)
+ NoteGlobalPar.Detune = getdetune(pars->PDetuneType, pars->PCoarseDetune,
+ pars->PDetune);
+
+
+ //find out the closest note
+ float logfreq = logf(basefreq * powf(2.0f, NoteGlobalPar.Detune / 1200.0f));
+ float mindist = fabs(logfreq - logf(pars->sample[0].basefreq + 0.0001f));
+ nsample = 0;
+ for(int i = 1; i < PAD_MAX_SAMPLES; ++i) {
+ if(pars->sample[i].smp == NULL)
+ break;
+ float dist = fabs(logfreq - logf(pars->sample[i].basefreq + 0.0001f));
+
+ if(dist < mindist) {
+ nsample = i;
+ mindist = dist;
+ }
+ }
+
+ int size = pars->sample[nsample].size;
+ if(size == 0)
+ size = 1;
+
+
+ if(!legato) { //not sure
+ poshi_l = (int)(RND * (size - 1));
+ if(pars->PStereo != 0)
+ poshi_r = (poshi_l + size / 2) % size;
+ else
+ poshi_r = poshi_l;
+ poslo = 0.0f;
+ }
+
+
+ if(pars->PPanning == 0)
+ NoteGlobalPar.Panning = RND;
+ else
+ NoteGlobalPar.Panning = pars->PPanning / 128.0f;
+
+ NoteGlobalPar.FilterCenterPitch = pars->GlobalFilter->getfreq() //center freq
+ + pars->PFilterVelocityScale / 127.0f
+ * 6.0f //velocity sensing
+ * (VelF(velocity,
+ pars->
+ PFilterVelocityScaleFunction) - 1);
+
+ if(!legato) {
+ if(pars->PPunchStrength != 0) {
+ NoteGlobalPar.Punch.Enabled = 1;
+ NoteGlobalPar.Punch.t = 1.0f; //start from 1.0f and to 0.0f
+ NoteGlobalPar.Punch.initialvalue =
+ ((powf(10, 1.5f * pars->PPunchStrength / 127.0f) - 1.0f)
+ * VelF(velocity,
+ pars->PPunchVelocitySensing));
+ float time =
+ powf(10, 3.0f * pars->PPunchTime / 127.0f) / 10000.0f; //0.1f .. 100 ms
+ float stretch = powf(440.0f / freq, pars->PPunchStretch / 64.0f);
+ NoteGlobalPar.Punch.dt = 1.0f
+ / (time * synth->samplerate_f * stretch);
+ }
+ else
+ NoteGlobalPar.Punch.Enabled = 0;
+
+ NoteGlobalPar.FreqEnvelope = new Envelope(pars->FreqEnvelope, basefreq);
+ NoteGlobalPar.FreqLfo = new LFO(pars->FreqLfo, basefreq);
+
+ NoteGlobalPar.AmpEnvelope = new Envelope(pars->AmpEnvelope, basefreq);
+ NoteGlobalPar.AmpLfo = new LFO(pars->AmpLfo, basefreq);
+ }
+
+ NoteGlobalPar.Volume = 4.0f
+ * powf(0.1f, 3.0f * (1.0f - pars->PVolume / 96.0f)) //-60 dB .. 0 dB
+ * VelF(velocity, pars->PAmpVelocityScaleFunction); //velocity sensing
+
+ NoteGlobalPar.AmpEnvelope->envout_dB(); //discard the first envelope output
+ globaloldamplitude = globalnewamplitude = NoteGlobalPar.Volume
+ * NoteGlobalPar.AmpEnvelope->
+ envout_dB()
+ * NoteGlobalPar.AmpLfo->amplfoout();
+
+ if(!legato) {
+ NoteGlobalPar.GlobalFilterL = Filter::generate(pars->GlobalFilter);
+ NoteGlobalPar.GlobalFilterR = Filter::generate(pars->GlobalFilter);
+
+ NoteGlobalPar.FilterEnvelope = new Envelope(pars->FilterEnvelope,
+ basefreq);
+ NoteGlobalPar.FilterLfo = new LFO(pars->FilterLfo, basefreq);
+ }
+ NoteGlobalPar.FilterQ = pars->GlobalFilter->getq();
+ NoteGlobalPar.FilterFreqTracking = pars->GlobalFilter->getfreqtracking(
+ basefreq);
+
+ if(pars->sample[nsample].smp == NULL) {
+ finished_ = true;
+ return;
+ }
+}
+
+void PADnote::legatonote(float freq,
+ float velocity,
+ int portamento_,
+ int midinote,
+ bool externcall)
+{
+ // Manage legato stuff
+ if(legato.update(freq, velocity, portamento_, midinote, externcall))
+ return;
+
+ setup(freq, velocity, portamento_, midinote, true);
+}
+
+
+PADnote::~PADnote()
+{
+ delete (NoteGlobalPar.FreqEnvelope);
+ delete (NoteGlobalPar.FreqLfo);
+ delete (NoteGlobalPar.AmpEnvelope);
+ delete (NoteGlobalPar.AmpLfo);
+ delete (NoteGlobalPar.GlobalFilterL);
+ delete (NoteGlobalPar.GlobalFilterR);
+ delete (NoteGlobalPar.FilterEnvelope);
+ delete (NoteGlobalPar.FilterLfo);
+}
+
+
+inline void PADnote::fadein(float *smps)
+{
+ int zerocrossings = 0;
+ for(int i = 1; i < synth->buffersize; ++i)
+ if((smps[i - 1] < 0.0f) && (smps[i] > 0.0f))
+ zerocrossings++; //this is only the possitive crossings
+
+ float tmp = (synth->buffersize_f - 1.0f) / (zerocrossings + 1) / 3.0f;
+ if(tmp < 8.0f)
+ tmp = 8.0f;
+
+ int n;
+ F2I(tmp, n); //how many samples is the fade-in
+ if(n > synth->buffersize)
+ n = synth->buffersize;
+ for(int i = 0; i < n; ++i) { //fade-in
+ float tmp = 0.5f - cosf((float)i / (float) n * PI) * 0.5f;
+ smps[i] *= tmp;
+ }
+}
+
+
+void PADnote::computecurrentparameters()
+{
+ float globalpitch, globalfilterpitch;
+ globalpitch = 0.01f * (NoteGlobalPar.FreqEnvelope->envout()
+ + NoteGlobalPar.FreqLfo->lfoout()
+ * ctl->modwheel.relmod + NoteGlobalPar.Detune);
+ globaloldamplitude = globalnewamplitude;
+ globalnewamplitude = NoteGlobalPar.Volume
+ * NoteGlobalPar.AmpEnvelope->envout_dB()
+ * NoteGlobalPar.AmpLfo->amplfoout();
+
+ globalfilterpitch = NoteGlobalPar.FilterEnvelope->envout()
+ + NoteGlobalPar.FilterLfo->lfoout()
+ + NoteGlobalPar.FilterCenterPitch;
+
+ float tmpfilterfreq = globalfilterpitch + ctl->filtercutoff.relfreq
+ + NoteGlobalPar.FilterFreqTracking;
+
+ tmpfilterfreq = Filter::getrealfreq(tmpfilterfreq);
+
+ float globalfilterq = NoteGlobalPar.FilterQ * ctl->filterq.relq;
+ NoteGlobalPar.GlobalFilterL->setfreq_and_q(tmpfilterfreq, globalfilterq);
+ NoteGlobalPar.GlobalFilterR->setfreq_and_q(tmpfilterfreq, globalfilterq);
+
+ //compute the portamento, if it is used by this note
+ float portamentofreqrap = 1.0f;
+ if(portamento != 0) { //this voice use portamento
+ portamentofreqrap = ctl->portamento.freqrap;
+ if(ctl->portamento.used == 0) //the portamento has finished
+ portamento = 0; //this note is no longer "portamented"
+ ;
+ }
+
+ realfreq = basefreq * portamentofreqrap
+ * powf(2.0f, globalpitch / 12.0f) * ctl->pitchwheel.relfreq;
+}
+
+
+int PADnote::Compute_Linear(float *outl,
+ float *outr,
+ int freqhi,
+ float freqlo)
+{
+ float *smps = pars->sample[nsample].smp;
+ if(smps == NULL) {
+ finished_ = true;
+ return 1;
+ }
+ int size = pars->sample[nsample].size;
+ for(int i = 0; i < synth->buffersize; ++i) {
+ poshi_l += freqhi;
+ poshi_r += freqhi;
+ poslo += freqlo;
+ if(poslo >= 1.0f) {
+ poshi_l += 1;
+ poshi_r += 1;
+ poslo -= 1.0f;
+ }
+ if(poshi_l >= size)
+ poshi_l %= size;
+ if(poshi_r >= size)
+ poshi_r %= size;
+
+ outl[i] = smps[poshi_l] * (1.0f - poslo) + smps[poshi_l + 1] * poslo;
+ outr[i] = smps[poshi_r] * (1.0f - poslo) + smps[poshi_r + 1] * poslo;
+ }
+ return 1;
+}
+int PADnote::Compute_Cubic(float *outl,
+ float *outr,
+ int freqhi,
+ float freqlo)
+{
+ float *smps = pars->sample[nsample].smp;
+ if(smps == NULL) {
+ finished_ = true;
+ return 1;
+ }
+ int size = pars->sample[nsample].size;
+ float xm1, x0, x1, x2, a, b, c;
+ for(int i = 0; i < synth->buffersize; ++i) {
+ poshi_l += freqhi;
+ poshi_r += freqhi;
+ poslo += freqlo;
+ if(poslo >= 1.0f) {
+ poshi_l += 1;
+ poshi_r += 1;
+ poslo -= 1.0f;
+ }
+ if(poshi_l >= size)
+ poshi_l %= size;
+ if(poshi_r >= size)
+ poshi_r %= size;
+
+
+ //left
+ xm1 = smps[poshi_l];
+ x0 = smps[poshi_l + 1];
+ x1 = smps[poshi_l + 2];
+ x2 = smps[poshi_l + 3];
+ a = (3.0f * (x0 - x1) - xm1 + x2) * 0.5f;
+ b = 2.0f * x1 + xm1 - (5.0f * x0 + x2) * 0.5f;
+ c = (x1 - xm1) * 0.5f;
+ outl[i] = (((a * poslo) + b) * poslo + c) * poslo + x0;
+ //right
+ xm1 = smps[poshi_r];
+ x0 = smps[poshi_r + 1];
+ x1 = smps[poshi_r + 2];
+ x2 = smps[poshi_r + 3];
+ a = (3.0f * (x0 - x1) - xm1 + x2) * 0.5f;
+ b = 2.0f * x1 + xm1 - (5.0f * x0 + x2) * 0.5f;
+ c = (x1 - xm1) * 0.5f;
+ outr[i] = (((a * poslo) + b) * poslo + c) * poslo + x0;
+ }
+ return 1;
+}
+
+
+int PADnote::noteout(float *outl, float *outr)
+{
+ computecurrentparameters();
+ float *smps = pars->sample[nsample].smp;
+ if(smps == NULL) {
+ for(int i = 0; i < synth->buffersize; ++i) {
+ outl[i] = 0.0f;
+ outr[i] = 0.0f;
+ }
+ return 1;
+ }
+ float smpfreq = pars->sample[nsample].basefreq;
+
+
+ float freqrap = realfreq / smpfreq;
+ int freqhi = (int) (floor(freqrap));
+ float freqlo = freqrap - floor(freqrap);
+
+
+ if(config.cfg.Interpolation)
+ Compute_Cubic(outl, outr, freqhi, freqlo);
+ else
+ Compute_Linear(outl, outr, freqhi, freqlo);
+
+
+ if(firsttime) {
+ fadein(outl);
+ fadein(outr);
+ firsttime = false;
+ }
+
+ NoteGlobalPar.GlobalFilterL->filterout(outl);
+ NoteGlobalPar.GlobalFilterR->filterout(outr);
+
+ //Apply the punch
+ if(NoteGlobalPar.Punch.Enabled != 0)
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float punchamp = NoteGlobalPar.Punch.initialvalue
+ * NoteGlobalPar.Punch.t + 1.0f;
+ outl[i] *= punchamp;
+ outr[i] *= punchamp;
+ NoteGlobalPar.Punch.t -= NoteGlobalPar.Punch.dt;
+ if(NoteGlobalPar.Punch.t < 0.0f) {
+ NoteGlobalPar.Punch.Enabled = 0;
+ break;
+ }
+ }
+
+ if(ABOVE_AMPLITUDE_THRESHOLD(globaloldamplitude, globalnewamplitude))
+ // Amplitude Interpolation
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float tmpvol = INTERPOLATE_AMPLITUDE(globaloldamplitude,
+ globalnewamplitude,
+ i,
+ synth->buffersize);
+ outl[i] *= tmpvol * NoteGlobalPar.Panning;
+ outr[i] *= tmpvol * (1.0f - NoteGlobalPar.Panning);
+ }
+ else
+ for(int i = 0; i < synth->buffersize; ++i) {
+ outl[i] *= globalnewamplitude * NoteGlobalPar.Panning;
+ outr[i] *= globalnewamplitude * (1.0f - NoteGlobalPar.Panning);
+ }
+
+
+ // Apply legato-specific sound signal modifications
+ legato.apply(*this, outl, outr);
+
+ // Check if the global amplitude is finished.
+ // If it does, disable the note
+ if(NoteGlobalPar.AmpEnvelope->finished() != 0) {
+ for(int i = 0; i < synth->buffersize; ++i) { //fade-out
+ float tmp = 1.0f - (float)i / synth->buffersize_f;
+ outl[i] *= tmp;
+ outr[i] *= tmp;
+ }
+ finished_ = 1;
+ }
+
+ return 1;
+}
+
+int PADnote::finished() const
+{
+ return finished_;
+}
+
+void PADnote::relasekey()
+{
+ NoteGlobalPar.FreqEnvelope->relasekey();
+ NoteGlobalPar.FilterEnvelope->relasekey();
+ NoteGlobalPar.AmpEnvelope->relasekey();
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h
new file mode 100644
index 0000000..f401996
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h
@@ -0,0 +1,121 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PADnote.h - The "pad" synthesizer
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+#ifndef PAD_NOTE_H
+#define PAD_NOTE_H
+
+#include "SynthNote.h"
+#include "../globals.h"
+#include "../Params/PADnoteParameters.h"
+#include "../Params/Controller.h"
+#include "Envelope.h"
+#include "LFO.h"
+#include "../Params/Controller.h"
+
+/**The "pad" synthesizer*/
+class PADnote:public SynthNote
+{
+ public:
+ PADnote(PADnoteParameters *parameters,
+ Controller *ctl_,
+ float freq,
+ float velocity,
+ int portamento_,
+ int midinote,
+ bool besilent);
+ ~PADnote();
+
+ void legatonote(float freq, float velocity, int portamento_,
+ int midinote, bool externcall);
+
+ int noteout(float *outl, float *outr);
+ int finished() const;
+ void relasekey();
+ private:
+ void setup(float freq, float velocity, int portamento_,
+ int midinote, bool legato = false);
+ void fadein(float *smps);
+ void computecurrentparameters();
+ bool finished_;
+ PADnoteParameters *pars;
+
+ int poshi_l, poshi_r;
+ float poslo;
+
+ float basefreq;
+ bool firsttime, released;
+
+ int nsample, portamento;
+
+ int Compute_Linear(float *outl,
+ float *outr,
+ int freqhi,
+ float freqlo);
+ int Compute_Cubic(float *outl,
+ float *outr,
+ int freqhi,
+ float freqlo);
+
+
+ struct {
+ /******************************************
+ * FREQUENCY GLOBAL PARAMETERS *
+ ******************************************/
+ float Detune; //cents
+
+ Envelope *FreqEnvelope;
+ LFO *FreqLfo;
+
+ /********************************************
+ * AMPLITUDE GLOBAL PARAMETERS *
+ ********************************************/
+ float Volume; // [ 0 .. 1 ]
+
+ float Panning; // [ 0 .. 1 ]
+
+ Envelope *AmpEnvelope;
+ LFO *AmpLfo;
+
+ struct {
+ int Enabled;
+ float initialvalue, dt, t;
+ } Punch;
+
+ /******************************************
+ * FILTER GLOBAL PARAMETERS *
+ ******************************************/
+ class Filter * GlobalFilterL, *GlobalFilterR;
+
+ float FilterCenterPitch; //octaves
+ float FilterQ;
+ float FilterFreqTracking;
+
+ Envelope *FilterEnvelope;
+
+ LFO *FilterLfo;
+ } NoteGlobalPar;
+
+
+ float globaloldamplitude, globalnewamplitude, velocity, realfreq;
+ Controller *ctl;
+};
+
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.cpp
new file mode 100644
index 0000000..4eb4e01
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.cpp
@@ -0,0 +1,276 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Resonance.cpp - Resonance
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <math.h>
+#include <stdlib.h>
+#include "Resonance.h"
+
+Resonance::Resonance():Presets()
+{
+ setpresettype("Presonance");
+ defaults();
+}
+
+Resonance::~Resonance()
+{}
+
+
+void Resonance::defaults()
+{
+ Penabled = 0;
+ PmaxdB = 20;
+ Pcenterfreq = 64; //1 kHz
+ Poctavesfreq = 64;
+ Pprotectthefundamental = 0;
+ ctlcenter = 1.0f;
+ ctlbw = 1.0f;
+ for(int i = 0; i < N_RES_POINTS; ++i)
+ Prespoints[i] = 64;
+}
+
+/*
+ * Set a point of resonance function with a value
+ */
+void Resonance::setpoint(int n, unsigned char p)
+{
+ if((n < 0) || (n >= N_RES_POINTS))
+ return;
+ Prespoints[n] = p;
+}
+
+/*
+ * Apply the resonance to FFT data
+ */
+void Resonance::applyres(int n, fft_t *fftdata, float freq)
+{
+ if(Penabled == 0)
+ return; //if the resonance is disabled
+ float sum = 0.0f,
+ l1 = logf(getfreqx(0.0f) * ctlcenter),
+ l2 = logf(2.0f) * getoctavesfreq() * ctlbw;
+
+ for(int i = 0; i < N_RES_POINTS; ++i)
+ if(sum < Prespoints[i])
+ sum = Prespoints[i];
+ if(sum < 1.0f)
+ sum = 1.0f;
+
+ for(int i = 1; i < n; ++i) {
+ float x = (logf(freq * i) - l1) / l2; //compute where the n-th hamonics fits to the graph
+ if(x < 0.0f)
+ x = 0.0f;
+
+ x *= N_RES_POINTS;
+ float dx = x - floor(x);
+ x = floor(x);
+ int kx1 = (int)x;
+ if(kx1 >= N_RES_POINTS)
+ kx1 = N_RES_POINTS - 1;
+ int kx2 = kx1 + 1;
+ if(kx2 >= N_RES_POINTS)
+ kx2 = N_RES_POINTS - 1;
+ float y =
+ (Prespoints[kx1]
+ * (1.0f - dx) + Prespoints[kx2] * dx) / 127.0f - sum / 127.0f;
+
+ y = powf(10.0f, y * PmaxdB / 20.0f);
+
+ if((Pprotectthefundamental != 0) && (i == 1))
+ y = 1.0f;
+
+ fftdata[i] *= y;
+ }
+}
+
+/*
+ * Gets the response at the frequency "freq"
+ */
+
+float Resonance::getfreqresponse(float freq)
+{
+ float l1 = logf(getfreqx(0.0f) * ctlcenter),
+ l2 = logf(2.0f) * getoctavesfreq() * ctlbw, sum = 0.0f;
+
+ for(int i = 0; i < N_RES_POINTS; ++i)
+ if(sum < Prespoints[i])
+ sum = Prespoints[i];
+ if(sum < 1.0f)
+ sum = 1.0f;
+
+ float x = (logf(freq) - l1) / l2; //compute where the n-th hamonics fits to the graph
+ if(x < 0.0f)
+ x = 0.0f;
+ x *= N_RES_POINTS;
+ float dx = x - floor(x);
+ x = floor(x);
+ int kx1 = (int)x;
+ if(kx1 >= N_RES_POINTS)
+ kx1 = N_RES_POINTS - 1;
+ int kx2 = kx1 + 1;
+ if(kx2 >= N_RES_POINTS)
+ kx2 = N_RES_POINTS - 1;
+ float result =
+ (Prespoints[kx1]
+ * (1.0f - dx) + Prespoints[kx2] * dx) / 127.0f - sum / 127.0f;
+ result = powf(10.0f, result * PmaxdB / 20.0f);
+ return result;
+}
+
+
+/*
+ * Smooth the resonance function
+ */
+void Resonance::smooth()
+{
+ float old = Prespoints[0];
+ for(int i = 0; i < N_RES_POINTS; ++i) {
+ old = old * 0.4f + Prespoints[i] * 0.6f;
+ Prespoints[i] = (int) old;
+ }
+ old = Prespoints[N_RES_POINTS - 1];
+ for(int i = N_RES_POINTS - 1; i > 0; i--) {
+ old = old * 0.4f + Prespoints[i] * 0.6f;
+ Prespoints[i] = (int) old + 1;
+ if(Prespoints[i] > 127)
+ Prespoints[i] = 127;
+ }
+}
+
+/*
+ * Randomize the resonance function
+ */
+void Resonance::randomize(int type)
+{
+ int r = (int)(RND * 127.0f);
+ for(int i = 0; i < N_RES_POINTS; ++i) {
+ Prespoints[i] = r;
+ if((RND < 0.1f) && (type == 0))
+ r = (int)(RND * 127.0f);
+ if((RND < 0.3f) && (type == 1))
+ r = (int)(RND * 127.0f);
+ if(type == 2)
+ r = (int)(RND * 127.0f);
+ }
+ smooth();
+}
+
+/*
+ * Interpolate the peaks
+ */
+void Resonance::interpolatepeaks(int type)
+{
+ int x1 = 0, y1 = Prespoints[0];
+ for(int i = 1; i < N_RES_POINTS; ++i)
+ if((Prespoints[i] != 64) || (i + 1 == N_RES_POINTS)) {
+ int y2 = Prespoints[i];
+ for(int k = 0; k < i - x1; ++k) {
+ float x = (float) k / (i - x1);
+ if(type == 0)
+ x = (1 - cosf(x * PI)) * 0.5f;
+ Prespoints[x1 + k] = (int)(y1 * (1.0f - x) + y2 * x);
+ }
+ x1 = i;
+ y1 = y2;
+ }
+}
+
+/*
+ * Get the frequency from x, where x is [0..1]; x is the x coordinate
+ */
+float Resonance::getfreqx(float x)
+{
+ if(x > 1.0f)
+ x = 1.0f;
+ float octf = powf(2.0f, getoctavesfreq());
+ return getcenterfreq() / sqrt(octf) * powf(octf, x);
+}
+
+/*
+ * Get the x coordinate from frequency (used by the UI)
+ */
+float Resonance::getfreqpos(float freq)
+{
+ return (logf(freq) - logf(getfreqx(0.0f))) / logf(2.0f) / getoctavesfreq();
+}
+
+/*
+ * Get the center frequency of the resonance graph
+ */
+float Resonance::getcenterfreq()
+{
+ return 10000.0f * powf(10, -(1.0f - Pcenterfreq / 127.0f) * 2.0f);
+}
+
+/*
+ * Get the number of octave that the resonance functions applies to
+ */
+float Resonance::getoctavesfreq()
+{
+ return 0.25f + 10.0f * Poctavesfreq / 127.0f;
+}
+
+void Resonance::sendcontroller(MidiControllers ctl, float par)
+{
+ if(ctl == C_resonance_center)
+ ctlcenter = par;
+ else
+ ctlbw = par;
+}
+
+
+
+
+void Resonance::add2XML(XMLwrapper *xml)
+{
+ xml->addparbool("enabled", Penabled);
+
+ if((Penabled == 0) && (xml->minimal))
+ return;
+
+ xml->addpar("max_db", PmaxdB);
+ xml->addpar("center_freq", Pcenterfreq);
+ xml->addpar("octaves_freq", Poctavesfreq);
+ xml->addparbool("protect_fundamental_frequency", Pprotectthefundamental);
+ xml->addpar("resonance_points", N_RES_POINTS);
+ for(int i = 0; i < N_RES_POINTS; ++i) {
+ xml->beginbranch("RESPOINT", i);
+ xml->addpar("val", Prespoints[i]);
+ xml->endbranch();
+ }
+}
+
+
+void Resonance::getfromXML(XMLwrapper *xml)
+{
+ Penabled = xml->getparbool("enabled", Penabled);
+
+ PmaxdB = xml->getpar127("max_db", PmaxdB);
+ Pcenterfreq = xml->getpar127("center_freq", Pcenterfreq);
+ Poctavesfreq = xml->getpar127("octaves_freq", Poctavesfreq);
+ Pprotectthefundamental = xml->getparbool("protect_fundamental_frequency",
+ Pprotectthefundamental);
+ for(int i = 0; i < N_RES_POINTS; ++i) {
+ if(xml->enterbranch("RESPOINT", i) == 0)
+ continue;
+ Prespoints[i] = xml->getpar127("val", Prespoints[i]);
+ xml->exitbranch();
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h
new file mode 100644
index 0000000..7778571
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h
@@ -0,0 +1,70 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Resonance.h - Resonance
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#ifndef RESONANCE_H
+#define RESONANCE_H
+
+#include "../globals.h"
+#include "../Misc/Util.h"
+#include "../Misc/XMLwrapper.h"
+#include "../Params/Presets.h"
+#include "../DSP/FFTwrapper.h"
+
+#define N_RES_POINTS 256
+
+class Resonance:public Presets
+{
+ public:
+ Resonance();
+ ~Resonance();
+ void setpoint(int n, unsigned char p);
+ void applyres(int n, fft_t *fftdata, float freq);
+ void smooth();
+ void interpolatepeaks(int type);
+ void randomize(int type);
+
+ void add2XML(XMLwrapper *xml);
+ void defaults();
+ void getfromXML(XMLwrapper *xml);
+
+
+ float getfreqpos(float freq);
+ float getfreqx(float x);
+ float getfreqresponse(float freq);
+ float getcenterfreq();
+ float getoctavesfreq();
+ void sendcontroller(MidiControllers ctl, float par);
+
+ //parameters
+ unsigned char Penabled; //if the ressonance is enabled
+ unsigned char Prespoints[N_RES_POINTS]; //how many points define the resonance function
+ unsigned char PmaxdB; //how many dB the signal may be amplified
+ unsigned char Pcenterfreq, Poctavesfreq; //the center frequency of the res. func., and the number of octaves
+ unsigned char Pprotectthefundamental; //the fundamental (1-st harmonic) is not damped, even it resonance function is low
+
+ //controllers
+ float ctlcenter; //center frequency(relative)
+ float ctlbw; //bandwidth(relative)
+
+ private:
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp
new file mode 100644
index 0000000..6c61447
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp
@@ -0,0 +1,613 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ SUBnote.cpp - The "subtractive" synthesizer
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <cmath>
+#include <cstdlib>
+#include <cstdio>
+#include <cassert>
+#include "../globals.h"
+#include "SUBnote.h"
+#include "../Misc/Util.h"
+
+SUBnote::SUBnote(SUBnoteParameters *parameters,
+ Controller *ctl_,
+ float freq,
+ float velocity,
+ int portamento_,
+ int midinote,
+ bool besilent)
+ :SynthNote(freq, velocity, portamento_, midinote, besilent)
+{
+ pars = parameters;
+ ctl = ctl_;
+ NoteEnabled = ON;
+ setup(freq, velocity, portamento_, midinote);
+}
+
+void SUBnote::setup(float freq,
+ float velocity,
+ int portamento_,
+ int midinote,
+ bool legato)
+{
+ portamento = portamento_;
+ NoteEnabled = ON;
+ volume = powf(0.1f, 3.0f * (1.0f - pars->PVolume / 96.0f)); //-60 dB .. 0 dB
+ volume *= VelF(velocity, pars->PAmpVelocityScaleFunction);
+ if(pars->PPanning != 0)
+ panning = pars->PPanning / 127.0f;
+ else
+ panning = RND;
+ if(!legato) {
+ numstages = pars->Pnumstages;
+ stereo = pars->Pstereo;
+ start = pars->Pstart;
+ firsttick = 1;
+ }
+ int pos[MAX_SUB_HARMONICS];
+
+ if(pars->Pfixedfreq == 0)
+ basefreq = freq;
+ else {
+ basefreq = 440.0f;
+ int fixedfreqET = pars->PfixedfreqET;
+ if(fixedfreqET != 0) { //if the frequency varies according the keyboard note
+ float tmp =
+ (midinote
+ - 69.0f) / 12.0f
+ * (powf(2.0f, (fixedfreqET - 1) / 63.0f) - 1.0f);
+ if(fixedfreqET <= 64)
+ basefreq *= powf(2.0f, tmp);
+ else
+ basefreq *= powf(3.0f, tmp);
+ }
+ }
+ float detune = getdetune(pars->PDetuneType,
+ pars->PCoarseDetune,
+ pars->PDetune);
+ basefreq *= powf(2.0f, detune / 1200.0f); //detune
+// basefreq*=ctl->pitchwheel.relfreq;//pitch wheel
+
+ //global filter
+ GlobalFilterCenterPitch = pars->GlobalFilter->getfreq() //center freq
+ + (pars->PGlobalFilterVelocityScale / 127.0f
+ * 6.0f) //velocity sensing
+ * (VelF(velocity,
+ pars->PGlobalFilterVelocityScaleFunction)
+ - 1);
+
+ if(!legato) {
+ GlobalFilterL = NULL;
+ GlobalFilterR = NULL;
+ GlobalFilterEnvelope = NULL;
+ }
+
+ int harmonics = 0;
+
+ //select only harmonics that desire to compute
+ for(int n = 0; n < MAX_SUB_HARMONICS; ++n) {
+ if(pars->Phmag[n] == 0)
+ continue;
+ pos[harmonics++] = n;
+ }
+ if(!legato)
+ firstnumharmonics = numharmonics = harmonics;
+ else {
+ if(harmonics > firstnumharmonics)
+ numharmonics = firstnumharmonics;
+ else
+ numharmonics = harmonics;
+ }
+
+
+ if(numharmonics == 0) {
+ NoteEnabled = OFF;
+ return;
+ }
+
+
+ if(!legato) {
+ lfilter = new bpfilter[numstages * numharmonics];
+ if(stereo != 0)
+ rfilter = new bpfilter[numstages * numharmonics];
+ }
+
+ //how much the amplitude is normalised (because the harmonics)
+ float reduceamp = 0.0f;
+
+ for(int n = 0; n < numharmonics; ++n) {
+ float freq = basefreq * pars->POvertoneFreqMult[pos[n]];
+ overtone_freq[n] = freq;
+ overtone_rolloff[n] = computerolloff(freq);
+
+ //the bandwidth is not absolute(Hz); it is relative to frequency
+ float bw =
+ powf(10, (pars->Pbandwidth - 127.0f) / 127.0f * 4) * numstages;
+
+ //Bandwidth Scale
+ bw *= powf(1000 / freq, (pars->Pbwscale - 64.0f) / 64.0f * 3.0f);
+
+ //Relative BandWidth
+ bw *= powf(100, (pars->Phrelbw[pos[n]] - 64.0f) / 64.0f);
+
+ if(bw > 25.0f)
+ bw = 25.0f;
+
+ //try to keep same amplitude on all freqs and bw. (empirically)
+ float gain = sqrt(1500.0f / (bw * freq));
+
+ float hmagnew = 1.0f - pars->Phmag[pos[n]] / 127.0f;
+ float hgain;
+
+ switch(pars->Phmagtype) {
+ case 1:
+ hgain = expf(hmagnew * logf(0.01f));
+ break;
+ case 2:
+ hgain = expf(hmagnew * logf(0.001f));
+ break;
+ case 3:
+ hgain = expf(hmagnew * logf(0.0001f));
+ break;
+ case 4:
+ hgain = expf(hmagnew * logf(0.00001f));
+ break;
+ default:
+ hgain = 1.0f - hmagnew;
+ }
+ gain *= hgain;
+ reduceamp += hgain;
+
+ for(int nph = 0; nph < numstages; ++nph) {
+ float amp = 1.0f;
+ if(nph == 0)
+ amp = gain;
+ initfilter(lfilter[nph + n * numstages], freq, bw, amp, hgain);
+ if(stereo != 0)
+ initfilter(rfilter[nph + n * numstages], freq, bw, amp, hgain);
+ }
+ }
+
+ if(reduceamp < 0.001f)
+ reduceamp = 1.0f;
+ volume /= reduceamp;
+
+ oldpitchwheel = 0;
+ oldbandwidth = 64;
+ if(!legato) {
+ if(pars->Pfixedfreq == 0)
+ initparameters(basefreq);
+ else
+ initparameters(basefreq / 440.0f * freq);
+ }
+ else {
+ if(pars->Pfixedfreq == 0)
+ freq = basefreq;
+ else
+ freq *= basefreq / 440.0f;
+
+ if(pars->PGlobalFilterEnabled != 0) {
+ globalfiltercenterq = pars->GlobalFilter->getq();
+ GlobalFilterFreqTracking = pars->GlobalFilter->getfreqtracking(
+ basefreq);
+ }
+ }
+
+ oldamplitude = newamplitude;
+}
+
+void SUBnote::legatonote(float freq, float velocity, int portamento_,
+ int midinote, bool externcall)
+{
+ // Manage legato stuff
+ if(legato.update(freq, velocity, portamento_, midinote, externcall))
+ return;
+
+ setup(freq, velocity, portamento_, midinote, true);
+}
+
+SUBnote::~SUBnote()
+{
+ if(NoteEnabled != OFF)
+ KillNote();
+}
+
+/*
+ * Kill the note
+ */
+void SUBnote::KillNote()
+{
+ if(NoteEnabled != OFF) {
+ delete [] lfilter;
+ lfilter = NULL;
+ if(stereo != 0)
+ delete [] rfilter;
+ rfilter = NULL;
+ delete AmpEnvelope;
+ delete FreqEnvelope;
+ delete BandWidthEnvelope;
+ delete GlobalFilterL;
+ delete GlobalFilterR;
+ delete GlobalFilterEnvelope;
+ NoteEnabled = OFF;
+ }
+}
+
+
+/*
+ * Compute the filters coefficients
+ */
+void SUBnote::computefiltercoefs(bpfilter &filter,
+ float freq,
+ float bw,
+ float gain)
+{
+ if(freq > synth->samplerate_f / 2.0f - 200.0f)
+ freq = synth->samplerate_f / 2.0f - 200.0f;
+
+
+ float omega = 2.0f * PI * freq / synth->samplerate_f;
+ float sn = sinf(omega);
+ float cs = cosf(omega);
+ float alpha = sn * sinh(LOG_2 / 2.0f * bw * omega / sn);
+
+ if(alpha > 1)
+ alpha = 1;
+ if(alpha > bw)
+ alpha = bw;
+
+ filter.b0 = alpha / (1.0f + alpha) * filter.amp * gain;
+ filter.b2 = -alpha / (1.0f + alpha) * filter.amp * gain;
+ filter.a1 = -2.0f * cs / (1.0f + alpha);
+ filter.a2 = (1.0f - alpha) / (1.0f + alpha);
+}
+
+
+/*
+ * Initialise the filters
+ */
+void SUBnote::initfilter(bpfilter &filter,
+ float freq,
+ float bw,
+ float amp,
+ float mag)
+{
+ filter.xn1 = 0.0f;
+ filter.xn2 = 0.0f;
+
+ if(start == 0) {
+ filter.yn1 = 0.0f;
+ filter.yn2 = 0.0f;
+ }
+ else {
+ float a = 0.1f * mag; //empirically
+ float p = RND * 2.0f * PI;
+ if(start == 1)
+ a *= RND;
+ filter.yn1 = a * cosf(p);
+ filter.yn2 = a * cosf(p + freq * 2.0f * PI / synth->samplerate_f);
+
+ //correct the error of computation the start amplitude
+ //at very high frequencies
+ if(freq > synth->samplerate_f * 0.96f) {
+ filter.yn1 = 0.0f;
+ filter.yn2 = 0.0f;
+ }
+ }
+
+ filter.amp = amp;
+ filter.freq = freq;
+ filter.bw = bw;
+ computefiltercoefs(filter, freq, bw, 1.0f);
+}
+
+/*
+ * Do the filtering
+ */
+
+inline void SubFilterA(const float coeff[4], float &src, float work[4])
+{
+ work[3] = src*coeff[0]+work[1]*coeff[1]+work[2]*coeff[2]+work[3]*coeff[3];
+ work[1] = src;
+ src = work[3];
+}
+
+inline void SubFilterB(const float coeff[4], float &src, float work[4])
+{
+ work[2] = src*coeff[0]+work[0]*coeff[1]+work[3]*coeff[2]+work[2]*coeff[3];
+ work[0] = src;
+ src = work[2];
+}
+
+//This dance is designed to minimize unneeded memory operations which can result
+//in quite a bit of wasted time
+void SUBnote::filter(bpfilter &filter, float *smps)
+{
+ assert(synth->buffersize % 8 == 0);
+ float coeff[4] = {filter.b0, filter.b2, -filter.a1, -filter.a2};
+ float work[4] = {filter.xn1, filter.xn2, filter.yn1, filter.yn2};
+
+ for(int i = 0; i < synth->buffersize; i += 8) {
+ SubFilterA(coeff, smps[i + 0], work);
+ SubFilterB(coeff, smps[i + 1], work);
+ SubFilterA(coeff, smps[i + 2], work);
+ SubFilterB(coeff, smps[i + 3], work);
+ SubFilterA(coeff, smps[i + 4], work);
+ SubFilterB(coeff, smps[i + 5], work);
+ SubFilterA(coeff, smps[i + 6], work);
+ SubFilterB(coeff, smps[i + 7], work);
+ }
+ filter.xn1 = work[0];
+ filter.xn2 = work[1];
+ filter.yn1 = work[2];
+ filter.yn2 = work[3];
+}
+
+/*
+ * Init Parameters
+ */
+void SUBnote::initparameters(float freq)
+{
+ AmpEnvelope = new Envelope(pars->AmpEnvelope, freq);
+ if(pars->PFreqEnvelopeEnabled != 0)
+ FreqEnvelope = new Envelope(pars->FreqEnvelope, freq);
+ else
+ FreqEnvelope = NULL;
+ if(pars->PBandWidthEnvelopeEnabled != 0)
+ BandWidthEnvelope = new Envelope(pars->BandWidthEnvelope, freq);
+ else
+ BandWidthEnvelope = NULL;
+ if(pars->PGlobalFilterEnabled != 0) {
+ globalfiltercenterq = pars->GlobalFilter->getq();
+ GlobalFilterL = Filter::generate(pars->GlobalFilter);
+ if(stereo)
+ GlobalFilterR = Filter::generate(pars->GlobalFilter);
+ GlobalFilterEnvelope = new Envelope(pars->GlobalFilterEnvelope,
+ freq);
+ GlobalFilterFreqTracking = pars->GlobalFilter->getfreqtracking(basefreq);
+ }
+ computecurrentparameters();
+}
+
+/*
+ * Compute how much to reduce amplitude near nyquist or subaudible frequencies.
+ */
+float SUBnote::computerolloff(float freq)
+{
+ const float lower_limit = 10.0f;
+ const float lower_width = 10.0f;
+ const float upper_width = 200.0f;
+ float upper_limit = synth->samplerate / 2.0f;
+
+ if (freq > lower_limit + lower_width &&
+ freq < upper_limit - upper_width)
+ return 1.0f;
+ if (freq <= lower_limit || freq >= upper_limit)
+ return 0.0f;
+ if (freq <= lower_limit + lower_width)
+ return (1.0f - cosf(M_PI * (freq - lower_limit) / lower_width)) / 2.0f;
+ return (1.0f - cosf(M_PI * (freq - upper_limit) / upper_width)) / 2.0f;
+}
+
+/*
+ * Compute Parameters of SUBnote for each tick
+ */
+void SUBnote::computecurrentparameters()
+{
+ if((FreqEnvelope != NULL) || (BandWidthEnvelope != NULL)
+ || (oldpitchwheel != ctl->pitchwheel.data)
+ || (oldbandwidth != ctl->bandwidth.data)
+ || (portamento != 0)) {
+ float envfreq = 1.0f;
+ float envbw = 1.0f;
+ float gain = 1.0f;
+
+ if(FreqEnvelope != NULL) {
+ envfreq = FreqEnvelope->envout() / 1200;
+ envfreq = powf(2.0f, envfreq);
+ }
+ envfreq *= ctl->pitchwheel.relfreq; //pitch wheel
+ if(portamento != 0) { //portamento is used
+ envfreq *= ctl->portamento.freqrap;
+ if(ctl->portamento.used == 0) //the portamento has finished
+ portamento = 0; //this note is no longer "portamented"
+ ;
+ }
+
+ if(BandWidthEnvelope != NULL) {
+ envbw = BandWidthEnvelope->envout();
+ envbw = powf(2, envbw);
+ }
+ envbw *= ctl->bandwidth.relbw; //bandwidth controller
+
+ float tmpgain = 1.0f / sqrt(envbw * envfreq);
+
+ for(int n = 0; n < numharmonics; ++n) {
+ overtone_rolloff[n] = computerolloff(overtone_freq[n] * envfreq);
+ }
+ for(int n = 0; n < numharmonics; ++n)
+ for(int nph = 0; nph < numstages; ++nph) {
+ if(nph == 0)
+ gain = tmpgain;
+ else
+ gain = 1.0f;
+ computefiltercoefs(lfilter[nph + n * numstages],
+ lfilter[nph + n * numstages].freq * envfreq,
+ lfilter[nph + n * numstages].bw * envbw,
+ gain);
+ }
+ if(stereo != 0)
+ for(int n = 0; n < numharmonics; ++n)
+ for(int nph = 0; nph < numstages; ++nph) {
+ if(nph == 0)
+ gain = tmpgain;
+ else
+ gain = 1.0f;
+ computefiltercoefs(
+ rfilter[nph + n * numstages],
+ rfilter[nph + n
+ * numstages].freq * envfreq,
+ rfilter[nph + n * numstages].bw * envbw,
+ gain);
+ }
+
+
+ oldbandwidth = ctl->bandwidth.data;
+ oldpitchwheel = ctl->pitchwheel.data;
+ }
+ newamplitude = volume * AmpEnvelope->envout_dB() * 2.0f;
+
+ //Filter
+ if(GlobalFilterL != NULL) {
+ float globalfilterpitch = GlobalFilterCenterPitch
+ + GlobalFilterEnvelope->envout();
+ float filterfreq = globalfilterpitch + ctl->filtercutoff.relfreq
+ + GlobalFilterFreqTracking;
+ filterfreq = Filter::getrealfreq(filterfreq);
+
+ GlobalFilterL->setfreq_and_q(filterfreq,
+ globalfiltercenterq * ctl->filterq.relq);
+ if(GlobalFilterR != NULL)
+ GlobalFilterR->setfreq_and_q(
+ filterfreq,
+ globalfiltercenterq
+ * ctl->filterq.relq);
+ }
+}
+
+/*
+ * Note Output
+ */
+int SUBnote::noteout(float *outl, float *outr)
+{
+ memcpy(outl, denormalkillbuf, synth->bufferbytes);
+ memcpy(outr, denormalkillbuf, synth->bufferbytes);
+
+ if(NoteEnabled == OFF)
+ return 0;
+
+ float tmprnd[synth->buffersize];
+ float tmpsmp[synth->buffersize];
+ //left channel
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmprnd[i] = RND * 2.0f - 1.0f;
+ for(int n = 0; n < numharmonics; ++n) {
+ float rolloff = overtone_rolloff[n];
+ memcpy(tmpsmp, tmprnd, synth->bufferbytes);
+ for(int nph = 0; nph < numstages; ++nph)
+ filter(lfilter[nph + n * numstages], tmpsmp);
+ for(int i = 0; i < synth->buffersize; ++i)
+ outl[i] += tmpsmp[i] * rolloff;
+ }
+
+ if(GlobalFilterL != NULL)
+ GlobalFilterL->filterout(&outl[0]);
+
+ //right channel
+ if(stereo != 0) {
+ for(int i = 0; i < synth->buffersize; ++i)
+ tmprnd[i] = RND * 2.0f - 1.0f;
+ for(int n = 0; n < numharmonics; ++n) {
+ float rolloff = overtone_rolloff[n];
+ memcpy(tmpsmp, tmprnd, synth->bufferbytes);
+ for(int nph = 0; nph < numstages; ++nph)
+ filter(rfilter[nph + n * numstages], tmpsmp);
+ for(int i = 0; i < synth->buffersize; ++i)
+ outr[i] += tmpsmp[i] * rolloff;
+ }
+ if(GlobalFilterR != NULL)
+ GlobalFilterR->filterout(&outr[0]);
+ }
+ else
+ memcpy(outr, outl, synth->bufferbytes);
+
+ if(firsttick != 0) {
+ int n = 10;
+ if(n > synth->buffersize)
+ n = synth->buffersize;
+ for(int i = 0; i < n; ++i) {
+ float ampfadein = 0.5f - 0.5f * cosf(
+ (float) i / (float) n * PI);
+ outl[i] *= ampfadein;
+ outr[i] *= ampfadein;
+ }
+ firsttick = 0;
+ }
+
+ if(ABOVE_AMPLITUDE_THRESHOLD(oldamplitude, newamplitude))
+ // Amplitude interpolation
+ for(int i = 0; i < synth->buffersize; ++i) {
+ float tmpvol = INTERPOLATE_AMPLITUDE(oldamplitude,
+ newamplitude,
+ i,
+ synth->buffersize);
+ outl[i] *= tmpvol * panning;
+ outr[i] *= tmpvol * (1.0f - panning);
+ }
+ else
+ for(int i = 0; i < synth->buffersize; ++i) {
+ outl[i] *= newamplitude * panning;
+ outr[i] *= newamplitude * (1.0f - panning);
+ }
+
+ oldamplitude = newamplitude;
+ computecurrentparameters();
+
+ // Apply legato-specific sound signal modifications
+ legato.apply(*this, outl, outr);
+
+ // Check if the note needs to be computed more
+ if(AmpEnvelope->finished() != 0) {
+ for(int i = 0; i < synth->buffersize; ++i) { //fade-out
+ float tmp = 1.0f - (float)i / synth->buffersize_f;
+ outl[i] *= tmp;
+ outr[i] *= tmp;
+ }
+ KillNote();
+ }
+ return 1;
+}
+
+/*
+ * Relase Key (Note Off)
+ */
+void SUBnote::relasekey()
+{
+ AmpEnvelope->relasekey();
+ if(FreqEnvelope)
+ FreqEnvelope->relasekey();
+ if(BandWidthEnvelope)
+ BandWidthEnvelope->relasekey();
+ if(GlobalFilterEnvelope)
+ GlobalFilterEnvelope->relasekey();
+}
+
+/*
+ * Check if the note is finished
+ */
+int SUBnote::finished() const
+{
+ if(NoteEnabled == OFF)
+ return 1;
+ else
+ return 0;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h
new file mode 100644
index 0000000..87e1e93
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h
@@ -0,0 +1,111 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ SUBnote.h - The subtractive synthesizer
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#ifndef SUB_NOTE_H
+#define SUB_NOTE_H
+
+#include "SynthNote.h"
+#include "../globals.h"
+#include "../Params/SUBnoteParameters.h"
+#include "../Params/Controller.h"
+#include "Envelope.h"
+#include "../DSP/Filter.h"
+
+class SUBnote:public SynthNote
+{
+ public:
+ SUBnote(SUBnoteParameters *parameters, Controller *ctl_, float freq,
+ float velocity, int portamento_, int midinote, bool besilent);
+ ~SUBnote();
+
+ void legatonote(float freq, float velocity, int portamento_,
+ int midinote, bool externcall);
+
+ int noteout(float *outl, float *outr); //note output,return 0 if the note is finished
+ void relasekey();
+ int finished() const;
+ private:
+
+ void setup(float freq,
+ float velocity,
+ int portamento_,
+ int midinote,
+ bool legato = false);
+ void computecurrentparameters();
+ void initparameters(float freq);
+ void KillNote();
+
+ SUBnoteParameters *pars;
+
+ //parameters
+ int stereo;
+ int numstages; //number of stages of filters
+ int numharmonics; //number of harmonics (after the too higher hamonics are removed)
+ int firstnumharmonics; //To keep track of the first note's numharmonics value, useful in legato mode.
+ int start; //how the harmonics start
+ float basefreq;
+ float panning;
+ Envelope *AmpEnvelope;
+ Envelope *FreqEnvelope;
+ Envelope *BandWidthEnvelope;
+
+ Filter *GlobalFilterL, *GlobalFilterR;
+
+ Envelope *GlobalFilterEnvelope;
+
+ //internal values
+ ONOFFTYPE NoteEnabled;
+ int firsttick, portamento;
+ float volume, oldamplitude, newamplitude;
+
+ float GlobalFilterCenterPitch; //octaves
+ float GlobalFilterFreqTracking;
+
+ struct bpfilter {
+ float freq, bw, amp; //filter parameters
+ float a1, a2, b0, b2; //filter coefs. b1=0
+ float xn1, xn2, yn1, yn2; //filter internal values
+ };
+
+ void initfilter(bpfilter &filter,
+ float freq,
+ float bw,
+ float amp,
+ float mag);
+ float computerolloff(float freq);
+ void computefiltercoefs(bpfilter &filter,
+ float freq,
+ float bw,
+ float gain);
+ inline void filter(bpfilter &filter, float *smps);
+
+ bpfilter *lfilter, *rfilter;
+
+ float overtone_rolloff[MAX_SUB_HARMONICS];
+ float overtone_freq[MAX_SUB_HARMONICS];
+
+ Controller *ctl;
+ int oldpitchwheel, oldbandwidth;
+ float globalfiltercenterq;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.cpp
new file mode 100644
index 0000000..578a117
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.cpp
@@ -0,0 +1,134 @@
+#include "SynthNote.h"
+#include "../globals.h"
+#include <cstring>
+
+SynthNote::SynthNote(float freq, float vel, int port, int note, bool quiet)
+ :legato(freq, vel, port, note, quiet)
+{}
+
+SynthNote::Legato::Legato(float freq, float vel, int port,
+ int note, bool quiet)
+{
+ // Initialise some legato-specific vars
+ msg = LM_Norm;
+ fade.length = (int)(synth->samplerate_f * 0.005f); // 0.005f seems ok.
+ if(fade.length < 1)
+ fade.length = 1; // (if something's fishy)
+ fade.step = (1.0f / fade.length);
+ decounter = -10;
+ param.freq = freq;
+ param.vel = vel;
+ param.portamento = port;
+ param.midinote = note;
+ lastfreq = 0.0f;
+ silent = quiet;
+}
+
+int SynthNote::Legato::update(float freq, float velocity, int portamento_,
+ int midinote_, bool externcall)
+{
+ if(externcall)
+ msg = LM_Norm;
+ if(msg != LM_CatchUp) {
+ lastfreq = param.freq;
+ param.freq = freq;
+ param.vel = velocity;
+ param.portamento = portamento_;
+ param.midinote = midinote_;
+ if(msg == LM_Norm) {
+ if(silent) {
+ fade.m = 0.0f;
+ msg = LM_FadeIn;
+ }
+ else {
+ fade.m = 1.0f;
+ msg = LM_FadeOut;
+ return 1;
+ }
+ }
+ if(msg == LM_ToNorm)
+ msg = LM_Norm;
+ }
+ return 0;
+}
+
+void SynthNote::Legato::apply(SynthNote ¬e, float *outl, float *outr)
+{
+ if(silent) // Silencer
+ if(msg != LM_FadeIn) {
+ memset(outl, 0, synth->bufferbytes);
+ memset(outr, 0, synth->bufferbytes);
+ }
+ switch(msg) {
+ case LM_CatchUp: // Continue the catch-up...
+ if(decounter == -10)
+ decounter = fade.length;
+ //Yea, could be done without the loop...
+ for(int i = 0; i < synth->buffersize; ++i) {
+ decounter--;
+ if(decounter < 1) {
+ // Catching-up done, we can finally set
+ // the note to the actual parameters.
+ decounter = -10;
+ msg = LM_ToNorm;
+ note.legatonote(param.freq, param.vel, param.portamento,
+ param.midinote, false);
+ break;
+ }
+ }
+ break;
+ case LM_FadeIn: // Fade-in
+ if(decounter == -10)
+ decounter = fade.length;
+ silent = false;
+ for(int i = 0; i < synth->buffersize; ++i) {
+ decounter--;
+ if(decounter < 1) {
+ decounter = -10;
+ msg = LM_Norm;
+ break;
+ }
+ fade.m += fade.step;
+ outl[i] *= fade.m;
+ outr[i] *= fade.m;
+ }
+ break;
+ case LM_FadeOut: // Fade-out, then set the catch-up
+ if(decounter == -10)
+ decounter = fade.length;
+ for(int i = 0; i < synth->buffersize; ++i) {
+ decounter--;
+ if(decounter < 1) {
+ for(int j = i; j < synth->buffersize; ++j) {
+ outl[j] = 0.0f;
+ outr[j] = 0.0f;
+ }
+ decounter = -10;
+ silent = true;
+ // Fading-out done, now set the catch-up :
+ decounter = fade.length;
+ msg = LM_CatchUp;
+ //This freq should make this now silent note to catch-up/resync
+ //with the heard note for the same length it stayed at the
+ //previous freq during the fadeout.
+ float catchupfreq = param.freq * (param.freq / lastfreq);
+ note.legatonote(catchupfreq, param.vel, param.portamento,
+ param.midinote, false);
+ break;
+ }
+ fade.m -= fade.step;
+ outl[i] *= fade.m;
+ outr[i] *= fade.m;
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void SynthNote::setVelocity(float velocity_) {
+ legato.setSilent(true); //Let legato.update(...) returns 0.
+ legatonote(legato.getFreq(), velocity_,
+ legato.getPortamento(), legato.getMidinote(), true);
+ legato.setDecounter(0); //avoid chopping sound due fade-in
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h
new file mode 100644
index 0000000..3058e5d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h
@@ -0,0 +1,86 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ Note.h - Abstract Base Class for synthesizers
+ Copyright (C) 2010-2010 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#ifndef SYNTH_NOTE_H
+#define SYNTH_NOTE_H
+#include "../globals.h"
+#include "../Params/FilterParams.h"
+
+class SynthNote
+{
+ public:
+ SynthNote(float freq, float vel, int port, int note, bool quiet);
+ virtual ~SynthNote() {}
+
+ /**Compute Output Samples
+ * @return 0 if note is finished*/
+ virtual int noteout(float *outl, float *outr) = 0;
+
+ //TODO fix this spelling error [noisey commit]
+ /**Release the key for the note and start release portion of envelopes.*/
+ virtual void relasekey() = 0;
+
+ /**Return if note is finished.
+ * @return finished=1 unfinished=0*/
+ virtual int finished() const = 0;
+
+ virtual void legatonote(float freq, float velocity,
+ int portamento_, int midinote_,
+ bool externcall) = 0;
+ /* For polyphonic aftertouch needed */
+ void setVelocity(float velocity_);
+ protected:
+ // Legato transitions
+ class Legato
+ {
+ public:
+ Legato(float freq, float vel, int port,
+ int note, bool quiet);
+
+ void apply(SynthNote ¬e, float *outl, float *outr);
+ int update(float freq, float velocity, int portamento_,
+ int midinote_, bool externalcall);
+
+ private:
+ bool silent;
+ float lastfreq;
+ LegatoMsg msg;
+ int decounter;
+ struct { // Fade In/Out vars
+ int length;
+ float m, step;
+ } fade;
+ struct { // Note parameters
+ float freq, vel;
+ int portamento, midinote;
+ } param;
+
+ public: /* Some get routines for legatonote calls (aftertouch feature)*/
+ float getFreq() {return param.freq; }
+ float getVelocity() {return param.vel; }
+ int getPortamento() {return param.portamento; }
+ int getMidinote() {return param.midinote; }
+ void setSilent(bool silent_) {silent = silent_; }
+ void setDecounter(int decounter_) {decounter = decounter_; }
+ } legato;
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h
new file mode 100644
index 0000000..bd66704
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h
@@ -0,0 +1,201 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ AdNoteTest.h - CxxTest for Synth/ADnote
+ Copyright (C) 2009-2011 Mark McCurry
+ Copyright (C) 2009 Harald Hvaal
+ Authors: Mark McCurry, Harald Hvaal
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+
+#include <cxxtest/TestSuite.h>
+#include <iostream>
+#include <fstream>
+#include <ctime>
+#include <string>
+#include "../Misc/Master.h"
+#include "../Misc/Util.h"
+#include "../Synth/ADnote.h"
+#include "../Params/Presets.h"
+#include "../DSP/FFTwrapper.h"
+#include "../globals.h"
+SYNTH_T *synth;
+
+using namespace std;
+
+
+class AdNoteTest:public CxxTest::TestSuite
+{
+ public:
+
+ ADnote *note;
+ Master *master;
+ FFTwrapper *fft;
+ Controller *controller;
+ unsigned char testnote;
+
+
+ float *outR, *outL;
+
+ void setUp() {
+ //First the sensible settings and variables that have to be set:
+ synth = new SYNTH_T;
+ synth->buffersize = 256;
+
+ outL = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ *(outL + i) = 0;
+ outR = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ *(outR + i) = 0;
+
+ //next the bad global variables that for some reason have not been properly placed in some
+ //initialization routine, but rather exist as cryptic oneliners in main.cpp:
+ denormalkillbuf = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ denormalkillbuf[i] = 0;
+
+ //phew, glad to get thouse out of my way. took me a lot of sweat and gdb to get this far...
+
+ fft = new FFTwrapper(synth->oscilsize);
+ //prepare the default settings
+ ADnoteParameters *defaultPreset = new ADnoteParameters(fft);
+
+ //Assert defaults
+ TS_ASSERT(!defaultPreset->VoicePar[1].Enabled);
+
+ XMLwrapper *wrap = new XMLwrapper();
+ cout << string(SOURCE_DIR) + string("/guitar-adnote.xmz")
+ << endl;
+ wrap->loadXMLfile(string(SOURCE_DIR)
+ + string("/guitar-adnote.xmz"));
+ TS_ASSERT(wrap->enterbranch("MASTER"));
+ TS_ASSERT(wrap->enterbranch("PART", 0));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT"));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT"));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT_ITEM", 0));
+ TS_ASSERT(wrap->enterbranch("ADD_SYNTH_PARAMETERS"));
+ defaultPreset->getfromXML(wrap);
+ //defaultPreset->defaults();
+
+ //verify xml was loaded
+ TS_ASSERT(defaultPreset->VoicePar[1].Enabled);
+
+
+
+ controller = new Controller();
+
+ //lets go with.... 50! as a nice note
+ testnote = 50;
+ float freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f);
+
+ note = new ADnote(defaultPreset,
+ controller,
+ freq,
+ 120,
+ 0,
+ testnote,
+ false);
+
+ delete defaultPreset;
+ delete wrap;
+ }
+
+ void willNoteBeRunButIsHereForLinkingReasonsHowsThisForCamelCaseEh()
+ {
+ master = new Master();
+ }
+
+ void tearDown() {
+ delete note;
+ delete controller;
+ delete fft;
+ delete [] outL;
+ delete [] outR;
+ delete [] denormalkillbuf;
+ FFT_cleanup();
+ delete synth;
+ }
+
+ void testDefaults() {
+ int sampleCount = 0;
+
+//#define WRITE_OUTPUT
+
+#ifdef WRITE_OUTPUT
+ ofstream file("adnoteout", ios::out);
+#endif
+ note->noteout(outL, outR);
+#ifdef WRITE_OUTPUT
+ for(int i = 0; i < synth->buffersize; ++i)
+ file << outL[i] << std::endl;
+
+#endif
+ sampleCount += synth->buffersize;
+
+ TS_ASSERT_DELTA(outL[255], 0.254609f, 0.0001f);
+
+ note->relasekey();
+
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.102197f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.111261f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.021375f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], 0.149149f, 0.0001f);
+
+ while(!note->finished()) {
+ note->noteout(outL, outR);
+#ifdef WRITE_OUTPUT
+ for(int i = 0; i < synth->buffersize; ++i)
+ file << outL[i] << std::endl;
+
+#endif
+ sampleCount += synth->buffersize;
+ }
+#ifdef WRITE_OUTPUT
+ file.close();
+#endif
+
+ TS_ASSERT_EQUALS(sampleCount, 9472);
+ }
+
+#define OUTPUT_PROFILE
+#ifdef OUTPUT_PROFILE
+ void testSpeed() {
+ const int samps = 15000;
+
+ int t_on = clock(); // timer before calling func
+ for(int i = 0; i < samps; ++i)
+ note->noteout(outL, outR);
+ int t_off = clock(); // timer when func returns
+
+ printf("AdNoteTest: %f seconds for %d Samples to be generated.\n",
+ (static_cast<float>(t_off - t_on)) / CLOCKS_PER_SEC, samps);
+ }
+#endif
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/CMakeLists.txt
new file mode 100644
index 0000000..373fd40
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/CMakeLists.txt
@@ -0,0 +1,35 @@
+#for tests looking for files stored in the source dir
+add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
+
+CXXTEST_ADD_TEST(ControllerTest ControllerTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ControllerTest.h)
+CXXTEST_ADD_TEST(EchoTest EchoTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/EchoTest.h)
+#CXXTEST_ADD_TEST(SampleTest SampleTest.h)
+CXXTEST_ADD_TEST(MicrotonalTest MicrotonalTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MicrotonalTest.h)
+CXXTEST_ADD_TEST(XMLwrapperTest XMLwrapper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/XMLwrapperTest.h)
+CXXTEST_ADD_TEST(ADnoteTest AdNoteTest.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/AdNoteTest.h)
+CXXTEST_ADD_TEST(SUBnoteTest SubNoteTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/SubNoteTest.h)
+CXXTEST_ADD_TEST(OscilGenTest OscilGenTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/OscilGenTest.h)
+CXXTEST_ADD_TEST(RandTest RandTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/RandTest.h)
+CXXTEST_ADD_TEST(PADnoteTest PadNoteTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/PadNoteTest.h)
+CXXTEST_ADD_TEST(PluginTest PluginTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/PluginTest.h)
+CXXTEST_ADD_TEST(UnisonTest UnisonTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/UnisonTest.h)
+
+#Extra libraries added to make test and full compilation use the same library
+#links for quirky compilers
+set(test_lib zynaddsubfx_core ${ZLIB_LIBRARY} ${FFTW_LIBRARIES} ${MXML_LIBRARIES} pthread)
+
+message(STATUS "Linking tests with: ${test_lib}")
+target_link_libraries(ADnoteTest ${test_lib})
+target_link_libraries(SUBnoteTest ${test_lib})
+target_link_libraries(ControllerTest ${test_lib})
+target_link_libraries(EchoTest ${test_lib})
+target_link_libraries(MicrotonalTest ${test_lib})
+target_link_libraries(OscilGenTest ${test_lib})
+target_link_libraries(XMLwrapperTest ${test_lib})
+target_link_libraries(RandTest ${test_lib})
+target_link_libraries(PADnoteTest ${test_lib})
+target_link_libraries(PluginTest zynaddsubfx_core zynaddsubfx_nio
+ ${OS_LIBRARIES} ${AUDIO_LIBRARIES})
+target_link_libraries(UnisonTest ${test_lib})
+
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/ControllerTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/ControllerTest.h
new file mode 100644
index 0000000..f9b9704
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/ControllerTest.h
@@ -0,0 +1,75 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ ControllerTest.h - CxxTest for Params/Controller
+ Copyright (C) 2009-2011 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <cxxtest/TestSuite.h>
+#include <iostream>
+#include "../Params/Controller.h"
+#include "../globals.h"
+SYNTH_T *synth;
+
+class ControllerTest:public CxxTest::TestSuite
+{
+ public:
+ void setUp() {
+ synth = new SYNTH_T;
+ testCtl = new Controller();
+ }
+
+ void tearDown() {
+ delete testCtl;
+ delete synth;
+ }
+
+
+ void testPortamentoRange() {
+ //Initialize portamento
+ testCtl->setportamento(127);
+ testCtl->portamento.time = 127;
+ testCtl->initportamento(40.0f, 400.0f, false);
+ //Bounds Check
+ while(testCtl->portamento.used) {
+ TS_ASSERT((0.0f <= testCtl->portamento.x)
+ && (testCtl->portamento.x <= 1.0f));
+ TS_ASSERT((0.1f <= testCtl->portamento.freqrap)
+ && (testCtl->portamento.freqrap <= 1.0f));
+ testCtl->updateportamento();
+ }
+ TS_ASSERT((0.0f <= testCtl->portamento.x)
+ && (testCtl->portamento.x <= 1.0f));
+ TS_ASSERT((0.1f <= testCtl->portamento.freqrap)
+ && (testCtl->portamento.freqrap <= 1.0f));
+ }
+
+ void testPortamentoValue() {
+ testCtl->setportamento(127);
+ testCtl->portamento.time = 127;
+ testCtl->initportamento(40.0f, 400.0f, false);
+ int i;
+ for(i = 0; i < 10; ++i)
+ testCtl->updateportamento();
+ //Assert that the numbers are the same as they were at release
+ TS_ASSERT_DELTA(testCtl->portamento.x, 0.0290249f, 0.000001f)
+ TS_ASSERT_DELTA(testCtl->portamento.freqrap, 0.126122f, 0.000001f)
+ }
+
+ private:
+ Controller *testCtl;
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h
new file mode 100644
index 0000000..c0a295e
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h
@@ -0,0 +1,126 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ EchoTest.h - CxxTest for Effect/Echo
+ Copyright (C) 2009-2011 Mark McCurry
+ Copyright (C) 2009 Harald Hvaal
+ Authors: Mark McCurry, Harald Hvaal
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <cxxtest/TestSuite.h>
+#include <cmath>
+#include <cstdlib>
+#include <iostream>
+#include "../Effects/Echo.h"
+#include "../globals.h"
+SYNTH_T *synth;
+
+using namespace std;
+
+class EchoTest:public CxxTest::TestSuite
+{
+ public:
+ void setUp() {
+ synth = new SYNTH_T;
+ outL = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ outL[i] = 0.0f;
+ outR = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ outR[i] = 0.0f;
+ input = new Stereo<float *>(new float[synth->buffersize],
+ new float[synth->buffersize]);
+ for(int i = 0; i < synth->buffersize; ++i)
+ input->l[i] = input->r[i] = 0.0f;
+ testFX = new Echo(true, outL, outR, 44100, 256);
+ }
+
+ void tearDown() {
+ delete[] input->r;
+ delete[] input->l;
+ delete input;
+ delete[] outL;
+ delete[] outR;
+ delete testFX;
+ delete synth;
+ }
+
+
+ void testInit() {
+ //Make sure that the output will be zero at start
+ //(given a zero input)
+ testFX->out(*input);
+ for(int i = 0; i < synth->buffersize; ++i) {
+ TS_ASSERT_DELTA(outL[i], 0.0f, 0.0001f);
+ TS_ASSERT_DELTA(outR[i], 0.0f, 0.0001f);
+ }
+ }
+
+ void testClear() {
+ char DELAY = 2;
+ testFX->changepar(DELAY, 127);
+
+ //flood with high input
+ for(int i = 0; i < synth->buffersize; ++i)
+ input->r[i] = input->l[i] = 1.0f;
+
+ for(int i = 0; i < 500; ++i)
+ testFX->out(*input);
+ for(int i = 0; i < synth->buffersize; ++i) {
+ TS_ASSERT_DIFFERS(outL[i], 0.0f);
+ TS_ASSERT_DIFFERS(outR[i], 0.0f)
+ }
+ //After making sure the internal buffer has a nonzero value
+ //cleanup
+ //Then get the next output, which should be zereoed out if DELAY
+ //is large enough
+ testFX->cleanup();
+ testFX->out(*input);
+ for(int i = 0; i < synth->buffersize; ++i) {
+ TS_ASSERT_DELTA(outL[i], 0.0f, 0.0001f);
+ TS_ASSERT_DELTA(outR[i], 0.0f, 0.0001f);
+ }
+ }
+ //Insures that the proper decay occurs with high feedback
+ void testDecaywFb() {
+ //flood with high input
+ for(int i = 0; i < synth->buffersize; ++i)
+ input->r[i] = input->l[i] = 1.0f;
+ char FEEDBACK = 5;
+ testFX->changepar(FEEDBACK, 127);
+ for(int i = 0; i < 100; ++i)
+ testFX->out(*input);
+ for(int i = 0; i < synth->buffersize; ++i) {
+ TS_ASSERT_DIFFERS(outL[i], 0.0f);
+ TS_ASSERT_DIFFERS(outR[i], 0.0f)
+ }
+ float amp = abs(outL[0] + outR[0]) / 2;
+ //reset input to zero
+ for(int i = 0; i < synth->buffersize; ++i)
+ input->r[i] = input->l[i] = 0.0f;
+
+ //give the echo time to fade based upon zero input and high feedback
+ for(int i = 0; i < 50; ++i)
+ testFX->out(*input);
+ TS_ASSERT_LESS_THAN_EQUALS(abs(outL[0] + outR[0]) / 2, amp);
+ }
+
+
+ private:
+ Stereo<float *> *input;
+ float *outR, *outL;
+ Echo *testFX;
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/MicrotonalTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/MicrotonalTest.h
new file mode 100644
index 0000000..6ce1ca5
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/MicrotonalTest.h
@@ -0,0 +1,136 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ MicrotonalTest.h - CxxTest for Misc/Microtonal
+ Copyright (C) 2009-2012 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <cxxtest/TestSuite.h>
+#include <iostream>
+#include "../Misc/Microtonal.h"
+#include <cstring>
+#include <string>
+#include <cstdio>
+#include "../globals.h"
+SYNTH_T *synth;
+
+using namespace std;
+
+class MicrotonalTest:public CxxTest::TestSuite
+{
+ public:
+ void setUp() {
+ synth = new SYNTH_T;
+ testMicro = new Microtonal();
+ }
+
+ void tearDown() {
+ delete testMicro;
+ delete synth;
+ }
+
+ //Verifies that the object is initialized correctly
+ void testinit() {
+ TS_ASSERT_EQUALS(testMicro->Pinvertupdown, 0);
+ TS_ASSERT_EQUALS(testMicro->Pinvertupdowncenter, 60);
+ TS_ASSERT_EQUALS(testMicro->getoctavesize(), 12);
+ TS_ASSERT_EQUALS(testMicro->Penabled, 0);
+ TS_ASSERT_EQUALS(testMicro->PAnote, 69);
+ TS_ASSERT_EQUALS(testMicro->PAfreq, 440.0f);
+ TS_ASSERT_EQUALS(testMicro->Pscaleshift, 64);
+ TS_ASSERT_EQUALS(testMicro->Pfirstkey, 0);
+ TS_ASSERT_EQUALS(testMicro->Plastkey, 127);
+ TS_ASSERT_EQUALS(testMicro->Pmiddlenote, 60);
+ TS_ASSERT_EQUALS(testMicro->Pmapsize, 12);
+ TS_ASSERT_EQUALS(testMicro->Pmappingenabled, 0);
+ TS_ASSERT_EQUALS(testMicro->Pglobalfinedetune, 64);
+
+ TS_ASSERT_EQUALS(string((const char *)testMicro->Pname), "12tET");
+ TS_ASSERT_EQUALS(string(
+ (const char *)testMicro->Pcomment),
+ "Equal Temperament 12 notes per octave");
+
+ for(int i = 0; i < 128; ++i)
+ TS_ASSERT_EQUALS(testMicro->Pmapping[i], i);
+
+ TS_ASSERT_DELTA(testMicro->getnotefreq(19, 0), 24.4997f, 0.0001f);
+ }
+
+ //Tests saving/loading to XML
+ void testXML() {
+ //Gah, the XMLwrapper is a twisted maze
+ testMicro->Penabled = 1;
+ XMLwrapper xml;
+ xml.beginbranch("Dummy"); //this should not be needed, but odd behavior
+ //seems to exist from MICROTONAL being on the
+ //top of the stack
+ xml.beginbranch("MICROTONAL");
+ testMicro->add2XML(&xml);
+ xml.endbranch();
+ xml.endbranch();
+
+ char *tmp = xml.getXMLdata();
+ Microtonal other;
+
+ other.Penabled = 1;
+ strcpy((char *)other.Pname, "Myname"); //will be nicer with strings
+
+ TS_ASSERT(*testMicro != other); //sanity check
+
+ TS_ASSERT(xml.enterbranch("Dummy"));
+ TS_ASSERT(xml.enterbranch("MICROTONAL"));
+
+ other.getfromXML(&xml);
+ xml.exitbranch();
+ xml.exitbranch();
+ char *tmpo = xml.getXMLdata();
+
+ TS_ASSERT(!strcmp(tmp, tmpo));
+ free(tmp);
+ free(tmpo);
+ }
+
+#if 0
+ /**\todo Test Saving/loading from file*/
+
+ //Test texttomapping TODO finish
+ void _testTextToMapping() {
+ //the mapping is from old documentation for "Intense Diatonic" scale
+ const char *mapping[12] =
+ {"0", "x", "1", "x", "2", "3", "x", "4", "x", "5", "x", "6"};
+ //for(int i=0;i<20;++i)
+ // cout << i << ':' << testMicro->getnotefreq(i,0) << endl;
+ //
+ // octave size == 7
+ // find dead notes
+ }
+ //Test texttotunings TODO finish
+ void _testTextToTunings() {
+ //the tuning is from old documentation for "Intense Diatonic" scale
+ const char *tuning[7] =
+ {"9/8", "5/4", "4/3", "3/2", "5/3", "15/8", "2/1"};
+ const int numTunings = 7;
+ //for(int i=0;i<20;++i)
+ // cout << i << ':' << testMicro->getnotefreq(i,0) << endl;
+ // go to middle key and verify the proportions
+ }
+ /**\TODO test loading from scl and kbm files*/
+#endif
+
+ private:
+ Microtonal *testMicro;
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/OscilGenTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/OscilGenTest.h
new file mode 100644
index 0000000..b0e13b2
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/OscilGenTest.h
@@ -0,0 +1,141 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ AdNoteTest.h - CxxTest for Synth/OscilGen
+ Copyright (C) 20011-2012 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <cxxtest/TestSuite.h>
+#include <string>
+#include "../Synth/OscilGen.h"
+#include "../globals.h"
+SYNTH_T *synth;
+
+using namespace std;
+
+class OscilGenTest:public CxxTest::TestSuite
+{
+ public:
+ float freq;
+ float *outR, *outL;
+ FFTwrapper *fft;
+ OscilGen *oscil;
+
+ void setUp() {
+ synth = new SYNTH_T;
+ //First the sensible settings and variables that have to be set:
+ synth->buffersize = 256;
+ synth->oscilsize = 1024;
+
+ outL = new float[synth->oscilsize];
+ outR = new float[synth->oscilsize];
+ memset(outL, 0, sizeof(float) * synth->oscilsize);
+ memset(outR, 0, sizeof(float) * synth->oscilsize);
+
+ //next the bad global variables that for some reason have not been properly placed in some
+ //initialization routine, but rather exist as cryptic oneliners in main.cpp:
+ denormalkillbuf = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ denormalkillbuf[i] = 0;
+
+ //prepare the default settings
+ fft = new FFTwrapper(synth->oscilsize);
+ oscil = new OscilGen(fft, NULL);
+
+ //Assert defaults [TODO]
+
+
+ XMLwrapper *wrap = new XMLwrapper();
+ wrap->loadXMLfile(string(SOURCE_DIR)
+ + string("/guitar-adnote.xmz"));
+ TS_ASSERT(wrap->enterbranch("MASTER"));
+ TS_ASSERT(wrap->enterbranch("PART", 0));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT"));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT"));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT_ITEM", 0));
+ TS_ASSERT(wrap->enterbranch("ADD_SYNTH_PARAMETERS"));
+ TS_ASSERT(wrap->enterbranch("VOICE", 0));
+ TS_ASSERT(wrap->enterbranch("OSCIL"));
+ oscil->getfromXML(wrap);
+ delete wrap;
+
+ //verify xml was loaded [TODO]
+
+ //lets go with.... 50! as a nice note
+ const char testnote = 50;
+ freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f);
+ }
+
+ void tearDown() {
+ delete oscil;
+ delete fft;
+ delete[] outL;
+ delete[] outR;
+ delete[] denormalkillbuf;
+ FFT_cleanup();
+ delete synth;
+ }
+
+ //verifies that initialization occurs
+ void testInit(void)
+ {
+ oscil->get(outL, freq);
+ }
+
+ void testOutput(void)
+ {
+ oscil->get(outL, freq);
+ TS_ASSERT_DELTA(outL[23], -0.044547f, 0.0001f);
+ TS_ASSERT_DELTA(outL[129], -0.018169f, 0.0001f);
+ TS_ASSERT_DELTA(outL[586], 0.045647f, 0.0001f);
+ TS_ASSERT_DELTA(outL[1023], -0.038334f, 0.0001f);
+ }
+
+ void testSpectrum(void)
+ {
+ oscil->getspectrum(synth->oscilsize / 2, outR, 1);
+ TS_ASSERT_DELTA(outR[0], 350.698059f, 0.0001f);
+ TS_ASSERT_DELTA(outR[1], 228.889267f, 0.0001f);
+ TS_ASSERT_DELTA(outR[2], 62.187931f, 0.0001f);
+ TS_ASSERT_DELTA(outR[3], 22.295225f, 0.0001f);
+ TS_ASSERT_DELTA(outR[4], 6.942001f, 0.0001f);
+ TS_ASSERT_DELTA(outR[26], 0.015110f, 0.0001f);
+ TS_ASSERT_DELTA(outR[47], 0.003425f, 0.0001f);
+ TS_ASSERT_DELTA(outR[65], 0.001293f, 0.0001f);
+ }
+
+ //performance testing
+ void testSpeed() {
+ const int samps = 15000;
+
+ int t_on = clock(); // timer before calling func
+ for(int i = 0; i < samps; ++i)
+ oscil->prepare();
+ int t_off = clock(); // timer when func returns
+
+ printf("OscilGenTest: %f seconds for %d prepares.\n",
+ (static_cast<float>(t_off - t_on)) / CLOCKS_PER_SEC, samps);
+
+ t_on = clock(); // timer before calling func
+ for(int i = 0; i < samps; ++i)
+ oscil->get(outL, freq);
+ t_off = clock(); // timer when func returns
+
+ printf("OscilGenTest: %f seconds for %d gets.\n",
+ (static_cast<float>(t_off - t_on)) / CLOCKS_PER_SEC, samps);
+ }
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h
new file mode 100644
index 0000000..086efcd
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h
@@ -0,0 +1,207 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PadNoteTest.h - CxxTest for Synth/PADnote
+ Copyright (C) 20012 zco
+ Author: zco
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+
+//Based Upon AdNoteTest.h and SubNoteTest.h
+#include <cxxtest/TestSuite.h>
+#include <iostream>
+#include <fstream>
+#include <ctime>
+#include <string>
+#include "../Misc/Master.h"
+#include "../Misc/Util.h"
+#include "../Synth/PADnote.h"
+#include "../Params/Presets.h"
+#include "../DSP/FFTwrapper.h"
+#include "../globals.h"
+SYNTH_T *synth;
+
+using namespace std;
+
+class PadNoteTest:public CxxTest::TestSuite
+{
+ public:
+ PADnote *note;
+ Master *master;
+ FFTwrapper *fft;
+ Controller *controller;
+ unsigned char testnote;
+
+
+ float *outR, *outL;
+
+ void setUp() {
+ synth = new SYNTH_T;
+ //First the sensible settings and variables that have to be set:
+ synth->buffersize = 256;
+
+ outL = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ *(outL + i) = 0;
+ outR = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ *(outR + i) = 0;
+
+ //next the bad global variables that for some reason have not been properly placed in some
+ //initialization routine, but rather exist as cryptic oneliners in main.cpp:
+ denormalkillbuf = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ denormalkillbuf[i] = 0;
+
+ //phew, glad to get thouse out of my way. took me a lot of sweat and gdb to get this far...
+
+ fft = new FFTwrapper(synth->oscilsize);
+ //prepare the default settings
+ PADnoteParameters *defaultPreset = new PADnoteParameters(fft,NULL);
+
+
+ //Assert defaults
+ ///TS_ASSERT(!defaultPreset->VoicePar[1].Enabled);
+
+ XMLwrapper *wrap = new XMLwrapper();
+ cout << string(SOURCE_DIR) + string("/guitar-adnote.xmz")
+ << endl;
+ wrap->loadXMLfile(string(SOURCE_DIR)
+ + string("/guitar-adnote.xmz"));
+ TS_ASSERT(wrap->enterbranch("MASTER"));
+ TS_ASSERT(wrap->enterbranch("PART", 2));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT"));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT"));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT_ITEM", 0));
+ TS_ASSERT(wrap->enterbranch("PAD_SYNTH_PARAMETERS"));
+ defaultPreset->getfromXML(wrap);
+
+
+ //defaultPreset->defaults();
+ defaultPreset->applyparameters(false);
+
+ //verify xml was loaded
+ ///TS_ASSERT(defaultPreset->VoicePar[1].Enabled);
+
+
+
+ controller = new Controller();
+
+ //lets go with.... 50! as a nice note
+ testnote = 50;
+ float freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f);
+
+ note = new PADnote(defaultPreset,
+ controller,
+ freq,
+ 120,
+ 0,
+ testnote,
+ false);
+
+ //delete defaultPreset;
+ delete wrap;
+ }
+
+ void willNoteBeRunButIsHereForLinkingReasonsHowsThisForCamelCaseEh()
+ {
+ master = new Master();
+ }
+
+ void tearDown() {
+ delete note;
+ delete controller;
+ delete fft;
+ delete [] outL;
+ delete [] outR;
+ delete [] denormalkillbuf;
+ FFT_cleanup();
+ delete synth;
+ }
+
+ void testDefaults() {
+ int sampleCount = 0;
+
+
+//#define WRITE_OUTPUT
+
+#ifdef WRITE_OUTPUT
+ ofstream file("padnoteout", ios::out);
+#endif
+ note->noteout(outL, outR);
+
+#ifdef WRITE_OUTPUT
+ for(int i = 0; i < synth->buffersize; ++i)
+ file << outL[i] << std::endl;
+
+#endif
+ sampleCount += synth->buffersize;
+
+ TS_ASSERT_DELTA(outL[255], 0.0660f, 0.0001f);
+
+
+ note->relasekey();
+
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.0729f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], 0.060818f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], 0.036895f, 0.0005f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.006623f, 0.0001f);
+
+ while(!note->finished()) {
+ note->noteout(outL, outR);
+
+#ifdef WRITE_OUTPUT
+ for(int i = 0; i < synth->buffersize; ++i)
+ file << outL[i] << std::endl;
+
+#endif
+ sampleCount += synth->buffersize;
+ }
+#ifdef WRITE_OUTPUT
+ file.close();
+#endif
+
+ TS_ASSERT_EQUALS(sampleCount, 2304);
+ }
+
+#define OUTPUT_PROFILE
+#ifdef OUTPUT_PROFILE
+ void testSpeed() {
+ const int samps = 15000;
+
+ int t_on = clock(); // timer before calling func
+ for(int i = 0; i < samps; ++i)
+ note->noteout(outL, outR);
+ int t_off = clock(); // timer when func returns
+
+ printf("PadNoteTest: %f seconds for %d Samples to be generated.\n",
+ (static_cast<float>(t_off - t_on)) / CLOCKS_PER_SEC, samps);
+ }
+#endif
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h
new file mode 100644
index 0000000..b88e9ba
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h
@@ -0,0 +1,119 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ PluginTest.h - CxxTest for embedding zyn
+ Copyright (C) 2013-2013 Mark McCurry
+ Authors: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <cxxtest/TestSuite.h>
+#include <cmath>
+#include <cstdlib>
+#include <iostream>
+#include <fstream>
+#include <string>
+#include "../Misc/Master.h"
+#include "../Misc/Util.h"
+#include "../globals.h"
+SYNTH_T *synth;
+
+using namespace std;
+
+char *instance_name=(char*)"";
+
+class PluginTest:public CxxTest::TestSuite
+{
+ public:
+ void setUp() {
+ synth = new SYNTH_T;
+ synth->buffersize = 256;
+ synth->samplerate = 48000;
+ synth->alias();
+
+ outL = new float[1024];
+ for(int i = 0; i < synth->buffersize; ++i)
+ outL[i] = 0.0f;
+ outR = new float[1024];
+ for(int i = 0; i < synth->buffersize; ++i)
+ outR[i] = 0.0f;
+
+ //next the bad global variables that for some reason have not been properly placed in some
+ //initialization routine, but rather exist as cryptic oneliners in main.cpp:
+ denormalkillbuf = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ denormalkillbuf[i] = 0;
+
+ for(int i = 0; i < 16; ++i)
+ master[i] = new Master();
+ }
+
+ void tearDown() {
+ for(int i = 0; i < 16; ++i)
+ delete master[i];
+
+ delete[] outL;
+ delete[] outR;
+ delete synth;
+ }
+
+
+ void testInit() {
+
+ for(int x=0; x<100; ++x)
+ for(int i=0; i<16; ++i)
+ master[i]->GetAudioOutSamples(rand()%1025,
+ synth->samplerate, outL, outR);
+ }
+
+ void testPanic()
+ {
+ master[0]->setController(0, 0x64, 0);
+ master[0]->noteOn(0,64,64);
+ master[0]->AudioOut(outL, outR);
+
+ float sum = 0.0f;
+ for(int i = 0; i < synth->buffersize; ++i)
+ sum += fabs(outL[i]);
+
+ TS_ASSERT_LESS_THAN(0.1f, sum);
+ }
+
+ string loadfile(string fname) const
+ {
+ std::ifstream t(fname.c_str());
+ std::string str((std::istreambuf_iterator<char>(t)),
+ std::istreambuf_iterator<char>());
+ return str;
+ }
+
+
+ void testLoadSave(void)
+ {
+ const string fname = string(SOURCE_DIR) + "/guitar-adnote.xmz";
+ const string fdata = string("\n") + loadfile(fname);
+ char *result = NULL;
+ master[0]->putalldata((char*)fdata.c_str(), fdata.length());
+ int res = master[0]->getalldata(&result);
+
+ TS_ASSERT_EQUALS(fdata.length()+1, res);
+ TS_ASSERT(fdata == result);
+ }
+
+
+ private:
+ float *outR, *outL;
+ Master *master[16];
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h
new file mode 100644
index 0000000..2a51e95
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h
@@ -0,0 +1,41 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ RandTest.h - CxxTest for Pseudo-Random Number Generator
+ Copyright (C) 2009-2009 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include "../Misc/Util.h"
+SYNTH_T *synth;
+
+#include <cstdlib>
+#include <cstdio>
+#include <cxxtest/TestSuite.h>
+
+class RandTest:public CxxTest::TestSuite
+{
+ public:
+ void testPRNG(void) {
+ //verify RND returns expected pattern when unseeded
+ TS_ASSERT_DELTA(RND, 0.607781, 0.00001);
+ TS_ASSERT_DELTA(RND, 0.591761, 0.00001);
+ TS_ASSERT_DELTA(RND, 0.186133, 0.00001);
+ TS_ASSERT_DELTA(RND, 0.286319, 0.00001);
+ TS_ASSERT_DELTA(RND, 0.511766, 0.00001);
+ }
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/SubNoteTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/SubNoteTest.h
new file mode 100644
index 0000000..e5cefd8
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/SubNoteTest.h
@@ -0,0 +1,182 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ AdNoteTest.h - CxxTest for Synth/SUBnote
+ Copyright (C) 2009-2011 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+//Based Upon AdNoteTest.h
+#include <cxxtest/TestSuite.h>
+#include <iostream>
+#include <fstream>
+#include <ctime>
+#include <string>
+#include "../Misc/Master.h"
+#include "../Misc/Util.h"
+#include "../Synth/SUBnote.h"
+#include "../Params/Presets.h"
+#include "../globals.h"
+SYNTH_T *synth;
+
+using namespace std;
+
+class SubNoteTest:public CxxTest::TestSuite
+{
+ public:
+
+ SUBnote *note;
+ Master *master;
+ Controller *controller;
+ unsigned char testnote;
+
+
+ float *outR, *outL;
+
+ void setUp() {
+ synth = new SYNTH_T;
+ //First the sensible settings and variables that have to be set:
+ synth->buffersize = 256;
+
+ outL = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ *(outL + i) = 0;
+ outR = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ *(outR + i) = 0;
+
+ //next the bad global variables that for some reason have not been properly placed in some
+ //initialization routine, but rather exist as cryptic oneliners in main.cpp:
+ denormalkillbuf = new float[synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ denormalkillbuf[i] = 0;
+
+ //prepare the default settings
+ SUBnoteParameters *defaultPreset = new SUBnoteParameters();
+ XMLwrapper *wrap = new XMLwrapper();
+ wrap->loadXMLfile(string(SOURCE_DIR)
+ + string("/guitar-adnote.xmz"));
+ TS_ASSERT(wrap->enterbranch("MASTER"));
+ TS_ASSERT(wrap->enterbranch("PART", 1));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT"));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT"));
+ TS_ASSERT(wrap->enterbranch("INSTRUMENT_KIT_ITEM", 0));
+ TS_ASSERT(wrap->enterbranch("SUB_SYNTH_PARAMETERS"));
+ defaultPreset->getfromXML(wrap);
+
+ controller = new Controller();
+
+ //lets go with.... 50! as a nice note
+ testnote = 50;
+ float freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f);
+
+ note = new SUBnote(defaultPreset,
+ controller,
+ freq,
+ 120,
+ 0,
+ testnote,
+ false);
+ delete wrap;
+ delete defaultPreset;
+ }
+
+ void willNoteBeRunButIsHereForLinkingReasonsHowsThisForCamelCaseEh()
+ {
+ master = new Master();
+ }
+
+ void tearDown() {
+ delete controller;
+ delete note;
+ delete [] outL;
+ delete [] outR;
+ delete [] denormalkillbuf;
+ delete synth;
+ }
+
+ void testDefaults() {
+ //Note: if these tests fail it is due to the relationship between
+ //global.h::RND and SUBnote.cpp
+
+ int sampleCount = 0;
+
+//#define WRITE_OUTPUT
+
+#ifdef WRITE_OUTPUT
+ ofstream file("subnoteout", ios::out);
+#endif
+ note->noteout(outL, outR);
+#ifdef WRITE_OUTPUT
+ for(int i = 0; i < synth->buffersize; ++i)
+ file << outL[i] << std::endl;
+
+#endif
+ sampleCount += synth->buffersize;
+
+ TS_ASSERT_DELTA(outL[255], 0.0000f, 0.0001f);
+
+ note->relasekey();
+
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], 0.0016f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.0000f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.0013f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.0002f, 0.0001f);
+
+ while(!note->finished()) {
+ note->noteout(outL, outR);
+#ifdef WRITE_OUTPUT
+ for(int i = 0; i < synth->buffersize; ++i)
+ file << outL[i] << std::endl;
+
+#endif
+ sampleCount += synth->buffersize;
+ }
+#ifdef WRITE_OUTPUT
+ file.close();
+#endif
+
+ TS_ASSERT_EQUALS(sampleCount, 2304);
+ }
+
+#define OUTPUT_PROFILE
+#ifdef OUTPUT_PROFILE
+ void testSpeed() {
+ const int samps = 15000;
+
+ int t_on = clock(); // timer before calling func
+ for(int i = 0; i < samps; ++i)
+ note->noteout(outL, outR);
+ int t_off = clock(); // timer when func returns
+
+ printf("SubNoteTest: %f seconds for %d Samples to be generated.\n",
+ (static_cast<float>(t_off - t_on)) / CLOCKS_PER_SEC, samps);
+ }
+#endif
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h
new file mode 100644
index 0000000..8663500
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h
@@ -0,0 +1,183 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ AdNoteTest.h - CxxTest for Synth/ADnote
+ Copyright (C) 2009-2011 Mark McCurry
+ Copyright (C) 2009 Harald Hvaal
+ Authors: Mark McCurry, Harald Hvaal
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+
+#include <cxxtest/TestSuite.h>
+#include <iostream>
+#include <fstream>
+#include <ctime>
+#include <string>
+#include "../Misc/Util.h"
+#include "../Synth/ADnote.h"
+#include "../Synth/OscilGen.h"
+#include "../Params/Presets.h"
+#include "../DSP/FFTwrapper.h"
+#include "../globals.h"
+SYNTH_T *synth;
+
+using namespace std;
+
+
+#define BUF 256
+class AdNoteTest:public CxxTest::TestSuite
+{
+ public:
+
+ ADnote *note;
+ FFTwrapper *fft;
+ Controller *controller;
+ unsigned char testnote;
+ ADnoteParameters *params;
+ float freq;
+
+
+ float outR[BUF], outL[BUF];
+
+ void setUp() {
+ //First the sensible settings and variables that have to be set:
+ synth = new SYNTH_T;
+ synth->buffersize = BUF;
+
+ memset(outL,0,sizeof(outL));
+ memset(outR,0,sizeof(outR));
+
+ //next the bad global variables that for some reason have not been properly placed in some
+ //initialization routine, but rather exist as cryptic oneliners in main.cpp:
+ denormalkillbuf = new float[BUF];
+ memset(denormalkillbuf, 0, sizeof(float)*BUF);
+
+ fft = new FFTwrapper(BUF);
+ //prepare the default settings
+ params = new ADnoteParameters(fft);
+
+ //sawtooth to make things a bit more interesting
+ params->VoicePar[0].OscilSmp->Pcurrentbasefunc = 3;
+
+ controller = new Controller();
+
+ //lets go with.... 50! as a nice note
+ testnote = 50;
+ freq = 440.0f * powf(2.0f, (testnote - 69.0f) / 12.0f);
+
+ }
+
+ void tearDown() {
+ delete note;
+ delete controller;
+ delete fft;
+ delete [] denormalkillbuf;
+ FFT_cleanup();
+ delete synth;
+ delete params;
+ }
+
+ void run_test(int a, int b, int c, int d, int e, int f, float values[4])
+ {
+ sprng(0);
+ params->set_unison_size_index(0,a);
+ params->VoicePar[0].Unison_frequency_spread = b;
+ params->VoicePar[0].Unison_stereo_spread = c;
+ params->VoicePar[0].Unison_vibratto = d;
+ params->VoicePar[0].Unison_vibratto_speed = e;
+ params->VoicePar[0].Unison_invert_phase = f;
+
+ note = new ADnote(params, controller, freq, 120, 0, testnote, false);
+ note->noteout(outL, outR);
+ TS_ASSERT_DELTA(outL[80], values[0], 1e-5);
+ //printf("{%f,", outL[80]);
+ note->noteout(outL, outR);
+ TS_ASSERT_DELTA(outR[90], values[1], 1e-5);
+ //printf("%f,", outR[90]);
+ note->noteout(outL, outR);
+ TS_ASSERT_DELTA(outL[20], values[2], 1e-5);
+ //printf("%f,", outL[20]);
+ note->noteout(outL, outR);
+ TS_ASSERT_DELTA(outR[200], values[3], 1e-5);
+ //printf("%f},\n", outR[200]);
+ }
+
+ void testUnison() {
+ sprng(0xbeef);
+
+ float data[][4] = {
+ {-0.034547,0.034349,-0.000000,0.138284},
+ {0.023612,-0.093842,0.000000,-0.040384},
+ {-0.015980,0.001871,-0.014463,-0.000726},
+ {-0.040970,-0.000275,0.000000,-0.121016},
+ {0.019250,-0.045252,0.000270,0.105372},
+ {-0.086575,0.001130,-0.018921,0.001329},
+ {0.009203,-0.006176,0.017344,-0.003316},
+ {0.029411,-0.000248,-0.112797,-0.012883},
+ {0.043657,-0.014062,-0.003374,-0.071821},
+ {0.007973,0.068019,-0.038900,0.047639},
+ {-0.002055,0.011170,-0.058152,-0.043493},
+ {-0.005298,0.000605,-0.070932,-0.005678},
+ {0.025028,-0.027742,0.020985,-0.015417},
+ {0.074349,0.000640,0.080613,0.066636},
+ {-0.045721,0.000279,0.009819,0.032202},
+ };
+
+ int freq_spread[15];
+ int stereo_spread[15];
+ int vibrato[15];
+ int vibrato_speed[15];
+ int inv_phase[15];
+ for(int i=0; i<15; ++i)
+ {
+ freq_spread[i] = prng()%0x7f;
+ stereo_spread[i] = prng()%0x7f;
+ vibrato[i] = prng()%0x7f;
+ vibrato_speed[i] = prng()%0x7f;
+ inv_phase[i] = prng()%5;
+ }
+
+ for(int i=0; i<15; ++i)
+ {
+ run_test(i, freq_spread[i], stereo_spread[i],
+ vibrato[i], vibrato_speed[i], inv_phase[i], data[i]);
+ }
+#if 0
+ int sampleCount = 0;
+
+ sampleCount += synth->buffersize;
+
+ TS_ASSERT_DELTA(outL[255], 0.254609f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.102197f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.111422f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], -0.021375f, 0.0001f);
+
+ note->noteout(outL, outR);
+ sampleCount += synth->buffersize;
+ TS_ASSERT_DELTA(outL[255], 0.149882f, 0.0001f);
+#endif
+ }
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/XMLwrapperTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/XMLwrapperTest.h
new file mode 100644
index 0000000..bf31ae0
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/XMLwrapperTest.h
@@ -0,0 +1,70 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ XMLwrapperTest.h - CxxTest for Misc/XMLwrapper
+ Copyright (C) 2009-2009 Mark McCurry
+ Author: Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+#include <cxxtest/TestSuite.h>
+#include "../Misc/XMLwrapper.h"
+#include <string>
+#include "../globals.h"
+SYNTH_T *synth;
+using namespace std;
+
+class XMLwrapperTest:public CxxTest::TestSuite
+{
+ public:
+ void setUp() {
+ xmla = new XMLwrapper;
+ xmlb = new XMLwrapper;
+ }
+
+
+ void testAddPar() {
+ xmla->addpar("my Pa*_ramet at er", 75);
+ TS_ASSERT_EQUALS(xmla->getpar("my Pa*_ramet at er", 0, -200, 200), 75);
+ }
+
+ //here to verify that no leaks occur
+ void testLoad() {
+ string location = string(SOURCE_DIR) + string(
+ "/Tests/guitar-adnote.xmz");
+ xmla->loadXMLfile(location);
+ }
+
+ void testAnotherLoad()
+ {
+ string dat =
+ "\n<?xml version=\"1.0f\" encoding=\"UTF-8\"?>\n\
+<!DOCTYPE ZynAddSubFX-data>\n\
+<ZynAddSubFX-data version-major=\"2\" version-minor=\"4\"\n\
+version-revision=\"1\" ZynAddSubFX-author=\"Nasca Octavian Paul\">\n\
+</ZynAddSubFX-data>\n";
+ xmlb->putXMLdata(dat.c_str());
+ }
+
+ void tearDown() {
+ delete xmla;
+ delete xmlb;
+ }
+
+
+ private:
+ XMLwrapper *xmla;
+ XMLwrapper *xmlb;
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/guitar-adnote.xmz b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/guitar-adnote.xmz
new file mode 100644
index 0000000..595a770
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/guitar-adnote.xmz
@@ -0,0 +1,3842 @@
+<?xml version="1.0f" encoding="UTF-8"?>
+<!DOCTYPE ZynAddSubFX-data>
+<ZynAddSubFX-data version-major="2" version-minor="4"
+version-revision="4" ZynAddSubFX-author="Nasca Octavian Paul">
+<INFORMATION>
+<par_bool name="PADsynth_used" value="yes" />
+</INFORMATION>
+<BASE_PARAMETERS>
+<par name="max_midi_parts" value="16" />
+<par name="max_kit_items_per_instrument" value="16" />
+<par name="max_system_effects" value="4" />
+<par name="max_insertion_effects" value="8" />
+<par name="max_instrument_effects" value="3" />
+<par name="max_addsynth_voices" value="8" />
+</BASE_PARAMETERS>
+<MASTER>
+<par name="volume" value="80" />
+<par name="key_shift" value="64" />
+<par_bool name="nrpn_receive" value="yes" />
+<MICROTONAL>
+<string name="name">12tET</string>
+<string name="comment">Equal Temperament 12 notes per octave</string>
+<par_bool name="invert_up_down" value="no" />
+<par name="invert_up_down_center" value="60" />
+<par_bool name="enabled" value="no" />
+<par name="global_fine_detune" value="64" />
+<par name="a_note" value="69" />
+<par_real name="a_freq" value="440" />
+</MICROTONAL>
+<PART id="0">
+<par_bool name="enabled" value="yes" />
+<par name="volume" value="96" />
+<par name="panning" value="64" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="key_shift" value="64" />
+<par name="rcv_chn" value="0" />
+<par name="velocity_sensing" value="64" />
+<par name="velocity_offset" value="64" />
+<par_bool name="note_on" value="yes" />
+<par_bool name="poly_mode" value="yes" />
+<par name="legato_mode" value="0" />
+<par name="key_limit" value="15" />
+<INSTRUMENT>
+<INFO>
+<string name="name">Dist Guitar 2</string>
+<string name="author"></string>
+<string name="comments"></string>
+<par name="type" value="0" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="yes" />
+<ADD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="73" />
+<par name="panning" value="74" />
+<par name="velocity_sensing" value="85" />
+<par name="punch_strength" value="25" />
+<par name="punch_time" value="40" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<par name="harmonic_randomness_grouping" value="0" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="69" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="93" />
+<par name="R_dt" value="47" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="0" />
+<par name="R_val" value="64" />
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.629921" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="64" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="7" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="48" />
+<par name="A_val" value="65" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="58" />
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.543307" />
+<par name="intensity" value="29" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="19" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="34" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="70" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.629921" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+</RESONANCE>
+<VOICE id="0">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="unison_phase_randomness" value="127" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="31" />
+<par name="oscil_fm_phase" value="93" />
+<par_bool name="filter_enabled" value="yes" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="1" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="9" />
+<par name="base_function_par" value="76" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="127" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="74" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="6" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="22" />
+<par name="D_dt" value="83" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="yes" />
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.743661" />
+<par name="intensity" value="32" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="30" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="12040" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="yes" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="8" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="57" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="81" />
+<par name="A_val" value="39" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="47" />
+</FREQUENCY_ENVELOPE>
+<par_bool name="freq_lfo_enabled" value="yes" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.590551" />
+<par name="intensity" value="18" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="yes" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="65" />
+<par name="q" value="68" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+</FILTER>
+<par_bool name="filter_envelope_enabled" value="yes" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="80" />
+<par name="D_dt" value="88" />
+<par name="R_dt" value="10" />
+<par name="A_val" value="65" />
+<par name="D_val" value="21" />
+<par name="S_val" value="64" />
+<par name="R_val" value="40" />
+</FILTER_ENVELOPE>
+<par_bool name="filter_lfo_enabled" value="yes" />
+<FILTER_LFO>
+<par_real name="freq" value="0.363701" />
+<par name="intensity" value="46" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+<FM_PARAMETERS>
+<par name="input_voice" value="-1" />
+<par name="volume" value="46" />
+<par name="volume_damp" value="36" />
+<par name="velocity_sensing" value="92" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="46" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="66" />
+<par name="D_dt" value="76" />
+<par name="R_dt" value="86" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="111" />
+<par name="R_val" value="64" />
+</AMPLITUDE_ENVELOPE>
+<MODULATOR>
+<par name="detune" value="6444" />
+<par name="coarse_detune" value="2048" />
+<par name="detune_type" value="2" />
+<par_bool name="freq_envelope_enabled" value="yes" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="102" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="68" />
+<par name="A_val" value="33" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="28" />
+</FREQUENCY_ENVELOPE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+</MODULATOR>
+</FM_PARAMETERS>
+</VOICE>
+<VOICE id="1">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="unison_phase_randomness" value="127" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="0" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<par_bool name="amp_lfo_enabled" value="no" />
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="7902" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<par_bool name="freq_lfo_enabled" value="yes" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.393701" />
+<par name="intensity" value="20" />
+<par name="start_phase" value="66" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="yes" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+</VOICE>
+<VOICE id="2">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="unison_phase_randomness" value="127" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="0" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="127" />
+<par name="volume" value="100" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="127" />
+<par_bool name="amp_envelope_enabled" value="no" />
+<par_bool name="amp_lfo_enabled" value="no" />
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<par_bool name="freq_lfo_enabled" value="yes" />
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.393701" />
+<par name="intensity" value="18" />
+<par name="start_phase" value="67" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="yes" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+</VOICE>
+<VOICE id="3">
+<par_bool name="enabled" value="yes" />
+<par name="type" value="0" />
+<par name="unison_size" value="1" />
+<par name="unison_frequency_spread" value="60" />
+<par name="unison_stereo_spread" value="64" />
+<par name="unison_vibratto" value="64" />
+<par name="unison_vibratto_speed" value="64" />
+<par name="unison_invert_phase" value="0" />
+<par name="unison_phase_randomness" value="127" />
+<par name="delay" value="0" />
+<par_bool name="resonance" value="yes" />
+<par name="ext_oscil" value="-1" />
+<par name="ext_fm_oscil" value="-1" />
+<par name="oscil_phase" value="64" />
+<par name="oscil_fm_phase" value="64" />
+<par_bool name="filter_enabled" value="no" />
+<par_bool name="filter_bypass" value="no" />
+<par name="fm_enabled" value="0" />
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="0" />
+<par name="base_function_par" value="64" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="64" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="2">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="126" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="94" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+</OSCIL>
+<AMPLITUDE_PARAMETERS>
+<par name="panning" value="64" />
+<par name="volume" value="127" />
+<par_bool name="volume_minus" value="no" />
+<par name="velocity_sensing" value="70" />
+<par_bool name="amp_envelope_enabled" value="yes" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="4" />
+<par name="D_dt" value="20" />
+<par name="R_dt" value="100" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="1" />
+<par name="R_val" value="64" />
+</AMPLITUDE_ENVELOPE>
+<par_bool name="amp_lfo_enabled" value="no" />
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="0" />
+<par_bool name="freq_envelope_enabled" value="no" />
+<par_bool name="freq_lfo_enabled" value="no" />
+</FREQUENCY_PARAMETERS>
+</VOICE>
+<VOICE id="4">
+<par_bool name="enabled" value="no" />
+</VOICE>
+<VOICE id="5">
+<par_bool name="enabled" value="no" />
+</VOICE>
+<VOICE id="6">
+<par_bool name="enabled" value="no" />
+</VOICE>
+<VOICE id="7">
+<par_bool name="enabled" value="no" />
+</VOICE>
+</ADD_SYNTH_PARAMETERS>
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="6" />
+<par name="preset" value="4" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="112" />
+</par_no>
+<par_no id="1">
+<par name="par" value="65" />
+</par_no>
+<par_no id="2">
+<par name="par" value="35" />
+</par_no>
+<par_no id="3">
+<par name="par" value="97" />
+</par_no>
+<par_no id="4">
+<par name="par" value="29" />
+</par_no>
+<par_no id="7">
+<par name="par" value="83" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="7" />
+<par name="preset" value="0" />
+<EFFECT_PARAMETERS>
+<par_no id="0">
+<par name="par" value="56" />
+</par_no>
+<par_no id="10">
+<par name="par" value="7" />
+</par_no>
+<par_no id="11">
+<par name="par" value="69" />
+</par_no>
+<par_no id="12">
+<par name="par" value="89" />
+</par_no>
+<par_no id="13">
+<par name="par" value="36" />
+</par_no>
+<par_no id="15">
+<par name="par" value="6" />
+</par_no>
+<par_no id="16">
+<par name="par" value="76" />
+</par_no>
+<par_no id="17">
+<par name="par" value="64" />
+</par_no>
+<par_no id="18">
+<par name="par" value="32" />
+</par_no>
+<par_no id="20">
+<par name="par" value="9" />
+</par_no>
+<par_no id="21">
+<par name="par" value="86" />
+</par_no>
+<par_no id="22">
+<par name="par" value="75" />
+</par_no>
+<par_no id="23">
+<par name="par" value="64" />
+</par_no>
+<par_no id="26">
+<par name="par" value="36" />
+</par_no>
+<par_no id="27">
+<par name="par" value="90" />
+</par_no>
+<par_no id="28">
+<par name="par" value="57" />
+</par_no>
+<par_no id="31">
+<par name="par" value="64" />
+</par_no>
+<par_no id="32">
+<par name="par" value="64" />
+</par_no>
+<par_no id="33">
+<par name="par" value="64" />
+</par_no>
+<par_no id="36">
+<par name="par" value="64" />
+</par_no>
+<par_no id="37">
+<par name="par" value="64" />
+</par_no>
+<par_no id="38">
+<par name="par" value="64" />
+</par_no>
+<par_no id="41">
+<par name="par" value="64" />
+</par_no>
+<par_no id="42">
+<par name="par" value="64" />
+</par_no>
+<par_no id="43">
+<par name="par" value="64" />
+</par_no>
+<par_no id="46">
+<par name="par" value="64" />
+</par_no>
+<par_no id="47">
+<par name="par" value="64" />
+</par_no>
+<par_no id="48">
+<par name="par" value="64" />
+</par_no>
+</EFFECT_PARAMETERS>
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+<CONTROLLER>
+<par name="pitchwheel_bendrange" value="200" />
+<par_bool name="expression_receive" value="yes" />
+<par name="panning_depth" value="64" />
+<par name="filter_cutoff_depth" value="64" />
+<par name="filter_q_depth" value="64" />
+<par name="bandwidth_depth" value="64" />
+<par name="mod_wheel_depth" value="80" />
+<par_bool name="mod_wheel_exponential" value="no" />
+<par_bool name="fm_amp_receive" value="yes" />
+<par_bool name="volume_receive" value="no" />
+<par_bool name="sustain_receive" value="yes" />
+<par_bool name="portamento_receive" value="yes" />
+<par name="portamento_time" value="64" />
+<par name="portamento_pitchthresh" value="3" />
+<par name="portamento_pitchthreshtype" value="1" />
+<par name="portamento_portamento" value="0" />
+<par name="portamento_updowntimestretch" value="64" />
+<par name="portamento_proportional" value="0" />
+<par name="portamento_proprate" value="80" />
+<par name="portamento_propdepth" value="90" />
+<par name="resonance_center_depth" value="64" />
+<par name="resonance_bandwidth_depth" value="64" />
+</CONTROLLER>
+</PART>
+<PART id="1">
+<par_bool name="enabled" value="yes" />
+<par name="volume" value="96" />
+<par name="panning" value="64" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="key_shift" value="64" />
+<par name="rcv_chn" value="1" />
+<par name="velocity_sensing" value="64" />
+<par name="velocity_offset" value="64" />
+<par_bool name="note_on" value="yes" />
+<par_bool name="poly_mode" value="yes" />
+<par name="legato_mode" value="0" />
+<par name="key_limit" value="15" />
+<INSTRUMENT>
+<INFO>
+<string name="name"></string>
+<string name="author"></string>
+<string name="comments"></string>
+<par name="type" value="0" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="no" />
+<par_bool name="sub_enabled" value="yes" />
+<SUB_SYNTH_PARAMETERS>
+<par name="num_stages" value="4" />
+<par name="harmonic_mag_type" value="0" />
+<par name="start" value="2" />
+<HARMONICS>
+<HARMONIC id="0">
+<par name="mag" value="127" />
+<par name="relbw" value="31" />
+</HARMONIC>
+<HARMONIC id="1">
+<par name="mag" value="99" />
+<par name="relbw" value="57" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="90" />
+<par name="relbw" value="82" />
+</HARMONIC>
+<HARMONIC id="3">
+<par name="mag" value="75" />
+<par name="relbw" value="74" />
+</HARMONIC>
+<HARMONIC id="4">
+<par name="mag" value="75" />
+<par name="relbw" value="64" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="92" />
+<par name="relbw" value="47" />
+</HARMONIC>
+<HARMONIC id="6">
+<par name="mag" value="112" />
+<par name="relbw" value="107" />
+</HARMONIC>
+<HARMONIC id="8">
+<par name="mag" value="122" />
+<par name="relbw" value="64" />
+</HARMONIC>
+</HARMONICS>
+<AMPLITUDE_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="volume" value="96" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="90" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+</AMPLITUDE_ENVELOPE>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par_bool name="fixed_freq" value="no" />
+<par name="fixed_freq_et" value="103" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="overtone_spread_type" value="0" />
+<par name="overtone_spread_par1" value="0" />
+<par name="overtone_spread_par2" value="0" />
+<par name="overtone_spread_par3" value="0" />
+<par name="detune_type" value="1" />
+<par name="bandwidth" value="40" />
+<par name="bandwidth_scale" value="38" />
+<par_bool name="freq_envelope_enabled" value="yes" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="18" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="86" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+</FREQUENCY_ENVELOPE>
+<par_bool name="band_width_envelope_enabled" value="yes" />
+<BANDWIDTH_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="70" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="100" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+</BANDWIDTH_ENVELOPE>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par_bool name="enabled" value="yes" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="4" />
+<par name="freq" value="80" />
+<par name="q" value="40" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+</FILTER>
+<par name="filter_velocity_sensing" value="64" />
+<par name="filter_velocity_sensing_amplitude" value="64" />
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="98" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+</FILTER_ENVELOPE>
+</FILTER_PARAMETERS>
+</SUB_SYNTH_PARAMETERS>
+<par_bool name="pad_enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+<CONTROLLER>
+<par name="pitchwheel_bendrange" value="200" />
+<par_bool name="expression_receive" value="yes" />
+<par name="panning_depth" value="64" />
+<par name="filter_cutoff_depth" value="64" />
+<par name="filter_q_depth" value="64" />
+<par name="bandwidth_depth" value="64" />
+<par name="mod_wheel_depth" value="80" />
+<par_bool name="mod_wheel_exponential" value="no" />
+<par_bool name="fm_amp_receive" value="yes" />
+<par_bool name="volume_receive" value="yes" />
+<par_bool name="sustain_receive" value="yes" />
+<par_bool name="portamento_receive" value="yes" />
+<par name="portamento_time" value="64" />
+<par name="portamento_pitchthresh" value="3" />
+<par name="portamento_pitchthreshtype" value="1" />
+<par name="portamento_portamento" value="0" />
+<par name="portamento_updowntimestretch" value="64" />
+<par name="portamento_proportional" value="0" />
+<par name="portamento_proprate" value="80" />
+<par name="portamento_propdepth" value="90" />
+<par name="resonance_center_depth" value="64" />
+<par name="resonance_bandwidth_depth" value="64" />
+</CONTROLLER>
+</PART>
+<PART id="2">
+<par_bool name="enabled" value="yes" />
+<par name="volume" value="96" />
+<par name="panning" value="64" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="key_shift" value="64" />
+<par name="rcv_chn" value="2" />
+<par name="velocity_sensing" value="64" />
+<par name="velocity_offset" value="64" />
+<par_bool name="note_on" value="yes" />
+<par_bool name="poly_mode" value="yes" />
+<par name="legato_mode" value="0" />
+<par name="key_limit" value="15" />
+<INSTRUMENT>
+<INFO>
+<string name="name"></string>
+<string name="author"></string>
+<string name="comments"></string>
+<par name="type" value="0" />
+</INFO>
+<INSTRUMENT_KIT>
+<par name="kit_mode" value="0" />
+<par_bool name="drum_mode" value="no" />
+<INSTRUMENT_KIT_ITEM id="0">
+<par_bool name="enabled" value="yes" />
+<string name="name"></string>
+<par_bool name="muted" value="no" />
+<par name="min_key" value="0" />
+<par name="max_key" value="127" />
+<par name="send_to_instrument_effect" value="0" />
+<par_bool name="add_enabled" value="no" />
+<par_bool name="sub_enabled" value="no" />
+<par_bool name="pad_enabled" value="yes" />
+<PAD_SYNTH_PARAMETERS>
+<par_bool name="stereo" value="yes" />
+<par name="mode" value="0" />
+<par name="bandwidth" value="500" />
+<par name="bandwidth_scale" value="0" />
+<HARMONIC_PROFILE>
+<par name="base_type" value="0" />
+<par name="base_par1" value="80" />
+<par name="frequency_multiplier" value="0" />
+<par name="modulator_par1" value="0" />
+<par name="modulator_frequency" value="30" />
+<par name="width" value="127" />
+<par name="amplitude_multiplier_type" value="0" />
+<par name="amplitude_multiplier_mode" value="0" />
+<par name="amplitude_multiplier_par1" value="80" />
+<par name="amplitude_multiplier_par2" value="64" />
+<par_bool name="autoscale" value="yes" />
+<par name="one_half" value="0" />
+</HARMONIC_PROFILE>
+<OSCIL>
+<par name="harmonic_mag_type" value="0" />
+<par name="base_function" value="127" />
+<par name="base_function_par" value="42" />
+<par name="base_function_modulation" value="0" />
+<par name="base_function_modulation_par1" value="64" />
+<par name="base_function_modulation_par2" value="64" />
+<par name="base_function_modulation_par3" value="32" />
+<par name="modulation" value="0" />
+<par name="modulation_par1" value="64" />
+<par name="modulation_par2" value="64" />
+<par name="modulation_par3" value="32" />
+<par name="wave_shaping" value="64" />
+<par name="wave_shaping_function" value="0" />
+<par name="filter_type" value="0" />
+<par name="filter_par1" value="64" />
+<par name="filter_par2" value="64" />
+<par name="filter_before_wave_shaping" value="0" />
+<par name="spectrum_adjust_type" value="0" />
+<par name="spectrum_adjust_par" value="64" />
+<par name="rand" value="127" />
+<par name="amp_rand_type" value="0" />
+<par name="amp_rand_power" value="64" />
+<par name="harmonic_shift" value="0" />
+<par_bool name="harmonic_shift_first" value="no" />
+<par name="adaptive_harmonics" value="0" />
+<par name="adaptive_harmonics_base_frequency" value="128" />
+<par name="adaptive_harmonics_power" value="100" />
+<HARMONICS>
+<HARMONIC id="1">
+<par name="mag" value="127" />
+<par name="phase" value="64" />
+</HARMONIC>
+<HARMONIC id="2">
+<par name="mag" value="42" />
+<par name="phase" value="48" />
+</HARMONIC>
+<HARMONIC id="5">
+<par name="mag" value="79" />
+<par name="phase" value="64" />
+</HARMONIC>
+</HARMONICS>
+<BASE_FUNCTION>
+<BF_HARMONIC id="1">
+<par_real name="cos" value="-0.506187" />
+<par_real name="sin" value="0.862424" />
+</BF_HARMONIC>
+<BF_HARMONIC id="2">
+<par_real name="cos" value="0.245501" />
+<par_real name="sin" value="0.439639" />
+</BF_HARMONIC>
+<BF_HARMONIC id="3">
+<par_real name="cos" value="0.00473351" />
+<par_real name="sin" value="0.000101671" />
+</BF_HARMONIC>
+<BF_HARMONIC id="4">
+<par_real name="cos" value="-0.130203" />
+<par_real name="sin" value="0.211306" />
+</BF_HARMONIC>
+<BF_HARMONIC id="5">
+<par_real name="cos" value="0.0950538" />
+<par_real name="sin" value="0.179153" />
+</BF_HARMONIC>
+<BF_HARMONIC id="6">
+<par_real name="cos" value="-0.260415" />
+<par_real name="sin" value="0.451949" />
+</BF_HARMONIC>
+<BF_HARMONIC id="7">
+<par_real name="cos" value="-0.0764092" />
+<par_real name="sin" value="0.118242" />
+</BF_HARMONIC>
+<BF_HARMONIC id="8">
+<par_real name="cos" value="0.0573746" />
+<par_real name="sin" value="0.113984" />
+</BF_HARMONIC>
+<BF_HARMONIC id="9">
+<par_real name="cos" value="0.00472436" />
+<par_real name="sin" value="0.000304799" />
+</BF_HARMONIC>
+<BF_HARMONIC id="10">
+<par_real name="cos" value="-0.0548339" />
+<par_real name="sin" value="0.0809846" />
+</BF_HARMONIC>
+<BF_HARMONIC id="11">
+<par_real name="cos" value="0.0401998" />
+<par_real name="sin" value="0.084325" />
+</BF_HARMONIC>
+<BF_HARMONIC id="12">
+<par_real name="cos" value="0.133313" />
+<par_real name="sin" value="0.230693" />
+</BF_HARMONIC>
+<BF_HARMONIC id="13">
+<par_real name="cos" value="-0.0431713" />
+<par_real name="sin" value="0.0609008" />
+</BF_HARMONIC>
+<BF_HARMONIC id="14">
+<par_real name="cos" value="0.0303488" />
+<par_real name="sin" value="0.0673473" />
+</BF_HARMONIC>
+<BF_HARMONIC id="15">
+<par_real name="cos" value="0.00470609" />
+<par_real name="sin" value="0.000507285" />
+</BF_HARMONIC>
+<BF_HARMONIC id="16">
+<par_real name="cos" value="-0.0358448" />
+<par_real name="sin" value="0.0483312" />
+</BF_HARMONIC>
+<BF_HARMONIC id="17">
+<par_real name="cos" value="0.023945" />
+<par_real name="sin" value="0.0563362" />
+</BF_HARMONIC>
+<BF_HARMONIC id="18">
+<par_real name="cos" value="0.007173" />
+<par_real name="sin" value="0.000661409" />
+</BF_HARMONIC>
+<BF_HARMONIC id="19">
+<par_real name="cos" value="-0.0308003" />
+<par_real name="sin" value="0.0397176" />
+</BF_HARMONIC>
+<BF_HARMONIC id="20">
+<par_real name="cos" value="0.0194379" />
+<par_real name="sin" value="0.048606" />
+</BF_HARMONIC>
+<BF_HARMONIC id="21">
+<par_real name="cos" value="0.00467874" />
+<par_real name="sin" value="0.000708701" />
+</BF_HARMONIC>
+<BF_HARMONIC id="22">
+<par_real name="cos" value="-0.0271038" />
+<par_real name="sin" value="0.0334425" />
+</BF_HARMONIC>
+<BF_HARMONIC id="23">
+<par_real name="cos" value="0.0160859" />
+<par_real name="sin" value="0.0428721" />
+</BF_HARMONIC>
+<BF_HARMONIC id="24">
+<par_real name="cos" value="-0.0635397" />
+<par_real name="sin" value="0.111492" />
+</BF_HARMONIC>
+<BF_HARMONIC id="25">
+<par_real name="cos" value="-0.0242698" />
+<par_real name="sin" value="0.0286646" />
+</BF_HARMONIC>
+<BF_HARMONIC id="26">
+<par_real name="cos" value="0.0134896" />
+<par_real name="sin" value="0.038443" />
+</BF_HARMONIC>
+<BF_HARMONIC id="27">
+<par_real name="cos" value="0.00464235" />
+<par_real name="sin" value="0.000908624" />
+</BF_HARMONIC>
+<BF_HARMONIC id="28">
+<par_real name="cos" value="-0.0220209" />
+<par_real name="sin" value="0.0249037" />
+</BF_HARMONIC>
+<BF_HARMONIC id="29">
+<par_real name="cos" value="0.011415" />
+<par_real name="sin" value="0.0349132" />
+</BF_HARMONIC>
+<BF_HARMONIC id="30">
+<par_real name="cos" value="0.0544109" />
+<par_real name="sin" value="0.0948502" />
+</BF_HARMONIC>
+<BF_HARMONIC id="31">
+<par_real name="cos" value="-0.0201869" />
+<par_real name="sin" value="0.021865" />
+</BF_HARMONIC>
+<BF_HARMONIC id="32">
+<par_real name="cos" value="0.00971598" />
+<par_real name="sin" value="0.0320293" />
+</BF_HARMONIC>
+<BF_HARMONIC id="33">
+<par_real name="cos" value="0.00459703" />
+<par_real name="sin" value="0.00110664" />
+</BF_HARMONIC>
+<BF_HARMONIC id="34">
+<par_real name="cos" value="-0.0186581" />
+<par_real name="sin" value="0.019358" />
+</BF_HARMONIC>
+<BF_HARMONIC id="35">
+<par_real name="cos" value="0.00829623" />
+<par_real name="sin" value="0.0296249" />
+</BF_HARMONIC>
+<BF_HARMONIC id="36">
+<par_real name="cos" value="0.00704871" />
+<par_real name="sin" value="0.00131127" />
+</BF_HARMONIC>
+<BF_HARMONIC id="37">
+<par_real name="cos" value="-0.01736" />
+<par_real name="sin" value="0.0172537" />
+</BF_HARMONIC>
+<BF_HARMONIC id="38">
+<par_real name="cos" value="0.00709008" />
+<par_real name="sin" value="0.0275859" />
+</BF_HARMONIC>
+<BF_HARMONIC id="39">
+<par_real name="cos" value="0.00454288" />
+<par_real name="sin" value="0.00130231" />
+</BF_HARMONIC>
+<BF_HARMONIC id="40">
+<par_real name="cos" value="-0.0162406" />
+<par_real name="sin" value="0.0154623" />
+</BF_HARMONIC>
+<BF_HARMONIC id="41">
+<par_real name="cos" value="0.00605104" />
+<par_real name="sin" value="0.025832" />
+</BF_HARMONIC>
+<BF_HARMONIC id="42">
+<par_real name="cos" value="-0.0355113" />
+<par_real name="sin" value="0.0633351" />
+</BF_HARMONIC>
+<BF_HARMONIC id="43">
+<par_real name="cos" value="-0.0152625" />
+<par_real name="sin" value="0.0139187" />
+</BF_HARMONIC>
+<BF_HARMONIC id="44">
+<par_real name="cos" value="0.0051453" />
+<par_real name="sin" value="0.0243045" />
+</BF_HARMONIC>
+<BF_HARMONIC id="45">
+<par_real name="cos" value="0.00448001" />
+<par_real name="sin" value="0.00149525" />
+</BF_HARMONIC>
+<BF_HARMONIC id="46">
+<par_real name="cos" value="-0.014398" />
+<par_real name="sin" value="0.0125747" />
+</BF_HARMONIC>
+<BF_HARMONIC id="47">
+<par_real name="cos" value="0.0043477" />
+<par_real name="sin" value="0.0229598" />
+</BF_HARMONIC>
+<BF_HARMONIC id="48">
+<par_real name="cos" value="0.0344987" />
+<par_real name="sin" value="0.0612963" />
+</BF_HARMONIC>
+<BF_HARMONIC id="49">
+<par_real name="cos" value="-0.0136262" />
+<par_real name="sin" value="0.0113943" />
+</BF_HARMONIC>
+<BF_HARMONIC id="50">
+<par_real name="cos" value="0.00363913" />
+<par_real name="sin" value="0.0217648" />
+</BF_HARMONIC>
+<BF_HARMONIC id="51">
+<par_real name="cos" value="0.00440856" />
+<par_real name="sin" value="0.00168505" />
+</BF_HARMONIC>
+<BF_HARMONIC id="52">
+<par_real name="cos" value="-0.0129311" />
+<par_real name="sin" value="0.0103493" />
+</BF_HARMONIC>
+<BF_HARMONIC id="53">
+<par_real name="cos" value="0.00300478" />
+<par_real name="sin" value="0.0206938" />
+</BF_HARMONIC>
+<BF_HARMONIC id="54">
+<par_real name="cos" value="0.00684433" />
+<par_real name="sin" value="0.0019383" />
+</BF_HARMONIC>
+<BF_HARMONIC id="55">
+<par_real name="cos" value="-0.0123" />
+<par_real name="sin" value="0.00941819" />
+</BF_HARMONIC>
+<BF_HARMONIC id="56">
+<par_real name="cos" value="0.00243307" />
+<par_real name="sin" value="0.0197267" />
+</BF_HARMONIC>
+<BF_HARMONIC id="57">
+<par_real name="cos" value="0.0043287" />
+<par_real name="sin" value="0.0018713" />
+</BF_HARMONIC>
+<BF_HARMONIC id="58">
+<par_real name="cos" value="-0.0117231" />
+<par_real name="sin" value="0.00858347" />
+</BF_HARMONIC>
+<BF_HARMONIC id="59">
+<par_real name="cos" value="0.00191474" />
+<par_real name="sin" value="0.0188477" />
+</BF_HARMONIC>
+<BF_HARMONIC id="60">
+<par_real name="cos" value="-0.0244369" />
+<par_real name="sin" value="0.0443835" />
+</BF_HARMONIC>
+<BF_HARMONIC id="61">
+<par_real name="cos" value="-0.0111925" />
+<par_real name="sin" value="0.00783135" />
+</BF_HARMONIC>
+<BF_HARMONIC id="62">
+<par_real name="cos" value="0.00144234" />
+<par_real name="sin" value="0.0180435" />
+</BF_HARMONIC>
+<BF_HARMONIC id="63">
+<par_real name="cos" value="0.0042406" />
+<par_real name="sin" value="0.00205363" />
+</BF_HARMONIC>
+<BF_HARMONIC id="64">
+<par_real name="cos" value="-0.0107015" />
+<par_real name="sin" value="0.00715051" />
+</BF_HARMONIC>
+<BF_HARMONIC id="65">
+<par_real name="cos" value="0.00100981" />
+<par_real name="sin" value="0.0173039" />
+</BF_HARMONIC>
+<BF_HARMONIC id="66">
+<par_real name="cos" value="0.0252506" />
+<par_real name="sin" value="0.0463135" />
+</BF_HARMONIC>
+<BF_HARMONIC id="67">
+<par_real name="cos" value="-0.010245" />
+<par_real name="sin" value="0.00653169" />
+</BF_HARMONIC>
+<BF_HARMONIC id="68">
+<par_real name="cos" value="0.000612159" />
+<par_real name="sin" value="0.0166202" />
+</BF_HARMONIC>
+<BF_HARMONIC id="69">
+<par_real name="cos" value="0.00414447" />
+<par_real name="sin" value="0.00223164" />
+</BF_HARMONIC>
+<BF_HARMONIC id="70">
+<par_real name="cos" value="-0.00981852" />
+<par_real name="sin" value="0.00596719" />
+</BF_HARMONIC>
+<BF_HARMONIC id="71">
+<par_real name="cos" value="0.000245228" />
+<par_real name="sin" value="0.0159851" />
+</BF_HARMONIC>
+<BF_HARMONIC id="72">
+<par_real name="cos" value="0.00656394" />
+<par_real name="sin" value="0.00253166" />
+</BF_HARMONIC>
+<BF_HARMONIC id="73">
+<par_real name="cos" value="-0.00941845" />
+<par_real name="sin" value="0.0054506" />
+</BF_HARMONIC>
+<BF_HARMONIC id="74">
+<par_real name="cos" value="-9.44492e-05" />
+<par_real name="sin" value="0.0153926" />
+</BF_HARMONIC>
+<BF_HARMONIC id="75">
+<par_real name="cos" value="0.00404053" />
+<par_real name="sin" value="0.00240498" />
+</BF_HARMONIC>
+<BF_HARMONIC id="76">
+<par_real name="cos" value="-0.00904174" />
+<par_real name="sin" value="0.0049765" />
+</BF_HARMONIC>
+<BF_HARMONIC id="77">
+<par_real name="cos" value="-0.000409801" />
+<par_real name="sin" value="0.0148378" />
+</BF_HARMONIC>
+<BF_HARMONIC id="78">
+<par_real name="cos" value="-0.0186278" />
+<par_real name="sin" value="0.0343902" />
+</BF_HARMONIC>
+<BF_HARMONIC id="79">
+<par_real name="cos" value="-0.00868573" />
+<par_real name="sin" value="0.00454033" />
+</BF_HARMONIC>
+<BF_HARMONIC id="80">
+<par_real name="cos" value="-0.000703311" />
+<par_real name="sin" value="0.0143162" />
+</BF_HARMONIC>
+<BF_HARMONIC id="81">
+<par_real name="cos" value="0.003929" />
+<par_real name="sin" value="0.00257328" />
+</BF_HARMONIC>
+<BF_HARMONIC id="82">
+<par_real name="cos" value="-0.00834825" />
+<par_real name="sin" value="0.00413815" />
+</BF_HARMONIC>
+<BF_HARMONIC id="83">
+<par_real name="cos" value="-0.000977109" />
+<par_real name="sin" value="0.0138243" />
+</BF_HARMONIC>
+<BF_HARMONIC id="84">
+<par_real name="cos" value="0.0197674" />
+<par_real name="sin" value="0.0379326" />
+</BF_HARMONIC>
+<BF_HARMONIC id="85">
+<par_real name="cos" value="-0.00802744" />
+<par_real name="sin" value="0.0037666" />
+</BF_HARMONIC>
+<BF_HARMONIC id="86">
+<par_real name="cos" value="-0.00123302" />
+<par_real name="sin" value="0.0133588" />
+</BF_HARMONIC>
+<BF_HARMONIC id="87">
+<par_real name="cos" value="0.00381014" />
+<par_real name="sin" value="0.0027362" />
+</BF_HARMONIC>
+<BF_HARMONIC id="88">
+<par_real name="cos" value="-0.00772164" />
+<par_real name="sin" value="0.00342277" />
+</BF_HARMONIC>
+<BF_HARMONIC id="89">
+<par_real name="cos" value="-0.00147261" />
+<par_real name="sin" value="0.0129171" />
+</BF_HARMONIC>
+<BF_HARMONIC id="90">
+<par_real name="cos" value="0.00621313" />
+<par_real name="sin" value="0.00308127" />
+</BF_HARMONIC>
+<BF_HARMONIC id="91">
+<par_real name="cos" value="-0.00742947" />
+<par_real name="sin" value="0.00310412" />
+</BF_HARMONIC>
+<BF_HARMONIC id="92">
+<par_real name="cos" value="-0.00169727" />
+<par_real name="sin" value="0.0124968" />
+</BF_HARMONIC>
+<BF_HARMONIC id="93">
+<par_real name="cos" value="0.00368421" />
+<par_real name="sin" value="0.00289341" />
+</BF_HARMONIC>
+<BF_HARMONIC id="94">
+<par_real name="cos" value="-0.00714969" />
+<par_real name="sin" value="0.00280846" />
+</BF_HARMONIC>
+<BF_HARMONIC id="95">
+<par_real name="cos" value="-0.00190818" />
+<par_real name="sin" value="0.0120958" />
+</BF_HARMONIC>
+<BF_HARMONIC id="96">
+<par_real name="cos" value="-0.0151572" />
+<par_real name="sin" value="0.0282861" />
+</BF_HARMONIC>
+<BF_HARMONIC id="97">
+<par_real name="cos" value="-0.00688127" />
+<par_real name="sin" value="0.00253384" />
+</BF_HARMONIC>
+<BF_HARMONIC id="98">
+<par_real name="cos" value="-0.0021064" />
+<par_real name="sin" value="0.0117124" />
+</BF_HARMONIC>
+<BF_HARMONIC id="99">
+<par_real name="cos" value="0.0035515" />
+<par_real name="sin" value="0.00304459" />
+</BF_HARMONIC>
+<BF_HARMONIC id="100">
+<par_real name="cos" value="-0.00662325" />
+<par_real name="sin" value="0.00227855" />
+</BF_HARMONIC>
+<BF_HARMONIC id="101">
+<par_real name="cos" value="-0.00229286" />
+<par_real name="sin" value="0.0113449" />
+</BF_HARMONIC>
+<BF_HARMONIC id="102">
+<par_real name="cos" value="0.0160253" />
+<par_real name="sin" value="0.0326272" />
+</BF_HARMONIC>
+<BF_HARMONIC id="103">
+<par_real name="cos" value="-0.00637485" />
+<par_real name="sin" value="0.00204108" />
+</BF_HARMONIC>
+<BF_HARMONIC id="104">
+<par_real name="cos" value="-0.00246836" />
+<par_real name="sin" value="0.0109921" />
+</BF_HARMONIC>
+<BF_HARMONIC id="105">
+<par_real name="cos" value="0.00341229" />
+<par_real name="sin" value="0.00318942" />
+</BF_HARMONIC>
+<BF_HARMONIC id="106">
+<par_real name="cos" value="-0.00613533" />
+<par_real name="sin" value="0.00182009" />
+</BF_HARMONIC>
+<BF_HARMONIC id="107">
+<par_real name="cos" value="-0.00263364" />
+<par_real name="sin" value="0.0106527" />
+</BF_HARMONIC>
+<BF_HARMONIC id="108">
+<par_real name="cos" value="0.00579888" />
+<par_real name="sin" value="0.00357792" />
+</BF_HARMONIC>
+<BF_HARMONIC id="109">
+<par_real name="cos" value="-0.00590406" />
+<par_real name="sin" value="0.00161439" />
+</BF_HARMONIC>
+<BF_HARMONIC id="110">
+<par_real name="cos" value="-0.00278934" />
+<par_real name="sin" value="0.0103255" />
+</BF_HARMONIC>
+<BF_HARMONIC id="111">
+<par_real name="cos" value="0.00326692" />
+<par_real name="sin" value="0.00332762" />
+</BF_HARMONIC>
+<BF_HARMONIC id="112">
+<par_real name="cos" value="-0.00568049" />
+<par_real name="sin" value="0.00142289" />
+</BF_HARMONIC>
+<BF_HARMONIC id="113">
+<par_real name="cos" value="-0.00293604" />
+<par_real name="sin" value="0.0100096" />
+</BF_HARMONIC>
+<BF_HARMONIC id="114">
+<par_real name="cos" value="-0.0129414" />
+<par_real name="sin" value="0.0241986" />
+</BF_HARMONIC>
+<BF_HARMONIC id="115">
+<par_real name="cos" value="-0.00546412" />
+<par_real name="sin" value="0.00124463" />
+</BF_HARMONIC>
+<BF_HARMONIC id="116">
+<par_real name="cos" value="-0.00307426" />
+<par_real name="sin" value="0.00970417" />
+</BF_HARMONIC>
+<BF_HARMONIC id="117">
+<par_real name="cos" value="0.0031157" />
+<par_real name="sin" value="0.00345891" />
+</BF_HARMONIC>
+<BF_HARMONIC id="118">
+<par_real name="cos" value="-0.00525452" />
+<par_real name="sin" value="0.00107875" />
+</BF_HARMONIC>
+<BF_HARMONIC id="119">
+<par_real name="cos" value="-0.00320446" />
+<par_real name="sin" value="0.00940844" />
+</BF_HARMONIC>
+<BF_HARMONIC id="120">
+<par_real name="cos" value="0.0132198" />
+<par_real name="sin" value="0.0289822" />
+</BF_HARMONIC>
+<BF_HARMONIC id="121">
+<par_real name="cos" value="-0.00505127" />
+<par_real name="sin" value="0.000924449" />
+</BF_HARMONIC>
+<BF_HARMONIC id="122">
+<par_real name="cos" value="-0.00332706" />
+<par_real name="sin" value="0.00912169" />
+</BF_HARMONIC>
+<BF_HARMONIC id="123">
+<par_real name="cos" value="0.00295897" />
+<par_real name="sin" value="0.00358304" />
+</BF_HARMONIC>
+<BF_HARMONIC id="124">
+<par_real name="cos" value="-0.00485404" />
+<par_real name="sin" value="0.000781022" />
+</BF_HARMONIC>
+<BF_HARMONIC id="125">
+<par_real name="cos" value="-0.00344246" />
+<par_real name="sin" value="0.00884338" />
+</BF_HARMONIC>
+<BF_HARMONIC id="126">
+<par_real name="cos" value="0.00532941" />
+<par_real name="sin" value="0.00401357" />
+</BF_HARMONIC>
+<BF_HARMONIC id="127">
+<par_real name="cos" value="-0.00466252" />
+<par_real name="sin" value="0.000647821" />
+</BF_HARMONIC>
+<BF_HARMONIC id="128">
+<par_real name="cos" value="-0.00355099" />
+<par_real name="sin" value="0.00857284" />
+</BF_HARMONIC>
+<BF_HARMONIC id="129">
+<par_real name="cos" value="0.00279707" />
+<par_real name="sin" value="0.00369976" />
+</BF_HARMONIC>
+<BF_HARMONIC id="130">
+<par_real name="cos" value="-0.00447642" />
+<par_real name="sin" value="0.000524249" />
+</BF_HARMONIC>
+<BF_HARMONIC id="131">
+<par_real name="cos" value="-0.00365297" />
+<par_real name="sin" value="0.00830969" />
+</BF_HARMONIC>
+<BF_HARMONIC id="132">
+<par_real name="cos" value="-0.0114829" />
+<par_real name="sin" value="0.0212727" />
+</BF_HARMONIC>
+<BF_HARMONIC id="133">
+<par_real name="cos" value="-0.00429548" />
+<par_real name="sin" value="0.000409766" />
+</BF_HARMONIC>
+<BF_HARMONIC id="134">
+<par_real name="cos" value="-0.00374869" />
+<par_real name="sin" value="0.00805342" />
+</BF_HARMONIC>
+<BF_HARMONIC id="135">
+<par_real name="cos" value="0.00263038" />
+<par_real name="sin" value="0.00380885" />
+</BF_HARMONIC>
+<BF_HARMONIC id="136">
+<par_real name="cos" value="-0.00411949" />
+<par_real name="sin" value="0.000303872" />
+</BF_HARMONIC>
+<BF_HARMONIC id="137">
+<par_real name="cos" value="-0.00383842" />
+<par_real name="sin" value="0.00780363" />
+</BF_HARMONIC>
+<BF_HARMONIC id="138">
+<par_real name="cos" value="0.0109713" />
+<par_real name="sin" value="0.0263173" />
+</BF_HARMONIC>
+<BF_HARMONIC id="139">
+<par_real name="cos" value="-0.00394824" />
+<par_real name="sin" value="0.000206109" />
+</BF_HARMONIC>
+<BF_HARMONIC id="140">
+<par_real name="cos" value="-0.00392238" />
+<par_real name="sin" value="0.00755998" />
+</BF_HARMONIC>
+<BF_HARMONIC id="141">
+<par_real name="cos" value="0.00245927" />
+<par_real name="sin" value="0.0039101" />
+</BF_HARMONIC>
+<BF_HARMONIC id="142">
+<par_real name="cos" value="-0.00378155" />
+<par_real name="sin" value="0.000116053" />
+</BF_HARMONIC>
+<BF_HARMONIC id="143">
+<par_real name="cos" value="-0.00400083" />
+<par_real name="sin" value="0.00732212" />
+</BF_HARMONIC>
+<BF_HARMONIC id="144">
+<par_real name="cos" value="0.004814" />
+<par_real name="sin" value="0.00438142" />
+</BF_HARMONIC>
+<BF_HARMONIC id="145">
+<par_real name="cos" value="-0.00361924" />
+<par_real name="sin" value="3.3312e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="146">
+<par_real name="cos" value="-0.00407396" />
+<par_real name="sin" value="0.00708975" />
+</BF_HARMONIC>
+<BF_HARMONIC id="147">
+<par_real name="cos" value="0.0022841" />
+<par_real name="sin" value="0.00400333" />
+</BF_HARMONIC>
+<BF_HARMONIC id="148">
+<par_real name="cos" value="-0.00346117" />
+<par_real name="sin" value="-4.24771e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="149">
+<par_real name="cos" value="-0.00414196" />
+<par_real name="sin" value="0.00686261" />
+</BF_HARMONIC>
+<BF_HARMONIC id="150">
+<par_real name="cos" value="-0.0105176" />
+<par_real name="sin" value="0.0190617" />
+</BF_HARMONIC>
+<BF_HARMONIC id="151">
+<par_real name="cos" value="-0.00330722" />
+<par_real name="sin" value="-0.000111653" />
+</BF_HARMONIC>
+<BF_HARMONIC id="152">
+<par_real name="cos" value="-0.00420502" />
+<par_real name="sin" value="0.00664044" />
+</BF_HARMONIC>
+<BF_HARMONIC id="153">
+<par_real name="cos" value="0.00210529" />
+<par_real name="sin" value="0.00408835" />
+</BF_HARMONIC>
+<BF_HARMONIC id="154">
+<par_real name="cos" value="-0.00315725" />
+<par_real name="sin" value="-0.000174531" />
+</BF_HARMONIC>
+<BF_HARMONIC id="155">
+<par_real name="cos" value="-0.00426329" />
+<par_real name="sin" value="0.00642303" />
+</BF_HARMONIC>
+<BF_HARMONIC id="156">
+<par_real name="cos" value="0.00908063" />
+<par_real name="sin" value="0.0242646" />
+</BF_HARMONIC>
+<BF_HARMONIC id="157">
+<par_real name="cos" value="-0.00301115" />
+<par_real name="sin" value="-0.000231406" />
+</BF_HARMONIC>
+<BF_HARMONIC id="158">
+<par_real name="cos" value="-0.00431694" />
+<par_real name="sin" value="0.00621018" />
+</BF_HARMONIC>
+<BF_HARMONIC id="159">
+<par_real name="cos" value="0.00192321" />
+<par_real name="sin" value="0.00416502" />
+</BF_HARMONIC>
+<BF_HARMONIC id="160">
+<par_real name="cos" value="-0.00286884" />
+<par_real name="sin" value="-0.000282556" />
+</BF_HARMONIC>
+<BF_HARMONIC id="161">
+<par_real name="cos" value="-0.00436612" />
+<par_real name="sin" value="0.00600169" />
+</BF_HARMONIC>
+<BF_HARMONIC id="162">
+<par_real name="cos" value="0.00426277" />
+<par_real name="sin" value="0.00467614" />
+</BF_HARMONIC>
+<BF_HARMONIC id="163">
+<par_real name="cos" value="-0.0027302" />
+<par_real name="sin" value="-0.000328238" />
+</BF_HARMONIC>
+<BF_HARMONIC id="164">
+<par_real name="cos" value="-0.00441095" />
+<par_real name="sin" value="0.00579741" />
+</BF_HARMONIC>
+<BF_HARMONIC id="165">
+<par_real name="cos" value="0.00173827" />
+<par_real name="sin" value="0.00423322" />
+</BF_HARMONIC>
+<BF_HARMONIC id="166">
+<par_real name="cos" value="-0.00259517" />
+<par_real name="sin" value="-0.000368698" />
+</BF_HARMONIC>
+<BF_HARMONIC id="167">
+<par_real name="cos" value="-0.00445158" />
+<par_real name="sin" value="0.00559719" />
+</BF_HARMONIC>
+<BF_HARMONIC id="168">
+<par_real name="cos" value="-0.00988985" />
+<par_real name="sin" value="0.0173089" />
+</BF_HARMONIC>
+<BF_HARMONIC id="169">
+<par_real name="cos" value="-0.00246367" />
+<par_real name="sin" value="-0.000404166" />
+</BF_HARMONIC>
+<BF_HARMONIC id="170">
+<par_real name="cos" value="-0.00448813" />
+<par_real name="sin" value="0.00540088" />
+</BF_HARMONIC>
+<BF_HARMONIC id="171">
+<par_real name="cos" value="0.00155087" />
+<par_real name="sin" value="0.00429284" />
+</BF_HARMONIC>
+<BF_HARMONIC id="172">
+<par_real name="cos" value="-0.00233563" />
+<par_real name="sin" value="-0.000434861" />
+</BF_HARMONIC>
+<BF_HARMONIC id="173">
+<par_real name="cos" value="-0.00452071" />
+<par_real name="sin" value="0.00520837" />
+</BF_HARMONIC>
+<BF_HARMONIC id="174">
+<par_real name="cos" value="0.00743572" />
+<par_real name="sin" value="0.0226072" />
+</BF_HARMONIC>
+<BF_HARMONIC id="175">
+<par_real name="cos" value="-0.002211" />
+<par_real name="sin" value="-0.000460988" />
+</BF_HARMONIC>
+<BF_HARMONIC id="176">
+<par_real name="cos" value="-0.00454943" />
+<par_real name="sin" value="0.00501952" />
+</BF_HARMONIC>
+<BF_HARMONIC id="177">
+<par_real name="cos" value="0.00136145" />
+<par_real name="sin" value="0.00434377" />
+</BF_HARMONIC>
+<BF_HARMONIC id="178">
+<par_real name="cos" value="-0.0020897" />
+<par_real name="sin" value="-0.000482745" />
+</BF_HARMONIC>
+<BF_HARMONIC id="179">
+<par_real name="cos" value="-0.00457441" />
+<par_real name="sin" value="0.00483427" />
+</BF_HARMONIC>
+<BF_HARMONIC id="180">
+<par_real name="cos" value="0.00368653" />
+<par_real name="sin" value="0.0048939" />
+</BF_HARMONIC>
+<BF_HARMONIC id="181">
+<par_real name="cos" value="-0.00197169" />
+<par_real name="sin" value="-0.000500317" />
+</BF_HARMONIC>
+<BF_HARMONIC id="182">
+<par_real name="cos" value="-0.00459574" />
+<par_real name="sin" value="0.00465248" />
+</BF_HARMONIC>
+<BF_HARMONIC id="183">
+<par_real name="cos" value="0.0011704" />
+<par_real name="sin" value="0.00438595" />
+</BF_HARMONIC>
+<BF_HARMONIC id="184">
+<par_real name="cos" value="-0.00185694" />
+<par_real name="sin" value="-0.000513884" />
+</BF_HARMONIC>
+<BF_HARMONIC id="185">
+<par_real name="cos" value="-0.00461352" />
+<par_real name="sin" value="0.0044741" />
+</BF_HARMONIC>
+<BF_HARMONIC id="186">
+<par_real name="cos" value="-0.00949969" />
+<par_real name="sin" value="0.0158569" />
+</BF_HARMONIC>
+<BF_HARMONIC id="187">
+<par_real name="cos" value="-0.00174538" />
+<par_real name="sin" value="-0.000523615" />
+</BF_HARMONIC>
+<BF_HARMONIC id="188">
+<par_real name="cos" value="-0.00462784" />
+<par_real name="sin" value="0.00429905" />
+</BF_HARMONIC>
+<BF_HARMONIC id="189">
+<par_real name="cos" value="0.000978161" />
+<par_real name="sin" value="0.00441933" />
+</BF_HARMONIC>
+<BF_HARMONIC id="190">
+<par_real name="cos" value="-0.00163699" />
+<par_real name="sin" value="-0.000529672" />
+</BF_HARMONIC>
+<BF_HARMONIC id="191">
+<par_real name="cos" value="-0.00463881" />
+<par_real name="sin" value="0.00412724" />
+</BF_HARMONIC>
+<BF_HARMONIC id="192">
+<par_real name="cos" value="0.00597104" />
+<par_real name="sin" value="0.0212099" />
+</BF_HARMONIC>
+<BF_HARMONIC id="193">
+<par_real name="cos" value="-0.00153173" />
+<par_real name="sin" value="-0.000532213" />
+</BF_HARMONIC>
+<BF_HARMONIC id="194">
+<par_real name="cos" value="-0.00464649" />
+<par_real name="sin" value="0.00395862" />
+</BF_HARMONIC>
+<BF_HARMONIC id="195">
+<par_real name="cos" value="0.000785138" />
+<par_real name="sin" value="0.00444388" />
+</BF_HARMONIC>
+<BF_HARMONIC id="196">
+<par_real name="cos" value="-0.00142957" />
+<par_real name="sin" value="-0.000531387" />
+</BF_HARMONIC>
+<BF_HARMONIC id="197">
+<par_real name="cos" value="-0.00465097" />
+<par_real name="sin" value="0.00379314" />
+</BF_HARMONIC>
+<BF_HARMONIC id="198">
+<par_real name="cos" value="0.00309644" />
+<par_real name="sin" value="0.0050325" />
+</BF_HARMONIC>
+<BF_HARMONIC id="199">
+<par_real name="cos" value="-0.00133047" />
+<par_real name="sin" value="-0.000527338" />
+</BF_HARMONIC>
+<BF_HARMONIC id="200">
+<par_real name="cos" value="-0.00465236" />
+<par_real name="sin" value="0.00363074" />
+</BF_HARMONIC>
+<BF_HARMONIC id="201">
+<par_real name="cos" value="0.000591756" />
+<par_real name="sin" value="0.00445959" />
+</BF_HARMONIC>
+<BF_HARMONIC id="202">
+<par_real name="cos" value="-0.0012344" />
+<par_real name="sin" value="-0.000520205" />
+</BF_HARMONIC>
+<BF_HARMONIC id="203">
+<par_real name="cos" value="-0.00465072" />
+<par_real name="sin" value="0.00347137" />
+</BF_HARMONIC>
+<BF_HARMONIC id="204">
+<par_real name="cos" value="-0.00927822" />
+<par_real name="sin" value="0.014604" />
+</BF_HARMONIC>
+<BF_HARMONIC id="205">
+<par_real name="cos" value="-0.00114136" />
+<par_real name="sin" value="-0.000510123" />
+</BF_HARMONIC>
+<BF_HARMONIC id="206">
+<par_real name="cos" value="-0.00464611" />
+<par_real name="sin" value="0.00331499" />
+</BF_HARMONIC>
+<BF_HARMONIC id="207">
+<par_real name="cos" value="0.000398437" />
+<par_real name="sin" value="0.00446647" />
+</BF_HARMONIC>
+<BF_HARMONIC id="208">
+<par_real name="cos" value="-0.00105129" />
+<par_real name="sin" value="-0.000497221" />
+</BF_HARMONIC>
+<BF_HARMONIC id="209">
+<par_real name="cos" value="-0.00463864" />
+<par_real name="sin" value="0.00316158" />
+</BF_HARMONIC>
+<BF_HARMONIC id="210">
+<par_real name="cos" value="0.00464758" />
+<par_real name="sin" value="0.0199843" />
+</BF_HARMONIC>
+<BF_HARMONIC id="211">
+<par_real name="cos" value="-0.000964181" />
+<par_real name="sin" value="-0.000481626" />
+</BF_HARMONIC>
+<BF_HARMONIC id="212">
+<par_real name="cos" value="-0.00462837" />
+<par_real name="sin" value="0.00301108" />
+</BF_HARMONIC>
+<BF_HARMONIC id="213">
+<par_real name="cos" value="0.000205601" />
+<par_real name="sin" value="0.00446455" />
+</BF_HARMONIC>
+<BF_HARMONIC id="214">
+<par_real name="cos" value="-0.000880017" />
+<par_real name="sin" value="-0.000463458" />
+</BF_HARMONIC>
+<BF_HARMONIC id="215">
+<par_real name="cos" value="-0.00461537" />
+<par_real name="sin" value="0.00286348" />
+</BF_HARMONIC>
+<BF_HARMONIC id="216">
+<par_real name="cos" value="0.00250386" />
+<par_real name="sin" value="0.00509139" />
+</BF_HARMONIC>
+<BF_HARMONIC id="217">
+<par_real name="cos" value="-0.000798768" />
+<par_real name="sin" value="-0.000442836" />
+</BF_HARMONIC>
+<BF_HARMONIC id="218">
+<par_real name="cos" value="-0.00459972" />
+<par_real name="sin" value="0.00271875" />
+</BF_HARMONIC>
+<BF_HARMONIC id="219">
+<par_real name="cos" value="1.36644e-05" />
+<par_real name="sin" value="0.00445389" />
+</BF_HARMONIC>
+<BF_HARMONIC id="220">
+<par_real name="cos" value="-0.000720422" />
+<par_real name="sin" value="-0.000419875" />
+</BF_HARMONIC>
+<BF_HARMONIC id="221">
+<par_real name="cos" value="-0.00458149" />
+<par_real name="sin" value="0.00257684" />
+</BF_HARMONIC>
+<BF_HARMONIC id="222">
+<par_real name="cos" value="-0.00917516" />
+<par_real name="sin" value="0.013483" />
+</BF_HARMONIC>
+<BF_HARMONIC id="223">
+<par_real name="cos" value="-0.000644958" />
+<par_real name="sin" value="-0.000394687" />
+</BF_HARMONIC>
+<BF_HARMONIC id="224">
+<par_real name="cos" value="-0.00456075" />
+<par_real name="sin" value="0.00243777" />
+</BF_HARMONIC>
+<BF_HARMONIC id="225">
+<par_real name="cos" value="-0.00017696" />
+<par_real name="sin" value="0.00443456" />
+</BF_HARMONIC>
+<BF_HARMONIC id="226">
+<par_real name="cos" value="-0.000572355" />
+<par_real name="sin" value="-0.00036738" />
+</BF_HARMONIC>
+<BF_HARMONIC id="227">
+<par_real name="cos" value="-0.00453756" />
+<par_real name="sin" value="0.00230149" />
+</BF_HARMONIC>
+<BF_HARMONIC id="228">
+<par_real name="cos" value="0.0034422" />
+<par_real name="sin" value="0.0188715" />
+</BF_HARMONIC>
+<BF_HARMONIC id="229">
+<par_real name="cos" value="-0.000502597" />
+<par_real name="sin" value="-0.00033806" />
+</BF_HARMONIC>
+<BF_HARMONIC id="230">
+<par_real name="cos" value="-0.00451199" />
+<par_real name="sin" value="0.00216799" />
+</BF_HARMONIC>
+<BF_HARMONIC id="231">
+<par_real name="cos" value="-0.000365862" />
+<par_real name="sin" value="0.00440665" />
+</BF_HARMONIC>
+<BF_HARMONIC id="232">
+<par_real name="cos" value="-0.000435668" />
+<par_real name="sin" value="-0.000306832" />
+</BF_HARMONIC>
+<BF_HARMONIC id="233">
+<par_real name="cos" value="-0.00448412" />
+<par_real name="sin" value="0.00203726" />
+</BF_HARMONIC>
+<BF_HARMONIC id="234">
+<par_real name="cos" value="0.00192006" />
+<par_real name="sin" value="0.00507168" />
+</BF_HARMONIC>
+<BF_HARMONIC id="235">
+<par_real name="cos" value="-0.000371549" />
+<par_real name="sin" value="-0.000273797" />
+</BF_HARMONIC>
+<BF_HARMONIC id="236">
+<par_real name="cos" value="-0.00445401" />
+<par_real name="sin" value="0.00190928" />
+</BF_HARMONIC>
+<BF_HARMONIC id="237">
+<par_real name="cos" value="-0.00055264" />
+<par_real name="sin" value="0.00437028" />
+</BF_HARMONIC>
+<BF_HARMONIC id="238">
+<par_real name="cos" value="-0.000310224" />
+<par_real name="sin" value="-0.000239053" />
+</BF_HARMONIC>
+<BF_HARMONIC id="239">
+<par_real name="cos" value="-0.00442172" />
+<par_real name="sin" value="0.00178404" />
+</BF_HARMONIC>
+<BF_HARMONIC id="240">
+<par_real name="cos" value="-0.00915204" />
+<par_real name="sin" value="0.0124483" />
+</BF_HARMONIC>
+<BF_HARMONIC id="241">
+<par_real name="cos" value="-0.000251676" />
+<par_real name="sin" value="-0.000202698" />
+</BF_HARMONIC>
+<BF_HARMONIC id="242">
+<par_real name="cos" value="-0.00438733" />
+<par_real name="sin" value="0.00166153" />
+</BF_HARMONIC>
+<BF_HARMONIC id="243">
+<par_real name="cos" value="-0.000736895" />
+<par_real name="sin" value="0.00432557" />
+</BF_HARMONIC>
+<BF_HARMONIC id="244">
+<par_real name="cos" value="-0.000195888" />
+<par_real name="sin" value="-0.000164826" />
+</BF_HARMONIC>
+<BF_HARMONIC id="245">
+<par_real name="cos" value="-0.00435089" />
+<par_real name="sin" value="0.00154173" />
+</BF_HARMONIC>
+<BF_HARMONIC id="246">
+<par_real name="cos" value="0.00234164" />
+<par_real name="sin" value="0.0178312" />
+</BF_HARMONIC>
+<BF_HARMONIC id="247">
+<par_real name="cos" value="-0.000142844" />
+<par_real name="sin" value="-0.000125529" />
+</BF_HARMONIC>
+<BF_HARMONIC id="248">
+<par_real name="cos" value="-0.00431248" />
+<par_real name="sin" value="0.00142465" />
+</BF_HARMONIC>
+<BF_HARMONIC id="249">
+<par_real name="cos" value="-0.00091824" />
+<par_real name="sin" value="0.00427268" />
+</BF_HARMONIC>
+<BF_HARMONIC id="250">
+<par_real name="cos" value="-9.2526e-05" />
+<par_real name="sin" value="-8.49005e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="251">
+<par_real name="cos" value="-0.00427215" />
+<par_real name="sin" value="0.00131027" />
+</BF_HARMONIC>
+<BF_HARMONIC id="252">
+<par_real name="cos" value="0.00135601" />
+<par_real name="sin" value="0.00497611" />
+</BF_HARMONIC>
+<BF_HARMONIC id="253">
+<par_real name="cos" value="-4.49171e-05" />
+<par_real name="sin" value="-4.30281e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="254">
+<par_real name="cos" value="-0.00422997" />
+<par_real name="sin" value="0.00119858" />
+</BF_HARMONIC>
+<BF_HARMONIC id="255">
+<par_real name="cos" value="-0.00109629" />
+<par_real name="sin" value="0.00421178" />
+</BF_HARMONIC>
+<BF_HARMONIC id="257">
+<par_real name="cos" value="-0.00418602" />
+<par_real name="sin" value="0.00108959" />
+</BF_HARMONIC>
+<BF_HARMONIC id="258">
+<par_real name="cos" value="-0.0091786" />
+<par_real name="sin" value="0.0114691" />
+</BF_HARMONIC>
+<BF_HARMONIC id="259">
+<par_real name="cos" value="4.22432e-05" />
+<par_real name="sin" value="4.40978e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="260">
+<par_real name="cos" value="-0.00414033" />
+<par_real name="sin" value="0.000983267" />
+</BF_HARMONIC>
+<BF_HARMONIC id="261">
+<par_real name="cos" value="-0.00127068" />
+<par_real name="sin" value="0.00414305" />
+</BF_HARMONIC>
+<BF_HARMONIC id="262">
+<par_real name="cos" value="8.18309e-05" />
+<par_real name="sin" value="8.91807e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="263">
+<par_real name="cos" value="-0.004093" />
+<par_real name="sin" value="0.000879621" />
+</BF_HARMONIC>
+<BF_HARMONIC id="264">
+<par_real name="cos" value="0.00133878" />
+<par_real name="sin" value="0.0168368" />
+</BF_HARMONIC>
+<BF_HARMONIC id="265">
+<par_real name="cos" value="0.000118782" />
+<par_real name="sin" value="0.000135166" />
+</BF_HARMONIC>
+<BF_HARMONIC id="266">
+<par_real name="cos" value="-0.00404406" />
+<par_real name="sin" value="0.000778649" />
+</BF_HARMONIC>
+<BF_HARMONIC id="267">
+<par_real name="cos" value="-0.00144103" />
+<par_real name="sin" value="0.00406671" />
+</BF_HARMONIC>
+<BF_HARMONIC id="268">
+<par_real name="cos" value="0.000153115" />
+<par_real name="sin" value="0.000181971" />
+</BF_HARMONIC>
+<BF_HARMONIC id="269">
+<par_real name="cos" value="-0.0039936" />
+<par_real name="sin" value="0.00068034" />
+</BF_HARMONIC>
+<BF_HARMONIC id="270">
+<par_real name="cos" value="0.000822075" />
+<par_real name="sin" value="0.00480898" />
+</BF_HARMONIC>
+<BF_HARMONIC id="271">
+<par_real name="cos" value="0.00018485" />
+<par_real name="sin" value="0.000229516" />
+</BF_HARMONIC>
+<BF_HARMONIC id="272">
+<par_real name="cos" value="-0.00394167" />
+<par_real name="sin" value="0.000584691" />
+</BF_HARMONIC>
+<BF_HARMONIC id="273">
+<par_real name="cos" value="-0.00160701" />
+<par_real name="sin" value="0.00398298" />
+</BF_HARMONIC>
+<BF_HARMONIC id="274">
+<par_real name="cos" value="0.000214008" />
+<par_real name="sin" value="0.000277723" />
+</BF_HARMONIC>
+<BF_HARMONIC id="275">
+<par_real name="cos" value="-0.00388832" />
+<par_real name="sin" value="0.000491695" />
+</BF_HARMONIC>
+<BF_HARMONIC id="276">
+<par_real name="cos" value="-0.00923009" />
+<par_real name="sin" value="0.0105252" />
+</BF_HARMONIC>
+<BF_HARMONIC id="277">
+<par_real name="cos" value="0.000240609" />
+<par_real name="sin" value="0.000326513" />
+</BF_HARMONIC>
+<BF_HARMONIC id="278">
+<par_real name="cos" value="-0.00383365" />
+<par_real name="sin" value="0.000401347" />
+</BF_HARMONIC>
+<BF_HARMONIC id="279">
+<par_real name="cos" value="-0.00176828" />
+<par_real name="sin" value="0.00389208" />
+</BF_HARMONIC>
+<BF_HARMONIC id="280">
+<par_real name="cos" value="0.000264675" />
+<par_real name="sin" value="0.00037581" />
+</BF_HARMONIC>
+<BF_HARMONIC id="281">
+<par_real name="cos" value="-0.00377768" />
+<par_real name="sin" value="0.000313642" />
+</BF_HARMONIC>
+<BF_HARMONIC id="282">
+<par_real name="cos" value="0.000430326" />
+<par_real name="sin" value="0.0158706" />
+</BF_HARMONIC>
+<BF_HARMONIC id="283">
+<par_real name="cos" value="0.000286228" />
+<par_real name="sin" value="0.000425539" />
+</BF_HARMONIC>
+<BF_HARMONIC id="284">
+<par_real name="cos" value="-0.00372051" />
+<par_real name="sin" value="0.000228574" />
+</BF_HARMONIC>
+<BF_HARMONIC id="285">
+<par_real name="cos" value="-0.0019245" />
+<par_real name="sin" value="0.0037943" />
+</BF_HARMONIC>
+<BF_HARMONIC id="286">
+<par_real name="cos" value="0.000305292" />
+<par_real name="sin" value="0.000475627" />
+</BF_HARMONIC>
+<BF_HARMONIC id="287">
+<par_real name="cos" value="-0.00366218" />
+<par_real name="sin" value="0.000146138" />
+</BF_HARMONIC>
+<BF_HARMONIC id="288">
+<par_real name="cos" value="0.000327888" />
+<par_real name="sin" value="0.00457606" />
+</BF_HARMONIC>
+<BF_HARMONIC id="289">
+<par_real name="cos" value="0.000321889" />
+<par_real name="sin" value="0.000526" />
+</BF_HARMONIC>
+<BF_HARMONIC id="290">
+<par_real name="cos" value="-0.00360275" />
+<par_real name="sin" value="6.63261e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="291">
+<par_real name="cos" value="-0.00207537" />
+<par_real name="sin" value="0.00368989" />
+</BF_HARMONIC>
+<BF_HARMONIC id="292">
+<par_real name="cos" value="0.000336044" />
+<par_real name="sin" value="0.000576586" />
+</BF_HARMONIC>
+<BF_HARMONIC id="293">
+<par_real name="cos" value="-0.00354229" />
+<par_real name="sin" value="-1.08677e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="294">
+<par_real name="cos" value="-0.00928624" />
+<par_real name="sin" value="0.00960369" />
+</BF_HARMONIC>
+<BF_HARMONIC id="295">
+<par_real name="cos" value="0.000347784" />
+<par_real name="sin" value="0.000627318" />
+</BF_HARMONIC>
+<BF_HARMONIC id="296">
+<par_real name="cos" value="-0.00348086" />
+<par_real name="sin" value="-8.54503e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="297">
+<par_real name="cos" value="-0.00222059" />
+<par_real name="sin" value="0.00357915" />
+</BF_HARMONIC>
+<BF_HARMONIC id="298">
+<par_real name="cos" value="0.000357132" />
+<par_real name="sin" value="0.000678123" />
+</BF_HARMONIC>
+<BF_HARMONIC id="299">
+<par_real name="cos" value="-0.00341852" />
+<par_real name="sin" value="-0.000157429" />
+</BF_HARMONIC>
+<BF_HARMONIC id="300">
+<par_real name="cos" value="-0.000384771" />
+<par_real name="sin" value="0.0149221" />
+</BF_HARMONIC>
+<BF_HARMONIC id="301">
+<par_real name="cos" value="0.000364116" />
+<par_real name="sin" value="0.000728935" />
+</BF_HARMONIC>
+<BF_HARMONIC id="302">
+<par_real name="cos" value="-0.00335534" />
+<par_real name="sin" value="-0.000226813" />
+</BF_HARMONIC>
+<BF_HARMONIC id="303">
+<par_real name="cos" value="-0.00235986" />
+<par_real name="sin" value="0.00346236" />
+</BF_HARMONIC>
+<BF_HARMONIC id="304">
+<par_real name="cos" value="0.000368765" />
+<par_real name="sin" value="0.000779687" />
+</BF_HARMONIC>
+<BF_HARMONIC id="305">
+<par_real name="cos" value="-0.00329136" />
+<par_real name="sin" value="-0.000293611" />
+</BF_HARMONIC>
+<BF_HARMONIC id="306">
+<par_real name="cos" value="-0.000117939" />
+<par_real name="sin" value="0.00428444" />
+</BF_HARMONIC>
+<BF_HARMONIC id="307">
+<par_real name="cos" value="0.000371104" />
+<par_real name="sin" value="0.000830313" />
+</BF_HARMONIC>
+<BF_HARMONIC id="308">
+<par_real name="cos" value="-0.00322666" />
+<par_real name="sin" value="-0.000357831" />
+</BF_HARMONIC>
+<BF_HARMONIC id="309">
+<par_real name="cos" value="-0.00249292" />
+<par_real name="sin" value="0.00333986" />
+</BF_HARMONIC>
+<BF_HARMONIC id="310">
+<par_real name="cos" value="0.000371166" />
+<par_real name="sin" value="0.00088075" />
+</BF_HARMONIC>
+<BF_HARMONIC id="311">
+<par_real name="cos" value="-0.00316131" />
+<par_real name="sin" value="-0.000419483" />
+</BF_HARMONIC>
+<BF_HARMONIC id="312">
+<par_real name="cos" value="-0.00933048" />
+<par_real name="sin" value="0.00869763" />
+</BF_HARMONIC>
+<BF_HARMONIC id="313">
+<par_real name="cos" value="0.000368978" />
+<par_real name="sin" value="0.000930935" />
+</BF_HARMONIC>
+<BF_HARMONIC id="314">
+<par_real name="cos" value="-0.00309534" />
+<par_real name="sin" value="-0.000478579" />
+</BF_HARMONIC>
+<BF_HARMONIC id="315">
+<par_real name="cos" value="-0.00261954" />
+<par_real name="sin" value="0.00321196" />
+</BF_HARMONIC>
+<BF_HARMONIC id="316">
+<par_real name="cos" value="0.000364572" />
+<par_real name="sin" value="0.0009808" />
+</BF_HARMONIC>
+<BF_HARMONIC id="317">
+<par_real name="cos" value="-0.00302883" />
+<par_real name="sin" value="-0.00053513" />
+</BF_HARMONIC>
+<BF_HARMONIC id="318">
+<par_real name="cos" value="-0.00110641" />
+<par_real name="sin" value="0.0139857" />
+</BF_HARMONIC>
+<BF_HARMONIC id="319">
+<par_real name="cos" value="0.00035798" />
+<par_real name="sin" value="0.00103029" />
+</BF_HARMONIC>
+<BF_HARMONIC id="320">
+<par_real name="cos" value="-0.00296184" />
+<par_real name="sin" value="-0.000589147" />
+</BF_HARMONIC>
+<BF_HARMONIC id="321">
+<par_real name="cos" value="-0.00273946" />
+<par_real name="sin" value="0.00307901" />
+</BF_HARMONIC>
+<BF_HARMONIC id="322">
+<par_real name="cos" value="0.000349234" />
+<par_real name="sin" value="0.00107934" />
+</BF_HARMONIC>
+<BF_HARMONIC id="323">
+<par_real name="cos" value="-0.00289442" />
+<par_real name="sin" value="-0.000640643" />
+</BF_HARMONIC>
+<BF_HARMONIC id="324">
+<par_real name="cos" value="-0.000507963" />
+<par_real name="sin" value="0.00394241" />
+</BF_HARMONIC>
+<BF_HARMONIC id="325">
+<par_real name="cos" value="0.000338367" />
+<par_real name="sin" value="0.0011279" />
+</BF_HARMONIC>
+<BF_HARMONIC id="326">
+<par_real name="cos" value="-0.00282665" />
+<par_real name="sin" value="-0.000689633" />
+</BF_HARMONIC>
+<BF_HARMONIC id="327">
+<par_real name="cos" value="-0.00285247" />
+<par_real name="sin" value="0.00294135" />
+</BF_HARMONIC>
+<BF_HARMONIC id="328">
+<par_real name="cos" value="0.000325413" />
+<par_real name="sin" value="0.00117589" />
+</BF_HARMONIC>
+<BF_HARMONIC id="329">
+<par_real name="cos" value="-0.00275856" />
+<par_real name="sin" value="-0.000736131" />
+</BF_HARMONIC>
+<BF_HARMONIC id="330">
+<par_real name="cos" value="-0.00934919" />
+<par_real name="sin" value="0.00780419" />
+</BF_HARMONIC>
+<BF_HARMONIC id="331">
+<par_real name="cos" value="0.000310408" />
+<par_real name="sin" value="0.00122329" />
+</BF_HARMONIC>
+<BF_HARMONIC id="332">
+<par_real name="cos" value="-0.00269023" />
+<par_real name="sin" value="-0.00078015" />
+</BF_HARMONIC>
+<BF_HARMONIC id="333">
+<par_real name="cos" value="-0.00295836" />
+<par_real name="sin" value="0.00279934" />
+</BF_HARMONIC>
+<BF_HARMONIC id="334">
+<par_real name="cos" value="0.000293387" />
+<par_real name="sin" value="0.00127001" />
+</BF_HARMONIC>
+<BF_HARMONIC id="335">
+<par_real name="cos" value="-0.0026217" />
+<par_real name="sin" value="-0.00082171" />
+</BF_HARMONIC>
+<BF_HARMONIC id="336">
+<par_real name="cos" value="-0.00173413" />
+<par_real name="sin" value="0.0130599" />
+</BF_HARMONIC>
+<BF_HARMONIC id="337">
+<par_real name="cos" value="0.000274387" />
+<par_real name="sin" value="0.00131602" />
+</BF_HARMONIC>
+<BF_HARMONIC id="338">
+<par_real name="cos" value="-0.00255305" />
+<par_real name="sin" value="-0.000860825" />
+</BF_HARMONIC>
+<BF_HARMONIC id="339">
+<par_real name="cos" value="-0.00305697" />
+<par_real name="sin" value="0.00265336" />
+</BF_HARMONIC>
+<BF_HARMONIC id="340">
+<par_real name="cos" value="0.000253445" />
+<par_real name="sin" value="0.00136125" />
+</BF_HARMONIC>
+<BF_HARMONIC id="341">
+<par_real name="cos" value="-0.00248433" />
+<par_real name="sin" value="-0.000897516" />
+</BF_HARMONIC>
+<BF_HARMONIC id="342">
+<par_real name="cos" value="-0.000836077" />
+<par_real name="sin" value="0.00355921" />
+</BF_HARMONIC>
+<BF_HARMONIC id="343">
+<par_real name="cos" value="0.000230598" />
+<par_real name="sin" value="0.00140566" />
+</BF_HARMONIC>
+<BF_HARMONIC id="344">
+<par_real name="cos" value="-0.00241559" />
+<par_real name="sin" value="-0.000931797" />
+</BF_HARMONIC>
+<BF_HARMONIC id="345">
+<par_real name="cos" value="-0.00314812" />
+<par_real name="sin" value="0.00250378" />
+</BF_HARMONIC>
+<BF_HARMONIC id="346">
+<par_real name="cos" value="0.000205886" />
+<par_real name="sin" value="0.00144918" />
+</BF_HARMONIC>
+<BF_HARMONIC id="347">
+<par_real name="cos" value="-0.0023469" />
+<par_real name="sin" value="-0.00096369" />
+</BF_HARMONIC>
+<BF_HARMONIC id="348">
+<par_real name="cos" value="-0.00933151" />
+<par_real name="sin" value="0.00692387" />
+</BF_HARMONIC>
+<BF_HARMONIC id="349">
+<par_real name="cos" value="0.000179351" />
+<par_real name="sin" value="0.00149179" />
+</BF_HARMONIC>
+<BF_HARMONIC id="350">
+<par_real name="cos" value="-0.0022783" />
+<par_real name="sin" value="-0.000993219" />
+</BF_HARMONIC>
+<BF_HARMONIC id="351">
+<par_real name="cos" value="-0.00323168" />
+<par_real name="sin" value="0.00235098" />
+</BF_HARMONIC>
+<BF_HARMONIC id="352">
+<par_real name="cos" value="0.000151029" />
+<par_real name="sin" value="0.00153342" />
+</BF_HARMONIC>
+<BF_HARMONIC id="353">
+<par_real name="cos" value="-0.00220985" />
+<par_real name="sin" value="-0.0010204" />
+</BF_HARMONIC>
+<BF_HARMONIC id="354">
+<par_real name="cos" value="-0.00226762" />
+<par_real name="sin" value="0.0121461" />
+</BF_HARMONIC>
+<BF_HARMONIC id="355">
+<par_real name="cos" value="0.000120964" />
+<par_real name="sin" value="0.00157404" />
+</BF_HARMONIC>
+<BF_HARMONIC id="356">
+<par_real name="cos" value="-0.00214161" />
+<par_real name="sin" value="-0.00104526" />
+</BF_HARMONIC>
+<BF_HARMONIC id="357">
+<par_real name="cos" value="-0.00330753" />
+<par_real name="sin" value="0.00219537" />
+</BF_HARMONIC>
+<BF_HARMONIC id="358">
+<par_real name="cos" value="8.91979e-05" />
+<par_real name="sin" value="0.00161359" />
+</BF_HARMONIC>
+<BF_HARMONIC id="359">
+<par_real name="cos" value="-0.00207365" />
+<par_real name="sin" value="-0.00106782" />
+</BF_HARMONIC>
+<BF_HARMONIC id="360">
+<par_real name="cos" value="-0.00109764" />
+<par_real name="sin" value="0.00314485" />
+</BF_HARMONIC>
+<BF_HARMONIC id="361">
+<par_real name="cos" value="5.57728e-05" />
+<par_real name="sin" value="0.00165202" />
+</BF_HARMONIC>
+<BF_HARMONIC id="362">
+<par_real name="cos" value="-0.002006" />
+<par_real name="sin" value="-0.0010881" />
+</BF_HARMONIC>
+<BF_HARMONIC id="363">
+<par_real name="cos" value="-0.00337554" />
+<par_real name="sin" value="0.00203732" />
+</BF_HARMONIC>
+<BF_HARMONIC id="364">
+<par_real name="cos" value="2.07318e-05" />
+<par_real name="sin" value="0.0016893" />
+</BF_HARMONIC>
+<BF_HARMONIC id="365">
+<par_real name="cos" value="-0.00193872" />
+<par_real name="sin" value="-0.00110614" />
+</BF_HARMONIC>
+<BF_HARMONIC id="366">
+<par_real name="cos" value="-0.00926933" />
+<par_real name="sin" value="0.00605966" />
+</BF_HARMONIC>
+<BF_HARMONIC id="367">
+<par_real name="cos" value="-1.58807e-05" />
+<par_real name="sin" value="0.00172538" />
+</BF_HARMONIC>
+<BF_HARMONIC id="368">
+<par_real name="cos" value="-0.00187187" />
+<par_real name="sin" value="-0.00112195" />
+</BF_HARMONIC>
+<BF_HARMONIC id="369">
+<par_real name="cos" value="-0.00343566" />
+<par_real name="sin" value="0.00187726" />
+</BF_HARMONIC>
+<BF_HARMONIC id="370">
+<par_real name="cos" value="-5.402e-05" />
+<par_real name="sin" value="0.00176022" />
+</BF_HARMONIC>
+<BF_HARMONIC id="371">
+<par_real name="cos" value="-0.00180549" />
+<par_real name="sin" value="-0.00113557" />
+</BF_HARMONIC>
+<BF_HARMONIC id="372">
+<par_real name="cos" value="-0.00270722" />
+<par_real name="sin" value="0.011248" />
+</BF_HARMONIC>
+<BF_HARMONIC id="373">
+<par_real name="cos" value="-9.36411e-05" />
+<par_real name="sin" value="0.00179379" />
+</BF_HARMONIC>
+<BF_HARMONIC id="374">
+<par_real name="cos" value="-0.00173965" />
+<par_real name="sin" value="-0.00114702" />
+</BF_HARMONIC>
+<BF_HARMONIC id="375">
+<par_real name="cos" value="-0.0034878" />
+<par_real name="sin" value="0.00171556" />
+</BF_HARMONIC>
+<BF_HARMONIC id="376">
+<par_real name="cos" value="-0.000134697" />
+<par_real name="sin" value="0.00182604" />
+</BF_HARMONIC>
+<BF_HARMONIC id="377">
+<par_real name="cos" value="-0.00167439" />
+<par_real name="sin" value="-0.00115633" />
+</BF_HARMONIC>
+<BF_HARMONIC id="378">
+<par_real name="cos" value="-0.0012896" />
+<par_real name="sin" value="0.00270994" />
+</BF_HARMONIC>
+<BF_HARMONIC id="379">
+<par_real name="cos" value="-0.000177143" />
+<par_real name="sin" value="0.00185695" />
+</BF_HARMONIC>
+<BF_HARMONIC id="380">
+<par_real name="cos" value="-0.00160976" />
+<par_real name="sin" value="-0.00116353" />
+</BF_HARMONIC>
+<BF_HARMONIC id="381">
+<par_real name="cos" value="-0.00353194" />
+<par_real name="sin" value="0.00155265" />
+</BF_HARMONIC>
+<BF_HARMONIC id="382">
+<par_real name="cos" value="-0.00022093" />
+<par_real name="sin" value="0.00188646" />
+</BF_HARMONIC>
+<BF_HARMONIC id="383">
+<par_real name="cos" value="-0.00154581" />
+<par_real name="sin" value="-0.00116865" />
+</BF_HARMONIC>
+<BF_HARMONIC id="384">
+<par_real name="cos" value="-0.00915653" />
+<par_real name="sin" value="0.00521637" />
+</BF_HARMONIC>
+<BF_HARMONIC id="385">
+<par_real name="cos" value="-0.00026601" />
+<par_real name="sin" value="0.00191454" />
+</BF_HARMONIC>
+<BF_HARMONIC id="386">
+<par_real name="cos" value="-0.00148259" />
+<par_real name="sin" value="-0.00117173" />
+</BF_HARMONIC>
+<BF_HARMONIC id="387">
+<par_real name="cos" value="-0.00356803" />
+<par_real name="sin" value="0.00138893" />
+</BF_HARMONIC>
+<BF_HARMONIC id="388">
+<par_real name="cos" value="-0.000312337" />
+<par_real name="sin" value="0.00194117" />
+</BF_HARMONIC>
+<BF_HARMONIC id="389">
+<par_real name="cos" value="-0.00142015" />
+<par_real name="sin" value="-0.0011728" />
+</BF_HARMONIC>
+<BF_HARMONIC id="390">
+<par_real name="cos" value="-0.00305412" />
+<par_real name="sin" value="0.0103709" />
+</BF_HARMONIC>
+<BF_HARMONIC id="391">
+<par_real name="cos" value="-0.000359861" />
+<par_real name="sin" value="0.00196632" />
+</BF_HARMONIC>
+<BF_HARMONIC id="392">
+<par_real name="cos" value="-0.00135854" />
+<par_real name="sin" value="-0.00117189" />
+</BF_HARMONIC>
+<BF_HARMONIC id="393">
+<par_real name="cos" value="-0.0035961" />
+<par_real name="sin" value="0.00122481" />
+</BF_HARMONIC>
+<BF_HARMONIC id="394">
+<par_real name="cos" value="-0.000408532" />
+<par_real name="sin" value="0.00198994" />
+</BF_HARMONIC>
+<BF_HARMONIC id="395">
+<par_real name="cos" value="-0.0012978" />
+<par_real name="sin" value="-0.00116903" />
+</BF_HARMONIC>
+<BF_HARMONIC id="396">
+<par_real name="cos" value="-0.00141051" />
+<par_real name="sin" value="0.00226535" />
+</BF_HARMONIC>
+<BF_HARMONIC id="397">
+<par_real name="cos" value="-0.000458302" />
+<par_real name="sin" value="0.00201201" />
+</BF_HARMONIC>
+<BF_HARMONIC id="398">
+<par_real name="cos" value="-0.00123799" />
+<par_real name="sin" value="-0.00116426" />
+</BF_HARMONIC>
+<BF_HARMONIC id="399">
+<par_real name="cos" value="-0.00361615" />
+<par_real name="sin" value="0.0010607" />
+</BF_HARMONIC>
+<BF_HARMONIC id="400">
+<par_real name="cos" value="-0.000509118" />
+<par_real name="sin" value="0.00203251" />
+</BF_HARMONIC>
+<BF_HARMONIC id="401">
+<par_real name="cos" value="-0.00117914" />
+<par_real name="sin" value="-0.00115763" />
+</BF_HARMONIC>
+<BF_HARMONIC id="402">
+<par_real name="cos" value="-0.00898965" />
+<par_real name="sin" value="0.00440014" />
+</BF_HARMONIC>
+<BF_HARMONIC id="403">
+<par_real name="cos" value="-0.000560932" />
+<par_real name="sin" value="0.0020514" />
+</BF_HARMONIC>
+<BF_HARMONIC id="404">
+<par_real name="cos" value="-0.0011213" />
+<par_real name="sin" value="-0.00114916" />
+</BF_HARMONIC>
+<BF_HARMONIC id="405">
+<par_real name="cos" value="-0.00362823" />
+<par_real name="sin" value="0.000897007" />
+</BF_HARMONIC>
+<BF_HARMONIC id="406">
+<par_real name="cos" value="-0.000613691" />
+<par_real name="sin" value="0.00206868" />
+</BF_HARMONIC>
+<BF_HARMONIC id="407">
+<par_real name="cos" value="-0.00106451" />
+<par_real name="sin" value="-0.00113889" />
+</BF_HARMONIC>
+<BF_HARMONIC id="408">
+<par_real name="cos" value="-0.00331065" />
+<par_real name="sin" value="0.00952125" />
+</BF_HARMONIC>
+<BF_HARMONIC id="409">
+<par_real name="cos" value="-0.000667344" />
+<par_real name="sin" value="0.0020843" />
+</BF_HARMONIC>
+<BF_HARMONIC id="410">
+<par_real name="cos" value="-0.00100881" />
+<par_real name="sin" value="-0.00112687" />
+</BF_HARMONIC>
+<BF_HARMONIC id="411">
+<par_real name="cos" value="-0.0036324" />
+<par_real name="sin" value="0.000734121" />
+</BF_HARMONIC>
+<BF_HARMONIC id="412">
+<par_real name="cos" value="-0.000721841" />
+<par_real name="sin" value="0.00209823" />
+</BF_HARMONIC>
+<BF_HARMONIC id="413">
+<par_real name="cos" value="-0.000954255" />
+<par_real name="sin" value="-0.00111313" />
+</BF_HARMONIC>
+<BF_HARMONIC id="414">
+<par_real name="cos" value="-0.00146063" />
+<par_real name="sin" value="0.00182207" />
+</BF_HARMONIC>
+<BF_HARMONIC id="415">
+<par_real name="cos" value="-0.000777128" />
+<par_real name="sin" value="0.00211049" />
+</BF_HARMONIC>
+<BF_HARMONIC id="416">
+<par_real name="cos" value="-0.000900871" />
+<par_real name="sin" value="-0.00109771" />
+</BF_HARMONIC>
+<BF_HARMONIC id="417">
+<par_real name="cos" value="-0.00362873" />
+<par_real name="sin" value="0.000572453" />
+</BF_HARMONIC>
+<BF_HARMONIC id="418">
+<par_real name="cos" value="-0.000833153" />
+<par_real name="sin" value="0.00212102" />
+</BF_HARMONIC>
+<BF_HARMONIC id="419">
+<par_real name="cos" value="-0.000848706" />
+<par_real name="sin" value="-0.00108066" />
+</BF_HARMONIC>
+<BF_HARMONIC id="420">
+<par_real name="cos" value="-0.00876706" />
+<par_real name="sin" value="0.00361787" />
+</BF_HARMONIC>
+<BF_HARMONIC id="421">
+<par_real name="cos" value="-0.000889866" />
+<par_real name="sin" value="0.00212982" />
+</BF_HARMONIC>
+<BF_HARMONIC id="422">
+<par_real name="cos" value="-0.000797797" />
+<par_real name="sin" value="-0.00106202" />
+</BF_HARMONIC>
+<BF_HARMONIC id="423">
+<par_real name="cos" value="-0.00361734" />
+<par_real name="sin" value="0.000412394" />
+</BF_HARMONIC>
+<BF_HARMONIC id="424">
+<par_real name="cos" value="-0.000947209" />
+<par_real name="sin" value="0.00213686" />
+</BF_HARMONIC>
+<BF_HARMONIC id="425">
+<par_real name="cos" value="-0.00074818" />
+<par_real name="sin" value="-0.00104183" />
+</BF_HARMONIC>
+<BF_HARMONIC id="426">
+<par_real name="cos" value="-0.00348033" />
+<par_real name="sin" value="0.00870626" />
+</BF_HARMONIC>
+<BF_HARMONIC id="427">
+<par_real name="cos" value="-0.00100513" />
+<par_real name="sin" value="0.00214215" />
+</BF_HARMONIC>
+<BF_HARMONIC id="428">
+<par_real name="cos" value="-0.000699893" />
+<par_real name="sin" value="-0.00102014" />
+</BF_HARMONIC>
+<BF_HARMONIC id="429">
+<par_real name="cos" value="-0.00359834" />
+<par_real name="sin" value="0.000254332" />
+</BF_HARMONIC>
+<BF_HARMONIC id="430">
+<par_real name="cos" value="-0.00106358" />
+<par_real name="sin" value="0.00214565" />
+</BF_HARMONIC>
+<BF_HARMONIC id="431">
+<par_real name="cos" value="-0.00065297" />
+<par_real name="sin" value="-0.000996979" />
+</BF_HARMONIC>
+<BF_HARMONIC id="432">
+<par_real name="cos" value="-0.00144183" />
+<par_real name="sin" value="0.00139084" />
+</BF_HARMONIC>
+<BF_HARMONIC id="433">
+<par_real name="cos" value="-0.00112251" />
+<par_real name="sin" value="0.00214736" />
+</BF_HARMONIC>
+<BF_HARMONIC id="434">
+<par_real name="cos" value="-0.000607447" />
+<par_real name="sin" value="-0.000972417" />
+</BF_HARMONIC>
+<BF_HARMONIC id="435">
+<par_real name="cos" value="-0.00357188" />
+<par_real name="sin" value="9.86501e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="436">
+<par_real name="cos" value="-0.00118184" />
+<par_real name="sin" value="0.00214726" />
+</BF_HARMONIC>
+<BF_HARMONIC id="437">
+<par_real name="cos" value="-0.000563357" />
+<par_real name="sin" value="-0.000946476" />
+</BF_HARMONIC>
+<BF_HARMONIC id="438">
+<par_real name="cos" value="-0.00848936" />
+<par_real name="sin" value="0.00287689" />
+</BF_HARMONIC>
+<BF_HARMONIC id="439">
+<par_real name="cos" value="-0.00124155" />
+<par_real name="sin" value="0.00214536" />
+</BF_HARMONIC>
+<BF_HARMONIC id="440">
+<par_real name="cos" value="-0.000520731" />
+<par_real name="sin" value="-0.000919215" />
+</BF_HARMONIC>
+<BF_HARMONIC id="441">
+<par_real name="cos" value="-0.00353809" />
+<par_real name="sin" value="-5.4278e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="442">
+<par_real name="cos" value="-0.00130157" />
+<par_real name="sin" value="0.00214162" />
+</BF_HARMONIC>
+<BF_HARMONIC id="443">
+<par_real name="cos" value="-0.000479601" />
+<par_real name="sin" value="-0.000890686" />
+</BF_HARMONIC>
+<BF_HARMONIC id="444">
+<par_real name="cos" value="-0.003568" />
+<par_real name="sin" value="0.00793323" />
+</BF_HARMONIC>
+<BF_HARMONIC id="445">
+<par_real name="cos" value="-0.00136184" />
+<par_real name="sin" value="0.00213606" />
+</BF_HARMONIC>
+<BF_HARMONIC id="446">
+<par_real name="cos" value="-0.000439996" />
+<par_real name="sin" value="-0.000860928" />
+</BF_HARMONIC>
+<BF_HARMONIC id="447">
+<par_real name="cos" value="-0.0034972" />
+<par_real name="sin" value="-0.000204087" />
+</BF_HARMONIC>
+<BF_HARMONIC id="448">
+<par_real name="cos" value="-0.00142233" />
+<par_real name="sin" value="0.00212866" />
+</BF_HARMONIC>
+<BF_HARMONIC id="449">
+<par_real name="cos" value="-0.000401946" />
+<par_real name="sin" value="-0.000829992" />
+</BF_HARMONIC>
+<BF_HARMONIC id="450">
+<par_real name="cos" value="-0.00135767" />
+<par_real name="sin" value="0.000982042" />
+</BF_HARMONIC>
+<BF_HARMONIC id="451">
+<par_real name="cos" value="-0.00148296" />
+<par_real name="sin" value="0.00211942" />
+</BF_HARMONIC>
+<BF_HARMONIC id="452">
+<par_real name="cos" value="-0.000365478" />
+<par_real name="sin" value="-0.000797928" />
+</BF_HARMONIC>
+<BF_HARMONIC id="453">
+<par_real name="cos" value="-0.00344937" />
+<par_real name="sin" value="-0.000350422" />
+</BF_HARMONIC>
+<BF_HARMONIC id="454">
+<par_real name="cos" value="-0.00154369" />
+<par_real name="sin" value="0.00210833" />
+</BF_HARMONIC>
+<BF_HARMONIC id="455">
+<par_real name="cos" value="-0.000330619" />
+<par_real name="sin" value="-0.000764787" />
+</BF_HARMONIC>
+<BF_HARMONIC id="456">
+<par_real name="cos" value="-0.00815906" />
+<par_real name="sin" value="0.00218456" />
+</BF_HARMONIC>
+<BF_HARMONIC id="457">
+<par_real name="cos" value="-0.00160445" />
+<par_real name="sin" value="0.00209541" />
+</BF_HARMONIC>
+<BF_HARMONIC id="458">
+<par_real name="cos" value="-0.000297393" />
+<par_real name="sin" value="-0.000730619" />
+</BF_HARMONIC>
+<BF_HARMONIC id="459">
+<par_real name="cos" value="-0.00339483" />
+<par_real name="sin" value="-0.000492936" />
+</BF_HARMONIC>
+<BF_HARMONIC id="460">
+<par_real name="cos" value="-0.00166522" />
+<par_real name="sin" value="0.00208062" />
+</BF_HARMONIC>
+<BF_HARMONIC id="461">
+<par_real name="cos" value="-0.000265826" />
+<par_real name="sin" value="-0.000695474" />
+</BF_HARMONIC>
+<BF_HARMONIC id="462">
+<par_real name="cos" value="-0.00357977" />
+<par_real name="sin" value="0.00720953" />
+</BF_HARMONIC>
+<BF_HARMONIC id="463">
+<par_real name="cos" value="-0.00172592" />
+<par_real name="sin" value="0.002064" />
+</BF_HARMONIC>
+<BF_HARMONIC id="464">
+<par_real name="cos" value="-0.000235938" />
+<par_real name="sin" value="-0.000659404" />
+</BF_HARMONIC>
+<BF_HARMONIC id="465">
+<par_real name="cos" value="-0.00333381" />
+<par_real name="sin" value="-0.000631295" />
+</BF_HARMONIC>
+<BF_HARMONIC id="466">
+<par_real name="cos" value="-0.00178649" />
+<par_real name="sin" value="0.00204553" />
+</BF_HARMONIC>
+<BF_HARMONIC id="467">
+<par_real name="cos" value="-0.000207754" />
+<par_real name="sin" value="-0.000622461" />
+</BF_HARMONIC>
+<BF_HARMONIC id="468">
+<par_real name="cos" value="-0.0012132" />
+<par_real name="sin" value="0.000605357" />
+</BF_HARMONIC>
+<BF_HARMONIC id="469">
+<par_real name="cos" value="-0.00184691" />
+<par_real name="sin" value="0.00202523" />
+</BF_HARMONIC>
+<BF_HARMONIC id="470">
+<par_real name="cos" value="-0.000181291" />
+<par_real name="sin" value="-0.000584698" />
+</BF_HARMONIC>
+<BF_HARMONIC id="471">
+<par_real name="cos" value="-0.00326656" />
+<par_real name="sin" value="-0.000765179" />
+</BF_HARMONIC>
+<BF_HARMONIC id="472">
+<par_real name="cos" value="-0.0019071" />
+<par_real name="sin" value="0.00200308" />
+</BF_HARMONIC>
+<BF_HARMONIC id="473">
+<par_real name="cos" value="-0.00015657" />
+<par_real name="sin" value="-0.000546166" />
+</BF_HARMONIC>
+<BF_HARMONIC id="474">
+<par_real name="cos" value="-0.00778035" />
+<par_real name="sin" value="0.00154792" />
+</BF_HARMONIC>
+<BF_HARMONIC id="475">
+<par_real name="cos" value="-0.00196701" />
+<par_real name="sin" value="0.00197912" />
+</BF_HARMONIC>
+<BF_HARMONIC id="476">
+<par_real name="cos" value="-0.000133608" />
+<par_real name="sin" value="-0.00050692" />
+</BF_HARMONIC>
+<BF_HARMONIC id="477">
+<par_real name="cos" value="-0.00319336" />
+<par_real name="sin" value="-0.000894282" />
+</BF_HARMONIC>
+<BF_HARMONIC id="478">
+<par_real name="cos" value="-0.00202659" />
+<par_real name="sin" value="0.00195333" />
+</BF_HARMONIC>
+<BF_HARMONIC id="479">
+<par_real name="cos" value="-0.000112423" />
+<par_real name="sin" value="-0.000467013" />
+</BF_HARMONIC>
+<BF_HARMONIC id="480">
+<par_real name="cos" value="-0.00352301" />
+<par_real name="sin" value="0.00654204" />
+</BF_HARMONIC>
+<BF_HARMONIC id="481">
+<par_real name="cos" value="-0.00208581" />
+<par_real name="sin" value="0.00192572" />
+</BF_HARMONIC>
+<BF_HARMONIC id="482">
+<par_real name="cos" value="-9.30279e-05" />
+<par_real name="sin" value="-0.000426499" />
+</BF_HARMONIC>
+<BF_HARMONIC id="483">
+<par_real name="cos" value="-0.00311448" />
+<par_real name="sin" value="-0.0010183" />
+</BF_HARMONIC>
+<BF_HARMONIC id="484">
+<par_real name="cos" value="-0.00214458" />
+<par_real name="sin" value="0.00189632" />
+</BF_HARMONIC>
+<BF_HARMONIC id="485">
+<par_real name="cos" value="-7.54385e-05" />
+<par_real name="sin" value="-0.000385431" />
+</BF_HARMONIC>
+<BF_HARMONIC id="486">
+<par_real name="cos" value="-0.00101495" />
+<par_real name="sin" value="0.000269596" />
+</BF_HARMONIC>
+<BF_HARMONIC id="487">
+<par_real name="cos" value="-0.00220287" />
+<par_real name="sin" value="0.00186513" />
+</BF_HARMONIC>
+<BF_HARMONIC id="488">
+<par_real name="cos" value="-5.96663e-05" />
+<par_real name="sin" value="-0.000343865" />
+</BF_HARMONIC>
+<BF_HARMONIC id="489">
+<par_real name="cos" value="-0.00303022" />
+<par_real name="sin" value="-0.00113696" />
+</BF_HARMONIC>
+<BF_HARMONIC id="490">
+<par_real name="cos" value="-0.00226064" />
+<par_real name="sin" value="0.00183216" />
+</BF_HARMONIC>
+<BF_HARMONIC id="491">
+<par_real name="cos" value="-4.57229e-05" />
+<par_real name="sin" value="-0.000301855" />
+</BF_HARMONIC>
+<BF_HARMONIC id="492">
+<par_real name="cos" value="-0.00735907" />
+<par_real name="sin" value="0.000973409" />
+</BF_HARMONIC>
+<BF_HARMONIC id="493">
+<par_real name="cos" value="-0.00231782" />
+<par_real name="sin" value="0.00179743" />
+</BF_HARMONIC>
+<BF_HARMONIC id="494">
+<par_real name="cos" value="-3.36184e-05" />
+<par_real name="sin" value="-0.000259457" />
+</BF_HARMONIC>
+<BF_HARMONIC id="495">
+<par_real name="cos" value="-0.0029409" />
+<par_real name="sin" value="-0.00125" />
+</BF_HARMONIC>
+<BF_HARMONIC id="496">
+<par_real name="cos" value="-0.00237436" />
+<par_real name="sin" value="0.00176095" />
+</BF_HARMONIC>
+<BF_HARMONIC id="497">
+<par_real name="cos" value="-2.33614e-05" />
+<par_real name="sin" value="-0.000216725" />
+</BF_HARMONIC>
+<BF_HARMONIC id="498">
+<par_real name="cos" value="-0.00340626" />
+<par_real name="sin" value="0.00593697" />
+</BF_HARMONIC>
+<BF_HARMONIC id="499">
+<par_real name="cos" value="-0.00243022" />
+<par_real name="sin" value="0.00172273" />
+</BF_HARMONIC>
+<BF_HARMONIC id="500">
+<par_real name="cos" value="-1.49593e-05" />
+<par_real name="sin" value="-0.000173714" />
+</BF_HARMONIC>
+<BF_HARMONIC id="501">
+<par_real name="cos" value="-0.00284684" />
+<par_real name="sin" value="-0.00135716" />
+</BF_HARMONIC>
+<BF_HARMONIC id="502">
+<par_real name="cos" value="-0.00248536" />
+<par_real name="sin" value="0.00168281" />
+</BF_HARMONIC>
+<BF_HARMONIC id="503">
+<par_real name="cos" value="-8.41815e-06" />
+<par_real name="sin" value="-0.00013048" />
+</BF_HARMONIC>
+<BF_HARMONIC id="504">
+<par_real name="cos" value="-0.000770758" />
+<par_real name="sin" value="-1.75238e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="505">
+<par_real name="cos" value="-0.00253971" />
+<par_real name="sin" value="0.00164119" />
+</BF_HARMONIC>
+<BF_HARMONIC id="506">
+<par_real name="cos" value="-3.74251e-06" />
+<par_real name="sin" value="-8.70798e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="507">
+<par_real name="cos" value="-0.00274839" />
+<par_real name="sin" value="-0.00145822" />
+</BF_HARMONIC>
+<BF_HARMONIC id="508">
+<par_real name="cos" value="-0.00259324" />
+<par_real name="sin" value="0.00159791" />
+</BF_HARMONIC>
+<BF_HARMONIC id="509">
+<par_real name="cos" value="-9.35799e-07" />
+<par_real name="sin" value="-4.35678e-05" />
+</BF_HARMONIC>
+<BF_HARMONIC id="510">
+<par_real name="cos" value="-0.00690247" />
+<par_real name="sin" value="0.000466586" />
+</BF_HARMONIC>
+<BF_HARMONIC id="511">
+<par_real name="cos" value="-0.00264589" />
+<par_real name="sin" value="0.00155297" />
+</BF_HARMONIC>
+</BASE_FUNCTION>
+</OSCIL>
+<RESONANCE>
+<par_bool name="enabled" value="no" />
+</RESONANCE>
+<HARMONIC_POSITION>
+<par name="type" value="0" />
+<par name="parameter1" value="64" />
+<par name="parameter2" value="64" />
+<par name="parameter3" value="0" />
+</HARMONIC_POSITION>
+<SAMPLE_QUALITY>
+<par name="samplesize" value="3" />
+<par name="basenote" value="4" />
+<par name="octaves" value="3" />
+<par name="samples_per_octave" value="2" />
+</SAMPLE_QUALITY>
+<AMPLITUDE_PARAMETERS>
+<par name="volume" value="90" />
+<par name="panning" value="64" />
+<par name="velocity_sensing" value="64" />
+<par name="punch_strength" value="0" />
+<par name="punch_time" value="60" />
+<par name="punch_stretch" value="64" />
+<par name="punch_velocity_sensing" value="72" />
+<AMPLITUDE_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="64" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="0" />
+<par name="D_dt" value="40" />
+<par name="R_dt" value="25" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="127" />
+<par name="R_val" value="64" />
+</AMPLITUDE_ENVELOPE>
+<AMPLITUDE_LFO>
+<par_real name="freq" value="0.629921" />
+<par name="intensity" value="24" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</AMPLITUDE_LFO>
+</AMPLITUDE_PARAMETERS>
+<FREQUENCY_PARAMETERS>
+<par name="fixed_freq" value="0" />
+<par name="fixed_freq_et" value="0" />
+<par name="detune" value="8192" />
+<par name="coarse_detune" value="0" />
+<par name="detune_type" value="1" />
+<FREQUENCY_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="3" />
+<par name="env_sustain" value="1" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="no" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="50" />
+<par name="D_dt" value="10" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+</FREQUENCY_ENVELOPE>
+<FREQUENCY_LFO>
+<par_real name="freq" value="0.551181" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FREQUENCY_LFO>
+</FREQUENCY_PARAMETERS>
+<FILTER_PARAMETERS>
+<par name="velocity_sensing_amplitude" value="64" />
+<par name="velocity_sensing" value="64" />
+<FILTER>
+<par name="category" value="0" />
+<par name="type" value="2" />
+<par name="freq" value="111" />
+<par name="q" value="95" />
+<par name="stages" value="0" />
+<par name="freq_track" value="64" />
+<par name="gain" value="64" />
+</FILTER>
+<FILTER_ENVELOPE>
+<par_bool name="free_mode" value="no" />
+<par name="env_points" value="4" />
+<par name="env_sustain" value="2" />
+<par name="env_stretch" value="0" />
+<par_bool name="forced_release" value="yes" />
+<par_bool name="linear_envelope" value="no" />
+<par name="A_dt" value="40" />
+<par name="D_dt" value="70" />
+<par name="R_dt" value="60" />
+<par name="A_val" value="64" />
+<par name="D_val" value="64" />
+<par name="S_val" value="64" />
+<par name="R_val" value="64" />
+</FILTER_ENVELOPE>
+<FILTER_LFO>
+<par_real name="freq" value="0.629921" />
+<par name="intensity" value="0" />
+<par name="start_phase" value="64" />
+<par name="lfo_type" value="0" />
+<par name="randomness_amplitude" value="0" />
+<par name="randomness_frequency" value="0" />
+<par name="delay" value="0" />
+<par name="stretch" value="64" />
+<par_bool name="continous" value="no" />
+</FILTER_LFO>
+</FILTER_PARAMETERS>
+</PAD_SYNTH_PARAMETERS>
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="1">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="2">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="3">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="4">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="5">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="6">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="7">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="8">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="9">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="10">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="11">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="12">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="13">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="14">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+<INSTRUMENT_KIT_ITEM id="15">
+<par_bool name="enabled" value="no" />
+</INSTRUMENT_KIT_ITEM>
+</INSTRUMENT_KIT>
+<INSTRUMENT_EFFECTS>
+<INSTRUMENT_EFFECT id="0">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+<INSTRUMENT_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<par name="route" value="0" />
+<par_bool name="bypass" value="no" />
+</INSTRUMENT_EFFECT>
+</INSTRUMENT_EFFECTS>
+</INSTRUMENT>
+<CONTROLLER>
+<par name="pitchwheel_bendrange" value="200" />
+<par_bool name="expression_receive" value="yes" />
+<par name="panning_depth" value="64" />
+<par name="filter_cutoff_depth" value="64" />
+<par name="filter_q_depth" value="64" />
+<par name="bandwidth_depth" value="64" />
+<par name="mod_wheel_depth" value="80" />
+<par_bool name="mod_wheel_exponential" value="no" />
+<par_bool name="fm_amp_receive" value="yes" />
+<par_bool name="volume_receive" value="yes" />
+<par_bool name="sustain_receive" value="yes" />
+<par_bool name="portamento_receive" value="yes" />
+<par name="portamento_time" value="64" />
+<par name="portamento_pitchthresh" value="3" />
+<par name="portamento_pitchthreshtype" value="1" />
+<par name="portamento_portamento" value="0" />
+<par name="portamento_updowntimestretch" value="64" />
+<par name="portamento_proportional" value="0" />
+<par name="portamento_proprate" value="80" />
+<par name="portamento_propdepth" value="90" />
+<par name="resonance_center_depth" value="64" />
+<par name="resonance_bandwidth_depth" value="64" />
+</CONTROLLER>
+</PART>
+<PART id="3">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="4">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="5">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="6">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="7">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="8">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="9">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="10">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="11">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="12">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="13">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="14">
+<par_bool name="enabled" value="no" />
+</PART>
+<PART id="15">
+<par_bool name="enabled" value="no" />
+</PART>
+<SYSTEM_EFFECTS>
+<SYSTEM_EFFECT id="0">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<VOLUME id="0">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="1">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="2">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="3">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="4">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="5">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="6">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="7">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="8">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="9">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="10">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="11">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="12">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="13">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="14">
+<par name="vol" value="64" />
+</VOLUME>
+<VOLUME id="15">
+<par name="vol" value="64" />
+</VOLUME>
+<SENDTO id="1">
+<par name="send_vol" value="0" />
+</SENDTO>
+<SENDTO id="2">
+<par name="send_vol" value="0" />
+</SENDTO>
+<SENDTO id="3">
+<par name="send_vol" value="0" />
+</SENDTO>
+</SYSTEM_EFFECT>
+<SYSTEM_EFFECT id="1">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<VOLUME id="0">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="1">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="2">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="3">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="4">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="5">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="6">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="7">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="8">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="9">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="10">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="11">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="12">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="13">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="14">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="15">
+<par name="vol" value="0" />
+</VOLUME>
+<SENDTO id="2">
+<par name="send_vol" value="0" />
+</SENDTO>
+<SENDTO id="3">
+<par name="send_vol" value="0" />
+</SENDTO>
+</SYSTEM_EFFECT>
+<SYSTEM_EFFECT id="2">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<VOLUME id="0">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="1">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="2">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="3">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="4">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="5">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="6">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="7">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="8">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="9">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="10">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="11">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="12">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="13">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="14">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="15">
+<par name="vol" value="0" />
+</VOLUME>
+<SENDTO id="3">
+<par name="send_vol" value="0" />
+</SENDTO>
+</SYSTEM_EFFECT>
+<SYSTEM_EFFECT id="3">
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+<VOLUME id="0">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="1">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="2">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="3">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="4">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="5">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="6">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="7">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="8">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="9">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="10">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="11">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="12">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="13">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="14">
+<par name="vol" value="0" />
+</VOLUME>
+<VOLUME id="15">
+<par name="vol" value="0" />
+</VOLUME>
+</SYSTEM_EFFECT>
+</SYSTEM_EFFECTS>
+<INSERTION_EFFECTS>
+<INSERTION_EFFECT id="0">
+<par name="part" value="-1" />
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+</INSERTION_EFFECT>
+<INSERTION_EFFECT id="1">
+<par name="part" value="-1" />
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+</INSERTION_EFFECT>
+<INSERTION_EFFECT id="2">
+<par name="part" value="-1" />
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+</INSERTION_EFFECT>
+<INSERTION_EFFECT id="3">
+<par name="part" value="-1" />
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+</INSERTION_EFFECT>
+<INSERTION_EFFECT id="4">
+<par name="part" value="-1" />
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+</INSERTION_EFFECT>
+<INSERTION_EFFECT id="5">
+<par name="part" value="-1" />
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+</INSERTION_EFFECT>
+<INSERTION_EFFECT id="6">
+<par name="part" value="-1" />
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+</INSERTION_EFFECT>
+<INSERTION_EFFECT id="7">
+<par name="part" value="-1" />
+<EFFECT>
+<par name="type" value="0" />
+</EFFECT>
+</INSERTION_EFFECT>
+</INSERTION_EFFECTS>
+</MASTER>
+</ZynAddSubFX-data>
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl
new file mode 100644
index 0000000..1a21cb1
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ADnoteUI.fl
@@ -0,0 +1,1169 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include "../Params/ADnoteParameters.h"} {public
+}
+
+decl {\#include "../Misc/Util.h"} {public
+}
+
+decl {\#include "../Misc/Master.h"} {public
+}
+
+decl {\#include "ResonanceUI.h"} {public
+}
+
+decl {\#include <FL/Fl_Box.H>} {public
+}
+
+decl {\#include <FL/Fl_Group.H>} {public
+}
+
+decl {\#include <math.h>} {}
+
+decl {\#include <stdio.h>} {}
+
+decl {\#include <stdlib.h>} {}
+
+decl {\#include <string.h>} {}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "EnvelopeUI.h"} {public
+}
+
+decl {\#include "LFOUI.h"} {public
+}
+
+decl {\#include "FilterUI.h"} {public
+}
+
+decl {\#include "OscilGenUI.h"} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+class ADvoicelistitem {open : {public Fl_Group}
+} {
+ Function {make_window()} {open private
+ } {
+ Fl_Window ADnoteVoiceListItem {open
+ private xywh {262 736 615 100} type Double box UP_FRAME
+ class Fl_Group visible
+ } {
+ Fl_Group voicelistitemgroup {
+ private xywh {50 0 570 25}
+ code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
+ } {
+ Fl_Value_Slider voicevolume {
+ callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
+ tooltip Volume xywh {90 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PVolume);}
+ }
+ Fl_Check_Button voiceresonanceenabled {
+ callback {pars->VoicePar[nvoice].Presonance=(int)o->value();}
+ tooltip {Resonance On/Off} xywh {245 7 15 17} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 11 align 4
+ code0 {o->value(pars->VoicePar[nvoice].Presonance);}
+ }
+ Fl_Value_Slider voicelfofreq {
+ callback {pars->VoicePar[nvoice].FreqLfo->Pintensity=(int)o->value();}
+ tooltip {Frequency LFO amount} xywh {500 5 115 20} type {Horz Knob} box FLAT_BOX labelsize 8 align 5 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);}
+ }
+ Fl_Dial voicepanning {
+ callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
+ tooltip {Panning (leftmost is Random)} xywh {215 5 20 20} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PPanning);}
+ class WidgetPDial
+ }
+ Fl_Group voiceoscil {open
+ xywh {60 5 30 20} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
+ code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
+ code2 {if (pars->VoicePar[nvoice].Pextoscil != -1) {osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,master);}}
+ } {}
+ Fl_Value_Output detunevalueoutput {
+ callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
+ xywh {265 5 45 20} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
+ code0 {o->value(getdetune(pars->VoicePar[nvoice].PDetuneType,0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
+ }
+ Fl_Slider voicedetune {
+ callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
+detunevalueoutput->do_callback();}
+ tooltip {Fine Detune (cents)} xywh {315 5 185 20} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
+ }
+ Fl_Box noiselabel {
+ label N
+ callback {if (pars->VoicePar[nvoice].Type==0) {
+ o->hide();
+ voiceresonanceenabled->activate();
+ detunevalueoutput->activate();
+ voicedetune->activate();
+ voicelfofreq->activate();
+ voiceoscil->activate();
+} else {
+ o->show();
+ voiceresonanceenabled->deactivate();
+ detunevalueoutput->deactivate();
+ voicedetune->deactivate();
+ voicelfofreq->deactivate();
+ voiceoscil->deactivate();
+};}
+ xywh {65 5 20 20} labelfont 1 labelsize 13 labelcolor 53
+ code0 {if (pars->VoicePar[nvoice].Type==0) o->hide();}
+ }
+ }
+ Fl_Check_Button voiceenabled {
+ label 01
+ callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
+if (o->value()==0) voicelistitemgroup->deactivate();
+else voicelistitemgroup->activate();
+o->redraw();}
+ private xywh {30 5 20 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 4
+ code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
+ code1 {o->value(pars->VoicePar[nvoice].Enabled);}
+ }
+ }
+ }
+ Function {ADvoicelistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {nvoice=0;
+pars=NULL;} {}
+ }
+ Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {} {
+ code {pars=parameters;
+nvoice=nvoice_;
+master=master_;
+make_window();
+ADnoteVoiceListItem->show();
+end();} {}
+ }
+ Function {refreshlist()} {} {
+ code {voiceenabled->value(pars->VoicePar[nvoice].Enabled);
+voiceresonanceenabled->value(pars->VoicePar[nvoice].Presonance);
+voicevolume->value(pars->VoicePar[nvoice].PVolume);
+voicedetune->value(pars->VoicePar[nvoice].PDetune-8192);
+voicepanning->value(pars->VoicePar[nvoice].PPanning);
+voicelfofreq->value(pars->VoicePar[nvoice].FreqLfo->Pintensity);
+if (pars->VoicePar[nvoice].Pextoscil != -1) {
+ osc->init(pars->VoicePar[pars->VoicePar[nvoice].Pextoscil].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
+} else
+ osc->init(pars->VoicePar[nvoice].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);
+if (pars->VoicePar[nvoice].Enabled==0) voicelistitemgroup->deactivate();
+ else voicelistitemgroup->activate();
+detunevalueoutput->do_callback();
+noiselabel->do_callback();
+ADnoteVoiceListItem->redraw();} {}
+ }
+ Function {~ADvoicelistitem()} {} {
+ code {ADnoteVoiceListItem->hide();
+//delete(ADnoteVoiceListItem);} {}
+ }
+ decl {ADnoteParameters *pars;} {}
+ decl {int nvoice;} {}
+ decl {Oscilloscope *osc;} {}
+ decl {Master *master;} {}
+}
+
+class ADvoiceUI {open : {public Fl_Group}
+} {
+ Function {make_window()} {open
+ } {
+ Fl_Window ADnoteVoiceParameters {
+ label Voice open
+ xywh {863 89 765 595} type Double box NO_BOX
+ class Fl_Group visible
+ } {
+ Fl_Group voiceparametersgroup {open
+ xywh {0 0 770 590} color 48
+ code0 {if (pars->VoicePar[nvoice].Enabled==0) o->deactivate();}
+ } {
+ Fl_Group voicemodegroup {open
+ xywh {0 5 770 585} color 64
+ } {
+ Fl_Group voiceFMparametersgroup {
+ label MODULATOR open
+ xywh {530 5 230 580} box UP_FRAME color 48 labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ code0 {if (pars->VoicePar[nvoice].PFMEnabled==0) o->deactivate();}
+ } {
+ Fl_Group modfrequency {
+ label {Mod.FREQUENCY}
+ xywh {535 220 220 155} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Group voiceFMfreqenvgroup {
+ label {ADSynth Modulator - Frequency Envelope}
+ xywh {540 300 210 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->VoicePar[nvoice].FMFreqEnvelope);}
+ code1 {if (pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled==0) o->deactivate();}
+ class EnvelopeUI
+ } {}
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled=(int)o->value();
+if (o->value()==0) voiceFMfreqenvgroup->deactivate();
+else voiceFMfreqenvgroup->activate();
+o->redraw();}
+ tooltip {Forced Relase} xywh {545 305 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PFMFreqEnvelopeEnabled);}
+ }
+ Fl_Counter {} {
+ label {Coarse Det.}
+ callback {int k=(int) o->value();
+if (k<0) k+=1024;
+pars->VoicePar[nvoice].PFMCoarseDetune = k+
+ (pars->VoicePar[nvoice].PFMCoarseDetune/1024)*1024;}
+ tooltip {Coarse Detune} xywh {685 280 60 15} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
+ code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
+ code1 {if (k>=512) k-=1024;}
+ code2 {o->value(k);}
+ code3 {o->lstep(10);}
+ }
+ Fl_Counter {} {
+ label Octave
+ callback {int k=(int) o->value();
+if (k<0) k+=16;
+pars->VoicePar[nvoice].PFMCoarseDetune = k*1024+
+ pars->VoicePar[nvoice].PFMCoarseDetune%1024;}
+ tooltip Octave xywh {625 280 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
+ code0 {int k=pars->VoicePar[nvoice].PFMCoarseDetune/1024;}
+ code1 {if (k>=8) k-=16;}
+ code2 {o->value(k);}
+ }
+ Fl_Slider {} {
+ callback {pars->VoicePar[nvoice].PFMDetune=(int)o->value()+8192;
+fmdetunevalueoutput->do_callback();}
+ tooltip {Fine Detune (cents)} xywh {590 245 155 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PFMDetune-8192);}
+ }
+ Fl_Value_Output fmdetunevalueoutput {
+ label Detune
+ callback {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
+ xywh {540 245 45 18} labelsize 8 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 8
+ code0 {o->value(getdetune((pars->VoicePar[nvoice].PFMDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PFMDetuneType),0,pars->VoicePar[nvoice].PFMDetune));}
+ code1 {//o->value(getdetune(pars->VoicePar[nvoice].PFMDetuneType,0,pars->VoicePar[nvoice].PFMDetune));}
+ }
+ Fl_Choice {} {
+ label {Detune Type}
+ callback {pars->VoicePar[nvoice].PFMDetuneType=(int) o->value();
+fmdetunevalueoutput->do_callback();} open
+ xywh {540 280 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
+ code1 {o->value(pars->VoicePar[nvoice].PFMDetuneType);}
+ } {}
+ }
+ Fl_Group {} {
+ label {Mod.AMPLITUDE}
+ xywh {535 60 220 160} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Value_Slider {} {
+ label Vol
+ callback {pars->VoicePar[nvoice].PFMVolume=(int)o->value();}
+ tooltip Volume xywh {540 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PFMVolume);}
+ }
+ Fl_Value_Slider {} {
+ label {V.Sns}
+ callback {pars->VoicePar[nvoice].PFMVelocityScaleFunction=(int) o->value();}
+ tooltip {Velocity Sensing Function (rightmost to disable)} xywh {540 100 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PFMVelocityScaleFunction);}
+ }
+ Fl_Group voiceFMampenvgroup {
+ label {ADSynth Modulator - Amplitude Envelope} open
+ xywh {540 145 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->VoicePar[nvoice].FMAmpEnvelope);}
+ code1 {if (pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled==0) o->deactivate();}
+ class EnvelopeUI
+ } {}
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled=(int)o->value();
+if (o->value()==0) voiceFMampenvgroup->deactivate();
+else voiceFMampenvgroup->activate();
+o->redraw();}
+ tooltip {Forced Relase} xywh {545 150 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PFMAmpEnvelopeEnabled);}
+ }
+ Fl_Value_Slider {} {
+ label {F.Damp}
+ callback {pars->VoicePar[nvoice].PFMVolumeDamp=(int) o->value()+64;}
+ tooltip {Modulator Damp at Higher frequency} xywh {540 120 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 minimum -64 maximum 63 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PFMVolumeDamp-64);}
+ }
+ }
+ Fl_Group modoscil {open
+ xywh {535 365 220 220}
+ } {
+ Fl_Group fmoscil {open
+ xywh {535 440 220 140} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
+ code0 {oscFM=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;}
+ code2 {oscFM->init(pars->VoicePar[nv].FMSmp,0,pars->VoicePar[nvoice].PFMoscilphase,master);}
+ } {}
+ Fl_Box {} {
+ label {Mod.Oscillator}
+ xywh {535 375 155 20} labelfont 1 align 20
+ }
+ Fl_Button changeFMoscilbutton {
+ label Change
+ callback {if (oscedit!=NULL) delete(oscedit);
+
+int nv=nvoice;
+if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;
+
+oscedit=new OscilEditor(pars->VoicePar[nv].FMSmp,fmoscil,NULL,NULL,master);}
+ xywh {700 380 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
+ code0 {if (pars->VoicePar[nvoice].PextFMoscil>=0) o->labelcolor(FL_BLUE);}
+ }
+ Fl_Slider {} {
+ label Phase
+ callback {pars->VoicePar[nvoice].PFMoscilphase=64-(int)o->value();
+oscFM->phase=64-(int) o->value();
+fmoscil->redraw();}
+ xywh {645 415 105 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
+ code0 {o->value(64-pars->VoicePar[nvoice].PFMoscilphase);}
+ }
+ Fl_Choice {} {
+ label Use
+ callback {pars->VoicePar[nvoice].PextFMoscil=(int)o->value()-1;
+if ((int) o->value() != 0) {
+ oscFM->init(pars->VoicePar[(int) o->value()-1].FMSmp,master);
+ changeFMoscilbutton->labelcolor(FL_BLUE);
+} else {
+ oscFM->init(pars->VoicePar[nvoice].FMSmp,master);
+ changeFMoscilbutton->labelcolor(FL_BLACK);
+};
+voiceFMparametersgroup->redraw();} open
+ xywh {560 410 75 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
+ code0 {o->add("Internal");}
+ code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtM.%2d",i+1);o->add(tmp);};}
+ code3 {o->value(pars->VoicePar[nvoice].PextFMoscil+1);}
+ } {}
+ }
+ Fl_Choice {} {
+ label {External Mod.}
+ callback {pars->VoicePar[nvoice].PFMVoice=(int)o->value()-1;
+if ((int) o->value() != 0) {
+ modoscil->deactivate();
+ modfrequency->deactivate();
+} else {
+ modoscil->activate();
+ modfrequency->activate();
+};
+voiceFMparametersgroup->redraw();} open
+ xywh {635 40 85 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {o->add("OFF");}
+ code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"ExtMod.%2d",i+1);o->add(tmp);};}
+ code2 {o->value(pars->VoicePar[nvoice].PFMVoice+1);}
+ code3 {if ((int) o->value() != 0) {modoscil->deactivate();modfrequency->deactivate();}}
+ } {}
+ }
+ Fl_Choice {} {
+ label {Type:}
+ callback {pars->VoicePar[nvoice].PFMEnabled=(int)o->value();
+if (o->value()==0) voiceFMparametersgroup->deactivate();
+else voiceFMparametersgroup->activate();
+o->redraw();}
+ xywh {535 40 80 20} down_box BORDER_BOX align 5
+ code0 {o->value(pars->VoicePar[nvoice].PFMEnabled);}
+ } {
+ MenuItem {} {
+ label OFF
+ xywh {40 40 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label MORPH
+ xywh {50 50 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label RING
+ xywh {60 60 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label PM
+ xywh {70 70 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label FM
+ xywh {80 80 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label PITCH
+ xywh {90 90 100 20} labelfont 1 deactivate
+ }
+ }
+ Fl_Group {} {
+ label FREQUENCY
+ xywh {5 265 525 120} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Group voicefreqenvgroup {
+ label {ADSynth Voice - Frequency Envelope} open
+ xywh {10 305 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->VoicePar[nvoice].FreqEnvelope);}
+ code1 {if (pars->VoicePar[nvoice].PFreqEnvelopeEnabled==0) o->deactivate();}
+ class EnvelopeUI
+ } {}
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PFreqEnvelopeEnabled=(int)o->value();
+if (o->value()==0) voicefreqenvgroup->deactivate();
+else voicefreqenvgroup->activate();
+o->redraw();}
+ tooltip {Forced Relase} xywh {15 310 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PFreqEnvelopeEnabled);}
+ }
+ Fl_Group voicefreqlfogroup {
+ label {Frequency LFO } open
+ xywh {220 305 230 70} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->VoicePar[nvoice].FreqLfo);}
+ code1 {if (pars->VoicePar[nvoice].PFreqLfoEnabled==0) o->deactivate();}
+ class LFOUI
+ } {}
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PFreqLfoEnabled=(int)o->value();
+if (o->value()==0) voicefreqlfogroup->deactivate();
+else voicefreqlfogroup->activate();
+o->redraw();}
+ tooltip {Forced Relase} xywh {225 311 55 10} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PFreqLfoEnabled);}
+ }
+ Fl_Counter {} {
+ label Octave
+ callback {int k=(int) o->value();
+if (k<0) k+=16;
+pars->VoicePar[nvoice].PCoarseDetune = k*1024+
+ pars->VoicePar[nvoice].PCoarseDetune%1024;}
+ tooltip Octave xywh {470 285 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
+ code0 {int k=pars->VoicePar[nvoice].PCoarseDetune/1024;}
+ code1 {if (k>=8) k-=16;}
+ code2 {o->value(k);}
+ }
+ Fl_Counter {} {
+ label {Coarse Det.}
+ callback {int k=(int) o->value();
+if (k<0) k+=1024;
+pars->VoicePar[nvoice].PCoarseDetune = k+
+ (pars->VoicePar[nvoice].PCoarseDetune/1024)*1024;}
+ tooltip {Coarse Detune} xywh {455 355 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
+ code0 {int k=pars->VoicePar[nvoice].PCoarseDetune%1024;}
+ code1 {if (k>=512) k-=1024;}
+ code2 {o->value(k);}
+ code3 {o->lstep(10);}
+ }
+ Fl_Slider {} {
+ callback {pars->VoicePar[nvoice].PDetune=(int)o->value()+8192;
+detunevalueoutput->do_callback();}
+ tooltip {Fine Detune (cents)} xywh {58 287 392 13} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PDetune-8192);}
+ }
+ Fl_Value_Output detunevalueoutput {
+ label Detune
+ callback {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
+ xywh {10 287 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
+ code0 {o->value(getdetune((pars->VoicePar[nvoice].PDetuneType==0)?(pars->GlobalPar.PDetuneType) : (pars->VoicePar[nvoice].PDetuneType),0,pars->VoicePar[nvoice].PDetune)*pars->getBandwidthDetuneMultiplier());}
+ }
+ Fl_Check_Button {} {
+ label 440Hz
+ callback {int x=(int) o->value();
+pars->VoicePar[nvoice].Pfixedfreq=x;
+if (x==0) fixedfreqetdial->deactivate();
+ else fixedfreqetdial->activate();}
+ tooltip {Set the voice base frequency to 440Hz} xywh {345 268 55 15} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].Pfixedfreq);}
+ }
+ Fl_Dial fixedfreqetdial {
+ label {Eq.T.}
+ callback {pars->VoicePar[nvoice].PfixedfreqET=(int) o->value();}
+ tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {405 270 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PfixedfreqET);}
+ code1 {if (pars->VoicePar[nvoice].Pfixedfreq==0) o->deactivate();}
+ class WidgetPDial
+ }
+ Fl_Choice {} {
+ label {Detune Type}
+ callback {pars->VoicePar[nvoice].PDetuneType=(int) o->value();
+detunevalueoutput->do_callback();} open
+ xywh {455 320 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {o->add("Default");o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
+ code1 {o->value(pars->VoicePar[nvoice].PDetuneType);}
+ } {}
+ }
+ Fl_Group voiceoscil {
+ xywh {80 390 445 145} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
+ code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {int nv=nvoice; if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;}
+ code2 {osc->init(pars->VoicePar[nv].OscilSmp,0,pars->VoicePar[nvoice].Poscilphase,master);}
+ } {}
+ Fl_Button changevoiceoscilbutton {
+ label Change
+ callback {if (oscedit!=NULL) delete(oscedit);
+
+int nv=nvoice;
+if (pars->VoicePar[nvoice].Pextoscil>=0) nv=pars->VoicePar[nvoice].Pextoscil;
+
+oscedit=new OscilEditor(pars->VoicePar[nv].OscilSmp,voiceoscil,NULL,NULL,master);}
+ xywh {5 490 65 20} box THIN_UP_BOX labelfont 1 labelsize 11
+ code0 {if (pars->VoicePar[nvoice].Pextoscil>=0) o->labelcolor(FL_BLUE);}
+ }
+ Fl_Box {} {
+ label {Voice Oscillator}
+ xywh {5 390 75 35} labelfont 1 labelsize 12 align 128
+ }
+ Fl_Slider {} {
+ label Phase
+ callback {pars->VoicePar[nvoice].Poscilphase=64-(int)o->value();
+osc->phase=64-(int) o->value();
+voiceoscil->redraw();}
+ xywh {10 435 65 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
+ code0 {o->value(64-pars->VoicePar[nvoice].Poscilphase);}
+ }
+ Fl_Check_Button {} {
+ label {R.}
+ callback {pars->VoicePar[nvoice].Presonance=(int) o->value();}
+ tooltip {Resonance On/Off} xywh {210 5 35 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].Presonance);}
+ }
+ Fl_Choice {} {
+ label {Use Oscil.}
+ callback {pars->VoicePar[nvoice].Pextoscil=(int)o->value()-1;
+if ((int) o->value() != 0) {
+ osc->init(pars->VoicePar[(int) o->value()-1].OscilSmp,master);
+ changevoiceoscilbutton->labelcolor(FL_BLUE);
+} else {
+ osc->init(pars->VoicePar[nvoice].OscilSmp,master);
+ changevoiceoscilbutton->labelcolor(FL_BLACK);
+};
+
+voiceparametersgroup->redraw();
+voiceonbutton->redraw();} open
+ xywh {5 470 65 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {o->add("Internal");}
+ code1 {char tmp[50]; for (int i=0;i<nvoice;i++) {sprintf(tmp,"Ext.%2d",i+1);o->add(tmp);};}
+ code3 {o->value(pars->VoicePar[nvoice].Pextoscil+1);}
+ } {}
+ Fl_Group {} {open
+ xywh {5 540 520 50} box UP_FRAME
+ } {
+ Fl_Dial {} {
+ label Stereo
+ callback {pars->VoicePar[nvoice].Unison_stereo_spread=(int)o->value();}
+ tooltip {Stereo Spread} xywh {322 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].Unison_stereo_spread);}
+ class WidgetPDial
+ }
+ Fl_Choice {} {
+ label Unison
+ callback {pars->set_unison_size_index(nvoice,(int) o->value());} open
+ tooltip {Unison size} xywh {10 560 75 20} down_box BORDER_BOX labelfont 1 align 5 textfont 1 textsize 10
+ code0 {o->add("OFF");char tmp[100];for (int i=1;ADnote_unison_sizes[i];i++){snprintf(tmp,100,"size %d",ADnote_unison_sizes[i]);o->add(tmp);};}
+ code1 {o->value(pars->get_unison_size_index(nvoice));}
+ } {}
+ Fl_Dial {} {
+ label Vibrato
+ callback {pars->VoicePar[nvoice].Unison_vibratto=(int)o->value();}
+ tooltip Vibrato xywh {364 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto);}
+ class WidgetPDial
+ }
+ Fl_Choice {} {
+ label Invert
+ callback {pars->VoicePar[nvoice].Unison_invert_phase=(int) o->value();} open
+ tooltip {Phase Invert} xywh {445 560 65 15} down_box BORDER_BOX labelsize 11 align 5 textfont 1 textsize 10
+ code0 {o->add("None");o->add("Random");char tmp[100];for (int i=2;i<=5;i++){snprintf(tmp,100,"%d %%",100/i);o->add(tmp);};}
+ code1 {o->value(pars->VoicePar[nvoice].Unison_invert_phase);}
+ } {}
+ Fl_Slider {} {
+ label {Frequency Spread}
+ callback {pars->VoicePar[nvoice].Unison_frequency_spread=(int)o->value();
+unisonspreadoutput->do_callback();}
+ tooltip {Frequency Spread of the Unison} xywh {95 562 125 13} type {Horz Knob} box FLAT_BOX labelsize 12 align 1 maximum 127 step 1 value 64
+ code0 {o->value(pars->VoicePar[nvoice].Unison_frequency_spread);}
+ }
+ Fl_Value_Output unisonspreadoutput {
+ label {(cents)}
+ callback {o->value(pars->getUnisonFrequencySpreadCents(nvoice));}
+ xywh {225 560 40 15} labelsize 10 align 5 maximum 1000 step 0.1 textfont 1 textsize 10
+ code0 {o->value(pars->getUnisonFrequencySpreadCents(nvoice));}
+ }
+ Fl_Dial {} {
+ label {V.speed}
+ callback {pars->VoicePar[nvoice].Unison_vibratto_speed=(int)o->value();} selected
+ tooltip {Vibrato Average Speed} xywh {406 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].Unison_vibratto_speed);}
+ class WidgetPDial
+ }
+ Fl_Dial {} {
+ label {Ph.rand}
+ callback {pars->VoicePar[nvoice].Unison_phase_randomness=(int)o->value();}
+ tooltip {Phase randomness} xywh {280 555 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].Unison_phase_randomness);}
+ class WidgetPDial
+ }
+ }
+ }
+ Fl_Group {} {
+ label AMPLITUDE open
+ xywh {5 40 240 220} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Value_Slider {} {
+ label Vol
+ callback {pars->VoicePar[nvoice].PVolume=(int)o->value();}
+ tooltip Volume xywh {10 60 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PVolume);}
+ }
+ Fl_Value_Slider {} {
+ label {V.Sns}
+ callback {pars->VoicePar[nvoice].PAmpVelocityScaleFunction=(int) o->value();}
+ tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 80 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PAmpVelocityScaleFunction);}
+ }
+ Fl_Group voiceampenvgroup {
+ label {ADSynth Voice - Amplitude Envelope} open
+ xywh {10 105 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->VoicePar[nvoice].AmpEnvelope);}
+ code1 {if (pars->VoicePar[nvoice].PAmpEnvelopeEnabled==0) o->deactivate();}
+ class EnvelopeUI
+ } {}
+ Fl_Dial {} {
+ label Pan
+ callback {pars->VoicePar[nvoice].PPanning=(int) o->value();}
+ tooltip {Panning (leftmost is Random)} xywh {210 60 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PPanning);}
+ class WidgetPDial
+ }
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PAmpEnvelopeEnabled=(int)o->value();
+if (o->value()==0) voiceampenvgroup->deactivate();
+else voiceampenvgroup->activate();
+o->redraw();}
+ tooltip {Forced Relase} xywh {15 110 50 10} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PAmpEnvelopeEnabled);}
+ }
+ Fl_Group voiceamplfogroup {
+ label {Amplitude LFO } open
+ xywh {10 180 230 75} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->VoicePar[nvoice].AmpLfo);}
+ code1 {if (pars->VoicePar[nvoice].PAmpLfoEnabled==0) o->deactivate();}
+ class LFOUI
+ } {}
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PAmpLfoEnabled=(int)o->value();
+if (o->value()==0) voiceamplfogroup->deactivate();
+else voiceamplfogroup->activate();
+o->redraw();}
+ tooltip {Forced Relase} xywh {15 185 55 10} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PAmpLfoEnabled);}
+ }
+ Fl_Check_Button {} {
+ label Minus
+ callback {pars->VoicePar[nvoice].PVolumeminus=(int)o->value();}
+ xywh {10 45 50 10} down_box DOWN_BOX labelfont 1 labelsize 10
+ code0 {o->value(pars->VoicePar[nvoice].PVolumeminus);}
+ }
+ }
+ Fl_Group voicefiltergroup {
+ label FILTER open
+ xywh {245 5 285 260} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ code0 {if (pars->VoicePar[nvoice].PFilterEnabled==0) o->deactivate();}
+ } {
+ Fl_Group {} {
+ label {ADsynth Voice - Filter} open
+ xywh {250 30 275 75} box FLAT_BOX color 50 align 144
+ code0 {o->init(pars->VoicePar[nvoice].VoiceFilter,NULL,NULL);}
+ class FilterUI
+ } {}
+ Fl_Group voicefilterenvgroup {
+ label {ADSynth Voice - Filter Envelope} open
+ xywh {250 115 275 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->VoicePar[nvoice].FilterEnvelope);}
+ code1 {if (pars->VoicePar[nvoice].PFilterEnvelopeEnabled==0) o->deactivate();}
+ class EnvelopeUI
+ } {}
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PFilterEnvelopeEnabled=(int)o->value();
+if (o->value()==0) voicefilterenvgroup->deactivate();
+else voicefilterenvgroup->activate();
+o->redraw();}
+ tooltip {Forced Relase} xywh {255 119 55 10} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PFilterEnvelopeEnabled);}
+ }
+ Fl_Group voicefilterlfogroup {
+ label {Filter LFO } open
+ xywh {250 190 230 70} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->VoicePar[nvoice].FilterLfo);}
+ code1 {if (pars->VoicePar[nvoice].PFilterLfoEnabled==0) o->deactivate();}
+ class LFOUI
+ } {}
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PFilterLfoEnabled=(int)o->value();
+if (o->value()==0) voicefilterlfogroup->deactivate();
+else voicefilterlfogroup->activate();
+o->redraw();}
+ tooltip {Forced Relase} xywh {255 196 55 10} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PFilterLfoEnabled);}
+ }
+ }
+ Fl_Group {} {
+ label 01
+ xywh {5 5 55 35} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 22 align 16
+ code0 {char tmp[10];snprintf(tmp,10,"%d",nvoice+1);o->label(strdup(tmp));}
+ } {}
+ Fl_Choice {} {
+ callback {int x=(int) o->value();
+pars->VoicePar[nvoice].Type=x;
+if (x==0) voicemodegroup->activate();
+ else voicemodegroup->deactivate();
+noiselabel->do_callback();}
+ tooltip {Oscillator Type (sound/noise)} xywh {5 515 65 20} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
+ code0 {o->value(pars->VoicePar[nvoice].Type);}
+ code1 {if (pars->VoicePar[nvoice].Type!=0) voicemodegroup->deactivate();}
+ } {
+ MenuItem {} {
+ label Sound
+ xywh {5 5 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label NOISE
+ xywh {15 15 100 20} labelfont 1 labelsize 11 labelcolor 1
+ }
+ }
+ Fl_Check_Button bypassfiltercheckbutton {
+ label {Bypass Global F.}
+ callback {pars->VoicePar[nvoice].Pfilterbypass=(int)o->value();}
+ xywh {425 10 100 20} down_box DOWN_BOX labelfont 1 labelsize 10 align 148
+ code0 {o->value(pars->VoicePar[nvoice].Pfilterbypass);}
+ }
+ Fl_Group {} {open
+ xywh {115 5 95 35} box THIN_UP_BOX
+ } {
+ Fl_Value_Slider {} {
+ label Delay
+ callback {pars->VoicePar[nvoice].PDelay=(int)o->value();}
+ tooltip Volume xywh {120 21 84 12} type {Horz Knob} box FLAT_BOX labelsize 11 align 5 maximum 127 step 1
+ code0 {o->value(pars->VoicePar[nvoice].PDelay);}
+ }
+ }
+ Fl_Check_Button {} {
+ label On
+ callback {pars->VoicePar[nvoice].PFilterEnabled=(int)o->value();
+if (o->value()==0) voicefiltergroup->deactivate();
+else voicefiltergroup->activate();
+o->redraw();
+bypassfiltercheckbutton->redraw();}
+ tooltip {Enable Filter} xywh {250 15 60 15} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->VoicePar[nvoice].PFilterEnabled);}
+ }
+ Fl_Box noiselabel {
+ label {White Noise}
+ callback {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
+ xywh {150 430 300 65} labelfont 1 labelsize 50 labelcolor 53
+ code0 {if (pars->VoicePar[nvoice].Type==0) o->hide(); else o->show();}
+ }
+ }
+ Fl_Check_Button voiceonbutton {
+ label On
+ callback {pars->VoicePar[nvoice].Enabled=(int)o->value();
+if (o->value()==0) voiceparametersgroup->deactivate();
+else voiceparametersgroup->activate();
+o->redraw();}
+ xywh {60 5 55 35} box THIN_UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13
+ code0 {o->value(pars->VoicePar[nvoice].Enabled);}
+ }
+ }
+ }
+ Function {ADvoiceUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {nvoice=0;
+pars=NULL;
+oscedit=NULL;} {}
+ }
+ Function {init(ADnoteParameters *parameters,int nvoice_,Master *master_)} {open
+ } {
+ code {pars=parameters;
+nvoice=nvoice_;
+master=master_;
+make_window();
+end();
+ADnoteVoiceParameters->show();} {}
+ }
+ Function {~ADvoiceUI()} {open
+ } {
+ code {ADnoteVoiceParameters->hide();
+hide();
+if (oscedit!=NULL) {
+ delete(oscedit);
+};
+//delete (ADnoteVoiceParameters);} {}
+ }
+ decl {int nvoice;} {}
+ decl {ADnoteParameters *pars;} {}
+ decl {OscilEditor *oscedit;} {}
+ decl {Oscilloscope *osc;} {}
+ decl {Oscilloscope *oscFM;} {}
+ decl {Master *master;} {}
+}
+
+class ADnoteUI {open : {public PresetsUI_}
+} {
+ Function {make_window()} {open private
+ } {
+ Fl_Window ADnoteGlobalParameters {
+ label {ADsynth Global Parameters of the Instrument} open
+ xywh {457 319 540 430} type Double visible
+ } {
+ Fl_Group {} {
+ label FREQUENCY open
+ xywh {5 280 530 115} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Group freqenv {
+ label {ADSynth Global - Frequency Envelope} open
+ xywh {10 320 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->GlobalPar.FreqEnvelope);}
+ class EnvelopeUI
+ } {}
+ Fl_Counter octave {
+ label Octave
+ callback {int k=(int) o->value();
+if (k<0) k+=16;
+pars->GlobalPar.PCoarseDetune = k*1024+
+ pars->GlobalPar.PCoarseDetune%1024;}
+ tooltip Octave xywh {455 300 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
+ code0 {int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;}
+ code2 {o->value(k);}
+ }
+ Fl_Counter coarsedet {
+ label {Coarse det.}
+ callback {int k=(int) o->value();
+if (k<0) k+=1024;
+pars->GlobalPar.PCoarseDetune = k+
+ (pars->GlobalPar.PCoarseDetune/1024)*1024;}
+ tooltip {Coarse Detune} xywh {460 370 60 20} type Simple labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 11
+ code0 {int k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;}
+ code2 {o->value(k);}
+ code3 {o->lstep(10);}
+ }
+ Fl_Group freqlfo {
+ label {Frequency LFO } open
+ xywh {220 320 230 70} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->GlobalPar.FreqLfo);}
+ class LFOUI
+ } {}
+ Fl_Slider freq {
+ callback {pars->GlobalPar.PDetune=(int)o->value()+8192;
+detunevalueoutput->do_callback();}
+ tooltip {Fine Detune (cents)} xywh {60 300 385 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
+ code0 {o->value(pars->GlobalPar.PDetune-8192);}
+ }
+ Fl_Value_Output detunevalueoutput {
+ label Detune
+ callback {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
+ xywh {12 300 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
+ code0 {o->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));}
+ }
+ Fl_Choice detunetype {
+ label {Detune Type}
+ callback {pars->GlobalPar.PDetuneType=(int) o->value()+1;
+detunevalueoutput->do_callback();} open
+ xywh {455 340 75 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
+ code1 {o->value(pars->GlobalPar.PDetuneType-1);}
+ } {}
+ Fl_Dial {} {
+ label relBW
+ callback {pars->GlobalPar.PBandwidth=(int) o->value();
+
+pars->getBandwidthDetuneMultiplier();
+
+for (int i=0;i<NUM_VOICES;i++){
+ voicelistitem[i]->refreshlist();
+};}
+ tooltip {Bandwidth - how the relative fine detune of the voice are changed} xywh {505 295 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->GlobalPar.PBandwidth);}
+ class WidgetPDial
+ }
+ }
+ Fl_Group {} {
+ label AMPLITUDE
+ xywh {5 5 240 260} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Value_Slider volume {
+ label Vol
+ callback {pars->GlobalPar.PVolume=(int)o->value();}
+ tooltip Volume xywh {10 30 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->GlobalPar.PVolume);}
+ }
+ Fl_Value_Slider vsns {
+ label {V.Sns}
+ callback {pars->GlobalPar.PAmpVelocityScaleFunction=(int) o->value();}
+ tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->GlobalPar.PAmpVelocityScaleFunction);}
+ }
+ Fl_Dial pan {
+ label Pan
+ callback {pars->GlobalPar.PPanning=(int) o->value();}
+ tooltip {Panning (leftmost is Random)} xywh {210 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->GlobalPar.PPanning);}
+ class WidgetPDial
+ }
+ Fl_Dial pstr {
+ label {P.Str.}
+ callback {pars->GlobalPar.PPunchStrength=(int) o->value();}
+ tooltip {Punch Strength} xywh {125 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->GlobalPar.PPunchStrength);}
+ class WidgetPDial
+ }
+ Fl_Dial pt {
+ label {P.t.}
+ callback {pars->GlobalPar.PPunchTime=(int) o->value();}
+ tooltip {Punch Time (duration)} xywh {155 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->GlobalPar.PPunchTime);}
+ class WidgetPDial
+ }
+ Fl_Dial pstc {
+ label {P.Stc.}
+ callback {pars->GlobalPar.PPunchStretch=(int) o->value();}
+ tooltip {Punch Stretch} xywh {185 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->GlobalPar.PPunchStretch);}
+ class WidgetPDial
+ }
+ Fl_Dial pvel {
+ label {P.Vel.}
+ callback {pars->GlobalPar.PPunchVelocitySensing=(int) o->value();}
+ tooltip {Punch Velocity Sensing} xywh {215 237 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->GlobalPar.PPunchVelocitySensing);}
+ class WidgetPDial
+ }
+ Fl_Group ampenv {
+ label {ADSynth Global - Amplitude Envelope} open
+ xywh {10 75 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->GlobalPar.AmpEnvelope);}
+ class EnvelopeUI
+ } {}
+ Fl_Group amplfo {
+ label {Amplitude LFO } open
+ xywh {10 150 230 70} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->GlobalPar.AmpLfo);}
+ class LFOUI
+ } {}
+ Fl_Check_Button rndgrp {
+ label {Rnd Grp}
+ callback {pars->GlobalPar.Hrandgrouping=(int) o->value();}
+ tooltip {How the Harmonic Amplitude is applied to voices that use the same oscillator} xywh {70 235 40 25} down_box DOWN_BOX labelsize 10 align 148
+ code0 {o->value(pars->GlobalPar.Hrandgrouping);}
+ }
+ }
+ Fl_Group {} {
+ label FILTER open selected
+ xywh {250 5 285 265} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Group filterenv {
+ label {ADSynth Global - Filter Envelope} open
+ xywh {255 118 275 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->GlobalPar.FilterEnvelope);}
+ class EnvelopeUI
+ } {}
+ Fl_Group filterlfo {
+ label {Filter LFO} open
+ xywh {255 195 230 70} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->GlobalPar.FilterLfo);}
+ class LFOUI
+ } {}
+ Fl_Group filterui {
+ label {ADsynth Global - Filter} open
+ xywh {255 35 275 75} box FLAT_BOX color 50 align 144
+ code0 {o->init(pars->GlobalPar.GlobalFilter,&pars->GlobalPar.PFilterVelocityScale,&pars->GlobalPar.PFilterVelocityScaleFunction);}
+ class FilterUI
+ } {}
+ }
+ Fl_Check_Button stereo {
+ label Stereo
+ callback {pars->GlobalPar.PStereo=(int) o->value();}
+ xywh {5 230 65 35} down_box DOWN_BOX labelsize 11
+ code0 {o->value(pars->GlobalPar.PStereo);}
+ }
+ Fl_Button {} {
+ label {Show Voice List}
+ callback {for (int i=0;i<NUM_VOICES;i++){
+ voicelistitem[i]->refreshlist();
+}
+ADnoteVoiceList->show();}
+ xywh {180 400 125 25} labelsize 12
+ }
+ Fl_Button {} {
+ label {Show Voice Parameters}
+ callback {ADnoteVoice->show();}
+ xywh {5 400 170 25} labelsize 12
+ }
+ Fl_Button {} {
+ label Close
+ callback {ADnoteGlobalParameters->hide();}
+ xywh {475 400 60 25} box THIN_UP_BOX
+ }
+ Fl_Button {} {
+ label Resonance
+ callback {resui->resonancewindow->redraw();
+resui->resonancewindow->show();}
+ tooltip Resonance xywh {309 400 86 25} box THIN_UP_BOX labelsize 12
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copyArray(pars);}
+ xywh {405 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->pasteArray(pars,this);}
+ xywh {435 405 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ }
+ Fl_Window ADnoteVoice {
+ label {ADsynth Voice Parameters} open
+ xywh {1142 229 765 630} type Double visible
+ } {
+ Fl_Group advoice {open
+ xywh {0 0 765 595}
+ code0 {o->init(pars,nvoice,master);}
+ code1 {o->show();}
+ class ADvoiceUI
+ } {}
+ Fl_Button {} {
+ label {Close Window}
+ callback {ADnoteVoice->hide();}
+ xywh {305 601 195 25} box THIN_UP_BOX labelfont 1
+ }
+ Fl_Counter currentvoicecounter {
+ label {Current Voice}
+ callback {nvoice=(int)o->value()-1;
+advoice->hide();
+ADnoteVoice->remove(advoice);
+delete advoice;
+advoice=new ADvoiceUI(0,0,765,590);
+ADnoteVoice->add(advoice);
+advoice->init(pars,nvoice,master);
+advoice->show();
+ADnoteVoice->redraw();}
+ xywh {10 601 130 25} type Simple labelfont 1 align 8 minimum 0 maximum 2 step 1 value 1 textfont 1 textsize 13
+ code0 {o->bounds(1,NUM_VOICES);}
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(pars,nvoice);}
+ xywh {705 609 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(pars,this,nvoice);}
+ xywh {735 609 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ }
+ Fl_Window ADnoteVoiceList {
+ label {ADsynth Voices list}
+ xywh {32 266 650 260} type Double hide
+ } {
+ Fl_Text_Display {} {
+ label {No.}
+ xywh {10 15 30 10} box FLAT_BOX labelfont 1 labelsize 11
+ }
+ Fl_Text_Display {} {
+ label Vol
+ xywh {145 15 30 10} box FLAT_BOX labelfont 1 labelsize 11
+ }
+ Fl_Text_Display {} {
+ label Detune
+ xywh {384 15 25 10} box FLAT_BOX labelfont 1 labelsize 11
+ }
+ Fl_Text_Display {} {
+ label Pan
+ xywh {210 15 30 10} box FLAT_BOX labelfont 1 labelsize 11
+ }
+ Fl_Text_Display {} {
+ label {Vib. Depth}
+ xywh {560 15 30 10} box FLAT_BOX labelfont 1 labelsize 11
+ }
+ Fl_Text_Display {} {
+ label {R.}
+ xywh {245 15 25 10} box FLAT_BOX labelfont 1 labelsize 11
+ }
+ Fl_Button {} {
+ label {Hide Voice List}
+ callback {ADnoteVoiceList->hide();}
+ xywh {255 237 125 20}
+ }
+ Fl_Scroll {} {open
+ xywh {0 15 640 220} type VERTICAL box THIN_UP_BOX
+ } {
+ Fl_Pack {} {open
+ xywh {0 20 620 210}
+ code0 {for (int i=0;i<NUM_VOICES;i++){voicelistitem[i]=new ADvoicelistitem(0,0,620,25,"");voicelistitem[i]->init(pars,i,master);}}
+ } {}
+ }
+ }
+ }
+ Function {ADnoteUI(ADnoteParameters *parameters,Master *master_)} {} {
+ code {pars=parameters;
+master=master_;
+nvoice=0;
+resui=new ResonanceUI(pars->GlobalPar.Reson);
+make_window();} {}
+ }
+ Function {~ADnoteUI()} {} {
+ code {ADnoteVoiceList->hide();
+ADnoteGlobalParameters->hide();
+ADnoteVoice->hide();
+delete(ADnoteVoiceList);
+delete(ADnoteGlobalParameters);
+delete(ADnoteVoice);
+delete(resui);} {}
+ }
+ Function {refresh()} {} {
+ code {volume->value(pars->GlobalPar.PVolume);
+vsns->value(pars->GlobalPar.PAmpVelocityScaleFunction);
+pan->value(pars->GlobalPar.PPanning);
+
+stereo->value(pars->GlobalPar.PStereo);
+rndgrp->value(pars->GlobalPar.Hrandgrouping);
+
+pstr->value(pars->GlobalPar.PPunchStrength);
+pt->value(pars->GlobalPar.PPunchTime);
+pstc->value(pars->GlobalPar.PPunchStretch);
+pvel->value(pars->GlobalPar.PPunchVelocitySensing);
+
+detunevalueoutput->value(getdetune(pars->GlobalPar.PDetuneType,0,pars->GlobalPar.PDetune));
+freq->value(pars->GlobalPar.PDetune-8192);
+
+int k=pars->GlobalPar.PCoarseDetune/1024;if (k>=8) k-=16;
+octave->value(k);
+
+detunetype->value(pars->GlobalPar.PDetuneType-1);
+k=pars->GlobalPar.PCoarseDetune%1024;if (k>=512) k-=1024;
+coarsedet->value(k);
+amplfo->refresh();
+freqlfo->refresh();
+filterlfo->refresh();
+
+ampenv->refresh();
+freqenv->refresh();
+filterenv->refresh();
+filterui->refresh();
+
+for (int i=0;i<NUM_VOICES;i++) voicelistitem[i]->refreshlist();
+
+resui->refresh();
+currentvoicecounter->do_callback();} {}
+ }
+ decl {ADnoteParameters *pars;} {}
+ decl {ResonanceUI *resui;} {}
+ decl {Master *master;} {}
+ decl {int nvoice;} {}
+ decl {ADvoicelistitem *voicelistitem[NUM_VOICES];} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl
new file mode 100644
index 0000000..a7eab82
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/BankUI.fl
@@ -0,0 +1,368 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <string.h>} {public
+}
+
+decl {\#include <FL/Fl_Button.H>} {public
+}
+
+decl {\#include <FL/Fl_File_Chooser.H>} {public
+}
+
+decl {\#include "../Misc/Master.h"} {public
+}
+
+decl {\#include "../Misc/Part.h"} {public
+}
+
+decl {\#include "../Misc/Bank.h"} {public
+}
+
+decl {\#include "../Misc/Config.h"} {public
+}
+
+decl {\#include "../Misc/Util.h"} {public
+}
+
+class BankProcess_ {} {
+ Function {process()} {open return_type {virtual void}
+ } {
+ code {;} {}
+ }
+ decl {Bank *bank;} {public
+ }
+}
+
+class BankSlot {open : {public Fl_Button,BankProcess_}
+} {
+ Function {BankSlot(int x,int y, int w, int h, const char *label=0):Fl_Button(x,y,w,h,label)} {open
+ } {
+ code {what=NULL;
+whatslot=NULL;
+nslot=0;
+nselected=NULL;} {selected
+ }
+ }
+ Function {handle(int event)} {return_type int
+ } {
+ code {if (what==NULL) return(0);
+if (Fl::event_inside(this)){
+ *what=0;*whatslot=nslot;
+ if ((event==FL_RELEASE)&&(Fl::event_button()==1))*what=1;
+ if ((event==FL_RELEASE)&&(Fl::event_button()==3))*what=2;
+ if (event==FL_PUSH) highlight=1;
+}else highlight=0;
+
+int tmp=Fl_Button::handle(event);
+if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)();
+return(tmp);} {}
+ }
+ Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_,int *nselected_)} {} {
+ code {nslot=nslot_;
+what=what_;
+whatslot=whatslot_;
+fnc=fnc_;
+bp=bp_;
+bank=bank_;
+nselected=nselected_;
+box(FL_THIN_UP_BOX);
+labelfont(0);
+labelsize(13);
+align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
+
+highlight=0;
+refresh();} {}
+ }
+ Function {refresh()} {} {
+ code {if (bank->emptyslot(nslot))
+ color(46);
+else if (bank->isPADsynth_used(nslot))
+ color(124);
+else
+ color(51);
+
+
+if (*nselected==nslot)
+ color(6);
+
+
+copy_label(bank->getnamenumbered(nslot).c_str());} {}
+ }
+ decl {int *what,*whatslot,nslot,highlight, *nselected;} {}
+ decl {void (BankProcess_:: *fnc)(void);} {}
+ decl {BankProcess_ *bp;} {}
+}
+
+class BankUI {open : {public BankProcess_}
+} {
+ Function {make_window()} {open
+ } {
+ Fl_Window bankuiwindow {
+ label Bank
+ xywh {492 406 785 575} type Double
+ code0 {o->label(bank->bankfiletitle.c_str());}
+ code1 {if (bank->bankfiletitle.empty()) o->label ("Choose a bank from the bank list on the left (or go to settings if to configure the bank location) or choose 'New Bank...' to make a new bank.");} visible
+ } {
+ Fl_Button {} {
+ label Close
+ callback {bankuiwindow->hide();}
+ xywh {705 546 70 24} box THIN_UP_BOX
+ }
+ Fl_Group {} {
+ xywh {5 34 772 491} box ENGRAVED_FRAME
+ } {
+ Fl_Pack {} {
+ xywh {10 39 150 481} box BORDER_FRAME
+ code0 {o->box(FL_FLAT_BOX);}
+ code1 {for (int i=0;i<32;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
+ } {}
+ Fl_Pack {} {
+ xywh {163 39 150 481} box BORDER_FRAME
+ code0 {o->box(FL_FLAT_BOX);}
+ code1 {for (int i=32;i<64;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
+ } {}
+ Fl_Pack {} {
+ xywh {316 39 150 481} box BORDER_FRAME
+ code0 {o->box(FL_FLAT_BOX);}
+ code1 {for (int i=64;i<96;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
+ } {}
+ Fl_Pack {} {
+ xywh {469 39 150 481} box BORDER_FRAME
+ code0 {o->box(FL_FLAT_BOX);}
+ code1 {for (int i=96;i<128;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
+ } {}
+ Fl_Pack {} {
+ xywh {622 39 150 481} box BORDER_FRAME
+ code0 {o->box(FL_FLAT_BOX);}
+ code1 {for (int i=128;i<160;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
+ } {}
+ }
+ Fl_Group modeselect {
+ xywh {5 528 425 42} box ENGRAVED_BOX
+ } {
+ Fl_Check_Button writebutton {
+ label WRITE
+ callback {if (o->value()>0.5) mode=2;
+removeselection();}
+ xywh {116 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13
+ code0 {if (bank->locked()) o->deactivate();}
+ }
+ Fl_Check_Button readbutton {
+ label READ selected
+ callback {if (o->value()>0.5) mode=1;
+removeselection();}
+ xywh {11 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13
+ code0 {o->value(1);}
+ }
+ Fl_Check_Button clearbutton {
+ label CLEAR
+ callback {if (o->value()>0.5) mode=3;
+removeselection();}
+ xywh {221 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13
+ code0 {if (bank->locked()) o->deactivate();}
+ }
+ Fl_Check_Button swapbutton {
+ label SWAP
+ callback {if (o->value()>0.5) mode=4;
+removeselection();}
+ xywh {325 534 99 30} type Radio box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 13
+ code0 {if (bank->locked()) o->deactivate();}
+ }
+ }
+ Fl_Button {} {
+ label {New Bank...}
+ callback {const char *dirname;
+
+dirname=fl_input("New empty Bank:");
+if (dirname==NULL) return;
+
+
+int result=bank->newbank(dirname);
+
+if (result!=0) fl_alert("Error: Could not make a new bank (directory)..");
+
+refreshmainwindow();}
+ xywh {685 5 93 25} labelfont 1 labelsize 11 align 128
+ }
+ Fl_Check_Button {} {
+ label {auto close}
+ callback {config.cfg.BankUIAutoClose=(int) o->value();}
+ tooltip {automatically close the bank window if the instrument is loaded} xywh {705 529 60 15} down_box DOWN_BOX labelsize 10
+ code0 {o->value(config.cfg.BankUIAutoClose);}
+ }
+ Fl_Choice banklist {
+ callback {int n=o->value();
+std::string dirname=bank->banks[n].dir;
+if (dirname.empty()) return;
+
+if (bank->loadbank(dirname)==2)
+ fl_alert("Error: Could not load the bank from the directory\\n%s.",dirname.c_str());
+for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();
+refreshmainwindow();}
+ xywh {5 8 220 20} down_box BORDER_BOX labelfont 1 align 0 textfont 1 textsize 11
+ } {}
+ Fl_Button {} {
+ label {Refresh bank list}
+ callback {rescan_for_banks();
+banklist->value(0);}
+ tooltip {Refresh the bank list (rescan)} xywh {230 8 105 20} box THIN_UP_BOX color 50 labelsize 11
+ }
+ Fl_Check_Button {} {
+ label {Show PADsynth status}
+ callback {config.cfg.CheckPADsynth=(int) o->value();
+refreshmainwindow();}
+ xywh {435 530 150 15} down_box DOWN_BOX labelsize 11
+ code0 {o->value(config.cfg.CheckPADsynth);}
+ }
+ }
+ }
+ Function {BankUI(Master *master_,int *npart_)} {} {
+ code {fnc=&BankProcess_::process;
+master=master_;
+npart=npart_;
+bank=&master_->bank;
+what=0;
+nselected=-1;
+make_window();
+mode=1;} {}
+ }
+ Function {~BankUI()} {return_type virtual
+ } {
+ code {bankuiwindow->hide();
+delete(bankuiwindow);} {}
+ }
+ Function {show()} {} {
+ code {bankuiwindow->show();
+simplesetmode(config.cfg.UserInterfaceMode==2);} {}
+ }
+ Function {hide()} {} {
+ code {bankuiwindow->hide();} {}
+ }
+ Function {init(Fl_Valuator *cbwig_)} {} {
+ code {cbwig=cbwig_;
+rescan_for_banks();} {}
+ }
+ Function {process()} {return_type void
+ } {
+ code {int slot=this->slot;
+
+if ((what==2)&&(bank->emptyslot(slot)==0)&&(mode!=4)) {//Rename slot
+ const char *tmp=fl_input("Slot (instrument) name:",bank->getname(slot).c_str());
+ if (tmp!=NULL) bank->setname(slot,tmp,-1);
+ bs[slot]->refresh();
+};
+
+if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot
+ pthread_mutex_lock(&master->part[*npart]->load_mutex);
+ bank->loadfromslot(slot,master->part[*npart]);
+ pthread_mutex_unlock(&master->part[*npart]->load_mutex);
+ master->part[*npart]->applyparameters();
+ snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN,"%s",bank->getname(slot).c_str());
+ cbwig->do_callback();
+
+ if (config.cfg.BankUIAutoClose!=0)
+ bankuiwindow->hide();
+
+};
+
+if ((what==1)&&(mode==2)){//save(write) to slot
+ if (!bank->emptyslot(slot)){
+ if (!fl_choice("Overwrite the slot no. %d ?","No","Yes",NULL,slot+1)) goto nooverwriteslot;
+ };
+ pthread_mutex_lock(&master->part[*npart]->load_mutex);
+ bank->savetoslot(slot,master->part[*npart]);
+ pthread_mutex_unlock(&master->part[*npart]->load_mutex);
+
+ bs[slot]->refresh();
+ mode=1;readbutton->value(1);writebutton->value(0);
+ nooverwriteslot:;
+};
+
+
+
+if ((what==1)&&(mode==3)&&(!bank->emptyslot(slot))){//Clears the slot
+ if (fl_choice("Clear the slot no. %d ?","No","Yes",NULL,slot+1)){
+ bank->clearslot(slot);
+ bs[slot]->refresh();
+ };
+};
+
+if (mode==4){//swap
+ bool done=false;
+ if ((what==1)&&(nselected>=0)){
+ bank->swapslot(nselected,slot);
+ int ns=nselected;
+ nselected=-1;
+ bs[slot]->refresh();
+ bs[ns]->refresh();
+ done=true;
+ };
+ if (((nselected<0)||(what==2))&&(!done)){
+ int ns=nselected;
+ nselected=slot;
+ if (ns>0) bs[ns]->refresh();
+ bs[slot]->refresh();
+ };
+};
+if (mode!=4) refreshmainwindow();} {}
+ }
+ Function {refreshmainwindow()} {} {
+ code {bankuiwindow->label(bank->bankfiletitle.c_str());
+mode=1;readbutton->value(1);writebutton->value(0);clearbutton->value(0);swapbutton->value(0);
+nselected=-1;
+if (bank->locked()){
+ writebutton->deactivate();
+ clearbutton->deactivate();
+ swapbutton->deactivate();
+} else {
+ writebutton->activate();
+ clearbutton->activate();
+ swapbutton->activate();
+};
+for (int i=0;i<BANK_SIZE;i++)
+ bs[i]->refresh();} {}
+ }
+ Function {removeselection()} {} {
+ code {if (nselected>=0) {
+ int ns=nselected;
+ nselected=-1;
+ bs[ns]->refresh();
+};} {}
+ }
+ Function {rescan_for_banks()} {} {
+ code {banklist->clear();
+bank->rescanforbanks();
+
+for (unsigned int i=0;i<bank->banks.size();i++) {
+ banklist->add(bank->banks[i].name.c_str());
+}
+if (banklist->size() == 0)
+ banklist->add(" ");} {}
+ }
+ Function {simplesetmode(bool beginnerui)} {} {
+ code {readbutton->value(1);
+mode=1;
+removeselection();
+if (beginnerui) modeselect->hide();
+ else modeselect->show();} {}
+ }
+ decl {BankSlot *bs[BANK_SIZE];} {}
+ decl {int slot,what;//"what"=what button is pressed} {}
+ decl {int mode,*npart,nselected;} {}
+ decl {Master *master;} {}
+ decl {void (BankProcess_::* fnc)(void);} {}
+ decl {Fl_Valuator *cbwig;} {public
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/CMakeLists.txt b/plugins/zynaddsubfx/zynaddsubfx/src/UI/CMakeLists.txt
new file mode 100644
index 0000000..38ea1e1
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/CMakeLists.txt
@@ -0,0 +1,45 @@
+set(UI_fl_files
+ ADnoteUI.fl
+ BankUI.fl
+ ConfigUI.fl
+ EffUI.fl
+ EnvelopeUI.fl
+ FilterUI.fl
+ LFOUI.fl
+ MasterUI.fl
+ MicrotonalUI.fl
+ OscilGenUI.fl
+ PADnoteUI.fl
+ PartUI.fl
+ PresetsUI.fl
+ ResonanceUI.fl
+ SUBnoteUI.fl
+ VirKeyboard.fl
+)
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+set_source_files_properties(UI/MasterUI.h PROPERTIES GENERATED 1)
+fltk_wrap_ui(zynaddsubfx_gui ${UI_fl_files})
+
+add_definitions(-DPIXMAP_PATH="${CMAKE_INSTALL_PREFIX}/share/zynaddsubfx/pixmaps/")
+add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
+
+if(LibloEnable)
+ set(zynaddsubfx_gui_FLTK_UI_SRCS ${zynaddsubfx_gui_FLTK_UI_SRCS} NSM.C NSM/Client.C)
+endif()
+
+add_library(zynaddsubfx_gui STATIC
+ ${UI_objs}
+ ${zynaddsubfx_gui_FLTK_UI_SRCS}
+ NioUI.cpp
+ WidgetPDial.cpp
+ )
+
+if(NtkGui)
+ target_link_libraries(zynaddsubfx_gui ${NTK_LIBRARIES})
+endif(NtkGui)
+
+if(FltkGui)
+ target_link_libraries(zynaddsubfx_gui ${FLTK_LIBRARIES})
+endif(FltkGui)
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl
new file mode 100644
index 0000000..c7ec12d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ConfigUI.fl
@@ -0,0 +1,415 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0302
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {private local
+}
+
+decl {//License: GNU GPL version 2 or later} {private local
+}
+
+decl {\#include <stdio.h>} {public local
+}
+
+decl {\#include <math.h>} {public local
+}
+
+decl {\#include <stdlib.h>} {public local
+}
+
+decl {\#include <FL/Fl_File_Chooser.H>} {public local
+}
+
+decl {\#include "../globals.h"} {public local
+}
+
+decl {\#include "../Misc/Util.h"} {public local
+}
+
+decl {\#include "../Misc/Dump.h"} {public local
+}
+
+decl {extern Dump dump;} {public local
+}
+
+class ConfigUI {} {
+ Function {make_window()} {} {
+ Fl_Window configwindow {
+ label {ZynAddSubFX Settings}
+ callback {writebankcfg();
+o->hide();}
+ xywh {554 443 510 370} type Double visible
+ } {
+ Fl_Tabs {} {
+ xywh {5 5 500 330}
+ } {
+ Fl_Group {} {
+ label {Main settings}
+ xywh {5 25 500 310}
+ } {
+ Fl_Group {} {
+ label {Sample Rate}
+ xywh {15 45 165 30} box ENGRAVED_FRAME
+ } {
+ Fl_Choice {} {
+ callback {if ((int)o->value()==0) samplerateinput->activate();
+ else samplerateinput->deactivate();
+
+int samplerates[8]={44100,16000,22050,32000,44100,48000,88200,96000};
+config.cfg.SampleRate=samplerates[(int)o->value()];
+
+setsamplerateinput();}
+ xywh {20 50 85 20} down_box BORDER_BOX textsize 10
+ code0 {o->value(getsamplerateorder());}
+ } {
+ MenuItem {} {
+ label Custom
+ xywh {10 10 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 16000Hz
+ xywh {30 30 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 22050Hz
+ xywh {20 20 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 32000Hz
+ xywh {30 30 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 44100Hz
+ xywh {40 40 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 48000Hz
+ xywh {50 50 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 88200Hz
+ xywh {60 60 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 96000Hz
+ xywh {70 70 100 20} labelfont 1
+ }
+ }
+ Fl_Input samplerateinput {
+ callback {char *tmp;
+config.cfg.SampleRate=strtoul(o->value(),&tmp,10);}
+ xywh {115 50 60 20} type Int textfont 1
+ code0 {setsamplerateinput();}
+ code1 {if (getsamplerateorder()!=0) o->deactivate();}
+ }
+ }
+ Fl_Input {} {
+ label {Buffer Size}
+ callback {char *tmp;
+config.cfg.SoundBufferSize=strtoul(o->value(),&tmp,10);}
+ tooltip {Internal Sound Buffer Size (samples)} xywh {190 45 60 20} type Int labelsize 11 align 129 textfont 1
+ code0 {char *tmpbuf=new char[100];o->cut(0,o->maximum_size());}
+ code1 {snprintf(tmpbuf,100,"%d",config.cfg.SoundBufferSize);o->insert(tmpbuf);}
+ code2 {delete []tmpbuf;}
+ }
+ Fl_Check_Button {} {
+ label {Swap Stereo }
+ callback {config.cfg.SwapStereo=(int) o->value();}
+ xywh {15 80 95 20} box NO_BOX labelsize 11
+ code0 {o->value(config.cfg.SwapStereo);}
+ }
+ Fl_Choice {} {
+ label OscilSize
+ callback {config.cfg.OscilSize=128<<o->value();}
+ tooltip {ADSynth Oscillator Size (samples)} xywh {175 80 75 20} down_box BORDER_BOX labelfont 1 labelsize 11 textsize 10
+ code0 {o->value( (int) (log(config.cfg.OscilSize/128.0-1.0)/log(2)) +1);}
+ } {
+ MenuItem {} {
+ label 128
+ xywh {25 25 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 256
+ xywh {35 35 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 512
+ xywh {45 45 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 1024
+ xywh {45 45 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 2048
+ xywh {55 55 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 4096
+ xywh {55 55 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 8192
+ xywh {65 65 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label 16384
+ xywh {75 75 100 20} labelfont 1
+ }
+ }
+ Fl_Box {} {
+ label {Most settings has effect only after ZynAddSubFX is restarted.}
+ xywh {10 300 235 30} labelfont 1 labelsize 11 align 128
+ }
+ Fl_Box {} {
+ label {Read the Readme.txt for other settings}
+ xywh {10 280 240 15} labelfont 1 labelsize 11 align 128
+ }
+ Fl_Group {} {
+ xywh {15 125 230 85} box ENGRAVED_BOX
+ } {
+ Fl_File_Input {} {
+ label {Dump File}
+ callback {config.cfg.DumpFile = o->value();}
+ xywh {20 170 220 35} align 5
+ code0 {o->insert(config.cfg.DumpFile.c_str());}
+ }
+ Fl_Check_Button {} {
+ label {Dump notes}
+ callback {config.cfg.DumpNotesToFile=(int) o->value();
+dump.startnow();//this has effect only if this option was disabled}
+ xywh {20 130 110 20} down_box DOWN_BOX
+ code0 {o->value(config.cfg.DumpNotesToFile);}
+ }
+ Fl_Check_Button {} {
+ label Append
+ callback {config.cfg.DumpAppend=(int) o->value();}
+ xywh {160 130 80 20} down_box DOWN_BOX
+ code0 {o->value(config.cfg.DumpAppend);}
+ }
+ }
+ Fl_Counter {} {
+ label {XML compression level}
+ callback {config.cfg.GzipCompression=(int) o->value();}
+ tooltip {gzip compression level (0 - uncompressed)} xywh {20 215 65 15} type Simple labelsize 11 align 8 minimum 0 maximum 9 step 1
+ code0 {o->value(config.cfg.GzipCompression);}
+ }
+ Fl_Choice {} {
+ label {PADsynth Interpolation}
+ callback {config.cfg.Interpolation=(int) o->value();}
+ xywh {175 105 75 15} down_box BORDER_BOX labelsize 10 textsize 11
+ code0 {o->value(config.cfg.Interpolation);}
+ } {
+ MenuItem {} {
+ label {Linear(fast)}
+ xywh {0 0 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Cubic(slow)}
+ xywh {10 10 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Choice {} {
+ label {Virtual Keyboard Layout}
+ callback {config.cfg.VirKeybLayout=(int) o->value();;}
+ xywh {155 235 85 20} down_box BORDER_BOX labelsize 12 textfont 1 textsize 11
+ code0 {o->value(config.cfg.VirKeybLayout);}
+ } {
+ MenuItem {} {
+ label { }
+ xywh {5 5 100 20} labelfont 1 labelsize 11 deactivate
+ }
+ MenuItem {} {
+ label QWERTY
+ xywh {15 15 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Dvorak
+ xywh {25 25 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label QWERTZ
+ xywh {35 35 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label AZERTY
+ xywh {45 45 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Check_Button {} {
+ label {Ignore MIDI Program Change}
+ callback {config.cfg.IgnoreProgramChange=(int) o->value();}
+ xywh {10 255 220 20} down_box DOWN_BOX
+ code0 {o->value(config.cfg.IgnoreProgramChange);}
+ }
+ }
+ Fl_Group {} {
+ label {Bank root dirs}
+ xywh {5 25 500 285} hide
+ } {
+ Fl_Browser rootsbrowse {
+ callback {activatebutton_rootdir(o->value()!=0);}
+ xywh {15 35 485 220} type Hold
+ }
+ Fl_Button {} {
+ label {Add root directory...}
+ callback {const char *dirname;
+dirname=fl_dir_chooser("Add a root directory for banks:",NULL,0);
+if (dirname==NULL) return;
+
+rootsbrowse->add(dirname);}
+ xywh {15 265 80 35} box THIN_UP_BOX align 128
+ }
+ Fl_Button removerootdirbutton {
+ label {Remove root dir...}
+ callback {if (rootsbrowse->value()!=0) {
+ rootsbrowse->remove(rootsbrowse->value());
+};
+activatebutton_rootdir(false);}
+ xywh {105 265 80 35} box THIN_UP_BOX align 128
+ code0 {o->deactivate();}
+ }
+ Fl_Button makedefaultrootdirbutton {
+ label {Make default}
+ callback {int n=rootsbrowse->value();
+
+if (n!=0) {
+ rootsbrowse->move(1,n);
+ rootsbrowse->value(1);
+ rootsbrowse->redraw();
+};
+activatebutton_rootdir(true);}
+ xywh {190 265 80 35} box THIN_UP_BOX align 128
+ code0 {o->deactivate();}
+ }
+ }
+ Fl_Group {} {
+ label {Presets dirs}
+ xywh {5 25 500 285} hide
+ } {
+ Fl_Browser presetbrowse {
+ callback {activatebutton_presetdir(o->value()!=0);}
+ xywh {15 35 485 220} type Hold
+ }
+ Fl_Button {} {
+ label {Add preset directory...}
+ callback {const char *dirname;
+dirname=fl_dir_chooser("Add a preset directory :",NULL,0);
+if (dirname==NULL) return;
+
+presetbrowse->add(dirname);}
+ xywh {15 265 80 35} box THIN_UP_BOX align 128
+ }
+ Fl_Button removepresetbutton {
+ label {Remove preset dir...}
+ callback {if (presetbrowse->value()!=0) {
+ presetbrowse->remove(presetbrowse->value());
+};
+activatebutton_presetdir(false);}
+ xywh {105 265 80 35} box THIN_UP_BOX align 128
+ code0 {o->deactivate();}
+ }
+ Fl_Button makedefaultpresetbutton {
+ label {Make default}
+ callback {int n=presetbrowse->value();
+
+if (n!=0) {
+ presetbrowse->move(1,n);
+ presetbrowse->value(1);
+ presetbrowse->redraw();
+};
+activatebutton_presetdir(true);}
+ xywh {190 265 80 35} box THIN_UP_BOX align 128
+ code0 {o->deactivate();}
+ }
+ }
+ }
+ Fl_Button {} {
+ label Close
+ callback {configwindow->hide();
+writebankcfg();
+writepresetcfg();}
+ xywh {200 345 105 20} box THIN_UP_BOX
+ }
+ }
+ }
+ Function {ConfigUI()} {} {
+ code {make_window();
+readbankcfg();
+readpresetcfg();} {}
+ }
+ Function {activatebutton_rootdir(bool active)} {} {
+ code {if (active) {
+ removerootdirbutton->activate();
+ makedefaultrootdirbutton->activate();
+}else{
+ removerootdirbutton->deactivate();
+ makedefaultrootdirbutton->deactivate();
+};} {}
+ }
+ Function {activatebutton_presetdir(bool active)} {} {
+ code {if (active) {
+ removepresetbutton->activate();
+ makedefaultpresetbutton->activate();
+}else{
+ removepresetbutton->deactivate();
+ makedefaultpresetbutton->deactivate();
+};} {}
+ }
+ Function {readbankcfg()} {} {
+ code {rootsbrowse->clear();
+
+for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
+ if (!config.cfg.bankRootDirList[i].empty())
+ rootsbrowse->add(config.cfg.bankRootDirList[i].c_str());
+};} {}
+ }
+ Function {writebankcfg()} {} {
+ code {config.clearbankrootdirlist();
+
+for (int n=0;n<rootsbrowse->size();n++){
+ config.cfg.bankRootDirList[n] = rootsbrowse->text(n+1);
+};} {}
+ }
+ Function {readpresetcfg()} {} {
+ code {presetbrowse->clear();
+
+for(int i=0;i<MAX_BANK_ROOT_DIRS;i++){
+ if(!config.cfg.presetsDirList[i].empty())
+ presetbrowse->add(config.cfg.presetsDirList[i].c_str());
+};} {}
+ }
+ Function {writepresetcfg()} {} {
+ code {config.clearpresetsdirlist();
+
+for (int n=0;n<presetbrowse->size();n++)
+ config.cfg.presetsDirList[n] = presetbrowse->text(n+1);} {}
+ }
+ Function {getsamplerateorder()} {return_type int
+ } {
+ code {int smpr=config.cfg.SampleRate;
+int order=0;
+switch(smpr){
+ case 16000:order=1;break;
+ case 22050:order=2;break;
+ case 32000:order=3;break;
+ case 44100:order=4;break;
+ case 48000:order=5;break;
+ case 88200:order=6;break;
+ case 96000:order=7;break;
+ default:order=0;break;
+};
+return(order);} {}
+ }
+ Function {setsamplerateinput()} {return_type void
+ } {
+ code {char *tmpbuf=new char[100];
+samplerateinput->cut(0,samplerateinput->maximum_size());
+snprintf(tmpbuf,100,"%d",config.cfg.SampleRate);
+samplerateinput->insert(tmpbuf);
+delete []tmpbuf;} {}
+ }
+ Function {show()} {} {
+ code {configwindow->show();} {}
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/EffUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/EffUI.fl
new file mode 100644
index 0000000..3df5093
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/EffUI.fl
@@ -0,0 +1,2351 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <string.h>} {public
+}
+
+decl {\#include "../globals.h"} {public
+}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "EnvelopeUI.h"} {public
+}
+
+decl {\#include "FilterUI.h"} {public
+}
+
+decl {\#include "../Misc/Util.h"} {public
+}
+
+decl {\#include "../Effects/EffectMgr.h"} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+decl {\#include "common.H"} {public
+}
+
+class EQGraph {: {public Fl_Box}
+} {
+ Function {EQGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {eff=NULL;
+maxdB=30;} {}
+ }
+ Function {init(EffectMgr *eff_)} {} {
+ code {eff=eff_;
+oldx=-1;
+khzval=-1;} {}
+ }
+ Function {draw_freq_line(float freq,int type)} {} {
+ code {fl_color(FL_GRAY);
+float freqx=getfreqpos(freq);
+switch(type){
+ case 0:if (active_r()) fl_color(FL_WHITE);
+ else fl_color(205,205,205);
+ fl_line_style(FL_SOLID);
+ break;
+ case 1:fl_line_style(FL_DOT);break;
+ case 2:fl_line_style(FL_DASH);break;
+};
+
+
+if ((freqx>0.0)&&(freqx<1.0))
+ fl_line(x()+(int) (freqx*w()),y(),
+ x()+(int) (freqx*w()),y()+h());} {}
+ }
+ Function {draw()} {} {
+ code {int ox=x(),oy=y(),lx=w(),ly=h(),i;
+ double iy,oiy;
+float freqx;
+
+if (active_r()) fl_color(fl_darker(FL_GRAY));
+ else fl_color(FL_GRAY);
+fl_rectf(ox,oy,lx,ly);
+
+
+//draw the lines
+fl_color(fl_lighter( FL_GRAY));
+
+fl_line_style(FL_SOLID);
+fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
+
+freqx=getfreqpos(1000.0);
+if ((freqx>0.0)&&(freqx<1.0))
+ fl_line(ox+(int) (freqx*lx),oy,
+ ox+(int) (freqx*lx),oy+ly);
+
+for (i=1;i<10;i++){
+ if(i==1){
+ draw_freq_line(i*100.0,0);
+ draw_freq_line(i*1000.0,0);
+ }else
+ if (i==5){
+ draw_freq_line(i*10.0,2);
+ draw_freq_line(i*100.0,2);
+ draw_freq_line(i*1000.0,2);
+ }else{
+ draw_freq_line(i*10.0,1);
+ draw_freq_line(i*100.0,1);
+ draw_freq_line(i*1000.0,1);
+ };
+};
+
+draw_freq_line(10000.0,0);
+draw_freq_line(20000.0,1);
+
+
+fl_line_style(FL_DOT);
+int GY=6;if (ly<GY*3) GY=-1;
+for (i=1;i<GY;i++){
+ int tmp=(int)(ly/(float)GY*i);
+ fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
+};
+
+
+//draw the frequency response
+if (active_r()) fl_color(FL_YELLOW);
+ else fl_color(200,200,80);
+fl_line_style(FL_SOLID,2);
+oiy=getresponse(ly,getfreqx(0.0));
+fl_begin_line();
+for (i=1;i<lx;i++){
+ float frq=getfreqx(i/(float) lx);
+ if (frq>synth->samplerate/2) break;
+ iy=getresponse(ly,frq);
+ if ((oiy>=0) && (oiy<ly) &&
+ (iy>=0) && (iy<ly) )
+ fl_vertex(ox+i,oy+ly-iy);
+ oiy=iy;
+};
+fl_end_line();
+fl_line_style(FL_SOLID,0);} {}
+ }
+ Function {getresponse(int maxy,float freq)} {return_type double
+ } {
+ code {float dbresp=eff->getEQfreqresponse(freq);
+int idbresp=(int) ((dbresp/maxdB+1.0)*maxy/2.0);
+
+
+//fprintf(stderr,"%.5f\\n",(dbresp/maxdB+1.0)*maxy/2.0);
+
+
+return(idbresp);} {}
+ }
+ Function {getfreqx(float x)} {return_type float
+ } {
+ code {if (x>1.0) x=1.0;
+return(20.0*pow((float)1000.0,x));} {}
+ }
+ Function {getfreqpos(float freq)} {return_type float
+ } {
+ code {if (freq<0.00001) freq=0.00001;
+return(log(freq/20.0)/log(1000.0));} {}
+ }
+ decl {int oldx;} {}
+ decl {float khzval;} {public
+ }
+ decl {EffectMgr *eff;} {}
+ decl {int maxdB;} {}
+}
+
+class EffUI {open : {public Fl_Group,public PresetsUI_}
+} {
+ Function {EffUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {eff=NULL;
+filterwindow=NULL;} {}
+ }
+ Function {~EffUI()} {} {
+ code {effnullwindow->hide();//delete (effnullwindow);
+effreverbwindow->hide();//delete (effreverbwindow);
+effechowindow->hide();//delete (effechowindow);
+effchoruswindow->hide();//delete (effchoruswindow);
+effphaserwindow->hide();//delete (effphaserwindow);
+effalienwahwindow->hide();//delete (effalienwahwindow);
+effdistorsionwindow->hide();//delete (effdistorsionwindow);
+effeqwindow->hide();//delete (effeqwindow);
+effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);
+
+if (filterwindow!=NULL){
+ filterwindow->hide();
+ delete(filterwindow);
+};} {}
+ }
+ Function {make_null_window()} {open
+ } {
+ Fl_Window effnullwindow {
+ label {No Effect}
+ xywh {612 881 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 16
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {}
+ }
+ Function {make_reverb_window()} {open
+ } {
+ Fl_Window effreverbwindow {
+ label Reverb open
+ xywh {377 636 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice revp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+
+refresh(eff);}
+ xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Cathedral 1}
+ xywh {10 10 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Cathedral 2}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Cathedral 3}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Hall 1}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Hall 2}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Room 1}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Room 2}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Basement
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Tunnel
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Echoed 1}
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Echoed 2}
+ xywh {110 110 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Very Long 1}
+ xywh {120 120 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Very Long 2}
+ xywh {130 130 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Choice revp10 {
+ label Type
+ callback {eff->seteffectpar(10,(int) o->value());
+if (eff->geteffectpar(10)==2) revp12->activate();
+ else revp12->deactivate();}
+ xywh {110 15 85 15} down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label Random
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Freeverb
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Bandwidth
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial revp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp1 {
+ label Pan
+ callback {eff->seteffectpar(1,(int) o->value());}
+ xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp2 {
+ label Time
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {Duration of Effect} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp3 {
+ label {I.del}
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {Initial Delay} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp4 {
+ label {I.delfb}
+ callback {eff->seteffectpar(4,(int) o->value());}
+ tooltip {Initial Delay Feedback} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp12 {
+ label bw
+ callback {eff->seteffectpar(12,(int) o->value());}
+ xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127 deactivate
+ code0 {if (eff->geteffectpar(10)==2) o->activate();}
+ class WidgetPDial
+ }
+ Fl_Dial revp6 {
+ label {E/R}
+ callback {eff->seteffectpar(6,(int) o->value());}
+ xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127 deactivate
+ class WidgetPDial
+ }
+ Fl_Dial revp7 {
+ label LPF
+ callback {eff->seteffectpar(7,(int) o->value());}
+ tooltip {Low Pass Filter} xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp8 {
+ label HPF
+ callback {eff->seteffectpar(8,(int) o->value());}
+ tooltip {High Pass Filter} xywh {305 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp9 {
+ label Damp
+ callback {eff->seteffectpar(9,(int) o->value());}
+ tooltip Dampening xywh {340 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 minimum 64 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial revp11 {
+ label {R.S.}
+ callback {int x=64;
+if (Fl::event_button1()) x=(int)o->value();
+ else o->value(x);
+eff->seteffectpar(11,x);}
+ tooltip RoomSize xywh {200 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 8 align 8 minimum 1 maximum 127 step 1
+ class WidgetPDial
+ }
+ }
+ }
+ Function {make_echo_window()} {open
+ } {
+ Fl_Window effechowindow {
+ label Echo
+ xywh {897 611 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice echop {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {11 15 95 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Echo 1}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Echo 2}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Echo 3}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Simple Echo}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Canyon
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Panning Echo 1}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Panning Echo 2}
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Panning Echo 3}
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Feedback Echo}
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial echop0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial echop1 {
+ label Pan
+ callback {eff->seteffectpar(1,(int) o->value());}
+ xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial echop2 {
+ label Delay
+ callback {eff->seteffectpar(2,(int) o->value());}
+ xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial echop3 {
+ label {LRdl.}
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {Delay Between L/R} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial echop4 {
+ label {LRc.}
+ callback {eff->seteffectpar(4,(int) o->value());}
+ tooltip {L/R Crossover} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial echop5 {
+ label {Fb.}
+ callback {eff->seteffectpar(5,(int) o->value());}
+ tooltip Feedback xywh {195 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial echop6 {
+ label Damp
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip Dampening xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ }
+ }
+ Function {make_chorus_window()} {open
+ } {
+ Fl_Window effchoruswindow {
+ label Chorus open
+ xywh {467 742 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice chorusp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Chorus 1}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Chorus 2}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Chorus 3}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Celeste 1}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Celeste 2}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 1}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 2}
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 3}
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 4}
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 5}
+ xywh {110 110 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial chorusp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp1 {
+ label Pan
+ callback {eff->seteffectpar(1,(int) o->value());}
+ xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp2 {
+ label Freq
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp3 {
+ label Rnd
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp5 {
+ label {St.df}
+ callback {eff->seteffectpar(5,(int) o->value());}
+ tooltip {L/R Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp6 {
+ label Dpth
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip {LFO Depth} xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp7 {
+ label Delay
+ callback {eff->seteffectpar(7,(int) o->value());}
+ xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp8 {
+ label Fb
+ callback {eff->seteffectpar(8,(int) o->value());}
+ tooltip Feedback xywh {305 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp9 {
+ label {L/R}
+ callback {eff->seteffectpar(9,(int) o->value());}
+ tooltip {Channel Routing} xywh {340 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Check_Button {} {
+ label Flange
+ callback {eff->seteffectpar(10,(int) o->value());}
+ xywh {120 10 55 20} box THIN_UP_BOX down_box DOWN_BOX color 230 labelfont 1 labelsize 10 hide deactivate
+ code0 {o->value(eff->geteffectpar(10));}
+ }
+ Fl_Check_Button chorusp11 {
+ label Substract
+ callback {eff->seteffectpar(11,(int) o->value());}
+ tooltip {inverts the output} xywh {185 10 70 20} box THIN_UP_BOX down_box DOWN_BOX color 51 labelsize 10
+ }
+ Fl_Choice chorusp4 {
+ label {LFO type}
+ callback {eff->seteffectpar(4,(int) o->value());}
+ tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8
+ } {
+ MenuItem {} {
+ label SINE
+ xywh {15 15 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label TRI
+ xywh {25 25 100 20} labelfont 1 labelsize 10
+ }
+ }
+ }
+ }
+ Function {make_phaser_window()} {open
+ } {
+ Fl_Window effphaserwindow {
+ label Phaser open
+ xywh {101 232 380 95} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice phaserp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {10 15 100 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Phaser 1}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 2}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 3}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 4}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 5}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 6}
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {APhaser 1}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {APhaser 2}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {APhaser 3}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {APhaser 4}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {APhaser 5}
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {APhaser 6}
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial phaserp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp1 {
+ label Pan
+ callback {eff->seteffectpar(1,(int) o->value());}
+ xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp2 {
+ label Freq
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {LFO frequency} xywh {85 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp3 {
+ label Rnd
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {LFO randomness} xywh {120 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Choice phaserp4 {
+ label LFO
+ callback {eff->seteffectpar(4,(int) o->value());}
+ tooltip {LFO function} xywh {245 55 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8
+ } {
+ MenuItem {} {
+ label SIN
+ xywh {15 15 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label TRI
+ xywh {25 25 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial phaserp5 {
+ label {St.df}
+ callback {eff->seteffectpar(5,(int) o->value());}
+ tooltip {Left/Right Channel Phase Shift} xywh {155 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp6 {
+ label Dpth
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip {LFO Depth} xywh {120 5 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp7 {
+ label Fb
+ callback {eff->seteffectpar(7,(int) o->value());}
+ tooltip Feedback xywh {185 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Counter phaserp8 {
+ label Stages
+ callback {eff->seteffectpar(8,(int) o->value());}
+ xywh {290 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1
+ code0 {o->range(1,MAX_PHASER_STAGES);}
+ }
+ Fl_Dial phaserp9 {
+ label {L/R}
+ callback {eff->seteffectpar(9,(int) o->value());}
+ tooltip {Channel Routing} xywh {215 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Check_Button phaserp10 {
+ label Substract
+ callback {eff->seteffectpar(10,(int) o->value());} selected
+ tooltip {inverts output} xywh {200 10 74 20} box THIN_UP_BOX down_box DOWN_BOX color 51 labelfont 1 labelsize 10
+ }
+ Fl_Dial phaserp11 {
+ label Phase
+ callback {eff->seteffectpar(11,(int) o->value());}
+ xywh {155 5 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 maximum 127
+ class WidgetPDial
+ }
+ Fl_Check_Button phaserp12 {
+ label {hyp.}
+ callback {eff->seteffectpar(12,(int) o->value());}
+ tooltip hyper xywh {245 35 55 15} down_box DOWN_BOX
+ }
+ Fl_Dial phaserp13 {
+ label dist
+ callback {eff->seteffectpar(13,(int) o->value());}
+ tooltip Distortion xywh {340 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Check_Button phaserp14 {
+ label Analog
+ callback {eff->seteffectpar(14,(int) o->value());}
+ xywh {305 35 70 15} down_box DOWN_BOX
+ }
+ }
+ }
+ Function {make_alienwah_window()} {open
+ } {
+ Fl_Window effalienwahwindow {
+ label AlienWah
+ xywh {253 353 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice awp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Alienwah 1}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Alienwah 2}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Alienwah 3}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Alienwah 4}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial awp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp1 {
+ label Pan
+ callback {eff->seteffectpar(1,(int) o->value());}
+ xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp2 {
+ label Freq
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp3 {
+ label Rnd
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp5 {
+ label {St.df}
+ callback {eff->seteffectpar(5,(int) o->value());}
+ tooltip {Left/Right Channel Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp6 {
+ label Dpth
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip Depth xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp7 {
+ label Fb
+ callback {eff->seteffectpar(7,(int) o->value());}
+ tooltip Feedback xywh {270 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp9 {
+ label {L/R}
+ callback {eff->seteffectpar(9,(int) o->value());}
+ xywh {345 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Choice awp4 {
+ label {LFO type}
+ callback {eff->seteffectpar(4,(int) o->value());}
+ tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8
+ } {
+ MenuItem {} {
+ label SINE
+ xywh {15 15 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label TRI
+ xywh {25 25 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial awp10 {
+ label Phase
+ callback {eff->seteffectpar(10,(int) o->value());}
+ xywh {160 5 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Counter awp8 {
+ label Delay
+ callback {eff->seteffectpar(8,(int) o->value());}
+ xywh {305 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1
+ code0 {o->range(1,MAX_ALIENWAH_DELAY);}
+ }
+ }
+ }
+ Function {make_distorsion_window()} {open
+ } {
+ Fl_Window effdistorsionwindow {
+ label Distortion open
+ xywh {544 217 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice distp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {11 15 95 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Overdrive 1}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Overdrive 2}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {A. Exciter 1}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {A. Exciter 2}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Guitar Amp}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Quantisize
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial distp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp1 {
+ label Pan
+ callback {eff->seteffectpar(1,(int) o->value());}
+ xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp2 {
+ label {LRc.}
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {L/R Mix} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp3 {
+ label Drive
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {Input Amplification} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp4 {
+ label Level
+ callback {eff->seteffectpar(4,(int) o->value());}
+ tooltip {Output Amplification} xywh {155 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp7 {
+ label LPF
+ callback {eff->seteffectpar(7,(int) o->value());}
+ tooltip {Low Pass Filter} xywh {285 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp8 {
+ label HPF
+ callback {eff->seteffectpar(8,(int) o->value());}
+ tooltip {High Pass Filter} xywh {320 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Choice distp5 {
+ label Type
+ callback {eff->seteffectpar(5,(int) o->value());}
+ xywh {190 50 60 20} box UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 align 2 textsize 10
+ } {
+ MenuItem {} {
+ label Atan
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Asym1
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sine
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Qnts
+ xywh {95 95 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Zigzg
+ xywh {105 105 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Lmt
+ xywh {115 115 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LmtU
+ xywh {125 125 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LmtL
+ xywh {135 135 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label ILmt
+ xywh {147 147 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Clip
+ xywh {157 157 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Asym2
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow2
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sgm
+ xywh {95 95 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Check_Button distp6 {
+ label {Neg.}
+ callback {eff->seteffectpar(6,(int) o->value());}
+ xywh {260 55 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2
+ }
+ Fl_Check_Button distp9 {
+ label {St.}
+ callback {eff->seteffectpar(9,(int) o->value());}
+ tooltip Stereo xywh {355 60 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2
+ }
+ Fl_Check_Button distp10 {
+ label PF
+ callback {eff->seteffectpar(10,(int) o->value());}
+ tooltip {Applies the filters(before or after) the distorsion} xywh {355 44 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 1
+ }
+ }
+ }
+ Function {make_eq_window()} {open
+ } {
+ Fl_Window effeqwindow {
+ label EQ open
+ xywh {682 881 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Dial eqp0 {
+ label Gain
+ callback {eff->seteffectpar(0,(int) o->value());
+eqgraph->redraw();}
+ xywh {10 35 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Counter bandcounter {
+ label {B.}
+ callback {eqband=(int) o->value();
+int npb=eqband*5+10;
+
+int type=eff->geteffectpar(npb);
+typechoice->value(type);
+
+if (type>6) gaindial->activate();
+ else gaindial->deactivate();
+
+if (type==0) bandgroup->deactivate();
+else bandgroup->activate();
+
+int freq=eff->geteffectpar(npb+1);
+freqdial->value(freq);
+
+int gain=eff->geteffectpar(npb+2);
+gaindial->value(gain);
+
+int q=eff->geteffectpar(npb+3);
+qdial->value(q);
+
+int dbl=eff->geteffectpar(npb+4);
+stagescounter->value(dbl);}
+ tooltip {Band no.} xywh {240 20 45 15} type Simple labelfont 1 labelsize 11 align 1 minimum 0 maximum 1 step 1 textfont 1 textsize 11
+ code0 {o->bounds(0,MAX_EQ_BANDS-1);}
+ }
+ Fl_Group bandgroup {
+ xywh {245 40 130 50} box ENGRAVED_FRAME
+ code0 {if (eff->geteffectpar(10)==0) o->deactivate();}
+ } {
+ Fl_Dial freqdial {
+ label Freq
+ callback {int np=eqband*5+11;
+eff->seteffectpar(np,(int) o->value());
+eqgraph->redraw();}
+ xywh {250 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial gaindial {
+ label Gain
+ callback {int np=eqband*5+12;
+eff->seteffectpar(np,(int) o->value());
+eqgraph->redraw();}
+ xywh {280 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial qdial {
+ label Q
+ callback {int np=eqband*5+13;
+eff->seteffectpar(np,(int) o->value());
+eqgraph->redraw();}
+ tooltip {Resonance/Bandwidth} xywh {310 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127
+ class WidgetPDial
+ }
+ Fl_Counter stagescounter {
+ label {St.}
+ callback {int np=eqband*5+14;
+eff->seteffectpar(np,(int) o->value());
+eqgraph->redraw();}
+ tooltip {Additional filter stages} xywh {340 60 30 15} type Simple labelfont 1 labelsize 10 minimum 1 maximum 127 step 1 textfont 1 textsize 11
+ code0 {o->bounds(0,MAX_FILTER_STAGES-1);}
+ }
+ }
+ Fl_Choice typechoice {
+ label {T.}
+ callback {int np=eqband*5+10;
+eff->seteffectpar(np,(int) o->value());
+bandcounter->do_callback();
+eqgraph->redraw();}
+ tooltip Type xywh {290 20 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 when 6 textsize 10
+ } {
+ MenuItem {} {
+ label OFF
+ xywh {0 0 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Lp1
+ xywh {10 10 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Hp1
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Lp2
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Hp2
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Bp2
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label N2
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pk
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LSh
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label HSh
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Box eqgraph {
+ xywh {45 10 190 75} box BORDER_BOX color 50
+ code0 {o->init(eff);}
+ class EQGraph
+ }
+ }
+ }
+ Function {make_dynamicfilter_window()} {open
+ } {
+ Fl_Window effdynamicfilterwindow {
+ label DynFilter open
+ xywh {819 290 380 100} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 25
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice dfp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 14 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label WahWah
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label AutoWah
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sweep
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label VocalMorph1
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label VocalMorph2
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial dfp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp1 {
+ label Pan
+ callback {eff->seteffectpar(1,(int) o->value());}
+ xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp2 {
+ label Freq
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {LFO Frequency} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp3 {
+ label Rnd
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {LFO Randomness} xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp5 {
+ label {St.df}
+ callback {eff->seteffectpar(5,(int) o->value());}
+ tooltip {Left/Right Channel Phase Shift} xywh {200 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp6 {
+ label LfoD
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip {LFO Depth} xywh {235 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Choice dfp4 {
+ label {LFO type}
+ callback {eff->seteffectpar(4,(int) o->value());}
+ tooltip {LFO function} xywh {155 50 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 130 textsize 8
+ } {
+ MenuItem {} {
+ label SINE
+ xywh {15 15 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label TRI
+ xywh {25 25 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Button {} {
+ label Filter
+ callback {filterwindow->show();}
+ xywh {115 10 55 25} box THIN_UP_BOX
+ }
+ Fl_Group {} {
+ xywh {270 40 105 45} box UP_FRAME color 51
+ } {
+ Fl_Dial dfp7 {
+ label {A.S.}
+ callback {eff->seteffectpar(7,(int) o->value());}
+ tooltip {Filter vs Amplitude} xywh {275 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp9 {
+ label {A.M}
+ callback {eff->seteffectpar(9,(int) o->value());}
+ tooltip {rate that amplitude changes the filter} xywh {305 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Check_Button dfp8 {
+ label {A.Inv.}
+ callback {eff->seteffectpar(8,(int) o->value());}
+ tooltip {enable for filter frequency to lower with higher input amplitude} xywh {345 55 15 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 2
+ }
+ }
+ }
+ }
+ Function {make_filter_window()} {open
+ } {
+ Fl_Window filterwindow {
+ label {Filter Parameters for DynFilter Eff.}
+ xywh {801 474 290 110} type Double
+ code0 {set_module_parameters(o);} visible
+ } {
+ Fl_Group {} {
+ label {DynFilter effect - Filter}
+ xywh {5 5 275 75} box FLAT_BOX color 50 align 144
+ code0 {o->init(eff->filterpars,NULL,NULL);}
+ code1 {o->use_for_dynamic_filter();}
+ class FilterUI
+ } {}
+ Fl_Button {} {
+ label Close
+ callback {filterwindow->hide();}
+ xywh {105 85 70 20} box THIN_UP_BOX
+ }
+ }
+ }
+ Function {init(EffectMgr *eff_)} {} {
+ code {eff=eff_;
+
+make_null_window();
+make_reverb_window();
+make_echo_window();
+make_chorus_window();
+make_phaser_window();
+make_alienwah_window();
+make_distorsion_window();
+make_eq_window();
+make_dynamicfilter_window();
+
+int px=this->parent()->x();
+int py=this->parent()->y();
+
+effnullwindow->position(px,py);
+effreverbwindow->position(px,py);
+effechowindow->position(px,py);
+effchoruswindow->position(px,py);
+effphaserwindow->position(px,py);
+effalienwahwindow->position(px,py);
+effdistorsionwindow->position(px,py);
+effeqwindow->position(px,py);
+effdynamicfilterwindow->position(px,py);
+
+refresh(eff);} {}
+ }
+ Function {refresh(EffectMgr *eff_)} {open
+ } {
+ code {eff=eff_;
+this->hide();
+
+effnullwindow->hide();
+effreverbwindow->hide();
+effechowindow->hide();
+effchoruswindow->hide();
+effphaserwindow->hide();
+effalienwahwindow->hide();
+effdistorsionwindow->hide();
+effeqwindow->hide();
+effdynamicfilterwindow->hide();
+
+eqband=0;
+
+if (filterwindow!=NULL){
+ filterwindow->hide();
+ delete(filterwindow);
+ filterwindow=NULL;
+};
+
+switch(eff->geteffect()){
+ case 1:
+ revp->value(eff->getpreset());
+ revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
+ revp1->value(eff->geteffectpar(1));
+ revp2->value(eff->geteffectpar(2));
+ revp3->value(eff->geteffectpar(3));
+ revp4->value(eff->geteffectpar(4));
+ //revp5->value(eff->geteffectpar(5));
+ revp6->value(eff->geteffectpar(6));
+ revp7->value(eff->geteffectpar(7));
+ revp8->value(eff->geteffectpar(8));
+ revp9->value(eff->geteffectpar(9));
+ revp10->value(eff->geteffectpar(10));
+ revp11->value(eff->geteffectpar(11));
+ revp12->value(eff->geteffectpar(12));
+
+ effreverbwindow->show();
+ break;
+ case 2:
+ echop->value(eff->getpreset());
+ echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
+ echop1->value(eff->geteffectpar(1));
+ echop2->value(eff->geteffectpar(2));
+ echop3->value(eff->geteffectpar(3));
+ echop4->value(eff->geteffectpar(4));
+ echop5->value(eff->geteffectpar(5));
+ echop6->value(eff->geteffectpar(6));
+ effechowindow->show();
+ break;
+ case 3:
+ chorusp->value(eff->getpreset());
+ chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
+ chorusp1->value(eff->geteffectpar(1));
+ chorusp2->value(eff->geteffectpar(2));
+ chorusp3->value(eff->geteffectpar(3));
+ chorusp4->value(eff->geteffectpar(4));
+ chorusp5->value(eff->geteffectpar(5));
+ chorusp6->value(eff->geteffectpar(6));
+ chorusp7->value(eff->geteffectpar(7));
+ chorusp8->value(eff->geteffectpar(8));
+ chorusp9->value(eff->geteffectpar(9));
+ chorusp11->value(eff->geteffectpar(11));
+ effchoruswindow->show();
+ break;
+ case 4:
+ phaserp->value(eff->getpreset());
+ phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
+ phaserp1->value(eff->geteffectpar(1));
+ phaserp2->value(eff->geteffectpar(2));
+ phaserp3->value(eff->geteffectpar(3));
+ phaserp4->value(eff->geteffectpar(4));
+ phaserp5->value(eff->geteffectpar(5));
+ phaserp6->value(eff->geteffectpar(6));
+ phaserp7->value(eff->geteffectpar(7));
+ phaserp8->value(eff->geteffectpar(8));
+ phaserp9->value(eff->geteffectpar(9));
+ phaserp10->value(eff->geteffectpar(10));
+ phaserp11->value(eff->geteffectpar(11));
+ phaserp12->value(eff->geteffectpar(12));
+ phaserp13->value(eff->geteffectpar(13));
+ phaserp14->value(eff->geteffectpar(14));
+ effphaserwindow->show();
+ break;
+ case 5:
+ awp->value(eff->getpreset());
+ awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
+ awp1->value(eff->geteffectpar(1));
+ awp2->value(eff->geteffectpar(2));
+ awp3->value(eff->geteffectpar(3));
+ awp4->value(eff->geteffectpar(4));
+ awp5->value(eff->geteffectpar(5));
+ awp6->value(eff->geteffectpar(6));
+ awp7->value(eff->geteffectpar(7));
+ awp8->value(eff->geteffectpar(8));
+ awp9->value(eff->geteffectpar(9));
+ awp10->value(eff->geteffectpar(10));
+
+ effalienwahwindow->show();
+ break;
+ case 6:
+ distp->value(eff->getpreset());
+ distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
+ distp1->value(eff->geteffectpar(1));
+ distp2->value(eff->geteffectpar(2));
+ distp3->value(eff->geteffectpar(3));
+ distp4->value(eff->geteffectpar(4));
+ distp5->value(eff->geteffectpar(5));
+ distp6->value(eff->geteffectpar(6));
+ distp7->value(eff->geteffectpar(7));
+ distp8->value(eff->geteffectpar(8));
+ distp9->value(eff->geteffectpar(9));
+ distp10->value(eff->geteffectpar(10));
+ effdistorsionwindow->show();
+ break;
+ case 7:eqband=0;
+ eqp0->value(eff->geteffectpar(0));
+ bandcounter->value(eqband);
+ bandcounter->do_callback();
+ typechoice->value(eff->geteffectpar(10));
+ eqgraph->redraw();
+ freqdial->value(eff->geteffectpar(11));
+ gaindial->value(eff->geteffectpar(12));
+ if (eff->geteffectpar(10)<6) gaindial->deactivate();
+ qdial->value(eff->geteffectpar(13));
+ stagescounter->value(eff->geteffectpar(14));
+ eqgraph->init(eff);
+ effeqwindow->show();
+ break;
+ case 8:make_filter_window();
+ dfp->value(eff->getpreset());
+ dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
+ dfp1->value(eff->geteffectpar(1));
+ dfp2->value(eff->geteffectpar(2));
+ dfp3->value(eff->geteffectpar(3));
+ dfp4->value(eff->geteffectpar(4));
+ dfp5->value(eff->geteffectpar(5));
+ dfp6->value(eff->geteffectpar(6));
+ dfp7->value(eff->geteffectpar(7));
+ dfp8->value(eff->geteffectpar(8));
+ dfp9->value(eff->geteffectpar(9));
+
+
+ effdynamicfilterwindow->show();
+ break;
+ default:effnullwindow->show();
+ break;
+};
+
+this->show();} {}
+ }
+ Function {refresh()} {open
+ } {
+ code {refresh(eff);} {}
+ }
+ decl {EffectMgr *eff;} {}
+ decl {int eqband;} {}
+}
+
+class SimpleEffUI {open : {public Fl_Group,public PresetsUI_}
+} {
+ Function {SimpleEffUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {eff=NULL;} {}
+ }
+ Function {~SimpleEffUI()} {} {
+ code {effnullwindow->hide();//delete (effnullwindow);
+effreverbwindow->hide();//delete (effreverbwindow);
+effechowindow->hide();//delete (effechowindow);
+effchoruswindow->hide();//delete (effchoruswindow);
+effphaserwindow->hide();//delete (effphaserwindow);
+effalienwahwindow->hide();//delete (effalienwahwindow);
+effdistorsionwindow->hide();//delete (effdistorsionwindow);
+effeqwindow->hide();//delete (effeqwindow);
+effdynamicfilterwindow->hide();//delete (effdynamicfilterwindow);} {}
+ }
+ Function {make_null_window()} {open
+ } {
+ Fl_Window effnullwindow {
+ label {No Effect} open
+ xywh {1047 755 230 95} type Double box UP_BOX color 221 labelfont 1 labelsize 19 align 16
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {}
+ }
+ Function {make_reverb_window()} {open
+ } {
+ Fl_Window effreverbwindow {
+ label Reverb open
+ xywh {1047 463 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25
+ code3 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice revp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+
+refresh(eff);}
+ xywh {10 15 90 15} down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Cathedral 1}
+ xywh {10 10 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Cathedral 2}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Cathedral 3}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Hall 1}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Hall 2}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Room 1}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Room 2}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Basement
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Tunnel
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Echoed 1}
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Echoed 2}
+ xywh {110 110 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Very Long 1}
+ xywh {120 120 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Very Long 2}
+ xywh {130 130 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial revp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp2 {
+ label Time
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {Duration of Reverb} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp3 {
+ label {I.del}
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {Initial Delay} xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial revp9 {
+ label Damp
+ callback {eff->seteffectpar(9,(int) o->value());}
+ tooltip Dampening xywh {120 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 minimum 64 maximum 127 step 1
+ class WidgetPDial
+ }
+ }
+ }
+ Function {make_echo_window()} {open
+ } {
+ Fl_Window effechowindow {
+ label Echo open
+ xywh {428 823 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25
+ code3 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice echop {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {11 15 95 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Echo 1}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Echo 2}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Echo 3}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Simple Echo}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Canyon
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Panning Echo 1}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Panning Echo 2}
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Panning Echo 3}
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Feedback Echo}
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial echop0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial echop2 {
+ label Delay
+ callback {eff->seteffectpar(2,(int) o->value());}
+ xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial echop5 {
+ label {Fb.}
+ callback {eff->seteffectpar(5,(int) o->value());}
+ tooltip Feedback xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ }
+ }
+ Function {make_chorus_window()} {open
+ } {
+ Fl_Window effchoruswindow {
+ label Chorus open
+ xywh {719 588 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25
+ code3 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice chorusp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Chorus 1}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Chorus 2}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Chorus 3}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Celeste 1}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Celeste 2}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 1}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 2}
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 3}
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 4}
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Flange 5}
+ xywh {110 110 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial chorusp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp2 {
+ label Freq
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {LFO Frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp6 {
+ label Dpth
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip Depth xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp7 {
+ label Delay
+ callback {eff->seteffectpar(7,(int) o->value());}
+ xywh {115 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial chorusp8 {
+ label Fb
+ callback {eff->seteffectpar(8,(int) o->value());}
+ tooltip Feedback xywh {150 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Check_Button {} {
+ label Flange
+ callback {eff->seteffectpar(10,(int) o->value());}
+ xywh {120 10 55 20} box THIN_UP_BOX down_box DOWN_BOX color 230 labelfont 1 labelsize 10 hide deactivate
+ code0 {o->value(eff->geteffectpar(10));}
+ }
+ }
+ }
+ Function {make_phaser_window()} {open
+ } {
+ Fl_Window effphaserwindow {
+ label Phaser open
+ xywh {1047 831 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25
+ code3 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice phaserp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 0 labelfont 1 labelsize 10 labelcolor 55 align 5 textfont 1 textsize 10 textcolor 7
+ } {
+ MenuItem {} {
+ label {Phaser 1}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 2}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 3}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 4}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 5}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Phaser 6}
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial phaserp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp2 {
+ label Freq
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp5 {
+ label {St.df}
+ callback {eff->seteffectpar(5,(int) o->value());}
+ tooltip {Left/Right Channel Phase Shift} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp6 {
+ label Dpth
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip Depth xywh {115 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial phaserp7 {
+ label Fb
+ callback {eff->seteffectpar(7,(int) o->value());}
+ tooltip Feedback xywh {150 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Counter phaserp8 {
+ label Stages
+ callback {eff->seteffectpar(8,(int) o->value());}
+ xywh {185 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1
+ code0 {o->range(1,MAX_PHASER_STAGES);}
+ }
+ }
+ }
+ Function {make_alienwah_window()} {open
+ } {
+ Fl_Window effalienwahwindow {
+ label AlienWah open
+ xywh {403 480 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25
+ code3 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice awp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Alienwah 1}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Alienwah 2}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Alienwah 3}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Alienwah 4}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial awp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp2 {
+ label Freq
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial awp6 {
+ label Dpth
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip Depth xywh {85 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Counter awp8 {
+ label Delay
+ callback {eff->seteffectpar(8,(int) o->value());}
+ xywh {125 55 35 15} type Simple labelfont 1 labelsize 11 minimum 0 maximum 127 step 1
+ code0 {o->range(1,MAX_ALIENWAH_DELAY);}
+ }
+ }
+ }
+ Function {make_distorsion_window()} {open
+ } {
+ Fl_Window effdistorsionwindow {
+ label Distortion open
+ xywh {353 881 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25
+ code3 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice distp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {11 15 95 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label {Overdrive 1}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Overdrive 2}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {A. Exciter 1}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {A. Exciter 2}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Guitar Amp}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Quantisize
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial distp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp3 {
+ label Drive
+ callback {eff->seteffectpar(3,(int) o->value());}
+ tooltip {Input amplification} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 when 4 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp4 {
+ label Level
+ callback {eff->seteffectpar(4,(int) o->value());}
+ tooltip {Output Amplification} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial distp7 {
+ label LPF
+ callback {eff->seteffectpar(7,(int) o->value());}
+ tooltip {Low Pass Filter} xywh {190 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Choice distp5 {
+ label Type
+ callback {eff->seteffectpar(5,(int) o->value());}
+ xywh {120 50 60 20} box UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 align 2 textsize 10
+ } {
+ MenuItem {} {
+ label Atan
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Asym1
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sine
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Qnts
+ xywh {95 95 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Zigzg
+ xywh {105 105 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Lmt
+ xywh {115 115 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LmtU
+ xywh {125 125 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LmtL
+ xywh {135 135 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label ILmt
+ xywh {147 147 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Clip
+ xywh {157 157 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Asym2
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow2
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sgm
+ xywh {95 95 100 20} labelfont 1 labelsize 10
+ }
+ }
+ }
+ }
+ Function {make_eq_window()} {open
+ } {
+ Fl_Window effeqwindow {
+ label EQ open
+ xywh {1047 881 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25
+ code3 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Counter bandcounter {
+ label Band
+ callback {eqband=(int) o->value();
+int npb=eqband*5+10;
+
+int type=eff->geteffectpar(npb);
+typechoice->value(type);
+
+if (type>6) gaindial->activate();
+ else gaindial->deactivate();
+
+if (type==0) bandgroup->deactivate();
+else bandgroup->activate();
+
+int freq=eff->geteffectpar(npb+1);
+freqdial->value(freq);
+
+int gain=eff->geteffectpar(npb+2);
+gaindial->value(gain);
+
+int q=eff->geteffectpar(npb+3);
+qdial->value(q);
+
+int dbl=eff->geteffectpar(npb+4);
+stagescounter->value(dbl);}
+ tooltip {Band no.} xywh {85 15 45 15} type Simple labelfont 1 labelsize 11 align 1 minimum 0 maximum 1 step 1 textfont 1 textsize 11
+ code0 {o->bounds(0,MAX_EQ_BANDS-1);}
+ }
+ Fl_Group bandgroup {
+ xywh {5 5 75 85} box UP_FRAME
+ code0 {if (eff->geteffectpar(10)==0) o->deactivate();}
+ } {
+ Fl_Dial freqdial {
+ label Freq
+ callback {int np=eqband*5+11;
+eff->seteffectpar(np,(int) o->value());
+eqgraph->redraw();}
+ xywh {10 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial gaindial {
+ label Gain
+ callback {int np=eqband*5+12;
+eff->seteffectpar(np,(int) o->value());
+eqgraph->redraw();}
+ xywh {45 10 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial qdial {
+ label Q
+ callback {int np=eqband*5+13;
+eff->seteffectpar(np,(int) o->value());
+eqgraph->redraw();}
+ tooltip {Bandwidth/Resonance} xywh {10 50 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 when 3 maximum 127
+ class WidgetPDial
+ }
+ Fl_Counter stagescounter {
+ label Stages
+ callback {int np=eqband*5+14;
+eff->seteffectpar(np,(int) o->value());
+eqgraph->redraw();}
+ tooltip {Additional filter stages} xywh {40 55 30 15} type Simple labelfont 1 labelsize 10 minimum 1 maximum 127 step 1 textfont 1 textsize 11
+ code0 {o->bounds(0,MAX_FILTER_STAGES-1);}
+ }
+ }
+ Fl_Choice typechoice {
+ label Type
+ callback {int np=eqband*5+10;
+eff->seteffectpar(np,(int) o->value());
+bandcounter->do_callback();
+eqgraph->redraw();}
+ tooltip Type xywh {135 15 40 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 when 6 textsize 10
+ } {
+ MenuItem {} {
+ label OFF
+ xywh {10 10 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Lp1
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Hp1
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Lp2
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Hp2
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Bp2
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label N2
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pk
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LSh
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label HSh
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Box eqgraph {
+ xywh {85 35 140 55} box BORDER_BOX color 50
+ code0 {o->init(eff);}
+ class EQGraph
+ }
+ }
+ }
+ Function {make_dynamicfilter_window()} {open
+ } {
+ Fl_Window effdynamicfilterwindow {
+ label DynFilter open
+ xywh {965 527 230 100} type Double box UP_BOX color 51 labelfont 1 labelsize 19 align 25
+ code3 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Choice dfp {
+ label Preset
+ callback {eff->changepreset((int)o->value());
+refresh(eff);}
+ xywh {10 15 90 15} box UP_BOX down_box BORDER_BOX color 47 selection_color 7 labelfont 1 labelsize 10 align 5 textfont 1 textsize 10
+ } {
+ MenuItem {} {
+ label WahWah
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label AutoWah
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sweep
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label VocalMorph1
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label VocalMorph2
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial dfp0 {
+ label Vol
+ callback {eff->seteffectpar(0,(int) o->value());}
+ tooltip {Effect Volume} xywh {10 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp2 {
+ label Freq
+ callback {eff->seteffectpar(2,(int) o->value());}
+ tooltip {LFO frequency} xywh {45 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp6 {
+ label LfoD
+ callback {eff->seteffectpar(6,(int) o->value());}
+ tooltip {LFO depth} xywh {80 40 30 30} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Group {} {
+ xywh {115 40 65 45} box UP_FRAME
+ } {
+ Fl_Dial dfp7 {
+ label {A.S.}
+ callback {eff->seteffectpar(7,(int) o->value());}
+ tooltip {how filter varies with amplitude} xywh {120 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ Fl_Dial dfp9 {
+ label {A.M}
+ callback {eff->seteffectpar(9,(int) o->value());}
+ tooltip {how quickly the filter varies with amplitude} xywh {150 45 25 25} box ROUND_UP_BOX labelfont 1 labelsize 11 maximum 127
+ class WidgetPDial
+ }
+ }
+ }
+ }
+ Function {init(EffectMgr *eff_)} {open
+ } {
+ code {eff=eff_;
+
+make_null_window();
+make_reverb_window();
+make_echo_window();
+make_chorus_window();
+make_phaser_window();
+make_alienwah_window();
+make_distorsion_window();
+make_eq_window();
+make_dynamicfilter_window();
+
+int px=this->parent()->x();
+int py=this->parent()->y();
+
+effnullwindow->position(px,py);
+effreverbwindow->position(px,py);
+effechowindow->position(px,py);
+effchoruswindow->position(px,py);
+effphaserwindow->position(px,py);
+effalienwahwindow->position(px,py);
+effdistorsionwindow->position(px,py);
+effeqwindow->position(px,py);
+effdynamicfilterwindow->position(px,py);
+
+refresh(eff);} {}
+ }
+ Function {refresh(EffectMgr *eff_)} {} {
+ code {eff=eff_;
+this->hide();
+
+effnullwindow->hide();
+effreverbwindow->hide();
+effechowindow->hide();
+effchoruswindow->hide();
+effphaserwindow->hide();
+effalienwahwindow->hide();
+effdistorsionwindow->hide();
+effeqwindow->hide();
+effdynamicfilterwindow->hide();
+
+eqband=0;
+
+
+switch(eff->geteffect()){
+ case 1:
+ revp->value(eff->getpreset());
+ revp0->value(eff->geteffectpar(0));if (eff->insertion!=0) revp0->label("D/W");
+ revp2->value(eff->geteffectpar(2));
+ revp3->value(eff->geteffectpar(3));
+ revp9->value(eff->geteffectpar(9));
+ effreverbwindow->show();
+ break;
+ case 2:
+ echop->value(eff->getpreset());
+ echop0->value(eff->geteffectpar(0));if (eff->insertion!=0) echop0->label("D/W");
+ echop2->value(eff->geteffectpar(2));
+ echop5->value(eff->geteffectpar(5));
+ effechowindow->show();
+ break;
+ case 3:
+ chorusp->value(eff->getpreset());
+ chorusp0->value(eff->geteffectpar(0));if (eff->insertion!=0) chorusp0->label("D/W");
+ chorusp2->value(eff->geteffectpar(2));
+ chorusp6->value(eff->geteffectpar(6));
+ chorusp7->value(eff->geteffectpar(7));
+ chorusp8->value(eff->geteffectpar(8));
+ effchoruswindow->show();
+ break;
+ case 4:
+ phaserp->value(eff->getpreset());
+ phaserp0->value(eff->geteffectpar(0));if (eff->insertion!=0) phaserp0->label("D/W");
+ phaserp2->value(eff->geteffectpar(2));
+ phaserp5->value(eff->geteffectpar(5));
+ phaserp6->value(eff->geteffectpar(6));
+ phaserp7->value(eff->geteffectpar(7));
+ phaserp8->value(eff->geteffectpar(8));
+ effphaserwindow->show();
+ break;
+ case 5:
+ awp->value(eff->getpreset());
+ awp0->value(eff->geteffectpar(0));if (eff->insertion!=0) awp0->label("D/W");
+ awp2->value(eff->geteffectpar(2));
+ awp6->value(eff->geteffectpar(6));
+ awp8->value(eff->geteffectpar(8));
+ effalienwahwindow->show();
+ break;
+ case 6:
+ distp->value(eff->getpreset());
+ distp0->value(eff->geteffectpar(0));if (eff->insertion!=0) distp0->label("D/W");
+ distp3->value(eff->geteffectpar(3));
+ distp4->value(eff->geteffectpar(4));
+ distp5->value(eff->geteffectpar(5));
+ distp7->value(eff->geteffectpar(7));
+ effdistorsionwindow->show();
+ break;
+ case 7:
+ bandcounter->value(eqband);
+ bandcounter->do_callback();
+ typechoice->value(eff->geteffectpar(10));
+ eqgraph->redraw();
+ freqdial->value(eff->geteffectpar(11));
+ gaindial->value(eff->geteffectpar(12));
+ if (eff->geteffectpar(10)<6) gaindial->deactivate();
+ qdial->value(eff->geteffectpar(13));
+ stagescounter->value(eff->geteffectpar(14));
+ eqgraph->init(eff);
+ effeqwindow->show();
+ break;
+ case 8:
+ dfp->value(eff->getpreset());
+ dfp0->value(eff->geteffectpar(0));if (eff->insertion!=0) dfp0->label("D/W");
+ dfp2->value(eff->geteffectpar(2));
+ dfp6->value(eff->geteffectpar(6));
+ dfp7->value(eff->geteffectpar(7));
+ dfp9->value(eff->geteffectpar(9));
+
+
+ effdynamicfilterwindow->show();
+ break;
+ default:effnullwindow->show();
+ break;
+};
+
+this->show();} {}
+ }
+ Function {refresh()} {} {
+ code {refresh(eff);} {}
+ }
+ decl {EffectMgr *eff;} {}
+ decl {int eqband;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl
new file mode 100644
index 0000000..359f64c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl
@@ -0,0 +1,907 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include "../globals.h"} {public
+}
+
+decl {\#include <FL/Fl_Group.H>} {public
+}
+
+decl {\#include "../Params/EnvelopeParams.h"} {public
+}
+
+decl {\#include <FL/Fl_Box.H>} {public
+}
+
+decl {\#include <FL/fl_draw.H>} {public
+}
+
+decl {\#include <FL/fl_ask.H>} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+decl {\#include "common.H"} {public
+}
+
+class EnvelopeFreeEdit {: {public Fl_Box}
+} {
+ Function {EnvelopeFreeEdit(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {env=NULL;
+pair=NULL;} {}
+ }
+ Function {init(EnvelopeParams *env_)} {} {
+ code {env=env_;
+oldx=-1;
+currentpoint=-1;
+cpx=0;
+lastpoint=-1;
+ctrldown=false;} {}
+ }
+ Function {setpair(Fl_Box *pair_)} {} {
+ code {pair=pair_;} {}
+ }
+ Function {getpointx(int n)} {return_type int
+ } {
+ code {int lx=w()-10;
+int npoints=env->Penvpoints;
+
+float sum=0;
+for (int i=1;i<npoints;i++) sum+=env->getdt(i)+1;
+
+float sumbefore=0;//the sum of all points before the computed point
+for (int i=1;i<=n;i++) sumbefore+=env->getdt(i)+1;
+
+return((int) (sumbefore/(float) sum*lx));} {}
+ }
+ Function {getpointy(int n)} {return_type int
+ } {
+ code {int ly=h()-10;
+
+return((int) ((1.0-env->Penvval[n]/127.0)*ly));} {}
+ }
+ Function {getnearest(int x,int y)} {return_type int
+ } {
+ code {x-=5;y-=5;
+
+int nearestpoint=0;
+int nearestval=1000000;//a big value
+for (int i=0;i<env->Penvpoints;i++){
+ int distance=abs(x-getpointx(i))+abs(y-getpointy(i));
+ if (distance<nearestval) {
+ nearestpoint=i;
+ nearestval=distance;
+ };
+};
+return(nearestpoint);} {}
+ }
+ Function {draw()} {private
+ } {
+ code {int ox=x(),oy=y(),lx=w(),ly=h();
+if (env->Pfreemode==0) env->converttofree();
+int npoints=env->Penvpoints;
+
+if (active_r()) fl_color(FL_BLACK);
+ else fl_color(90,90,90);
+if (!active_r()) currentpoint=-1;
+
+fl_rectf(ox,oy,lx,ly);
+
+ox+=5;oy+=5;lx-=10;ly-=10;
+
+//draw the lines
+fl_color(FL_GRAY);
+
+fl_line_style(FL_SOLID);
+fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
+
+//draws the evelope points and lines
+Fl_Color alb=FL_WHITE;
+if (!active_r()) alb=fl_rgb_color(180,180,180);
+fl_color(alb);
+int oldxx=0,xx=0,oldyy=0,yy=getpointy(0);
+fl_rectf(ox-3,oy+yy-3,6,6);
+for (int i=1;i<npoints;i++){
+ oldxx=xx;oldyy=yy;
+ xx=getpointx(i);yy=getpointy(i);
+ if (i==currentpoint) fl_color(FL_RED);
+ else fl_color(alb);
+ fl_line(ox+oldxx,oy+oldyy,ox+xx,oy+yy);
+ fl_rectf(ox+xx-3,oy+yy-3,6,6);
+};
+
+//draw the last moved point point (if exists)
+if (lastpoint>=0){
+ fl_color(FL_CYAN);
+ fl_rectf(ox+getpointx(lastpoint)-5,oy+getpointy(lastpoint)-5,10,10);
+};
+
+//draw the sustain position
+if (env->Penvsustain>0){
+ fl_color(FL_YELLOW);
+ xx=getpointx(env->Penvsustain);
+ fl_line(ox+xx,oy+0,ox+xx,oy+ly);
+};
+
+//Show the envelope duration and the current line duration
+fl_font(FL_HELVETICA|FL_BOLD,10);
+float time=0.0;
+if (currentpoint<=0 && (!ctrldown||lastpoint <= 0)){
+ fl_color(alb);
+ for (int i=1;i<npoints;i++) time+=env->getdt(i);
+} else {
+ fl_color(255,0,0);
+ time=env->getdt(lastpoint);
+};
+char tmpstr[20];
+if (time<1000.0) snprintf((char *)&tmpstr,20,"%.1fms",time);
+ else snprintf((char *)&tmpstr,20,"%.2fs",time/1000.0);
+fl_draw(tmpstr,ox+lx-20,oy+ly-10,20,10,FL_ALIGN_RIGHT,NULL,0);
+if (lastpoint>=0){
+ snprintf((char *)&tmpstr,20,"%d", env->Penvval[lastpoint]);
+ fl_draw(tmpstr,ox+lx-20,oy+ly-23,20,10,FL_ALIGN_RIGHT,NULL,0);
+}} {}
+ }
+ Function {handle(int event)} {return_type int
+ } {
+ code {int x_=Fl::event_x()-x();
+int y_=Fl::event_y()-y();
+
+// Some window magic makes us lose focus, so reassert it.
+if (event==FL_ENTER)
+ Fl::focus(this);
+
+if ((event==FL_KEYDOWN || event==FL_KEYUP)){
+ int key = Fl::event_key();
+ if (key==FL_Control_L || key==FL_Control_R){
+ ctrldown = (event==FL_KEYDOWN);
+ redraw();
+ if (pair!=NULL) pair->redraw();
+ }
+}
+
+if (event==FL_MOUSEWHEEL && lastpoint>=0) {
+ if (!ctrldown) {
+ int ny=env->Penvval[lastpoint] - Fl::event_dy();
+ env->Penvval[lastpoint]=ny < 0 ? 0 : ny > 127 ? 127 : ny;
+ } else if (lastpoint > 0) {
+ int newdt = Fl::event_dy() + env->Penvdt[lastpoint];
+ env->Penvdt[lastpoint] = newdt < 0 ? 0 : newdt > 127 ? 127 : newdt;
+ }
+ redraw();
+ if (pair!=NULL) pair->redraw();
+}
+
+if (event==FL_PUSH) {
+ currentpoint=getnearest(x_,y_);
+ cpx=x_;
+ cpdt=env->Penvdt[currentpoint];
+ lastpoint=currentpoint;
+ redraw();
+ if (pair!=NULL) pair->redraw();
+};
+
+if (event==FL_RELEASE){
+ currentpoint=-1;
+ redraw();
+ if (pair!=NULL) pair->redraw();
+};
+
+if ((event==FL_DRAG)&&(currentpoint>=0)){
+ int ny=127-(int) (y_*127.0/h());
+ if (ny<0) ny=0;if (ny>127) ny=127;
+ env->Penvval[currentpoint]=ny;
+
+ int dx=(int)((x_-cpx)*0.1);
+ int newdt=cpdt+dx;
+ if (newdt<0) newdt=0;if (newdt>127) newdt=127;
+ if (currentpoint!=0) env->Penvdt[currentpoint]=newdt;
+ else env->Penvdt[currentpoint]=0;
+
+ redraw();
+ if (pair!=NULL) pair->redraw();
+};
+
+
+return(1);} {}
+ }
+ decl {Fl_Box *pair;} {}
+ decl {EnvelopeParams *env;} {}
+ decl {int oldx;} {}
+ decl {int currentpoint,cpx,cpdt;} {}
+ decl {int lastpoint;} {public
+ }
+ decl {bool ctrldown;} {}
+}
+
+class EnvelopeUI {open : {public Fl_Group,PresetsUI_}
+} {
+ Function {EnvelopeUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {env=NULL;
+freemodeeditwindow=NULL;
+envADSR=NULL;
+envASR=NULL;
+envADSRfilter=NULL;
+envASRbw=NULL;
+envfree=NULL;} {}
+ }
+ Function {~EnvelopeUI()} {} {
+ code {envwindow->hide();
+hide();
+freemodeeditwindow->hide();
+delete (freemodeeditwindow);} {}
+ }
+ Function {make_freemode_edit_window()} {open
+ } {
+ Fl_Window freemodeeditwindow {
+ label Envelope
+ xywh {702 269 575 180} type Double visible
+ } {
+ Fl_Box freeedit {
+ label Envelope
+ xywh {5 5 565 145} box FLAT_BOX color 0
+ code0 {o->init(env);}
+ class EnvelopeFreeEdit
+ }
+ Fl_Button addpoint {
+ label {Add point}
+ callback {int curpoint=freeedit->lastpoint;
+if (curpoint<0) return;
+//if (curpoint>=env->Penvpoints-1) return;
+if (env->Penvpoints>=MAX_ENVELOPE_POINTS) return;
+
+for (int i=env->Penvpoints;i>=curpoint+1;i--){
+ env->Penvdt[i]=env->Penvdt[i-1];
+ env->Penvval[i]=env->Penvval[i-1];
+};
+
+if (curpoint==0) {
+ env->Penvdt[1]=64;
+};
+
+env->Penvpoints++;
+if (curpoint<=env->Penvsustain) env->Penvsustain++;
+
+freeedit->lastpoint+=1;
+freeedit->redraw();
+envfree->redraw();
+
+sustaincounter->value(env->Penvsustain);
+sustaincounter->maximum(env->Penvpoints-2);}
+ xywh {115 155 80 20} box THIN_UP_BOX labelsize 11
+ code0 {if (env->Pfreemode==0) o->hide();}
+ }
+ Fl_Button deletepoint {
+ label {Delete point}
+ callback {int curpoint=freeedit->lastpoint;
+if (curpoint<1) return;
+if (curpoint>=env->Penvpoints-1) return;
+if (env->Penvpoints<=3) return;
+
+for (int i=curpoint+1;i<env->Penvpoints;i++){
+ env->Penvdt[i-1]=env->Penvdt[i];
+ env->Penvval[i-1]=env->Penvval[i];
+};
+
+env->Penvpoints--;
+
+if (curpoint<=env->Penvsustain) env->Penvsustain--;
+
+
+freeedit->lastpoint-=1;
+freeedit->redraw();
+envfree->redraw();
+
+sustaincounter->value(env->Penvsustain);
+sustaincounter->maximum(env->Penvpoints-2);}
+ xywh {200 155 80 20} box THIN_UP_BOX labelsize 11
+ code0 {if (env->Pfreemode==0) o->hide();}
+ }
+ Fl_Check_Button freemodebutton {
+ label FreeMode
+ callback {reinit();
+
+freeedit->lastpoint=-1;
+freeedit->redraw();}
+ tooltip {Enable or disable the freemode} xywh {10 155 95 20} labelsize 11
+ }
+ Fl_Check_Button forcedreleasecheck {
+ label frcR
+ callback {env->Pforcedrelease=(int)o->value();}
+ tooltip {Forced Relase} xywh {410 165 40 15} down_box DOWN_BOX labelsize 10
+ code0 {o->value(env->Pforcedrelease);}
+ code1 {if (env->Pfreemode==0) o->hide();}
+ }
+ Fl_Dial envstretchdial {
+ label {Str.}
+ callback {env->Penvstretch=(int)o->value();}
+ tooltip {Envelope stretch (on lower notes make the envelope longer)} xywh {380 155 25 25} box ROUND_UP_BOX labelsize 10 align 4 maximum 127 step 1
+ code0 {o->value(env->Penvstretch);}
+ code1 {if (env->Pfreemode==0) o->hide();}
+ class WidgetPDial
+ }
+ Fl_Button {} {
+ label Close
+ callback {freemodeeditwindow->hide();}
+ xywh {510 155 60 20} box THIN_UP_BOX
+ }
+ Fl_Check_Button linearenvelopecheck {
+ label L
+ callback {env->Plinearenvelope=(int)o->value();}
+ tooltip {Linear Envelope} xywh {410 151 30 15} down_box DOWN_BOX labelsize 10
+ code0 {o->value(env->Plinearenvelope);}
+ code1 {if ((env->Pfreemode==0)||(env->Envmode>2)) o->hide();}
+ }
+ Fl_Counter sustaincounter {
+ label Sust
+ callback {env->Penvsustain=(int) o->value();
+freeedit->redraw();
+envfree->redraw();}
+ tooltip {Sustain (0 is disabled)} xywh {315 155 40 15} type Simple labelsize 11 align 4 minimum 0 maximum 127 step 1
+ code0 {o->value(env->Penvsustain);}
+ code1 {if (env->Pfreemode==0) o->hide();}
+ code2 {o->maximum(env->Penvpoints-2);}
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(env);}
+ xywh {465 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(env,this);}
+ xywh {482 160 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ }
+ }
+ Function {make_ADSR_window()} {open
+ } {
+ Fl_Window envADSR {open
+ xywh {344 788 205 70} type Double color 50 labelfont 1
+ class Fl_Group visible
+ } {
+ Fl_Group {} {
+ label {Amplitude Envelope}
+ xywh {0 0 205 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
+ code0 {set_module_parameters(o);}
+ } {
+ Fl_Dial e1adt {
+ label {A.dt}
+ callback {env->PA_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Attack time} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PA_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e1ddt {
+ label {D.dt}
+ callback {env->PD_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Decay time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PD_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e1rdt {
+ label {R.dt}
+ callback {env->PR_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Release time} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PR_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e1sval {
+ label {S.val}
+ callback {env->PS_val=(int)o->value();
+freeedit->redraw();}
+ tooltip {Sustain value} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PS_val);}
+ class WidgetPDial
+ }
+ Fl_Check_Button e1forcedrelease {
+ label frcR
+ callback {env->Pforcedrelease=(int)o->value();}
+ tooltip {Forced Relase} xywh {180 35 20 15} down_box DOWN_BOX labelsize 10 align 6
+ code0 {o->value(env->Pforcedrelease);}
+ }
+ Fl_Dial e1envstretch {
+ label Stretch
+ callback {env->Penvstretch=(int)o->value();}
+ tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->Penvstretch);}
+ class WidgetPDial
+ }
+ Fl_Button {} {
+ label E
+ callback {freemodeeditwindow->show();}
+ tooltip {Envelope window} xywh {185 5 15 15} labelfont 1 labelsize 10
+ }
+ Fl_Check_Button e1linearenvelope {
+ label L
+ callback {env->Plinearenvelope=(int)o->value();}
+ tooltip {The evelope is linear} xywh {180 20 15 15} down_box DOWN_BOX labelsize 10 align 4
+ code0 {o->value(env->Plinearenvelope);}
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(env);}
+ xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(env,this);}
+ xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ }
+ }
+ }
+ Function {make_ASR_window()} {open
+ } {
+ Fl_Window envASR {open
+ xywh {648 667 210 70} type Double
+ class Fl_Group visible
+ } {
+ Fl_Group {} {
+ label {Frequency Envelope}
+ xywh {0 0 210 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
+ code0 {set_module_parameters(o);}
+ } {
+ Fl_Dial e2aval {
+ label {A.val}
+ callback {env->PA_val=(int)o->value();
+freeedit->redraw();}
+ tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PA_val);}
+ class WidgetPDial
+ }
+ Fl_Dial e2adt {
+ label {A.dt}
+ callback {env->PA_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PA_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e2rval {
+ label {R.val}
+ callback {env->PR_val=(int)o->value();
+freeedit->redraw();}
+ tooltip {Release value} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PR_val);}
+ class WidgetPDial
+ }
+ Fl_Dial e2rdt {
+ label {R.dt}
+ callback {env->PR_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Release time} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PR_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e2envstretch {
+ label Stretch
+ callback {env->Penvstretch=(int)o->value();}
+ tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->Penvstretch);}
+ class WidgetPDial
+ }
+ Fl_Check_Button e2forcedrelease {
+ label frcR
+ callback {env->Pforcedrelease=(int)o->value();}
+ tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 10 align 6
+ code0 {o->value(env->Pforcedrelease);}
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(env);}
+ xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(env,this);}
+ xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ }
+ Fl_Button {} {
+ label E
+ callback {freemodeeditwindow->show();}
+ tooltip {Envelope window} xywh {190 5 15 15} labelfont 1 labelsize 10
+ }
+ }
+ }
+ Function {make_ADSRfilter_window()} {open
+ } {
+ Fl_Window envADSRfilter {open selected
+ xywh {627 569 275 70} type Double color 50 labelfont 1
+ class Fl_Group visible
+ } {
+ Fl_Group {} {
+ label {Filter Envelope}
+ xywh {0 0 275 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
+ code0 {set_module_parameters(o);}
+ } {
+ Fl_Dial e3aval {
+ label {A.val}
+ callback {env->PA_val=(int)o->value();
+freeedit->redraw();}
+ tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PA_val);}
+ class WidgetPDial
+ }
+ Fl_Dial e3adt {
+ label {A.dt}
+ callback {env->PA_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PA_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e3dval {
+ label {D.val}
+ callback {env->PD_val=(int)o->value();
+freeedit->redraw();}
+ tooltip {decay value} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PD_val);}
+ class WidgetPDial
+ }
+ Fl_Dial e3ddt {
+ label {D.dt}
+ callback {env->PD_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {decay time} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PD_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e3rdt {
+ label {R.dt}
+ callback {env->PR_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Release time} xywh {145 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PR_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e3rval {
+ label {R.val}
+ callback {env->PR_val=(int)o->value();
+freeedit->redraw();}
+ tooltip {Release value} xywh {180 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PR_val);}
+ class WidgetPDial
+ }
+ Fl_Dial e3envstretch {
+ label Stretch
+ callback {env->Penvstretch=(int)o->value();}
+ tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {215 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->Penvstretch);}
+ class WidgetPDial
+ }
+ Fl_Check_Button e3forcedrelease {
+ label frcR
+ callback {env->Pforcedrelease=(int)o->value();}
+ tooltip {Forced Relase} xywh {250 30 15 20} down_box DOWN_BOX labelsize 10 align 6
+ code0 {o->value(env->Pforcedrelease);}
+ }
+ Fl_Button {} {
+ label E
+ callback {freemodeeditwindow->show();}
+ xywh {255 5 15 15} labelfont 1 labelsize 10
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(env);}
+ xywh {220 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(env,this);}
+ xywh {237 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ }
+ }
+ }
+ Function {make_ASRbw_window()} {open
+ } {
+ Fl_Window envASRbw {open
+ xywh {362 642 210 70} type Double
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Group {} {
+ label {BandWidth Envelope}
+ xywh {0 0 210 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
+ code0 {set_module_parameters(o);}
+ } {
+ Fl_Dial e4aval {
+ label {A.val}
+ callback {env->PA_val=(int)o->value();
+freeedit->redraw();}
+ tooltip {Starting value} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PA_val);}
+ class WidgetPDial
+ }
+ Fl_Dial e4adt {
+ label {A.dt}
+ callback {env->PA_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Attack time} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PA_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e4rval {
+ label {R.val}
+ callback {env->PR_val=(int)o->value();
+freeedit->redraw();}
+ tooltip {Release value} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PR_val);}
+ class WidgetPDial
+ }
+ Fl_Dial e4rdt {
+ label {R.dt}
+ callback {env->PR_dt=(int)o->value();
+freeedit->redraw();}
+ tooltip {Release time} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->PR_dt);}
+ class WidgetPDial
+ }
+ Fl_Dial e4envstretch {
+ label Stretch
+ callback {env->Penvstretch=(int)o->value();}
+ tooltip {Envelope stretch (on lower notes makes the envelope longer)} xywh {145 25 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(env->Penvstretch);}
+ class WidgetPDial
+ }
+ Fl_Check_Button e4forcedrelease {
+ label frcR
+ callback {env->Pforcedrelease=(int)o->value();}
+ tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 10 align 6
+ code0 {o->value(env->Pforcedrelease);}
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(env);}
+ xywh {155 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(env,this);}
+ xywh {172 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ }
+ Fl_Button {} {
+ label E
+ callback {freemodeeditwindow->show();}
+ xywh {190 5 15 15} labelfont 1 labelsize 10
+ }
+ }
+ }
+ Function {make_free_window()} {open
+ } {
+ Fl_Window envfree {open
+ xywh {376 436 205 70} type Double color 50 labelfont 1 resizable
+ code0 {set_module_parameters(o);}
+ class Fl_Group visible
+ } {
+ Fl_Group envfreegroup {
+ label {Amplitude Envelope}
+ xywh {0 0 205 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17 resizable
+ code0 {set_module_parameters(o);}
+ } {
+ Fl_Box freeeditsmall {
+ label Envelope
+ callback {envfree->redraw();}
+ xywh {5 20 195 45} box FLAT_BOX color 0 resizable
+ code0 {o->init(env);}
+ class EnvelopeFreeEdit
+ }
+ Fl_Button {} {
+ label E
+ callback {freemodeeditwindow->show();}
+ xywh {185 5 15 15} labelfont 1 labelsize 10
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(env);}
+ xywh {150 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(env,this);}
+ xywh {167 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ }
+ }
+ }
+ Function {init(EnvelopeParams *env_)} {open
+ } {
+ code {env=env_;
+make_ADSR_window();
+make_ASR_window();
+make_ADSRfilter_window();
+make_ASRbw_window();
+make_free_window();
+
+make_freemode_edit_window();
+
+envwindow=NULL;
+if (env->Envmode==3) envfreegroup->label("Frequency Envelope");
+if (env->Envmode==4) envfreegroup->label("Filter Envelope");
+if (env->Envmode==5) envfreegroup->label("Bandwidth Envelope");
+
+freemodeeditwindow->label(this->label());
+
+
+freeeditsmall->setpair(freeedit);
+freeedit->setpair(freeeditsmall);
+
+
+refresh();} {}
+ }
+ Function {reinit()} {} {
+ code {if (env->Pfreemode!=0){
+ int answer=fl_choice("Disable the free mode of the Envelope?","No","Yes",NULL);
+ if (env->Pfreemode!=0) freemodebutton->value(1);
+ else freemodebutton->value(0);
+ if (answer==0) return;
+};
+
+if (env->Pfreemode==0) env->Pfreemode=1;
+ else env->Pfreemode=0;
+
+hide();
+int winx=freemodeeditwindow->x();
+int winy=freemodeeditwindow->y();
+
+freemodeeditwindow->hide();
+
+envwindow->hide();
+Fl_Group *par=envwindow->parent();
+par->hide();
+
+
+refresh();
+envwindow->show();
+par->redraw();
+
+par->show();
+show();
+freemodeeditwindow->position(winx,winy);
+freemodeeditwindow->show();
+
+if (env->Pfreemode!=0) {
+ freemodebutton->value(1);
+ addpoint->show();
+ deletepoint->show();
+ forcedreleasecheck->show();
+}else{
+ freemodebutton->value(0);
+ addpoint->hide();
+ deletepoint->hide();
+ forcedreleasecheck->hide();
+};} {}
+ }
+ Function {refresh()} {open
+ } {
+ code {freemodebutton->value(env->Pfreemode);
+
+sustaincounter->value(env->Penvsustain);
+if (env->Pfreemode==0) sustaincounter->hide();
+ else sustaincounter->show();
+sustaincounter->maximum(env->Penvpoints-2);
+
+envstretchdial->value(env->Penvstretch);
+if (env->Pfreemode==0) envstretchdial->hide();
+ else envstretchdial->show();
+
+linearenvelopecheck->value(env->Plinearenvelope);
+if ((env->Pfreemode==0)||(env->Envmode>2)) linearenvelopecheck->hide();
+ else linearenvelopecheck->show();
+
+forcedreleasecheck->value(env->Pforcedrelease);
+if (env->Pfreemode==0) forcedreleasecheck->hide();
+ else forcedreleasecheck->show();
+
+if (env->Pfreemode==0){
+ addpoint->hide();
+ deletepoint->hide();
+} else {
+ addpoint->show();
+ deletepoint->show();
+}
+
+freeedit->redraw();
+
+if (env->Pfreemode==0){
+ switch(env->Envmode){
+ case(1):
+ case(2):
+ e1adt->value(env->PA_dt);
+ e1ddt->value(env->PD_dt);
+ e1sval->value(env->PS_val);
+ e1rdt->value(env->PR_dt);
+ e1envstretch->value(env->Penvstretch);
+ e1linearenvelope->value(env->Plinearenvelope);
+ e1forcedrelease->value(env->Pforcedrelease);
+ break;
+ case(3):
+ e2aval->value(env->PA_val);
+ e2adt->value(env->PA_dt);
+ e2rdt->value(env->PR_dt);
+ e2rval->value(env->PR_val);
+ e2envstretch->value(env->Penvstretch);
+ e2forcedrelease->value(env->Pforcedrelease);
+ break;
+ case(4):
+ e3aval->value(env->PA_val);
+ e3adt->value(env->PA_dt);
+ e3dval->value(env->PD_val);
+ e3ddt->value(env->PD_dt);
+ e3rdt->value(env->PR_dt);
+ e3rval->value(env->PR_val);
+ e3envstretch->value(env->Penvstretch);
+ e3forcedrelease->value(env->Pforcedrelease);
+ break;
+ case(5):
+ e4aval->value(env->PA_val);
+ e4adt->value(env->PA_dt);
+ e4rdt->value(env->PR_dt);
+ e4rval->value(env->PR_val);
+ e4envstretch->value(env->Penvstretch);
+ e4forcedrelease->value(env->Pforcedrelease);
+ break;
+ default:
+ break;
+ };
+}else{
+ envfree->redraw();
+};
+
+
+envADSR->hide();
+envASR->hide();
+envADSRfilter->hide();
+envASRbw->hide();
+envfree->hide();
+
+if (env->Pfreemode==0){
+ switch(env->Envmode){
+ case(1):
+ case(2):
+ envwindow=envADSR;
+ break;
+ case(3):
+ envwindow=envASR;
+ break;
+ case(4):
+ envwindow=envADSRfilter;
+ break;
+ case(5):
+ envwindow=envASRbw;
+ break;
+ default:
+ break;
+ };
+}else{
+ envwindow=envfree;
+};
+
+envwindow->resize(this->x(),this->y(),this->w(),this->h());
+
+envwindow->show();} {}
+ }
+ decl {EnvelopeParams *env;} {}
+ decl {Fl_Group *envwindow;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl
new file mode 100644
index 0000000..632e37b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/FilterUI.fl
@@ -0,0 +1,638 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include <cmath>} {}
+
+decl {\#include <stdio.h>} {global
+}
+
+decl {\#include <stdlib.h>} {global
+}
+
+decl {\#include "../globals.h"} {public
+}
+
+decl {\#include <FL/Fl_Group.H>} {public
+}
+
+decl {\#include "../Params/FilterParams.h"} {public
+}
+
+decl {\#include <FL/Fl_Box.H>} {public
+}
+
+decl {\#include <FL/fl_draw.H>} {public
+}
+
+decl {\#include <FL/fl_ask.H>} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+decl {\#include "common.H"} {public
+}
+
+class FormantFilterGraph {open : {public Fl_Box}
+} {
+ Function {FormantFilterGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {pars=NULL;
+nvowel=NULL;
+nformant=NULL;
+graphpoints=NULL;} {}
+ }
+ Function {init(FilterParams *pars_,int *nvowel_,int *nformant_)} {} {
+ code {pars=pars_;
+nvowel=nvowel_;
+nformant=nformant_;
+oldx=-1;
+graphpoints=new float [w()];} {}
+ }
+ Function {draw_freq_line(float freq,int type)} {} {
+ code {float freqx=pars->getfreqpos(freq);
+switch(type){
+ case 0:fl_line_style(FL_SOLID);break;
+ case 1:fl_line_style(FL_DOT);break;
+ case 2:fl_line_style(FL_DASH);break;
+};
+
+
+if ((freqx>0.0)&&(freqx<1.0))
+ fl_line(x()+(int) (freqx*w()),y(),
+ x()+(int) (freqx*w()),y()+h());} {}
+ }
+ Function {draw()} {open
+ } {
+ code {int maxdB=30;
+int ox=x(),oy=y(),lx=w(),ly=h(),i,oiy;
+float freqx;
+
+fl_color(FL_BLACK);
+fl_rectf(ox,oy,lx,ly);
+
+
+//draw the lines
+fl_color(FL_GRAY);
+
+fl_line_style(FL_SOLID);
+//fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
+
+freqx=pars->getfreqpos(1000.0);
+if ((freqx>0.0)&&(freqx<1.0))
+ fl_line(ox+(int) (freqx*lx),oy,
+ ox+(int) (freqx*lx),oy+ly);
+
+for (i=1;i<10;i++){
+ if(i==1){
+ draw_freq_line(i*100.0,0);
+ draw_freq_line(i*1000.0,0);
+ }else
+ if (i==5){
+ draw_freq_line(i*100.0,2);
+ draw_freq_line(i*1000.0,2);
+ }else{
+ draw_freq_line(i*100.0,1);
+ draw_freq_line(i*1000.0,1);
+ };
+};
+
+draw_freq_line(10000.0,0);
+draw_freq_line(20000.0,1);
+
+fl_line_style(FL_DOT);
+int GY=10;if (ly<GY*3) GY=-1;
+for (i=1;i<GY;i++){
+ int tmp=(int)(ly/(float)GY*i);
+ fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
+};
+
+fl_color(FL_YELLOW);
+fl_font(FL_HELVETICA,10);
+if (*nformant<pars->Pnumformants){
+ draw_freq_line(pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq),2);
+
+//show some information (like current formant frequency,amplitude)
+ char tmpstr[20];
+
+ snprintf(tmpstr,20,"%.2f kHz",pars->getformantfreq(pars->Pvowels[*nvowel].formants[*nformant].freq)*0.001);
+ fl_draw(tmpstr,ox+1,oy+1,40,12,FL_ALIGN_LEFT,NULL,0);
+
+ snprintf(tmpstr,20,"%d dB",(int)( rap2dB(1e-9 + pars->getformantamp(pars->Pvowels[*nvowel].formants[*nformant].amp)) + pars->getgain() ));
+ fl_draw(tmpstr,ox+1,oy+15,40,12,FL_ALIGN_LEFT,NULL,0);
+
+};
+
+//draw the data
+
+fl_color(FL_RED);
+fl_line_style(FL_SOLID);
+
+pars->formantfilterH(*nvowel,lx,graphpoints);
+
+fl_line_style( FL_SOLID, 2 );
+fl_begin_line();
+oiy=(int) ((graphpoints[0]/maxdB+1.0)*ly/2.0);
+for (i=1;i<lx;i++){
+ double iy= ((graphpoints[i]/maxdB+1.0)*ly/2.0);
+ if ((iy>=0)&&(oiy>=0)&&(iy<ly)&&(oiy<lx))
+ fl_vertex(ox+i,oy+ly-iy);
+ oiy=iy;
+};
+fl_end_line();
+fl_line_style(FL_SOLID,0);} {}
+ }
+ Function {~FormantFilterGraph()} {} {
+ code {delete [] graphpoints;} {}
+ }
+ decl {FilterParams *pars;} {}
+ decl {int oldx;} {}
+ decl {int *nvowel,*nformant;} {}
+ decl {float *graphpoints;} {}
+}
+
+class FilterUI {open : {public Fl_Group,PresetsUI_}
+} {
+ Function {FilterUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {pars=NULL;
+velsnsamp=NULL;
+velsns=NULL;
+nvowel=0;nformant=0;nseqpos=0;} {}
+ }
+ Function {~FilterUI()} {} {
+ code {filterui->hide();
+formantparswindow->hide();
+hide();
+//delete (filterui);
+delete (formantparswindow);} {}
+ }
+ Function {make_window()} {open
+ } {
+ Fl_Window filterui {open
+ xywh {498 346 275 70} type Double color 50 labelfont 1
+ class Fl_Group visible
+ } {
+ Fl_Group filterparamswindow {
+ label {Filter Parameters}
+ xywh {0 0 275 75} box UP_FRAME color 183 labeltype ENGRAVED_LABEL labelsize 10 align 17
+ code0 {set_module_parameters( o );}
+ } {
+ Fl_Choice analogfiltertypechoice {
+ label FilterType
+ callback {pars->Ptype=(int)o->value();
+pars->changed=true;}
+ tooltip {The Filter type} xywh {10 50 50 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
+ code1 {o->value(pars->Ptype);}
+ } {
+ MenuItem {} {
+ label LPF1
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label HPF1
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LPF2
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label HPF2
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label BPF2
+ xywh {82 82 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label NF2
+ xywh {94 94 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label PkF2
+ xywh {104 104 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LSh2
+ xywh {114 114 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label HSh2
+ xywh {124 124 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Choice svfiltertypechoice {
+ label FilterType
+ callback {pars->Ptype=(int)o->value();
+pars->changed=true;}
+ tooltip {The Filter type} xywh {10 50 50 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
+ code1 {o->value(pars->Ptype);}
+ } {
+ MenuItem {} {
+ label 1LPF
+ xywh {134 134 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 1HPF
+ xywh {144 144 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 1BPF
+ xywh {154 154 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 1NF
+ xywh {164 164 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Choice filtertype {
+ label Category
+ callback {switchcategory((int)o->value());
+pars->changed=true;}
+ tooltip {The Category of the Filter (Analog/Formantic/etc.)} xywh {10 20 60 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
+ code0 {o->value(pars->Pcategory);}
+ } {
+ MenuItem {} {
+ label Analog
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Formant
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label StVarF
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial cfreqdial {
+ label {C.Freq}
+ callback {pars->Pfreq=(int)o->value();}
+ tooltip {Center Frequency of the Filter or the base position in the vowel's sequence} xywh {75 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->Pfreq);}
+ class WidgetPDial
+ }
+ Fl_Dial qdial {
+ label Q
+ callback {pars->Pq=(int)o->value();
+formantfiltergraph->redraw();}
+ tooltip {Filter resonance or bandwidth} xywh {110 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->Pq);}
+ class WidgetPDial
+ }
+ Fl_Dial freqtrdial {
+ label {freq.tr.}
+ callback {pars->Pfreqtrack=(int) o->value();}
+ tooltip {Filter frequency tracking (left is negative, middle is 0, and right is positive)} xywh {215 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->Pfreqtrack);}
+ class WidgetPDial
+ }
+ Fl_Dial vsnsadial {
+ label {V.SnsA.}
+ callback {if (velsnsamp!=NULL) *velsnsamp=(int)o->value();}
+ tooltip {Velocity sensing amount of the Filter} xywh {145 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial vsnsdial {
+ label {V.Sns.}
+ callback {if (velsns!=NULL) *velsns=(int)o->value();}
+ tooltip {Velocity Sensing Function of the Filter} xywh {180 25 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial gaindial {
+ label gain
+ callback {pars->Pgain=(int)o->value();
+formantfiltergraph->redraw();
+pars->changed=true;}
+ tooltip {Filter output gain/damp} xywh {250 35 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->Pgain);}
+ class WidgetPDial
+ }
+ Fl_Choice stcounter {
+ label St
+ callback {pars->Pstages=(int)o->value();
+formantfiltergraph->redraw();
+pars->changed=true;} open
+ tooltip {Filter stages (in order to increase dB/oct. value and the order of the filter)} xywh {235 5 35 15} down_box BORDER_BOX labelsize 10 textfont 1 textsize 10
+ code1 {for (int i=0;i<MAX_FILTER_STAGES;i++) {char tmp[10];snprintf(tmp,10,"%dx",i+1);o->add(tmp);};}
+ code2 {o->value(pars->Pstages);}
+ } {}
+ }
+ Fl_Button editbutton {
+ label Edit
+ callback {formantparswindow->show();}
+ xywh {15 40 50 25} labelfont 1 labelsize 11
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copyArray(pars);}
+ xywh {186 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->pasteArray(pars,this);}
+ xywh {203 5 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ }
+ }
+ Function {make_formant_window()} {open
+ } {
+ Fl_Window formantparswindow {
+ label {Formant Filter Parameters} selected
+ xywh {518 473 700 205} type Double visible
+ } {
+ Fl_Group {} {
+ xywh {485 47 105 113} box THIN_UP_BOX
+ } {
+ Fl_Counter {} {
+ label {Formant }
+ callback {nformant=(int) o->value();
+update_formant_window();
+formantfiltergraph->redraw();}
+ xywh {545 80 40 15} type Simple labelfont 1 labelsize 10 align 4 minimum 0 maximum 127 step 1 textsize 10
+ code0 {o->bounds(0,FF_MAX_FORMANTS-1);}
+ code1 {o->value(nformant);}
+ }
+ Fl_Counter {} {
+ label {Vowel no.}
+ callback {nvowel=(int) o->value();
+update_formant_window();
+formantfiltergraph->redraw();}
+ xywh {545 55 40 20} type Simple labelfont 1 labelsize 10 align 4 minimum 0 maximum 127 step 1 textfont 1 textsize 11
+ code0 {o->bounds(0,FF_MAX_VOWELS-1);}
+ code1 {o->value(nvowel);}
+ }
+ Fl_Group formantparsgroup {
+ xywh {490 105 95 50} box ENGRAVED_FRAME
+ } {
+ Fl_Dial formant_freq_dial {
+ label freq
+ callback {pars->Pvowels[nvowel].formants[nformant].freq=(int) o->value();
+formantfiltergraph->redraw();
+pars->changed=true;}
+ tooltip {Formant frequency} xywh {495 115 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial formant_q_dial {
+ label Q
+ callback {pars->Pvowels[nvowel].formants[nformant].q=(int) o->value();
+formantfiltergraph->redraw();
+pars->changed=true;}
+ tooltip {Formant's Q} xywh {525 115 24 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial formant_amp_dial {
+ label amp
+ callback {pars->Pvowels[nvowel].formants[nformant].amp=(int) o->value();
+formantfiltergraph->redraw();
+pars->changed=true;}
+ tooltip {Formant amplitude} xywh {555 115 24 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ }
+ }
+ Fl_Group {} {
+ xywh {590 47 100 113} box THIN_UP_BOX
+ } {
+ Fl_Counter {} {
+ label {Seq.Size}
+ callback {pars->Psequencesize=(int) o->value();
+update_formant_window();
+pars->changed=true;}
+ xywh {595 62 55 20} type Simple labelfont 1 labelsize 10 align 5 minimum 0 maximum 127 step 1 textfont 1 textsize 11
+ code0 {o->bounds(1,FF_MAX_SEQUENCE-1);}
+ code1 {o->value(pars->Psequencesize);}
+ }
+ Fl_Counter {} {
+ label {S.Pos.}
+ callback {nseqpos=(int) o->value();
+update_formant_window();
+pars->changed=true;}
+ tooltip {Current position from the sequence} xywh {595 97 40 15} type Simple labelfont 1 labelsize 10 align 9 minimum 0 maximum 127 step 1 textsize 10
+ code0 {o->bounds(0,FF_MAX_SEQUENCE-2);}
+ code1 {o->value(nseqpos);}
+ }
+ Fl_Counter vowel_counter {
+ label Vowel
+ callback {pars->Psequence[nseqpos].nvowel=(int) o->value();
+pars->changed=true;}
+ xywh {640 97 40 15} type Simple labelsize 10 align 1 minimum 0 maximum 127 step 1 textsize 10
+ code0 {o->bounds(0,FF_MAX_VOWELS-1);}
+ }
+ Fl_Check_Button {} {
+ label {Neg.Input}
+ callback {pars->Psequencereversed=(int) o->value();
+pars->changed=true;}
+ tooltip {Negate the input from LFO/envelopes/etc.} xywh {625 132 60 20} down_box DOWN_BOX labelsize 10
+ code0 {o->value(pars->Psequencereversed);}
+ }
+ Fl_Dial strchdial {
+ label Strch
+ callback {pars->Psequencestretch=(int) o->value();
+pars->changed=true;}
+ tooltip {Sequence Stretch} xywh {595 130 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Psequencestretch);}
+ class WidgetPDial
+ }
+ }
+ Fl_Counter {} {
+ label {Num.Formants}
+ callback {pars->Pnumformants=(int) o->value();
+update_formant_window();
+pars->changed=true;
+formantfiltergraph->redraw();}
+ xywh {485 15 65 20} type Simple labelfont 1 labelsize 10 align 5 minimum 0 maximum 127 step 1
+ code0 {o->bounds(1,FF_MAX_FORMANTS);}
+ code1 {o->value(pars->Pnumformants);}
+ }
+ Fl_Dial frsldial {
+ label {Fr.Sl.}
+ callback {pars->Pformantslowness=(int) o->value();
+pars->changed=true;}
+ tooltip {Formant's Slowness (Morphing)} xywh {565 15 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Pformantslowness);}
+ class WidgetPDial
+ }
+ Fl_Value_Output centerfreqvo {
+ label {C.f.}
+ callback {o->value(pars->getcenterfreq()/1000.0);}
+ tooltip {Center Frequency (kHz)} xywh {515 164 33 18} when 3 minimum 1 maximum 10 step 0.01 value 1 textfont 1
+ code0 {o->value(pars->getcenterfreq()/1000.0);}
+ }
+ Fl_Value_Output octavesfreqvo {
+ label {Oct.}
+ callback {o->value(pars->getoctavesfreq());}
+ tooltip {No. of octaves} xywh {515 182 33 18} when 3 minimum 1 maximum 127 step 1 value 5 textfont 1
+ code0 {o->value(pars->getoctavesfreq());}
+ }
+ Fl_Slider cfknob {
+ callback {pars->Pcenterfreq=(int)o->value();
+centerfreqvo->do_callback();
+formantfiltergraph->redraw();
+pars->changed=true;}
+ xywh {551 167 84 15} type {Horz Knob} box FLAT_BOX maximum 127
+ code0 {o->value(pars->Pcenterfreq);}
+ }
+ Fl_Slider octknob {
+ callback {pars->Poctavesfreq=(int)o->value();
+octavesfreqvo->do_callback();
+formantfiltergraph->redraw();}
+ xywh {551 185 84 15} type {Horz Knob} box FLAT_BOX maximum 127
+ code0 {o->value(pars->Poctavesfreq);}
+ }
+ Fl_Box formantfiltergraph {
+ xywh {5 5 475 195} box BORDER_BOX
+ code0 {o->init(pars,&nvowel,&nformant);}
+ class FormantFilterGraph
+ }
+ Fl_Dial wvknob {
+ label {Vw.Cl.}
+ callback {pars->Pvowelclearness=(int) o->value();
+pars->changed=true;}
+ tooltip {Vowel "clearness" (how the mixed vowels are avoided)} xywh {600 15 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Pvowelclearness);}
+ class WidgetPDial
+ }
+ Fl_Button {} {
+ label Close
+ callback {formantparswindow->hide();}
+ xywh {645 180 50 25} box THIN_UP_BOX
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(pars,nvowel);}
+ xywh {635 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(pars,this,nvowel);}
+ xywh {665 25 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Box {} {
+ label Vowel
+ xywh {635 10 55 15}
+ }
+ }
+ }
+ Function {update_formant_window()} {open
+ } {
+ code {formant_freq_dial->value(pars->Pvowels[nvowel].formants[nformant].freq);
+formant_q_dial->value(pars->Pvowels[nvowel].formants[nformant].q);
+formant_amp_dial->value(pars->Pvowels[nvowel].formants[nformant].amp);
+if (nformant<pars->Pnumformants) formantparsgroup->activate();
+ else formantparsgroup->deactivate();
+
+if (nseqpos<pars->Psequencesize) vowel_counter->activate();
+ else vowel_counter->deactivate();
+
+
+vowel_counter->value(pars->Psequence[nseqpos].nvowel);} {}
+ }
+ Function {refresh()} {} {
+ code {update_formant_window();
+formantfiltergraph->redraw();
+
+if (pars->Pcategory==2) svfiltertypechoice->value(pars->Ptype);
+if (pars->Pcategory==0) analogfiltertypechoice->value(pars->Ptype);
+
+filtertype->value(pars->Pcategory);
+
+cfreqdial->value(pars->Pfreq);
+qdial->value(pars->Pq);
+
+freqtrdial->value(pars->Pfreqtrack);
+gaindial->value(pars->Pgain);
+
+stcounter->value(pars->Pstages);
+
+int categ=pars->Pcategory;
+if ((categ==0)||(categ==2)) {
+ if (categ==0) {
+ analogfiltertypechoice->show();
+ svfiltertypechoice->hide();
+ } else {
+ svfiltertypechoice->show();
+ analogfiltertypechoice->hide();
+ };
+ editbutton->hide();
+ formantparswindow->hide();
+ cfreqdial->label("C.freq");
+} else {
+ analogfiltertypechoice->hide();
+ svfiltertypechoice->hide();
+ editbutton->show();
+ cfreqdial->label("BS.pos");
+};
+
+filterparamswindow->redraw();} {}
+ }
+ Function {init(FilterParams *filterpars_,unsigned char *velsnsamp_,unsigned char *velsns_)} {} {
+ code {pars=filterpars_;
+velsnsamp=velsnsamp_;
+velsns=velsns_;
+
+make_window();
+end();
+make_formant_window();
+
+
+filterui->resize(this->x(),this->y(),this->w(),this->h());
+
+
+if (velsnsamp==NULL){
+ vsnsadial->deactivate();
+ vsnsadial->value(127);
+ } else vsnsadial->value(*velsnsamp);
+
+if (velsns==NULL){
+ vsnsdial->deactivate();
+ vsnsdial->value(127);
+ } else vsnsdial->value(*velsns);
+
+switchcategory(pars->Pcategory);
+
+
+formantparswindow->label(this->label());
+
+update_formant_window();} {}
+ }
+ Function {switchcategory(int newcat)} {open
+ } {
+ code {if (pars->Pcategory!=newcat){
+ pars->Pgain=64;
+ gaindial->value(64);
+ analogfiltertypechoice->value(0);
+ analogfiltertypechoice->do_callback();
+ svfiltertypechoice->value(0);
+ svfiltertypechoice->do_callback();
+};
+pars->Pcategory=newcat;
+
+refresh();} {}
+ }
+ Function {use_for_dynamic_filter()} {open
+ } {
+ code {freqtrdial->deactivate();
+gaindial->when(0);
+
+cfknob->when(FL_WHEN_RELEASE);
+octknob->when(FL_WHEN_RELEASE);
+
+frsldial->when(0);
+wvknob->when(0);
+formant_freq_dial->when(0);
+formant_q_dial->when(0);
+formant_amp_dial->when(0);
+strchdial->when(0);} {}
+ }
+ decl {FilterParams *pars;} {}
+ decl {unsigned char *velsnsamp,*velsns;} {}
+ decl {int nvowel,nformant,nseqpos;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl
new file mode 100644
index 0000000..2f6cecd
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/LFOUI.fl
@@ -0,0 +1,181 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include "../globals.h"} {public
+}
+
+decl {\#include <FL/Fl_Group.H>} {public
+}
+
+decl {\#include "../Params/LFOParams.h"} {public
+}
+
+decl {\#include <FL/Fl_Box.H>} {public
+}
+
+decl {\#include <FL/fl_draw.H>} {public
+}
+
+decl {\#include <FL/fl_ask.H>} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+decl {\#include "common.H"} {public
+}
+
+class LFOUI {open : {public Fl_Group, PresetsUI_}
+} {
+ Function {LFOUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {pars=NULL;} {}
+ }
+ Function {~LFOUI()} {} {
+ code {lfoui->hide();
+hide();
+//delete (lfoui);} {}
+ }
+ Function {make_window()} {open
+ } {
+ Fl_Window lfoui {open selected
+ xywh {630 351 230 70} type Double color 50 labelfont 1
+ class Fl_Group visible
+ } {
+ Fl_Group lfoparamswindow {
+ label LFO
+ xywh {0 0 230 70} box UP_BOX color 223 labeltype ENGRAVED_LABEL labelsize 10 align 17
+ code0 {set_module_parameters(o);}
+ } {
+ Fl_Dial freq {
+ label {Freq.}
+ callback {pars->Pfreq=o->value();}
+ tooltip {LFO Frequency} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 10 step 1e-05
+ class WidgetPDial
+ }
+ Fl_Dial intensity {
+ label Depth
+ callback {pars->Pintensity=(int)o->value();}
+ tooltip {LFO Amount} xywh {40 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial delay {
+ label Delay
+ callback {pars->Pdelay=(int)o->value();}
+ tooltip {LFO delay} xywh {110 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial startphase {
+ label Start
+ callback {pars->Pstartphase=(int)o->value();}
+ tooltip {LFO Startphase (leftmost is Random)} xywh {75 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial randomness {
+ label {A.R.}
+ callback {pars->Prandomness=(int)o->value();}
+ tooltip {LFO Amplitude Randomness} xywh {180 7 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Choice LFOtype {
+ label Type
+ callback {pars->PLFOtype=(int)o->value();}
+ tooltip {LFO function} xywh {180 40 45 15} down_box BORDER_BOX labelsize 10 align 2 textsize 8
+ } {
+ MenuItem {} {
+ label SINE
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label TRI
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label SQR
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {R.up}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {R.dn}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label E1dn
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label E2dn
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Check_Button continous {
+ label {C.}
+ callback {pars->Pcontinous=(int)o->value();}
+ tooltip {Continous LFO} xywh {165 35 15 15} down_box DOWN_BOX labelsize 10 align 2
+ }
+ Fl_Dial freqrand {
+ label {F.R.}
+ callback {pars->Pfreqrand=(int)o->value();}
+ tooltip {LFO Frequency Randomness} xywh {205 7 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial stretch {
+ label {Str.}
+ callback {pars->Pstretch=(int)o->value();}
+ tooltip {LFO stretch} xywh {144 30 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(pars);}
+ xywh {145 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(pars,this);}
+ xywh {162 10 15 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 10 labelcolor 55
+ }
+ }
+ }
+ }
+ Function {refresh()} {} {
+ code {freq->value(pars->Pfreq);
+intensity->value(pars->Pintensity);
+startphase->value(pars->Pstartphase);
+delay->value(pars->Pdelay);
+continous->value(pars->Pcontinous);
+stretch->value(pars->Pstretch);
+randomness->value(pars->Prandomness);
+freqrand->value(pars->Pfreqrand);
+LFOtype->value(pars->PLFOtype);} {}
+ }
+ Function {init(LFOParams *lfopars_)} {} {
+ code {pars=lfopars_;
+
+make_window();
+end();
+
+refresh();
+
+lfoui->resize(this->x(),this->y(),this->w(),this->h());
+
+lfoparamswindow->label(this->label());} {}
+ }
+ decl {LFOParams *pars;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl
new file mode 100644
index 0000000..254e505
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/MasterUI.fl
@@ -0,0 +1,1889 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2009 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <string.h>} {public
+}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "ADnoteUI.h"} {public
+}
+
+decl {\#include "SUBnoteUI.h"} {public
+}
+
+decl {\#include "EffUI.h"} {public
+}
+
+decl {\#include "VirKeyboard.h"} {public
+}
+
+decl {\#include "ConfigUI.h"} {public
+}
+
+decl {\#include "BankUI.h"} {public
+}
+
+decl {\#include "PartUI.h"} {public
+}
+
+decl {\#include "MicrotonalUI.h"} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+decl {\#include "NioUI.h"} {public global
+}
+
+decl {\#include "../Misc/Master.h"} {public
+}
+
+decl {\#include "../Misc/Part.h"} {public
+}
+
+decl {\#include "../Misc/Util.h"} {public
+}
+
+decl {\#include "common.H"} {public
+}
+
+decl {\#if USE_NSM
+\#include "NSM.H"
+extern NSM_Client *nsm;
+\#endif} {public
+}
+
+decl {\#include "../globals.h"} {public
+}
+
+class VUMeter {: {public Fl_Box}
+} {
+ Function {VUMeter(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {master=NULL;
+npart=-1;} {}
+ }
+ Function {init(Master *master_,int part_)} {} {
+ code {//the "part_" parameters sets the part (if it is >=0), else it sets the master
+master=master_;
+label(NULL);
+npart=part_;
+olddbl=0.0;
+olddbr=0.0;
+oldrmsdbl=0.0;
+oldrmsdbr=0.0;} {}
+ }
+ Function {draw_master()} {} {
+ code {\#define MIN_DB (-48)
+
+int ox=x(); int oy=y(); int lx=w(); int ly=h();
+
+vuData data = master->getVuData();
+
+//pthread_mutex_lock(&master->mutex);
+float dbl=rap2dB(data.outpeakl);
+float dbr=rap2dB(data.outpeakr);
+float rmsdbl=rap2dB(data.rmspeakl);
+float rmsdbr=rap2dB(data.rmspeakr);
+float maxdbl=rap2dB(data.maxoutpeakl);
+float maxdbr=rap2dB(data.maxoutpeakr);
+int clipped=data.clipped;
+//pthread_mutex_unlock(&master->mutex);
+
+dbl=(MIN_DB-dbl)/MIN_DB;
+if (dbl<0.0) dbl=0.0;
+ else if (dbl>1.0)dbl=1.0;
+
+dbr=(MIN_DB-dbr)/MIN_DB;
+if (dbr<0.0) dbr=0.0;
+ else if (dbr>1.0) dbr=1.0;
+
+dbl=dbl*0.4+olddbl*0.6;
+dbr=dbr*0.4+olddbr*0.6;
+
+if ( damage() & FL_DAMAGE_USER1 )
+{
+ if ( olddbl == dbl && olddbr == dbr )
+ return;
+}
+
+olddbl=dbl;
+olddbr=dbr;
+
+\#define VULENX (lx-35)
+\#define VULENY (ly/2-3)
+
+dbl*=VULENX;dbr*=VULENX;
+
+int idbl=(int) dbl;
+int idbr=(int) dbr;
+
+//compute RMS - start
+rmsdbl=(MIN_DB-rmsdbl)/MIN_DB;
+if (rmsdbl<0.0) rmsdbl=0.0;
+ else if (rmsdbl>1.0) rmsdbl=1.0;
+
+rmsdbr=(MIN_DB-rmsdbr)/MIN_DB;
+if (rmsdbr<0.0) rmsdbr=0.0;
+ else if (rmsdbr>1.0) rmsdbr=1.0;
+
+rmsdbl=rmsdbl*0.4+oldrmsdbl*0.6;
+rmsdbr=rmsdbr*0.4+oldrmsdbr*0.6;
+
+oldrmsdbl=rmsdbl;
+oldrmsdbr=rmsdbr;
+
+
+rmsdbl*=VULENX;rmsdbr*=VULENX;
+
+int irmsdbl=(int) rmsdbl;
+int irmsdbr=(int) rmsdbr;
+//compute RMS - end
+
+
+
+//draw the vu-meter lines
+//db
+fl_rectf(ox,oy,idbr,VULENY,0,200,255);
+fl_rectf(ox,oy+ly/2,idbl,VULENY,0,200,255);
+//black
+fl_rectf(ox+idbr,oy,VULENX-idbr,VULENY,0,0,0);
+fl_rectf(ox+idbl,oy+ly/2,VULENX-idbl,VULENY,0,0,0);
+
+//draw the scales
+float tmp=VULENX*1.0/MIN_DB;
+for (int i=1;i<1-MIN_DB;i++){
+ int tx=VULENX+(int) (tmp*i);
+ fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,160,200);
+ if (i%5==0) fl_rectf(ox+tx,oy,1,VULENY+ly/2,0,230,240);
+ if (i%10==0) fl_rectf(ox+tx-1,oy,2,VULENY+ly/2,0,225,255);
+};
+
+//rms
+if (irmsdbr>2) fl_rectf(ox+irmsdbr-1,oy,3,VULENY,255,255,0);
+if (irmsdbl>2) fl_rectf(ox+irmsdbl-1,oy+ly/2,3,VULENY,255,255,0);
+
+
+//draw the red box if clipping has occured
+if (clipped==0) fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,0,0,10);
+ else fl_rectf(ox+VULENX+2,oy+1,lx-VULENX-3,ly-4,250,10,10);
+
+//draw the maxdB
+fl_font(FL_HELVETICA|FL_BOLD,10);
+fl_color(255,255,255);
+char tmpstr[10];
+if ((maxdbl>MIN_DB-20)){
+ snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbr);
+ fl_draw(tmpstr,ox+VULENX+1,oy+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
+};
+if ((maxdbr>MIN_DB-20)){
+ snprintf((char *)&tmpstr,10,"%ddB",(int)maxdbl);
+ fl_draw(tmpstr,ox+VULENX+1,oy+ly/2+1,lx-VULENX-1,VULENY,FL_ALIGN_RIGHT,NULL,0);
+};} {}
+ }
+ Function {draw_part()} {} {
+ code {\#define MIN_DB (-48)
+int ox=x(); int oy=y(); int lx=w(); int ly=h();
+
+if (!active_r()){
+ pthread_mutex_lock(&master->vumutex);
+ int fakedb=master->fakepeakpart[npart];
+ pthread_mutex_unlock(&master->vumutex);
+ fl_rectf(ox,oy,lx,ly,140,140,140);
+ if (fakedb>0){
+ fakedb=(int)(fakedb/255.0*ly)+4;
+ fl_rectf(ox+2,oy+ly-fakedb,lx-4,fakedb,0,0,0);
+ };
+
+ return;
+};
+
+//draw the vu lines
+pthread_mutex_lock(&master->vumutex);
+ float db=rap2dB(master->vuoutpeakpart[npart]);
+pthread_mutex_unlock(&master->vumutex);
+
+db=(MIN_DB-db)/MIN_DB;
+if (db<0.0) db=0.0;
+ else if (db>1.0) db=1.0;
+
+db*=ly-2;
+
+int idb=(int) db;
+
+fl_rectf(ox,oy+ly-idb,lx,idb,0,200,255);
+fl_rectf(ox,oy,lx,ly-idb,0,0,0);
+
+
+//draw the scales
+float tmp=ly*1.0/MIN_DB;
+ for (int i=1;i<1-MIN_DB;i++){
+ int ty=ly+(int) (tmp*i);
+ if (i%5==0) fl_rectf(ox,oy+ly-ty,lx,1,0,160,200);
+ if (i%10==0) fl_rectf(ox,oy+ly-ty,lx,1,0,230,240);
+};} {}
+ }
+ Function {draw()} {} {
+ code {if (npart>=0) draw_part();
+ else draw_master();} {}
+ }
+ Function {tickdraw(VUMeter *o)} {return_type {static void}
+ } {
+ code {o->damage(FL_DAMAGE_USER1);} {}
+ }
+ Function {tick(void *v)} {return_type {static void}
+ } {
+ code {tickdraw((VUMeter *) v);
+ Fl::repeat_timeout(1.0/18.0,tick,v);//18 fps} {}
+ }
+ Function {handle(int event)} {return_type int
+ } {
+ code {switch(event){
+ case FL_SHOW:
+ Fl::add_timeout(1.0/18.0,tick,this);
+ break;
+ case FL_HIDE:
+ Fl::remove_timeout(tick,this);
+ break;
+ case FL_PUSH:
+ if (npart>=0) break;
+ pthread_mutex_lock(&master->mutex);
+ master->vuresetpeaks();
+ pthread_mutex_unlock(&master->mutex);
+ break;
+};
+return(1);} {}
+ }
+ decl {Master *master;} {}
+ decl {int npart;} {}
+ decl {float olddbl,olddbr;} {}
+ decl {float oldrmsdbl,oldrmsdbr;} {}
+}
+
+class SysEffSend {open : {public WidgetPDial}
+} {
+ Function {SysEffSend(int x,int y, int w, int h, const char *label=0):WidgetPDial(x,y,w,h,label)} {} {
+ code {master=NULL;
+neff1=0;
+neff2=0;} {}
+ }
+ Function {init(Master *master_,int neff1_,int neff2_)} {} {
+ code {neff1=neff1_;
+neff2=neff2_;
+master=master_;
+minimum(0);
+maximum(127);
+step(1);
+labelfont(1);
+labelsize(10);
+align(FL_ALIGN_TOP);
+
+value(master->Psysefxsend[neff1][neff2]);
+char tmp[20];snprintf(tmp,20,"%d->%d",neff1+1,neff2+1);
+this->copy_label(tmp);} {}
+ }
+ Function {~SysEffSend()} {} {
+ code {hide();} {}
+ }
+ Function {handle(int event)} {return_type int
+ } {
+ code {if ((event==FL_PUSH) || (event==FL_DRAG)){
+ master->setPsysefxsend(neff1,neff2,(int) value());
+};
+
+return(WidgetPDial::handle(event));} {}
+ }
+ decl {Master *master;} {}
+ decl {int neff1;} {}
+ decl {int neff2;} {}
+}
+
+class Panellistitem {open : {public Fl_Group}
+} {
+ Function {make_window()} {open private
+ } {
+ Fl_Window panellistitem {open
+ private xywh {608 711 100 260} type Double box FLAT_BOX
+ class Fl_Group visible
+ } {
+ Fl_Group panellistitemgroup {open
+ private xywh {0 20 70 240} box UP_FRAME
+ code0 {if (master->part[npart]->Penabled==0) o->deactivate();}
+ code1 {set_module_parameters( o );}
+ } {
+ Fl_Group {} {
+ xywh {45 65 15 110} box ENGRAVED_FRAME
+ } {
+ Fl_Box {} {
+ label {V U}
+ xywh {45 65 15 110} box FLAT_BOX color 0 selection_color 75 labelcolor 55 align 128
+ code0 {o->init(master,npart);}
+ class VUMeter
+ }
+ }
+ Fl_Button partname {
+ label { }
+ callback {if ((int)bankui->cbwig->value()!=(npart+1)){
+ bankui->cbwig->value(npart+1);
+ bankui->cbwig->do_callback();
+};
+bankui->show();}
+ xywh {5 27 60 30} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 10 align 208
+ }
+ Fl_Slider partvolume {
+ callback {master->part[npart]->setPvolume((int) o->value());}
+ xywh {10 65 30 110} type {Vert Knob} box FLAT_BOX minimum 127 maximum 0 step 1 value 127
+ code0 {o->value(master->part[npart]->Pvolume);}
+ }
+ Fl_Dial partpanning {
+ callback {master->part[npart]->setPpanning((int) o->value());}
+ xywh {20 180 30 30} maximum 127 step 1
+ code0 {o->value(master->part[npart]->Ppanning);}
+ class WidgetPDial
+ }
+ Fl_Button {} {
+ label edit
+ callback {if ((int)bankui->cbwig->value()!=(npart+1)){
+ bankui->cbwig->value(npart+1);
+ bankui->cbwig->do_callback();
+};}
+ xywh {15 235 40 20} labelsize 10
+ }
+ Fl_Choice partrcv {
+ callback {master->part[npart]->Prcvchn=(int) o->value();}
+ tooltip {receive from Midi channel} xywh {10 213 50 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Ch%d",i+1);if (i!=9) o->add(nrstr); else o->add("Dr10");};}
+ code1 {o->value(master->part[npart]->Prcvchn);}
+ } {}
+ }
+ Fl_Check_Button partenabled {
+ label 01
+ callback {pthread_mutex_lock(&master->mutex);
+ master->partonoff(npart,(int) o->value());
+pthread_mutex_unlock(&master->mutex);
+
+if ((int) o->value()==0) panellistitemgroup->deactivate();
+ else {
+ panellistitemgroup->activate();
+ if ((int)bankui->cbwig->value()!=(npart+1)){
+ bankui->cbwig->value(npart+1);
+ bankui->cbwig->do_callback();
+ };
+};
+
+o->redraw();}
+ private xywh {5 0 45 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 24
+ code0 {char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);}
+ code1 {o->value(master->part[npart]->Penabled);}
+ }
+ }
+ }
+ Function {Panellistitem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {npart=0;
+master=NULL;
+bankui=NULL;} {}
+ }
+ Function {init(Master *master_, int npart_,BankUI *bankui_)} {} {
+ code {npart=npart_;
+master=master_;
+bankui=bankui_;
+
+make_window();
+panellistitem->show();
+end();} {}
+ }
+ Function {refresh()} {} {
+ code {partenabled->value(master->part[npart]->Penabled);
+if (master->part[npart]->Penabled!=0) panellistitemgroup->activate();
+ else panellistitemgroup->deactivate();
+
+partvolume->value(master->part[npart]->Pvolume);
+partpanning->value(master->part[npart]->Ppanning);
+partrcv->value(master->part[npart]->Prcvchn);
+
+partname->label((char *)master->part[npart]->Pname);
+
+if ((int)bankui->cbwig->value()!=(npart+1))
+ panellistitemgroup->color(fl_rgb_color(160,160,160));
+else
+ panellistitemgroup->color(fl_rgb_color(50,190,240));
+
+panellistitemgroup->redraw();} {}
+ }
+ Function {~Panellistitem()} {} {
+ code {panellistitem->hide();
+//delete(panellistitem);} {}
+ }
+ decl {int npart;} {}
+ decl {Master *master;} {}
+ decl {BankUI *bankui;} {}
+}
+
+class MasterUI {open
+} {
+ Function {make_window()} {open
+ } {
+ Fl_Window masterwindow {
+ label zynaddsubfx
+ callback {if ((
+\#ifdef PLUGINVERSION
+1
+\#elif USE_NSM
+(nsm && nsm->is_active())
+\#else
+0
+\#endif
+ || fl_choice("Exit and leave the unsaved data?","No","Yes",NULL))) {
+ config.save();
+ *exitprogram=1;
+};
+} open
+ xywh {80 370 390 525} type Double xclass zynaddsubfx visible
+ } {
+ Fl_Menu_Bar mastermenu {
+ xywh {-5 0 690 25}
+ } {
+ Submenu {} {
+ label {&File}
+ xywh {0 0 100 20}
+ } {
+ MenuItem {} {
+ label {&New (erase all)...}
+ callback {do_new_master();}
+ xywh {20 20 100 20}
+ }
+ MenuItem {} {
+ label {&Open Parameters...}
+ callback {\#if USE_NSM
+ if ( nsm && nsm->is_active() )
+ {
+ do_load_master();
+ do_save_master( nsm->project_filename );
+ }
+ else
+\#endif
+ {
+ do_load_master();
+ }}
+ xywh {20 20 100 20}
+ }
+ MenuItem {} {
+ label {&Save All Parameters...}
+ callback {\#if USE_NSM
+ if ( nsm && nsm->is_active() )
+ {
+ do_save_master( nsm->project_filename );
+ }
+ else
+\#endif
+ {
+ do_save_master();
+ }}
+ xywh {10 10 100 20} divider
+ }
+ MenuItem {} {
+ label {&Load Scale Settings...}
+ callback {char *filename;
+filename=fl_file_chooser("Open:","({*.xsz})",NULL,0);
+if (filename==NULL) return;
+
+pthread_mutex_lock(&master->mutex);
+ //clear all parameters
+ master->microtonal.defaults();
+
+ //load the data
+ int result=master->microtonal.loadXML(filename);
+pthread_mutex_unlock(&master->mutex);
+
+
+ delete microtonalui;
+ microtonalui=new MicrotonalUI(&master->microtonal);
+
+if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a scale file.");
+ else if (result<0) fl_alert("Error: Could not load the file.");}
+ xywh {35 35 100 20}
+ }
+ MenuItem {} {
+ label {Save Sc&ale Settings ..}
+ callback {char *filename;
+int result=0;
+
+filename=fl_file_chooser("Save:","({*.xsz})",NULL,0);
+if (filename==NULL) return;
+filename=fl_filename_setext(filename,".xsz");
+
+result=fileexists(filename);
+if (result) {
+ result=0;
+ if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return;
+
+};
+
+
+pthread_mutex_lock(&master->mutex);
+result=master->microtonal.saveXML(filename);
+pthread_mutex_unlock(&master->mutex);
+
+if (result<0) fl_alert("Error: Could not save the file.");
+
+
+updatepanel();}
+ xywh {25 25 100 20}
+ }
+ MenuItem {} {
+ label {Show Scale Settings...}
+ callback {microtonalui->show();}
+ xywh {0 0 100 20} divider
+ }
+ MenuItem {} {
+ label {&Settings...}
+ callback {configui->show();}
+ xywh {25 25 100 20}
+ }
+ MenuItem {} {
+ label {N&io Settings}
+ callback {nioui.refresh();
+nioui.show();}
+ xywh {0 0 36 21} divider
+ }
+ MenuItem {} {
+ label {&Copyright...}
+ callback {aboutwindow->show();}
+ xywh {15 15 100 20} divider
+ }
+ MenuItem {} {
+ label {E&xit}
+ callback {masterwindow->do_callback();}
+ xywh {10 10 100 20}
+ }
+ }
+ Submenu {} {
+ label {&Instrument}
+ xywh {10 10 100 20}
+ } {
+ MenuItem {} {
+ label {&Clear Instrument...}
+ callback {if (fl_choice("Clear instrument's parameters ?","No","Yes",NULL)){
+// int npart=(int)npartcounter->value()-1;
+ pthread_mutex_lock(&master->mutex);
+ master->part[npart]->defaultsinstrument();
+ pthread_mutex_unlock(&master->mutex);
+
+ npartcounter->do_callback();
+};
+
+updatepanel();}
+ xywh {35 35 100 20}
+ }
+ MenuItem {} {
+ label {&Open Instrument...}
+ callback {const char *filename;
+filename=fl_file_chooser("Load:","({*.xiz})",NULL,0);
+if (filename==NULL) return;
+
+
+pthread_mutex_lock(&master->mutex);
+// int npart=(int)npartcounter->value()-1;
+
+ //clear all instrument parameters, first
+ master->part[npart]->defaultsinstrument();
+
+ //load the instr. parameters
+ int result=master->part[npart]->loadXMLinstrument(filename);
+
+pthread_mutex_unlock(&master->mutex);
+master->part[npart]->applyparameters();
+
+npartcounter->do_callback();
+updatepanel();
+
+if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file.");
+ else if (result<0) fl_alert("Error: Could not load the file.");}
+ xywh {30 30 100 20}
+ }
+ MenuItem {} {
+ label {&Save Instrument ...}
+ callback {char *filename;
+
+filename=fl_file_chooser("Save:","({*.xiz})",NULL,0);
+if (filename==NULL) return;
+filename=fl_filename_setext(filename,".xiz");
+
+int result=fileexists(filename);
+if (result) {
+ result=0;
+ if (!fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL)) return;
+
+};
+
+
+pthread_mutex_lock(&master->mutex);
+result=master->part[npart]->saveXML(filename);
+pthread_mutex_unlock(&master->mutex);
+
+if (result<0) fl_alert("Error: Could not save the file.");
+
+updatepanel();}
+ xywh {20 20 100 20} divider
+ }
+ MenuItem {} {
+ label {Show Instrument &Bank...}
+ callback {bankui->show();}
+ xywh {0 0 100 20} divider
+ }
+ MenuItem {} {
+ label {&Virtual Keyboard...}
+ callback {virkeyboard->show();}
+ xywh {10 10 100 20}
+ }
+ }
+ Submenu recordmenu {
+ label {&Record}
+ xywh {0 0 100 20}
+ } {
+ MenuItem {} {
+ label {&Choose WAV file...}
+ callback {char *filename;
+recordbutton->deactivate();
+pausebutton->deactivate();
+pauselabel->deactivate();
+stopbutton->deactivate();
+filename=fl_file_chooser("Record to audio file:","(*.wav)",NULL,0);
+if (filename==NULL) return;
+fl_filename_setext(filename,".wav");
+
+int result=master->HDDRecorder.preparefile(filename,0);
+if (result==1) {
+ result=0;
+ if (fl_choice("The file exists. \\nOverwrite it?","No","Yes",NULL))
+ master->HDDRecorder.preparefile(filename,1);
+};
+if (result==0) recordbutton->activate();
+
+if (result!=0) fl_alert("Error: Could not save the file.");}
+ xywh {0 0 100 20}
+ }
+ }
+ Submenu {} {
+ label Misc
+ xywh {10 10 100 20}
+ } {
+ MenuItem {} {
+ label {Switch User Interface Mode}
+ callback {if (fl_choice("Switch the User Interface to Beginner mode ?","No","Yes",NULL)){
+ masterwindow->hide();
+ refresh_master_ui();
+ simplemasterwindow->show();
+ config.cfg.UserInterfaceMode=2;
+};}
+ xywh {10 10 100 20}
+ }
+ }
+ }
+ Fl_Dial mastervolumedial {
+ label {Master Volume}
+ callback {master->setPvolume((int) o->value());}
+ tooltip {Master Volume} xywh {15 32 55 55} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1
+ code0 {o->value(master->Pvolume);}
+ class WidgetPDial
+ }
+ Fl_Counter masterkeyshiftcounter {
+ label {Master KeyShift}
+ callback {master->setPkeyshift((int) o->value()+64);}
+ xywh {150 97 120 23} type Simple labelsize 9 minimum -64 maximum 64 step 1
+ code0 {o->lstep(12);}
+ code1 {o->value(master->Pkeyshift-64);}
+ }
+ Fl_Button {} {
+ label {Panic!}
+ callback {virkeyboard->relaseallkeys();
+pthread_mutex_lock(&master->mutex);
+master->shutup=1;
+pthread_mutex_unlock(&master->mutex);}
+ xywh {280 29 105 53} color 90 labelfont 1
+ }
+ Fl_Group partuigroup {open
+ xywh {0 310 390 205}
+ } {
+ Fl_Group partui {open selected
+ xywh {0 310 383 175}
+ code0 {o->init(master->part[0],master,0,bankui);}
+ code1 {o->show();}
+ class PartUI
+ } {}
+ }
+ Fl_Tabs {} {open
+ xywh {0 145 390 165} box UP_FRAME
+ } {
+ Fl_Group {} {
+ label {System Effects} open
+ xywh {0 162 390 145} labelsize 15 align 9
+ } {
+ Fl_Counter syseffnocounter {
+ label {Sys.Effect No.}
+ callback {nsyseff=(int) o->value()-1;
+sysefftype->value(master->sysefx[nsyseff]->geteffect());
+syseffectui->refresh(master->sysefx[nsyseff]);}
+ xywh {5 181 80 22} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1
+ code0 {o->bounds(1,NUM_SYS_EFX);}
+ code1 {o->value(nsyseff+1);}
+ }
+ Fl_Choice sysefftype {
+ label EffType
+ callback {pthread_mutex_lock(&master->mutex);
+master->sysefx[nsyseff]->changeeffect((int) o->value());
+pthread_mutex_unlock(&master->mutex);
+syseffectui->refresh(master->sysefx[nsyseff]);}
+ xywh {285 176 100 22} down_box BORDER_BOX labelsize 10
+ code0 {o->value(master->sysefx[nsyseff]->geteffect());}
+ } {
+ MenuItem {} {
+ label {No Effect}
+ xywh {10 10 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Reverb
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Echo
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Chorus
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Phaser
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label AlienWah
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Distortion
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label EQ
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label DynFilter
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Group syseffectuigroup {open
+ xywh {5 203 380 95} color 48
+ } {
+ Fl_Group syseffectui {
+ xywh {5 203 380 95}
+ code0 {o->init(master->sysefx[nsyseff]);}
+ class EffUI
+ } {}
+ }
+ Fl_Button {} {
+ label {Send to...}
+ callback {syseffsendwindow->show();}
+ xywh {90 181 85 22} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(master->sysefx[nsyseff]);}
+ xywh {180 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {pthread_mutex_lock(&master->mutex);
+presetsui->paste(master->sysefx[nsyseff],syseffectui);
+pthread_mutex_unlock(&master->mutex);}
+ xywh {210 187 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ }
+ Fl_Group {} {
+ label {Insertion Effects} open
+ xywh {0 165 390 145} labelsize 15 align 9 hide
+ } {
+ Fl_Counter inseffnocounter {
+ label {Ins.Effect No.}
+ callback {ninseff=(int) o->value()-1;
+insefftype->value(master->insefx[ninseff]->geteffect());
+inseffpart->value(master->Pinsparts[ninseff]+2);
+inseffectui->refresh(master->insefx[ninseff]);
+
+if (master->Pinsparts[ninseff]!=-1) {
+ insefftype->activate();
+ inseffectui->activate();
+ inseffectuigroup->activate();
+} else {
+ insefftype->deactivate();
+ inseffectui->deactivate();
+ inseffectuigroup->deactivate();
+};}
+ xywh {5 183 80 22} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1
+ code0 {o->bounds(1,NUM_INS_EFX);}
+ code1 {o->value(ninseff+1);}
+ }
+ Fl_Choice insefftype {
+ label EffType
+ callback {pthread_mutex_lock(&master->mutex);
+master->insefx[ninseff]->changeeffect((int) o->value());
+pthread_mutex_unlock(&master->mutex);
+inseffectui->refresh(master->insefx[ninseff]);
+inseffectui->show();}
+ xywh {285 173 100 22} down_box BORDER_BOX labelsize 10
+ code0 {o->value(master->insefx[ninseff]->geteffect());}
+ code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();}
+ } {
+ MenuItem {} {
+ label {No Effect}
+ xywh {25 25 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Reverb
+ xywh {35 35 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Echo
+ xywh {45 45 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Chorus
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Phaser
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label AlienWah
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Distortion
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label EQ
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label DynFilter
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Group inseffectuigroup {open
+ xywh {5 205 380 95} box FLAT_BOX color 48
+ } {
+ Fl_Group inseffectui {
+ xywh {5 205 380 90} box UP_FRAME
+ code0 {o->init(master->insefx[ninseff]);}
+ code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();}
+ class EffUI
+ } {}
+ }
+ Fl_Choice inseffpart {
+ label {Insert To.}
+ callback {master->Pinsparts[ninseff]=(int) o->value()-2;
+if ((int) o->value()==1){
+ inseffectuigroup->deactivate();
+ insefftype->deactivate();
+ inseffectui->deactivate();
+} else {
+ inseffectuigroup->activate();
+ insefftype->activate();
+ inseffectui->activate();
+};
+master->insefx[ninseff]->cleanup();} open
+ xywh {95 183 80 22} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 10
+ code0 {o->add("Master Out");o->add("Off");}
+ code1 {char tmp[50]; for (int i=0;i<NUM_MIDI_PARTS;i++) {sprintf(tmp,"Part %2d",i+1);o->add(tmp);};}
+ code3 {o->value(master->Pinsparts[ninseff]+2);}
+ } {}
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(master->insefx[ninseff]);}
+ xywh {180 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {pthread_mutex_lock(&master->mutex);
+presetsui->paste(master->insefx[ninseff],inseffectui);
+pthread_mutex_unlock(&master->mutex);}
+ xywh {210 185 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ }
+ }
+ Fl_Button {} {
+ label Scales
+ callback {microtonalui->show();}
+ xywh {320 87 65 23} color 51 labelfont 1
+ }
+ Fl_Group {} {
+ xywh {150 40 117 45} box UP_FRAME
+ } {
+ Fl_Button recordbutton {
+ label {Rec.}
+ callback {o->deactivate();
+recordmenu->deactivate();
+recordmenu->label("&Record(*)");
+stopbutton->activate();
+pausebutton->activate();
+pauselabel->activate();
+master->HDDRecorder.start();
+master->vuresetpeaks();
+mastermenu->redraw();}
+ tooltip {Start Recording} xywh {159 46 21 21} box ROUND_UP_BOX color 88 labelfont 1 labelsize 10 align 2 deactivate
+ }
+ Fl_Button stopbutton {
+ label Stop
+ callback {o->deactivate();
+master->HDDRecorder.stop();
+recordbutton->deactivate();
+pausebutton->deactivate();
+pauselabel->deactivate();
+recordmenu->activate();
+recordmenu->label("&Record");
+mastermenu->redraw();}
+ tooltip {Stop Recording and close the audio file} xywh {237 46 21 21} box THIN_UP_BOX color 4 labelfont 1 labelsize 10 align 2 deactivate
+ }
+ Fl_Button pausebutton {
+ label {@||}
+ callback {o->deactivate();
+master->HDDRecorder.pause();
+recordbutton->activate();
+mastermenu->redraw();}
+ tooltip {Pause Recording} xywh {198 46 21 21} box THIN_UP_BOX color 4 selection_color 4 labelfont 1 labelcolor 3 align 16 deactivate
+ }
+ Fl_Box pauselabel {
+ label Pause
+ xywh {192 66 30 15} labelfont 1 labelsize 10 deactivate
+ }
+ }
+ Fl_Group {} {open
+ xywh {1 490 389 55}
+ } {
+ Fl_Box {} {
+ label {VU-Meter}
+ xywh {5 490 380 30} box FLAT_BOX color 48 selection_color 75
+ code0 {o->init(master,-1);}
+ class VUMeter
+ }
+ }
+ Fl_Check_Button nrpnbutton {
+ label NRPN
+ callback {master->ctl.NRPN.receive=(int) o->value();}
+ tooltip {Receive NRPNs} xywh {10 115 60 25} down_box DOWN_BOX labelsize 12
+ code0 {o->value(master->ctl.NRPN.receive);}
+ }
+ Fl_Counter npartcounter {
+ callback {int nval=(int) o->value()-1;
+partuigroup->remove(partui);
+delete partui;
+partui=new PartUI(0,0,765,525);
+partuigroup->add(partui);
+partui->init(master->part[nval],master,nval,bankui);
+partui->redraw();
+o->redraw();
+npart=nval;
+
+updatepanel();
+simplenpartcounter->value(nval+1);
+simplenpartcounter->do_callback();}
+ tooltip {The part number} xywh {5 312 50 18} type Simple labelfont 1 minimum 0 maximum 127 step 1 value 1 textfont 1
+ code0 {o->bounds(1,NUM_MIDI_PARTS);}
+ code1 {bankui->init(o);}
+ }
+ Fl_Button {} {
+ label vK
+ callback {virkeyboard->show();}
+ tooltip {Virtual Keyboard} xywh {280 87 40 23} color 51 labelfont 1
+ }
+ Fl_Group {} {open
+ xywh {85 32 55 110} box UP_FRAME
+ } {
+ Fl_Button {} {
+ label Reset
+ callback {globalfinedetuneslider->value(64.0);
+globalfinedetuneslider->do_callback();}
+ tooltip {Master fine detune reset} xywh {90 37 45 23} box THIN_UP_BOX labelsize 10
+ }
+ Fl_Dial globalfinedetuneslider {
+ label {Fine Detune}
+ callback {master->microtonal.Pglobalfinedetune=(int) o->value();}
+ tooltip {global fine detune} xywh {90 68 45 45} box ROUND_UP_BOX labelsize 9 align 130 maximum 127 step 1 value 64
+ code0 {o->value(master->microtonal.Pglobalfinedetune);}
+ class WidgetPDial
+ }
+ }
+ Fl_Button {} {
+ label {Panel Window}
+ callback {updatepanel();
+panelwindow->show();}
+ tooltip {Panel Window} xywh {280 112 105 23} color 51 labelfont 1 labelsize 10
+ }
+ Fl_Button sm_indicator1 {
+ label SM
+ xywh {350 5 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 45 selection_color 93 labelfont 3 labelcolor 39 deactivate
+ }
+ }
+ Fl_Window aboutwindow {
+ label {Copyright...}
+ xywh {411 344 365 280} type Double hide
+ } {
+ Fl_Box {} {
+ label {Copyright (c) 2002-2009 Nasca O. PAUL and others. Please read AUTHORS.txt}
+ xywh {15 35 335 55} labeltype EMBOSSED_LABEL labelsize 15 align 208
+ }
+ Fl_Box {} {
+ label {This is free software; you may redistribute it and/or modify it under the terms of the
+version 2 (or any later version) of the GNU General Public License as published by the Free Software Fundation.
+ This program comes with
+ ABSOLUTELY NO WARRANTY.
+ See the version 2 (or any later version) of the
+GNU General Public License for details.}
+ xywh {15 90 335 145} labelfont 1 labelsize 11 align 144
+ }
+ Fl_Button {} {
+ label {Close this window}
+ callback {aboutwindow->hide();}
+ xywh {80 245 190 25} box THIN_UP_BOX labelsize 11
+ }
+ Fl_Box {} {
+ label ZynAddSubFX
+ xywh {15 5 335 30} labeltype EMBOSSED_LABEL labelfont 1 labelsize 20 align 16
+ }
+ }
+ Fl_Window syseffsendwindow {
+ label {System Effects Send}
+ xywh {171 234 120 250} type Double hide resizable
+ } {
+ Fl_Scroll {} {open
+ xywh {0 45 120 170} box FLAT_BOX resizable
+ code0 {for (int neff1=0;neff1<NUM_SYS_EFX;neff1++) for (int neff2=neff1+1;neff2<NUM_SYS_EFX;neff2++)}
+ code1 {{syseffsend[neff1][neff2]=new SysEffSend(o->x()+(neff2-1)*35,o->y()+15+neff1*50,30,30);syseffsend[neff1][neff2]->label("aaa");syseffsend[neff1][neff2]->init(master,neff1,neff2);};}
+ } {}
+ Fl_Button {} {
+ label Close
+ callback {syseffsendwindow->hide();}
+ xywh {25 220 80 25} box THIN_UP_BOX
+ }
+ Fl_Box {} {
+ label {Send system effect's output to other system effects}
+ xywh {5 5 110 35} labelsize 10 align 192
+ }
+ }
+ Fl_Window panelwindow {
+ label {ZynAddSubFX Panel}
+ xywh {89 59 630 635} type Double hide
+ } {
+ Fl_Scroll {} {
+ xywh {0 5 570 310} type HORIZONTAL box THIN_UP_BOX
+ } {
+ Fl_Pack {} {
+ xywh {5 10 560 285} type HORIZONTAL
+ code0 {for (int i=0;i<NUM_MIDI_PARTS/2;i++){panellistitem[i]=new Panellistitem(0,0,70,260,"");panellistitem[i]->init(master,i,bankui);}}
+ } {}
+ }
+ Fl_Scroll {} {
+ xywh {0 320 570 310} type HORIZONTAL box THIN_UP_BOX
+ } {
+ Fl_Pack {} {
+ xywh {5 325 560 285} type HORIZONTAL
+ code0 {for (int i=NUM_MIDI_PARTS/2;i<NUM_MIDI_PARTS;i++){panellistitem[i]=new Panellistitem(0,0,70,260,"");panellistitem[i]->init(master,i,bankui);}}
+ } {}
+ }
+ Fl_Button {} {
+ label Close
+ callback {panelwindow->hide();
+updatepanel();}
+ xywh {575 605 50 25} box THIN_UP_BOX labelsize 13
+ }
+ Fl_Button {} {
+ label Refresh
+ callback {updatepanel();}
+ xywh {575 570 55 25} box THIN_UP_BOX labelsize 13
+ }
+ }
+ Fl_Window simplemasterwindow {
+ label ZynAddSubFX
+ callback {\#ifndef PLUGINVERSION
+if (fl_choice("Exit and leave the unsaved data?","No","Yes",NULL))
+\#endif
+{
+ config.save();
+ *exitprogram=1;
+};
+} open
+ xywh {283 262 600 335} type Double visible
+ } {
+ Fl_Menu_Bar simplemastermenu {
+ xywh {0 0 690 25}
+ } {
+ Submenu {} {
+ label {&File}
+ xywh {10 10 100 20}
+ } {
+ MenuItem {} {
+ label {&New (erase all)...}
+ callback {do_new_master();}
+ xywh {30 30 100 20}
+ }
+ MenuItem {} {
+ label {&Open Parameters...}
+ callback {do_load_master();}
+ xywh {30 30 100 20}
+ }
+ MenuItem {} {
+ label {&Save All Parameters...}
+ callback {\#if USE_NSM
+ if ( nsm && nsm->is_active() )
+ {
+ do_save_master( nsm->project_filename );
+ }
+ else
+\#endif
+ {
+ do_save_master();
+ }}
+ xywh {20 20 100 20} divider
+ }
+ MenuItem {} {
+ label {&Settings...}
+ callback {configui->show();}
+ xywh {35 35 100 20} divider
+ }
+ MenuItem {} {
+ label {&Copyright...}
+ callback {aboutwindow->show();}
+ xywh {25 25 100 20} divider
+ }
+ MenuItem {} {
+ label {E&xit}
+ callback {masterwindow->do_callback();}
+ xywh {20 20 100 20}
+ }
+ }
+ Submenu {} {
+ label {&Instrument}
+ xywh {20 20 100 20}
+ } {
+ MenuItem {} {
+ label {&Open Instrument...}
+ callback {const char *filename;
+filename=fl_file_chooser("Load:","({*.xiz})",NULL,0);
+if (filename==NULL) return;
+
+
+pthread_mutex_lock(&master->mutex);
+// int npart=(int)npartcounter->value()-1;
+
+ //clear all instrument parameters, first
+ master->part[npart]->defaultsinstrument();
+
+ //load the instr. parameters
+ int result=master->part[npart]->loadXMLinstrument(filename);
+
+pthread_mutex_unlock(&master->mutex);
+master->part[npart]->applyparameters();
+
+simplenpartcounter->do_callback();
+
+if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file.");
+ else if (result<0) fl_alert("Error: Could not load the file.");}
+ xywh {40 40 100 20}
+ }
+ MenuItem {} {
+ label {Show Instrument &Bank...}
+ callback {bankui->show();}
+ xywh {10 10 100 20} divider
+ }
+ }
+ Submenu {} {
+ label Misc
+ xywh {0 0 100 20}
+ } {
+ MenuItem {} {
+ label {Switch User Interface Mode}
+ callback {if (fl_choice("Switch the User Interface to Advanced mode ?","No","Yes",NULL)){
+ simplemasterwindow->hide();
+ refresh_master_ui();
+ masterwindow->show();
+ config.cfg.UserInterfaceMode=1;
+};}
+ xywh {0 0 100 20}
+ }
+ }
+ }
+ Fl_Group simplelistitemgroup {open
+ private xywh {125 65 215 145} box UP_FRAME
+ code0 {if (master->part[npart]->Penabled==0) o->deactivate();}
+ } {
+ Fl_Button partname {
+ callback {if ((int)bankui->cbwig->value()!=(npart+1)){
+ bankui->cbwig->value(npart+1);
+ bankui->cbwig->do_callback();
+};
+bankui->show();}
+ xywh {130 72 205 18} box THIN_DOWN_BOX down_box FLAT_BOX color 50 labelfont 1 labelsize 11 align 208
+ }
+ Fl_Slider partpanning {
+ label Pan
+ callback {master->part[npart]->setPpanning((int) o->value());}
+ xywh {185 95 145 15} type {Horz Knob} box FLAT_BOX labelsize 11 maximum 127 step 1 value 64
+ code0 {o->value(master->part[npart]->Ppanning);}
+ }
+ Fl_Choice partrcv {
+ label {Midi Channel Receive}
+ callback {virkeys->relaseallkeys(0);
+master->part[npart]->Prcvchn=(int) o->value();
+virkeys->midich=(int) o->value();} open
+ tooltip {receive from Midi channel} xywh {140 157 65 18} down_box BORDER_BOX labelsize 10 align 130 textfont 1
+ code0 {char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Ch%d",i+1);if (i!=9) o->add(nrstr); else o->add("Dr10");};}
+ code1 {o->value(master->part[npart]->Prcvchn);}
+ } {}
+ Fl_Dial partvolume {
+ callback {master->part[npart]->setPvolume((int) o->value());}
+ xywh {135 95 45 40} labelsize 9 maximum 127 step 1
+ code0 {o->value(master->part[npart]->Pvolume);}
+ class WidgetPDial
+ }
+ Fl_Box {} {
+ label Volume
+ xywh {130 130 55 20} labelsize 10
+ }
+ Fl_Check_Button simplepartportamento {
+ label Portamento
+ callback {master->part[npart]->ctl.portamento.portamento=(int) o->value();}
+ tooltip {Enable/Disable the portamento} xywh {193 127 79 23} down_box DOWN_BOX labelsize 9
+ code0 {o->value(master->part[npart]->ctl.portamento.portamento);}
+ }
+ Fl_Counter simpleminkcounter {
+ label {Min.key}
+ callback {master->part[npart]->Pminkey=(int) o->value();
+if (master->part[npart]->Pminkey>master->part[npart]->Pmaxkey) o->textcolor(FL_RED);
+ else o->textcolor(FL_BLACK);}
+ tooltip {Minimum key (that the part receives NoteOn messages)} xywh {210 158 40 15} type Simple labelsize 10 minimum 0 maximum 127 step 1 textsize 10
+ code0 {o->value(master->part[npart]->Pminkey);}
+ }
+ Fl_Counter simplemaxkcounter {
+ label {Max.key}
+ callback {master->part[npart]->Pmaxkey=(int) o->value();
+
+if (master->part[npart]->Pminkey>master->part[npart]->Pmaxkey) o->textcolor(FL_RED);
+ else o->textcolor(FL_BLACK);}
+ tooltip {Maximum key (that the part receives NoteOn messages)} xywh {255 158 40 15} type Simple labelsize 10 minimum 0 maximum 127 step 1 textsize 10
+ code0 {o->value(master->part[npart]->Pmaxkey);}
+ }
+ Fl_Button {} {
+ label m
+ callback {if (master->part[npart]->lastnote>=0) simpleminkcounter->value(master->part[npart]->lastnote);
+simpleminkcounter->do_callback();
+simplemaxkcounter->do_callback();}
+ tooltip {set the minimum key to the last pressed key} xywh {230 188 15 12} box THIN_UP_BOX labelsize 10
+ }
+ Fl_Button {} {
+ label M
+ callback {if (master->part[npart]->lastnote>=0) simplemaxkcounter->value(master->part[npart]->lastnote);
+simplemaxkcounter->do_callback();
+simpleminkcounter->do_callback();}
+ tooltip {set the maximum key to the last pressed key} xywh {260 188 15 12} box THIN_UP_BOX labelsize 10
+ }
+ Fl_Button {} {
+ label R
+ callback {simpleminkcounter->value(0);
+simpleminkcounter->do_callback();
+simplemaxkcounter->value(127);
+simplemaxkcounter->do_callback();}
+ tooltip {reset the minimum key to 0 and maximum key to 127} xywh {245 188 15 12} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ Fl_Counter simplepartkeyshiftcounter {
+ label KeyShift
+ callback {master->part[npart]->Pkeyshift=(int) o->value()+64;}
+ xywh {280 120 50 20} type Simple labelsize 11 minimum -64 maximum 64 step 1
+ code0 {o->lstep(12);}
+ code1 {o->value(master->part[npart]->Pkeyshift-64);}
+ }
+ Fl_Dial simplesyseffsend {
+ callback {master->setPsysefxvol(npart,nsyseff,(int) o->value());}
+ xywh {300 160 30 30} maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Box {} {
+ label Effect
+ xywh {295 190 40 15} labelsize 10
+ }
+ }
+ Fl_Check_Button partenabled {
+ label Enabled
+ callback {pthread_mutex_lock(&master->mutex);
+ master->partonoff(npart,(int) o->value());
+pthread_mutex_unlock(&master->mutex);
+
+if ((int) o->value()==0) simplelistitemgroup->deactivate();
+ else {
+ simplelistitemgroup->activate();
+ if ((int)bankui->cbwig->value()!=(npart+1)){
+ bankui->cbwig->value(npart+1);
+ bankui->cbwig->do_callback();
+ };
+};
+
+o->redraw();}
+ private xywh {250 40 85 20} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 24
+ code0 {//char tmp[10];snprintf(tmp,10,"%d",npart+1);o->copy_label(tmp);}
+ code1 {o->value(master->part[npart]->Penabled);}
+ }
+ Fl_Box virkeys {
+ label Keyboard
+ xywh {5 215 590 80} box BORDER_BOX color 17
+ code0 {o->init(master);}
+ class VirKeys
+ }
+ Fl_Group {} {open
+ xywh {340 30 255 185}
+ } {
+ Fl_Tabs {} {open
+ xywh {345 35 245 175} box UP_FRAME align 18
+ } {
+ Fl_Group {} {
+ label {System Effects} open
+ xywh {345 55 245 155} box UP_FRAME labelfont 1 labelsize 12 align 18
+ } {
+ Fl_Counter simplesyseffnocounter {
+ label {Sys.Effect No.}
+ callback {nsyseff=(int) o->value()-1;
+simplesysefftype->value(master->sysefx[nsyseff]->geteffect());
+simplesyseffectui->refresh(master->sysefx[nsyseff]);
+simplerefresh();}
+ xywh {350 75 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1
+ code0 {o->bounds(1,NUM_SYS_EFX);}
+ code1 {o->value(nsyseff+1);}
+ }
+ Fl_Choice simplesysefftype {
+ label EffType
+ callback {pthread_mutex_lock(&master->mutex);
+master->sysefx[nsyseff]->changeeffect((int) o->value());
+pthread_mutex_unlock(&master->mutex);
+simplesyseffectui->refresh(master->sysefx[nsyseff]);}
+ xywh {515 80 70 15} down_box BORDER_BOX labelsize 10 align 5
+ code0 {o->value(master->sysefx[nsyseff]->geteffect());}
+ } {
+ MenuItem {} {
+ label {No Effect}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Reverb
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Echo
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Chorus
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Phaser
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label AlienWah
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Distortion
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label EQ
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label DynFilter
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Group simplesyseffectuigroup {open
+ xywh {350 95 235 95} color 48
+ } {
+ Fl_Group simplesyseffectui {
+ xywh {350 95 234 95}
+ code0 {o->init(master->sysefx[nsyseff]);}
+ class SimpleEffUI
+ } {}
+ }
+ Fl_Button {} {
+ label {Send to...}
+ callback {syseffsendwindow->show();}
+ xywh {435 75 75 20} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ Fl_Button {} {
+ label P
+ callback {pthread_mutex_lock(&master->mutex);
+presetsui->paste(master->sysefx[nsyseff],simplesyseffectui);
+pthread_mutex_unlock(&master->mutex);}
+ xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ }
+ Fl_Group {} {
+ label {Insertion Effects}
+ xywh {345 55 245 155} box UP_FRAME labelfont 1 labelsize 12 align 18 hide
+ } {
+ Fl_Counter simpleinseffnocounter {
+ label {Ins.Effect No.}
+ callback {ninseff=(int) o->value()-1;
+simpleinsefftype->value(master->insefx[ninseff]->geteffect());
+simpleinseffpart->value(master->Pinsparts[ninseff]+2);
+simpleinseffectui->refresh(master->insefx[ninseff]);
+
+if (master->Pinsparts[ninseff]!=-1) {
+ simpleinsefftype->activate();
+ simpleinseffectui->activate();
+ simpleinseffectuigroup->activate();
+} else {
+ simpleinsefftype->deactivate();
+ simpleinseffectui->deactivate();
+ simpleinseffectuigroup->deactivate();
+};}
+ xywh {350 75 80 20} type Simple labelfont 1 labelsize 10 align 1 minimum 0 maximum 127 step 1 value 1 textfont 1
+ code0 {o->bounds(1,NUM_INS_EFX);}
+ code1 {o->value(ninseff+1);}
+ }
+ Fl_Choice simpleinsefftype {
+ label EffType
+ callback {pthread_mutex_lock(&master->mutex);
+master->insefx[ninseff]->changeeffect((int) o->value());
+pthread_mutex_unlock(&master->mutex);
+simpleinseffectui->refresh(master->insefx[ninseff]);
+simpleinseffectui->show();}
+ xywh {515 80 70 15} down_box BORDER_BOX labelsize 10 align 5
+ code0 {o->value(master->insefx[ninseff]->geteffect());}
+ code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();}
+ } {
+ MenuItem {} {
+ label {No Effect}
+ xywh {35 35 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Reverb
+ xywh {45 45 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Echo
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Chorus
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Phaser
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label AlienWah
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Distortion
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label EQ
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label DynFilter
+ xywh {110 110 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Group simpleinseffectuigroup {
+ xywh {350 95 234 95} box FLAT_BOX color 48
+ } {
+ Fl_Group simpleinseffectui {
+ xywh {350 95 234 95}
+ code0 {o->init(master->insefx[ninseff]);}
+ code1 {if (master->Pinsparts[ninseff]== -1) o->deactivate();}
+ class SimpleEffUI
+ } {}
+ }
+ Fl_Choice simpleinseffpart {
+ label {Insert To.}
+ callback {master->Pinsparts[ninseff]=(int) o->value()-2;
+if ((int) o->value()==1){
+ simpleinseffectuigroup->deactivate();
+ simpleinsefftype->deactivate();
+ simpleinseffectui->deactivate();
+} else {
+ simpleinseffectuigroup->activate();
+ simpleinsefftype->activate();
+ simpleinseffectui->activate();
+};
+master->insefx[ninseff]->cleanup();} open
+ xywh {435 75 80 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 10
+ code0 {o->add("Master Out");o->add("Off");}
+ code1 {char tmp[50]; for (int i=0;i<NUM_MIDI_PARTS;i++) {sprintf(tmp,"Part %2d",i+1);o->add(tmp);};}
+ code3 {o->value(master->Pinsparts[ninseff]+2);}
+ } {}
+ Fl_Button {} {
+ label P
+ callback {pthread_mutex_lock(&master->mutex);
+presetsui->paste(master->insefx[ninseff],simpleinseffectui);
+pthread_mutex_unlock(&master->mutex);}
+ xywh {560 65 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ }
+ }
+ }
+ Fl_Group {} {open
+ xywh {5 300 590 30} box ENGRAVED_FRAME
+ } {
+ Fl_Box {} {
+ label {VU-Meter}
+ xywh {5 300 590 30} box FLAT_BOX color 41 selection_color 75
+ code0 {o->init(master,-1);}
+ class VUMeter
+ }
+ }
+ Fl_Dial simplemastervolumedial {
+ label {Master Volume}
+ callback {master->setPvolume((int) o->value());}
+ tooltip {Master Volume} xywh {10 35 40 40} box ROUND_UP_BOX labelfont 1 labelsize 11 align 130 maximum 127 step 1
+ code0 {o->value(master->Pvolume);}
+ class WidgetPDial
+ }
+ Fl_Counter simplemasterkeyshiftcounter {
+ label {Master KeyShift}
+ callback {master->setPkeyshift((int) o->value()+64);}
+ xywh {15 110 90 20} labelsize 11 minimum -64 maximum 64 step 1
+ code0 {o->lstep(12);}
+ code1 {o->value(master->Pkeyshift-64);}
+ }
+ Fl_Button {} {
+ label {Stop ALL sounds!}
+ callback {virkeyboard->relaseallkeys();
+pthread_mutex_lock(&master->mutex);
+master->shutup=1;
+pthread_mutex_unlock(&master->mutex);}
+ xywh {5 149 115 31} color 90 labelfont 1 labelsize 10
+ }
+ Fl_Button {} {
+ label Reset
+ callback {simpleglobalfinedetuneslider->value(64.0);
+simpleglobalfinedetuneslider->do_callback();}
+ tooltip {Master fine detune reset} xywh {70 30 50 17} box THIN_UP_BOX labelsize 11 align 128
+ }
+ Fl_Dial simpleglobalfinedetuneslider {
+ label {Fine Detune}
+ callback {master->microtonal.Pglobalfinedetune=(int) o->value();}
+ tooltip {global fine detune} xywh {80 50 30 30} box ROUND_UP_BOX labelsize 11 align 130 maximum 127 step 1 value 64
+ code0 {o->value(master->microtonal.Pglobalfinedetune);}
+ class WidgetPDial
+ }
+ Fl_Counter simplenpartcounter {
+ label Part
+ callback {virkeys->relaseallkeys(0);
+npartcounter->value(o->value());
+npart=(int) o->value()-1;
+
+simplerefresh();
+virkeys->midich=master->part[npart]->Prcvchn;}
+ tooltip {The part number} xywh {170 40 70 20} type Simple labelfont 1 align 4 minimum 0 maximum 127 step 1 value 1 textfont 1
+ code0 {o->bounds(1,NUM_MIDI_PARTS);}
+ }
+ Fl_Counter {} {
+ label {Keyb.Oct.}
+ callback {virkeys->relaseallkeys(0);
+virkeys->midioct=(int) o->value();
+virkeys->take_focus();}
+ tooltip {Midi Octave} xywh {5 190 55 20} type Simple labelsize 11 align 8 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 11
+ code0 {o->value(virkeys->midioct);}
+ }
+ Fl_Button sm_indicator2 {
+ label SM
+ xywh {560 5 35 15} box ROUNDED_BOX down_box ROUNDED_BOX color 45 selection_color 93 labelfont 3 labelcolor 39 deactivate
+ }
+ }
+ Fl_Window selectuiwindow {
+ label {User Interface mode}
+ callback {*exitprogram=1;}
+ xywh {342 246 430 250} type Double hide non_modal
+ } {
+ Fl_Box {} {
+ label {Welcome to ZynAddSubFX}
+ xywh {5 5 425 40} labeltype SHADOW_LABEL labelfont 1 labelsize 26
+ }
+ Fl_Box {} {
+ label {Please choose the interface mode:}
+ xywh {10 50 265 25} labelfont 1 labelsize 13
+ }
+ Fl_Button {} {
+ label Advanced
+ callback {config.cfg.UserInterfaceMode=1;
+masterwindow->show();
+selectuiwindow->hide();}
+ xywh {10 165 100 35} color 229 labelfont 1 labelsize 16
+ }
+ Fl_Box {} {
+ label {.. if you have used ZynAddSubFX before, or you like to have full controll to all parameters.}
+ xywh {110 165 310 35} labelfont 1 labelsize 11 align 144
+ }
+ Fl_Button {} {
+ label Beginner
+ callback {simplemasterwindow->show();
+selectuiwindow->hide();
+config.cfg.UserInterfaceMode=2;}
+ xywh {10 80 100 65} color 238 labelfont 1 labelsize 16
+ }
+ Fl_Box {} {
+ label {..if you are a beginner, you prefer using presets or you prefer to use simpler user interfaces. Most functionality of ZynAddSubFX will be hidden in this mode to make simple the learning/using it.}
+ xywh {110 75 320 75} labelfont 1 labelsize 11 align 144
+ }
+ Fl_Box {} {
+ label {You can switch the interface modes anytime you want.}
+ xywh {30 215 360 25} box BORDER_BOX color 51 labelfont 1 labelsize 11 align 144
+ }
+ }
+ }
+ Function {updatesendwindow()} {} {
+ code {for (int neff1=0;neff1<NUM_SYS_EFX;neff1++)
+ for (int neff2=neff1+1;neff2<NUM_SYS_EFX;neff2++)
+ syseffsend[neff1][neff2]->value(master->Psysefxsend[neff1][neff2]);} {}
+ }
+ Function {updatepanel()} {} {
+ code {for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
+ panellistitem[npart]->refresh();
+};} {}
+ }
+ Function {setfilelabel(const char *filename)} {} {
+ code {if (filename!=NULL) snprintf(&masterwindowlabel[0],100,"%s - ZynAddSubFX",fl_filename_name(filename));
+ else snprintf(&masterwindowlabel[0],100,"%s","ZynAddSubFX");
+masterwindowlabel[99]='\\0';
+masterwindow->label(&masterwindowlabel[0]);
+simplemasterwindow->label(&masterwindowlabel[0]);} {}
+ }
+ Function {MasterUI(Master *master_,int *exitprogram_)} {} {
+ code {master=master_;
+exitprogram=exitprogram_;
+ninseff=0;
+nsyseff=0;
+npart=0;
+
+for (int i=0;i<NUM_SYS_EFX;i++)
+ for (int j=0;j<NUM_SYS_EFX;j++)
+ syseffsend[i][j]=NULL;
+
+microtonalui=new MicrotonalUI(&master->microtonal);
+virkeyboard=new VirKeyboard(master);
+bankui=new BankUI(master,&npart);
+configui=new ConfigUI();
+
+make_window();
+\#ifdef OS_WINDOWS
+masterwindow->icon((char *)LoadIcon(GetModuleHandle(NULL), "zynaddsubfx_icon"));
+\#endif
+
+presetsui=new PresetsUI();
+setfilelabel(NULL);
+swapefftype=0;
+simplerefresh();} {}
+ }
+ Function {~MasterUI()} {} {
+ code {masterwindow->hide();
+delete masterwindow;
+simplemasterwindow->hide();
+delete simplemasterwindow;
+aboutwindow->hide();
+delete aboutwindow;
+syseffsendwindow->hide();
+delete syseffsendwindow;
+
+delete virkeyboard;
+delete microtonalui;
+delete bankui;
+delete configui;
+
+delete presetsui;
+delete panelwindow;
+delete selectuiwindow;} {}
+ }
+ Function {showUI()} {} {
+ code {switch (config.cfg.UserInterfaceMode){
+ case 0:selectuiwindow->show();
+ break;
+ case 1:masterwindow->show();
+ break;
+ case 2:simplemasterwindow->show();
+ break;
+};} {}
+ }
+ Function {simplerefresh()} {} {
+ code {partenabled->value(master->part[npart]->Penabled);
+if (master->part[npart]->Penabled!=0) simplelistitemgroup->activate();
+ else simplelistitemgroup->deactivate();
+
+partvolume->value(master->part[npart]->Pvolume);
+partpanning->value(master->part[npart]->Ppanning);
+partrcv->value(master->part[npart]->Prcvchn);
+
+if (master->part[npart]->Pname[0]!=0) partname->label((char *)master->part[npart]->Pname);
+ else partname->label("Click here to load a instrument");
+
+simplelistitemgroup->redraw();
+simplepartportamento->value(master->part[npart]->ctl.portamento.portamento);
+simpleminkcounter->value(master->part[npart]->Pminkey);
+simplemaxkcounter->value(master->part[npart]->Pmaxkey);
+
+simplepartkeyshiftcounter->value(master->part[npart]->Pkeyshift-64);
+simplesyseffsend->value(master->Psysefxvol[nsyseff][npart]);} {}
+ }
+ Function {do_new_master_unconditional()} {} {
+ code {delete microtonalui;
+
+ pthread_mutex_lock(&master->mutex);
+ master->defaults();
+ pthread_mutex_unlock(&master->mutex);
+
+ npartcounter->value(1);
+ refresh_master_ui();
+ updatepanel();} {}
+ }
+ Function {do_new_master()} {} {
+ code {if (fl_choice("Clear *ALL* the parameters ?","No","Yes",NULL)){
+ do_new_master_unconditional();
+ }} {}
+ }
+ Function {do_load_master_unconditional(const char *filename, const char *display_name)} {return_type int
+ } {
+ code {pthread_mutex_lock(&master->mutex);
+ //clear all parameters
+ master->defaults();
+
+ //load the data
+ int result=master->loadXML(filename);
+
+ master->applyparameters(false);
+ pthread_mutex_unlock(&master->mutex);
+
+ npartcounter->value(1);
+ refresh_master_ui();
+ updatepanel();
+
+ if (result>=0) setfilelabel(display_name);
+
+ return result;} {}
+ }
+ Function {do_load_master(const char* file = NULL)} {} {
+ code {const char *filename;
+ if (file == NULL) {
+ filename=fl_file_chooser("Open:","({*.xmz})",NULL,0);
+ if (filename==NULL) return;
+ }
+ else {
+ filename = file;
+ }
+
+ int result = do_load_master_unconditional( filename, filename );
+
+if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a zynaddsubfx parameters file.");
+ else if (result<0) fl_alert("Error: Could not load the file.");} {}
+ }
+ Function {do_save_master(const char* file = NULL)} {} {
+ code {const char *filename;
+char *tmp;
+ int result=0;
+ if (file == NULL) {
+ tmp=fl_file_chooser("Save:","({*.xmz})",NULL,0);
+ if (tmp==NULL) return;
+ tmp=fl_filename_setext(tmp,".xmz");
+ filename=tmp;
+ result=fileexists(tmp);
+ if (result) {
+ result=0;
+ if (!fl_choice("The file exists. Overwrite it?","No","Yes",NULL)) return;
+
+ }
+ }
+ else {
+ filename = file;
+ }
+
+
+pthread_mutex_lock(&master->mutex);
+result=master->saveXML(filename);
+pthread_mutex_unlock(&master->mutex);
+
+if (result<0) fl_alert("Error: Could not save the file.");
+ else
+{
+\#if USE_NSM
+ if ( nsm && nsm->is_active() )
+ setfilelabel( nsm->display_name );
+ else
+\#endif
+ setfilelabel(filename);
+}
+updatepanel();} {}
+ }
+ Function {refresh_master_ui()} {} {
+ code {ninseff=0;
+nsyseff=0;
+npart=0;
+
+//the Master UI
+npartcounter->do_callback();
+syseffnocounter->do_callback();
+inseffnocounter->do_callback();
+masterkeyshiftcounter->value(master->Pkeyshift-64);
+mastervolumedial->value(master->Pvolume);
+globalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
+microtonalui=new MicrotonalUI(&master->microtonal);
+nrpnbutton->value(master->ctl.NRPN.receive);
+updatesendwindow();
+updatepanel();
+
+//the simle MasterUI
+simplenpartcounter->value(1);
+simplesyseffnocounter->value(1);
+simpleinseffnocounter->value(1);
+simplenpartcounter->do_callback();
+simplesyseffnocounter->do_callback();
+simpleinseffnocounter->do_callback();
+simplemasterkeyshiftcounter->value(master->Pkeyshift-64);
+simplemastervolumedial->value(master->Pvolume);
+simpleglobalfinedetuneslider->value(master->microtonal.Pglobalfinedetune);
+virkeys->midich=master->part[npart]->Prcvchn;
+
+simplerefresh();
+bankui->hide();} {}
+ }
+ decl {Master *master;} {}
+ decl {MicrotonalUI *microtonalui;} {}
+ decl {BankUI *bankui;} {}
+ decl {int ninseff,npart;} {}
+ decl {int nsyseff;} {}
+ decl {int *exitprogram;} {}
+ decl {SysEffSend *syseffsend[NUM_SYS_EFX][NUM_SYS_EFX];} {}
+ decl {VirKeyboard *virkeyboard;} {}
+ decl {ConfigUI *configui;} {}
+ decl {int swapefftype;} {}
+ decl {char masterwindowlabel[100];} {}
+ decl {Panellistitem *panellistitem[NUM_MIDI_PARTS];} {}
+ decl {NioUI nioui;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/MicrotonalUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/MicrotonalUI.fl
new file mode 100644
index 0000000..1f1af95
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/MicrotonalUI.fl
@@ -0,0 +1,270 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0106
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <string.h>} {public
+}
+
+decl {\#include <FL/Fl_File_Chooser.H>} {public
+}
+
+decl {\#include <FL/fl_ask.H>} {public
+}
+
+decl {\#include "../Misc/Microtonal.h"} {public
+}
+
+class MicrotonalUI {} {
+ Function {make_window()} {} {
+ Fl_Window microtonaluiwindow {
+ label Scales
+ xywh {99 164 405 450} type Double hide
+ } {
+ Fl_Group {} {
+ tooltip {Center where the note's freqs. are turned upside-down} xywh {249 2 155 45} box ENGRAVED_FRAME
+ } {
+ Fl_Check_Button {} {
+ label {Invert keys}
+ callback {microtonal->Pinvertupdown=(int) o->value();
+if (microtonal->Pinvertupdown==0) centerinvertcounter->deactivate();
+ else centerinvertcounter->activate();}
+ tooltip {Turn upside-down the note frequencies} xywh {254 13 55 30} down_box DOWN_BOX labelfont 1 labelsize 11 align 148
+ code0 {o->value(microtonal->Pinvertupdown);}
+ }
+ Fl_Counter centerinvertcounter {
+ label Center
+ callback {microtonal->Pinvertupdowncenter=(int) o->value();}
+ xywh {319 13 80 20} labelfont 1 labelsize 11 align 130 minimum 0 maximum 127 step 1 textfont 1
+ code0 {o->lstep(microtonal->getoctavesize());}
+ code1 {o->value(microtonal->Pinvertupdowncenter);}
+ code2 {if (microtonal->Pinvertupdown==0) o->deactivate();}
+ }
+ }
+ Fl_Group microtonalgroup {selected
+ xywh {3 49 402 398} box ENGRAVED_FRAME
+ code0 {if (microtonal->Penabled==0) o->deactivate();}
+ } {
+ Fl_Button applybutton {
+ label Retune
+ callback {apply();}
+ tooltip {Retune the synth accorging to the inputs from "Tunnings" and "Keyboard Mappings"} xywh {8 413 107 28} box THIN_UP_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13
+ }
+ Fl_Value_Output octavesizeoutput {
+ label {nts./oct.}
+ callback {o->value(microtonal->getoctavesize());}
+ tooltip {Notes/Octave} xywh {150 423 35 17} labelsize 10 align 5 maximum 500 step 1 value 12 textfont 1
+ code0 {o->value(microtonal->getoctavesize());}
+ }
+ Fl_Input nameinput {
+ label {Name:}
+ callback {snprintf((char *)microtonal->Pname,MICROTONAL_MAX_NAME_LEN,"%s",o->value());}
+ xywh {8 64 285 25} labelfont 1 labelsize 11 align 5
+ code0 {o->insert((char *)microtonal->Pname);}
+ }
+ Fl_Input tuningsinput {
+ label {Tunings:}
+ xywh {8 144 182 264} type Multiline labelfont 1 labelsize 11 align 5 when 2
+ code0 {updateTuningsInput();}
+ }
+ Fl_Input commentinput {
+ label {Comment:}
+ callback {snprintf((char *)microtonal->Pcomment,MICROTONAL_MAX_NAME_LEN,"%s",o->value());}
+ xywh {8 104 391 25} labelfont 1 labelsize 11 align 5
+ code0 {o->insert((char *)microtonal->Pcomment);}
+ }
+ Fl_Counter {} {
+ label Shift
+ callback {microtonal->Pscaleshift=(int) o->value()+64;}
+ xywh {313 69 70 20} type Simple labelsize 11 align 1 minimum -63 maximum 64 step 1 textfont 1
+ code0 {o->value(microtonal->Pscaleshift-64);}
+ }
+ Fl_Button {} {
+ label {Import .SCL file}
+ callback {const char *filename;
+filename=fl_file_chooser("Open:","(*.scl)",NULL,0);
+if (filename==NULL) return;
+int result=microtonal->loadscl(filename);
+if (result==0) {
+ updateTuningsInput();
+ nameinput->cut(0,nameinput->maximum_size());
+ nameinput->insert((char *)microtonal->Pname);
+ nameinput->position(0);
+ commentinput->cut(0,commentinput->maximum_size());
+ commentinput->insert((char *)microtonal->Pname);
+ commentinput->position(0);
+ tuningsinput->position(0);
+ octavesizeoutput->do_callback();
+ } else {
+ fl_alert("Error: Could not load the file.");
+ };}
+ tooltip {Inport Scala .scl file (tunnings)} xywh {243 411 84 15} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ Fl_Group keymappinggroup {
+ label {Keyboard Mapping} open
+ xywh {193 144 206 264} box ENGRAVED_BOX labelfont 1 labelsize 11
+ } {
+ Fl_Input mappinginput {
+ xywh {250 147 146 258} type Multiline labelfont 1 labelsize 11 align 5 when 2
+ code0 {updateMappingInput();}
+ }
+ Fl_Counter firstnotecounter {
+ label {First note}
+ callback {microtonal->Pfirstkey=(int) o->value();}
+ tooltip {First MIDI note number} xywh {199 195 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 textfont 1 textsize 11
+ code0 {o->value(microtonal->Pfirstkey);}
+ }
+ Fl_Counter lastnotecounter {
+ label {Last note}
+ callback {microtonal->Plastkey=(int) o->value();}
+ tooltip {Last MIDI note number} xywh {199 225 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 value 127 textfont 1 textsize 11
+ code0 {o->value(microtonal->Plastkey);}
+ }
+ Fl_Counter middlenotecounter {
+ label {Midle note}
+ callback {microtonal->Pmiddlenote=(int) o->value();}
+ tooltip {Midle note (where scale degree 0 is mapped to)} xywh {199 267 42 18} type Simple labelsize 10 align 5 minimum 0 maximum 127 step 1 value 60 textfont 1 textsize 11
+ code0 {o->value(microtonal->Pmiddlenote);}
+ }
+ Fl_Value_Output mapsizeoutput {
+ label {Map Size}
+ callback {o->value(microtonal->Pmapsize);}
+ xywh {201 382 44 20} labelsize 10 align 5 maximum 500 step 1 value 12 textfont 1
+ code0 {o->value(microtonal->Pmapsize);}
+ }
+ }
+ Fl_Check_Button mappingenabledbutton {
+ label ON
+ callback {int x=(int) o->value();
+microtonal->Pmappingenabled=x;
+if (x==0) keymappinggroup->deactivate();
+ else keymappinggroup->activate();
+o->show();}
+ tooltip {Enable the Mapping (otherwise the mapping is linear)} xywh {198 150 48 21} box FLAT_BOX down_box DOWN_BOX labelfont 1
+ code0 {o->value(microtonal->Pmappingenabled);}
+ code1 {if (microtonal->Pmappingenabled==0) keymappinggroup->deactivate();}
+ }
+ Fl_Button {} {
+ label {Import .kbm file}
+ callback {const char *filename;
+filename=fl_file_chooser("Open:","(*.kbm)",NULL,0);
+if (filename==NULL) return;
+int result=microtonal->loadkbm(filename);
+if (result==0) {
+ updateMappingInput();
+ mappinginput->position(0);
+ mapsizeoutput->do_callback();
+ firstnotecounter->value(microtonal->Pfirstkey);
+ lastnotecounter->value(microtonal->Plastkey);
+ middlenotecounter->value(microtonal->Pmiddlenote);
+ mapsizeoutput->do_callback();
+ mappingenabledbutton->value(microtonal->Pmappingenabled);
+ mappingenabledbutton->do_callback();
+ afreqinput->value(microtonal->PAfreq);
+ anotecounter->value(microtonal->PAnote);
+ anotecounter->do_callback();
+ } else {
+ fl_alert("Error: Could not load the file.");
+ };}
+ tooltip {Inport Scala .kbm file (keyboard mapping)} xywh {243 428 84 16} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ }
+ Fl_Group {} {
+ xywh {108 2 140 45} box ENGRAVED_FRAME
+ } {
+ Fl_Counter anotecounter {
+ label {"A" Note}
+ callback {microtonal->PAnote=(int) o->value();
+if (microtonal->getnotefreq(microtonal->PAnote,0)<0.0) o->textcolor(FL_RED);
+ else o->textcolor(FL_BLACK);
+
+o->redraw();}
+ tooltip {The "A" note (the reference note for which freq. ("A" freq) is given)} xywh {173 17 65 20} labelfont 1 labelsize 10 align 129 minimum 0 maximum 127 step 1 value 69 textfont 1 textsize 10
+ code0 {o->lstep(12);}
+ code1 {o->value(microtonal->PAnote);}
+ }
+ Fl_Value_Input afreqinput {
+ label {"A" Freq.}
+ callback {microtonal->PAfreq=o->value();}
+ tooltip {The freq. of "A" note (default=440.0)} xywh {118 17 45 20} labelfont 1 labelsize 10 align 1 minimum 1 maximum 20000 step 0.001 value 440 textfont 1 textsize 10
+ code0 {o->value(microtonal->PAfreq);}
+ }
+ }
+ Fl_Button {} {
+ label Close
+ callback {microtonaluiwindow->hide();}
+ xywh {333 413 67 28} box THIN_UP_BOX
+ }
+ Fl_Check_Button {} {
+ label {Enable Microtonal}
+ callback {microtonal->Penabled=(int) o->value();
+if (microtonal->Penabled==0) microtonalgroup->deactivate();
+ else microtonalgroup->activate();}
+ xywh {3 3 102 45} box UP_BOX down_box DOWN_BOX labelfont 1 labelsize 11 align 148
+ code0 {o->value(microtonal->Penabled);}
+ }
+ }
+ }
+ Function {updateTuningsInput()} {} {
+ code {char *tmpbuf=new char[100];
+
+tuningsinput->cut(0,tuningsinput->maximum_size());
+
+for (int i=0;i<microtonal->getoctavesize();i++){
+ if (i!=0) tuningsinput->insert("\\n");
+ microtonal->tuningtoline(i,tmpbuf,100);
+ tuningsinput->insert(tmpbuf);
+};
+
+delete []tmpbuf;} {}
+ }
+ Function {updateMappingInput()} {} {
+ code {char *tmpbuf=new char[100];
+
+mappinginput->cut(0,tuningsinput->maximum_size());
+
+for (int i=0;i<microtonal->Pmapsize;i++){
+ if (i!=0) mappinginput->insert("\\n");
+ if ((microtonal->Pmapping[i])==-1)
+ snprintf(tmpbuf,100,"x");
+ else snprintf(tmpbuf,100,"%d",microtonal->Pmapping[i]);
+ mappinginput->insert(tmpbuf);
+};
+
+delete []tmpbuf;} {}
+ }
+ Function {MicrotonalUI(Microtonal *microtonal_)} {} {
+ code {microtonal=microtonal_;
+
+make_window();} {}
+ }
+ Function {~MicrotonalUI()} {} {
+ code {microtonaluiwindow->hide();
+delete(microtonaluiwindow);} {}
+ }
+ Function {show()} {} {
+ code {microtonaluiwindow->show();} {}
+ }
+ Function {apply()} {} {
+ code {int err=microtonal->texttotunings(tuningsinput->value());
+if (err>=0) fl_alert("Parse Error: The input may contain only numbers (like 232.59)\\n or divisions (like 121/64).");
+if (err==-2) fl_alert("Parse Error: The input is empty.");
+octavesizeoutput->do_callback();
+
+microtonal->texttomapping(mappinginput->value());
+mapsizeoutput->do_callback();
+anotecounter->do_callback();
+
+//applybutton->color(FL_GRAY);} {}
+ }
+ decl {Microtonal *microtonal;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.C b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.C
new file mode 100644
index 0000000..7b7e6fc
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.C
@@ -0,0 +1,163 @@
+
+/*******************************************************************************/
+/* Copyright (C) 2012 Jonathan Moore Liles */
+/* */
+/* 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; see the file COPYING. If not,write to the Free Software */
+/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+/*******************************************************************************/
+
+
+#include "NSM.H"
+
+#include "../Nio/Nio.h"
+
+#include "MasterUI.h"
+#include <FL/Fl.H>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+extern int Pexitprogram;
+extern MasterUI *ui;
+
+extern NSM_Client *nsm;
+extern char *instance_name;
+
+NSM_Client::NSM_Client()
+{
+ project_filename = 0;
+ display_name = 0;
+}
+
+int command_open(const char *name,
+ const char *display_name,
+ const char *client_id,
+ char **out_msg);
+int command_save(char **out_msg);
+
+int
+NSM_Client::command_save(char **out_msg)
+{
+ (void) out_msg;
+ int r = ERR_OK;
+
+ ui->do_save_master(project_filename);
+
+ return r;
+}
+
+int
+NSM_Client::command_open(const char *name,
+ const char *display_name,
+ const char *client_id,
+ char **out_msg)
+{
+ Nio::stop();
+
+ if(instance_name)
+ free(instance_name);
+
+ instance_name = strdup(client_id);
+
+ Nio::start();
+
+ char *new_filename;
+
+ asprintf(&new_filename, "%s.xmz", name);
+
+ struct stat st;
+
+ int r = ERR_OK;
+
+ if(0 == stat(new_filename, &st)) {
+ if(ui->do_load_master_unconditional(new_filename, display_name) < 0) {
+ *out_msg = strdup("Failed to load for unknown reason");
+ r = ERR_GENERAL;
+
+ return r;
+ }
+ }
+ else
+ ui->do_new_master_unconditional();
+
+ if(project_filename)
+ free(project_filename);
+
+ if(this->display_name)
+ free(this->display_name);
+
+ project_filename = new_filename;
+
+ this->display_name = strdup(display_name);
+
+ return r;
+}
+
+static void save_callback(Fl_Widget *, void *v)
+{
+ MasterUI *ui = static_cast<MasterUI*>(v);
+ ui->do_save_master();
+}
+
+void
+NSM_Client::command_active(bool active)
+{
+ if(active) {
+ Fl_Menu_Item *m;
+ //TODO see if there is a cleaner way of doing this without voiding
+ //constness
+ if((m=const_cast<Fl_Menu_Item *>(ui->mastermenu->find_item(
+ "&File/&Open Parameters..."))))
+ m->label("&Import Parameters...");
+ if((m=const_cast<Fl_Menu_Item *>(ui->simplemastermenu->find_item(
+ "&File/&Open Parameters..."))))
+ m->label("&Import Parameters...");
+
+ //TODO get this menu entry inserted at the right point
+ if((m=const_cast<Fl_Menu_Item *>(ui->mastermenu->find_item("&File/&Export Parameters..."))))
+ m->show();
+ else
+ ui->mastermenu->add("&File/&Export Parameters...",0,save_callback,ui);
+
+ if((m=const_cast<Fl_Menu_Item *>(ui->simplemastermenu->find_item("&File/&Export Parameters..."))))
+ m->show();
+ else
+ ui->simplemastermenu->add("&File/&Export Parameters...",0,save_callback,ui);
+
+ ui->sm_indicator1->value(1);
+ ui->sm_indicator2->value(1);
+ ui->sm_indicator1->tooltip(session_manager_name());
+ ui->sm_indicator2->tooltip(session_manager_name());
+ }
+ else {
+ Fl_Menu_Item *m;
+ if((m=const_cast<Fl_Menu_Item *>(ui->mastermenu->find_item(
+ "&File/&Import Parameters..."))))
+ m->label("&Open Parameters...");
+ if((m=const_cast<Fl_Menu_Item *>(ui->simplemastermenu->find_item(
+ "&File/&Open Parameters..."))))
+ m->label("&Open Parameters...");
+
+ if((m=const_cast<Fl_Menu_Item *>(ui->mastermenu->find_item("&File/&Export Parameters..."))))
+ m->hide();
+ if((m=const_cast<Fl_Menu_Item *>(ui->simplemastermenu->find_item("&File/&Export Parameters..."))))
+ m->hide();
+
+ ui->sm_indicator1->value(0);
+ ui->sm_indicator2->value(0);
+ ui->sm_indicator1->tooltip(NULL);
+ ui->sm_indicator2->tooltip(NULL);
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.H b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.H
new file mode 100644
index 0000000..1c70de9
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM.H
@@ -0,0 +1,45 @@
+
+/*******************************************************************************/
+/* Copyright (C) 2012 Jonathan Moore Liles */
+/* */
+/* 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; see the file COPYING. If not,write to the Free Software */
+/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+/*******************************************************************************/
+
+#pragma once
+
+#if USE_NSM
+#include "NSM/Client.H"
+
+class NSM_Client:public NSM::Client
+{
+ public:
+
+ char *project_filename;
+ char *display_name;
+
+ NSM_Client();
+ ~NSM_Client() { }
+
+ protected:
+
+ int command_open(const char *name,
+ const char *display_name,
+ const char *client_id,
+ char **out_msg);
+ int command_save(char **out_msg);
+
+ void command_active(bool active);
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.C b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.C
new file mode 100644
index 0000000..83141e2
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.C
@@ -0,0 +1,403 @@
+
+/*******************************************************************************/
+/* Copyright (C) 2012 Jonathan Moore Liles */
+/* */
+/* 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; see the file COPYING. If not,write to the Free Software */
+/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+/*******************************************************************************/
+
+#include "Client.H"
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+
+namespace NSM
+{
+/************************/
+/* OSC Message Handlers */
+/************************/
+
+#undef OSC_REPLY
+#undef OSC_REPLY_ERR
+
+#define OSC_REPLY(value) lo_send_from(((NSM::Client *)user_data)->nsm_addr, \
+ ((NSM::Client *)user_data)->_server, \
+ LO_TT_IMMEDIATE, \
+ "/reply", \
+ "ss", \
+ path, \
+ value)
+
+#define OSC_REPLY_ERR(errcode, value) lo_send_from( \
+ ((NSM::Client *)user_data)->nsm_addr, \
+ ((NSM::Client *)user_data)->_server, \
+ LO_TT_IMMEDIATE, \
+ "/error", \
+ "sis", \
+ path, \
+ errcode, \
+ value)
+
+ Client::Client()
+ {
+ nsm_addr = 0;
+ nsm_client_id = 0;
+ _session_manager_name = 0;
+ nsm_is_active = false;
+ _server = 0;
+ _st = 0;
+ }
+
+ Client::~Client()
+ {
+ if(_st)
+ stop();
+
+ if(_st)
+ lo_server_thread_free(_st);
+ else
+ lo_server_free(_server);
+ }
+
+ void
+ Client::announce(const char *application_name,
+ const char *capabilities,
+ const char *process_name)
+ {
+ // MESSAGE( "Announcing to NSM" );
+
+ lo_address to = lo_address_new_from_url(nsm_url);
+
+ if(!to)
+ // MESSAGE( "Bad address" );
+ return;
+
+ int pid = (int)getpid();
+
+ lo_send_from(to,
+ _server,
+ LO_TT_IMMEDIATE,
+ "/nsm/server/announce",
+ "sssiii",
+ application_name,
+ capabilities,
+ process_name,
+ 1,
+ /* api_major_version */
+ 0,
+ /* api_minor_version */
+ pid);
+
+ lo_address_free(to);
+ }
+
+ void
+ Client::progress(float p)
+ {
+ if(nsm_is_active)
+ lo_send_from(nsm_addr,
+ _server,
+ LO_TT_IMMEDIATE,
+ "/nsm/client/progress",
+ "f",
+ p);
+ }
+
+ void
+ Client::is_dirty(void)
+ {
+ if(nsm_is_active)
+ lo_send_from(nsm_addr,
+ _server,
+ LO_TT_IMMEDIATE,
+ "/nsm/client/is_dirty",
+ "");
+ }
+
+ void
+ Client::is_clean(void)
+ {
+ if(nsm_is_active)
+ lo_send_from(nsm_addr,
+ _server,
+ LO_TT_IMMEDIATE,
+ "/nsm/client/is_clean",
+ "");
+ }
+
+ void
+ Client::message(int priority, const char *msg)
+ {
+ if(nsm_is_active)
+ lo_send_from(nsm_addr,
+ _server,
+ LO_TT_IMMEDIATE,
+ "/nsm/client/message",
+ "is",
+ priority,
+ msg);
+ }
+
+
+ void
+ Client::broadcast(lo_message msg)
+ {
+ if(nsm_is_active)
+ lo_send_message_from(nsm_addr,
+ _server,
+ "/nsm/server/broadcast",
+ msg);
+ }
+
+ void
+ Client::check(int timeout)
+ {
+ if(lo_server_wait(_server, timeout))
+ while(lo_server_recv_noblock(_server, 0)) {}
+ }
+
+ void
+ Client::start()
+ {
+ lo_server_thread_start(_st);
+ }
+
+ void
+ Client::stop()
+ {
+ lo_server_thread_stop(_st);
+ }
+
+ int
+ Client::init(const char *nsm_url)
+ {
+ this->nsm_url = nsm_url;
+
+ lo_address addr = lo_address_new_from_url(nsm_url);
+ int proto = lo_address_get_protocol(addr);
+ lo_address_free(addr);
+
+ _server = lo_server_new_with_proto(NULL, proto, NULL);
+
+ if(!_server)
+ return -1;
+
+ lo_server_add_method(_server, "/error", "sis", &Client::osc_error, this);
+ lo_server_add_method(_server,
+ "/reply",
+ "ssss",
+ &Client::osc_announce_reply,
+ this);
+ lo_server_add_method(_server,
+ "/nsm/client/open",
+ "sss",
+ &Client::osc_open,
+ this);
+ lo_server_add_method(_server,
+ "/nsm/client/save",
+ "",
+ &Client::osc_save,
+ this);
+ lo_server_add_method(_server,
+ "/nsm/client/session_is_loaded",
+ "",
+ &Client::osc_session_is_loaded,
+ this);
+ lo_server_add_method(_server, NULL, NULL, &Client::osc_broadcast, this);
+
+ return 0;
+ }
+
+ int
+ Client::init_thread(const char *nsm_url)
+ {
+ this->nsm_url = nsm_url;
+
+ lo_address addr = lo_address_new_from_url(nsm_url);
+ int proto = lo_address_get_protocol(addr);
+ lo_address_free(addr);
+
+ _st = lo_server_thread_new_with_proto(NULL, proto, NULL);
+ _server = lo_server_thread_get_server(_st);
+
+ if(!_server || !_st)
+ return -1;
+
+ lo_server_thread_add_method(_st,
+ "/error",
+ "sis",
+ &Client::osc_error,
+ this);
+ lo_server_thread_add_method(_st,
+ "/reply",
+ "ssss",
+ &Client::osc_announce_reply,
+ this);
+ lo_server_thread_add_method(_st,
+ "/nsm/client/open",
+ "sss",
+ &Client::osc_open,
+ this);
+ lo_server_thread_add_method(_st,
+ "/nsm/client/save",
+ "",
+ &Client::osc_save,
+ this);
+ lo_server_thread_add_method(_st,
+ "/nsm/client/session_is_loaded",
+ "",
+ &Client::osc_session_is_loaded,
+ this);
+ lo_server_thread_add_method(_st,
+ NULL,
+ NULL,
+ &Client::osc_broadcast,
+ this);
+
+ return 0;
+ }
+
+/************************/
+/* OSC Message Handlers */
+/************************/
+
+ int
+ Client::osc_broadcast(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data)
+ {
+ return ((NSM::Client *)user_data)->command_broadcast(path, msg);
+ }
+
+ int
+ Client::osc_save(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data)
+ {
+ char *out_msg = NULL;
+
+ int r = ((NSM::Client *)user_data)->command_save(&out_msg);
+
+ if(r)
+ OSC_REPLY_ERR(r, (out_msg ? out_msg : ""));
+ else
+ OSC_REPLY("OK");
+
+ if(out_msg)
+ free(out_msg);
+
+ return 0;
+ }
+
+ int
+ Client::osc_open(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data)
+ {
+ char *out_msg = NULL;
+
+ NSM::Client *nsm = (NSM::Client *)user_data;
+
+ nsm->nsm_client_id = strdup(&argv[2]->s);
+
+ int r = ((NSM::Client *)user_data)->command_open(&argv[0]->s,
+ &argv[1]->s,
+ &argv[2]->s,
+ &out_msg);
+
+ if(r)
+ OSC_REPLY_ERR(r, (out_msg ? out_msg : ""));
+ else
+ OSC_REPLY("OK");
+
+ if(out_msg)
+ free(out_msg);
+
+ return 0;
+ }
+
+ int
+ Client::osc_session_is_loaded(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data)
+ {
+ NSM::Client *nsm = (NSM::Client *)user_data;
+
+ nsm->command_session_is_loaded();
+
+ return 0;
+ }
+
+ int
+ Client::osc_error(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data)
+ {
+ if(strcmp(&argv[0]->s, "/nsm/server/announce"))
+ return -1;
+
+ NSM::Client *nsm = (NSM::Client *)user_data;
+
+
+// WARNING( "Failed to register with NSM: %s", &argv[2]->s );
+ nsm->nsm_is_active = false;
+
+ nsm->command_active(nsm->nsm_is_active);
+
+ return 0;
+ }
+
+ int
+ Client::osc_announce_reply(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data)
+ {
+ if(strcmp(&argv[0]->s, "/nsm/server/announce"))
+ return -1;
+
+ NSM::Client *nsm = (NSM::Client *)user_data;
+
+// MESSAGE( "Successfully registered. NSM says: %s", &argv[1]->s );
+ nsm->nsm_is_active = true;
+ nsm->_session_manager_name = strdup(&argv[2]->s);
+ nsm->nsm_addr =
+ lo_address_new_from_url(lo_address_get_url(lo_message_get_source(
+ msg)));
+
+ nsm->command_active(nsm->nsm_is_active);
+
+ return 0;
+ }
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.H b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.H
new file mode 100644
index 0000000..e515c71
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NSM/Client.H
@@ -0,0 +1,143 @@
+
+/*******************************************************************************/
+/* Copyright (C) 2012 Jonathan Moore Liles */
+/* */
+/* 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; see the file COPYING. If not,write to the Free Software */
+/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+/*******************************************************************************/
+
+#pragma once
+
+#include <lo/lo.h>
+
+namespace NSM
+{
+ class Client
+ {
+ private:
+
+ const char *nsm_url;
+
+ lo_server _server;
+ lo_server_thread _st;
+ lo_address nsm_addr;
+
+ bool nsm_is_active;
+ char *nsm_client_id;
+ char *_session_manager_name;
+
+ public:
+
+ enum {
+ ERR_OK = 0,
+ ERR_GENERAL = -1,
+ ERR_INCOMPATIBLE_API = -2,
+ ERR_BLACKLISTED = -3,
+ ERR_LAUNCH_FAILED = -4,
+ ERR_NO_SUCH_FILE = -5,
+ ERR_NO_SESSION_OPEN = -6,
+ ERR_UNSAVED_CHANGES = -7,
+ ERR_NOT_NOW = -8
+ };
+
+ Client();
+ virtual ~Client();
+
+ bool is_active(void) { return nsm_is_active; }
+
+ const char *session_manager_name(void) {
+ return
+ _session_manager_name;
+ }
+
+ /* Client->Server methods */
+ void is_dirty(void);
+ void is_clean(void);
+ void progress(float f);
+ void message(int priority, const char *msg);
+ void announce(const char *appliction_name,
+ const char *capabilities,
+ const char *process_name);
+
+ void broadcast(lo_message msg);
+
+ /* init without threading */
+ int init(const char *nsm_url);
+ /* init with threading */
+ int init_thread(const char *nsm_url);
+
+ /* call this periodically to check for new messages */
+ void check(int timeout = 0);
+
+ /* or call these to start and stop a thread (must do your own locking in handler!) */
+ void start(void);
+ void stop(void);
+
+ protected:
+
+ /* Server->Client methods */
+ virtual int command_open(const char *name,
+ const char *display_name,
+ const char *client_id,
+ char **out_msg) = 0;
+ virtual int command_save(char **out_msg) = 0;
+
+ virtual void command_active(bool) { }
+
+ virtual void command_session_is_loaded(void) { }
+
+ /* invoked when an unrecognized message is received. Should return 0 if you handled it, -1 otherwise. */
+ virtual int command_broadcast(const char *, lo_message) { return -1; }
+
+ private:
+
+ /* osc handlers */
+ static int osc_open(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data);
+ static int osc_save(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data);
+ static int osc_announce_reply(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data);
+ static int osc_error(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data);
+ static int osc_session_is_loaded(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data);
+ static int osc_broadcast(const char *path,
+ const char *types,
+ lo_arg **argv,
+ int argc,
+ lo_message msg,
+ void *user_data);
+ };
+};
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.cpp
new file mode 100644
index 0000000..8e253b3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.cpp
@@ -0,0 +1,76 @@
+#include "NioUI.h"
+#include "../Nio/Nio.h"
+#include <cstdio>
+#include <iostream>
+#include <cstring>
+#include <FL/Fl_Pack.H>
+#include <FL/Fl_Spinner.H>
+#include <FL/Enumerations.H>
+#include <FL/Fl_Choice.H>
+#include <FL/Fl_Tabs.H>
+#include <FL/Fl_Group.H>
+#include <FL/Fl_Text_Display.H>
+
+using namespace std;
+
+NioUI::NioUI()
+ :Fl_Window(200, 100, 400, 400, "New IO Controls")
+{
+ //hm, I appear to be leaking memory
+ Fl_Group *settings = new Fl_Group(0, 20, 400, 400 - 35, "Settings");
+ {
+ audio = new Fl_Choice(60, 80, 100, 25, "Audio");
+ audio->callback(audioCallback);
+ midi = new Fl_Choice(60, 100, 100, 25, "Midi");
+ midi->callback(midiCallback);
+ }
+ settings->end();
+
+ //initialize midi list
+ {
+ set<string> midiList = Nio::getSources();
+ string source = Nio::getSource();
+ int midival = 0;
+ for(set<string>::iterator itr = midiList.begin();
+ itr != midiList.end(); ++itr) {
+ midi->add(itr->c_str());
+ if(*itr == source)
+ midival = midi->size() - 2;
+ }
+ midi->value(midival);
+ }
+
+ //initialize audio list
+ {
+ set<string> audioList = Nio::getSinks();
+ string sink = Nio::getSink();
+ int audioval = 0;
+ for(set<string>::iterator itr = audioList.begin();
+ itr != audioList.end(); ++itr) {
+ audio->add(itr->c_str());
+ if(*itr == sink)
+ audioval = audio->size() - 2;
+ }
+ audio->value(audioval);
+ }
+ resizable(this);
+ size_range(400, 300);
+}
+
+NioUI::~NioUI()
+{}
+
+void NioUI::refresh()
+{}
+
+void NioUI::midiCallback(Fl_Widget *c)
+{
+ bool good = Nio::setSource(static_cast<Fl_Choice *>(c)->text());
+ static_cast<Fl_Choice *>(c)->textcolor(fl_rgb_color(255 * !good, 0, 0));
+}
+
+void NioUI::audioCallback(Fl_Widget *c)
+{
+ bool good = Nio::setSink(static_cast<Fl_Choice *>(c)->text());
+ static_cast<Fl_Choice *>(c)->textcolor(fl_rgb_color(255 * !good, 0, 0));
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.h b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.h
new file mode 100644
index 0000000..242a49b
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/NioUI.h
@@ -0,0 +1,20 @@
+#ifndef NIOUI_H
+#define NIOUI_H
+
+#include <FL/Fl.H>
+#include <FL/Fl_Window.H>
+
+class NioUI:public Fl_Window
+{
+ public:
+ NioUI();
+ ~NioUI();
+ void refresh();
+ private:
+ class Fl_Choice * midi;
+ class Fl_Choice * audio;
+ static void midiCallback(Fl_Widget *c);
+ static void audioCallback(Fl_Widget *c);
+};
+
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl
new file mode 100644
index 0000000..54329db
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/OscilGenUI.fl
@@ -0,0 +1,1148 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include "../Synth/OscilGen.h"} {public
+}
+
+decl {\#include "../Misc/Util.h"} {public
+}
+
+decl {\#include "../Misc/Master.h"} {public
+}
+
+decl {\#include "ResonanceUI.h"} {public
+}
+
+decl {\#include <FL/Fl_Box.H>} {public
+}
+
+decl {\#include <FL/Fl_Group.H>} {public
+}
+
+decl {\#include <FL/Fl_Slider.H>} {public
+}
+
+decl {\#include <math.h>} {}
+
+decl {\#include <stdio.h>} {}
+
+decl {\#include <stdlib.h>} {}
+
+decl {\#include <string.h>} {}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "EnvelopeUI.h"} {public
+}
+
+decl {\#include "LFOUI.h"} {public
+}
+
+decl {\#include "FilterUI.h"} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+decl {\#include <FL/fl_draw.H>} {public
+}
+
+class OscilSpectrum {: {public Fl_Box}
+} {
+ Function {OscilSpectrum(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {oscil=NULL;} {}
+ }
+ Function {init(OscilGen *oscil_,int oscbase_,Master *master_)} {} {
+ code {oscil=oscil_;
+oscbase=oscbase_;
+master=master_;} {}
+ }
+ Function {draw()} {} {
+ code {int ox=x(),oy=y(),lx=w(),ly=h(),i;
+const int maxdb=60;//must be multiple of 10
+int GX=2;
+int n=lx/GX-1;
+if (n>synth->oscilsize/2) n=synth->oscilsize/2;
+
+float x;
+float* spc=new float[n];
+for (i=0;i<n;i++) spc[i]=0.0;
+
+pthread_mutex_lock(&master->mutex);
+if (oscbase==0) oscil->getspectrum(n,spc,0);
+ else oscil->getspectrum(n,spc,1);
+pthread_mutex_unlock(&master->mutex);
+
+//normalize
+float max=0;
+for (i=0;i<n;i++){
+ x=fabs(spc[i]);
+ if (max<x) max=x;
+}
+if (max<0.000001) max=1.0;
+max=max*1.05;
+
+//draw
+
+if (this->active_r()) fl_color(this->parent()->selection_color());
+ else fl_color(this->parent()->color());
+fl_line_style(FL_DOT);
+
+for (i=1;i<maxdb/10;i++){
+ int ky=(int)((float)i*ly*10.0/maxdb)/2;
+ ky*=2;
+ fl_line(ox,oy+ky-1,ox+lx-2,oy+ky-1);
+};
+
+for (i=2;i<n;i++){
+ int tmp=i*GX-2;
+ if (i%10==1) fl_line_style(0);
+ else fl_line_style(FL_DOT);
+ fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
+}
+
+if (this->active_r()) fl_color(this->parent()->labelcolor());
+ else fl_color(this->parent()->color());
+fl_line_style(0);
+
+//draws the spectrum
+for (i=0;i<n;i++){
+ int tmp=i*GX+2;
+ x=spc[i]/max;
+
+ if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
+ else x=0;
+
+ int val=(int) ((ly-2)*x);
+ if (val>0) fl_line(ox+tmp,oy+ly-2-val,ox+tmp,oy+ly-2);
+}
+delete [] spc;} {}
+ }
+ decl {OscilGen *oscil;} {}
+ decl {int oscbase;} {}
+ decl {Master *master;} {}
+}
+
+class PSlider {: {public Fl_Slider}
+} {
+ Function {PSlider(int x,int y, int w, int h, const char *label=0):Fl_Slider(x,y,w,h,label)} {} {
+ code {;} {}
+ }
+ Function {handle(int event)} {return_type int
+ } {
+ code {int X=x(),Y=y(),W=w(),H=h();
+
+if ((!Fl::event_buttons())|| (event==0)||(Fl::event_shift()==0)) return(Fl_Slider::handle(event));
+
+if (!Fl::event_inside(X,Y,W,H)) {
+ if (event==FL_DRAG){
+ Fl_Slider::handle(FL_RELEASE);
+ Fl_Slider::handle(FL_LEAVE);
+ deactivate();
+ activate();
+ return(1);
+ }else{
+ return(Fl_Slider::handle(event));
+ };
+} else {
+ //Fl_Slider::handle(FL_FOCUS);
+ Fl_Slider::handle(FL_PUSH);
+};
+
+return(1);} {}
+ }
+}
+
+class Oscilloscope {open : {public Fl_Box}
+} {
+ Function {Oscilloscope(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {open
+ } {
+ code {oscil=NULL;
+phase=64;
+oscbase=0;
+box(FL_FLAT_BOX);} {}
+ }
+ Function {init(OscilGen *oscil_,Master *master_)} {} {
+ code {oscil=oscil_;
+master=master_;} {}
+ }
+ Function {init(OscilGen *oscil_,int oscbase_,Master *master_)} {} {
+ code {oscil=oscil_;
+oscbase=oscbase_;
+master=master_;} {}
+ }
+ Function {init(OscilGen *oscil_,int oscbase_,int phase_,Master *master_)} {} {
+ code {oscil=oscil_;
+oscbase=oscbase_;
+phase=phase_;
+master=master_;} {}
+ }
+ Function {draw()} {open
+ } {
+ code {int ox=x(),oy=y(),lx=w(),ly=h()-1,i;
+float smps[synth->oscilsize];
+pthread_mutex_lock(&master->mutex);
+if (oscbase==0) oscil->get(smps,-1.0);
+ else oscil->getcurrentbasefunction(smps);
+pthread_mutex_unlock(&master->mutex);
+
+if (damage()!=1){
+ fl_color( fl_color_average( FL_BLACK, FL_BACKGROUND_COLOR, 0.5 ));
+ fl_rectf(ox,oy,lx,ly);
+};
+
+//normalize
+float max=0;
+for (i=0;i<synth->oscilsize;i++)
+ if (max<fabs(smps[i])) max=fabs(smps[i]);
+//fprintf(stderr,"%.4f\\n",max);
+if (max<0.00001) max=1.0;
+max=-max*1.05;
+
+//draw
+fl_line_style(FL_DASH);
+if (this->active_r()) fl_color(this->parent()->labelcolor());
+ else fl_color(this->parent()->color());
+int GX=16;if (lx<GX*3) GX=-1;
+for (i=1;i<GX;i++){
+ int tmp=(int)(lx/(float)GX*i);
+ fl_line(ox+tmp,oy+2,ox+tmp,oy+ly-2);
+};
+int GY=8;if (ly<GY*3) GY=-1;
+for (i=1;i<GY;i++){
+ int tmp=(int)(ly/(float)GY*i);
+ fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
+};
+
+//draw the function
+fl_line_style(0,1);
+fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
+if (this->active_r()) fl_color(this->parent()->selection_color());
+ else fl_color(this->parent()->labelcolor());
+
+int lw=2;
+//if ((lx<135)||(ly<135)) lw=1;
+fl_line_style(FL_SOLID,lw);
+fl_begin_line();
+double ph=((phase-64.0)/128.0*synth->oscilsize+synth->oscilsize);
+for (i=1;i<lx;i++){
+ int k2=(synth->oscilsize*i/lx)+ph;
+ double y2=smps[k2%synth->oscilsize]/max;
+ fl_vertex(i+ox,y2*ly/2.0+oy+ly/2);
+};
+fl_end_line();
+
+fl_line_style(FL_SOLID,0);} {}
+ }
+ decl {OscilGen *oscil;} {}
+ decl {int oscbase;} {}
+ decl {int phase;} {public
+ }
+ decl {Master *master;} {}
+}
+
+class Oscilharmonic {: {public Fl_Group}
+} {
+ Function {make_window()} {open private
+ } {
+ Fl_Window harmonic {open
+ private xywh {338 259 100 225} type Double box FLAT_BOX
+ class Fl_Group visible
+ } {
+ Fl_Slider mag {
+ callback {int x=64;
+if (Fl::event_button3()) o->value(x);
+ else x=127-(int)o->value();
+if (x==64) o->selection_color(0);
+ else o->selection_color(222);
+
+pthread_mutex_lock(&master->mutex);
+ oscil->Phmag[n]=x;
+ if (x==64) {
+ oscil->Phphase[n]=64;
+ phase->value(64);
+ };
+ oscil->prepare();
+pthread_mutex_unlock(&master->mutex);
+
+display->redraw();
+oldosc->redraw();
+if (cbwidget!=NULL) {
+ cbwidget->do_callback();
+ applybutton->color(FL_RED);
+ applybutton->redraw();
+};}
+ xywh {0 15 15 115} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64
+ code0 {o->value(127-oscil->Phmag[n]);}
+ code1 {if (oscil->Phmag[n]==64) o->selection_color(0);}
+ class PSlider
+ }
+ Fl_Slider phase {
+ callback {int x=64;
+if (Fl::event_button3()) o->value(x);
+ else x=(int)o->value();
+
+pthread_mutex_lock(&master->mutex);
+ oscil->Phphase[n]=x;
+ oscil->prepare();
+pthread_mutex_unlock(&master->mutex);
+
+display->redraw();
+oldosc->redraw();
+if (cbwidget!=NULL) {
+ cbwidget->do_callback();
+ applybutton->color(FL_RED);
+ applybutton->redraw();
+};}
+ xywh {0 135 15 75} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64
+ code0 {o->value(oscil->Phphase[n]);}
+ class PSlider
+ }
+ Fl_Box {} {
+ xywh {15 70 5 5} box FLAT_BOX color 45
+ }
+ Fl_Box {} {
+ xywh {15 170 5 5} box FLAT_BOX color 45
+ }
+ Fl_Box {} {
+ label 01
+ xywh {0 210 20 15} labelfont 1 labelsize 9 align 20
+ code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
+ }
+ Fl_Box {} {
+ label 01
+ xywh {0 0 20 15} labelfont 1 labelsize 9 align 20
+ code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
+ }
+ }
+ }
+ Function {Oscilharmonic(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {n=0;
+oscil=NULL;
+display=NULL;
+applybutton=NULL;
+cbwidget=NULL;} {}
+ }
+ Function {init(OscilGen *oscil_,int n_,Fl_Group *display_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *applybutton_, Master *master_)} {} {
+ code {oscil=oscil_;
+n=n_;
+display=display_;
+master=master_;
+oldosc=oldosc_;
+cbwidget=cbwidget_;
+applybutton=applybutton_;
+make_window();
+end();
+harmonic->show();} {}
+ }
+ Function {refresh()} {} {
+ code {mag->value(127-oscil->Phmag[n]);
+phase->value(oscil->Phphase[n]);
+
+if (oscil->Phmag[n]==64) mag->selection_color(0);
+ else mag->selection_color(222);} {}
+ }
+ Function {~Oscilharmonic()} {} {
+ code {harmonic->hide();
+//delete(harmonic);} {}
+ }
+ decl {OscilGen *oscil;} {}
+ decl {Fl_Group *display;} {}
+ decl {int n;} {}
+ decl {Fl_Widget *oldosc,*cbwidget,*applybutton;} {}
+ decl {Master *master;} {}
+}
+
+class OscilEditor {open : {public PresetsUI_}
+} {
+ Function {make_window()} {open
+ } {
+ Fl_Window osceditUI {
+ label {ADsynth Oscillator Editor} open
+ xywh {542 193 735 595} type Double
+ code0 {if (oscil->ADvsPAD) o->label("PADsynth Harmonic Content Editor");} visible
+ } {
+ Fl_Button applybutton {
+ label Apply
+ callback {applybutton->color(FL_GRAY);
+applybutton->redraw();
+if (cbapplywidget!=NULL) {
+ cbapplywidget->do_callback();
+ cbapplywidget->color(FL_GRAY);
+ cbapplywidget->redraw();
+};}
+ xywh {300 280 60 20} box THIN_UP_BOX labelfont 1
+ code0 {if (!oscil->ADvsPAD) o->hide();}
+ }
+ Fl_Group oscildisplaygroup {
+ xywh {5 5 360 300} box UP_FRAME
+ } {
+ Fl_Group {} {open
+ xywh {10 85 350 190} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
+ code0 {Oscilloscope *osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {osc->init(oscil,master);}
+ } {}
+ Fl_Box {} {
+ label Oscillator
+ xywh {120 10 110 20} labelfont 1
+ }
+ Fl_Value_Slider rndslider {
+ label rnd
+ callback {oscil->Prand=(int)o->value()+64;
+oscildisplaygroup->redraw();
+oldosc->redraw();}
+ tooltip {Oscilator Phase Randomness: smaller than 0 is "group", larger than 0 is for each harmonic} xywh {140 285 100 10} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum -64 maximum 63 step 1
+ code0 {if (oscil->ADvsPAD) o->hide();}
+ }
+ Fl_Group {} {open
+ xywh {10 30 350 50} box THIN_DOWN_BOX color 32 selection_color 218 labelcolor 63
+ code0 {OscilSpectrum *spc=new OscilSpectrum(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {spc->init(oscil,0,master);}
+ } {}
+ Fl_Group {} {
+ xywh {246 277 115 25} box UP_FRAME
+ code0 {if (oscil->ADvsPAD) o->hide();}
+ } {
+ Fl_Choice hrndtype {
+ label {H.rnd}
+ callback {oscil->Pamprandtype=(int) o->value();}
+ tooltip {Harmonic Amplitude Randomness} xywh {281 282 50 15} down_box BORDER_BOX labelsize 10 textsize 10
+ } {
+ MenuItem {} {
+ label None
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sin
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial hrnddial {
+ callback {oscil->Pamprandpower=(int) o->value();}
+ tooltip {Oscillator's spectrum adjust parameter} xywh {338 280 18 18} maximum 127 step 1
+ class WidgetPDial
+ }
+ }
+ }
+ Fl_Group basefuncdisplaygroup {open selected
+ xywh {365 5 360 300} box UP_FRAME
+ } {
+ Fl_Group {} {
+ xywh {370 85 350 190} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179
+ code0 {Oscilloscope *osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {osc->init(oscil,1,master);}
+ } {}
+ Fl_Dial bfslider {
+ callback {oscil->Pbasefuncpar=(int)o->value()+64;
+basefuncdisplaygroup->redraw();
+bfparval->value(oscil->Pbasefuncpar-64);
+
+redrawoscil();}
+ tooltip {Base Function Parameter} xywh {520 280 20 20} minimum -64 maximum 63 step 1
+ class WidgetPDial
+ }
+ Fl_Choice bftype {
+ label {Base.F..}
+ callback {oscil->Pcurrentbasefunc=(int) o->value();
+
+basefuncdisplaygroup->redraw();
+redrawoscil();
+
+if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodulation->deactivate();
+ else basefuncmodulation->activate();}
+ xywh {370 285 90 15} down_box BORDER_BOX labelsize 10 align 5 textsize 11
+ } {
+ MenuItem {} {
+ label Sine
+ xywh {10 10 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Triangle
+ xywh {20 20 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Pulse
+ xywh {30 30 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Saw
+ xywh {40 40 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Power
+ xywh {50 50 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Gauss
+ xywh {50 50 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Diode
+ xywh {60 60 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label AbsSine
+ xywh {70 70 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label PulseSine
+ xywh {80 80 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label StrchSine
+ xywh {90 90 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Chirp
+ xywh {100 100 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label AbsStrSine
+ xywh {102 102 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Chebyshev
+ xywh {112 112 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Sqr
+ xywh {122 122 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Spike
+ xywh {122 122 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Circle
+ xywh {122 122 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Box {} {
+ label {Base Func.}
+ xywh {480 10 110 20} labelfont 1
+ }
+ Fl_Group {} {open
+ xywh {370 30 350 50} box THIN_DOWN_BOX color 32 selection_color 218 labelcolor 63
+ code0 {OscilSpectrum *spc=new OscilSpectrum (o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {spc->init(oscil,1,master);}
+ } {}
+ Fl_Value_Output bfparval {
+ label {Par.}
+ xywh {490 285 25 15} labelsize 12 minimum -63 maximum 63 step 1
+ }
+ Fl_Group basefuncmodulation {
+ xywh {550 276 169 25} box UP_FRAME
+ code0 {if ((oscil->Pcurrentbasefunc==0)||(oscil->Pcurrentbasefunc==127)) basefuncmodulation->deactivate();}
+ } {
+ Fl_Choice bfmodtype {
+ label {B.F.Mod.}
+ callback {oscil->Pbasefuncmodulation=(int) o->value();
+basefuncdisplaygroup->redraw();
+redrawoscil();}
+ tooltip {Base function modulation} xywh {601 281 50 15} down_box BORDER_BOX labelsize 10 textsize 10
+ } {
+ MenuItem {} {
+ label None
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Rev
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sine
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial bfmodpar1 {
+ callback {oscil->Pbasefuncmodulationpar1=(int)o->value();
+basefuncdisplaygroup->redraw();
+redrawoscil();}
+ tooltip {Oscillator's modulation parameter 1} xywh {659 281 15 15} maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial bfmodpar2 {
+ callback {oscil->Pbasefuncmodulationpar2=(int)o->value();
+basefuncdisplaygroup->redraw();
+redrawoscil();}
+ tooltip {Oscillator's modulation parameter 2} xywh {679 281 15 15} maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial bfmodpar3 {
+ callback {oscil->Pbasefuncmodulationpar3=(int)o->value();
+basefuncdisplaygroup->redraw();
+redrawoscil();}
+ tooltip {Oscillator's modulation parameter 3} xywh {699 281 15 15} maximum 127 step 1
+ class WidgetPDial
+ }
+ }
+ }
+ Fl_Choice magtype {
+ label {Mag.Type}
+ callback {oscil->Phmagtype=(int) o->value();
+basefuncdisplaygroup->redraw();
+
+redrawoscil();}
+ xywh {70 280 65 20} down_box BORDER_BOX labelsize 11 textsize 11
+ } {
+ MenuItem {} {
+ label Linear
+ xywh {0 0 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {-40dB}
+ xywh {10 10 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {-60dB}
+ xywh {20 20 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {-80dB}
+ xywh {30 30 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {-100dB}
+ xywh {40 40 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Button {} {
+ label {Use as base}
+ callback {oscil->useasbase();
+if (autoclearbutton->value()){
+ for (int i=0;i<MAX_AD_HARMONICS;i++){
+ h[i]->mag->value(64);
+ oscil->Phmag[i]=64;
+ h[i]->phase->value(64);
+ oscil->Phphase[i]=64;
+ };
+ oscil->Phmag[0]=127;
+
+ oscil->Pharmonicshift=0;
+ harmonicshiftcounter->value(0);
+
+ h[0]->mag->value(0);
+ wshbutton->value(0);
+ wshbutton->do_callback();
+ fltbutton->value(0);
+ fltbutton->do_callback();
+ sabutton->value(0);
+ sabutton->do_callback();
+};
+
+pthread_mutex_lock(&master->mutex);
+ for (int i=0;i<MAX_AD_HARMONICS;i++){
+ if (oscil->Phmag[i]==64) h[i]->mag->selection_color(0);
+ else h[i]->mag->selection_color(222);
+ };
+ oscil->prepare();
+pthread_mutex_unlock(&master->mutex);
+
+basefuncdisplaygroup->redraw();
+redrawoscil();}
+ tooltip {Use this Oscillator as base function} xywh {5 313 85 20} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ Fl_Button {} {
+ label Close
+ callback {osceditUI->hide();}
+ xywh {668 565 62 25} box THIN_UP_BOX
+ }
+ Fl_Button {} {
+ label Clear
+ callback {if (!fl_choice("Clear the harmonics settings?","No","Yes",NULL)) return;
+
+for (int i=0;i<MAX_AD_HARMONICS;i++){
+ h[i]->mag->value(64);
+ oscil->Phmag[i]=64;
+ h[i]->phase->value(64);
+ oscil->Phphase[i]=64;
+};
+oscil->Phmag[0]=127;
+h[0]->mag->value(0);
+
+for (int i=0;i<MAX_AD_HARMONICS;i++){
+ if (oscil->Phmag[i]==64) h[i]->mag->selection_color(0);
+ else h[i]->mag->selection_color(222);
+};
+
+//harmonics->redraw();
+
+pthread_mutex_lock(&master->mutex);
+ oscil->prepare();
+pthread_mutex_unlock(&master->mutex);
+
+redrawoscil();}
+ xywh {670 505 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ Fl_Group {} {
+ xywh {136 308 150 30} box UP_FRAME
+ } {
+ Fl_Choice wshbutton {
+ label {Wsh.}
+ callback {oscil->Pwaveshapingfunction=(int) o->value();
+basefuncdisplaygroup->redraw();
+redrawoscil();} open
+ tooltip {Waveshaping function} xywh {166 313 55 20} down_box BORDER_BOX labelsize 10 textsize 10
+ } {
+ MenuItem {} {
+ label None
+ xywh {25 25 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Atan
+ xywh {35 35 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Asym1
+ xywh {45 45 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sine
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Qnts
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Zigzg
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Lmt
+ xywh {95 95 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LmtU
+ xywh {105 105 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LmtL
+ xywh {115 115 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label ILmt
+ xywh {127 127 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Clip
+ xywh {137 137 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Asym2
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow2
+ xywh {95 95 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sgm
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial wshpar {
+ callback {oscil->Pwaveshaping=(int)o->value()+64;
+wsparval->value(oscil->Pwaveshaping-64);
+redrawoscil();}
+ tooltip {Waveshaping Parameter} xywh {261 313 20 20} minimum -64 maximum 63 step 1
+ class WidgetPDial
+ }
+ Fl_Value_Output wsparval {
+ xywh {229 316 25 15} labelsize 12 minimum -63 maximum 63 step 1
+ }
+ }
+ Fl_Check_Button autoclearbutton {
+ label {Clr.}
+ tooltip {Auto clear when using the oscillator as base function} xywh {94 313 38 20} box THIN_UP_BOX value 1 labelfont 1 labelsize 10
+ }
+ Fl_Group {} {
+ xywh {287 308 155 30} box UP_FRAME
+ } {
+ Fl_Choice fltbutton {
+ label Filter
+ callback {oscil->Pfiltertype=(int) o->value();
+
+redrawoscil();}
+ tooltip {Oscillator's filter type} xywh {317 313 50 20} down_box BORDER_BOX labelsize 10 textsize 10
+ } {
+ MenuItem {} {
+ label None
+ xywh {35 35 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LP1
+ xywh {45 45 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label HP1a
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label HP1b
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label BP1
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label BS1
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LP2
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label HP2
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label BP2
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label BS2
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Cos
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sin
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label LSh
+ xywh {95 95 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label S
+ xywh {105 105 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial filtervalue1 {
+ callback {oscil->Pfilterpar1=(int)o->value();
+
+redrawoscil();}
+ tooltip {Oscillator's filter parameter1} xywh {369 313 20 20} maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Check_Button filterpref {
+ label p
+ callback {oscil->Pfilterbeforews=(int)o->value();
+
+redrawoscil();}
+ tooltip {Apply the filter before the waveshaping} xywh {417 313 20 20} down_box DOWN_BOX labelsize 10 align 24
+ }
+ Fl_Dial filtervalue2 {
+ callback {oscil->Pfilterpar2=(int)o->value();
+
+redrawoscil();}
+ tooltip {Oscillator's filter parameter2} xywh {394 313 20 20} maximum 127 step 1
+ class WidgetPDial
+ }
+ }
+ Fl_Group {} {
+ xywh {594 308 135 30} box UP_FRAME
+ } {
+ Fl_Choice sabutton {
+ label {Sp.adj.}
+ callback {oscil->Psatype=(int) o->value();
+redrawoscil();}
+ tooltip {Oscillator's spectrum adjust} xywh {635 313 60 20} down_box BORDER_BOX labelsize 10 textsize 10
+ } {
+ MenuItem {} {
+ label None
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label ThrsD
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label ThrsU
+ xywh {85 85 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial sadjpar {
+ callback {oscil->Psapar=(int)o->value();
+redrawoscil();}
+ tooltip {Oscillator's spectrum adjust parameter} xywh {702 313 20 20} maximum 127 step 1
+ class WidgetPDial
+ }
+ }
+ Fl_Group {} {
+ xywh {665 340 65 65} box UP_FRAME
+ } {
+ Fl_Counter harmonicshiftcounter {
+ label {Harmonic Shift}
+ callback {oscil->Pharmonicshift=(int)o->value();
+redrawoscil();}
+ xywh {670 365 55 15} type Simple labelsize 10 align 129 minimum -64 maximum 64 step 1 textfont 1 textsize 10
+ }
+ Fl_Check_Button harmonicshiftpre {
+ label preH
+ callback {oscil->Pharmonicshiftfirst=(int)o->value();
+redrawoscil();}
+ tooltip {Apply the harmonic shift before the waveshaping and filtering} xywh {690 385 34 15} down_box DOWN_BOX labelsize 10 align 24
+ }
+ Fl_Button {} {
+ label R
+ callback {oscil->Pharmonicshift=0;
+harmonicshiftcounter->value(0);
+redrawoscil();}
+ xywh {670 385 20 15} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ }
+ Fl_Group {} {open
+ xywh {665 410 65 90} box UP_FRAME
+ } {
+ Fl_Choice adhrtype {
+ label {Adpt.Harm.}
+ callback {oscil->Padaptiveharmonics=(int) o->value();
+redrawoscil();}
+ tooltip {The type of the addaptive harmonics} xywh {670 425 55 15} down_box BORDER_BOX labelsize 10 align 129 when 6 textsize 10
+ } {
+ MenuItem {} {
+ label OFF
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label ON
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Square
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 2xSub
+ xywh {110 110 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 2xAdd
+ xywh {120 120 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 3xSub
+ xywh {120 120 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 3xAdd
+ xywh {130 130 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 4xSub
+ xywh {130 130 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label 4xAdd
+ xywh {140 140 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial adhrpow {
+ label pow
+ callback {oscil->Padaptiveharmonicspower=(int)o->value();
+redrawoscil();}
+ tooltip {Adaptive harmonics power} xywh {700 460 25 25} labelsize 10 maximum 200 step 1
+ class WidgetPDial
+ }
+ Fl_Dial adhrbf {
+ label baseF
+ callback {oscil->Padaptiveharmonicsbasefreq=(int)o->value();
+redrawoscil();}
+ tooltip {Adaptive harmonics base frequency} xywh {670 460 25 25} labelsize 10 maximum 255 step 1
+ class WidgetPDial
+ }
+ Fl_Slider adhrpar {
+ callback {oscil->Padaptiveharmonicspar=(int)o->value();
+redrawoscil();}
+ xywh {670 445 55 10} type {Horz Knob} box FLAT_BOX maximum 100 step 1 value 50
+ }
+ }
+ Fl_Group {} {
+ xywh {443 308 150 30} box UP_FRAME
+ } {
+ Fl_Choice modtype {
+ label {Mod.}
+ callback {oscil->Pmodulation=(int) o->value();
+
+redrawoscil();}
+ tooltip modulation xywh {476 315 50 15} down_box BORDER_BOX labelsize 10 textsize 10
+ } {
+ MenuItem {} {
+ label None
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Rev
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sine
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Pow
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial modpar1 {
+ callback {oscil->Pmodulationpar1=(int)o->value();
+
+redrawoscil();}
+ tooltip {Oscillator's modulation parameter 1} xywh {534 315 15 15} maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial modpar2 {
+ callback {oscil->Pmodulationpar2=(int)o->value();
+
+redrawoscil();}
+ tooltip {Oscillator's modulation parameter 2} xywh {554 315 15 15} maximum 127 step 1
+ class WidgetPDial
+ }
+ Fl_Dial modpar3 {
+ callback {oscil->Pmodulationpar3=(int)o->value();
+redrawoscil();}
+ tooltip {Oscillator's modulation parameter 3} xywh {574 315 15 15} maximum 127 step 1
+ class WidgetPDial
+ }
+ }
+ Fl_Button {} {
+ label Sine
+ callback {if (!fl_choice("Convert to SINE?","No","Yes",NULL)) return;
+
+pthread_mutex_lock(&master->mutex);
+ oscil->convert2sine();
+pthread_mutex_unlock(&master->mutex);
+
+redrawoscil();
+refresh();}
+ xywh {670 525 55 15} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(oscil);}
+ xywh {670 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(oscil,this);}
+ xywh {700 545 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Scroll _this_has_to_be_the_last {
+ xywh {5 340 660 250} type HORIZONTAL box FLAT_BOX
+ } {
+ Fl_Pack harmonics {open
+ xywh {10 345 650 225} type HORIZONTAL
+ code0 {for (int i=0;i<MAX_AD_HARMONICS;i++){h[i]=new Oscilharmonic(0,0,20,o->h(),"");h[i]->init(oscil,i,oscildisplaygroup,oldosc,cbwidget,applybutton,master);}}
+ } {}
+ }
+ }
+ }
+ Function {OscilEditor(OscilGen *oscil_,Fl_Widget *oldosc_,Fl_Widget *cbwidget_,Fl_Widget *cbapplywidget_,Master *master_)} {} {
+ code {oscil=oscil_;
+oldosc=oldosc_;
+cbwidget=cbwidget_;
+cbapplywidget=cbapplywidget_;
+master=master_;
+
+make_window();
+
+refresh();
+osceditUI->show();} {}
+ }
+ Function {~OscilEditor()} {} {
+ code {osceditUI->hide();
+//for (int i=0;i<MAX_AD_HARMONICS;i++) delete (h[i]);
+delete (osceditUI);} {}
+ }
+ Function {refresh()} {} {
+ code {magtype->value(oscil->Phmagtype);
+rndslider->value(oscil->Prand-64);
+
+hrndtype->value(oscil->Pamprandtype);
+hrnddial->value(oscil->Pamprandpower);
+
+bftype->value(oscil->Pcurrentbasefunc);
+bfparval->value(oscil->Pbasefuncpar-64);
+bfslider->value(oscil->Pbasefuncpar-64);
+
+bfmodtype->value(oscil->Pbasefuncmodulation);
+bfmodpar1->value(oscil->Pbasefuncmodulationpar1);
+bfmodpar2->value(oscil->Pbasefuncmodulationpar2);
+bfmodpar3->value(oscil->Pbasefuncmodulationpar3);
+
+wshbutton->value(oscil->Pwaveshapingfunction);
+wsparval->value(oscil->Pwaveshaping-64);
+wshpar->value(oscil->Pwaveshaping-64);
+
+fltbutton->value(oscil->Pfiltertype);
+filtervalue1->value(oscil->Pfilterpar1);
+filtervalue2->value(oscil->Pfilterpar2);
+filterpref->value(oscil->Pfilterbeforews);
+
+modtype->value(oscil->Pmodulation);
+modpar1->value(oscil->Pmodulationpar1);
+modpar2->value(oscil->Pmodulationpar2);
+modpar3->value(oscil->Pmodulationpar3);
+
+sabutton->value(oscil->Psatype);
+sadjpar->value(oscil->Psapar);
+
+harmonicshiftcounter->value(oscil->Pharmonicshift);
+harmonicshiftpre->value(oscil->Pharmonicshiftfirst);
+
+adhrtype->value(oscil->Padaptiveharmonics);
+adhrbf->value(oscil->Padaptiveharmonicsbasefreq);
+adhrpow->value(oscil->Padaptiveharmonicspower);
+adhrtype->value(oscil->Padaptiveharmonicspar);
+
+for (int i=0;i<MAX_AD_HARMONICS;i++) h[i]->refresh();
+
+pthread_mutex_lock(&master->mutex);
+ oscil->prepare();
+pthread_mutex_unlock(&master->mutex);
+
+basefuncdisplaygroup->redraw();
+redrawoscil();} {}
+ }
+ Function {redrawoscil()} {} {
+ code {oscildisplaygroup->redraw();
+oldosc->redraw();
+if (cbwidget!=NULL) {
+ cbwidget->do_callback();
+ applybutton->color(FL_RED);
+ applybutton->redraw();
+};} {}
+ }
+ decl {OscilGen *oscil;} {}
+ decl {Fl_Widget *oldosc,*cbwidget,*cbapplywidget;} {}
+ decl {Oscilharmonic *h[MAX_AD_HARMONICS];} {}
+ decl {Master *master;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl
new file mode 100644
index 0000000..33a0713
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PADnoteUI.fl
@@ -0,0 +1,1118 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {\#include "../Params/PADnoteParameters.h"} {public
+}
+
+decl {\#include "../Misc/Util.h"} {public
+}
+
+decl {\#include "../Misc/Master.h"} {public
+}
+
+decl {\#include "ResonanceUI.h"} {public
+}
+
+decl {\#include <FL/Fl_Box.H>} {public
+}
+
+decl {\#include <FL/Fl_Group.H>} {public
+}
+
+decl {\#include <FL/Fl_File_Chooser.H>} {public
+}
+
+decl {\#include <math.h>} {}
+
+decl {\#include <stdio.h>} {}
+
+decl {\#include <stdlib.h>} {}
+
+decl {\#include <string.h>} {}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "EnvelopeUI.h"} {public
+}
+
+decl {\#include "LFOUI.h"} {public
+}
+
+decl {\#include "FilterUI.h"} {public
+}
+
+decl {\#include "OscilGenUI.h"} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+class PADnoteHarmonicProfile {: {public Fl_Box}
+} {
+ Function {PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {pars=NULL;} {}
+ }
+ Function {init(PADnoteParameters *pars,Master *master_)} {} {
+ code {master=master_;
+this->pars=pars;} {}
+ }
+ Function {draw()} {} {
+ code {int ox=x(),oy=y(),lx=w(),ly=h();
+if (!visible()) return;
+float smps[lx];
+
+float realbw=pars->getprofile(smps,lx);
+bool active=active_r();
+
+//draw the equivalent bandwidth
+if (active) fl_color(220,220,220);
+ else fl_color(160,165,165);
+fl_line_style(FL_DASH);
+int rbw=(int)(realbw*(lx-1.0)/2.0);
+fl_begin_line();
+for (int i=lx/2-rbw;i<(lx/2+rbw);i++) { fl_vertex(ox+i,oy); }
+fl_end_line();
+
+fl_line_style(FL_DASH);
+if (active) fl_color(200,200,200);
+ else fl_color(160,160,160);
+for (int i=1;i<10;i++){
+ int kx=(int)(lx/10.0*i);
+ fl_line( ox + kx, oy, ox + kx, oy + ly - 1 );
+};
+for (int i=1;i<5;i++){
+ int ky=(int)(ly/5.0*i);
+ fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
+};
+
+
+fl_color(120,120,120);
+fl_line_style(FL_DASH);
+fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
+
+//draw the graph
+fl_line_style(FL_SOLID);
+ if (active) fl_color(180,210,240);
+ else fl_color(150,150,155);
+
+fl_begin_polygon();
+fl_vertex( ox, oy + h() );
+for (int i=0;i<lx;i++){
+ int val=(int) ((ly-2)*smps[i]);
+
+// fl_vertex(ox+i,oy+ly-1);
+ fl_vertex(ox+i,oy+ly-1-val);
+
+ // if (active) fl_color(0,0,100);
+ // else fl_color(150,150,150);
+
+// if (i>0)
+// {
+// fl_vertex(ox+i-1,oy+ly-2-old);
+// fl_vertex(ox+i,oy+ly-2-val);
+// }
+};
+fl_vertex( ox + w(), oy + h() );
+fl_end_polygon();
+
+
+fl_line_style(FL_DASH);
+if (active) fl_color(0,100,220);
+ else fl_color(150,160,170);
+fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
+fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
+
+fl_line_style(0);} {}
+ }
+ decl {Master *master;} {}
+ decl {PADnoteParameters *pars;} {public
+ }
+}
+
+class PADnoteOvertonePosition {: {public Fl_Box}
+} {
+ Function {PADnoteOvertonePosition(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {pars=NULL;} {}
+ }
+ Function {init(PADnoteParameters *pars,Master *master_)} {} {
+ code {master=master_;
+this->pars=pars;} {}
+ }
+ Function {draw()} {} {
+ code {if (!visible()) return;
+const int maxdb=60;
+
+int ox=x(),oy=y(),lx=w(),ly=h();
+const int maxharmonic=64;
+
+
+for (int i=1;i<maxharmonic;i++){
+ fl_color(100,100,100);
+ fl_line_style(FL_DOT);
+ if (i%5==0) fl_line_style(0);
+ if (i%10==0) fl_color(120,120,120);
+ int kx=(int)(lx/(float)maxharmonic*i);
+ fl_line(ox+kx,oy,ox+kx,oy+ly);
+};
+
+
+
+int n=synth->oscilsize/2;
+float spc[n];
+for (int i=0;i<n;i++) spc[i]=0.0;
+
+pthread_mutex_lock(&master->mutex);
+pars->oscilgen->getspectrum(n,spc,0);
+pthread_mutex_unlock(&master->mutex);
+
+
+//normalize
+float max=0;
+for (int i=0;i<n;i++){
+ float x=fabs(spc[i]);
+ if (max<x) max=x;
+}
+if (max<0.000001) max=1.0;
+max=max*1.05;
+
+float spectrum[lx];
+for (int i=0;i<lx;i++) spectrum[i]=0;
+
+
+for (int i=1;i<n;i++){
+ float nhr=pars->getNhr(i);
+ int kx=(int)(lx/(float)maxharmonic*nhr);
+ if ((kx<0)||(kx>lx)) continue;
+
+ spectrum[kx]=spc[i-1]/max+1e-9;
+
+};
+
+fl_color(180,0,0);
+fl_line_style(0);
+
+if (pars->Pmode==2){
+ int old=0;
+ for (int i=1;i<lx;i++){
+ if ((spectrum[i]>1e-10)||(i==(lx-1))){
+ int delta=i-old;
+ float val1=spectrum[old];
+ float val2=spectrum[i];
+
+ float idelta=1.0/delta;
+ for (int j=0;j<delta;j++){
+ float x=idelta*j;
+ spectrum[old+j]=val1*(1.0-x)+val2*x;
+ };
+ old=i;
+ };
+
+ };
+};
+
+for (int i=0;i<lx;i++){
+ float x=spectrum[i];
+ if (x>dB2rap(-maxdb)) x=rap2dB(x)/maxdb+1;
+ else continue;
+ int yy=(int)(x*ly);
+ fl_line(ox+i,oy+ly-1-yy,ox+i,oy+ly-1);
+
+};} {}
+ }
+ decl {Master *master;} {}
+ decl {PADnoteParameters *pars;} {public
+ }
+}
+
+class PADnoteUI {open : {public PresetsUI_}
+} {
+ Function {PADnoteUI(PADnoteParameters *parameters,Master *master_)} {open
+ } {
+ code {pars=parameters;
+master=master_;
+oscui=NULL;
+resui=new ResonanceUI(pars->resonance);
+make_window();} {}
+ }
+ Function {make_window()} {open
+ } {
+ Fl_Window padnotewindow {
+ label {PAD synth Parameters} open
+ xywh {288 386 535 435} type Double visible
+ } {
+ Fl_Tabs {} {
+ callback {if (o->value()!=harmonicstructuregroup) applybutton->hide();
+ else applybutton->show();} open
+ xywh {0 0 535 395} box UP_FRAME
+ } {
+ Fl_Group harmonicstructuregroup {
+ label {Harmonic Structure} open selected
+ xywh {0 20 535 375} box UP_FRAME
+ } {
+ Fl_Group bwprofilegroup {
+ xywh {5 30 90 260} box UP_FRAME
+ code0 {if (pars->Pmode!=0) o->deactivate();}
+ } {
+ Fl_Dial hpbasepar1 {
+ label Width
+ callback {pars->Php.base.par1=(int) o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {20 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Php.base.par1);}
+ class WidgetPDial
+ }
+ Fl_Choice hpbasetype {
+ label {Base Type}
+ callback {pars->Php.base.type=o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {15 45 75 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
+ code0 {o->value(pars->Php.base.type);}
+ } {
+ MenuItem {} {
+ label Gauss
+ xywh {15 15 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Square
+ xywh {25 25 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label DoubleExp
+ xywh {35 35 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial hpfreqmult {
+ label FreqMlt
+ callback {pars->Php.freqmult=(int) o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {55 75 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Php.freqmult);}
+ class WidgetPDial
+ }
+ Fl_Dial hpmpar1 {
+ label Str
+ callback {pars->Php.modulator.par1=(int) o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {15 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Php.modulator.par1);}
+ class WidgetPDial
+ }
+ Fl_Dial hpmfreq {
+ label SFreq
+ callback {pars->Php.modulator.freq=(int) o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {40 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Php.modulator.freq);}
+ class WidgetPDial
+ }
+ Fl_Group {} {
+ xywh {10 160 80 105} box BORDER_BOX
+ } {
+ Fl_Choice hpamptype {
+ label AmpMultiplier
+ callback {pars->Php.amp.type=o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {15 175 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
+ code0 {o->value(pars->Php.amp.type);}
+ } {
+ MenuItem {} {
+ label OFF
+ xywh {45 45 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Gauss
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Sine
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Flat
+ xywh {75 75 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Choice hpampmode {
+ label AmpMode
+ callback {pars->Php.amp.mode=o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {15 205 70 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
+ code0 {o->value(pars->Php.amp.mode);}
+ } {
+ MenuItem {} {
+ label Sum
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Mult
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Div1
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Div2
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial hpamppar1 {
+ label Par1
+ callback {pars->Php.amp.par1=(int) o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {15 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Php.amp.par1);}
+ class WidgetPDial
+ }
+ Fl_Dial hpamppar2 {
+ label Par2
+ callback {pars->Php.amp.par2=(int) o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {55 235 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Php.amp.par2);}
+ class WidgetPDial
+ }
+ }
+ Fl_Check_Button hpautoscale {
+ label autoscale
+ callback {pars->Php.autoscale=(int) o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {10 270 60 15} down_box DOWN_BOX labelsize 10
+ code0 {o->value(pars->Php.autoscale);}
+ }
+ Fl_Choice hponehalf {
+ callback {pars->Php.onehalf=o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {10 143 80 15} down_box BORDER_BOX labelsize 10 align 5 textsize 10
+ code0 {o->value(pars->Php.onehalf);}
+ } {
+ MenuItem {} {
+ label Full
+ xywh {25 25 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Upper Half}
+ xywh {45 45 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Lower Half}
+ xywh {35 35 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Dial hpwidth {
+ label Size
+ callback {pars->Php.width=(int) o->value();
+hprofile->redraw();
+cbwidget->do_callback();}
+ xywh {65 115 20 20} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Php.width);}
+ class WidgetPDial
+ }
+ }
+ Fl_Group {} {
+ xywh {100 155 270 135} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 align 6
+ code0 {osc=new Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {osc->init(pars->oscilgen,master);}
+ } {}
+ Fl_Button {} {
+ label Change
+ callback {if (oscui!=NULL) delete (oscui);
+oscui=new OscilEditor(pars->oscilgen,osc,cbwidget,applybutton,master);}
+ xywh {375 270 60 20} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ Fl_Box cbwidget {
+ label {Harmonic Content}
+ callback {overtonepos->redraw();
+applybutton->color(FL_RED);
+applybutton->redraw();}
+ xywh {125 135 205 20} align 16
+ }
+ Fl_Button {} {
+ label Resonance
+ callback {resui->resonancewindow->redraw();
+resui->resonancewindow->show();
+resui->setcbwidget(cbwidget,applybutton);}
+ xywh {375 225 80 20} box THIN_UP_BOX
+ }
+ Fl_Dial bwdial {
+ label BandWidth
+ callback {bwcents->value(pars->setPbandwidth((int) o->value()));
+cbwidget->do_callback();}
+ xywh {15 295 35 35} box ROUND_UP_BOX labelsize 10 maximum 1000 step 1
+ code0 {o->value(pars->Pbandwidth);}
+ code1 {if (pars->Pmode!=0) o->deactivate();}
+ class WidgetPDial
+ }
+ Fl_Value_Output bwcents {
+ label cents
+ xywh {55 305 55 15} labelsize 10 align 6 maximum 10000 step 0.1
+ code0 {o->value(pars->setPbandwidth(pars->Pbandwidth));}
+ code1 {if (pars->Pmode!=0) o->deactivate();}
+ }
+ Fl_Group {} {
+ xywh {315 295 215 45} box UP_FRAME
+ } {
+ Fl_Choice hrpostype {
+ label OvertonesPosition
+ callback {pars->Phrpos.type=o->value();
+overtonepos->redraw();
+cbwidget->do_callback();}
+ xywh {325 310 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
+ code0 {o->value(pars->Phrpos.type);}
+ } {
+ MenuItem {} {
+ label Harmonic
+ xywh {70 70 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label ShiftU
+ xywh {80 80 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label ShiftL
+ xywh {90 90 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label PowerU
+ xywh {90 90 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label PowerL
+ xywh {100 100 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Sine
+ xywh {110 110 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Power
+ xywh {120 120 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Shift selected
+ xywh {130 130 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Dial hrpospar1 {
+ label Par1
+ callback {pars->Phrpos.par1=(int) o->value();
+overtonepos->redraw();
+cbwidget->do_callback();}
+ xywh {425 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
+ code0 {o->value(pars->Phrpos.par1);}
+ class WidgetPDial
+ }
+ Fl_Dial hrpospar2 {
+ label Par2
+ callback {pars->Phrpos.par2=(int) o->value();
+overtonepos->redraw();
+cbwidget->do_callback();}
+ xywh {460 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
+ code0 {o->value(pars->Phrpos.par2);}
+ class WidgetPDial
+ }
+ Fl_Dial hrpospar3 {
+ label ForceH
+ callback {pars->Phrpos.par3=(int) o->value();
+overtonepos->redraw();
+cbwidget->do_callback();}
+ xywh {495 310 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 255 step 1
+ code0 {o->value(pars->Phrpos.par3);}
+ class WidgetPDial
+ }
+ }
+ Fl_Choice bwscale {
+ label {Bandwidth Scale}
+ callback {pars->Pbwscale=(int) o->value();
+cbwidget->do_callback();}
+ xywh {120 305 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
+ code0 {o->value(pars->Pbwscale);}
+ code1 {if (pars->Pmode!=0) o->deactivate();}
+ } {
+ MenuItem {} {
+ label Normal
+ xywh {95 95 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label EqualHz
+ xywh {105 105 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Quater
+ xywh {115 115 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Half
+ xywh {125 125 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {75%}
+ xywh {135 135 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {150%}
+ xywh {145 145 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Double
+ xywh {145 145 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {Inv.Half}
+ xywh {155 155 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Group overtonepos {
+ xywh {5 345 525 45} box FLAT_BOX color 51 selection_color 218 labelcolor 63
+ code0 {PADnoteOvertonePosition *opui=new PADnoteOvertonePosition(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {opui->init(pars,master);}
+ } {}
+ Fl_Choice qsamplesize {
+ label {Sample Size}
+ callback {pars->Pquality.samplesize=(int) o->value();
+cbwidget->do_callback();}
+ xywh {375 190 115 20} down_box BORDER_BOX labelsize 10 align 5 textsize 11
+ code0 {o->value(pars->Pquality.samplesize);}
+ } {
+ MenuItem {} {
+ label {16k (Tiny)}
+ xywh {155 155 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 32k
+ xywh {165 165 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {64k (Small)}
+ xywh {175 175 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 128k
+ xywh {185 185 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {256k (Normal)}
+ xywh {205 205 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 512k
+ xywh {200 200 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {1M (Big)}
+ xywh {205 205 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Choice qsmpoct {
+ label {smp/oct}
+ callback {pars->Pquality.smpoct=(int) o->value();
+cbwidget->do_callback();}
+ xywh {430 155 45 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
+ code0 {o->value(pars->Pquality.smpoct);}
+ } {
+ MenuItem {} {
+ label {0.5}
+ xywh {10 10 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 1
+ xywh {0 0 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 2
+ xywh {10 10 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 3
+ xywh {20 20 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 4
+ xywh {30 30 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 6
+ xywh {40 40 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 12
+ xywh {50 50 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Choice qoct {
+ label {no.oct}
+ callback {pars->Pquality.oct=(int) o->value();
+cbwidget->do_callback();}
+ xywh {480 155 45 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
+ code0 {o->value(pars->Pquality.oct);}
+ } {
+ MenuItem {} {
+ label 1
+ xywh {10 10 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 2
+ xywh {20 20 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 3
+ xywh {30 30 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 4
+ xywh {40 40 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 5
+ xywh {50 50 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 6
+ xywh {60 60 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 7
+ xywh {70 70 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label 8
+ xywh {80 80 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Choice qbasenote {
+ label base
+ callback {pars->Pquality.basenote=(int) o->value();
+cbwidget->do_callback();}
+ xywh {375 155 50 20} down_box BORDER_BOX labelsize 11 align 5 textsize 11
+ code0 {o->value(pars->Pquality.basenote);}
+ } {
+ MenuItem {} {
+ label {C-2}
+ xywh {10 10 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label {G-2}
+ xywh {20 20 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label {C-3}
+ xywh {20 20 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label {G-3}
+ xywh {30 30 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label {C-4}
+ xywh {30 30 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label {G-4}
+ xywh {40 40 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label {C-5}
+ xywh {40 40 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label {G-5}
+ xywh {50 50 100 20} labelfont 1
+ }
+ MenuItem {} {
+ label {G-6}
+ xywh {60 60 100 20} labelfont 1
+ }
+ }
+ Fl_Group hprofile {
+ xywh {100 45 430 90} box FLAT_BOX color 51 selection_color 218 labelcolor 63
+ code0 {PADnoteHarmonicProfile *hpui=new PADnoteHarmonicProfile(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {hpui->init(pars,master);}
+ code2 {if (pars->Pmode!=0) { o->deactivate(); o->color(48);};}
+ } {}
+ Fl_Box {} {
+ label {Profile of One Harmonic (Frequency Distribution)}
+ xywh {160 25 315 20}
+ }
+ Fl_Choice spectrummode {
+ label {Spectrum Mode}
+ callback {pars->Pmode=(int) o->value();
+
+if (pars->Pmode==0){
+ bwprofilegroup->activate();
+ bwdial->activate();
+ bwcents->activate();
+ hprofile->activate();
+ hprofile->color(51);
+ bwscale->activate();
+} else {
+ bwprofilegroup->deactivate();
+ bwdial->deactivate();
+ bwcents->deactivate();
+ hprofile->deactivate();
+ hprofile->color(48);
+ bwscale->deactivate();
+};
+
+cbwidget->do_callback();}
+ xywh {220 305 90 20} down_box BORDER_BOX labelfont 1 labelsize 10 align 5 textsize 11
+ code0 {o->value(pars->Pmode);}
+ } {
+ MenuItem {} {
+ label Bandwidth
+ xywh {105 105 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Discrete
+ xywh {125 125 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Continous
+ xywh {115 115 100 20} labelfont 1 labelsize 11
+ }
+ }
+ }
+ Fl_Group {} {
+ label {Envelopes&LFOs} open
+ xywh {0 20 535 375} box UP_FRAME hide
+ } {
+ Fl_Group {} {
+ label FREQUENCY
+ xywh {5 275 525 115} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Group freqenv {
+ label {PADSynth - Frequency Envelope} open
+ xywh {10 315 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->FreqEnvelope);}
+ class EnvelopeUI
+ } {}
+ Fl_Counter octave {
+ label Octave
+ callback {int k=(int) o->value();
+if (k<0) k+=16;
+pars->PCoarseDetune = k*1024+
+ pars->PCoarseDetune%1024;}
+ tooltip Octave xywh {470 295 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
+ code0 {int k=pars->PCoarseDetune/1024;}
+ code1 {if (k>=8) k-=16;}
+ code2 {o->value(k);}
+ }
+ Fl_Counter coarsedet {
+ label {Coarse det.}
+ callback {int k=(int) o->value();
+if (k<0) k+=1024;
+pars->PCoarseDetune = k+
+ (pars->PCoarseDetune/1024)*1024;}
+ tooltip {Coarse Detune} xywh {455 365 70 20} type Simple labelsize 10 align 5 minimum -64 maximum 63 step 1 textfont 1 textsize 11
+ code0 {int k=pars->PCoarseDetune%1024;}
+ code1 {if (k>=512) k-=1024;}
+ code2 {o->value(k);}
+ code3 {o->lstep(10);}
+ }
+ Fl_Group freqlfo {
+ label {Frequency LFO } open
+ xywh {215 315 230 70} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->FreqLfo);}
+ class LFOUI
+ } {}
+ Fl_Slider detune {
+ callback {pars->PDetune=(int)o->value()+8192;
+detunevalueoutput->do_callback();}
+ tooltip {Fine Detune (cents)} xywh {60 295 295 15} type {Horz Knob} box FLAT_BOX minimum -8192 maximum 8191 step 1
+ code0 {o->value(pars->PDetune-8192);}
+ }
+ Fl_Value_Output detunevalueoutput {
+ label Detune
+ callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
+ xywh {12 295 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
+ code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
+ }
+ Fl_Choice detunetype {
+ label {Detune Type}
+ callback {pars->PDetuneType=(int) o->value()+1;
+detunevalueoutput->do_callback();} open
+ xywh {450 330 75 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
+ code1 {o->value(pars->PDetuneType-1);}
+ } {}
+ Fl_Check_Button hz440 {
+ label 440Hz
+ callback {int x=(int) o->value();
+pars->Pfixedfreq=x;
+if (x==0) fixedfreqetdial->deactivate();
+ else fixedfreqetdial->activate();}
+ tooltip {set the base frequency to 440Hz} xywh {365 295 50 15} down_box DOWN_BOX labelfont 1 labelsize 10
+ code0 {o->value(pars->Pfixedfreq);}
+ }
+ Fl_Dial fixedfreqetdial {
+ label {Eq.T.}
+ callback {pars->PfixedfreqET=(int) o->value();}
+ tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {420 295 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
+ code0 {o->value(pars->PfixedfreqET);}
+ code1 {if (pars->Pfixedfreq==0) o->deactivate();}
+ class WidgetPDial
+ }
+ }
+ Fl_Group {} {
+ label AMPLITUDE
+ xywh {5 25 240 250} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Value_Slider volume {
+ label Vol
+ callback {pars->PVolume=(int)o->value();}
+ tooltip Volume xywh {10 50 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->PVolume);}
+ }
+ Fl_Value_Slider vsns {
+ label {V.Sns}
+ callback {pars->PAmpVelocityScaleFunction=(int) o->value();}
+ tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 70 160 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->PAmpVelocityScaleFunction);}
+ }
+ Fl_Dial pan {
+ label Pan
+ callback {pars->PPanning=(int) o->value();}
+ tooltip {Panning (leftmost is Random)} xywh {210 45 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->PPanning);}
+ class WidgetPDial
+ }
+ Fl_Dial pstr {
+ label {P.Str.}
+ callback {pars->PPunchStrength=(int) o->value();}
+ tooltip {Punch Strength} xywh {125 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->PPunchStrength);}
+ class WidgetPDial
+ }
+ Fl_Dial pt {
+ label {P.t.}
+ callback {pars->PPunchTime=(int) o->value();}
+ tooltip {Punch Time (duration)} xywh {155 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->PPunchTime);}
+ class WidgetPDial
+ }
+ Fl_Dial pstc {
+ label {P.Stc.}
+ callback {pars->PPunchStretch=(int) o->value();}
+ tooltip {Punch Stretch} xywh {185 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->PPunchStretch);}
+ class WidgetPDial
+ }
+ Fl_Dial pvel {
+ label {P.Vel.}
+ callback {pars->PPunchVelocitySensing=(int) o->value();}
+ tooltip {Punch Velocity Sensing} xywh {215 247 25 25} box ROUND_UP_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->PPunchVelocitySensing);}
+ class WidgetPDial
+ }
+ Fl_Group ampenv {
+ label {PADSynth - Amplitude Envelope} open
+ xywh {10 95 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->AmpEnvelope);}
+ class EnvelopeUI
+ } {}
+ Fl_Group amplfo {
+ label {Amplitude LFO } open
+ xywh {10 165 230 70} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->AmpLfo);}
+ class LFOUI
+ } {}
+ Fl_Check_Button stereo {
+ label Stereo
+ callback {pars->PStereo=(int) o->value();
+hprofile->redraw();}
+ xywh {15 245 70 25} down_box DOWN_BOX
+ code0 {o->value(pars->PStereo);}
+ }
+ }
+ Fl_Group {} {
+ label FILTER
+ xywh {245 25 285 250} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 17
+ } {
+ Fl_Group filterenv {
+ label {PADSynth - Filter Envelope} open
+ xywh {250 130 275 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->FilterEnvelope);}
+ class EnvelopeUI
+ } {}
+ Fl_Group filterlfo {
+ label {Filter LFO } open
+ xywh {250 200 230 70} box FLAT_BOX color 47 align 144
+ code0 {o->init(pars->FilterLfo);}
+ class LFOUI
+ } {}
+ Fl_Group filterui {
+ label {PADsynth - Filter} open
+ xywh {250 55 275 75} box FLAT_BOX color 50 align 144
+ code0 {o->init(pars->GlobalFilter,&pars->PFilterVelocityScale,&pars->PFilterVelocityScaleFunction);}
+ class FilterUI
+ } {}
+ }
+ }
+ }
+ Fl_Button applybutton {
+ label {Apply Changes}
+ callback {pars->applyparameters(true);
+o->color(FL_GRAY);
+if (oscui!=NULL) {
+ oscui->applybutton->color(FL_GRAY);
+ oscui->applybutton->redraw();
+};
+if (resui!=NULL) {
+ resui->applybutton->color(FL_GRAY);
+ resui->applybutton->redraw();
+};}
+ xywh {300 400 135 30} box THIN_UP_BOX
+ code0 {o->color(FL_RED);}
+ }
+ Fl_Button {} {
+ label Close
+ callback {padnotewindow->hide();}
+ xywh {440 400 90 30} box THIN_UP_BOX
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(pars);}
+ xywh {65 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(pars,this);}
+ xywh {95 400 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label export
+ callback {char *filename;
+filename=fl_file_chooser("Export samples:","(*.wav)",NULL,0);
+if (filename==NULL) return;
+fl_filename_setext(filename,"");
+
+
+
+pars->export2wav(filename);}
+ tooltip {export samples as wav file} xywh {5 400 55 30} box THIN_UP_BOX color 51 labelsize 11 align 128
+ }
+ }
+ }
+ Function {refresh()} {} {
+ code {volume->value(pars->PVolume);
+vsns->value(pars->PAmpVelocityScaleFunction);
+pan->value(pars->PPanning);
+
+stereo->value(pars->PStereo);
+
+
+pstr->value(pars->PPunchStrength);
+pt->value(pars->PPunchTime);
+pstc->value(pars->PPunchStretch);
+pvel->value(pars->PPunchVelocitySensing);
+
+detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
+detune->value(pars->PDetune-8192);
+
+int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
+octave->value(k);
+
+detunetype->value(pars->PDetuneType-1);
+k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
+coarsedet->value(k);
+
+hz440->value(pars->Pfixedfreq);
+fixedfreqetdial->value(pars->PfixedfreqET);
+
+amplfo->refresh();
+freqlfo->refresh();
+filterlfo->refresh();
+
+ampenv->refresh();
+freqenv->refresh();
+filterenv->refresh();
+filterui->refresh();
+
+
+/* harmonic structure parametrs */
+
+resui->refresh();
+if (oscui!=NULL) oscui->refresh();
+
+hpbasetype->value(pars->Php.base.type);
+hpbasepar1->value(pars->Php.base.par1);
+hpfreqmult->value(pars->Php.freqmult);
+
+hpmpar1->value(pars->Php.modulator.par1);
+hpmfreq->value(pars->Php.modulator.freq);
+hpwidth->value(pars->Php.width);
+
+hponehalf->value(pars->Php.onehalf);
+hpamptype->value(pars->Php.amp.type);
+hpampmode->value(pars->Php.amp.mode);
+hpamppar1->value(pars->Php.amp.par1);
+hpamppar2->value(pars->Php.amp.par2);
+hpautoscale->value(pars->Php.autoscale);
+
+bwdial->value(pars->Pbandwidth);
+if (pars->Pmode==0){
+ bwprofilegroup->activate();
+ bwdial->activate();
+ bwcents->activate();
+ hprofile->activate();
+ hprofile->color(51);
+ bwscale->activate();
+} else {
+ bwprofilegroup->deactivate();
+ bwdial->deactivate();
+ bwcents->deactivate();
+ hprofile->deactivate();
+ hprofile->color(48);
+ bwscale->activate();
+};
+
+spectrummode->value(pars->Pmode);
+
+qbasenote->value(pars->Pquality.basenote);
+qsmpoct->value(pars->Pquality.smpoct);
+qoct->value(pars->Pquality.oct);
+qsamplesize->value(pars->Pquality.samplesize);
+
+hrpostype->value(pars->Phrpos.type);
+hrpospar1->value(pars->Phrpos.par1);
+hrpospar2->value(pars->Phrpos.par2);
+hrpospar3->value(pars->Phrpos.par3);
+
+hprofile->redraw();
+overtonepos->redraw();
+
+osc->redraw();
+pars->applyparameters(true);
+applybutton->color(FL_GRAY);
+applybutton->parent()->redraw();} {}
+ }
+ Function {~PADnoteUI()} {} {
+ code {delete(oscui);
+delete(resui);
+
+padnotewindow->hide();
+delete(padnotewindow);} {}
+ }
+ decl {PADnoteParameters *pars;} {public
+ }
+ decl {Master *master;} {public
+ }
+ decl {OscilEditor *oscui;} {public
+ }
+ decl {Oscilloscope *osc;} {public
+ }
+ decl {ResonanceUI *resui;} {public
+ }
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl
new file mode 100644
index 0000000..0040bbf
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PartUI.fl
@@ -0,0 +1,1125 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <string.h>} {public
+}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "EffUI.h"} {public
+}
+
+decl {\#include "BankUI.h"} {public
+}
+
+decl {\#include "ADnoteUI.h"} {public
+}
+
+decl {\#include "SUBnoteUI.h"} {public
+}
+
+decl {\#include "PADnoteUI.h"} {public
+}
+
+decl {\#include "../Misc/Config.h"} {public
+}
+
+decl {\#include "../Misc/Master.h"} {public
+}
+
+decl {\#include "../Misc/Part.h"} {public
+}
+
+class PartSysEffSend {open : {public Fl_Group}
+} {
+ Function {make_window()} {open private
+ } {
+ Fl_Window syseffsend {
+ private xywh {589 129 100 100} type Double box FLAT_BOX
+ class Fl_Group visible
+ } {
+ Fl_Dial {} {
+ label 01
+ callback {master->setPsysefxvol(npart,neff,(int) o->value());}
+ xywh {0 0 25 25} box ROUND_UP_BOX labelfont 1 labelsize 10 align 130 maximum 127 step 1
+ code0 {o->size(25,25);}
+ code1 {o->value(master->Psysefxvol[neff][npart]);}
+ code2 {char tmp[10];snprintf(tmp,10,"%d",neff+1);o->copy_label(tmp);}
+ class WidgetPDial
+ }
+ }
+ }
+ Function {PartSysEffSend(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {master=NULL;
+neff=0;
+npart=0;} {}
+ }
+ Function {init(Master *master_,int npart_,int neff_)} {} {
+ code {npart=npart_;
+neff=neff_;
+master=master_;
+make_window();
+syseffsend->show();
+end();} {}
+ }
+ Function {~PartSysEffSend()} {} {
+ code {syseffsend->hide();
+//delete(syseffsend);} {}
+ }
+ decl {Master *master;} {}
+ decl {int neff;} {}
+ decl {int npart;} {}
+}
+
+class PartKitItem {open : {public Fl_Group}
+} {
+ Function {make_window()} {open private
+ } {
+ Fl_Window partkititem {
+ private xywh {473 406 670 100} type Double box FLAT_BOX
+ class Fl_Group visible
+ } {
+ Fl_Group partkititemgroup {
+ private xywh {55 0 605 20}
+ code0 {if (part->kit[n].Penabled==0) o->deactivate();}
+ } {
+ Fl_Counter minkcounter {
+ callback {part->kit[n].Pminkey=(int)o->value();}
+ xywh {225 0 55 15} type Simple minimum 0 maximum 128 step 1
+ code0 {o->value(part->kit[n].Pminkey);}
+ }
+ Fl_Button {} {
+ label m
+ callback {if (part->lastnote>=0) minkcounter->value(part->lastnote);
+minkcounter->do_callback();
+maxkcounter->do_callback();}
+ tooltip {set the minimum key to the last pressed key} xywh {285 3 15 12} box THIN_UP_BOX labelsize 10
+ }
+ Fl_Button {} {
+ label M
+ callback {if (part->lastnote>=0) maxkcounter->value(part->lastnote);
+maxkcounter->do_callback();
+minkcounter->do_callback();}
+ tooltip {set the maximum key to the last pressed key} xywh {315 3 15 12} box THIN_UP_BOX labelsize 10
+ }
+ Fl_Button {} {
+ label R
+ callback {minkcounter->value(0);
+minkcounter->do_callback();
+maxkcounter->value(127);
+maxkcounter->do_callback();}
+ tooltip {reset the minimum key to 0 and maximum key to 127} xywh {300 3 15 12} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ Fl_Button adeditbutton {
+ label edit
+ callback {partui->showparameters(n,0);}
+ xywh {420 0 40 15} box THIN_UP_BOX labelsize 11
+ code0 {if (part->kit[n].Padenabled==0) o->deactivate();}
+ code1 {if (n==0) o->hide();}
+ }
+ Fl_Button subeditbutton {
+ label edit
+ callback {partui->showparameters(n,1);}
+ xywh {490 0 40 15} box THIN_UP_BOX labelsize 11
+ code0 {if (part->kit[n].Psubenabled==0) o->deactivate();}
+ code1 {if (n==0) o->hide();}
+ }
+ Fl_Check_Button mutedcheck {
+ callback {part->kit[n].Pmuted=(int)o->value();}
+ private xywh {60 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4
+ code0 {o->value(part->kit[n].Pmuted);}
+ }
+ Fl_Counter maxkcounter {
+ callback {part->kit[n].Pmaxkey=(int)o->value();}
+ xywh {335 0 55 15} type Simple minimum 0 maximum 128 step 1
+ code0 {o->value(part->kit[n].Pmaxkey);}
+ }
+ Fl_Button labelbutton {
+ label {Bass Drum}
+ callback {const char *tmp=fl_input("Kit item name:",(const char *)part->kit[n].Pname);
+if (tmp!=NULL) snprintf((char *)part->kit[n].Pname,PART_MAX_NAME_LEN,"%s",tmp);}
+ xywh {90 0 130 15} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 10 align 20
+ code0 {o->label((char *)part->kit[n].Pname);}
+ }
+ Fl_Check_Button adcheck {
+ callback {part->kit[n].Padenabled=(int)o->value();
+if (part->kit[n].Padenabled!=0) adeditbutton->activate();
+ else adeditbutton->deactivate();}
+ private xywh {400 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4
+ code0 {o->value(part->kit[n].Padenabled);}
+ code1 {if (n==0) o->hide();}
+ }
+ Fl_Check_Button subcheck {
+ callback {part->kit[n].Psubenabled=(int)o->value();
+if (part->kit[n].Psubenabled!=0) subeditbutton->activate();
+ else subeditbutton->deactivate();}
+ private xywh {470 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4
+ code0 {o->value(part->kit[n].Psubenabled);}
+ code1 {if (n==0) o->hide();}
+ }
+ Fl_Choice sendtoeffect {
+ callback {if (o->value()!=0) part->kit[n].Psendtoparteffect=(int)o->value()-1;
+ else part->kit[n].Psendtoparteffect=127;} open
+ xywh {615 0 45 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {o->add("OFF");char nrstr[10]; for(int i=0;i<NUM_PART_EFX;i++){sprintf(nrstr,"FX%d",i+1);o->add(nrstr);};}
+ code1 {o->value(part->kit[n].Psendtoparteffect+1);if (part->kit[n].Psendtoparteffect==127) o->value(0);}
+ } {}
+ Fl_Button padeditbutton {
+ label edit
+ callback {partui->showparameters(n,2);}
+ xywh {560 0 40 15} box THIN_UP_BOX labelsize 11
+ code0 {if (part->kit[n].Ppadenabled==0) o->deactivate();}
+ code1 {if (n==0) o->hide();}
+ }
+ Fl_Check_Button padcheck {
+ callback {part->kit[n].Ppadenabled=(int)o->value();
+if (part->kit[n].Ppadenabled!=0) padeditbutton->activate();
+ else padeditbutton->deactivate();}
+ private xywh {540 0 20 15} down_box DOWN_BOX labelfont 1 labelsize 11 align 4
+ code0 {o->value(part->kit[n].Ppadenabled);}
+ code1 {if (n==0) o->hide();}
+ }
+ }
+ Fl_Check_Button enabledcheck {
+ label 01
+ callback {int answer=1;
+if (o->value()==0) answer=fl_choice("Delete the item?","No","Yes",NULL);
+if (answer!=0){
+pthread_mutex_lock(&master->mutex);
+ part->setkititemstatus(n,(int) o->value());
+pthread_mutex_unlock(&master->mutex);
+
+if (o->value()==0) partkititemgroup->deactivate();
+else partkititemgroup->activate();
+o->redraw();
+partui->showparameters(n,-1);//use to delete the ui, if it is not to item 0
+} else o->value(1);}
+ private xywh {30 0 20 15} down_box DOWN_BOX labeltype EMBOSSED_LABEL labelfont 1 labelsize 13 align 4
+ code0 {snprintf(label,10,"%d",n+1);o->label(label);}
+ code1 {o->value(part->kit[n].Penabled);}
+ code2 {if (n==0) o->deactivate();}
+ }
+ }
+ }
+ Function {PartKitItem(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {n=0;
+part=NULL;} {}
+ }
+ Function {refresh()} {} {
+ code {enabledcheck->value(part->kit[n].Penabled);
+if (part->kit[n].Penabled==0) partkititemgroup->deactivate();
+else partkititemgroup->activate();
+
+mutedcheck->value(part->kit[n].Pmuted);
+labelbutton->label((char *)part->kit[n].Pname);
+minkcounter->value(part->kit[n].Pminkey);
+maxkcounter->value(part->kit[n].Pmaxkey);
+adcheck->value(part->kit[n].Padenabled);
+adcheck->do_callback();
+subcheck->value(part->kit[n].Psubenabled);
+subcheck->do_callback();
+
+sendtoeffect->value(part->kit[n].Psendtoparteffect+1);
+if (part->kit[n].Psendtoparteffect==127) sendtoeffect->value(0);
+
+this->redraw();} {
+ callback {int answer=1;
+if (o->value()==0) answer=fl_choice("Delete the item?","No","Yes",NULL);
+if (answer!=0){
+pthread_mutex_lock(&master->mutex);
+ part->setkititemstatus(n,(int) o->value());
+pthread_mutex_unlock(&master->mutex);
+
+if (o->value()==0) partkititemgroup->deactivate();
+else partkititemgroup->activate();
+o->redraw();
+partui->showparameters(n,-1);//use to delete the ui, if it is not to item 0
+} else o->value(1);}
+ }
+ }
+ Function {init(Part *part_,int n_,Master *master_,class PartUI *partui_)} {} {
+ code {part=part_;
+n=n_;
+partui=partui_;
+master=master_;
+make_window();
+//partkititem->show();
+end();} {}
+ }
+ Function {~PartKitItem()} {} {
+ code {partkititem->hide();
+//delete(partkititem);} {}
+ }
+ decl {Part *part;} {}
+ decl {int n;} {}
+ decl {Master *master;} {}
+ decl {char label[10];} {}
+ decl {class PartUI *partui;} {}
+}
+
+class PartUI {open : {public Fl_Group}
+} {
+ Function {make_window()} {open private
+ } {
+ Fl_Window partgroup {open
+ private xywh {688 264 385 180} type Double box FLAT_BOX
+ class Fl_Group visible
+ } {
+ Fl_Group partgroupui {open
+ xywh {0 0 385 180}
+ code0 {if (part->Penabled==0) o->deactivate();}
+ } {
+ Fl_Dial {} {
+ label Pan
+ callback {part->setPpanning((int) o->value());}
+ xywh {50 40 25 25} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
+ code0 {o->value(part->Ppanning);}
+ class WidgetPDial
+ }
+ Fl_Counter {} {
+ label KeyShift
+ callback {part->Pkeyshift=(int) o->value()+64;}
+ xywh {195 45 90 20} labelsize 11 align 1 minimum -64 maximum 64 step 1
+ code0 {o->lstep(12);}
+ code1 {o->value(part->Pkeyshift-64);}
+ }
+ Fl_Scroll {} {open
+ xywh {166 91 125 49} box UP_BOX labelfont 1 labelsize 10 align 21
+ } {
+ Fl_Pack {} {open
+ xywh {171 96 115 35} type HORIZONTAL
+ code0 {o->spacing(5);}
+ code1 {for (int i=0;i<NUM_SYS_EFX;i++){psyef[i]=new PartSysEffSend(0,0,25,35,"");psyef[i]->init(master,npart,i);}}
+ } {}
+ }
+ Fl_Button {} {
+ label {Grand Piano}
+ callback {int event=Fl::event_button();
+if (event==FL_RIGHT_MOUSE){
+ const char *tmp=fl_input("Instrument name:",(const char *)part->Pname);
+ if (tmp!=NULL) snprintf((char *)part->Pname,PART_MAX_NAME_LEN,"%s",tmp);
+} else {
+ if (event==FL_LEFT_MOUSE) bankui->show();
+ else instrumenteditwindow->show();
+};}
+ tooltip {left mousebutton - to choose/save/.. from/to bank or right mousebutton to change the name or middle button to change the instrument information} xywh {195 5 185 20} box UP_FRAME down_box DOWN_FRAME labelfont 1 labelsize 11 align 84
+ code0 {o->label((char *)part->Pname);}
+ }
+ Fl_Box {} {
+ label {To Sys.Efx.}
+ xywh {166 81 95 10} labelfont 1 labelsize 10
+ }
+ Fl_Check_Button {} {
+ label NoteOn
+ callback {part->Pnoteon=(int) o->value();}
+ tooltip {set if the part receives NoteOn messages} xywh {10 155 65 20} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(part->Pnoteon);}
+ }
+ Fl_Counter minkcounter {
+ label {Min.k}
+ callback {part->Pminkey=(int) o->value();
+if (part->Pminkey>part->Pmaxkey) o->textcolor(FL_RED);
+ else o->textcolor(FL_BLACK);}
+ tooltip {Minimum key (that the part receives NoteOn messages)} xywh {295 125 40 15} type Simple labelfont 1 labelsize 10 minimum 0 maximum 127 step 1 textsize 10
+ code0 {o->value(part->Pminkey);}
+ }
+ Fl_Counter maxkcounter {
+ label {Max.k}
+ callback {part->Pmaxkey=(int) o->value();
+
+if (part->Pminkey>part->Pmaxkey) o->textcolor(FL_RED);
+ else o->textcolor(FL_BLACK);}
+ tooltip {Maximum key (that the part receives NoteOn messages)} xywh {340 125 40 15} type Simple labelfont 1 labelsize 10 minimum 0 maximum 127 step 1 textsize 10
+ code0 {o->value(part->Pmaxkey);}
+ }
+ Fl_Dial {} {
+ label Volume
+ callback {part->setPvolume((int) o->value());}
+ tooltip {Part Volume} xywh {10 35 30 30} box ROUND_UP_BOX labelsize 11 maximum 127 step 1
+ code0 {o->value(part->Pvolume);}
+ class WidgetPDial
+ }
+ Fl_Dial {} {
+ label {Vel.Ofs.}
+ callback {part->Pveloffs=(int) o->value();}
+ tooltip {Velocity Offset} xywh {135 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(part->Pveloffs);}
+ class WidgetPDial
+ }
+ Fl_Dial {} {
+ label {Vel.Sns.}
+ callback {part->Pvelsns=(int) o->value();}
+ tooltip {Velocity Sensing Function} xywh {95 40 25 25} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(part->Pvelsns);}
+ class WidgetPDial
+ }
+ Fl_Button {} {
+ label Controllers
+ callback {ctlwindow->show();}
+ xywh {295 90 85 30} labelfont 1 labelsize 11
+ }
+ Fl_Check_Button {} {
+ label Portamento
+ callback {part->ctl.portamento.portamento=(int) o->value();}
+ tooltip {Enable/Disable the portamento} xywh {95 155 88 20} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(part->ctl.portamento.portamento);}
+ }
+ Fl_Button {} {
+ label {Edit instrument}
+ callback {instrumenteditwindow->show();}
+ xywh {15 90 130 30} color 52 labelfont 1 labelsize 13
+ }
+ Fl_Button {} {
+ label m
+ callback {if (part->lastnote>=0) minkcounter->value(part->lastnote);
+minkcounter->do_callback();
+maxkcounter->do_callback();}
+ tooltip {set the minimum key to the last pressed key} xywh {315 155 15 12} box THIN_UP_BOX labelsize 10
+ }
+ Fl_Button {} {
+ label M
+ callback {if (part->lastnote>=0) maxkcounter->value(part->lastnote);
+maxkcounter->do_callback();
+minkcounter->do_callback();}
+ tooltip {set the maximum key to the last pressed key} xywh {345 155 15 12} box THIN_UP_BOX labelsize 10
+ }
+ Fl_Button {} {
+ label R
+ callback {minkcounter->value(0);
+minkcounter->do_callback();
+maxkcounter->value(127);
+maxkcounter->do_callback();}
+ tooltip {reset the minimum key to 0 and maximum key to 127} xywh {330 155 15 12} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ Fl_Choice {} {
+ label {MIDI Chn.Rcv.}
+ callback {part->Prcvchn=(int) o->value();} open
+ tooltip {receive from Midi channel} xywh {310 45 70 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Chn%d",i+1);if (i!=9) o->add(nrstr); else o->add("Drms10");};}
+ code1 {o->value(part->Prcvchn);}
+ } {}
+ Fl_Choice keylimitlist {
+ label KLmt
+ callback {int val=0;
+val=atoi(o->text());
+part->setkeylimit(val);} open
+ tooltip {Key Limit} xywh {215 155 50 20} down_box BORDER_BOX labelsize 10 align 8 textfont 1 textsize 10
+ } {}
+ Fl_Choice {} {
+ label {Mode :}
+ callback {if ((int) o->value()==0){ /* Poly (implies no legato) */
+ part->Ppolymode=1;
+ part->Plegatomode=0;
+} else {
+ if ((int) o->value()==1){ /* Mono (implies no legato) */
+ part->Ppolymode=0;
+ part->Plegatomode=0;
+ } else {
+ if ((int) o->value()==2){ /* Legato (implies mono) */
+ part->Ppolymode=0;
+ part->Plegatomode=1;
+ };
+ };
+};} open
+ tooltip {Poly, Mono or Legato mode} xywh {80 130 64 18} down_box BORDER_BOX labelfont 1 labelsize 11 textfont 1 textsize 10
+ code0 {o->add("Poly"); o->add("Mono"); o->add("Legato");}
+ code1 {if (part->Ppolymode!=0) o->value(0); else o->value(1);}
+ code2 {if (part->Ppolymode==0 && part->Plegatomode!=0) o->value(2);}
+ } {}
+ }
+ Fl_Check_Button {} {
+ label Enabled
+ callback {pthread_mutex_lock(&master->mutex);
+master->partonoff(npart,(int) o->value());
+pthread_mutex_unlock(&master->mutex);
+if (part->Penabled==0) partgroupui->deactivate();
+ else partgroupui->activate();}
+ xywh {90 5 75 20} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(part->Penabled);}
+ }
+ }
+ Fl_Window ctlwindow {
+ label Controllers open
+ private xywh {777 261 500 130} type Double box FLAT_BOX visible
+ } {
+ Fl_Check_Button {} {
+ label Expr
+ callback {part->ctl.expression.receive=(int) o->value();}
+ tooltip {Expression enable} xywh {155 55 45 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
+ code0 {o->value(part->ctl.expression.receive);}
+ }
+ Fl_Dial {} {
+ label PanDpth
+ callback {part->ctl.panning.depth=(int) o->value();}
+ tooltip {Panning Depth} xywh {10 55 30 30} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.panning.depth);}
+ class WidgetPDial
+ }
+ Fl_Dial {} {
+ label FltCut
+ callback {part->ctl.filtercutoff.depth=(int) o->value();}
+ tooltip {Filter Cutoff depth} xywh {90 55 30 30} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.filtercutoff.depth);}
+ class WidgetPDial
+ }
+ Fl_Dial {} {
+ label FltQ
+ callback {part->ctl.filterq.depth=(int) o->value();}
+ tooltip {Filter Q depth} xywh {50 55 30 30} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.filterq.depth);}
+ class WidgetPDial
+ }
+ Fl_Dial {} {
+ label BwDpth
+ callback {part->ctl.bandwidth.depth=(int) o->value();}
+ tooltip {BandWidth depth} xywh {125 10 30 30} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.bandwidth.depth);}
+ class WidgetPDial
+ }
+ Fl_Dial {} {
+ label ModWh
+ callback {part->ctl.modwheel.depth=(int) o->value();}
+ tooltip {Modulation Wheel depth} xywh {50 10 30 30} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.modwheel.depth);}
+ class WidgetPDial
+ }
+ Fl_Counter {} {
+ label {PWheelB.Rng (cents)}
+ callback {part->ctl.pitchwheel.bendrange=(int) o->value();}
+ tooltip {Pitch Wheel Bend Range (cents)} xywh {165 15 110 20} labelsize 10 align 1 minimum -6400 maximum 6400 step 1
+ code0 {o->value(part->ctl.pitchwheel.bendrange);}
+ code1 {o->lstep(100);}
+ }
+ Fl_Check_Button {} {
+ label FMamp
+ callback {part->ctl.fmamp.receive=(int) o->value();}
+ tooltip {FM amplitude enable} xywh {205 55 60 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
+ code0 {o->value(part->ctl.fmamp.receive);}
+ }
+ Fl_Check_Button {} {
+ label Vol
+ callback {part->ctl.volume.receive=(int) o->value();}
+ tooltip {Volume enable} xywh {155 80 45 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
+ code0 {o->value(part->ctl.volume.receive);}
+ }
+ Fl_Check_Button {} {
+ label Sustain
+ callback {part->ctl.sustain.receive=(int) o->value();
+if (part->ctl.sustain.receive==0) {
+ part->RelaseSustainedKeys();
+ part->ctl.setsustain(0);
+};}
+ tooltip {Sustain pedal enable} xywh {205 80 60 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
+ code0 {o->value(part->ctl.sustain.receive);}
+ }
+ Fl_Button {} {
+ label Close
+ callback {ctlwindow->hide();}
+ xywh {400 107 95 20} box THIN_UP_BOX
+ }
+ Fl_Button {} {
+ label {Reset all controllers}
+ callback {part->SetController(C_resetallcontrollers,0);}
+ xywh {5 107 210 20} box THIN_UP_BOX
+ }
+ Fl_Group {} {
+ label Portamento
+ xywh {280 15 160 90} box UP_FRAME labelsize 10
+ } {
+ Fl_Check_Button {} {
+ label Rcv
+ callback {part->ctl.portamento.receive=(int) o->value();}
+ tooltip {Receive Portamento Controllers} xywh {285 20 40 20} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
+ code0 {o->value(part->ctl.portamento.receive);}
+ }
+ Fl_Dial {} {
+ label time
+ callback {part->ctl.portamento.time=(int) o->value();}
+ tooltip {Portamento time} xywh {285 60 25 25} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.portamento.time);}
+ class WidgetPDial
+ }
+ Fl_Counter {} {
+ label thresh
+ callback {part->ctl.portamento.pitchthresh=(int) o->value();}
+ tooltip {Minimum or max. difference of the notes in order to do the portamento (x 100 cents)} xywh {340 20 50 20} type Simple labelsize 10 minimum 0 maximum 127 step 1
+ code0 {o->value(part->ctl.portamento.pitchthresh);}
+ }
+ Fl_Check_Button {} {
+ label {th.type}
+ callback {part->ctl.portamento.pitchthreshtype=(int) o->value();}
+ tooltip {Threshold type (min/max)} xywh {365 70 15 15} down_box DOWN_BOX labelsize 10 align 2
+ code0 {o->value(part->ctl.portamento.pitchthreshtype);}
+ }
+ Fl_Box {} {
+ label {x100 cnt.}
+ xywh {340 50 55 15} labelsize 10 align 16
+ }
+ Fl_Dial {} {
+ label {t.dn/up}
+ callback {int x=(int) o->value();
+
+part->ctl.portamento.updowntimestretch=x;}
+ tooltip {Portamento time stretch (up/down)} xywh {315 60 25 25} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.portamento.updowntimestretch);}
+ class WidgetPDial
+ }
+ Fl_Dial propta {
+ label {Prp.Rate}
+ callback {part->ctl.portamento.propRate=(int) o->value();}
+ tooltip {Distance required to double change from nonpropotinal portamento time} xywh {405 20 25 25} labelsize 9 maximum 127 step 1
+ code0 {o->value(part->ctl.portamento.propRate);}
+ class WidgetPDial
+ }
+ Fl_Dial proptb {
+ label {Prp.Dpth}
+ callback {part->ctl.portamento.propDepth=(int) o->value();}
+ tooltip {The difference from nonproportinal portamento} xywh {405 60 25 25} labelsize 9 maximum 127 step 1
+ code0 {o->value(part->ctl.portamento.propDepth);}
+ class WidgetPDial
+ }
+ Fl_Check_Button {} {
+ label {Proprt.}
+ callback {part->ctl.portamento.proportional=(int) o->value();
+if(o->value()){propta->activate();proptb->activate();}
+else {propta->deactivate();proptb->deactivate();}}
+ tooltip {Enable Proportinal Portamento (over fixed Portamento)} xywh {285 40 50 15} box THIN_UP_BOX down_box DOWN_BOX labelsize 9
+ code0 {o->value(part->ctl.portamento.proportional);}
+ code1 {if(o->value()){propta->activate();proptb->activate();}}
+ code2 {else {propta->deactivate();proptb->deactivate();}}
+ }
+ }
+ Fl_Group {} {
+ label Resonance
+ xywh {445 15 50 90} box UP_FRAME labelsize 10
+ } {
+ Fl_Dial {} {
+ label BWdpth
+ callback {part->ctl.resonancebandwidth.depth=(int) o->value();}
+ tooltip {BandWidth controller depth} xywh {455 60 25 25} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.resonancebandwidth.depth);}
+ class WidgetPDial
+ }
+ Fl_Dial {} {
+ label CFdpth
+ callback {part->ctl.resonancecenter.depth=(int) o->value();}
+ tooltip {Center Frequency controller Depth} xywh {455 20 25 25} labelsize 10 maximum 127 step 1
+ code0 {o->value(part->ctl.resonancecenter.depth);}
+ class WidgetPDial
+ }
+ }
+ Fl_Check_Button {} {
+ label {Exp MWh}
+ callback {part->ctl.modwheel.exponential=(int) o->value();}
+ tooltip {Exponential modulation wheel} xywh {10 15 40 25} down_box DOWN_BOX labelsize 10 align 148
+ code0 {o->value(part->ctl.modwheel.exponential);}
+ }
+ Fl_Check_Button {} {
+ label {Exp BW}
+ callback {part->ctl.bandwidth.exponential=(int) o->value();}
+ tooltip {Exponential BandWidth Controller} xywh {85 15 35 25} down_box DOWN_BOX labelsize 10 align 148
+ code0 {o->value(part->ctl.bandwidth.exponential);}
+ }
+ }
+ Fl_Window partfx {
+ label {Part's Insert Effects} selected
+ private xywh {554 660 390 145} type Double box FLAT_BOX visible
+ } {
+ Fl_Counter inseffnocounter {
+ label {FX No.}
+ callback {ninseff=(int) o->value()-1;
+insefftype->value(part->partefx[ninseff]->geteffect());
+//insefftype->do_callback();
+inseffectui->refresh(part->partefx[ninseff]);
+int x=part->Pefxroute[ninseff];
+if (x==127) x=1;
+bypasseff->value(part->Pefxbypass[ninseff]);
+
+sendtochoice->value(x);}
+ xywh {5 110 80 20} type Simple labelfont 1 align 6 minimum 1 maximum 127 step 1 textfont 1
+ code0 {o->bounds(1,NUM_PART_EFX);}
+ code1 {o->value(ninseff+1);}
+ }
+ Fl_Choice insefftype {
+ label EffType
+ callback {pthread_mutex_lock(part->mutex);
+part->partefx[ninseff]->changeeffect((int) o->value());
+pthread_mutex_unlock(part->mutex);
+inseffectui->refresh(part->partefx[ninseff]);}
+ xywh {155 110 70 15} down_box BORDER_BOX labelsize 10 align 6
+ code0 {o->value(part->partefx[ninseff]->geteffect());}
+ } {
+ MenuItem {} {
+ label {No Effect}
+ xywh {35 35 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Reverb
+ xywh {45 45 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Echo
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Chorus
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Phaser
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label AlienWah
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label Distortion
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label EQ
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label DynFilter
+ xywh {110 110 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Group inseffectuigroup {
+ xywh {5 5 380 100} box FLAT_BOX color 48
+ } {
+ Fl_Group inseffectui {
+ xywh {5 5 380 95}
+ code0 {o->init(part->partefx[ninseff]);}
+ class EffUI
+ } {}
+ }
+ Fl_Button {} {
+ label Close
+ callback {partfx->hide();}
+ xywh {325 115 60 20} box THIN_UP_BOX
+ }
+ Fl_Choice sendtochoice {
+ label {Send To.}
+ callback {int x=(int) o->value();
+part->Pefxroute[ninseff]=x;
+if (x==2) part->partefx[ninseff]->setdryonly(true);
+ else part->partefx[ninseff]->setdryonly(false);}
+ xywh {235 110 80 15} down_box BORDER_BOX labelsize 10 align 6
+ code0 {int x=part->Pefxroute[ninseff]; if (x==127) x=1;}
+ code1 {o->value(x);}
+ } {
+ MenuItem {} {
+ label {Next Effect}
+ xywh {45 45 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Part Out}
+ xywh {55 55 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {Dry Out}
+ xywh {65 65 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Check_Button bypasseff {
+ label bypass
+ callback {part->Pefxbypass[ninseff]=(((int)o->value())!=0);}
+ tooltip {if the effect is not used (is bypassed)} xywh {90 110 60 15} down_box DOWN_BOX labelsize 11
+ code0 {int x=part->Pefxbypass[ninseff];o->value(x);}
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(part->partefx[ninseff]);}
+ xywh {90 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {pthread_mutex_lock(&master->mutex);
+presetsui->paste(part->partefx[ninseff],inseffectui);
+pthread_mutex_unlock(&master->mutex);}
+ xywh {120 127 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ }
+ Fl_Window instrumentkitlist {
+ label {Instrument Kit} open
+ xywh {586 566 670 370} type Double box FLAT_BOX visible
+ } {
+ Fl_Button {} {
+ label {Close Window}
+ callback {instrumentkitlist->hide();}
+ xywh {375 350 160 20} box THIN_UP_BOX
+ }
+ Fl_Scroll kitlist {open
+ xywh {0 15 670 330} type VERTICAL box UP_FRAME
+ code0 {if (part->Pkitmode==0) o->deactivate();}
+ } {
+ Fl_Pack {} {
+ xywh {0 20 670 320}
+ code0 {for (int i=0;i<NUM_KIT_ITEMS;i++){partkititem[i]=new PartKitItem(0,0,670,20,"");partkititem[i]->init(part,i,master,this);}}
+ } {}
+ }
+ Fl_Box {} {
+ label {No.}
+ xywh {5 0 25 15} labelfont 1 labelsize 11 align 18
+ }
+ Fl_Box {} {
+ label {M.}
+ xywh {55 0 25 15} labelfont 1 labelsize 11 align 18
+ }
+ Fl_Box {} {
+ label {Min.k}
+ xywh {235 0 40 15} labelfont 1 labelsize 11 align 18
+ }
+ Fl_Box {} {
+ label {Max.k}
+ xywh {345 0 40 15} labelfont 1 labelsize 11 align 18
+ }
+ Fl_Box {} {
+ label ADsynth
+ xywh {405 0 50 15} labelfont 1 labelsize 11 align 18
+ }
+ Fl_Box {} {
+ label SUBsynth
+ xywh {470 0 60 15} labelfont 1 labelsize 11 align 18
+ }
+ Fl_Choice {} {
+ label Mode
+ callback {part->Pkitmode=(int) o->value();
+if (part->Pkitmode==0) {
+ kitlist->deactivate();
+ } else {
+ kitlist->activate();
+};}
+ xywh {35 350 70 15} down_box BORDER_BOX labelsize 11 textfont 1 textsize 11
+ code0 {o->value(part->Pkitmode);}
+ } {
+ MenuItem {} {
+ label OFF
+ xywh {0 0 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label MULTI
+ xywh {10 10 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label SINGLE
+ xywh {20 20 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Check_Button {} {
+ label {Drum mode}
+ callback {part->Pdrummode=(int) o->value();}
+ xywh {285 350 70 15} down_box DOWN_BOX labelsize 10
+ code0 {o->value(part->Pdrummode);}
+ }
+ Fl_Box {} {
+ label {FX.r.}
+ xywh {620 0 30 15} labelfont 1 labelsize 11 align 18
+ }
+ Fl_Box {} {
+ label PADsynth
+ xywh {540 0 60 15} labelfont 1 labelsize 11 align 18
+ }
+ }
+ Fl_Window instrumenteditwindow {
+ label {Instrument Edit} open
+ xywh {247 621 395 360} type Double box FLAT_BOX visible
+ } {
+ Fl_Group {} {
+ xywh {0 220 395 110} box UP_FRAME
+ } {
+ Fl_Group {} {
+ label PADsynth
+ xywh {205 245 100 80} box ENGRAVED_FRAME labelfont 1
+ } {
+ Fl_Button padeditbutton {
+ label Edit
+ callback {showparameters(0,2);}
+ xywh {215 280 80 35} color 51 selection_color 51 labelfont 1 labelsize 13 align 128
+ code0 {if (part->kit[0].Ppadenabled==0) o->deactivate();}
+ }
+ Fl_Check_Button padsynenabledcheck {
+ label Enabled
+ callback {int x=(int) o->value();
+part->kit[0].Ppadenabled=x;
+if (x==0) padeditbutton->deactivate();
+ else padeditbutton->activate();}
+ tooltip {enable/disable PADsynth} xywh {215 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11
+ code1 {o->value(part->kit[0].Ppadenabled);}
+ }
+ }
+ Fl_Group {} {
+ label ADsynth
+ xywh {5 245 100 80} box ENGRAVED_FRAME labelfont 1
+ } {
+ Fl_Check_Button adsynenabledcheck {
+ label Enabled
+ callback {int x=(int) o->value();
+part->kit[0].Padenabled=x;
+if (x==0) adeditbutton->deactivate();
+ else adeditbutton->activate();}
+ tooltip {enable/disable ADsynth} xywh {15 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11
+ code1 {o->value(part->kit[0].Padenabled);}
+ }
+ Fl_Button adeditbutton {
+ label Edit
+ callback {showparameters(0,0);}
+ xywh {15 281 80 34} color 51 selection_color 51 labelfont 1 labelsize 13 align 128
+ code0 {if (part->kit[0].Padenabled==0) o->deactivate();}
+ }
+ }
+ Fl_Group {} {
+ label SUBsynth
+ xywh {105 245 100 80} box ENGRAVED_FRAME labelfont 1
+ } {
+ Fl_Check_Button subsynenabledcheck {
+ label Enabled
+ callback {int x=(int) o->value();
+part->kit[0].Psubenabled=x;
+if (x==0) subeditbutton->deactivate();
+ else subeditbutton->activate();}
+ tooltip {enable/disable SUBsynth} xywh {115 255 80 20} box UP_BOX down_box DOWN_BOX color 51 selection_color 0 labelfont 1 labelsize 11
+ code1 {o->value(part->kit[0].Psubenabled);}
+ }
+ Fl_Button subeditbutton {
+ label Edit
+ callback {showparameters(0,1);}
+ xywh {115 280 80 35} color 51 selection_color 51 labelfont 1 labelsize 13 align 128
+ code0 {if (part->kit[0].Psubenabled==0) o->deactivate();}
+ }
+ }
+ Fl_Button {} {
+ label {Kit Edit}
+ callback {instrumentkitlist->show();}
+ xywh {310 245 80 35} color 51 selection_color 51 labelfont 1 align 128
+ }
+ Fl_Button {} {
+ label Effects
+ callback {partfx->show();}
+ xywh {310 290 80 35} color 51 selection_color 51 labelfont 1 labelsize 13
+ }
+ }
+ Fl_Group {} {
+ xywh {0 5 395 215} box UP_FRAME
+ } {
+ Fl_Input {} {
+ label {Author and Copyright}
+ callback {snprintf((char *)part->info.Pauthor,MAX_INFO_TEXT_SIZE,"%s",o->value());}
+ xywh {5 60 385 50} type Multiline color 124 labelsize 10 align 5
+ code0 {o->maximum_size(MAX_INFO_TEXT_SIZE);}
+ code1 {o->value((char *) &part->info.Pauthor);}
+ }
+ Fl_Input {} {
+ label Comments
+ callback {snprintf((char *)part->info.Pcomments,MAX_INFO_TEXT_SIZE,"%s",o->value());}
+ xywh {5 125 385 90} type Multiline color 124 labelsize 11 align 5
+ code0 {o->maximum_size(MAX_INFO_TEXT_SIZE);}
+ code1 {o->value((char *) &part->info.Pcomments);}
+ }
+ Fl_Choice {} {
+ label {Type:}
+ callback {part->info.Ptype=o->value();}
+ xywh {5 25 155 20} down_box BORDER_BOX labelfont 1 labelsize 11 align 5 textsize 10
+ code0 {o->value(part->info.Ptype);}
+ } {
+ MenuItem {} {
+ label {--------------------------}
+ xywh {20 20 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Piano
+ xywh {10 10 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {Chromatic Percussion}
+ xywh {20 20 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Organ
+ xywh {30 30 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Guitar
+ xywh {40 40 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Bass
+ xywh {50 50 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {Solo Strings}
+ xywh {60 60 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Ensemble
+ xywh {70 70 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Brass
+ xywh {80 80 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Reed
+ xywh {90 90 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Pipe
+ xywh {100 100 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {Synth Lead}
+ xywh {110 110 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {Synth Pad}
+ xywh {120 120 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {Synth Effects}
+ xywh {130 130 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Ethnic
+ xywh {140 140 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Percussive
+ xywh {150 150 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {Sound Effects}
+ xywh {160 160 100 20} labelfont 1 labelsize 11
+ }
+ }
+ }
+ Fl_Button {} {
+ label Close
+ callback {instrumenteditwindow->hide();}
+ xywh {150 335 95 25} box THIN_UP_BOX
+ }
+ }
+ }
+ Function {PartUI(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {part=NULL;
+adnoteui=NULL;
+subnoteui=NULL;
+padnoteui=NULL;
+lastkititem=-1;} {}
+ }
+ Function {init(Part *part_,Master *master_,int npart_,BankUI *bankui_)} {} {
+ code {bankui=bankui_;
+part=part_;
+npart=npart_;
+master=master_;
+ninseff=0;
+
+make_window();
+\#ifdef NTK_GUI
+adsynenabledcheck->selection_color(55);
+subsynenabledcheck->selection_color(55);
+padsynenabledcheck->selection_color(55);
+\#endif
+partgroup->position(this->parent()->x()+2,this->parent()->y()+2);
+partgroup->show();
+end();
+
+
+//if (config.ui.showinstrumentinfo!=0) instrumenteditwindow->show();
+
+int klimits[]={1,2,3,4,5,6,7,8,9,10,15,20,30,50,100,0};
+
+keylimitlist->add("OFF");
+int k=0;
+int val=-1;
+char tmp[10];
+while (klimits[k]!=0){
+ sprintf(tmp,"%d",klimits[k]);
+ keylimitlist->add(tmp);
+ if (val==-1){
+ if (klimits[k]>part->Pkeylimit) val=k;
+ };
+ k++;
+};
+
+if (val==-1) val=k;
+keylimitlist->value(val);} {}
+ }
+ Function {showparameters(int kititem,int engine)} {} {
+ code {if (engine==-1){//this is used if I want to clear the engine from the part
+ if (kititem==lastkititem) kititem=-1;
+ else kititem=lastkititem;
+};
+
+if (kititem!=lastkititem){
+ if (adnoteui!=NULL) delete (adnoteui);
+ if (subnoteui!=NULL) delete (subnoteui);
+ if (padnoteui!=NULL) delete (padnoteui);
+ adnoteui=NULL;subnoteui=NULL;padnoteui=NULL;
+ lastkititem=kititem;
+
+ if (kititem>=NUM_KIT_ITEMS) return;//bad kit item
+ if (kititem<0) return;
+
+ if (part->kit[kititem].adpars!=NULL)
+ adnoteui=new ADnoteUI(part->kit[kititem].adpars,master);
+
+ if (part->kit[kititem].subpars!=NULL)
+ subnoteui=new SUBnoteUI(part->kit[kititem].subpars);
+
+ if (part->kit[kititem].padpars!=NULL)
+ padnoteui=new PADnoteUI(part->kit[kititem].padpars,master);
+
+};
+
+
+
+if ((engine==0)&&(adnoteui!=NULL)) adnoteui->ADnoteGlobalParameters->show();
+if ((engine==1)&&(subnoteui!=NULL)) subnoteui->SUBparameters->show();
+if ((engine==2)&&(adnoteui!=NULL)) padnoteui->padnotewindow->show();} {}
+ }
+ Function {~PartUI()} {} {
+ code {if (adnoteui!=NULL) delete (adnoteui);
+if (subnoteui!=NULL) delete (subnoteui);
+if (padnoteui!=NULL) delete (padnoteui);
+
+partgroup->hide();
+//delete(partgroup);
+
+ctlwindow->hide();
+delete(ctlwindow);
+
+partfx->hide();
+delete(partfx);
+
+instrumentkitlist->hide();
+delete(instrumentkitlist);
+
+instrumenteditwindow->hide();
+delete(instrumenteditwindow);} {}
+ }
+ decl {Part *part;} {}
+ decl {Master *master;} {}
+ decl {BankUI *bankui;} {}
+ decl {ADnoteUI *adnoteui;} {}
+ decl {SUBnoteUI *subnoteui;} {}
+ decl {PADnoteUI *padnoteui;} {}
+ decl {PartSysEffSend *psyef[NUM_SYS_EFX];} {}
+ decl {int npart;} {}
+ decl {int ninseff;} {}
+ decl {int lastkititem;} {}
+ decl {PartKitItem *partkititem[NUM_KIT_ITEMS];} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/PresetsUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PresetsUI.fl
new file mode 100644
index 0000000..5eafc47
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/PresetsUI.fl
@@ -0,0 +1,278 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {\#include <FL/fl_ask.H>} {selected public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include "../Params/PresetsArray.h"} {}
+
+decl {\#include "../Params/Presets.h"} {public
+}
+
+class PresetsUI_ {} {
+ Function {refresh()} {open return_type {virtual void}
+ } {
+ code {;} {}
+ }
+ Function {~PresetsUI_()} {open return_type virtual
+ } {
+ code {;} {}
+ }
+}
+
+class PresetsUI {} {
+ Function {PresetsUI()} {} {
+ code {p=NULL;
+make_window();} {}
+ }
+ Function {~PresetsUI()} {} {
+ code {copywin->hide();delete(copywin);
+pastewin->hide();delete(pastewin);} {}
+ }
+ Function {make_window()} {} {
+ Fl_Window copywin {
+ label {Copy to Clipboard/Preset}
+ xywh {190 173 265 430} type Double box THIN_UP_BOX color 238 hide modal
+ } {
+ Fl_Browser copybrowse {
+ callback {int val=o->value();
+if (val!=0){
+ presetname->cut(0,presetname->maximum_size());
+ presetname->insert(o->text(val));
+};}
+ xywh {10 25 245 320} type Select
+ }
+ Fl_Button copypbutton {
+ label {Copy to Preset}
+ callback {const char *tmp=presetname->value();
+if (tmp!=NULL) {
+ if (strlen(tmp)>0){
+ p->copy(tmp);
+ copywin->hide();
+ };
+};}
+ xywh {145 355 110 20} box THIN_UP_BOX
+ }
+ Fl_Button copybutton {
+ label {Copy to Clipboard}
+ callback {p->copy(NULL);
+copywin->hide();}
+ xywh {25 385 90 35} box THIN_UP_BOX align 192
+ }
+ Fl_Button {} {
+ label Cancel
+ callback {copywin->hide();}
+ xywh {160 385 80 35} box THIN_UP_BOX align 192
+ }
+ Fl_Box {} {
+ label {Type:}
+ xywh {10 5 40 15} labelsize 11 align 20
+ }
+ Fl_Box copytypetext {
+ xywh {50 5 205 15} box FLAT_BOX color 238 labelfont 1 labelsize 11 align 20
+ }
+ Fl_Input presetname {
+ callback {const char *tmp=o->value();
+if (tmp==NULL) tmp="";
+if (strlen(tmp)>0) {
+ copybutton->deactivate();
+ copypbutton->activate();
+} else {
+ copybutton->activate();
+ copypbutton->deactivate();
+};}
+ xywh {10 355 130 20} when 1
+ }
+ }
+ Fl_Window pastewin {
+ label {Paste from Clipboard/Preset}
+ xywh {463 173 265 430} type Double box THIN_UP_BOX color 238 hide modal
+ } {
+ Fl_Browser pastebrowse {
+ callback {if (o->value()==0) {
+ pastepbutton->deactivate();
+ deletepbutton->deactivate();
+}else{
+ pastepbutton->activate();
+ deletepbutton->activate();
+};}
+ xywh {10 25 245 320} type Hold
+ }
+ Fl_Button pastepbutton {
+ label {Paste from Preset}
+ callback {int n=pastebrowse->value();
+if (n!=0) p->paste(n);
+pastewin->hide();
+pui->refresh();}
+ xywh {10 355 160 20} box THIN_UP_BOX
+ }
+ Fl_Button pastebutton {
+ label {Paste from Clipboard}
+ callback {p->paste(0);
+pastewin->hide();
+pui->refresh();}
+ xywh {25 385 90 35} box THIN_UP_BOX align 192
+ }
+ Fl_Button {} {
+ label Cancel
+ callback {pastewin->hide();}
+ xywh {160 385 80 35} box THIN_UP_BOX align 192
+ }
+ Fl_Box pastetypetext {
+ xywh {55 5 200 15} box FLAT_BOX color 238 labelfont 1 labelsize 11 align 20
+ }
+ Fl_Box {} {
+ label {Type:}
+ xywh {15 5 40 15} labelsize 11 align 20
+ }
+ Fl_Button deletepbutton {
+ label Delete
+ callback {int n=pastebrowse->value();
+
+if (this->p_is_PresetArray) {
+ PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
+ if (n!=0) pre->deletepreset(n);
+ rescanArray();
+} else {
+ if (n!=0) p->deletepreset(n);
+ rescan();
+}} selected
+ xywh {180 355 75 20} box THIN_UP_BOX
+ }
+ }
+ }
+ Function {copy(Presets *p)} {} {
+ code {copybutton->activate();
+copypbutton->deactivate();
+
+
+this->p=p;
+this->pui=NULL;
+bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
+presetname->cut(0,presetname->maximum_size());
+
+if (but) p->copy(NULL);
+ else {
+ rescan();
+ copytypetext->label(&p->type[1]);
+ copywin->show();
+ };} {}
+ }
+ Function {paste(Presets *p,PresetsUI_ *pui)} {} {
+ code {this->p=p;
+this->pui=pui;
+bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
+pastepbutton->deactivate();
+deletepbutton->deactivate();
+
+if (but) {
+ p->paste(0);
+ pui->refresh();
+} else {
+ rescan();
+ pastetypetext->label(&p->type[1]);
+ if (p->checkclipboardtype()) pastebutton->activate();
+ else pastebutton->deactivate();
+ this->p_is_PresetArray = false;
+ pastewin->show();
+ };} {}
+ }
+ Function {copy(Presets *p,int n)} {} {
+ code {PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
+if(pre)
+ pre->setelement(n);
+copyArray(p);} {}
+ }
+ Function {paste(Presets *p,PresetsUI_ *pui,int n)} {} {
+ code {PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
+if(pre)
+ pre->setelement(n);
+pasteArray(p,pui);} {}
+ }
+ Function {rescan()} {} {
+ code {copybrowse->clear();
+pastebrowse->clear();
+p->rescanforpresets();
+
+for (unsigned int i=0;i<presetsstore.presets.size();i++){
+ std::string name=presetsstore.presets[i].name;
+ if(name.empty())
+ continue;
+ copybrowse->add(name.c_str());
+ pastebrowse->add(name.c_str());
+};} {}
+ }
+ decl {Presets *p;} {public local
+ }
+ decl {PresetsUI_ *pui;} {public local
+ }
+ Function {copyArray(Presets *p)} {open
+ } {
+ code {PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
+
+copybutton->activate();
+copypbutton->deactivate();
+
+this->p=p;
+this->pui=NULL;
+bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
+presetname->cut(0,presetname->maximum_size());
+
+if (but) pre->copy(NULL);
+ else {
+ rescanArray();
+ copytypetext->label(&pre->type[1]);
+ copywin->show();
+ };} {}
+ }
+ Function {pasteArray(Presets *p,PresetsUI_ *pui)} {open
+ } {
+ code {PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
+
+this->p=p;
+this->pui=pui;
+bool but=(Fl::event_button()!=FL_LEFT_MOUSE);
+pastepbutton->deactivate();
+deletepbutton->deactivate();
+
+if (but) {
+ pre->paste(0);
+ pui->refresh();
+} else {
+ rescanArray();
+ pastetypetext->label(&pre->type[1]);
+ if (pre->checkclipboardtype()) pastebutton->activate();
+ else pastebutton->deactivate();
+ this->p_is_PresetArray = true;
+ pastewin->show();
+ };} {}
+ }
+ Function {rescanArray()} {open
+ } {
+ code {PresetsArray *pre = dynamic_cast<PresetsArray *>(p);
+
+copybrowse->clear();
+pastebrowse->clear();
+pre->rescanforpresets();
+
+for (unsigned int i=0;i<presetsstore.presets.size();i++){
+ std::string name=presetsstore.presets[i].name;
+ if(name.empty())
+ continue;
+ copybrowse->add(name.c_str());
+ pastebrowse->add(name.c_str());
+};} {}
+ }
+ decl {bool p_is_PresetArray;} {public
+ }
+}
+
+decl {PresetsUI *presetsui;} {public
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl
new file mode 100644
index 0000000..f1b887c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl
@@ -0,0 +1,398 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include <FL/Fl_Box.H>} {public
+}
+
+decl {\#include <FL/fl_draw.H>} {public
+}
+
+decl {\#include <FL/Fl_Value_Output.H>} {public
+}
+
+decl {\#include <math.h>} {}
+
+decl {\#include <stdio.h>} {}
+
+decl {\#include <stdlib.h>} {}
+
+decl {\#include <string.h>} {}
+
+decl {\#include "../Synth/Resonance.h"} {public
+}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+class ResonanceGraph {open : {public Fl_Box}
+} {
+ Function {ResonanceGraph(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {respar=NULL;
+cbwidget=NULL;
+applybutton=NULL;} {}
+ }
+ Function {init(Resonance *respar_,Fl_Value_Output *khzvalue_,Fl_Value_Output *dbvalue_)} {} {
+ code {respar=respar_;
+khzvalue=khzvalue_;
+dbvalue=dbvalue_;
+oldx=-1;
+khzval=-1;} {}
+ }
+ Function {draw_freq_line(float freq,int type)} {open
+ } {
+ code {float freqx=respar->getfreqpos(freq);
+switch(type){
+ case 0:fl_line_style(FL_SOLID);break;
+ case 1:fl_line_style(FL_DOT);break;
+ case 2:fl_line_style(FL_DASH);break;
+};
+
+
+if ((freqx>0.0)&&(freqx<1.0))
+ fl_line(x()+(int) (freqx*w()),y(),
+ x()+(int) (freqx*w()),y()+h());} {}
+ }
+ Function {draw()} {open
+ } {
+ code {int ox=x(),oy=y(),lx=w(),ly=h(),i,ix,iy,oiy;
+float freqx;
+
+fl_color(FL_DARK1);
+fl_rectf(ox,oy,lx,ly);
+
+
+//draw the lines
+fl_color(FL_GRAY);
+
+fl_line_style(FL_SOLID);
+fl_line(ox+2,oy+ly/2,ox+lx-2,oy+ly/2);
+
+freqx=respar->getfreqpos(1000.0);
+if ((freqx>0.0)&&(freqx<1.0))
+ fl_line(ox+(int) (freqx*lx),oy,
+ ox+(int) (freqx*lx),oy+ly);
+
+for (i=1;i<10;i++){
+ if(i==1){
+ draw_freq_line(i*100.0,0);
+ draw_freq_line(i*1000.0,0);
+ }else
+ if (i==5){
+ draw_freq_line(i*100.0,2);
+ draw_freq_line(i*1000.0,2);
+ }else{
+ draw_freq_line(i*100.0,1);
+ draw_freq_line(i*1000.0,1);
+ };
+};
+
+draw_freq_line(10000.0,0);
+draw_freq_line(20000.0,1);
+
+fl_line_style(FL_DOT);
+int GY=10;if (ly<GY*3) GY=-1;
+for (i=1;i<GY;i++){
+ int tmp=(int)(ly/(float)GY*i);
+ fl_line(ox+2,oy+tmp,ox+lx-2,oy+tmp);
+};
+
+
+
+//draw the data
+fl_color(FL_RED);
+fl_line_style(FL_SOLID,2);
+fl_begin_line();
+oiy=(int)(respar->Prespoints[0]/128.0*ly);
+for (i=1;i<N_RES_POINTS;i++){
+ ix=(int)(i*1.0/N_RES_POINTS*lx);
+ iy=(respar->Prespoints[i]/128.0*ly);
+ fl_vertex(ox+ix,oy+ly-oiy);
+ oiy=iy;
+};
+fl_end_line();
+fl_line_style(FL_SOLID,0);} {selected
+ }
+ }
+ Function {handle(int event)} {return_type int
+ } {
+ code {int x_=Fl::event_x()-x();
+int y_=Fl::event_y()-y();
+if ( (x_>=0)&&(x_<w()) && (y_>=0)&&(y_<h())){
+ khzvalue->value(respar->getfreqx(x_*1.0/w())/1000.0);
+ dbvalue->value((1.0-y_*2.0/h())*respar->PmaxdB);
+};
+
+if ((event==FL_PUSH)||(event==FL_DRAG)){
+ int leftbutton=1;
+ if (Fl::event_button()==FL_RIGHT_MOUSE) leftbutton=0;
+ if (x_<0) x_=0;if (y_<0) y_=0;
+ if (x_>=w()) x_=w();if (y_>=h()-1) y_=h()-1;
+
+ if ((oldx<0)||(oldx==x_)){
+ int sn=(int)(x_*1.0/w()*N_RES_POINTS);
+ int sp=127-(int)(y_*1.0/h()*127);
+ if (leftbutton!=0) respar->setpoint(sn,sp);
+ else respar->setpoint(sn,64);
+ } else {
+ int x1=oldx;
+ int x2=x_;
+ int y1=oldy;
+ int y2=y_;
+ if (oldx>x_){
+ x1=x_;y1=y_;
+ x2=oldx;y2=oldy;
+ };
+ for (int i=0;i<x2-x1;i++){
+ int sn=(int)((i+x1)*1.0/w()*N_RES_POINTS);
+ float yy=(y2-y1)*1.0/(x2-x1)*i;
+ int sp=127-(int)((y1+yy)/h()*127);
+ if (leftbutton!=0) respar->setpoint(sn,sp);
+ else respar->setpoint(sn,64);
+ };
+ };
+
+ oldx=x_;oldy=y_;
+ redraw();
+};
+
+if (event==FL_RELEASE) {
+ oldx=-1;
+ if (cbwidget!=NULL) {
+ cbwidget->do_callback();
+ if (applybutton!=NULL) {
+ applybutton->color(FL_RED);
+ applybutton->redraw();
+
+ };
+ };
+};
+
+return(1);} {}
+ }
+ Function {setcbwidget(Fl_Widget *cbwidget,Fl_Widget *applybutton)} {} {
+ code {this->cbwidget=cbwidget;
+this->applybutton=applybutton;} {}
+ }
+ decl {Fl_Value_Output *khzvalue;} {}
+ decl {Fl_Value_Output *dbvalue;} {}
+ decl {Resonance *respar;} {}
+ decl {int oldx,oldy;} {}
+ decl {float khzval;} {public
+ }
+ decl {Fl_Widget *cbwidget,*applybutton;} {}
+}
+
+class ResonanceUI {open : PresetsUI_
+} {
+ Function {make_window()} {open
+ } {
+ Fl_Window resonancewindow {
+ label Resonance open
+ xywh {120 70 780 305} type Double hide
+ } {
+ Fl_Value_Output khzvalue {
+ label kHz
+ xywh {415 264 45 18} labelsize 12 align 8 minimum 0.001 maximum 48 step 0.01 textfont 1 textsize 12
+ code0 {//this widget must be before the calling widgets}
+ }
+ Fl_Value_Output dbvalue {
+ label dB
+ xywh {415 282 45 18} labelsize 12 align 8 minimum -150 maximum 150 step 0.1 textfont 1 textsize 12
+ code0 {//this widget must be before the calling widgets}
+ }
+ Fl_Group {} {
+ xywh {6 5 768 256} box BORDER_BOX
+ code0 {rg=new ResonanceGraph(o->x(),o->y(),o->w(),o->h(),"");}
+ code1 {rg->init(respar,khzvalue,dbvalue);}
+ code2 {rg->show();}
+ } {}
+ Fl_Button {} {
+ label Close
+ callback {resonancewindow->hide();}
+ xywh {690 283 84 17} box THIN_UP_BOX
+ }
+ Fl_Button {} {
+ label Zero
+ callback {for (int i=0;i<N_RES_POINTS;i++)
+ respar->setpoint(i,64);
+resonancewindow->redraw();
+redrawPADnoteApply();}
+ tooltip {Clear the resonance function} xywh {491 264 66 15} box THIN_UP_BOX labelfont 1 labelsize 12
+ }
+ Fl_Button {} {
+ label Smooth
+ callback {respar->smooth();
+resonancewindow->redraw();
+redrawPADnoteApply();}
+ tooltip {Smooth the resonance function} xywh {491 282 66 18} box THIN_UP_BOX labelfont 1 labelsize 12
+ }
+ Fl_Check_Button enabled {
+ label Enable
+ callback {respar->Penabled=(int) o->value();
+redrawPADnoteApply();}
+ xywh {6 270 78 27} box THIN_UP_BOX down_box DOWN_BOX
+ code0 {o->value(respar->Penabled);}
+ }
+ Fl_Roller maxdb {
+ callback {maxdbvo->value(o->value());
+respar->PmaxdB=(int) o->value();
+redrawPADnoteApply();}
+ xywh {90 282 84 15} type Horizontal minimum 1 maximum 90 step 1 value 30
+ }
+ Fl_Value_Output maxdbvo {
+ label {Max.}
+ callback {o->value(respar->PmaxdB);}
+ tooltip {The Maximum amplitude (dB)} xywh {126 264 24 18} labelsize 12 minimum 1 maximum 127 step 1 value 30 textfont 1 textsize 12
+ code0 {o->value(respar->PmaxdB);}
+ }
+ Fl_Box {} {
+ label dB
+ xywh {150 264 24 18}
+ }
+ Fl_Value_Output centerfreqvo {
+ label {C.f.}
+ callback {o->value(respar->getcenterfreq()/1000.0);}
+ tooltip {Center Frequency (kHz)} xywh {210 264 33 18} labelsize 12 when 3 minimum 1 maximum 10 step 0.01 value 1 textfont 1 textsize 12
+ code0 {o->value(respar->getcenterfreq()/1000.0);}
+ }
+ Fl_Value_Output octavesfreqvo {
+ label {Oct.}
+ callback {o->value(respar->getoctavesfreq());}
+ tooltip {No. of octaves} xywh {210 282 33 18} labelsize 12 when 3 minimum 1 maximum 127 step 1 value 30 textfont 1 textsize 12
+ code0 {o->value(respar->getoctavesfreq());}
+ }
+ Fl_Button {} {
+ label RND2
+ callback {respar->randomize(1);
+resonancewindow->redraw();
+redrawPADnoteApply();}
+ tooltip {Randomize the resonance function} xywh {566 276 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ Fl_Button {} {
+ label RND1
+ callback {respar->randomize(0);
+resonancewindow->redraw();
+redrawPADnoteApply();}
+ tooltip {Randomize the resonance function} xywh {566 264 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ Fl_Button {} {
+ label RND3
+ callback {respar->randomize(2);
+resonancewindow->redraw();
+redrawPADnoteApply();}
+ tooltip {Randomize the resonance function} xywh {566 288 42 12} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ Fl_Check_Button p1st {
+ label {P.1st}
+ callback {respar->Pprotectthefundamental=(int) o->value();
+redrawPADnoteApply();}
+ tooltip {Protect the fundamental frequency (do not damp the first harmonic)} xywh {365 285 45 15} down_box DOWN_BOX labelsize 10
+ code0 {o->value(respar->Pprotectthefundamental);}
+ }
+ Fl_Button {} {
+ label InterpP
+ callback {int type;
+if (Fl::event_button()==FL_LEFT_MOUSE) type=0;
+ else type=1;
+respar->interpolatepeaks(type);
+resonancewindow->redraw();
+redrawPADnoteApply();}
+ tooltip {Interpolate the peaks} xywh {365 265 46 15} box THIN_UP_BOX labelfont 1 labelsize 10
+ }
+ Fl_Dial centerfreq {
+ label {C.f.}
+ callback {respar->Pcenterfreq=(int)o->value();
+centerfreqvo->do_callback();
+rg->redraw();
+redrawPADnoteApply();}
+ xywh {245 265 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(respar->Pcenterfreq);}
+ class WidgetPDial
+ }
+ Fl_Dial octavesfreq {
+ label {Oct.}
+ callback {respar->Poctavesfreq=(int)o->value();
+octavesfreqvo->do_callback();
+rg->redraw();
+redrawPADnoteApply();}
+ xywh {280 265 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(respar->Poctavesfreq);}
+ class WidgetPDial
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(respar);}
+ xywh {625 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(respar,this);}
+ xywh {655 275 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button applybutton {
+ label Apply
+ callback {applybutton->color(FL_GRAY);
+applybutton->redraw();
+if (cbapplywidget!=NULL) {
+ cbapplywidget->do_callback();
+ cbapplywidget->color(FL_GRAY);
+ cbapplywidget->redraw();
+};}
+ xywh {690 265 85 15} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ }
+ }
+ Function {ResonanceUI(Resonance *respar_)} {} {
+ code {respar=respar_;
+cbwidget=NULL;
+cbapplywidget=NULL;
+make_window();
+applybutton->hide();} {}
+ }
+ Function {~ResonanceUI()} {} {
+ code {resonancewindow->hide();} {}
+ }
+ Function {redrawPADnoteApply()} {} {
+ code {if (cbwidget!=NULL) {
+ cbwidget->do_callback();
+ applybutton->color(FL_RED);
+ applybutton->redraw();
+};} {}
+ }
+ Function {setcbwidget(Fl_Widget *cbwidget,Fl_Widget *cbapplywidget)} {} {
+ code {this->cbwidget=cbwidget;
+this->cbapplywidget=cbapplywidget;
+rg->setcbwidget(cbwidget,applybutton);
+applybutton->show();} {}
+ }
+ Function {refresh()} {} {
+ code {redrawPADnoteApply();
+
+enabled->value(respar->Penabled);
+
+maxdb->value(respar->PmaxdB);
+maxdbvo->value(respar->PmaxdB);
+
+centerfreqvo->value(respar->getcenterfreq()/1000.0);
+octavesfreqvo->value(respar->getoctavesfreq());
+
+centerfreq->value(respar->Pcenterfreq);
+octavesfreq->value(respar->Poctavesfreq);
+
+p1st->value(respar->Pprotectthefundamental);
+
+rg->redraw();} {}
+ }
+ decl {Resonance *respar;} {public
+ }
+ decl {ResonanceGraph *rg;} {}
+ decl {Fl_Widget *cbwidget,*cbapplywidget;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl
new file mode 100644
index 0000000..f77beef
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/SUBnoteUI.fl
@@ -0,0 +1,524 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include <stdio.h>} {public
+}
+
+decl {\#include <string.h>} {public
+}
+
+decl {\#include "../globals.h"} {public
+}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "EnvelopeUI.h"} {public
+}
+
+decl {\#include "FilterUI.h"} {public
+}
+
+decl {\#include "../Misc/Util.h"} {public
+}
+
+decl {\#include "../Params/SUBnoteParameters.h"} {public
+}
+
+decl {\#include "PresetsUI.h"} {public
+}
+
+class SUBnoteharmonic {: {public Fl_Group}
+} {
+ Function {make_window()} {private
+ } {
+ Fl_Window harmonic {
+ xywh {1257 22 90 305} type Double hide
+ class Fl_Group
+ } {
+ Fl_Slider mag {
+ callback {int x=0;
+if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value();
+ else o->value(127-x);
+pars->Phmag[n]=x;
+if (pars->Phmag[n]==0) o->selection_color(0);
+ else o->selection_color(222);}
+ tooltip {harmonic's magnitude} xywh {0 15 10 135} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 127
+ code0 {o->value(127-pars->Phmag[n]);}
+ code1 {if (pars->Phmag[n]==0) o->selection_color(0);}
+ }
+ Fl_Slider bw {
+ callback {int x=64;
+if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value();
+ else o->value(x);
+pars->Phrelbw[n]=x;}
+ tooltip {harmonic's bandwidth} xywh {0 157 10 130} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 64
+ code0 {o->value(127-pars->Phrelbw[n]);}
+ }
+ Fl_Box {} {
+ xywh {10 219 5 5} box FLAT_BOX color 45
+ code0 {if (n+1==MAX_SUB_HARMONICS) o->hide();}
+ }
+ Fl_Box {} {
+ label 01
+ xywh {0 288 10 15} labelfont 1 labelsize 9 align 20
+ code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
+ }
+ Fl_Box {} {
+ label 01
+ xywh {0 0 10 15} labelfont 1 labelsize 9 align 20
+ code0 {char tmp[10];snprintf(tmp,10,"%d",n+1);o->label(strdup(tmp));}
+ }
+ }
+ }
+ Function {SUBnoteharmonic(int x,int y, int w, int h, const char *label=0):Fl_Group(x,y,w,h,label)} {} {
+ code {n=0;} {}
+ }
+ Function {init(SUBnoteParameters *pars_,int n_)} {} {
+ code {pars=pars_;
+n=n_;
+make_window();
+harmonic->show();
+end();} {}
+ }
+ Function {refresh()} {} {
+ code {mag->value(127-pars->Phmag[n]);
+if (pars->Phmag[n]==0) mag->selection_color(0);
+bw->value(127-pars->Phrelbw[n]);} {}
+ }
+ Function {~SUBnoteharmonic()} {} {
+ code {harmonic->hide();
+hide();
+//delete(harmonic);} {}
+ }
+ decl {SUBnoteParameters *pars;} {}
+ decl {int n;} {}
+}
+
+class SUBnoteUI {open : {public PresetsUI_}
+} {
+ Function {make_window()} {open
+ } {
+ Fl_Window SUBparameters {
+ label {SUBsynth Parameters} open
+ xywh {213 147 735 470} type Double visible
+ } {
+ Fl_Scroll {} {
+ label scroll open
+ xywh {5 140 434 325} type HORIZONTAL box FLAT_BOX labeltype NO_LABEL
+ } {
+ Fl_Pack harmonics {
+ xywh {5 145 430 325} type HORIZONTAL
+ code0 {for (int i=0;i<MAX_SUB_HARMONICS;i++){h[i]=new SUBnoteharmonic(0,0,15,o->h(),"");h[i]->init(pars,i);}}
+ } {}
+ }
+ Fl_Button {} {
+ label Close
+ callback {SUBparameters->hide();}
+ xywh {625 446 105 20} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ Fl_Group {} {
+ label AMPLITUDE open
+ xywh {5 5 215 135} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
+ } {
+ Fl_Value_Slider vol {
+ label Vol
+ callback {pars->PVolume=(int)o->value();}
+ tooltip Volume xywh {10 25 140 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->PVolume);}
+ }
+ Fl_Value_Slider vsns {
+ label {V.Sns}
+ callback {pars->PAmpVelocityScaleFunction=(int) o->value();}
+ tooltip {Velocity Sensing Function (rightmost to disable)} xywh {10 45 140 15} type {Horz Knob} box FLAT_BOX labelsize 11 align 8 maximum 127 step 1
+ code0 {o->value(pars->PAmpVelocityScaleFunction);}
+ }
+ Fl_Dial pan {
+ label Pan
+ callback {pars->PPanning=(int) o->value();}
+ tooltip {Panning (leftmost is Random)} xywh {185 20 30 30} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->PPanning);}
+ class WidgetPDial
+ }
+ Fl_Group ampenv {
+ label {SUBsynth - Amplitude Envelope} open
+ xywh {10 65 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->AmpEnvelope);}
+ class EnvelopeUI
+ } {}
+ }
+ Fl_Group {} {
+ xywh {495 406 235 35} box UP_FRAME
+ } {
+ Fl_Counter filterstages {
+ label {Filter Stages}
+ callback {pars->Pnumstages=(int) o->value();}
+ tooltip {How many times the noise is filtered} xywh {515 421 45 15} type Simple labelfont 1 labelsize 10 align 1 minimum 1 maximum 5 step 1 textsize 10
+ code0 {o->value(pars->Pnumstages);}
+ }
+ Fl_Choice magtype {
+ label {Mag.Type}
+ callback {pars->Phmagtype=(int) o->value();}
+ xywh {585 421 65 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11
+ code0 {o->value(pars->Phmagtype);}
+ } {
+ MenuItem {} {
+ label Linear
+ xywh {20 20 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {-40dB}
+ xywh {30 30 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {-60dB}
+ xywh {40 40 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {-80dB}
+ xywh {50 50 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {-100dB}
+ xywh {60 60 100 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Choice start {
+ label Start
+ callback {pars->Pstart=(int) o->value();} open
+ xywh {670 421 50 15} down_box BORDER_BOX labelfont 1 labelsize 10 align 1 textsize 11
+ code0 {o->value(pars->Pstart);}
+ } {
+ MenuItem {} {
+ label Zero
+ xywh {30 30 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label RND
+ xywh {40 40 100 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label {Max.}
+ xywh {50 50 100 20} labelfont 1 labelsize 11
+ }
+ }
+ }
+ Fl_Group freqsettingsui {
+ label FREQUENCY open
+ xywh {440 5 295 146} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
+ } {
+ Fl_Group freqenvelopegroup {
+ label {SUBsynth - Frequency Envelope} open
+ xywh {445 75 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->FreqEnvelope);}
+ code1 {if (pars->PFreqEnvelopeEnabled==0) o->deactivate();}
+ class EnvelopeUI
+ } {}
+ Fl_Check_Button freqee {
+ label Enabled
+ callback {pars->PFreqEnvelopeEnabled=o->value();
+if (o->value()==0) freqenvelopegroup->deactivate();
+ else freqenvelopegroup->activate();
+o->show();
+freqsettingsui->redraw();}
+ xywh {445 77 55 15} down_box DOWN_BOX labelfont 1 labelsize 10
+ code0 {o->value(pars->PFreqEnvelopeEnabled);}
+ }
+ Fl_Counter octave {
+ label Octave
+ callback {int k=(int) o->value();
+if (k<0) k+=16;
+pars->PCoarseDetune = k*1024+
+ pars->PCoarseDetune%1024;}
+ tooltip Octave xywh {670 58 45 15} type Simple labelsize 10 align 1 minimum -8 maximum 7 step 1 textfont 1 textsize 11
+ code0 {int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;}
+ code2 {o->value(k);}
+ }
+ Fl_Counter coarsedet {
+ label {Coarse Det.}
+ callback {int k=(int) o->value();
+if (k<0) k+=1024;
+pars->PCoarseDetune = k+
+ (pars->PCoarseDetune/1024)*1024;}
+ tooltip {Coarse Detune} xywh {655 125 60 20} labelsize 10 align 1 minimum -64 maximum 63 step 1 textfont 1 textsize 11
+ code0 {int k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;}
+ code2 {o->value(k);}
+ code3 {o->lstep(10);}
+ }
+ Fl_Slider detune {
+ callback {pars->PDetune=(int)o->value()+8192;
+detunevalueoutput->do_callback();}
+ tooltip {Fine Detune (cents)} xywh {495 27 230 15} type {Horz Knob} box NO_BOX minimum -8192 maximum 8191 step 1
+ code0 {o->value(pars->PDetune-8192);}
+ }
+ Fl_Value_Output detunevalueoutput {
+ label Detune
+ callback {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
+ xywh {448 27 45 15} labelsize 10 align 5 minimum -5000 maximum 5000 step 0.01 textfont 1 textsize 10
+ code0 {o->value(getdetune(pars->PDetuneType,0,pars->PDetune));}
+ }
+ Fl_Check_Button hz440 {
+ label 440Hz
+ callback {int x=(int) o->value();
+pars->Pfixedfreq=x;
+if (x==0) fixedfreqetdial->deactivate();
+ else fixedfreqetdial->activate();}
+ tooltip {set the base frequency to 440Hz} xywh {555 53 50 15} down_box DOWN_BOX labelfont 1 labelsize 10
+ code0 {o->value(pars->Pfixedfreq);}
+ }
+ Fl_Dial fixedfreqetdial {
+ label {Eq.T.}
+ callback {pars->PfixedfreqET=(int) o->value();}
+ tooltip {How the frequency varies acording to the keyboard (leftmost for fixed frequency)} xywh {610 53 15 15} box ROUND_UP_BOX labelsize 10 align 8 maximum 127 step 1
+ code0 {o->value(pars->PfixedfreqET);}
+ code1 {if (pars->Pfixedfreq==0) o->deactivate();}
+ class WidgetPDial
+ }
+ Fl_Choice detunetype {
+ label {Detune Type}
+ callback {pars->PDetuneType=(int) o->value()+1;
+detunevalueoutput->do_callback();} open
+ xywh {655 94 70 15} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {o->add("L35cents");o->add("L10cents");o->add("E100cents");o->add("E1200cents");}
+ code1 {o->value(pars->PDetuneType-1);}
+ } {}
+ }
+ Fl_Check_Button stereo {
+ label Stereo
+ callback {pars->Pstereo=(int) o->value();}
+ xywh {440 406 55 35} box THIN_UP_BOX down_box DOWN_BOX labelsize 10
+ code0 {o->value(pars->Pstereo);}
+ }
+ Fl_Button {} {
+ label Clear
+ callback {for (int i=0;i<MAX_SUB_HARMONICS;i++){
+ h[i]->mag->value(127);
+ pars->Phmag[i]=0;
+ h[i]->bw->value(64);
+ pars->Phrelbw[i]=64;
+};
+pars->Phmag[0]=127;
+h[0]->mag->value(0);
+SUBparameters->redraw();}
+ tooltip {Clear the harmonics} xywh {445 446 70 20} box THIN_UP_BOX labelfont 1 labelsize 11
+ }
+ Fl_Group bandwidthsettingsui {
+ label BANDWIDTH
+ xywh {220 5 220 135} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
+ } {
+ Fl_Group bandwidthenvelopegroup {
+ label {SUBsynth - BandWidth Envelope} open
+ xywh {225 65 205 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->BandWidthEnvelope);}
+ code1 {if (pars->PBandWidthEnvelopeEnabled==0) o->deactivate();}
+ class EnvelopeUI
+ } {}
+ Fl_Check_Button bwee {
+ label Enabled
+ callback {pars->PBandWidthEnvelopeEnabled=o->value();
+if (o->value()==0) bandwidthenvelopegroup->deactivate();
+ else bandwidthenvelopegroup->activate();
+o->show();
+bandwidthsettingsui->redraw();}
+ xywh {225 67 55 15} down_box DOWN_BOX labelfont 1 labelsize 10
+ code0 {o->value(pars->PBandWidthEnvelopeEnabled);}
+ }
+ Fl_Value_Slider bandwidth {
+ label {Band Width}
+ callback {pars->Pbandwidth=(int) o->value();}
+ xywh {225 40 115 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 1 maximum 127 step 1
+ code0 {o->value(pars->Pbandwidth);}
+ }
+ Fl_Value_Slider bwidthscale {
+ label {B.Width Scale}
+ callback {pars->Pbwscale=(int) o->value()+64;}
+ tooltip {How much I increase the BandWidth according to lower/higher harmonics} xywh {345 40 90 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 1 minimum -64 maximum 63 step 1
+ code0 {o->value(pars->Pbwscale-64);}
+ }
+ }
+ Fl_Group globalfiltergroup {
+ label FILTER
+ xywh {440 221 290 185} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
+ code0 {if (pars->PGlobalFilterEnabled==0) o->deactivate();}
+ } {
+ Fl_Group filterenv {
+ label {SUBsynth - Filter Envelope} open
+ xywh {445 331 275 70} box FLAT_BOX color 51 align 144
+ code0 {o->init(pars->GlobalFilterEnvelope);}
+ class EnvelopeUI
+ } {}
+ Fl_Group filterui {
+ label {SUBsynthl - Filter} open
+ xywh {445 246 275 75} box FLAT_BOX color 50 align 144
+ code0 {o->init(pars->GlobalFilter,&pars->PGlobalFilterVelocityScale,&pars->PGlobalFilterVelocityScaleFunction);}
+ class FilterUI
+ } {}
+ }
+ Fl_Check_Button filtere {
+ label Enabled
+ callback {pars->PGlobalFilterEnabled=o->value();
+if (o->value()==0) globalfiltergroup->deactivate();
+ else globalfiltergroup->activate();
+o->show();
+globalfiltergroup->redraw();}
+ xywh {445 226 85 20} down_box DOWN_BOX labelfont 1 labelsize 11
+ code0 {o->value(pars->PGlobalFilterEnabled);}
+ }
+ Fl_Button {} {
+ label C
+ callback {presetsui->copy(pars);}
+ xywh {540 451 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Button {} {
+ label P
+ callback {presetsui->paste(pars,this);}
+ xywh {570 451 25 15} box THIN_UP_BOX color 179 labelfont 1 labelsize 11 labelcolor 55
+ }
+ Fl_Group {} {
+ label OVERTONES open
+ xywh {440 151 220 70} box UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 align 17
+ } {
+ Fl_Choice spreadtype {
+ label OvertonesPosition
+ callback {pars->POvertoneSpread.type = (int)o->value();
+pars->updateFrequencyMultipliers();} open
+ xywh {450 190 80 20} down_box BORDER_BOX labelsize 10 align 5 textsize 10
+ code0 {o->value(pars->POvertoneSpread.type);}
+ } {
+ MenuItem {} {
+ label Harmonic
+ xywh {0 0 34 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label ShiftU
+ xywh {10 10 34 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label ShiftL
+ xywh {20 20 34 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label PowerU
+ xywh {20 20 34 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label PowerL
+ xywh {30 30 34 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Sine
+ xywh {40 40 34 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Power
+ xywh {50 50 34 20} labelfont 1 labelsize 11
+ }
+ MenuItem {} {
+ label Shift selected
+ xywh {20 20 34 20} labelfont 1 labelsize 11
+ }
+ }
+ Fl_Dial spreadpar1 {
+ label Par1
+ callback {pars->POvertoneSpread.par1 = o->value();
+pars->updateFrequencyMultipliers();}
+ xywh {548 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1
+ code0 {o->value(pars->POvertoneSpread.par1);}
+ class WidgetPDial
+ }
+ Fl_Dial spreadpar2 {
+ label Par2
+ callback {pars->POvertoneSpread.par2 = o->value();
+pars->updateFrequencyMultipliers();}
+ xywh {583 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1
+ code0 {o->value(pars->POvertoneSpread.par2);}
+ class WidgetPDial
+ }
+ Fl_Dial spreadpar3 {
+ label ForceH
+ callback {pars->POvertoneSpread.par3 = o->value();
+pars->updateFrequencyMultipliers();}
+ xywh {618 173 30 30} box ROUND_UP_BOX labelsize 10 maximum 255 step 1
+ code0 {o->value(pars->POvertoneSpread.par3);}
+ class WidgetPDial
+ }
+ }
+ }
+ }
+ Function {refresh()} {} {
+ code {for (int i=0;i<MAX_SUB_HARMONICS;i++) h[i]->refresh();
+vol->value(pars->PVolume);
+vsns->value(pars->PAmpVelocityScaleFunction);
+pan->value(pars->PPanning);
+
+
+bandwidth->value(pars->Pbandwidth);
+bwidthscale->value(pars->Pbwscale-64);
+bwee->value(pars->PBandWidthEnvelopeEnabled);
+if (pars->PBandWidthEnvelopeEnabled==0) bandwidthenvelopegroup->deactivate();
+ else bandwidthenvelopegroup->activate();
+bwee->show();
+bandwidthsettingsui->redraw();
+
+detunevalueoutput->value(getdetune(pars->PDetuneType,0,pars->PDetune));
+spreadtype->value(pars->POvertoneSpread.type);
+spreadpar1->value(pars->POvertoneSpread.par1);
+spreadpar2->value(pars->POvertoneSpread.par2);
+spreadpar3->value(pars->POvertoneSpread.par3);
+
+freqee->value(pars->PFreqEnvelopeEnabled);
+if (pars->PFreqEnvelopeEnabled==0) freqenvelopegroup->deactivate();
+ else freqenvelopegroup->activate();
+freqee->show();
+freqsettingsui->redraw();
+
+detune->value(pars->PDetune-8192);
+hz440->value(pars->Pfixedfreq);
+
+fixedfreqetdial->value(pars->PfixedfreqET);
+
+int k=pars->PCoarseDetune/1024;if (k>=8) k-=16;
+octave->value(k);
+
+detunetype->value(pars->PDetuneType-1);
+
+k=pars->PCoarseDetune%1024;if (k>=512) k-=1024;
+coarsedet->value(k);
+
+filtere->value(pars->PGlobalFilterEnabled);
+if (pars->PGlobalFilterEnabled==0) globalfiltergroup->deactivate();
+ else globalfiltergroup->activate();
+filtere->show();
+globalfiltergroup->redraw();
+
+stereo->value(pars->Pstereo);
+filterstages->value(pars->Pnumstages);
+magtype->value(pars->Phmagtype);
+start->value(pars->Pstart);
+
+ampenv->refresh();
+bandwidthenvelopegroup->refresh();
+freqenvelopegroup->refresh();
+filterui->refresh();
+filterenv->refresh();} {}
+ }
+ Function {SUBnoteUI(SUBnoteParameters *parameters)} {} {
+ code {pars=parameters;
+make_window();} {}
+ }
+ Function {~SUBnoteUI()} {} {
+ code {//for (int i=0;i<MAX_SUB_HARMONICS;i++) delete (h[i]);
+SUBparameters->hide();
+delete(SUBparameters);} {}
+ }
+ decl {SUBnoteParameters *pars;} {}
+ decl {SUBnoteharmonic *h[MAX_SUB_HARMONICS];} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/VirKeyboard.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/VirKeyboard.fl
new file mode 100644
index 0000000..805e00c
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/VirKeyboard.fl
@@ -0,0 +1,487 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0110
+header_name {.h}
+code_name {.cc}
+decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {}
+
+decl {//License: GNU GPL version 2 or later} {}
+
+decl {\#include <stdlib.h>} {public
+}
+
+decl {\#include <FL/fl_draw.H>} {public
+}
+
+decl {\#include <FL/Fl_Box.H>} {public
+}
+
+decl {\#include "../globals.h"} {public
+}
+
+decl {\#include "../Misc/Master.h"} {public
+}
+
+decl {\#include "../Misc/Util.h"} {public
+}
+
+decl {\#include "WidgetPDial.h"} {public
+}
+
+decl {\#include "common.H"} {public
+}
+
+decl {\#ifdef NTK_GUI
+ \#include "FL/Fl_Shared_Image.H"
+ \#endif} {public
+}
+
+decl {const int keyspos[12]={0,-1,1,-2,2,3,-4,4,-5,5,-6,6};} {}
+
+decl {const int keysoct1qwerty[]={'q','2','w','3','e','r','5','t','6','y','7','u','i','9','o','0','p','[','=',']','\\\\',FL_Enter,0};} {}
+
+decl {const int keysoct2qwerty[]={'z','s','x','d','c','v','g','b','h','n','j','m',',','l','.',';','/',0};} {}
+
+decl {const int keysoct1dw[]={'\\'','2',',','3','.','p','5','y','6','f','7','g','c','9','r','0','l','/',']','=','\\\\',FL_Enter,0};} {}
+
+decl {const int keysoct2dw[]={';','o','q','e','j','k','i','x','d','b','h','m','w','n','v','s','z',0};} {}
+
+decl {const int keysoct1qwertz[]={'q','2','w','3','e','r','5','t','6','z','7','u','i','9','o','0','p',252,'\\'','+','\\\\',FL_Enter,0};} {}
+
+decl {const int keysoct2qwertz[]={'y','s','x','d','c','v','g','b','h','n','j','m',',','l','.',246,'-',0};} {}
+
+decl {const int keysoct1az[]={'a',233,'z','\\"','e','r','(','t','-','y',232,'u','i',231,'o',224,'p',65106,'=','$',0};} {}
+
+decl {const int keysoct2az[]={'w','s','x','d','c','v','g','b','h','n','j',',',';','l',':','m','!',0};} {}
+
+class VirKeys {: {public Fl_Box}
+} {
+ decl {static const int N_OCT=6;} {}
+ decl {static const int SIZE_WHITE=14;} {}
+ decl {static const int SIZE_BLACK=8;} {}
+ Function {VirKeys(int x,int y, int w, int h, const char *label=0):Fl_Box(x,y,w,h,label)} {} {
+ code {master=NULL;} {}
+ }
+ Function {init(Master *master_)} {} {
+ code {master=master_;
+for (int i=0;i<N_OCT*12+1;i++) pressed[i]=0;
+midich=0;
+midivel=100;
+midioct=2;
+
+keyoct1=3;
+keyoct2=2;
+rndvelocity=0;} {}
+ }
+ Function {draw()} {} {
+ code {int ox=x(),oy=y(),lx=w(),ly=h()-1,i;
+
+\#ifdef NTK_GUI
+\#ifdef CARLA_VERSION_STRING
+ Fl_Image *white_up = Fl_Shared_Image::get( gUiPixmapPath + "white_key.png" );
+ Fl_Image *white_down = Fl_Shared_Image::get( gUiPixmapPath + "white_key_pressed.png" );
+ Fl_Image *black_up = Fl_Shared_Image::get( gUiPixmapPath + "black_key.png" );
+ Fl_Image *black_down = Fl_Shared_Image::get( gUiPixmapPath + "black_key_pressed.png" );
+\#else
+ Fl_Image *white_up = Fl_Shared_Image::get( PIXMAP_PATH "white_key.png" );
+ Fl_Image *white_down = Fl_Shared_Image::get( PIXMAP_PATH "white_key_pressed.png" );
+ Fl_Image *black_up = Fl_Shared_Image::get( PIXMAP_PATH "black_key.png" );
+ Fl_Image *black_down = Fl_Shared_Image::get( PIXMAP_PATH "black_key_pressed.png" );
+ \#endif
+
+
+//On error fetch everything from source directory
+if(!(white_up&&white_down&&black_up&&black_down)) {
+ white_up = Fl_Shared_Image::get(SOURCE_DIR "/../../pixmaps/white_key.png");
+ white_down = Fl_Shared_Image::get(SOURCE_DIR "/../../pixmaps/white_key_pressed.png");
+ black_up = Fl_Shared_Image::get(SOURCE_DIR "/../../pixmaps/black_key.png");
+ black_down = Fl_Shared_Image::get(SOURCE_DIR "/../../pixmaps/black_key_pressed.png");
+}
+
+Fl_Image *key;
+
+for (i=0;i<N_OCT*12;i++) {
+ int noct=i/12;
+ int kv=keyspos[i%12];
+
+ if (kv>=0){//white keys
+ if (pressed[i]==0)
+ key = white_up;
+ else
+ key = white_down;
+
+ key->draw( ox + (kv + 7 * noct ) * white_up->w() + 3, oy );
+ }
+}
+
+for (i=0;i<N_OCT*12;i++){
+ int noct=i/12;
+ int kv=keyspos[i%12];
+
+ if ( kv < 0 ) {
+ kv=keyspos[(i+1)%12];
+ if (pressed[i]==0)
+ key = black_up;
+ else
+ key = black_down;
+
+ key->draw( ox + (kv + 7 * noct ) * white_up->w() - black_up->w() / 2 + 2, oy );
+ }
+}
+\#else
+if (damage()!=1){
+ fl_color(250,240,230);
+ fl_rectf(ox,oy,lx,ly);
+
+ fl_color(FL_BLACK);
+ fl_line(ox,oy,ox+lx,oy);
+ fl_line(ox,oy+ly,ox+lx,oy+ly);
+ for (i=0;i<N_OCT*7+1;i++){
+ fl_line(ox+i*SIZE_WHITE,oy,ox+i*SIZE_WHITE,oy+ly);
+ int ik=i%7;
+ if ((ik==1)||(ik==2)||(ik==4)||(ik==5)||(ik==6))
+ fl_rectf(ox+i*SIZE_WHITE-SIZE_BLACK/2,oy,
+ SIZE_BLACK+1,ly*3/5);
+ }
+}
+
+
+for (i=0;i<N_OCT*12;i++){
+ // if (pressed[i]==0) continue;
+
+ int noct=i/12;
+ int kv=keyspos[i%12];
+
+ if (kv>=0){//white keys
+ if (pressed[i]==0) fl_color(250,240,230);
+ else fl_color(FL_BLUE);
+ fl_rectf(ox+(kv+7*noct)*SIZE_WHITE+3,oy+ly*3/5+2,
+ SIZE_WHITE-4,ly*2/5-3);
+ } else {//black keys
+ kv=keyspos[(i+1)%12];
+ if (pressed[i]==0) fl_color(FL_BLACK);
+ else fl_color(FL_BLUE);
+ fl_rectf(ox+(kv+7*noct)*SIZE_WHITE-SIZE_BLACK/2+2,oy+2,
+ SIZE_BLACK-3,ly*3/5-5);
+ }
+}
+\#endif} {}
+ }
+ Function {handle(int event)} {return_type int
+ } {
+ code {int i;
+int ly=h();
+int x_=Fl::event_x()-x();
+int y_=Fl::event_y()-y();
+if ( (x_<0)&&(x_>w()) && (y_<0)&&(y_>h())){
+ return(0);
+};
+
+
+if ((event==FL_PUSH)||(event==FL_DRAG)||(event==FL_RELEASE)){
+ int kpos=-1;
+
+ if (y_>ly*3/5){//white keys
+ int pos=x_/SIZE_WHITE;
+ if (pos<0) return(1);
+ for (i=0;i<12;i++) {
+ if (pos%7==keyspos[i]) {
+ kpos=pos/7*12+i;
+ break;
+ };
+ };
+ } else {//black keys
+ int pos=(x_+SIZE_WHITE/2)/SIZE_WHITE;
+ if (pos<0) return(1);
+ for (i=1;i<12;i++) {
+ if (pos%7==-keyspos[i]) {
+ kpos=pos/7*12+i;
+ break;
+ };
+ };
+ };
+
+ if ((kpos!=-1)&&((event==FL_PUSH)||(event==FL_DRAG))&&
+ (Fl::event_shift()==0)) {
+ presskey(kpos,1,1);
+ };
+
+ if ((event==FL_PUSH)&&(Fl::event_shift()!=0)) {
+ if (pressed[kpos]==0) presskey(kpos,0,1);
+ else relasekey(kpos,1);
+ };
+ if ((event==FL_RELEASE)&&(Fl::event_shift()==0))
+ relaseallkeys(1);
+ take_focus();
+};
+
+
+const int *keysoct1=keysoct1qwerty;
+const int *keysoct2=keysoct2qwerty;
+
+if (config.cfg.VirKeybLayout==2) {
+ keysoct1=keysoct1dw;
+ keysoct2=keysoct2dw;
+}else if (config.cfg.VirKeybLayout==3) {
+ keysoct1=keysoct1qwertz;
+ keysoct2=keysoct2qwertz;
+}else if (config.cfg.VirKeybLayout==4) {
+ keysoct1=keysoct1az;
+ keysoct2=keysoct2az;
+};
+
+if ((event==FL_KEYDOWN)||(event==FL_KEYUP)){
+ int key=Fl::event_key();
+ int kpos=-1;
+ for (i=0;keysoct1[i]!=0;i++) if (key==keysoct1[i]) kpos=i+12*keyoct1;
+ for (i=0;keysoct2[i]!=0;i++) if (key==keysoct2[i]) kpos=i+12*keyoct2;
+
+
+
+
+ if (kpos==-1) return(0);
+ if ((event==FL_KEYUP) && (Fl::event_key(key)==0) && (Fl::get_key(key)!=0)) return(0);
+ if (event==FL_KEYDOWN) presskey(kpos,0,2);
+ else relasekey(kpos,2);
+};
+
+return(1);} {}
+ }
+ Function {presskey(int nk,int exclusive,int type)} {} {
+ code {//Exclusive means that multiple keys can be pressed at once
+//when the user uses the shift key
+if (nk>=N_OCT*12) return;
+if ((nk<0)&&(exclusive==0)) {
+ relaseallkeys(type);
+ return;
+};
+if (nk<0) return;
+if (pressed[nk]!=0) return;//the key is already pressed
+
+if (exclusive!=0) relaseallkeys(type);
+pressed[nk]=type;
+
+damage(1);
+float vel=midivel;
+if (rndvelocity!=0){
+ vel=midivel*(127.0-rndvelocity)/127.0+RND*rndvelocity;
+};
+
+pthread_mutex_lock(&master->mutex);
+master->noteOn(midich,nk+midioct*12,(int)vel);
+pthread_mutex_unlock(&master->mutex);} {}
+ }
+ Function {relasekey(int nk,int type)} {} {
+ code {if ((nk<0)||(nk>=N_OCT*12)) return;
+if (pressed[nk]==0) return;//the key is not pressed
+if ((type!=0)&&(pressed[nk]!=type)) return;
+
+pressed[nk]=0;
+
+
+damage(1);
+
+pthread_mutex_lock(&master->mutex);
+master->noteOff(midich,nk+12*midioct);
+pthread_mutex_unlock(&master->mutex);} {}
+ }
+ Function {relaseallkeys(int type)} {} {
+ code {for (int i=0;i<N_OCT*12;i++) relasekey(i,type);} {}
+ }
+ decl {Master *master;} {}
+ decl {int pressed[N_OCT*12+1];} {}
+ decl {unsigned char midich;} {public
+ }
+ decl {unsigned char midivel;} {public
+ }
+ decl {char midioct,keyoct1,keyoct2;} {public
+ }
+ decl {unsigned char rndvelocity;} {public
+ }
+}
+
+class VirKeyboard {open
+} {
+ Function {make_window()} {open
+ } {
+ Fl_Window virkeyboardwindow {
+ label {Virtual Keyboard - ZynAddSubFX}
+ callback {relaseallkeys();
+virkeyboardwindow->hide();} open
+ xywh {100 597 650 130} type Double visible
+ } {
+ Fl_Box virkeys {
+ label Keyboard
+ xywh {10 10 590 80} box FLAT_BOX color 17
+ code0 {o->init(master);}
+ class VirKeys
+ }
+ Fl_Counter {} {
+ label {"qwer.." Oct}
+ callback {relaseallkeys();
+virkeys->keyoct1=(int) o->value();
+virkeys->take_focus();}
+ tooltip {keys "q2w3er5t6y..." octave} xywh {380 95 45 15} type Simple labelsize 10 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 10
+ code0 {o->value(virkeys->keyoct1);}
+ }
+ Fl_Counter {} {
+ label {"zxcv.." Oct}
+ callback {relaseallkeys();
+virkeys->keyoct2=(int) o->value();
+virkeys->take_focus();}
+ tooltip {keys "zsxdcvgbh..." octave} xywh {380 110 45 15} type Simple labelsize 10 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 10
+ code0 {o->value(virkeys->keyoct2);}
+ }
+ Fl_Value_Slider {} {
+ label Vel
+ callback {virkeys->midivel=(int) o->value();
+virkeys->take_focus();} selected
+ tooltip Velocity xywh {95 105 100 15} type {Horz Knob} box FLAT_BOX labelsize 10 align 5 minimum 1 maximum 127 step 1
+ code0 {o->value(virkeys->midivel);}
+ }
+ Fl_Counter {} {
+ label {Oct.}
+ callback {relaseallkeys();
+virkeys->midioct=(int) o->value();
+virkeys->take_focus();}
+ tooltip {Midi Octave} xywh {255 100 55 20} type Simple labelsize 11 align 4 when 6 minimum 0 maximum 5 step 1 textfont 1 textsize 11
+ code0 {o->value(virkeys->midioct);}
+ }
+ Fl_Button {} {
+ label Close
+ callback {relaseallkeys();
+virkeyboardwindow->hide();}
+ xywh {545 105 55 20} box THIN_UP_BOX
+ }
+ Fl_Value_Slider {} {
+ label Cval
+ callback {int ctl=midictl;
+
+pthread_mutex_lock(&master->mutex);
+master->setController(virkeys->midich,ctl,(int) o->value());
+pthread_mutex_unlock(&master->mutex);
+virkeys->take_focus();}
+ tooltip {Controller value} xywh {605 10 15 115} type {Vert Fill} box ENGRAVED_BOX selection_color 229 labelsize 8 align 5 minimum 127 maximum 0 step 1 value 64 textsize 7
+ }
+ Fl_Choice {} {
+ label Controller
+ callback {switch((int) o->value()+1){
+ case 1: midictl=C_modwheel; break;
+ case 2: midictl=C_volume; break;
+ case 3: midictl=C_panning; break;
+ case 4: midictl=C_expression; break;
+ case 5: midictl=C_sustain; break;
+ case 6: midictl=C_portamento; break;
+ case 7: midictl=C_filterq; break;
+ case 8: midictl=C_filtercutoff; break;
+ case 9: midictl=C_bandwidth; break;
+ case 10: midictl=C_fmamp; break;
+ case 11: midictl=C_resonance_center; break;
+ case 12: midictl=C_resonance_bandwidth; break;
+ default: midictl=C_NULL; break;
+
+};
+
+
+
+virkeys->take_focus();}
+ xywh {435 105 100 15} down_box BORDER_BOX labelsize 10 align 5 when 6 textfont 1 textsize 10
+ code0 {midictl=C_filtercutoff;o->value(7);}
+ } {
+ MenuItem {} {
+ label {01: Mod.Wheel}
+ xywh {0 0 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {07: Volume}
+ xywh {10 10 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {10: Panning}
+ xywh {20 20 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {11: Expression}
+ xywh {30 30 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {64: Sustain}
+ xywh {40 40 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {65: Portamento}
+ xywh {50 50 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {71: Filter Q}
+ xywh {60 60 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {74: Filter Freq.}
+ xywh {70 70 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {75: Bandwidth}
+ xywh {80 80 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {76: FM Gain}
+ xywh {90 90 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {77: Res. c. freq}
+ xywh {100 100 100 20} labelfont 1 labelsize 10
+ }
+ MenuItem {} {
+ label {78: Res. bw.}
+ xywh {110 110 100 20} labelfont 1 labelsize 10
+ }
+ }
+ Fl_Roller pitchwheelroller {
+ label Pwh
+ callback {pthread_mutex_lock(&master->mutex);
+master->setController(virkeys->midich,C_pitchwheel,-(int) o->value());
+pthread_mutex_unlock(&master->mutex);
+virkeys->take_focus();}
+ tooltip {Pitch Wheel} xywh {625 10 20 95} labelsize 8 align 1 when 3 minimum -8192 maximum 8192 step 64
+ }
+ Fl_Button {} {
+ label R
+ callback {pitchwheelroller->value(0);
+pitchwheelroller->do_callback();}
+ tooltip {Reset Pitch Bend} xywh {625 110 20 15} box THIN_UP_BOX labelfont 1
+ }
+ Fl_Dial {} {
+ label Vrnd
+ callback {virkeys->rndvelocity=(int) o->value();}
+ tooltip {Velocity Randomness} xywh {205 105 20 20} box ROUND_UP_BOX labelsize 10 align 129 maximum 127 step 1
+ code0 {o->value(virkeys->rndvelocity);}
+ class WidgetPDial
+ }
+ Fl_Choice partrcv {
+ label {MIDI Ch.}
+ callback {relaseallkeys();
+virkeys->midich=(int) o->value();
+virkeys->take_focus();} open
+ tooltip {Send to Midi Channel} xywh {20 105 65 20} down_box BORDER_BOX labelsize 10 align 5 textfont 1 textsize 10
+ code0 {char nrstr[10]; for(int i=0;i<NUM_MIDI_CHANNELS;i++){sprintf(nrstr,"Chn%d",i+1);if (i!=9) o->add(nrstr); else o->add("Drum10");};}
+ code1 {o->value(virkeys->midich);}
+ } {}
+ }
+ }
+ Function {VirKeyboard(Master *master_)} {} {
+ code {master=master_;
+midictl=75;
+make_window();} {}
+ }
+ Function {~VirKeyboard()} {} {
+ code {delete virkeyboardwindow;} {}
+ }
+ Function {show()} {} {
+ code {virkeyboardwindow->show();} {}
+ }
+ Function {relaseallkeys()} {} {
+ code {virkeys->relaseallkeys(0);} {}
+ }
+ decl {Master *master;} {}
+ decl {int midictl;} {}
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.cpp
new file mode 100644
index 0000000..ef752ce
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.cpp
@@ -0,0 +1,264 @@
+// generated by Fast Light User Interface Designer (fluid) version 1.0107f
+
+#include "WidgetPDial.h"
+#include <cstdio>
+#include <iostream>
+#include <cmath>
+#include <string>
+#include <FL/Fl_Tooltip.H>
+#include <FL/fl_draw.H>
+#include <FL/Fl_Group.H>
+#include <FL/Fl_Menu_Window.H>
+#include "../Misc/Util.h"
+//Copyright (c) 2003-2005 Nasca Octavian Paul
+//License: GNU GPL version 2 or later
+
+using namespace std;
+
+class TipWin:public Fl_Menu_Window
+{
+ public:
+ TipWin();
+ void draw();
+ void showValue(float f);
+ void setText(const char *c);
+ void showText();
+ private:
+ void redraw();
+ const char *getStr() const;
+ string tip;
+ string text;
+ bool textmode;
+};
+
+TipWin::TipWin():Fl_Menu_Window(1, 1)
+{
+ set_override();
+ end();
+}
+
+void TipWin::draw()
+{
+ //setup window
+ draw_box(FL_BORDER_BOX, 0, 0, w(), h(), Fl_Color(175));
+ fl_color(Fl_Tooltip::textcolor());
+ fl_font(labelfont(), labelsize());
+
+ //Draw the current string
+ fl_draw(getStr(), 3, 3, w() - 6, h() - 6,
+ Fl_Align(FL_ALIGN_LEFT | FL_ALIGN_WRAP));
+}
+
+void TipWin::showValue(float f)
+{
+ //convert the value to a string
+ char tmp[10];
+ snprintf(tmp, 9, "%.2f", f);
+ tip = tmp;
+
+ textmode = false;
+ redraw();
+ show();
+}
+
+void TipWin::setText(const char *c)
+{
+ text = c;
+ textmode = true;
+ redraw();
+}
+
+void TipWin::showText()
+{
+ if(!text.empty()) {
+ textmode = true;
+ redraw();
+ show();
+ }
+}
+
+void TipWin::redraw()
+{
+ // Recalc size of window
+ fl_font(labelfont(), labelsize());
+ int W = 0, H = 0;
+ fl_measure(getStr(), W, H, 0);
+ //provide a bit of extra space
+ W += 8;
+ H += 4;
+ size(W, H);
+ Fl_Menu_Window::redraw();
+}
+
+const char *TipWin::getStr() const
+{
+ return (textmode ? text : tip).c_str();
+}
+
+//static int numobj = 0;
+
+WidgetPDial::WidgetPDial(int x, int y, int w, int h, const char *label)
+ :Fl_Dial(x, y, w, h, label), oldvalue(0.0f), pos(false), textset(false)
+{
+ //cout << "[" << label << "] There are now " << ++numobj << endl;
+ Fl_Group *save = Fl_Group::current();
+ tipwin = new TipWin();
+ tipwin->hide();
+ Fl_Group::current(save);
+}
+
+WidgetPDial::~WidgetPDial()
+{
+ //cout << "There are now " << --numobj << endl;
+ delete tipwin;
+}
+
+int WidgetPDial::handle(int event)
+{
+//#ifdef NTK_GUI
+// return Fl_Dial::handle( event );
+//#else
+ double dragsize, min = minimum(), max = maximum();
+ int my;
+
+ switch(event) {
+ case FL_PUSH:
+ oldvalue = value();
+ case FL_DRAG:
+ getPos();
+ my = -(Fl::event_y() - y() - h() / 2);
+
+ dragsize = 200.0f;
+ if(Fl::event_state(FL_BUTTON1) == 0)
+ dragsize *= 10;
+
+ value(limit(oldvalue + my / dragsize * (max - min), min, max));
+ tipwin->showValue(value());
+ value_damage();
+ if(this->when() != 0)
+ do_callback();
+ return 1;
+ case FL_MOUSEWHEEL:
+ if (Fl::belowmouse() != this)
+ return 1;
+ my = - Fl::event_dy();
+
+ dragsize = 200.0f;
+ if(Fl::event_state(FL_CTRL) != 0)
+ dragsize *= 10;
+
+ value(limit(value() + my / dragsize * (max - min), min, max));
+ tipwin->showValue(value());
+ value_damage();
+ if(this->when() != 0)
+ do_callback();
+ return 1;
+ case FL_ENTER:
+ getPos();
+ tipwin->showText();
+ return 1;
+ case FL_HIDE:
+ case FL_LEAVE:
+ tipwin->hide();
+ resetPos();
+ break;
+ case FL_RELEASE:
+ tipwin->hide();
+ resetPos();
+ if(this->when() == 0)
+ do_callback();
+ return 1;
+ break;
+ }
+ return 0;
+//#endif
+}
+
+void WidgetPDial::draw()
+{
+#ifdef NTK_GUI
+ box( FL_NO_BOX );
+
+ Fl_Dial::draw();
+
+ return;
+#else
+ const int cx = x(), cy = y(), sx = w(), sy = h();
+ const double a1 = angle1(), a2 = angle2();
+ const double val = (value() - minimum()) / (maximum() - minimum());
+ // even radius produces less artifacts if no antialiasing is avail
+ const int rad = (sx > sy ? sy : sx) &~1;
+
+ /* clears the button background */
+ pdialcolor(160, 160, 160);
+ fl_pie(cx - 2, cy - 2, rad + 4, rad + 4, 0, 360);
+
+ /* dark outline */
+ fl_color(60, 60, 60);
+ fl_pie(cx - 1, cy - 1, rad + 2, rad + 2, 0, 360);
+
+ /* Draws the button faceplate, min/max */
+ pdialcolor(110, 110, 115);
+ fl_pie(cx, cy, rad, rad, 270 - a2, 270 - a1);
+
+ /* knob center */
+ if (rad > 8) {
+ pdialcolor(140, 140, 145);
+ fl_pie(cx + 4, cy + 4, rad - 8, rad - 8, 0, 360);
+ }
+
+ /* value circle */
+ double a = -(a2 - a1) * val - a1;
+ fl_line_style(0, 2, 0);
+ pdialcolor(0, 200, 0);
+ fl_arc(cx + 1, cy + 1, rad - 2, rad - 2, a - 90, a1 - 180);
+ fl_line_style(0);
+
+ /* draw value line */
+ int ll = rad/4;
+ if (ll < 2) ll = 2;
+
+ fl_push_matrix();
+
+ fl_translate(cx + rad / 2, cy + rad / 2);
+ fl_rotate(a - 90.0f);
+
+ fl_translate(rad / 2, 0);
+
+ fl_begin_polygon();
+ pdialcolor(0, 0, 0);
+ fl_vertex(-ll, 0);
+ fl_vertex(0, 0);
+ fl_end_polygon();
+
+ fl_pop_matrix();
+
+#endif
+}
+
+void WidgetPDial::pdialcolor(int r, int g, int b)
+{
+ if(active_r())
+ fl_color(r, g, b);
+ else
+ fl_color(160 - (160 - r) / 3, 160 - (160 - b) / 3, 160 - (160 - b) / 3);
+}
+
+void WidgetPDial::tooltip(const char *c)
+{
+ tipwin->setText(c);
+ textset = true;
+}
+
+void WidgetPDial::getPos()
+{
+ if(!pos) {
+ tipwin->position(Fl::event_x_root(), Fl::event_y_root() + 20);
+ pos = true;
+ }
+}
+
+void WidgetPDial::resetPos()
+{
+ pos = false;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.h b/plugins/zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.h
new file mode 100644
index 0000000..b386b54
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/WidgetPDial.h
@@ -0,0 +1,25 @@
+// generated by Fast Light User Interface Designer (fluid) version 1.0107f
+
+#ifndef WIDGETPDIAL_h
+#define WIDGETPDIAL_h
+#include <FL/Fl_Dial.H>
+
+
+class WidgetPDial:public Fl_Dial
+{
+ public:
+ WidgetPDial(int x, int y, int w, int h, const char *label = 0);
+ ~WidgetPDial();
+ int handle(int event);
+ void draw();
+ void pdialcolor(int r, int g, int b);
+ void tooltip(const char *c);
+ private:
+ void getPos();
+ void resetPos();
+ double oldvalue;
+ bool pos;
+ bool textset;
+ class TipWin * tipwin;
+};
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/common.H b/plugins/zynaddsubfx/zynaddsubfx/src/UI/common.H
new file mode 100644
index 0000000..4a077e3
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/common.H
@@ -0,0 +1,29 @@
+
+/*******************************************************************************/
+/* Copyright (C) 2012 Jonathan Moore Liles */
+/* */
+/* 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; see the file COPYING. If not,write to the Free Software */
+/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+/*******************************************************************************/
+
+class Fl_Widget;
+extern void set_module_parameters ( Fl_Widget * );
+
+#ifdef FLTK_GUI
+#define fl_color_add_alpha( x,y ) x
+#undef FL_NO_BOX
+#undef FL_UP_FRAME
+#define FL_NO_BOX FL_FLAT_BOX
+#define FL_UP_FRAME FL_UP_BOX
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/globals.h b/plugins/zynaddsubfx/zynaddsubfx/src/globals.h
new file mode 100644
index 0000000..d98e8ba
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/globals.h
@@ -0,0 +1,249 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ globals.h - it contains program settings and the program capabilities
+ like number of parts, of effects
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Author: Nasca Octavian Paul
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+
+#ifndef GLOBALS_H
+#define GLOBALS_H
+#include <stdint.h>
+
+
+/**
+ * The number of harmonics of additive synth
+ * This must be smaller than OSCIL_SIZE/2
+ */
+#define MAX_AD_HARMONICS 128
+
+
+/**
+ * The number of harmonics of substractive
+ */
+#define MAX_SUB_HARMONICS 64
+
+
+/*
+ * The maximum number of samples that are used for 1 PADsynth instrument(or item)
+ */
+#define PAD_MAX_SAMPLES 64
+
+
+/*
+ * Number of parts
+ */
+#define NUM_MIDI_PARTS 16
+
+/*
+ * Number of Midi channes
+ */
+#define NUM_MIDI_CHANNELS 16
+
+/*
+ * The number of voices of additive synth for a single note
+ */
+#define NUM_VOICES 8
+
+/*
+ * The poliphony (notes)
+ */
+#define POLIPHONY 128
+
+/*
+ * Number of system effects
+ */
+#define NUM_SYS_EFX 4
+
+
+/*
+ * Number of insertion effects
+ */
+#define NUM_INS_EFX 8
+
+/*
+ * Number of part's insertion effects
+ */
+#define NUM_PART_EFX 3
+
+/*
+ * Maximum number of the instrument on a part
+ */
+#define NUM_KIT_ITEMS 16
+
+
+/*
+ * How is applied the velocity sensing
+ */
+#define VELOCITY_MAX_SCALE 8.0f
+
+/*
+ * The maximum length of instrument's name
+ */
+#define PART_MAX_NAME_LEN 30
+
+/*
+ * The maximum number of bands of the equaliser
+ */
+#define MAX_EQ_BANDS 8
+#if (MAX_EQ_BANDS >= 20)
+#error "Too many EQ bands in globals.h"
+#endif
+
+
+/*
+ * Maximum filter stages
+ */
+#define MAX_FILTER_STAGES 5
+
+/*
+ * Formant filter (FF) limits
+ */
+#define FF_MAX_VOWELS 6
+#define FF_MAX_FORMANTS 12
+#define FF_MAX_SEQUENCE 8
+
+#define LOG_2 0.693147181f
+#define PI 3.1415926536f
+#define LOG_10 2.302585093f
+
+/*
+ * The threshold for the amplitude interpolation used if the amplitude
+ * is changed (by LFO's or Envelope's). If the change of the amplitude
+ * is below this, the amplitude is not interpolated
+ */
+#define AMPLITUDE_INTERPOLATION_THRESHOLD 0.0001f
+
+/*
+ * How the amplitude threshold is computed
+ */
+#define ABOVE_AMPLITUDE_THRESHOLD(a, b) ((2.0f * fabs((b) - (a)) \
+ / (fabs((b) + (a) \
+ + 0.0000000001f))) > \
+ AMPLITUDE_INTERPOLATION_THRESHOLD)
+
+/*
+ * Interpolate Amplitude
+ */
+#define INTERPOLATE_AMPLITUDE(a, b, x, size) ((a) \
+ + ((b) \
+ - (a)) * (float)(x) \
+ / (float) (size))
+
+
+/*
+ * dB
+ */
+#define dB2rap(dB) ((expf((dB) * LOG_10 / 20.0f)))
+#define rap2dB(rap) ((20 * logf(rap) / LOG_10))
+
+#define ZERO(data, size) {char *data_ = (char *) data; for(int i = 0; \
+ i < size; \
+ i++) \
+ data_[i] = 0; }
+#define ZERO_float(data, size) {float *data_ = (float *) data; \
+ for(int i = 0; \
+ i < size; \
+ i++) \
+ data_[i] = 0.0f; }
+
+enum ONOFFTYPE {
+ OFF = 0, ON = 1
+};
+
+enum MidiControllers {
+ C_bankselectmsb = 0, C_pitchwheel = 1000, C_NULL = 1001,
+ C_expression = 11, C_panning = 10, C_bankselectlsb = 32,
+ C_filtercutoff = 74, C_filterq = 71, C_bandwidth = 75, C_modwheel = 1,
+ C_fmamp = 76,
+ C_volume = 7, C_sustain = 64, C_allnotesoff = 123, C_allsoundsoff = 120,
+ C_resetallcontrollers = 121,
+ C_portamento = 65, C_resonance_center = 77, C_resonance_bandwidth = 78,
+
+ C_dataentryhi = 0x06, C_dataentrylo = 0x26, C_nrpnhi = 99, C_nrpnlo = 98
+};
+
+enum LegatoMsg {
+ LM_Norm, LM_FadeIn, LM_FadeOut, LM_CatchUp, LM_ToNorm
+};
+
+//is like i=(int)(floor(f))
+#ifdef ASM_F2I_YES
+#define F2I(f, \
+ i) __asm__ __volatile__ ("fistpl %0" : "=m" (i) : "t" (f \
+ - \
+ 0.49999999f) \
+ : "st");
+#else
+#define F2I(f, i) (i) = ((f > 0) ? ((int)(f)) : ((int)(f - 1.0f)));
+#endif
+
+
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+//temporary include for synth->{samplerate/buffersize} members
+struct SYNTH_T {
+ SYNTH_T(void)
+ :samplerate(44100), buffersize(256), oscilsize(1024)
+ {
+ alias();
+ }
+
+ /**Sampling rate*/
+ unsigned int samplerate;
+
+ /**
+ * The size of a sound buffer (or the granularity)
+ * All internal transfer of sound data use buffer of this size
+ * All parameters are constant during this period of time, exception
+ * some parameters(like amplitudes) which are linear interpolated.
+ * If you increase this you'll ecounter big latencies, but if you
+ * decrease this the CPU requirements gets high.
+ */
+ int buffersize;
+
+ /**
+ * The size of ADnote Oscillator
+ * Decrease this => poor quality
+ * Increase this => CPU requirements gets high (only at start of the note)
+ */
+ int oscilsize;
+
+ //Alias for above terms
+ float samplerate_f;
+ float halfsamplerate_f;
+ float buffersize_f;
+ int bufferbytes;
+ float oscilsize_f;
+
+ inline void alias(void)
+ {
+ halfsamplerate_f = (samplerate_f = samplerate) / 2.0f;
+ buffersize_f = buffersize;
+ bufferbytes = buffersize * sizeof(float);
+ oscilsize_f = oscilsize;
+ }
+ static float numRandom(void); //defined in Util.cpp for now
+};
+
+extern SYNTH_T *synth;
+#endif
diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp
new file mode 100644
index 0000000..555b1b4
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp
@@ -0,0 +1,554 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ main.cpp - Main file of the synthesizer
+ Copyright (C) 2002-2005 Nasca Octavian Paul
+ Copyright (C) 2012-2014 Mark McCurry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License
+ 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 (version 2 or later) for more details.
+
+ You should have received a copy of the GNU General Public License (version 2)
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+#include <FL/Fl.H>
+
+#include "UI/common.H"
+
+#include <iostream>
+#include <cmath>
+#include <cctype>
+#include <algorithm>
+#include <signal.h>
+
+#include <unistd.h>
+#include <pthread.h>
+
+#include <getopt.h>
+
+#include "DSP/FFTwrapper.h"
+#include "Misc/Master.h"
+#include "Misc/Part.h"
+#include "Misc/Util.h"
+#include "Misc/Dump.h"
+extern Dump dump;
+
+
+//Nio System
+#include "Nio/Nio.h"
+
+#ifndef DISABLE_GUI
+#ifdef QT_GUI
+
+#include <QApplication>
+#include "masterui.h"
+QApplication *app;
+
+#elif defined FLTK_GUI
+#include "UI/MasterUI.h"
+#elif defined NTK_GUI
+#include "UI/MasterUI.h"
+#include <FL/Fl_Shared_Image.H>
+#include <FL/Fl_Tiled_Image.H>
+#include <FL/Fl_Dial.H>
+#include <FL/Fl_Tooltip.H>
+#endif // FLTK_GUI
+
+MasterUI *ui;
+
+#endif //DISABLE_GUI
+
+using namespace std;
+
+pthread_t thr4;
+Master *master;
+SYNTH_T *synth;
+int swaplr = 0; //1 for left-right swapping
+
+int Pexitprogram = 0; //if the UI set this to 1, the program will exit
+
+#if LASH
+#include "Misc/LASHClient.h"
+LASHClient *lash = NULL;
+#endif
+
+#if USE_NSM
+#include "UI/NSM.H"
+
+NSM_Client *nsm = 0;
+#endif
+
+char *instance_name = 0;
+
+void exitprogram();
+
+//cleanup on signaled exit
+void sigterm_exit(int /*sig*/)
+{
+ Pexitprogram = 1;
+}
+
+
+#ifndef DISABLE_GUI
+
+#ifdef NTK_GUI
+static Fl_Tiled_Image *module_backdrop;
+#endif
+
+void
+set_module_parameters ( Fl_Widget *o )
+{
+#ifdef NTK_GUI
+ o->box( FL_DOWN_FRAME );
+ o->align( o->align() | FL_ALIGN_IMAGE_BACKDROP );
+ o->color( FL_BLACK );
+ o->image( module_backdrop );
+ o->labeltype( FL_SHADOW_LABEL );
+#else
+ o->box( FL_PLASTIC_UP_BOX );
+ o->color( FL_CYAN );
+ o->labeltype( FL_EMBOSSED_LABEL );
+#endif
+}
+#endif
+
+/*
+ * Program initialisation
+ */
+void initprogram(void)
+{
+ cerr.precision(1);
+ cerr << std::fixed;
+ cerr << "\nSample Rate = \t\t" << synth->samplerate << endl;
+ cerr << "Sound Buffer Size = \t" << synth->buffersize << " samples" << endl;
+ cerr << "Internal latency = \t" << synth->buffersize_f * 1000.0f
+ / synth->samplerate_f << " ms" << endl;
+ cerr << "ADsynth Oscil.Size = \t" << synth->oscilsize << " samples" << endl;
+
+
+ master = &Master::getInstance();
+ master->swaplr = swaplr;
+
+ signal(SIGINT, sigterm_exit);
+ signal(SIGTERM, sigterm_exit);
+}
+
+/*
+ * Program exit
+ */
+void exitprogram()
+{
+ //ensure that everything has stopped with the mutex wait
+ pthread_mutex_lock(&master->mutex);
+ pthread_mutex_unlock(&master->mutex);
+
+ Nio::stop();
+
+#ifndef DISABLE_GUI
+ delete ui;
+#endif
+#if LASH
+ if(lash)
+ delete lash;
+#endif
+#if USE_NSM
+ if(nsm)
+ delete nsm;
+#endif
+
+ delete [] denormalkillbuf;
+ FFT_cleanup();
+ Master::deleteInstance();
+}
+
+int main(int argc, char *argv[])
+{
+ synth = new SYNTH_T;
+ config.init();
+ dump.startnow();
+ int noui = 0;
+ cerr
+ << "\nZynAddSubFX - Copyright (c) 2002-2011 Nasca Octavian Paul and others"
+ << endl;
+ cerr
+ << " Copyright (c) 2009-2014 Mark McCurry [active maintainer]"
+ << endl;
+ cerr << "Compiled: " << __DATE__ << " " << __TIME__ << endl;
+ cerr << "This program is free software (GNU GPL v.2 or later) and \n";
+ cerr << "it comes with ABSOLUTELY NO WARRANTY.\n" << endl;
+ if(argc == 1)
+ cerr << "Try 'zynaddsubfx --help' for command-line options." << endl;
+
+ /* Get the settings from the Config*/
+ synth->samplerate = config.cfg.SampleRate;
+ synth->buffersize = config.cfg.SoundBufferSize;
+ synth->oscilsize = config.cfg.OscilSize;
+ swaplr = config.cfg.SwapStereo;
+
+ Nio::preferedSampleRate(synth->samplerate);
+
+ synth->alias(); //build aliases
+
+ sprng(time(NULL));
+
+ /* Parse command-line options */
+ struct option opts[] = {
+ {
+ "load", 2, NULL, 'l'
+ },
+ {
+ "load-instrument", 2, NULL, 'L'
+ },
+ {
+ "sample-rate", 2, NULL, 'r'
+ },
+ {
+ "buffer-size", 2, NULL, 'b'
+ },
+ {
+ "oscil-size", 2, NULL, 'o'
+ },
+ {
+ "dump", 2, NULL, 'D'
+ },
+ {
+ "swap", 2, NULL, 'S'
+ },
+ {
+ "no-gui", 2, NULL, 'U'
+ },
+ {
+ "dummy", 2, NULL, 'Y'
+ },
+ {
+ "help", 2, NULL, 'h'
+ },
+ {
+ "version", 2, NULL, 'v'
+ },
+ {
+ "named", 1, NULL, 'N'
+ },
+ {
+ "auto-connect", 0, NULL, 'a'
+ },
+ {
+ "output", 1, NULL, 'O'
+ },
+ {
+ "input", 1, NULL, 'I'
+ },
+ {
+ "exec-after-init", 1, NULL, 'e'
+ },
+ {
+ 0, 0, 0, 0
+ }
+ };
+ opterr = 0;
+ int option_index = 0, opt, exitwithhelp = 0, exitwithversion = 0;
+
+ string loadfile, loadinstrument, execAfterInit;
+
+ while(1) {
+ int tmp = 0;
+
+ /**\todo check this process for a small memory leak*/
+ opt = getopt_long(argc,
+ argv,
+ "l:L:r:b:o:I:O:N:e:hvaSDUY",
+ opts,
+ &option_index);
+ char *optarguments = optarg;
+
+#define GETOP(x) if(optarguments) \
+ x = optarguments
+#define GETOPNUM(x) if(optarguments) \
+ x = atoi(optarguments)
+
+
+ if(opt == -1)
+ break;
+
+ switch(opt) {
+ case 'h':
+ exitwithhelp = 1;
+ break;
+ case 'v':
+ exitwithversion = 1;
+ break;
+ case 'Y': /* this command a dummy command (has NO effect)
+ and is used because I need for NSIS installer
+ (NSIS sometimes forces a command line for a
+ program, even if I don't need that; eg. when
+ I want to add a icon to a shortcut.
+ */
+ break;
+ case 'U':
+ noui = 1;
+ break;
+ case 'l':
+ GETOP(loadfile);
+ break;
+ case 'L':
+ GETOP(loadinstrument);
+ break;
+ case 'r':
+ GETOPNUM(synth->samplerate);
+ if(synth->samplerate < 4000) {
+ cerr << "ERROR:Incorrect sample rate: " << optarguments
+ << endl;
+ exit(1);
+ }
+ break;
+ case 'b':
+ GETOPNUM(synth->buffersize);
+ if(synth->buffersize < 2) {
+ cerr << "ERROR:Incorrect buffer size: " << optarguments
+ << endl;
+ exit(1);
+ }
+ break;
+ case 'o':
+ if(optarguments)
+ synth->oscilsize = tmp = atoi(optarguments);
+ if(synth->oscilsize < MAX_AD_HARMONICS * 2)
+ synth->oscilsize = MAX_AD_HARMONICS * 2;
+ synth->oscilsize =
+ (int) powf(2,
+ ceil(logf(synth->oscilsize - 1.0f) / logf(2.0f)));
+ if(tmp != synth->oscilsize)
+ cerr
+ <<
+ "synth->oscilsize is wrong (must be 2^n) or too small. Adjusting to "
+ << synth->oscilsize << "." << endl;
+ break;
+ case 'S':
+ swaplr = 1;
+ break;
+ case 'D':
+ dump.startnow();
+ break;
+ case 'N':
+ Nio::setPostfix(optarguments);
+ break;
+ case 'I':
+ if(optarguments)
+ Nio::setDefaultSource(optarguments);
+ break;
+ case 'O':
+ if(optarguments)
+ Nio::setDefaultSink(optarguments);
+ break;
+ case 'a':
+ Nio::autoConnect = true;
+ break;
+ case 'e':
+ GETOP(execAfterInit);
+ break;
+ case '?':
+ cerr << "ERROR:Bad option or parameter.\n" << endl;
+ exitwithhelp = 1;
+ break;
+ }
+ }
+
+ synth->alias();
+
+ if(exitwithversion) {
+ cout << "Version: " << VERSION << endl;
+ return 0;
+ }
+ if(exitwithhelp != 0) {
+ cout << "Usage: zynaddsubfx [OPTION]\n\n"
+ << " -h , --help \t\t\t\t Display command-line help and exit\n"
+ << " -v , --version \t\t\t Display version and exit\n"
+ << " -l file, --load=FILE\t\t\t Loads a .xmz file\n"
+ << " -L file, --load-instrument=FILE\t Loads a .xiz file\n"
+ << " -r SR, --sample-rate=SR\t\t Set the sample rate SR\n"
+ <<
+ " -b BS, --buffer-size=SR\t\t Set the buffer size (granularity)\n"
+ << " -o OS, --oscil-size=OS\t\t Set the ADsynth oscil. size\n"
+ << " -S , --swap\t\t\t\t Swap Left <--> Right\n"
+ << " -D , --dump\t\t\t\t Dumps midi note ON/OFF commands\n"
+ <<
+ " -U , --no-gui\t\t\t\t Run ZynAddSubFX without user interface\n"
+ << " -N , --named\t\t\t\t Postfix IO Name when possible\n"
+ << " -a , --auto-connect\t\t\t AutoConnect when using JACK\n"
+ << " -O , --output\t\t\t\t Set Output Engine\n"
+ << " -I , --input\t\t\t\t Set Input Engine\n"
+ << " -e , --exec-after-init\t\t Run post-initialization script\n"
+ << endl;
+
+ return 0;
+ }
+
+ //produce denormal buf
+ denormalkillbuf = new float [synth->buffersize];
+ for(int i = 0; i < synth->buffersize; ++i)
+ denormalkillbuf[i] = (RND - 0.5f) * 1e-16;
+
+ initprogram();
+
+ if(!loadfile.empty()) {
+ int tmp = master->loadXML(loadfile.c_str());
+ if(tmp < 0) {
+ cerr << "ERROR: Could not load master file " << loadfile
+ << "." << endl;
+ exit(1);
+ }
+ else {
+ master->applyparameters();
+ cout << "Master file loaded." << endl;
+ }
+ }
+
+ if(!loadinstrument.empty()) {
+ int loadtopart = 0;
+ int tmp = master->part[loadtopart]->loadXMLinstrument(
+ loadinstrument.c_str());
+ if(tmp < 0) {
+ cerr << "ERROR: Could not load instrument file "
+ << loadinstrument << '.' << endl;
+ exit(1);
+ }
+ else {
+ master->part[loadtopart]->applyparameters();
+ cout << "Instrument file loaded." << endl;
+ }
+ }
+
+ //Run the Nio system
+ bool ioGood = Nio::start();
+
+ if(!execAfterInit.empty()) {
+ cout << "Executing user supplied command: " << execAfterInit << endl;
+ if(system(execAfterInit.c_str()) == -1)
+ cerr << "Command Failed..." << endl;
+ }
+
+
+#ifndef DISABLE_GUI
+
+#ifdef NTK_GUI
+ fl_register_images();
+
+ Fl_Tooltip::textcolor(0x0);
+
+ Fl_Dial::default_style(Fl_Dial::PIXMAP_DIAL);
+
+ if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/knob.png"))
+ Fl_Dial::default_image(img);
+ else
+ Fl_Dial::default_image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/knob.png"));
+
+ if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/window_backdrop.png"))
+ Fl::scheme_bg(new Fl_Tiled_Image(img));
+ else
+ Fl::scheme_bg(new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/window_backdrop.png")));
+
+ if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/module_backdrop.png"))
+ module_backdrop = new Fl_Tiled_Image(img);
+ else
+ module_backdrop = new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/module_backdrop.png"));
+
+ Fl::background( 50, 50, 50 );
+ Fl::background2( 70, 70, 70 );
+ Fl::foreground( 255,255,255 );
+#endif
+
+ ui = new MasterUI(master, &Pexitprogram);
+
+ if ( !noui)
+ {
+ ui->showUI();
+
+ if(!ioGood)
+ fl_alert(
+ "Default IO did not initialize.\nDefaulting to NULL backend.");
+ }
+
+#endif
+
+#ifndef DISABLE_GUI
+#if USE_NSM
+ char *nsm_url = getenv("NSM_URL");
+
+ if(nsm_url) {
+ nsm = new NSM_Client;
+
+ if(!nsm->init(nsm_url))
+ nsm->announce("ZynAddSubFX", ":switch:", argv[0]);
+ else {
+ delete nsm;
+ nsm = NULL;
+ }
+ }
+#endif
+#endif
+
+#if USE_NSM
+ if(!nsm)
+#endif
+ {
+#if LASH
+ lash = new LASHClient(&argc, &argv);
+#ifndef DISABLE_GUI
+ ui->sm_indicator1->value(1);
+ ui->sm_indicator2->value(1);
+ ui->sm_indicator1->tooltip("LASH");
+ ui->sm_indicator2->tooltip("LASH");
+#endif
+#endif
+ }
+
+ while(Pexitprogram == 0) {
+#ifndef DISABLE_GUI
+#if USE_NSM
+ if(nsm) {
+ nsm->check();
+ goto done;
+ }
+#endif
+#if LASH
+ {
+ string filename;
+ switch(lash->checkevents(filename)) {
+ case LASHClient::Save:
+ ui->do_save_master(filename.c_str());
+ lash->confirmevent(LASHClient::Save);
+ break;
+ case LASHClient::Restore:
+ ui->do_load_master(filename.c_str());
+ lash->confirmevent(LASHClient::Restore);
+ break;
+ case LASHClient::Quit:
+ Pexitprogram = 1;
+ default:
+ break;
+ }
+ }
+#endif //LASH
+
+#if USE_NSM
+done:
+#endif
+
+ Fl::wait(0.02f);
+#else
+ usleep(100000);
+#endif
+ }
+
+ exitprogram();
+ return 0;
+}
diff --git a/plugins/zynaddsubfx/zynaddsubfx/style.cfg b/plugins/zynaddsubfx/zynaddsubfx/style.cfg
new file mode 100644
index 0000000..ba66d99
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/style.cfg
@@ -0,0 +1,1218 @@
+# Uncrustify 0.53
+
+#
+# General options
+#
+
+# The type of line endings
+newlines = lf # auto/lf/crlf/cr
+
+# The original size of tabs in the input
+input_tab_size = 4 # number
+
+# The size of tabs in the output (only used if align_with_tabs=true)
+output_tab_size = 4 # number
+
+# The ascii value of the string escape char, usually 92 (\) or 94 (^). (Pawn)
+string_escape_char = 92 # number
+
+# Alternate string escape char for Pawn. Only works right before the quote char.
+string_escape_char2 = 0 # number
+
+#
+# Indenting
+#
+
+# The number of columns to indent per level.
+# Usually 2, 3, 4, or 8.
+indent_columns = 4 # number
+
+# How to use tabs when indenting code
+# 0=spaces only
+# 1=indent with tabs, align with spaces
+# 2=indent and align with tabs
+indent_with_tabs = 0 # number
+
+# Whether to indent strings broken by '\' so that they line up
+indent_align_string = true # false/true
+
+# The number of spaces to indent multi-line XML strings.
+# Requires indent_align_string=True
+indent_xml_string = 0 # number
+
+# Spaces to indent '{' from level
+indent_brace = 0 # number
+
+# Whether braces are indented to the body level
+indent_braces = false # false/true
+
+# Disabled indenting function braces if indent_braces is true
+indent_braces_no_func = false # false/true
+
+# Indent based on the size of the brace parent, ie 'if' => 3 spaces, 'for' => 4 spaces, etc.
+indent_brace_parent = false # false/true
+
+# Whether the 'namespace' body is indented
+indent_namespace = true # false/true
+
+# Whether the 'extern "C"' body is indented
+indent_extern = true # false/true
+
+# Whether the 'class' body is indented
+indent_class = true # false/true
+
+# Whether to indent the stuff after a leading class colon
+indent_class_colon = true # false/true
+
+# False=treat 'else\nif' as 'else if' for indenting purposes
+# True=indent the 'if' one level
+indent_else_if = false # false/true
+
+# Amount to indent variable declarations after a open brace. neg=relative, pos=absolute
+indent_var_def_blk = 0 # number
+
+# True: indent continued function call parameters one indent level
+# False: align parameters under the open paren
+indent_func_call_param = false # false/true
+
+# Same as indent_func_call_param, but for function defs
+indent_func_def_param = false # false/true
+
+# Same as indent_func_call_param, but for function protos
+indent_func_proto_param = false # false/true
+
+# Same as indent_func_call_param, but for class declarations
+indent_func_class_param = false # false/true
+
+# Same as indent_func_call_param, but for class variable constructors
+indent_func_ctor_var_param = false # false/true
+
+# Same as indent_func_call_param, but for templates
+indent_template_param = false # false/true
+
+# Double the indent for indent_func_xxx_param options
+indent_func_param_double = false # false/true
+
+# Indentation column for standalone 'const' function decl/proto qualifier
+indent_func_const = 0 # number
+
+# Indentation column for standalone 'throw' function decl/proto qualifier
+indent_func_throw = 0 # number
+
+# The number of spaces to indent a continued '->' or '.'
+# Usually set to 0, 1, or indent_columns.
+indent_member = 0 # number
+
+# Spaces to indent single line ('//') comments on lines before code
+indent_sing_line_comments = 0 # number
+
+# If set, will indent trailing single line ('//') comments relative
+# to the code instead of trying to keep the same absolute column
+indent_relative_single_line_comments = false # false/true
+
+# Spaces to indent 'case' from 'switch'
+# Usually 0 or indent_columns.
+indent_switch_case = 4 # number
+
+# Spaces to shift the 'case' line, without affecting any other lines
+# Usually 0.
+indent_case_shift = 0 # number
+
+# Spaces to indent '{' from 'case'.
+# By default, the brace will appear under the 'c' in case.
+# Usually set to 0 or indent_columns.
+indent_case_brace = 0 # number
+
+# Whether to indent comments found in first column
+indent_col1_comment = false # false/true
+
+# How to indent goto labels
+# >0 : absolute column where 1 is the leftmost column
+# <=0 : subtract from brace indent
+indent_label = 1 # number
+
+# Same as indent_label, but for access specifiers that are followed by a colon
+indent_access_spec = 1 # number
+
+# Indent the code after an access specifier by one level.
+# If set, this option forces 'indent_access_spec=0'
+indent_access_spec_body = true # false/true
+
+# If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended)
+indent_paren_nl = false # false/true
+
+# Controls the indent of a close paren after a newline.
+# 0: Indent to body level
+# 1: Align under the open paren
+# 2: Indent to the brace level
+indent_paren_close = 1 # number
+
+# Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren
+indent_comma_paren = false # false/true
+
+# Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren
+indent_bool_paren = false # false/true
+
+# If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended)
+indent_square_nl = false # false/true
+
+# Don't change the relative indent of ESQL/C 'EXEC SQL' bodies
+indent_preserve_sql = false # false/true
+
+# Align continued statements at the '='. Default=True
+# If FALSE or the '=' is followed by a newline, the next line is indent one tab.
+indent_align_assign = true # false/true
+
+#
+# Spacing options
+#
+
+# Add or remove space around arithmetic operator '+', '-', '/', '*', etc
+sp_arith = force # ignore/add/remove/force
+
+# Add or remove space around assignment operator '=', '+=', etc
+sp_assign = force # ignore/add/remove/force
+
+# Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign.
+sp_before_assign = ignore # ignore/add/remove/force
+
+# Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign.
+sp_after_assign = ignore # ignore/add/remove/force
+
+# Add or remove space around assignment '=' in enum
+sp_enum_assign = force # ignore/add/remove/force
+
+# Add or remove space before assignment '=' in enum. Overrides sp_enum_assign.
+sp_enum_before_assign = ignore # ignore/add/remove/force
+
+# Add or remove space after assignment '=' in enum. Overrides sp_enum_assign.
+sp_enum_after_assign = ignore # ignore/add/remove/force
+
+# Add or remove space around preprocessor '##' concatenation operator
+sp_pp_concat = add # ignore/add/remove/force
+
+# Add or remove space after preprocessor '#' stringify operator
+sp_pp_stringify = add # ignore/add/remove/force
+
+# Add or remove space around boolean operators '&&' and '||'
+sp_bool = force # ignore/add/remove/force
+
+# Add or remove space around compare operator '<', '>', '==', etc
+sp_compare = force # ignore/add/remove/force
+
+# Add or remove space inside '(' and ')'
+sp_inside_paren = remove # ignore/add/remove/force
+
+# Add or remove space between nested parens
+sp_paren_paren = remove # ignore/add/remove/force
+
+# Whether to balance spaces inside nested parens
+sp_balance_nested_parens = false # false/true
+
+# Add or remove space between ')' and '{'
+sp_paren_brace = force # ignore/add/remove/force
+
+# Add or remove space before pointer star '*'
+sp_before_ptr_star = force # ignore/add/remove/force
+
+# Add or remove space before pointer star '*' that isn't followed by a variable name
+# If set to 'ignore', sp_before_ptr_star is used instead.
+sp_before_unnamed_ptr_star = ignore # ignore/add/remove/force
+
+# Add or remove space between pointer stars '*'
+sp_between_ptr_star = remove # ignore/add/remove/force
+
+# Add or remove space after pointer star '*', if followed by a word.
+sp_after_ptr_star = remove # ignore/add/remove/force
+
+# Add or remove space after a pointer star '*', if followed by a func proto/def.
+sp_after_ptr_star_func = remove # ignore/add/remove/force
+
+# Add or remove space before a pointer star '*', if followed by a func proto/def.
+sp_before_ptr_star_func = force # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&'
+sp_before_byref = force # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&' that isn't followed by a variable name
+# If set to 'ignore', sp_before_byref is used instead.
+sp_before_unnamed_byref = ignore # ignore/add/remove/force
+
+# Add or remove space after reference sign '&', if followed by a word.
+sp_after_byref = remove # ignore/add/remove/force
+
+# Add or remove space after a reference sign '&', if followed by a func proto/def.
+sp_after_byref_func = ignore # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&', if followed by a func proto/def.
+sp_before_byref_func = ignore # ignore/add/remove/force
+
+# Add or remove space between type and word
+sp_after_type = remove # ignore/add/remove/force
+
+# Add or remove space in 'template <' vs 'template<'.
+# If set to ignore, sp_before_angle is used.
+sp_template_angle = ignore # ignore/add/remove/force
+
+# Add or remove space before '<>'
+sp_before_angle = remove # ignore/add/remove/force
+
+# Add or remove space inside '<' and '>'
+sp_inside_angle = remove # ignore/add/remove/force
+
+# Add or remove space after '<>'
+sp_after_angle = ignore # ignore/add/remove/force
+
+# Add or remove space between '<>' and '(' as found in 'new List<byte>();'
+sp_angle_paren = remove # ignore/add/remove/force
+
+# Add or remove space between '<>' and a word as in 'List<byte> m;'
+sp_angle_word = ignore # ignore/add/remove/force
+
+# Add or remove space before '(' of 'if', 'for', 'switch', and 'while'
+sp_before_sparen = remove # ignore/add/remove/force
+
+# Add or remove space inside if-condition '(' and ')'
+sp_inside_sparen = remove # ignore/add/remove/force
+
+# Add or remove space before if-condition ')'. Overrides sp_inside_sparen.
+sp_inside_sparen_close = remove # ignore/add/remove/force
+
+# Add or remove space after ')' of 'if', 'for', 'switch', and 'while'
+sp_after_sparen = remove # ignore/add/remove/force
+
+# Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while'
+sp_sparen_brace = force # ignore/add/remove/force
+
+# Add or remove space between 'invariant' and '(' in the D language.
+sp_invariant_paren = ignore # ignore/add/remove/force
+
+# Add or remove space after the ')' in 'invariant (C) c' in the D language.
+sp_after_invariant_paren = ignore # ignore/add/remove/force
+
+# Add or remove space before empty statement ';' on 'if', 'for' and 'while'
+sp_special_semi = ignore # ignore/add/remove/force
+
+# Add or remove space before ';'
+sp_before_semi = remove # ignore/add/remove/force
+
+# Add or remove space before ';' in non-empty 'for' statements
+sp_before_semi_for = remove # ignore/add/remove/force
+
+# Add or remove space before a semicolon of an empty part of a for statment.
+sp_before_semi_for_empty = remove # ignore/add/remove/force
+
+# Add or remove space after the final semicolon of an empty part of a for statment: for ( ; ; <here> ).
+sp_after_semi_for_empty = remove # ignore/add/remove/force
+
+# Add or remove space before '[' (except '[]')
+sp_before_square = ignore # ignore/add/remove/force
+
+# Add or remove space before '[]'
+sp_before_squares = ignore # ignore/add/remove/force
+
+# Add or remove space inside '[' and ']'
+sp_inside_square = remove # ignore/add/remove/force
+
+# Add or remove space after ','
+sp_after_comma = force # ignore/add/remove/force
+
+# Add or remove space before ','
+sp_before_comma = remove # ignore/add/remove/force
+
+# Add or remove space after class ':'
+sp_after_class_colon = remove # ignore/add/remove/force
+
+# Add or remove space before class ':'
+sp_before_class_colon = remove # ignore/add/remove/force
+
+# Add or remove space before case ':'
+sp_before_case_colon = remove # ignore/add/remove/force
+
+# Add or remove space between 'operator' and operator sign
+sp_after_operator = ignore # ignore/add/remove/force
+
+# Add or remove space between the operator symbol and the open paren, as in 'operator ++('
+sp_after_operator_sym = ignore # ignore/add/remove/force
+
+# Add or remove space after C/D cast, ie 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a'
+sp_after_cast = ignore # ignore/add/remove/force
+
+# Add or remove spaces inside cast parens
+sp_inside_paren_cast = remove # ignore/add/remove/force
+
+# Add or remove space between the type and open paren in a C++ cast, ie 'int(exp)' vs 'int (exp)'
+sp_cpp_cast_paren = remove # ignore/add/remove/force
+
+# Add or remove space between 'sizeof' and '('
+sp_sizeof_paren = remove # ignore/add/remove/force
+
+# Add or remove space after the tag keyword (Pawn)
+sp_after_tag = ignore # ignore/add/remove/force
+
+# Add or remove space inside enum '{' and '}'
+sp_inside_braces_enum = ignore # ignore/add/remove/force
+
+# Add or remove space inside struct/union '{' and '}'
+sp_inside_braces_struct = remove # ignore/add/remove/force
+
+# Add or remove space inside '{' and '}'
+sp_inside_braces = ignore # ignore/add/remove/force
+
+# Add or remove space inside '{}'
+sp_inside_braces_empty = ignore # ignore/add/remove/force
+
+# Add or remove space between return type and function name
+# A minimum of 1 is forced except for pointer return types.
+sp_type_func = ignore # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function declaration
+sp_func_proto_paren = remove # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function definition
+sp_func_def_paren = remove # ignore/add/remove/force
+
+# Add or remove space inside empty function '()'
+sp_inside_fparens = remove # ignore/add/remove/force
+
+# Add or remove space inside function '(' and ')'
+sp_inside_fparen = remove # ignore/add/remove/force
+
+# Add or remove space between ']' and '(' when part of a function call.
+sp_square_fparen = ignore # ignore/add/remove/force
+
+# Add or remove space between ')' and '{' of function
+sp_fparen_brace = force # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function calls
+sp_func_call_paren = remove # ignore/add/remove/force
+
+# Add or remove space between the user function name and '(' on function calls
+# You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file.
+sp_func_call_user_paren = ignore # ignore/add/remove/force
+
+# Add or remove space between a constructor/destructor and the open paren
+sp_func_class_paren = remove # ignore/add/remove/force
+
+# Add or remove space between 'return' and '('
+sp_return_paren = remove # ignore/add/remove/force
+
+# Add or remove space between '__attribute__' and '('
+sp_attribute_paren = ignore # ignore/add/remove/force
+
+# Add or remove space between 'defined' and '(' in '#if defined (FOO)'
+sp_defined_paren = ignore # ignore/add/remove/force
+
+# Add or remove space between 'throw' and '(' in 'throw (something)'
+sp_throw_paren = ignore # ignore/add/remove/force
+
+# Add or remove space between macro and value
+sp_macro = ignore # ignore/add/remove/force
+
+# Add or remove space between macro function ')' and value
+sp_macro_func = ignore # ignore/add/remove/force
+
+# Add or remove space between 'else' and '{' if on the same line
+sp_else_brace = force # ignore/add/remove/force
+
+# Add or remove space between '}' and 'else' if on the same line
+sp_brace_else = ignore # ignore/add/remove/force
+
+# Add or remove space between '}' and the name of a typedef on the same line
+sp_brace_typedef = ignore # ignore/add/remove/force
+
+# Add or remove space between 'catch' and '{' if on the same line
+sp_catch_brace = ignore # ignore/add/remove/force
+
+# Add or remove space between '}' and 'catch' if on the same line
+sp_brace_catch = ignore # ignore/add/remove/force
+
+# Add or remove space between 'finally' and '{' if on the same line
+sp_finally_brace = ignore # ignore/add/remove/force
+
+# Add or remove space between '}' and 'finally' if on the same line
+sp_brace_finally = ignore # ignore/add/remove/force
+
+# Add or remove space between 'try' and '{' if on the same line
+sp_try_brace = ignore # ignore/add/remove/force
+
+# Add or remove space between get/set and '{' if on the same line
+sp_getset_brace = ignore # ignore/add/remove/force
+
+# Add or remove space before the '::' operator
+sp_before_dc = remove # ignore/add/remove/force
+
+# Add or remove space after the '::' operator
+sp_after_dc = remove # ignore/add/remove/force
+
+# Add or remove around the D named array initializer ':' operator
+sp_d_array_colon = ignore # ignore/add/remove/force
+
+# Add or remove space after the '!' (not) operator.
+sp_not = remove # ignore/add/remove/force
+
+# Add or remove space after the '~' (invert) operator.
+sp_inv = remove # ignore/add/remove/force
+
+# Add or remove space after the '&' (address-of) operator.
+# This does not affect the spacing after a '&' that is part of a type.
+sp_addr = remove # ignore/add/remove/force
+
+# Add or remove space around the '.' or '->' operators
+sp_member = remove # ignore/add/remove/force
+
+# Add or remove space after the '*' (dereference) operator.
+# This does not affect the spacing after a '*' that is part of a type.
+sp_deref = remove # ignore/add/remove/force
+
+# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'
+sp_sign = remove # ignore/add/remove/force
+
+# Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;'
+sp_incdec = remove # ignore/add/remove/force
+
+# Add or remove space before a backslash-newline at the end of a line
+sp_before_nl_cont = force # ignore/add/remove/force
+
+# Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;'
+sp_after_oc_scope = ignore # ignore/add/remove/force
+
+# Add or remove space after the colon in message specs
+# '-(int) f:(int) x;' vs '-(int) f: (int) x;'
+sp_after_oc_colon = ignore # ignore/add/remove/force
+
+# Add or remove space before the colon in message specs
+# '-(int) f: (int) x;' vs '-(int) f : (int) x;'
+sp_before_oc_colon = ignore # ignore/add/remove/force
+
+# Add or remove space after the colon in message specs
+# '[object setValue:1];' vs '[object setValue: 1];'
+sp_after_send_oc_colon = ignore # ignore/add/remove/force
+
+# Add or remove space before the colon in message specs
+# '[object setValue:1];' vs '[object setValue :1];'
+sp_before_send_oc_colon = ignore # ignore/add/remove/force
+
+# Add or remove space after the (type) in message specs
+# '-(int) f: (int) x;' vs '-(int) f: (int)x;'
+sp_after_oc_type = ignore # ignore/add/remove/force
+
+# Add or remove space around the ':' in 'b ? t : f'
+sp_cond_colon = ignore # ignore/add/remove/force
+
+# Add or remove space around the '?' in 'b ? t : f'
+sp_cond_question = ignore # ignore/add/remove/force
+
+# Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here.
+sp_case_label = ignore # ignore/add/remove/force
+
+# Control the space around the D '..' operator.
+sp_range = ignore # ignore/add/remove/force
+
+# Control the space after the opening of a C++ comment '// A' vs '//A'
+sp_cmt_cpp_start = ignore # ignore/add/remove/force
+
+#
+# Code alignment (not left column spaces/tabs)
+#
+
+# Whether to keep non-indenting tabs
+align_keep_tabs = false # false/true
+
+# Whether to use tabs for alinging
+align_with_tabs = false # false/true
+
+# Whether to bump out to the next tab when aligning
+align_on_tabstop = false # false/true
+
+# Whether to left-align numbers
+align_number_left = false # false/true
+
+# Align variable definitions in prototypes and functions
+align_func_params = false # false/true
+
+# Align parameters in single-line functions that have the same name.
+# The function names must already be aligned with each other.
+align_same_func_call_params = false # false/true
+
+# The span for aligning variable definitions (0=don't align)
+align_var_def_span = 1 # number
+
+# How to align the star in variable definitions.
+# 0=Part of the type 'void * foo;'
+# 1=Part of the variable 'void *foo;'
+# 2=Dangling 'void *foo;'
+align_var_def_star_style = 2 # number
+
+# How to align the '&' in variable definitions.
+# 0=Part of the type
+# 1=Part of the variable
+# 2=Dangling
+align_var_def_amp_style = 2 # number
+
+# The threshold for aligning variable definitions (0=no limit)
+align_var_def_thresh = 5 # number
+
+# The gap for aligning variable definitions
+align_var_def_gap = 1 # number
+
+# Whether to align the colon in struct bit fields
+align_var_def_colon = false # false/true
+
+# Whether to align any attribute after the variable name
+align_var_def_attribute = false # false/true
+
+# Whether to align inline struct/enum/union variable definitions
+align_var_def_inline = false # false/true
+
+# The span for aligning on '=' in assignments (0=don't align)
+align_assign_span = 1 # number
+
+# The threshold for aligning on '=' in assignments (0=no limit)
+align_assign_thresh = 5 # number
+
+# The span for aligning on '=' in enums (0=don't align)
+align_enum_equ_span = 1 # number
+
+# The threshold for aligning on '=' in enums (0=no limit)
+align_enum_equ_thresh = 5 # number
+
+# The span for aligning struct/union (0=don't align)
+align_var_struct_span = 1 # number
+
+# The threshold for aligning struct/union member definitions (0=no limit)
+align_var_struct_thresh = 5 # number
+
+# The gap for aligning struct/union member definitions
+align_var_struct_gap = 0 # number
+
+# The span for aligning struct initializer values (0=don't align)
+align_struct_init_span = 1 # number
+
+# The minimum space between the type and the synonym of a typedef
+align_typedef_gap = 0 # number
+
+# The span for aligning single-line typedefs (0=don't align)
+align_typedef_span = 1 # number
+
+# How to align typedef'd functions with other typedefs
+# 0: Don't mix them at all
+# 1: align the open paren with the types
+# 2: align the function type name with the other type names
+align_typedef_func = 0 # number
+
+# Controls the positioning of the '*' in typedefs. Just try it.
+# 0: Align on typdef type, ignore '*'
+# 1: The '*' is part of type name: typedef int *pint;
+# 2: The '*' is part of the type, but dangling: typedef int *pint;
+align_typedef_star_style = 0 # number
+
+# Controls the positioning of the '&' in typedefs. Just try it.
+# 0: Align on typdef type, ignore '&'
+# 1: The '&' is part of type name: typedef int &pint;
+# 2: The '&' is part of the type, but dangling: typedef int &pint;
+align_typedef_amp_style = 0 # number
+
+# The span for aligning comments that end lines (0=don't align)
+align_right_cmt_span = 0 # number
+
+# If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment
+align_right_cmt_mix = false # false/true
+
+# If a trailing comment is more than this number of columns away from the text it follows,
+# it will qualify for being aligned.
+align_right_cmt_gap = 0 # number
+
+# Align trailing comment at or beyond column N; 'pulls in' comments as a bonus side effect (0=ignore)
+align_right_cmt_at_col = 0 # number
+
+# The span for aligning function prototypes (0=don't align)
+align_func_proto_span = 0 # number
+
+# Minimum gap between the return type and the function name.
+align_func_proto_gap = 0 # number
+
+# Align function protos on the 'operator' keyword instead of what follows
+align_on_operator = false # false/true
+
+# Whether to mix aligning prototype and variable declarations.
+# If true, align_var_def_XXX options are used instead of align_func_proto_XXX options.
+align_mix_var_proto = false # false/true
+
+# Align single-line functions with function prototypes, uses align_func_proto_span
+align_single_line_func = false # false/true
+
+# Aligning the open brace of single-line functions.
+# Requires align_single_line_func=true, uses align_func_proto_span
+align_single_line_brace = false # false/true
+
+# Gap for align_single_line_brace.
+align_single_line_brace_gap = 0 # number
+
+# The span for aligning ObjC msg spec (0=don't align)
+align_oc_msg_spec_span = 0 # number
+
+# Whether to align macros wrapped with a backslash and a newline.
+# This will not work right if the macro contains a multi-line comment.
+align_nl_cont = false # false/true
+
+# The minimum space between label and value of a preprocessor define
+align_pp_define_gap = 0 # number
+
+# The span for aligning on '#define' bodies (0=don't align)
+align_pp_define_span = 0 # number
+
+# Align lines that start with '<<' with previous '<<'. Default=true
+align_left_shift = true # false/true
+
+#
+# Newline adding and removing options
+#
+
+# Whether to collapse empty blocks between '{' and '}'
+nl_collapse_empty_body = true # false/true
+
+# Don't split one-line braced assignments - 'foo_t f = { 1, 2 };'
+nl_assign_leave_one_liners = true # false/true
+
+# Don't split one-line braced statements inside a class xx { } body
+nl_class_leave_one_liners = false # false/true
+
+# Don't split one-line enums: 'enum foo { BAR = 15 };'
+nl_enum_leave_one_liners = false # false/true
+
+# Don't split one-line get or set functions
+nl_getset_leave_one_liners = true # false/true
+
+# Don't split one-line function definitions - 'int foo() { return 0; }'
+nl_func_leave_one_liners = true # false/true
+
+# Don't split one-line if/else statements - 'if(a) b++;'
+nl_if_leave_one_liners = false # false/true
+
+# Add or remove newlines at the start of the file
+nl_start_of_file = ignore # ignore/add/remove/force
+
+# The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force'
+nl_start_of_file_min = 0 # number
+
+# Add or remove newline at the end of the file
+nl_end_of_file = force # ignore/add/remove/force
+
+# The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force')
+nl_end_of_file_min = 1 # number
+
+# Add or remove newline between '=' and '{'
+nl_assign_brace = ignore # ignore/add/remove/force
+
+# Add or remove newline between '=' and '[' (D only)
+nl_assign_square = ignore # ignore/add/remove/force
+
+# Add or remove newline after '= [' (D only). Will also affect the newline before the ']'
+nl_after_square_assign = ignore # ignore/add/remove/force
+
+# The number of newlines after a block of variable definitions
+nl_func_var_def_blk = 0 # number
+
+# Add or remove newline between a function call's ')' and '{', as in:
+# list_for_each(item, &list) { }
+nl_fcall_brace = force # ignore/add/remove/force
+
+# Add or remove newline between 'enum' and '{'
+nl_enum_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between 'struct and '{'
+nl_struct_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between 'union' and '{'
+nl_union_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between 'if' and '{'
+nl_if_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'else'
+nl_brace_else = force # ignore/add/remove/force
+
+# Add or remove newline between 'else if' and '{'
+# If set to ignore, nl_if_brace is used instead
+nl_elseif_brace = ignore # ignore/add/remove/force
+
+# Add or remove newline between 'else' and '{'
+nl_else_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between 'else' and 'if'
+nl_else_if = add # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'finally'
+nl_brace_finally = force # ignore/add/remove/force
+
+# Add or remove newline between 'finally' and '{'
+nl_finally_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between 'try' and '{'
+nl_try_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between get/set and '{'
+nl_getset_brace = ignore # ignore/add/remove/force
+
+# Add or remove newline between 'for' and '{'
+nl_for_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between 'catch' and '{'
+nl_catch_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'catch'
+nl_brace_catch = force # ignore/add/remove/force
+
+# Add or remove newline between 'while' and '{'
+nl_while_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between 'do' and '{'
+nl_do_brace = remove # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'while' of 'do' statement
+nl_brace_while = remove # ignore/add/remove/force
+
+# Add or remove newline between 'switch' and '{'
+nl_switch_brace = remove # ignore/add/remove/force
+
+# Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc.
+# Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch, and nl_catch_brace.
+nl_multi_line_cond = false # false/true
+
+# Force a newline in a define after the macro name for multi-line defines.
+nl_multi_line_define = false # false/true
+
+# Whether to put a newline before 'case' statement
+nl_before_case = false # false/true
+
+# Add or remove newline between ')' and 'throw'
+nl_before_throw = ignore # ignore/add/remove/force
+
+# Whether to put a newline after 'case' statement
+nl_after_case = false # false/true
+
+# Newline between namespace and {
+nl_namespace_brace = ignore # ignore/add/remove/force
+
+# Add or remove newline between 'template<>' and whatever follows.
+nl_template_class = ignore # ignore/add/remove/force
+
+# Add or remove newline between 'class' and '{'
+nl_class_brace = force # ignore/add/remove/force
+
+# Add or remove newline after each ',' in the constructor member initialization
+nl_class_init_args = ignore # ignore/add/remove/force
+
+# Add or remove newline between return type and function name in definition
+nl_func_type_name = ignore # ignore/add/remove/force
+
+# Add or remove newline between function scope and name in a definition
+# Controls the newline after '::' in 'void A::f() { }'
+nl_func_scope_name = ignore # ignore/add/remove/force
+
+# Add or remove newline between return type and function name in a prototype
+nl_func_proto_type_name = ignore # ignore/add/remove/force
+
+# Add or remove newline between a function name and the opening '('
+nl_func_paren = remove # ignore/add/remove/force
+
+# Add or remove newline after '(' in a function declaration
+nl_func_decl_start = ignore # ignore/add/remove/force
+
+# Add or remove newline after each ',' in a function declaration
+nl_func_decl_args = ignore # ignore/add/remove/force
+
+# Add or remove newline before the ')' in a function declaration
+nl_func_decl_end = ignore # ignore/add/remove/force
+
+# Add or remove newline between function signature and '{'
+nl_fdef_brace = ignore # ignore/add/remove/force
+
+# Whether to put a newline after 'return' statement
+nl_after_return = false # false/true
+
+# Add or remove a newline between the return keyword and return expression.
+nl_return_expr = ignore # ignore/add/remove/force
+
+# Whether to put a newline after semicolons, except in 'for' statements
+nl_after_semicolon = false # false/true
+
+# Whether to put a newline after brace open.
+# This also adds a newline before the matching brace close.
+nl_after_brace_open = true # false/true
+
+# If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is
+# placed between the open brace and a trailing single-line comment.
+nl_after_brace_open_cmt = false # false/true
+
+# Whether to put a newline after a virtual brace open.
+# These occur in un-braced if/while/do/for statement bodies.
+nl_after_vbrace_open = true # false/true
+
+# Whether to put a newline after a brace close.
+# Does not apply if followed by a necessary ';'.
+nl_after_brace_close = false # false/true
+
+# Whether to alter newlines in '#define' macros
+nl_define_macro = false # false/true
+
+# Whether to not put blanks after '#ifxx', '#elxx', or before '#endif'
+nl_squeeze_ifdef = false # false/true
+
+# Add or remove newline before 'if'
+nl_before_if = ignore # ignore/add/remove/force
+
+# Add or remove newline after 'if'
+nl_after_if = ignore # ignore/add/remove/force
+
+# Add or remove newline before 'for'
+nl_before_for = ignore # ignore/add/remove/force
+
+# Add or remove newline after 'for'
+nl_after_for = ignore # ignore/add/remove/force
+
+# Add or remove newline before 'while'
+nl_before_while = ignore # ignore/add/remove/force
+
+# Add or remove newline after 'while'
+nl_after_while = ignore # ignore/add/remove/force
+
+# Add or remove newline before 'switch'
+nl_before_switch = ignore # ignore/add/remove/force
+
+# Add or remove newline after 'switch'
+nl_after_switch = ignore # ignore/add/remove/force
+
+# Add or remove newline before 'do'
+nl_before_do = ignore # ignore/add/remove/force
+
+# Add or remove newline after 'do'
+nl_after_do = ignore # ignore/add/remove/force
+
+# Whether to double-space commented-entries in struct/enum
+nl_ds_struct_enum_cmt = false # false/true
+
+# Whether to double-space before the close brace of a struct/union/enum
+nl_ds_struct_enum_close_brace = false # false/true
+
+# Add or remove a newline around a class colon.
+# Related to pos_class_colon, nl_class_init_args, and pos_comma.
+nl_class_colon = ignore # ignore/add/remove/force
+
+# Change simple unbraced if statements into a one-liner
+# 'if(b)\n i++;' => 'if(b) i++;'
+nl_create_if_one_liner = false # false/true
+
+# Change simple unbraced for statements into a one-liner
+# 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);'
+nl_create_for_one_liner = false # false/true
+
+# Change simple unbraced while statements into a one-liner
+# 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);'
+nl_create_while_one_liner = false # false/true
+
+#
+# Positioning options
+#
+
+# The position of arithmetic operators in wrapped expressions
+pos_arith = lead # ignore/lead/trail
+
+# The position of assignment in wrapped expressions
+pos_assign = trail # ignore/lead/trail
+
+# The position of boolean operators in wrapped expressions
+pos_bool = lead # ignore/lead/trail
+
+# The position of the comma in wrapped expressions
+pos_comma = trail # ignore/lead/trail
+
+# The position of the comma in the constructor initialization list
+pos_class_comma = trail # ignore/lead/trail
+
+# The position of colons between constructor and member initialization
+pos_class_colon = lead # ignore/lead/trail
+
+#
+# Line Splitting options
+#
+
+# Try to limit code width to N number of columns
+code_width = 80 # number
+
+# Whether to fully split long 'for' statements at semi-colons
+ls_for_split_full = true # false/true
+
+# Whether to fully split long function protos/calls at commas
+ls_func_split_full = true # false/true
+
+#
+# Blank line options
+#
+
+# The maximum consecutive newlines
+nl_max = 0 # number
+
+# The number of newlines after a function prototype, if followed by another function prototype
+nl_after_func_proto = 0 # number
+
+# The number of newlines after a function prototype, if not followed by another function prototype
+nl_after_func_proto_group = 0 # number
+
+# The number of newlines after '}' of a multi-line function body
+nl_after_func_body = 0 # number
+
+# The number of newlines after '}' of a single line function body
+nl_after_func_body_one_liner = 0 # number
+
+# The minimum number of newlines before a multi-line comment.
+# Doesn't apply if after a brace open or another multi-line comment.
+nl_before_block_comment = 0 # number
+
+# The minimum number of newlines before a single-line C comment.
+# Doesn't apply if after a brace open or other single-line C comments.
+nl_before_c_comment = 0 # number
+
+# The minimum number of newlines before a CPP comment.
+# Doesn't apply if after a brace open or other CPP comments.
+nl_before_cpp_comment = 0 # number
+
+# Whether to force a newline after a mulit-line comment.
+nl_after_multiline_comment = false # false/true
+
+# The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
+# Will not change the newline count if after a brace open.
+# 0 = No change.
+nl_before_access_spec = 0 # number
+
+# The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
+# 0 = No change.
+nl_after_access_spec = 0 # number
+
+# The number of newlines between a function def and the function comment.
+# 0 = No change.
+nl_comment_func_def = 0 # number
+
+# The number of newlines after a try-catch-finally block that isn't followed by a brace close.
+# 0 = No change.
+nl_after_try_catch_finally = 0 # number
+
+# The number of newlines before and after a property, indexer or event decl.
+# 0 = No change.
+nl_around_cs_property = 0 # number
+
+# The number of newlines between the get/set/add/remove handlers in C#.
+# 0 = No change.
+nl_between_get_set = 0 # number
+
+# Whether to remove blank lines after '{'
+eat_blanks_after_open_brace = true # false/true
+
+# Whether to remove blank lines before '}'
+eat_blanks_before_close_brace = true # false/true
+
+#
+# Code modifying options (non-whitespace)
+#
+
+# Add or remove braces on single-line 'do' statement
+mod_full_brace_do = ignore # ignore/add/remove/force
+
+# Add or remove braces on single-line 'for' statement
+mod_full_brace_for = remove # ignore/add/remove/force
+
+# Add or remove braces on single-line function defintions. (Pawn)
+mod_full_brace_function = ignore # ignore/add/remove/force
+
+# Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'.
+mod_full_brace_if = remove # ignore/add/remove/force
+
+# Don't remove braces around statements that span N newlines
+mod_full_brace_nl = 0 # number
+
+# Add or remove braces on single-line 'while' statement
+mod_full_brace_while = ignore # ignore/add/remove/force
+
+# Add or remove unnecessary paren on 'return' statement
+mod_paren_on_return = remove # ignore/add/remove/force
+
+# Whether to change optional semicolons to real semicolons
+mod_pawn_semicolon = false # false/true
+
+# Add parens on 'while' and 'if' statement around bools
+mod_full_paren_if_bool = true # false/true
+
+# Whether to remove superfluous semicolons
+mod_remove_extra_semicolon = true # false/true
+
+# If a function body exceeds the specified number of newlines and doesn't have a comment after
+# the close brace, a comment will be added.
+mod_add_long_function_closebrace_comment = 0 # number
+
+# If a switch body exceeds the specified number of newlines and doesn't have a comment after
+# the close brace, a comment will be added.
+mod_add_long_switch_closebrace_comment = 0 # number
+
+# If an #ifdef body exceeds the specified number of newlines and doesn't have a comment after
+# the #else, a comment will be added.
+mod_add_long_ifdef_endif_comment = 0 # number
+
+# If an #ifdef or #else body exceeds the specified number of newlines and doesn't have a comment after
+# the #endif, a comment will be added.
+mod_add_long_ifdef_else_comment = 0 # number
+
+# If TRUE, will sort consecutive single-line 'import' statements [Java, D]
+mod_sort_import = false # false/true
+
+# If TRUE, will sort consecutive single-line 'using' statements [C#]
+mod_sort_using = false # false/true
+
+# If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C]
+# This is generally a bad idea, as it may break your code.
+mod_sort_include = false # false/true
+
+# If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace.
+mod_move_case_break = false # false/true
+
+# If TRUE, it will remove a void 'return;' that appears as the last statement in a function.
+mod_remove_empty_return = false # false/true
+
+#
+# Comment modifications
+#
+
+# Try to wrap comments at cmt_width columns
+cmt_width = 0 # number
+
+# If false, disable all multi-line comment changes, including cmt_width and leading chars.
+# Default is true.
+cmt_indent_multi = false # false/true
+
+# Whether to group c-comments that look like they are in a block
+cmt_c_group = false # false/true
+
+# Whether to put an empty '/*' on the first line of the combined c-comment
+cmt_c_nl_start = false # false/true
+
+# Whether to put a newline before the closing '*/' of the combined c-comment
+cmt_c_nl_end = false # false/true
+
+# Whether to group cpp-comments that look like they are in a block
+cmt_cpp_group = false # false/true
+
+# Whether to put an empty '/*' on the first line of the combined cpp-comment
+cmt_cpp_nl_start = false # false/true
+
+# Whether to put a newline before the closing '*/' of the combined cpp-comment
+cmt_cpp_nl_end = false # false/true
+
+# Whether to change cpp-comments into c-comments
+cmt_cpp_to_c = false # false/true
+
+# Whether to put a star on subsequent comment lines
+cmt_star_cont = false # false/true
+
+# The number of spaces to insert at the start of subsequent comment lines
+cmt_sp_before_star_cont = 0 # number
+
+# The number of spaces to insert after the star on subsequent comment lines
+cmt_sp_after_star_cont = 1 # number
+
+# For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of
+# the comment are the same length. Default=True
+cmt_multi_check_last = true # false/true
+
+# The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment.
+# Will substitue $(filename) with the current file's name.
+cmt_insert_file_header = "" # string
+
+# The filename that contains text to insert at the end of a file if the file doesn't end with a C/C++ comment.
+# Will substitue $(filename) with the current file's name.
+cmt_insert_file_footer = "" # string
+
+# The filename that contains text to insert before a function implementation if the function isn't preceeded with a C/C++ comment.
+# Will substitue $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff.
+# Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... }
+cmt_insert_func_header = "" # string
+
+# The filename that contains text to insert before a class if the class isn't preceeded with a C/C++ comment.
+# Will substitue $(class) with the class name.
+cmt_insert_class_header = "" # string
+
+# If a preprocessor is encountered when stepping backwards from a function name, then
+# this option decides whether the comment should be inserted.
+# Affects cmt_insert_func_header and cmt_insert_class_header.
+cmt_insert_before_preproc = false # false/true
+
+#
+# Preprocessor options
+#
+
+# Control indent of preprocessors inside #if blocks at brace level 0
+pp_indent = ignore # ignore/add/remove/force
+
+# Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false)
+pp_indent_at_level = false # false/true
+
+# If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1.
+pp_indent_count = 1 # number
+
+# Add or remove space after # based on pp_level of #if blocks
+pp_space = ignore # ignore/add/remove/force
+
+# Sets the number of spaces added with pp_space
+pp_space_count = 0 # number
+
+# The indent for #region and #endregion in C# and '#pragma region' in C/C++
+pp_indent_region = 0 # number
+
+# Whether to indent the code between #region and #endregion
+pp_region_indent_code = false # false/true
+
+# If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level
+pp_indent_if = 0 # number
+
+# Control whether to indent the code between #if, #else and #endif when not at file-level
+pp_if_indent_code = false # false/true
+
+# Whether to indent '#define' at the brace level (true) or from column 1 (false)
+pp_define_at_level = false # false/true
+
+# You can force a token to be a type with the 'type' option.
+# Example:
+# type myfoo1 myfoo2
+#
+# You can create custom macro-based indentation using macro-open,
+# macro-else and macro-close.
+# Example:
+# macro-open BEGIN_TEMPLATE_MESSAGE_MAP
+# macro-open BEGIN_MESSAGE_MAP
+# macro-close END_MESSAGE_MAP
+#
+# You can assign any keyword to any type with the set option.
+# set func_call_user _ N_
+#
+# The full syntax description of all custom definition config entries
+# is shown below:
+#
+# define custom tokens as:
+# - embed whitespace in token using '' escape character, or
+# put token in quotes
+# - these: ' " and ` are recognized as quote delimiters
+#
+# type token1 token2 token3 ...
+# ^ optionally specify multiple tokens on a single line
+# define def_token output_token
+# ^ output_token is optional, then NULL is assumed
+# macro-open token
+# macro-close token
+# macro-else token
+# set id token1 token2 ...
+# ^ optionally specify multiple tokens on a single line
+# ^ id is one of the names in token_enum.h sans the CT_ prefix,
+# e.g. PP_PRAGMA
+#
+# all tokens are separated by any mix of ',' commas, '=' equal signs
+# and whitespace (space, tab)
+#
diff --git a/plugins/zynaddsubfx/zynaddsubfx/style.sh b/plugins/zynaddsubfx/zynaddsubfx/style.sh
new file mode 100755
index 0000000..08d93ee
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/style.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+uncrustify -c style.cfg --no-backup -l CPP `find . | grep -e "\.h$"`
+uncrustify -c style.cfg --no-backup -l CPP `find . | grep -e "\.cpp$"`
+#cover nsm code
+uncrustify -c style.cfg --no-backup -l CPP `find . | grep -e "\.H$"`
+uncrustify -c style.cfg --no-backup -l CPP `find . | grep -e "\.C$"`
diff --git a/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx-alsa.desktop b/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx-alsa.desktop
new file mode 100644
index 0000000..1a63e9d
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx-alsa.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=ZynAddSubFX - Alsa
+Comment=A powerful realtime software synthesizer
+Exec=zynaddsubfx -I alsa -O alsa
+Icon=zynaddsubfx
+Terminal=false
+Type=Application
+Categories=AudioVideo;Audio;
diff --git a/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx-jack.desktop b/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx-jack.desktop
new file mode 100644
index 0000000..a16a2e7
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx-jack.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=ZynAddSubFX - Jack
+Comment=A powerful realtime software synthesizer
+Exec=zynaddsubfx -I jack -O jack
+Icon=zynaddsubfx
+Terminal=false
+Type=Application
+Categories=AudioVideo;Audio;
diff --git a/plugins/zynaddsubfx/zynaddsubfx_icon.ico b/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx.ico
similarity index 100%
rename from plugins/zynaddsubfx/zynaddsubfx_icon.ico
rename to plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx.ico
diff --git a/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx.svg b/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx.svg
new file mode 100644
index 0000000..d81c651
--- /dev/null
+++ b/plugins/zynaddsubfx/zynaddsubfx/zynaddsubfx.svg
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg1"
+ sodipodi:version="0.32"
+ inkscape:version="0.48.2 r9819"
+ width="507.1875"
+ height="509.21875"
+ sodipodi:docname="zynaddsubfx_icon.svg"
+ version="1.1">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient4809">
+ <stop
+ style="stop-color:#d5d8db;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4810" />
+ <stop
+ style="stop-color:#6d8ec2;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop4811" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4179">
+ <stop
+ style="stop-color:#bec8c6;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4180" />
+ <stop
+ style="stop-color:#bbcac9;stop-opacity:1.0000000;"
+ offset="0.59527779"
+ id="stop4182" />
+ <stop
+ style="stop-color:#879797;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop4181" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4038">
+ <stop
+ style="stop-color:#4a8a61;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4039" />
+ <stop
+ style="stop-color:#557c7d;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop4040" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2162">
+ <stop
+ style="stop-color:#549c6d;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2163" />
+ <stop
+ style="stop-color:#679697;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2164" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2158">
+ <stop
+ style="stop-color:#dbdbdb;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2159" />
+ <stop
+ style="stop-color:#a1aec2;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop2160" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2158"
+ id="radialGradient2165"
+ cx="205.28555"
+ cy="152.50184"
+ r="486.22545"
+ fx="198.52472"
+ fy="148.59325"
+ gradientTransform="matrix(0.99940285,0,0,1.0005975,-127.46875,-47)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4038"
+ id="linearGradient4043"
+ x1="119.48864"
+ y1="387.75519"
+ x2="462.45943"
+ y2="302.28432"
+ gradientTransform="scale(1.0666754,0.9374923)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4809"
+ id="radialGradient4184"
+ cx="-6.2401056"
+ cy="138.19312"
+ r="63.0278"
+ fx="-5.4719041"
+ fy="137.48498"
+ spreadMethod="pad"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.0322663,0.96874227)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4809"
+ id="radialGradient3021"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="pad"
+ cx="-6.2401056"
+ cy="138.19312"
+ fx="-5.4719041"
+ fy="137.48498"
+ r="63.0278"
+ gradientTransform="scale(1.0322663,0.96874227)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.61399264"
+ inkscape:cx="305.35982"
+ inkscape:cy="328.83153"
+ inkscape:window-width="1278"
+ inkscape:window-height="760"
+ inkscape:window-x="0"
+ inkscape:window-y="19"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ showgrid="false"
+ inkscape:snap-global="true"
+ inkscape:snap-nodes="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <rect
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.13874531pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2793"
+ width="497.32657"
+ height="497.92426"
+ x="8.5265961"
+ y="9.9727058"
+ rx="10"
+ ry="10.000001" />
+ <rect
+ style="fill:url(#radialGradient2165);fill-opacity:0.75;fill-rule:evenodd;stroke:#c7ffc7;stroke-width:2.67499995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ id="rect1532"
+ width="497.32657"
+ height="497.92426"
+ x="1.3287659"
+ y="1.3353081"
+ rx="10"
+ ry="10.000001" />
+ <g
+ id="g4871"
+ transform="matrix(1,0,0,0.72153,-123.39704,-123.99862)">
+ <rect
+ style="fill:url(#linearGradient4043);fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.50865927pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="rect2794"
+ width="374.5567"
+ height="328.96643"
+ x="144.30453"
+ y="199.03429"
+ rx="10.000001"
+ ry="13.85943" />
+ <path
+ style="fill:none;stroke:#fafafa;stroke-width:20;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="m 153.53968,361.37008 c 70.53877,201.53936 110.35828,210.2256 177.45839,6.10757 66.67288,-202.81841 104.2451,-205.61109 176.22345,0.24698"
+ id="path4175"
+ sodipodi:nodetypes="czc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:7.375;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="m 145.99255,362.80964 c 369.96869,0 369.3724,1.43957 369.3724,1.43957"
+ id="path4176"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4852"
+ transform="matrix(-1.360555,0.352222,-0.352222,-1.360555,196.67455,583.0333)">
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient3021);fill-opacity:0.75;fill-rule:evenodd;stroke:none"
+ id="path4853"
+ sodipodi:cx="16.555019"
+ sodipodi:cy="147.59439"
+ sodipodi:rx="46.785923"
+ sodipodi:ry="43.906792"
+ d="m 63.340942,147.59439 a 46.785923,43.906792 0 1 1 -93.571846,0 46.785923,43.906792 0 1 1 93.571846,0 z"
+ transform="matrix(1.045432,0,0,1.113986,-125.3003,-37.14836)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;stroke:#000000;stroke-width:11.85730171;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:11.857302, 23.714604;stroke-dashoffset:0"
+ id="path4854"
+ sodipodi:cx="16.555019"
+ sodipodi:cy="147.59439"
+ sodipodi:rx="46.785923"
+ sodipodi:ry="43.906792"
+ d="m 63.340942,147.59439 a 46.785923,43.906792 0 1 1 -93.571846,0 46.785923,43.906792 0 1 1 93.571846,0 z"
+ transform="matrix(1.162718,0.507361,-0.579194,1.268918,-39.94742,-66.78193)" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m -108.49675,123.27211 c 36.885113,-10.80173 39.904052,-12.46015 39.904052,-12.46015 l -33.461822,23.25931 -6.44223,-10.79916 z"
+ id="path4855"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4864"
+ transform="matrix(0.687211,0,0,0.854478,499.66235,-75.81607)">
+ <rect
+ style="fill:#000000;fill-opacity:0.75;fill-rule:evenodd;stroke:none"
+ id="rect4856"
+ width="110.64801"
+ height="545.60913"
+ x="-136.40228"
+ y="109.76131" />
+ <rect
+ style="fill:#00bc1a;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4857"
+ width="39.393082"
+ height="442.41235"
+ x="-128.61479"
+ y="205.44652" />
+ <rect
+ style="fill:#00bc1a;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4858"
+ width="37.357227"
+ height="525.88245"
+ x="-74.664627"
+ y="120.64261" />
+ <rect
+ style="fill:#000000;fill-opacity:0.17543862;fill-rule:evenodd;stroke:none"
+ id="rect4860"
+ width="95.883904"
+ height="12.21513"
+ x="-128.35823"
+ y="221.73334" />
+ <rect
+ style="fill:#000000;fill-opacity:0.17543862;fill-rule:evenodd;stroke:none"
+ id="rect4862"
+ width="95.883904"
+ height="12.21513"
+ x="-129.37616"
+ y="563.75702" />
+ <rect
+ style="fill:#000000;fill-opacity:0.17543862;fill-rule:evenodd;stroke:none"
+ id="rect4863"
+ width="95.883904"
+ height="12.21513"
+ x="-127.34029"
+ y="386.6376" />
+ </g>
+ <g
+ id="g4875"
+ transform="matrix(-1.360555,0.352222,-0.352222,-1.360555,3.44525,587.1877)">
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient4184);fill-opacity:0.75;fill-rule:evenodd;stroke:none"
+ id="path4876"
+ sodipodi:cx="16.555019"
+ sodipodi:cy="147.59439"
+ sodipodi:rx="46.785923"
+ sodipodi:ry="43.906792"
+ d="m 63.340942,147.59439 c 0,24.24905 -20.946771,43.90679 -46.785923,43.90679 -25.8391514,0 -46.785923,-19.65774 -46.785923,-43.90679 0,-24.24905 20.9467716,-43.90679 46.785923,-43.90679 25.839152,0 46.785923,19.65774 46.785923,43.90679 z"
+ transform="matrix(1.045432,0,0,1.113986,-125.3003,-37.14836)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;stroke:#000000;stroke-width:11.85730171;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:11.857302, 23.714604;stroke-dashoffset:0"
+ id="path4877"
+ sodipodi:cx="16.555019"
+ sodipodi:cy="147.59439"
+ sodipodi:rx="46.785923"
+ sodipodi:ry="43.906792"
+ d="m 63.340942,147.59439 c 0,24.24905 -20.946771,43.90679 -46.785923,43.90679 -25.8391514,0 -46.785923,-19.65774 -46.785923,-43.90679 0,-24.24905 20.9467716,-43.90679 46.785923,-43.90679 25.839152,0 46.785923,19.65774 46.785923,43.90679 z"
+ transform="matrix(1.162718,0.507361,-0.579194,1.268918,-39.94742,-66.78193)" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m -108.49675,123.27211 c 36.885113,-10.80173 39.904052,-12.46015 39.904052,-12.46015 l -33.461822,23.25931 -6.44223,-10.79916 z"
+ id="path4878"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/src/core/AutomatableModel.cpp b/src/core/AutomatableModel.cpp
index 7a7bc74..0ce80c4 100644
--- a/src/core/AutomatableModel.cpp
+++ b/src/core/AutomatableModel.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -27,7 +27,7 @@
#include "AutomatableModel.h"
#include "AutomationPattern.h"
#include "ControllerConnection.h"
-
+#include "lmms_math.h"
float AutomatableModel::s_copiedValue = 0;
@@ -39,6 +39,7 @@ AutomatableModel::AutomatableModel( DataType type,
Model* parent, const QString & displayName, bool defaultConstructed ) :
Model( parent, displayName, defaultConstructed ),
m_dataType( type ),
+ m_scaleType( Linear ),
m_value( val ),
m_initValue( val ),
m_minValue( min ),
@@ -46,7 +47,7 @@ AutomatableModel::AutomatableModel( DataType type,
m_step( step ),
m_range( max - min ),
m_centerValue( m_minValue ),
- m_journalEntryReady( false ),
+ m_valueChanged( false ),
m_setValueDepth( 0 ),
m_hasLinkedModels( false ),
m_controllerConnection( NULL )
@@ -86,21 +87,28 @@ bool AutomatableModel::isAutomated() const
void AutomatableModel::saveSettings( QDomDocument& doc, QDomElement& element, const QString& name )
{
- if( isAutomated() )
+ if( isAutomated() || m_scaleType != Linear )
{
+ // automation needs tuple of data (name, id, value)
+ // scale type also needs an extra value
+ // => it must be appended as a node
QDomElement me = doc.createElement( name );
me.setAttribute( "id", id() );
me.setAttribute( "value", m_value );
+ me.setAttribute( "scale_type", m_scaleType == Logarithmic ? "log" : "linear" );
element.appendChild( me );
}
else
{
+ // non automation, linear scale (default), can be saved as attribute
element.setAttribute( name, m_value );
}
if( m_controllerConnection )
{
QDomElement controllerElement;
+
+ // get "connection" element (and create it if needed)
QDomNode node = element.namedItem( "connection" );
if( node.isElement() )
{
@@ -142,9 +150,12 @@ void AutomatableModel::loadSettings( const QDomElement& element, const QString&
}
return;
}
+ // logscales were not existing at this point of time
+ // so they can be ignored
}
QDomNode connectionNode = element.namedItem( "connection" );
+ // reads controller connection
if( connectionNode.isElement() )
{
QDomNode thisConnection = connectionNode.toElement().namedItem( name );
@@ -155,14 +166,31 @@ void AutomatableModel::loadSettings( const QDomElement& element, const QString&
//m_controllerConnection->setTargetName( displayName() );
}
}
-
+
+ // models can be stored as elements (port00) or attributes (port10):
+ // <ladspacontrols port10="4.41">
+ // <port00 value="4.41" id="4249278"/>
+ // </ladspacontrols>
+ // element => there is automation data, or scaletype information
node = element.namedItem( name );
if( node.isElement() )
{
- changeID( node.toElement().attribute( "id" ).toInt() );
- setValue( node.toElement().attribute( "value" ).toFloat() );
+ changeID( node.toElement().attribute( "id" ).toInt() );
+ setValue( node.toElement().attribute( "value" ).toFloat() );
+ if( node.toElement().hasAttribute( "scale_type" ) )
+ {
+ if( node.toElement().attribute( "scale_type" ) == "linear" )
+ {
+ setScaleType( Linear );
+ }
+ else if( node.toElement().attribute( "scale_type" ) == "log" )
+ {
+ setScaleType( Logarithmic );
+ }
+ }
}
else if( element.hasAttribute( name ) )
+ // attribute => read the element's value from the attribute list
{
setInitValue( element.attribute( name ).toFloat() );
}
@@ -184,7 +212,7 @@ void AutomatableModel::setValue( const float value )
if( old_val != m_value )
{
// add changes to history so user can undo it
- addJournalEntry( JournalEntry( 0, m_value - old_val ) );
+ addJournalCheckPoint();
// notify linked models
for( AutoModelVector::Iterator it = m_linkedModels.begin(); it != m_linkedModels.end(); ++it )
@@ -196,6 +224,7 @@ void AutomatableModel::setValue( const float value )
(*it)->setJournalling( journalling );
}
}
+ m_valueChanged = true;
emit dataChanged();
}
else
@@ -208,12 +237,74 @@ void AutomatableModel::setValue( const float value )
+template<class T> T AutomatableModel::logToLinearScale( T value ) const
+{
+ return castValue<T>( ::logToLinearScale( minValue<float>(), maxValue<float>(), static_cast<float>( value ) ) );
+}
+
+
+float AutomatableModel::scaledValue( float value ) const
+{
+ return m_scaleType == Linear
+ ? value
+ : logToLinearScale<float>( ( value - minValue<float>() ) / m_range );
+}
+
+
+float AutomatableModel::inverseScaledValue( float value ) const
+{
+ return m_scaleType == Linear
+ ? value
+ : ::linearToLogScale( minValue<float>(), maxValue<float>(), value );
+}
+
+
+
+QString AutomatableModel::displayValue( const float val ) const
+{
+ switch( m_dataType )
+ {
+ case Float: return QString::number( castValue<float>( scaledValue( val ) ) );
+ case Integer: return QString::number( castValue<int>( scaledValue( val ) ) );
+ case Bool: return QString::number( castValue<bool>( scaledValue( val ) ) );
+ }
+ return "0";
+}
+
+
+
+//! @todo: this should be moved into a maths header
+template<class T>
+void roundAt( T& value, const T& where, const T& step_size )
+{
+ if( qAbs<float>( value - where )
+ < typeInfo<float>::minEps() * qAbs<float>( step_size ) )
+ {
+ value = where;
+ }
+}
+
+
+
+
+template<class T>
+void AutomatableModel::roundAt( T& value, const T& where ) const
+{
+ ::roundAt(value, where, m_step);
+}
+
+
+
+
void AutomatableModel::setAutomatedValue( const float value )
{
++m_setValueDepth;
const float oldValue = m_value;
- m_value = fittedValue( value );
+ const float scaled_value = scaledValue( value );
+
+ m_value = fittedValue( scaled_value );
+
if( oldValue != m_value )
{
// notify linked models
@@ -224,9 +315,10 @@ void AutomatableModel::setAutomatedValue( const float value )
!(*it)->fittedValue( m_value ) !=
(*it)->m_value )
{
- (*it)->setAutomatedValue( m_value );
+ (*it)->setAutomatedValue( value );
}
}
+ m_valueChanged = true;
emit dataChanged();
}
--m_setValueDepth;
@@ -281,17 +373,9 @@ float AutomatableModel::fittedValue( float value ) const
value = nearbyintf( value / m_step ) * m_step;
}
- // correct rounding error at the border
- if( qAbs<float>( value - m_maxValue ) < typeInfo<float>::minEps() * qAbs<float>( m_step ) )
- {
- value = m_maxValue;
- }
-
- // correct rounding error if value = 0
- if( qAbs<float>( value ) < typeInfo<float>::minEps() * qAbs<float>( m_step ) )
- {
- value = 0;
- }
+ roundAt( value, m_maxValue );
+ roundAt( value, m_minValue );
+ roundAt( value, 0.0f );
if( value < m_minValue )
{
@@ -309,54 +393,9 @@ float AutomatableModel::fittedValue( float value ) const
-void AutomatableModel::redoStep( JournalEntry& je )
-{
- bool journalling = testAndSetJournalling( false );
- setValue( value<float>() + (float) je.data().toDouble() );
- setJournalling( journalling );
-}
-
-
-
-
-void AutomatableModel::undoStep( JournalEntry& je )
-{
- JournalEntry inv( je.actionID(), -je.data().toDouble() );
- redoStep( inv );
-}
-
-
-
-
-void AutomatableModel::prepareJournalEntryFromOldVal()
-{
- m_oldValue = value<float>();
- saveJournallingState( false );
- m_journalEntryReady = true;
-}
-
-
-
-
-void AutomatableModel::addJournalEntryFromOldToCurVal()
-{
- if( m_journalEntryReady )
- {
- restoreJournallingState();
- if( value<float>() != m_oldValue )
- {
- addJournalEntry( JournalEntry( 0, value<float>() - m_oldValue ) );
- }
- m_journalEntryReady = false;
- }
-}
-
-
-
-
void AutomatableModel::linkModel( AutomatableModel* model )
{
- if( !m_linkedModels.contains( model ) )
+ if( !m_linkedModels.contains( model ) && model != this )
{
m_linkedModels.push_back( model );
m_hasLinkedModels = true;
@@ -388,8 +427,8 @@ void AutomatableModel::unlinkModel( AutomatableModel* model )
void AutomatableModel::linkModels( AutomatableModel* model1, AutomatableModel* model2 )
{
- model1->linkModel( model2 );
- model2->linkModel( model1 );
+ model1->linkModel( model2 );
+ model2->linkModel( model1 );
}
@@ -424,17 +463,33 @@ void AutomatableModel::setControllerConnection( ControllerConnection* c )
{
QObject::connect( m_controllerConnection, SIGNAL( valueChanged() ), this, SIGNAL( dataChanged() ) );
QObject::connect( m_controllerConnection, SIGNAL( destroyed() ), this, SLOT( unlinkControllerConnection() ) );
+ m_valueChanged = true;
emit dataChanged();
}
}
+
float AutomatableModel::controllerValue( int frameOffset ) const
{
if( m_controllerConnection )
{
- const float v = minValue<float>() + ( range() * controllerConnection()->currentValue( frameOffset ) );
+ float v = 0;
+ switch(m_scaleType)
+ {
+ case Linear:
+ v = minValue<float>() + ( range() * controllerConnection()->currentValue( frameOffset ) );
+ break;
+ case Logarithmic:
+ v = logToLinearScale(
+ controllerConnection()->currentValue( frameOffset ));
+ break;
+ default:
+ qFatal("AutomatableModel::controllerValue(int)"
+ "lacks implementation for a scale type");
+ break;
+ }
if( typeInfo<float>::isEqual( m_step, 1 ) )
{
return qRound( v );
@@ -502,6 +557,64 @@ void AutomatableModel::pasteValue()
+float AutomatableModel::globalAutomationValueAt( const MidiTime& time )
+{
+ // get patterns that connect to this model
+ QVector<AutomationPattern *> patterns = AutomationPattern::patternsForModel( this );
+ if( patterns.isEmpty() )
+ {
+ // if no such patterns exist, return current value
+ return m_value;
+ }
+ else
+ {
+ // of those patterns:
+ // find the patterns which overlap with the miditime position
+ QVector<AutomationPattern *> patternsInRange;
+ for( QVector<AutomationPattern *>::ConstIterator it = patterns.begin(); it != patterns.end(); it++ )
+ {
+ int s = ( *it )->startPosition();
+ int e = ( *it )->endPosition();
+ if( s <= time && e >= time ) { patternsInRange += ( *it ); }
+ }
+
+ AutomationPattern * latestPattern = NULL;
+
+ if( ! patternsInRange.isEmpty() )
+ {
+ // if there are more than one overlapping patterns, just use the first one because
+ // multiple pattern behaviour is undefined anyway
+ latestPattern = patternsInRange[0];
+ }
+ else
+ // if we find no patterns at the exact miditime, we need to search for the last pattern before time and use that
+ {
+ int latestPosition = 0;
+
+ for( QVector<AutomationPattern *>::ConstIterator it = patterns.begin(); it != patterns.end(); it++ )
+ {
+ int e = ( *it )->endPosition();
+ if( e <= time && e > latestPosition )
+ {
+ latestPosition = e;
+ latestPattern = ( *it );
+ }
+ }
+ }
+
+ if( latestPattern )
+ {
+ // scale/fit the value appropriately and return it
+ const float value = latestPattern->valueAt( time - latestPattern->startPosition() );
+ const float scaled_value = scaledValue( value );
+ return fittedValue( scaled_value );
+ }
+ // if we still find no pattern, the value at that time is undefined so
+ // just return current value as the best we can do
+ else return m_value;
+ }
+}
+
#include "moc_AutomatableModel.cxx"
diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp
index 0f38b34..5de57b4 100644
--- a/src/core/AutomationPattern.cpp
+++ b/src/core/AutomationPattern.cpp
@@ -5,7 +5,7 @@
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,6 +35,8 @@
#include "ProjectJournal.h"
#include "bb_track_container.h"
#include "song.h"
+#include "text_float.h"
+#include "embed.h"
const float AutomationPattern::DEFAULT_MIN_VALUE = 0;
@@ -47,7 +49,9 @@ AutomationPattern::AutomationPattern( AutomationTrack * _auto_track ) :
m_objects(),
m_tension( 1.0 ),
m_progressionType( DiscreteProgression ),
- m_dragging( false )
+ m_dragging( false ),
+ m_isRecording( false ),
+ m_lastRecordedValue( 0 )
{
changeLength( MidiTime( 1, 0 ) );
}
@@ -94,8 +98,8 @@ void AutomationPattern::addObject( AutomatableModel * _obj, bool _search_dup )
{
if( *it == _obj )
{
- // Already exists
- // TODO: Maybe let the user know in some non-annoying way
+ textFloat::displayMessage( _obj->displayName(), tr( "Model is already connected "
+ "to this pattern." ), embed::getIconPixmap( "automation" ), 2000 );
return;
}
}
@@ -105,7 +109,7 @@ void AutomationPattern::addObject( AutomatableModel * _obj, bool _search_dup )
if( m_objects.isEmpty() && hasAutomation() == false )
{
// then initialize first value
- putValue( MidiTime(0), _obj->value<float>(), false );
+ putValue( MidiTime(0), _obj->inverseScaledValue( _obj->value<float>() ), false );
}
m_objects += _obj;
@@ -387,6 +391,7 @@ void AutomationPattern::saveSettings( QDomDocument & _doc, QDomElement & _this )
_this.setAttribute( "name", name() );
_this.setAttribute( "prog", QString::number( progressionType() ) );
_this.setAttribute( "tens", QString::number( getTension() ) );
+ _this.setAttribute( "mute", QString::number( isMuted() ) );
for( timeMap::const_iterator it = m_timeMap.begin();
it != m_timeMap.end(); ++it )
@@ -421,6 +426,7 @@ void AutomationPattern::loadSettings( const QDomElement & _this )
setProgressionType( static_cast<ProgressionTypes>( _this.attribute(
"prog" ).toInt() ) );
setTension( _this.attribute( "tens" ) );
+ setMuted(_this.attribute( "mute", QString::number( false ) ).toInt() );
for( QDomNode node = _this.firstChild(); !node.isNull();
node = node.nextSibling() )
@@ -469,27 +475,44 @@ const QString AutomationPattern::name() const
-void AutomationPattern::processMidiTime( const MidiTime & _time )
+void AutomationPattern::processMidiTime( const MidiTime & time )
{
- if( _time >= 0 && hasAutomation() )
+ if( ! isRecording() )
{
- const float val = valueAt( _time );
- for( objectVector::iterator it = m_objects.begin();
- it != m_objects.end(); ++it )
+ if( time >= 0 && hasAutomation() )
{
- if( *it )
+ const float val = valueAt( time );
+ for( objectVector::iterator it = m_objects.begin();
+ it != m_objects.end(); ++it )
{
- ( *it )->setAutomatedValue( val );
- }
+ if( *it )
+ {
+ ( *it )->setAutomatedValue( val );
+ }
+ }
+ }
+ }
+ else
+ {
+ if( time >= 0 && ! m_objects.isEmpty() )
+ {
+ const float value = static_cast<float>( firstObject()->value<float>() );
+ if( value != m_lastRecordedValue )
+ {
+ putValue( time, value, true );
+ m_lastRecordedValue = value;
+ }
+ else if( valueAt( time ) != value )
+ {
+ removeValue( time, false );
+ }
}
}
}
-
-
trackContentObjectView * AutomationPattern::createView( trackView * _tv )
{
return new AutomationPatternView( this, _tv );
@@ -532,6 +555,51 @@ bool AutomationPattern::isAutomated( const AutomatableModel * _m )
}
+/*! \brief returns a list of all the automation patterns everywhere that are connected to a specific model
+ * \param _m the model we want to look for
+ */
+QVector<AutomationPattern *> AutomationPattern::patternsForModel( const AutomatableModel * _m )
+{
+ QVector<AutomationPattern *> patterns;
+ TrackContainer::TrackList l;
+ l += engine::getSong()->tracks();
+ l += engine::getBBTrackContainer()->tracks();
+ l += engine::getSong()->globalAutomationTrack();
+
+ // go through all tracks...
+ for( TrackContainer::TrackList::ConstIterator it = l.begin(); it != l.end(); ++it )
+ {
+ // we want only automation tracks...
+ if( ( *it )->type() == track::AutomationTrack ||
+ ( *it )->type() == track::HiddenAutomationTrack )
+ {
+ // get patterns in those tracks....
+ const track::tcoVector & v = ( *it )->getTCOs();
+ // go through all the patterns...
+ for( track::tcoVector::ConstIterator j = v.begin(); j != v.end(); ++j )
+ {
+ AutomationPattern * a = dynamic_cast<AutomationPattern *>( *j );
+ // check that the pattern has automation
+ if( a && a->hasAutomation() )
+ {
+ // now check is the pattern is connected to the model we want by going through all the connections
+ // of the pattern
+ bool has_object = false;
+ for( objectVector::const_iterator k = a->m_objects.begin(); k != a->m_objects.end(); ++k )
+ {
+ if( *k == _m )
+ {
+ has_object = true;
+ }
+ }
+ // if the patterns is connected to the model, add it to the list
+ if( has_object ) { patterns += a; }
+ }
+ }
+ }
+ }
+ return patterns;
+}
diff --git a/src/core/BandLimitedWave.cpp b/src/core/BandLimitedWave.cpp
new file mode 100644
index 0000000..965b458
--- /dev/null
+++ b/src/core/BandLimitedWave.cpp
@@ -0,0 +1,271 @@
+/*
+ * BandLimitedWave.h - helper functions for band-limited
+ * waveform generation
+ *
+ * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "BandLimitedWave.h"
+
+
+WaveMipMap BandLimitedWave::s_waveforms[4] = { };
+bool BandLimitedWave::s_wavesGenerated = false;
+QString BandLimitedWave::s_wavetableDir = "";
+
+
+QDataStream& operator<< ( QDataStream &out, WaveMipMap &waveMipMap )
+{
+ for( int tbl = 0; tbl <= MAXTBL; tbl++ )
+ {
+ for( int i = 0; i < TLENS[tbl]; i++ )
+ {
+ out << waveMipMap.sampleAt( tbl, i );
+ }
+ }
+ return out;
+}
+
+QDataStream& operator>> ( QDataStream &in, WaveMipMap &waveMipMap )
+{
+ sample_t sample;
+ for( int tbl = 0; tbl <= MAXTBL; tbl++ )
+ {
+ for( int i = 0; i < TLENS[tbl]; i++ )
+ {
+ in >> sample;
+ waveMipMap.setSampleAt( tbl, i, sample );
+ }
+ }
+ return in;
+}
+
+
+void BandLimitedWave::generateWaves()
+{
+// don't generate if they already exist
+ if( s_wavesGenerated ) return;
+
+ int i;
+
+// set wavetable directory
+ s_wavetableDir = configManager::inst()->dataDir() + "wavetables/";
+
+// set wavetable files
+ QFile saw_file( s_wavetableDir + "saw.bin" );
+ QFile sqr_file( s_wavetableDir + "sqr.bin" );
+ QFile tri_file( s_wavetableDir + "tri.bin" );
+ QFile moog_file( s_wavetableDir + "moog.bin" );
+
+// saw wave - BLSaw
+// check for file and use it if exists
+ if( saw_file.exists() )
+ {
+ saw_file.open( QIODevice::ReadOnly );
+ QDataStream in( &saw_file );
+ in >> s_waveforms[ BandLimitedWave::BLSaw ];
+ saw_file.close();
+ }
+ else
+ {
+ for( i = 0; i <= MAXTBL; i++ )
+ {
+ const int len = TLENS[i];
+ //const double om = 1.0 / len;
+ double max = 0.0;
+
+ for( int ph = 0; ph < len; ph++ )
+ {
+ int harm = 1;
+ double s = 0.0f;
+ double hlen;
+ do
+ {
+ hlen = static_cast<double>( len ) / static_cast<double>( harm );
+ const double amp = -1.0 / static_cast<double>( harm );
+ //const double a2 = cos( om * harm * F_2PI );
+ s += amp * /*a2 **/sin( static_cast<double>( ph * harm ) / static_cast<double>( len ) * F_2PI );
+ harm++;
+ } while( hlen > 2.0 );
+ s_waveforms[ BandLimitedWave::BLSaw ].setSampleAt( i, ph, s );
+ max = qMax( max, qAbs( s ) );
+ }
+ // normalize
+ for( int ph = 0; ph < len; ph++ )
+ {
+ sample_t s = s_waveforms[ BandLimitedWave::BLSaw ].sampleAt( i, ph ) / max;
+ s_waveforms[ BandLimitedWave::BLSaw ].setSampleAt( i, ph, s );
+ }
+ }
+ }
+
+// square wave - BLSquare
+// check for file and use it if exists
+ if( sqr_file.exists() )
+ {
+ sqr_file.open( QIODevice::ReadOnly );
+ QDataStream in( &sqr_file );
+ in >> s_waveforms[ BandLimitedWave::BLSquare ];
+ sqr_file.close();
+ }
+ else
+ {
+ for( i = 0; i <= MAXTBL; i++ )
+ {
+ const int len = TLENS[i];
+ //const double om = 1.0 / len;
+ double max = 0.0;
+
+ for( int ph = 0; ph < len; ph++ )
+ {
+ int harm = 1;
+ double s = 0.0f;
+ double hlen;
+ do
+ {
+ hlen = static_cast<double>( len ) / static_cast<double>( harm );
+ const double amp = 1.0 / static_cast<double>( harm );
+ //const double a2 = cos( om * harm * F_2PI );
+ s += amp * /*a2 **/ sin( static_cast<double>( ph * harm ) / static_cast<double>( len ) * F_2PI );
+ harm += 2;
+ } while( hlen > 2.0 );
+ s_waveforms[ BandLimitedWave::BLSquare ].setSampleAt( i, ph, s );
+ max = qMax( max, qAbs( s ) );
+ }
+ // normalize
+ for( int ph = 0; ph < len; ph++ )
+ {
+ sample_t s = s_waveforms[ BandLimitedWave::BLSquare ].sampleAt( i, ph ) / max;
+ s_waveforms[ BandLimitedWave::BLSquare ].setSampleAt( i, ph, s );
+ }
+ }
+ }
+
+// triangle wave - BLTriangle
+ if( tri_file.exists() )
+ {
+ tri_file.open( QIODevice::ReadOnly );
+ QDataStream in( &tri_file );
+ in >> s_waveforms[ BandLimitedWave::BLTriangle ];
+ tri_file.close();
+ }
+ else
+ {
+ for( i = 0; i <= MAXTBL; i++ )
+ {
+ const int len = TLENS[i];
+ //const double om = 1.0 / len;
+ double max = 0.0;
+
+ for( int ph = 0; ph < len; ph++ )
+ {
+ int harm = 1;
+ double s = 0.0f;
+ double hlen;
+ do
+ {
+ hlen = static_cast<double>( len ) / static_cast<double>( harm );
+ const double amp = 1.0 / static_cast<double>( harm * harm );
+ //const double a2 = cos( om * harm * F_2PI );
+ s += amp * /*a2 **/ sin( ( static_cast<double>( ph * harm ) / static_cast<double>( len ) +
+ ( ( harm + 1 ) % 4 == 0 ? 0.5 : 0.0 ) ) * F_2PI );
+ harm += 2;
+ } while( hlen > 2.0 );
+ s_waveforms[ BandLimitedWave::BLTriangle ].setSampleAt( i, ph, s );
+ max = qMax( max, qAbs( s ) );
+ }
+ // normalize
+ for( int ph = 0; ph < len; ph++ )
+ {
+ sample_t s = s_waveforms[ BandLimitedWave::BLTriangle ].sampleAt( i, ph ) / max;
+ s_waveforms[ BandLimitedWave::BLTriangle ].setSampleAt( i, ph, s );
+ }
+ }
+ }
+
+// moog saw wave - BLMoog
+// basically, just add in triangle + 270-phase saw
+ if( moog_file.exists() )
+ {
+ moog_file.open( QIODevice::ReadOnly );
+ QDataStream in( &moog_file );
+ in >> s_waveforms[ BandLimitedWave::BLMoog ];
+ moog_file.close();
+ }
+ else
+ {
+ for( i = 0; i <= MAXTBL; i++ )
+ {
+ const int len = TLENS[i];
+
+ for( int ph = 0; ph < len; ph++ )
+ {
+ const int sawph = ( ph + static_cast<int>( len * 0.75 ) ) % len;
+ const sample_t saw = s_waveforms[ BandLimitedWave::BLSaw ].sampleAt( i, sawph );
+ const sample_t tri = s_waveforms[ BandLimitedWave::BLTriangle ].sampleAt( i, ph );
+ s_waveforms[ BandLimitedWave::BLMoog ].setSampleAt( i, ph, ( saw + tri ) * 0.5f );
+ }
+ }
+ }
+
+// set the generated flag so we don't load/generate them again needlessly
+ s_wavesGenerated = true;
+
+
+// generate files, serialize mipmaps as QDataStreams and save them on disk
+//
+// normally these are now provided with LMMS as pre-generated so we don't have to do this,
+// but I'm leaving the code here in case it's needed in the future
+// (maybe we add more waveforms or change the generation code or mipmap format, etc.)
+
+/*
+
+// if you want to generate the files, you need to set the filenames and paths here -
+// can't use the usual wavetable directory here as it can require permissions on
+// some systems...
+
+QFile sawfile( "path-to-wavetables/saw.bin" );
+QFile sqrfile( "path-to-wavetables/sqr.bin" );
+QFile trifile( "path-to-wavetables/tri.bin" );
+QFile moogfile( "path-to-wavetables/moog.bin" );
+
+sawfile.open( QIODevice::WriteOnly );
+QDataStream sawout( &sawfile );
+sawout << s_waveforms[ BandLimitedWave::BLSaw ];
+sawfile.close();
+
+sqrfile.open( QIODevice::WriteOnly );
+QDataStream sqrout( &sqrfile );
+sqrout << s_waveforms[ BandLimitedWave::BLSquare ];
+sqrfile.close();
+
+trifile.open( QIODevice::WriteOnly );
+QDataStream triout( &trifile );
+triout << s_waveforms[ BandLimitedWave::BLTriangle ];
+trifile.close();
+
+moogfile.open( QIODevice::WriteOnly );
+QDataStream moogout( &moogfile );
+moogout << s_waveforms[ BandLimitedWave::BLMoog ];
+moogfile.close();
+
+*/
+
+}
diff --git a/src/core/Clipboard.cpp b/src/core/Clipboard.cpp
index ede9e1b..e5f2de1 100644
--- a/src/core/Clipboard.cpp
+++ b/src/core/Clipboard.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/ComboBoxModel.cpp b/src/core/ComboBoxModel.cpp
index 8206f3c..ee27d7e 100644
--- a/src/core/ComboBoxModel.cpp
+++ b/src/core/ComboBoxModel.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/Controller.cpp b/src/core/Controller.cpp
index 4356cb9..671f3f3 100644
--- a/src/core/Controller.cpp
+++ b/src/core/Controller.cpp
@@ -5,7 +5,7 @@
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
* Copyright (c) 2014 Lukas W <lukaswhl/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -173,8 +173,11 @@ Controller * Controller::create( ControllerTypes _ct, Model * _parent )
if( dummy )
c = dummy;
else
+ {
c = new Controller( DummyController, NULL,
QString() );
+ dummy = c;
+ }
break;
case Controller::LfoController:
diff --git a/src/core/ControllerConnection.cpp b/src/core/ControllerConnection.cpp
index e5db4ff..9943069 100644
--- a/src/core/ControllerConnection.cpp
+++ b/src/core/ControllerConnection.cpp
@@ -5,7 +5,7 @@
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
* Copyright (c) 2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/DataFile.cpp b/src/core/DataFile.cpp
index 28e1697..b70317a 100644
--- a/src/core/DataFile.cpp
+++ b/src/core/DataFile.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2012-2013 Paul Giblock <p/at/pgiblock.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -40,6 +40,7 @@
#include "SongEditor.h"
#include "Effect.h"
#include "lmmsversion.h"
+#include "base64.h"
// bbTCO::defaultColor()
#include "bb_track.h"
@@ -61,6 +62,38 @@ DataFile::typeDescStruct
+DataFile::LocaleHelper::LocaleHelper( Mode mode )
+{
+ switch( mode )
+ {
+ case ModeLoad:
+ // set a locale for which QString::fromFloat() returns valid values if
+ // floating point separator is a comma - otherwise we would fail to load
+ // older projects made by people from various countries due to their
+ // locale settings
+ QLocale::setDefault( QLocale::German );
+ break;
+
+ case ModeSave:
+ // set default locale to C so that floating point decimals are rendered to
+ // strings with periods as decimal point instead of commas in some countries
+ QLocale::setDefault( QLocale::C );
+
+ default: break;
+ }
+}
+
+
+
+DataFile::LocaleHelper::~LocaleHelper()
+{
+ // revert to original locale
+ QLocale::setDefault( QLocale::system() );
+}
+
+
+
+
DataFile::DataFile( Type type ) :
QDomDocument( "lmms-project" ),
m_content(),
@@ -683,28 +716,25 @@ void DataFile::upgrade()
}
- // new default colour for B&B tracks
- QDomNodeList list = elementsByTagName( "bbtco" );
- for( int i = 0; !list.item( i ).isNull(); ++i )
+ // update document meta data
+ documentElement().setAttribute( "version", LDF_VERSION_STRING );
+ documentElement().setAttribute( "type", typeName( type() ) );
+ documentElement().setAttribute( "creator", "LMMS" );
+ documentElement().setAttribute( "creatorversion", LMMS_VERSION );
+
+ if( type() == SongProject || type() == SongProjectTemplate )
{
- QDomElement el = list.item( i ).toElement();
- unsigned int rgb = el.attribute( "color" ).toUInt();
- if( rgb == qRgb( 64, 128, 255 ) )
+ // Time-signature
+ if ( !m_head.hasAttribute( "timesig_numerator" ) )
{
- el.setAttribute( "color", bbTCO::defaultColor() );
+ m_head.setAttribute( "timesig_numerator", 4 );
+ m_head.setAttribute( "timesig_denominator", 4 );
}
- }
- // Time-signature
- if ( !m_head.hasAttribute( "timesig_numerator" ) )
- {
- m_head.setAttribute( "timesig_numerator", 4 );
- m_head.setAttribute( "timesig_denominator", 4 );
- }
-
- if( !m_head.hasAttribute( "mastervol" ) )
- {
- m_head.setAttribute( "mastervol", 100 );
+ if( !m_head.hasAttribute( "mastervol" ) )
+ {
+ m_head.setAttribute( "mastervol", 100 );
+ }
}
//printf("%s\n", toString( 2 ).toUtf8().constData());
}
diff --git a/src/core/Effect.cpp b/src/core/Effect.cpp
index 4917ef8..3e6e709 100644
--- a/src/core/Effect.cpp
+++ b/src/core/Effect.cpp
@@ -2,9 +2,9 @@
* Effect.cpp - base-class for effects
*
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/users.sourceforge.net>
- * Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -23,16 +23,12 @@
*
*/
-
#include <QtXml/QDomElement>
-#include <cstdio>
-#include <cfloat>
-
#include "Effect.h"
#include "engine.h"
-#include "DummyEffect.h"
#include "EffectChain.h"
+#include "EffectControls.h"
#include "EffectView.h"
@@ -110,11 +106,11 @@ void Effect::loadSettings( const QDomElement & _this )
-Effect * Effect::instantiate( const QString & _plugin_name,
+Effect * Effect::instantiate( const QString& pluginName,
Model * _parent,
Descriptor::SubPluginFeatures::Key * _key )
{
- Plugin * p = Plugin::instantiate( _plugin_name, _parent, _key );
+ Plugin * p = Plugin::instantiate( pluginName, _parent, _key );
// check whether instantiated plugin is an effect
if( dynamic_cast<Effect *>( p ) != NULL )
{
@@ -124,9 +120,10 @@ Effect * Effect::instantiate( const QString & _plugin_name,
return effect;
}
- // not quite... so delete plugin and return dummy effect
+ // not quite... so delete plugin and leave it up to the caller to instantiate a DummyEffect
delete p;
- return new DummyEffect( _parent );
+
+ return NULL;
}
@@ -136,7 +133,7 @@ void Effect::checkGate( double _out_sum )
{
// Check whether we need to continue processing input. Restart the
// counter if the threshold has been exceeded.
- if( _out_sum <= gate() + FLT_MIN )
+ if( _out_sum - gate() <= typeInfo<float>::minEps() )
{
incrementBufferCount();
if( bufferCount() > timeout() )
@@ -176,7 +173,7 @@ void Effect::reinitSRC()
libsrcInterpolation(),
DEFAULT_CHANNELS, &error ) ) == NULL )
{
- fprintf( stderr, "Error: src_new() failed in effect.cpp!\n" );
+ qFatal( "Error: src_new() failed in effect.cpp!\n" );
}
}
}
@@ -202,9 +199,9 @@ void Effect::resample( int _i, const sampleFrame * _src_buf,
int error;
if( ( error = src_process( m_srcState[_i], &m_srcData[_i] ) ) )
{
- fprintf( stderr, "Effect::resample(): error while resampling: %s\n",
+ qFatal( "Effect::resample(): error while resampling: %s\n",
src_strerror( error ) );
}
}
-
+#include "moc_Effect.cxx"
diff --git a/src/core/EffectChain.cpp b/src/core/EffectChain.cpp
index 54ef54b..d26f463 100644
--- a/src/core/EffectChain.cpp
+++ b/src/core/EffectChain.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -56,12 +56,19 @@ void EffectChain::saveSettings( QDomDocument & _doc, QDomElement & _this )
{
_this.setAttribute( "enabled", m_enabledModel.value() );
_this.setAttribute( "numofeffects", m_effects.count() );
- for( EffectList::Iterator it = m_effects.begin();
- it != m_effects.end(); it++ )
+
+ for( EffectList::Iterator it = m_effects.begin(); it != m_effects.end(); it++ )
{
- QDomElement ef = ( *it )->saveState( _doc, _this );
- ef.setAttribute( "name", ( *it )->descriptor()->name );
- ef.appendChild( ( *it )->key().saveXML( _doc ) );
+ if( dynamic_cast<DummyEffect *>( *it ) )
+ {
+ _this.appendChild( dynamic_cast<DummyEffect *>( *it )->originalPluginData() );
+ }
+ else
+ {
+ QDomElement ef = ( *it )->saveState( _doc, _this );
+ ef.setAttribute( "name", ( *it )->descriptor()->name );
+ ef.appendChild( ( *it )->key().saveXML( _doc ) );
+ }
}
}
@@ -82,26 +89,23 @@ void EffectChain::loadSettings( const QDomElement & _this )
{
if( node.isElement() && node.nodeName() == "effect" )
{
- QDomElement cn = node.toElement();
- const QString name = cn.attribute( "name" );
- EffectKey key( cn.elementsByTagName( "key" ).
- item( 0 ).toElement() );
- Effect * e = Effect::instantiate( name, this, &key );
- if( e->isOkay() )
+ QDomElement effectData = node.toElement();
+
+ const QString name = effectData.attribute( "name" );
+ EffectKey key( effectData.elementsByTagName( "key" ).item( 0 ).toElement() );
+
+ Effect* e = Effect::instantiate( name, this, &key );
+
+ if( e != NULL && e->isOkay() && e->nodeName() == node.nodeName() )
{
- if( node.isElement() )
- {
- if( e->nodeName() == node.nodeName() )
- {
- e->restoreState( node.toElement() );
- }
- }
+ e->restoreState( effectData );
}
else
{
delete e;
- e = new DummyEffect( parentModel() );
+ e = new DummyEffect( parentModel(), effectData );
}
+
m_effects.push_back( e );
++fx_loaded;
}
diff --git a/src/core/EnvelopeAndLfoParameters.cpp b/src/core/EnvelopeAndLfoParameters.cpp
index 668fb9d..750aba0 100644
--- a/src/core/EnvelopeAndLfoParameters.cpp
+++ b/src/core/EnvelopeAndLfoParameters.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -68,6 +68,7 @@ void EnvelopeAndLfoParameters::LfoInstances::reset()
+
void EnvelopeAndLfoParameters::LfoInstances::add( EnvelopeAndLfoParameters * lfo )
{
QMutexLocker m( &m_lfoListMutex );
@@ -86,7 +87,6 @@ void EnvelopeAndLfoParameters::LfoInstances::remove( EnvelopeAndLfoParameters *
-
EnvelopeAndLfoParameters::EnvelopeAndLfoParameters(
float _value_for_zero_amount,
Model * _parent ) :
@@ -218,6 +218,13 @@ inline sample_t EnvelopeAndLfoParameters::lfoShapeSample( fpp_t _frame_offset )
case UserDefinedWave:
shape_sample = m_userWave.userWaveSample( phase );
break;
+ case RandomWave:
+ if( frame == 0 )
+ {
+ m_random = Oscillator::noiseSample( 0.0f );
+ }
+ shape_sample = m_random;
+ break;
case SineWave:
default:
shape_sample = Oscillator::sinSample( phase );
diff --git a/src/core/FxMixer.cpp b/src/core/FxMixer.cpp
index 723c885..b99acc3 100644
--- a/src/core/FxMixer.cpp
+++ b/src/core/FxMixer.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2011 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,17 +22,44 @@
*
*/
-
#include <QtXml/QDomElement>
#include "FxMixer.h"
+#include "MixerWorkerThread.h"
+#include "MixHelpers.h"
#include "Effect.h"
#include "song.h"
+#include "InstrumentTrack.h"
+#include "bb_track_container.h"
+
+
+FxRoute::FxRoute( FxChannel * from, FxChannel * to, float amount ) :
+ m_from( from ),
+ m_to( to ),
+ m_amount( amount, 0, 1, 0.001, NULL,
+ tr( "Amount to send from channel %1 to channel %2" ).arg( m_from->m_channelIndex ).arg( m_to->m_channelIndex ) )
+{
+ //qDebug( "created: %d to %d", m_from->m_channelIndex, m_to->m_channelIndex );
+ // create send amount model
+}
+
+
+FxRoute::~FxRoute()
+{
+}
+
+
+void FxRoute::updateName()
+{
+ m_amount.setDisplayName(
+ tr( "Amount to send from channel %1 to channel %2" ).arg( m_from->m_channelIndex ).arg( m_to->m_channelIndex ) );
+}
+
-FxChannel::FxChannel( Model * _parent ) :
+FxChannel::FxChannel( int idx, Model * _parent ) :
m_fxChain( NULL ),
- m_used( false ),
+ m_hasInput( false ),
m_stillRunning( false ),
m_peakLeft( 0.0f ),
m_peakRight( 0.0f ),
@@ -40,7 +67,10 @@ FxChannel::FxChannel( Model * _parent ) :
m_muteModel( false, _parent ),
m_volumeModel( 1.0, 0.0, 2.0, 0.01, _parent ),
m_name(),
- m_lock()
+ m_lock(),
+ m_channelIndex( idx ),
+ m_queued( false ),
+ m_dependenciesMet( 0 )
{
engine::mixer()->clearAudioBuffer( m_buffer,
engine::mixer()->framesPerPeriod() );
@@ -55,28 +85,109 @@ FxChannel::~FxChannel()
}
+inline void FxChannel::processed()
+{
+ foreach( FxRoute * receiverRoute, m_sends )
+ {
+ if( receiverRoute->receiver()->m_muted == false )
+ {
+ receiverRoute->receiver()->incrementDeps();
+ }
+ }
+}
+void FxChannel::incrementDeps()
+{
+ int i = m_dependenciesMet.fetchAndAddOrdered( 1 ) + 1;
+ if( i >= m_receives.size() && ! m_queued )
+ {
+ m_queued = true;
+ MixerWorkerThread::addJob( this );
+ }
+}
-
-FxMixer::FxMixer() :
- JournallingObject(),
- Model( NULL )
+void FxChannel::doProcessing( sampleFrame * _buf )
{
- for( int i = 0; i < NumFxChannels+1; ++i )
+ const fpp_t fpp = engine::mixer()->framesPerPeriod();
+
+ // <tobydox> ignore the passed _buf
+ // <tobydox> always use m_buffer
+ // <tobydox> this is just an auxilliary buffer if doProcessing()
+ // needs one for processing while running
+ // <tobydox> particularly important for playHandles, so Instruments
+ // can operate on this buffer the whole time
+ // <tobydox> this improves cache hit rate
+ _buf = m_buffer;
+
+ if( m_muted == false )
+ {
+ foreach( FxRoute * senderRoute, m_receives )
+ {
+ FxChannel * sender = senderRoute->sender();
+ FloatModel * sendModel = senderRoute->amount();
+ if( ! sendModel ) qFatal( "Error: no send model found from %d to %d", senderRoute->senderIndex(), m_channelIndex );
+
+ if( sender->m_hasInput || sender->m_stillRunning )
+ {
+ // get the send level...
+ const float amt = sendModel->value();
+
+ // mix it's output with this one's output
+ sampleFrame * ch_buf = sender->m_buffer;
+ const float v = sender->m_volumeModel.value() * amt;
+ for( f_cnt_t f = 0; f < fpp; ++f )
+ {
+ _buf[f][0] += ch_buf[f][0] * v;
+ _buf[f][1] += ch_buf[f][1] * v;
+ }
+ m_hasInput = true;
+ }
+ }
+
+
+ const float v = m_volumeModel.value();
+
+ if( m_hasInput )
+ {
+ // only start fxchain when we have input...
+ m_fxChain.startRunning();
+ }
+
+ m_stillRunning = m_fxChain.processAudioBuffer( _buf, fpp, m_hasInput );
+
+ m_peakLeft = qMax( m_peakLeft, engine::mixer()->peakValueLeft( _buf, fpp ) * v );
+ m_peakRight = qMax( m_peakRight, engine::mixer()->peakValueRight( _buf, fpp ) * v );
+ }
+ else
{
- m_fxChannels[i] = new FxChannel( this );
+ m_peakLeft = m_peakRight = 0.0f;
}
- // reset name etc.
- clear();
+
+ // increment dependency counter of all receivers
+ processed();
}
+FxMixer::FxMixer() :
+ Model( NULL ),
+ JournallingObject(),
+ m_fxChannels()
+{
+ // create master channel
+ createChannel();
+}
+
+
FxMixer::~FxMixer()
{
- for( int i = 0; i < NumFxChannels+1; ++i )
+ while( ! m_fxRoutes.isEmpty() )
+ {
+ deleteChannelSend( m_fxRoutes.first() );
+ }
+ for( int i = 0; i < m_fxChannels.size(); ++i )
{
delete m_fxChannels[i];
}
@@ -84,63 +195,275 @@ FxMixer::~FxMixer()
+int FxMixer::createChannel()
+{
+ const int index = m_fxChannels.size();
+ // create new channel
+ m_fxChannels.push_back( new FxChannel( index, this ) );
-void FxMixer::mixToChannel( const sampleFrame * _buf, fx_ch_t _ch )
+ // reset channel state
+ clearChannel( index );
+
+ return index;
+}
+
+
+void FxMixer::deleteChannel( int index )
{
- if( m_fxChannels[_ch]->m_muteModel.value() == false )
+ m_fxChannels[index]->m_lock.lock();
+
+ FxChannel * ch = m_fxChannels[index];
+
+ // go through every instrument and adjust for the channel index change
+ TrackContainer::TrackList tracks;
+ tracks += engine::getSong()->tracks();
+ tracks += engine::getBBTrackContainer()->tracks();
+
+ foreach( track* t, tracks )
{
- m_fxChannels[_ch]->m_lock.lock();
- sampleFrame * buf = m_fxChannels[_ch]->m_buffer;
- for( f_cnt_t f = 0; f < engine::mixer()->framesPerPeriod(); ++f )
+ if( t->type() == track::InstrumentTrack )
{
- buf[f][0] += _buf[f][0];
- buf[f][1] += _buf[f][1];
+ InstrumentTrack* inst = dynamic_cast<InstrumentTrack *>( t );
+ int val = inst->effectChannelModel()->value(0);
+ if( val == index )
+ {
+ // we are deleting this track's fx send
+ // send to master
+ inst->effectChannelModel()->setValue(0);
+ }
+ else if( val > index )
+ {
+ // subtract 1 to make up for the missing channel
+ inst->effectChannelModel()->setValue(val-1);
+ }
}
- m_fxChannels[_ch]->m_used = true;
- m_fxChannels[_ch]->m_lock.unlock();
}
-}
+ // delete all of this channel's sends and receives
+ while( ! ch->m_sends.isEmpty() )
+ {
+ deleteChannelSend( ch->m_sends.first() );
+ }
+ while( ! ch->m_receives.isEmpty() )
+ {
+ deleteChannelSend( ch->m_receives.first() );
+ }
+
+ // actually delete the channel
+ delete m_fxChannels[index];
+ m_fxChannels.remove(index);
+
+ for( int i = index; i < m_fxChannels.size(); ++i )
+ {
+ validateChannelName( i, i + 1 );
+ }
+}
-void FxMixer::processChannel( fx_ch_t _ch, sampleFrame * _buf )
+void FxMixer::moveChannelLeft( int index )
{
- if( m_fxChannels[_ch]->m_muteModel.value() == false &&
- ( m_fxChannels[_ch]->m_used || m_fxChannels[_ch]->m_stillRunning || _ch == 0 ) )
+ // can't move master or first channel
+ if( index <= 1 || index >= m_fxChannels.size() )
{
- if( _buf == NULL )
+ return;
+ }
+ // channels to swap
+ int a = index - 1, b = index;
+
+ // go through every instrument and adjust for the channel index change
+ QVector<track *> songTrackList = engine::getSong()->tracks();
+ QVector<track *> bbTrackList = engine::getBBTrackContainer()->tracks();
+
+ QVector<track *> trackLists[] = {songTrackList, bbTrackList};
+ for(int tl=0; tl<2; ++tl)
+ {
+ QVector<track *> trackList = trackLists[tl];
+ for(int i=0; i<trackList.size(); ++i)
{
- _buf = m_fxChannels[_ch]->m_buffer;
+ if( trackList[i]->type() == track::InstrumentTrack )
+ {
+ InstrumentTrack * inst = (InstrumentTrack *) trackList[i];
+ int val = inst->effectChannelModel()->value(0);
+ if( val == a )
+ {
+ inst->effectChannelModel()->setValue(b);
+ }
+ else if( val == b )
+ {
+ inst->effectChannelModel()->setValue(a);
+ }
+
+ }
}
- const fpp_t f = engine::mixer()->framesPerPeriod();
+ }
+
+ // actually do the swap
+ FxChannel * tmpChannel = m_fxChannels[a];
+ m_fxChannels[a] = m_fxChannels[b];
+ m_fxChannels[b] = tmpChannel;
+
+ validateChannelName( a, b );
+ validateChannelName( b, a );
+}
+
+
+
+void FxMixer::moveChannelRight( int index )
+{
+ moveChannelLeft( index + 1 );
+}
+
+
+
+FxRoute * FxMixer::createChannelSend( fx_ch_t fromChannel, fx_ch_t toChannel,
+ float amount )
+{
+// qDebug( "requested: %d to %d", fromChannel, toChannel );
+ // find the existing connection
+ FxChannel * from = m_fxChannels[fromChannel];
+ FxChannel * to = m_fxChannels[toChannel];
- // only start effects if sound was mixed to this FX channel before
- if( m_fxChannels[_ch]->m_used )
+ for( int i=0; i<from->m_sends.size(); ++i )
+ {
+ if( from->m_sends[i]->receiver() == to )
{
- m_fxChannels[_ch]->m_fxChain.startRunning();
+ // simply adjust the amount
+ from->m_sends[i]->amount()->setValue( amount );
+ return from->m_sends[i];
}
+ }
+
+ // connection does not exist. create a new one
+ return createRoute( from, to, amount );
+}
- // process FX chain
- m_fxChannels[_ch]->m_stillRunning = m_fxChannels[_ch]->m_fxChain.processAudioBuffer( _buf, f, m_fxChannels[_ch]->m_used );
- float peakLeft = engine::mixer()->peakValueLeft( _buf, f ) * m_fxChannels[_ch]->m_volumeModel.value();
- float peakRight = engine::mixer()->peakValueRight( _buf, f ) * m_fxChannels[_ch]->m_volumeModel.value();
+FxRoute * FxMixer::createRoute( FxChannel * from, FxChannel * to, float amount )
+{
+ if( from == to )
+ {
+ return NULL;
+ }
+ m_sendsMutex.lock();
+ FxRoute * route = new FxRoute( from, to, amount );
+
+ // add us to from's sends
+ from->m_sends.append( route );
+
+ // add us to to's receives
+ to->m_receives.append( route );
+
+ // add us to fxmixer's list
+ engine::fxMixer()->m_fxRoutes.append( route );
+ m_sendsMutex.unlock();
+
+ return route;
+}
+
- if( peakLeft > m_fxChannels[_ch]->m_peakLeft )
+// delete the connection made by createChannelSend
+void FxMixer::deleteChannelSend( fx_ch_t fromChannel, fx_ch_t toChannel )
+{
+ // delete the send
+ FxChannel * from = m_fxChannels[fromChannel];
+ FxChannel * to = m_fxChannels[toChannel];
+
+ // find and delete the send entry
+ for( int i = 0; i < from->m_sends.size(); ++i )
+ {
+ if( from->m_sends[i]->receiver() == to )
{
- m_fxChannels[_ch]->m_peakLeft = peakLeft;
+ deleteChannelSend( from->m_sends[i] );
+ break;
}
- if( peakRight > m_fxChannels[_ch]->m_peakRight )
+ }
+}
+
+
+void FxMixer::deleteChannelSend( FxRoute * route )
+{
+ m_sendsMutex.lock();
+ // remove us from from's sends
+ route->sender()->m_sends.remove( route->sender()->m_sends.indexOf( route ) );
+ // remove us from to's receives
+ route->receiver()->m_receives.remove( route->receiver()->m_receives.indexOf( route ) );
+ // remove us from fxmixer's list
+ engine::fxMixer()->m_fxRoutes.remove( engine::fxMixer()->m_fxRoutes.indexOf( route ) );
+ delete route;
+ m_sendsMutex.unlock();
+}
+
+
+bool FxMixer::isInfiniteLoop( fx_ch_t sendFrom, fx_ch_t sendTo )
+{
+ if( sendFrom == sendTo ) return true;
+ FxChannel * from = m_fxChannels[sendFrom];
+ FxChannel * to = m_fxChannels[sendTo];
+ bool b = checkInfiniteLoop( from, to );
+ return b;
+}
+
+
+bool FxMixer::checkInfiniteLoop( FxChannel * from, FxChannel * to )
+{
+ // can't send master to anything
+ if( from == m_fxChannels[0] )
+ {
+ return true;
+ }
+
+ // can't send channel to itself
+ if( from == to )
+ {
+ return true;
+ }
+
+ // follow sendTo's outputs recursively looking for something that sends
+ // to sendFrom
+ for( int i=0; i < to->m_sends.size(); ++i )
+ {
+ if( checkInfiniteLoop( from, to->m_sends[i]->receiver() ) )
{
- m_fxChannels[_ch]->m_peakRight = peakRight;
+ return true;
}
+ }
- m_fxChannels[_ch]->m_used = true;
+ return false;
+}
+
+
+// how much does fromChannel send its output to the input of toChannel?
+FloatModel * FxMixer::channelSendModel( fx_ch_t fromChannel, fx_ch_t toChannel )
+{
+ if( fromChannel == toChannel )
+ {
+ return NULL;
}
- else
+ FxChannel * from = m_fxChannels[fromChannel];
+ FxChannel * to = m_fxChannels[toChannel];
+
+ foreach( FxRoute * route, from->m_sends )
{
- m_fxChannels[_ch]->m_peakLeft = m_fxChannels[_ch]->m_peakRight = 0.0f;
+ if( route->receiver() == to )
+ {
+ return route->amount();
+ }
+ }
+
+ return NULL;
+}
+
+
+
+void FxMixer::mixToChannel( const sampleFrame * _buf, fx_ch_t _ch )
+{
+ if( m_fxChannels[_ch]->m_muteModel.value() == false )
+ {
+ m_fxChannels[_ch]->m_lock.lock();
+ MixHelpers::add( m_fxChannels[_ch]->m_buffer, _buf, engine::mixer()->framesPerPeriod() );
+ m_fxChannels[_ch]->m_hasInput = true;
+ m_fxChannels[_ch]->m_lock.unlock();
}
}
@@ -155,47 +478,53 @@ void FxMixer::prepareMasterMix()
-
void FxMixer::masterMix( sampleFrame * _buf )
{
const int fpp = engine::mixer()->framesPerPeriod();
- memcpy( _buf, m_fxChannels[0]->m_buffer, sizeof( sampleFrame ) * fpp );
- for( int i = 1; i < NumFxChannels+1; ++i )
+ if( m_sendsMutex.tryLock() )
{
- if( m_fxChannels[i]->m_used )
+ // add the channels that have no dependencies (no incoming senders, ie. no receives)
+ // to the jobqueue. The channels that have receives get added when their senders get processed, which
+ // is detected by dependency counting.
+ // also instantly add all muted channels as they don't need to care about their senders, and can just increment the deps of
+ // their recipients right away.
+ MixerWorkerThread::resetJobQueue( MixerWorkerThread::JobQueue::Dynamic );
+ foreach( FxChannel * ch, m_fxChannels )
{
- sampleFrame * ch_buf = m_fxChannels[i]->m_buffer;
- const float v = m_fxChannels[i]->m_volumeModel.value();
- for( f_cnt_t f = 0; f < fpp; ++f )
+ ch->m_muted = ch->m_muteModel.value();
+ if( ch->m_muted ) // instantly "process" muted channels
{
- _buf[f][0] += ch_buf[f][0] * v;
- _buf[f][1] += ch_buf[f][1] * v;
+ ch->processed();
+ ch->done();
+ }
+ else if( ch->m_receives.size() == 0 )
+ {
+ ch->m_queued = true;
+ MixerWorkerThread::addJob( ch );
}
- engine::mixer()->clearAudioBuffer( ch_buf,
- engine::mixer()->framesPerPeriod() );
- m_fxChannels[i]->m_used = false;
}
+ while( m_fxChannels[0]->state() != ThreadableJob::Done )
+ {
+ MixerWorkerThread::startAndWaitForJobs();
+ }
+ m_sendsMutex.unlock();
}
-
- processChannel( 0, _buf );
-
- if( m_fxChannels[0]->m_muteModel.value() )
- {
- engine::mixer()->clearAudioBuffer( _buf,
- engine::mixer()->framesPerPeriod() );
- return;
- }
-
+
const float v = m_fxChannels[0]->m_volumeModel.value();
- for( f_cnt_t f = 0; f < engine::mixer()->framesPerPeriod(); ++f )
+ MixHelpers::addSanitizedMultiplied( _buf, m_fxChannels[0]->m_buffer, v, fpp );
+
+ // clear all channel buffers and
+ // reset channel process state
+ for( int i = 0; i < numChannels(); ++i)
{
- _buf[f][0] *= v;
- _buf[f][1] *= v;
+ engine::mixer()->clearAudioBuffer( m_fxChannels[i]->m_buffer, engine::mixer()->framesPerPeriod() );
+ m_fxChannels[i]->reset();
+ m_fxChannels[i]->m_queued = false;
+ // also reset hasInput
+ m_fxChannels[i]->m_hasInput = false;
+ m_fxChannels[i]->m_dependenciesMet = 0;
}
-
- m_fxChannels[0]->m_peakLeft *= engine::mixer()->masterGain();
- m_fxChannels[0]->m_peakRight *= engine::mixer()->masterGain();
}
@@ -203,58 +532,161 @@ void FxMixer::masterMix( sampleFrame * _buf )
void FxMixer::clear()
{
- for( int i = 0; i <= NumFxChannels; ++i )
+ while( m_fxChannels.size() > 1 )
{
- m_fxChannels[i]->m_fxChain.clear();
- m_fxChannels[i]->m_volumeModel.setValue( 1.0f );
- m_fxChannels[i]->m_muteModel.setValue( false );
- m_fxChannels[i]->m_name = ( i == 0 ) ?
- tr( "Master" ) : tr( "FX %1" ).arg( i );
- m_fxChannels[i]->m_volumeModel.setDisplayName(
- m_fxChannels[i]->m_name );
-
+ deleteChannel(1);
}
+
+ clearChannel(0);
}
+void FxMixer::clearChannel(fx_ch_t index)
+{
+ FxChannel * ch = m_fxChannels[index];
+ ch->m_fxChain.clear();
+ ch->m_volumeModel.setValue( 1.0f );
+ ch->m_muteModel.setValue( false );
+ ch->m_name = ( index == 0 ) ? tr( "Master" ) : tr( "FX %1" ).arg( index );
+ ch->m_volumeModel.setDisplayName( ch->m_name );
+
+ // send only to master
+ if( index > 0)
+ {
+ // delete existing sends
+ while( ! ch->m_sends.isEmpty() )
+ {
+ deleteChannelSend( ch->m_sends.first() );
+ }
+
+ // add send to master
+ createChannelSend( index, 0 );
+ }
+
+ // delete receives
+ while( ! ch->m_receives.isEmpty() )
+ {
+ deleteChannelSend( ch->m_receives.first() );
+ }
+}
void FxMixer::saveSettings( QDomDocument & _doc, QDomElement & _this )
{
- for( int i = 0; i <= NumFxChannels; ++i )
+ // save channels
+ for( int i = 0; i < m_fxChannels.size(); ++i )
{
+ FxChannel * ch = m_fxChannels[i];
+
QDomElement fxch = _doc.createElement( QString( "fxchannel" ) );
_this.appendChild( fxch );
- m_fxChannels[i]->m_fxChain.saveState( _doc, fxch );
- m_fxChannels[i]->m_volumeModel.saveSettings( _doc, fxch,
- "volume" );
- m_fxChannels[i]->m_muteModel.saveSettings( _doc, fxch,
- "muted" );
+
+ ch->m_fxChain.saveState( _doc, fxch );
+ ch->m_volumeModel.saveSettings( _doc, fxch, "volume" );
+ ch->m_muteModel.saveSettings( _doc, fxch, "muted" );
fxch.setAttribute( "num", i );
- fxch.setAttribute( "name", m_fxChannels[i]->m_name );
+ fxch.setAttribute( "name", ch->m_name );
+
+ // add the channel sends
+ for( int si = 0; si < ch->m_sends.size(); ++si )
+ {
+ QDomElement sendsDom = _doc.createElement( QString( "send" ) );
+ fxch.appendChild( sendsDom );
+
+ sendsDom.setAttribute( "channel", ch->m_sends[si]->receiverIndex() );
+ ch->m_sends[si]->amount()->saveSettings( _doc, sendsDom, "amount" );
+ }
}
}
+// make sure we have at least num channels
+void FxMixer::allocateChannelsTo(int num)
+{
+ while( num > m_fxChannels.size() - 1 )
+ {
+ createChannel();
+ // delete the default send to master
+ deleteChannelSend( m_fxChannels.size()-1, 0 );
+ }
+}
void FxMixer::loadSettings( const QDomElement & _this )
{
clear();
QDomNode node = _this.firstChild();
- for( int i = 0; i <= NumFxChannels; ++i )
+ bool thereIsASend = false;
+
+ while( ! node.isNull() )
{
QDomElement fxch = node.toElement();
+
+ // index of the channel we are about to load
int num = fxch.attribute( "num" ).toInt();
- m_fxChannels[num]->m_fxChain.restoreState(
- fxch.firstChildElement(
- m_fxChannels[num]->m_fxChain.nodeName() ) );
+
+ // allocate enough channels
+ allocateChannelsTo( num );
+
m_fxChannels[num]->m_volumeModel.loadSettings( fxch, "volume" );
m_fxChannels[num]->m_muteModel.loadSettings( fxch, "muted" );
m_fxChannels[num]->m_name = fxch.attribute( "name" );
+
+ m_fxChannels[num]->m_fxChain.restoreState( fxch.firstChildElement(
+ m_fxChannels[num]->m_fxChain.nodeName() ) );
+
+ // mixer sends
+ QDomNodeList chData = fxch.childNodes();
+ for( unsigned int i=0; i<chData.length(); ++i )
+ {
+ QDomElement chDataItem = chData.at(i).toElement();
+ if( chDataItem.nodeName() == QString( "send" ) )
+ {
+ thereIsASend = true;
+ int sendTo = chDataItem.attribute( "channel" ).toInt();
+ allocateChannelsTo( sendTo ) ;
+ FxRoute * fxr = createChannelSend( num, sendTo, 1.0f );
+ if( fxr ) fxr->amount()->loadSettings( chDataItem, "amount" );
+ }
+ }
+
+
+
node = node.nextSibling();
}
+ // check for old format. 65 fx channels and no explicit sends.
+ if( ! thereIsASend && m_fxChannels.size() == 65 ) {
+ // create a send from every channel into master
+ for( int i=1; i<m_fxChannels.size(); ++i )
+ {
+ createChannelSend( i, 0 );
+ }
+ }
+
emit dataChanged();
}
+
+void FxMixer::validateChannelName( int index, int oldIndex )
+{
+ FxChannel * fxc = m_fxChannels[ index ];
+ if( fxc->m_name == tr( "FX %1" ).arg( oldIndex ) )
+ {
+ fxc->m_name = tr( "FX %1" ).arg( index );
+ }
+ // set correct channel index
+ fxc->m_channelIndex = index;
+
+ // now check all routes and update names of the send models
+ foreach( FxRoute * r, fxc->m_sends )
+ {
+ r->updateName();
+ }
+ foreach( FxRoute * r, fxc->m_receives )
+ {
+ r->updateName();
+ }
+}
+
+#include "moc_FxMixer.cxx"
diff --git a/src/core/ImportFilter.cpp b/src/core/ImportFilter.cpp
index e32149d..99c703a 100644
--- a/src/core/ImportFilter.cpp
+++ b/src/core/ImportFilter.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/InlineAutomation.cpp b/src/core/InlineAutomation.cpp
index 58d570d..e99c0ad 100644
--- a/src/core/InlineAutomation.cpp
+++ b/src/core/InlineAutomation.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/Instrument.cpp b/src/core/Instrument.cpp
index ef4a1a8..4f62ff5 100644
--- a/src/core/Instrument.cpp
+++ b/src/core/Instrument.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/InstrumentFunctions.cpp b/src/core/InstrumentFunctions.cpp
index abf6131..1291a08 100644
--- a/src/core/InstrumentFunctions.cpp
+++ b/src/core/InstrumentFunctions.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -133,6 +133,8 @@ InstrumentFunctionNoteStacking::ChordTable::Init InstrumentFunctionNoteStacking:
{ QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Minor" ), { 0, 2, 3, 5, 7, 8, 10, -1 } },
{ QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Chromatic" ), { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, -1 } },
{ QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "Half-Whole Diminished" ), { 0, 1, 3, 4, 6, 7, 9, 10, -1 } },
+
+ { QT_TRANSLATE_NOOP( "InstrumentFunctionNoteStacking", "5" ), { 0, 7, -1 } }
} ;
@@ -231,30 +233,22 @@ void InstrumentFunctionNoteStacking::processNote( NotePlayHandle * _n )
// at the same time we only add sub-notes if nothing of the note was
// played yet, because otherwise we would add chord-subnotes every
// time an audio-buffer is rendered...
- if( ( ( _n->isTopNote() && _n->instrumentTrack()->isArpeggioEnabled() == false ) || _n->isPartOfArpeggio() ) &&
- _n->totalFramesPlayed() == 0 &&
- m_chordsEnabledModel.value() == true )
+ if( ( _n->origin() == NotePlayHandle::OriginArpeggio || ( _n->hasParent() == false && _n->instrumentTrack()->isArpeggioEnabled() == false ) ) &&
+ _n->totalFramesPlayed() == 0 &&
+ m_chordsEnabledModel.value() == true && ! _n->isReleased() )
{
// then insert sub-notes for chord
const int selected_chord = m_chordsModel.value();
- for( int octave_cnt = 0;
- octave_cnt < m_chordRangeModel.value(); ++octave_cnt )
+ for( int octave_cnt = 0; octave_cnt < m_chordRangeModel.value(); ++octave_cnt )
{
- const int sub_note_key_base = base_note_key +
- octave_cnt * KeysPerOctave;
- // if octave_cnt == 1 we're in the first octave and
- // the base-note is already done, so we don't have to
- // create it in the following loop, then we loop until
- // there's a -1 in the interval-array
- for( int i = ( octave_cnt == 0 ) ? 1 : 0;
- i < chord_table[selected_chord].size();
- ++i )
+ const int sub_note_key_base = base_note_key + octave_cnt * KeysPerOctave;
+
+ // process all notes in the chord
+ for( int i = 0; i < chord_table[selected_chord].size(); ++i )
{
// add interval to sub-note-key
- const int sub_note_key = sub_note_key_base +
- (int) chord_table[
- selected_chord][i];
+ const int sub_note_key = sub_note_key_base + (int) chord_table[selected_chord][i];
// maybe we're out of range -> let's get outta
// here!
if( sub_note_key > NumKeys )
@@ -262,16 +256,12 @@ void InstrumentFunctionNoteStacking::processNote( NotePlayHandle * _n )
break;
}
// create copy of base-note
- note note_copy( _n->length(), 0, sub_note_key,
- _n->getVolume(),
- _n->getPanning(),
- _n->detuning() );
+ note note_copy( _n->length(), 0, sub_note_key, _n->getVolume(), _n->getPanning(), _n->detuning() );
+
// create sub-note-play-handle, only note is
// different
- new NotePlayHandle( _n->instrumentTrack(),
- _n->offset(),
- _n->frames(), note_copy,
- _n );
+ new NotePlayHandle( _n->instrumentTrack(), _n->offset(), _n->frames(), note_copy,
+ _n, -1, NotePlayHandle::OriginNoteStacking );
}
}
}
@@ -310,10 +300,8 @@ InstrumentFunctionArpeggio::InstrumentFunctionArpeggio( Model * _parent ) :
m_arpEnabledModel( false ),
m_arpModel( this, tr( "Arpeggio type" ) ),
m_arpRangeModel( 1.0f, 1.0f, 9.0f, 1.0f, this, tr( "Arpeggio range" ) ),
- m_arpTimeModel( 100.0f, 25.0f, 2000.0f, 1.0f, 2000, this,
- tr( "Arpeggio time" ) ),
- m_arpGateModel( 100.0f, 1.0f, 200.0f, 1.0f, this,
- tr( "Arpeggio gate" ) ),
+ m_arpTimeModel( 100.0f, 25.0f, 2000.0f, 1.0f, 2000, this, tr( "Arpeggio time" ) ),
+ m_arpGateModel( 100.0f, 1.0f, 200.0f, 1.0f, this, tr( "Arpeggio gate" ) ),
m_arpDirectionModel( this, tr( "Arpeggio direction" ) ),
m_arpModeModel( this, tr( "Arpeggio mode" ) )
{
@@ -325,10 +313,9 @@ InstrumentFunctionArpeggio::InstrumentFunctionArpeggio( Model * _parent ) :
m_arpDirectionModel.addItem( tr( "Up" ), new PixmapLoader( "arp_up" ) );
m_arpDirectionModel.addItem( tr( "Down" ), new PixmapLoader( "arp_down" ) );
- m_arpDirectionModel.addItem( tr( "Up and down" ),
- new PixmapLoader( "arp_up_and_down" ) );
- m_arpDirectionModel.addItem( tr( "Random" ),
- new PixmapLoader( "arp_random" ) );
+ m_arpDirectionModel.addItem( tr( "Up and down" ), new PixmapLoader( "arp_up_and_down" ) );
+ m_arpDirectionModel.addItem( tr( "Random" ), new PixmapLoader( "arp_random" ) );
+ m_arpDirectionModel.addItem( tr( "Down and up" ), new PixmapLoader( "arp_up_and_down" ) );
m_arpDirectionModel.setInitValue( ArpDirUp );
m_arpModeModel.addItem( tr( "Free" ), new PixmapLoader( "arp_free" ) );
@@ -349,9 +336,10 @@ InstrumentFunctionArpeggio::~InstrumentFunctionArpeggio()
void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )
{
const int base_note_key = _n->key();
- if( _n->isTopNote() == false ||
- !m_arpEnabledModel.value() ||
- ( _n->isReleased() && _n->releaseFramesDone() >= _n->actualReleaseFramesToDo() ) )
+ if( _n->origin() == NotePlayHandle::OriginArpeggio ||
+ _n->origin() == NotePlayHandle::OriginNoteStacking ||
+ !m_arpEnabledModel.value() ||
+ ( _n->isReleased() && _n->releaseFramesDone() >= _n->actualReleaseFramesToDo() ) )
{
return;
}
@@ -359,8 +347,8 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )
const int selected_arp = m_arpModel.value();
- ConstNotePlayHandleList cnphv = NotePlayHandle::nphsOfInstrumentTrack(
- _n->instrumentTrack() );
+ ConstNotePlayHandleList cnphv = NotePlayHandle::nphsOfInstrumentTrack( _n->instrumentTrack() );
+
if( m_arpModeModel.value() != FreeMode && cnphv.size() == 0 )
{
// maybe we're playing only a preset-preview-note?
@@ -379,27 +367,23 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )
const int total_range = range * cnphv.size();
// number of frames that every note should be played
- const f_cnt_t arp_frames = (f_cnt_t)( m_arpTimeModel.value() / 1000.0f *
- engine::mixer()->processingSampleRate() );
- const f_cnt_t gated_frames = (f_cnt_t)( m_arpGateModel.value() *
- arp_frames / 100.0f );
+ const f_cnt_t arp_frames = (f_cnt_t)( m_arpTimeModel.value() / 1000.0f * engine::mixer()->processingSampleRate() );
+ const f_cnt_t gated_frames = (f_cnt_t)( m_arpGateModel.value() * arp_frames / 100.0f );
// used for calculating remaining frames for arp-note, we have to add
// arp_frames-1, otherwise the first arp-note will not be setup
// correctly... -> arp_frames frames silence at the start of every note!
int cur_frame = ( ( m_arpModeModel.value() != FreeMode ) ?
- cnphv.first()->totalFramesPlayed() :
- _n->totalFramesPlayed() ) + arp_frames - 1;
+ cnphv.first()->totalFramesPlayed() :
+ _n->totalFramesPlayed() ) + arp_frames - 1;
// used for loop
f_cnt_t frames_processed = 0;
while( frames_processed < engine::mixer()->framesPerPeriod() )
{
- const f_cnt_t remaining_frames_for_cur_arp = arp_frames -
- ( cur_frame % arp_frames );
+ const f_cnt_t remaining_frames_for_cur_arp = arp_frames - ( cur_frame % arp_frames );
// does current arp-note fill whole audio-buffer?
- if( remaining_frames_for_cur_arp >
- engine::mixer()->framesPerPeriod() )
+ if( remaining_frames_for_cur_arp > engine::mixer()->framesPerPeriod() )
{
// then we don't have to do something!
break;
@@ -413,8 +397,7 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )
// in sorted mode: is it our turn or do we have to be quiet for
// now?
if( m_arpModeModel.value() == SortMode &&
- ( ( cur_frame / arp_frames ) % total_range ) /
- range != (f_cnt_t) _n->index() )
+ ( ( cur_frame / arp_frames ) % total_range ) / range != (f_cnt_t) _n->index() )
{
// update counters
frames_processed += arp_frames;
@@ -439,33 +422,41 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )
// once down -> makes 2 * range possible notes...
// because we don't play the lower and upper notes
// twice, we have to subtract 2
- cur_arp_idx = ( cur_frame / arp_frames ) %
- ( range * 2 - 2 );
+ cur_arp_idx = ( cur_frame / arp_frames ) % ( range * 2 - 2 );
+ // if greater than range, we have to play down...
+ // looks like the code for arp_dir==DOWN... :)
+ if( cur_arp_idx >= range )
+ {
+ cur_arp_idx = range - cur_arp_idx % ( range - 1 ) - 1;
+ }
+ }
+ else if( dir == ArpDirDownAndUp && range > 1 )
+ {
+ // copied from ArpDirUpAndDown above
+ cur_arp_idx = ( cur_frame / arp_frames ) % ( range * 2 - 2 );
// if greater than range, we have to play down...
// looks like the code for arp_dir==DOWN... :)
if( cur_arp_idx >= range )
{
- cur_arp_idx = range - cur_arp_idx %
- ( range - 1 ) - 1;
+ cur_arp_idx = range - cur_arp_idx % ( range - 1 ) - 1;
}
+ // inverts direction
+ cur_arp_idx = range - cur_arp_idx - 1;
}
else if( dir == ArpDirRandom )
{
// just pick a random chord-index
- cur_arp_idx = (int)( range * ( (float) rand() /
- (float) RAND_MAX ) );
+ cur_arp_idx = (int)( range * ( (float) rand() / (float) RAND_MAX ) );
}
// now calculate final key for our arp-note
- const int sub_note_key = base_note_key + (cur_arp_idx /
- cur_chord_size ) *
- KeysPerOctave +
- chord_table[selected_arp][cur_arp_idx % cur_chord_size];
+ const int sub_note_key = base_note_key + (cur_arp_idx / cur_chord_size ) *
+ KeysPerOctave + chord_table[selected_arp][cur_arp_idx % cur_chord_size];
// range-checking
if( sub_note_key >= NumKeys ||
sub_note_key < 0 ||
- engine::mixer()->criticalXRuns() )
+ engine::mixer()->criticalXRuns() )
{
continue;
}
@@ -477,34 +468,20 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )
}
// create new arp-note
- note new_note( MidiTime( 0 ), MidiTime( 0 ),
- sub_note_key,
- (volume_t)
- qRound( _n->getVolume() * vol_level ),
- _n->getPanning(), _n->detuning() );
// create sub-note-play-handle, only ptr to note is different
// and is_arp_note=true
new NotePlayHandle( _n->instrumentTrack(),
- ( ( m_arpModeModel.value() != FreeMode ) ?
- cnphv.first()->offset() :
- _n->offset() ) +
- frames_processed,
- gated_frames,
- new_note,
- _n, true );
+ ( ( m_arpModeModel.value() != FreeMode ) ? cnphv.first()->offset() : _n->offset() ) + frames_processed,
+ gated_frames,
+ note( MidiTime( 0 ), MidiTime( 0 ), sub_note_key, (volume_t) qRound( _n->getVolume() * vol_level ),
+ _n->getPanning(), _n->detuning() ),
+ _n, -1, NotePlayHandle::OriginArpeggio );
// update counters
frames_processed += arp_frames;
cur_frame += arp_frames;
}
-
- // make sure, note is handled as arp-base-note, even if we didn't add a
- // sub-note so far
- if( m_arpModeModel.value() != FreeMode )
- {
- _n->setPartOfArpeggio( true );
- }
}
diff --git a/src/core/InstrumentSoundShaping.cpp b/src/core/InstrumentSoundShaping.cpp
index 7e2f597..cc1da11 100644
--- a/src/core/InstrumentSoundShaping.cpp
+++ b/src/core/InstrumentSoundShaping.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -315,23 +315,19 @@ f_cnt_t InstrumentSoundShaping::envFrames( const bool _only_vol ) const
f_cnt_t InstrumentSoundShaping::releaseFrames() const
{
- f_cnt_t ret_val = m_envLfoParameters[Volume]->isUsed() ?
- m_envLfoParameters[Volume]->releaseFrames() : 0;
- if( m_instrumentTrack->instrument() &&
- m_instrumentTrack->instrument()->desiredReleaseFrames() > ret_val )
+ if( m_envLfoParameters[Volume]->isUsed() )
{
- ret_val = m_instrumentTrack->instrument()->desiredReleaseFrames();
+ return m_envLfoParameters[Volume]->releaseFrames();
}
+ f_cnt_t ret_val = m_instrumentTrack->instrument()
+ ? m_instrumentTrack->instrument()->desiredReleaseFrames()
+ : 0;
- if( m_envLfoParameters[Volume]->isUsed() == false )
+ for( int i = Volume+1; i < NumTargets; ++i )
{
- for( int i = Volume+1; i < NumTargets; ++i )
+ if( m_envLfoParameters[i]->isUsed() )
{
- if( m_envLfoParameters[i]->isUsed() &&
- m_envLfoParameters[i]->releaseFrames() > ret_val )
- {
- ret_val = m_envLfoParameters[i]->releaseFrames();
- }
+ ret_val = qMax( ret_val, m_envLfoParameters[i]->releaseFrames() );
}
}
return ret_val;
diff --git a/src/core/JournallingObject.cpp b/src/core/JournallingObject.cpp
index b2a4bc5..90d5973 100644
--- a/src/core/JournallingObject.cpp
+++ b/src/core/JournallingObject.cpp
@@ -1,9 +1,9 @@
/*
* JournallingObject.cpp - implementation of journalling-object related stuff
*
- * Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -37,8 +37,6 @@
JournallingObject::JournallingObject() :
SerializingObject(),
m_id( engine::projectJournal()->allocID( this ) ),
- m_journalEntries(),
- m_currentJournalEntry( m_journalEntries.end() ),
m_journalling( true ),
m_journallingStateStack()
{
@@ -58,44 +56,33 @@ JournallingObject::~JournallingObject()
-void JournallingObject::undo()
+void JournallingObject::addJournalCheckPoint()
{
- if( m_journalEntries.empty() == true )
+ if( isJournalling() )
{
- return;
- }
-
- if( m_currentJournalEntry - 1 >= m_journalEntries.begin() )
- {
- undoStep( *--m_currentJournalEntry );
+ engine::projectJournal()->addJournalCheckPoint( this );
}
}
-void JournallingObject::redo()
+QDomElement JournallingObject::saveState( QDomDocument & _doc,
+ QDomElement & _parent )
{
- if( m_journalEntries.empty() == true )
+ if( isJournalling() )
{
- return;
- }
-
- if( m_currentJournalEntry < m_journalEntries.end() )
- {
- redoStep( *m_currentJournalEntry++ );
- }
-}
-
-
+ QDomElement _this = SerializingObject::saveState( _doc, _parent );
+ QDomElement journalNode = _doc.createElement( "journallingObject" );
+ journalNode.setAttribute( "id", id() );
+ journalNode.setAttribute( "metadata", true );
+ _this.appendChild( journalNode );
-QDomElement JournallingObject::saveState( QDomDocument & _doc,
- QDomElement & _parent )
-{
- QDomElement _this = SerializingObject::saveState( _doc, _parent );
- saveJournal( _doc, _this );
- return _this;
+ return _this;
+ } else {
+ return QDomElement();
+ }
}
@@ -113,7 +100,11 @@ void JournallingObject::restoreState( const QDomElement & _this )
{
if( node.isElement() && node.nodeName() == "journal" )
{
- loadJournal( node.toElement() );
+ const jo_id_t new_id = node.toElement().attribute( "id" ).toInt();
+ if( new_id )
+ {
+ changeID( new_id );
+ }
}
node = node.nextSibling();
}
@@ -124,21 +115,6 @@ void JournallingObject::restoreState( const QDomElement & _this )
-void JournallingObject::addJournalEntry( const JournalEntry & _je )
-{
- if( engine::projectJournal()->isJournalling() && isJournalling() )
- {
- m_journalEntries.erase( m_currentJournalEntry,
- m_journalEntries.end() );
- m_journalEntries.push_back( _je );
- m_currentJournalEntry = m_journalEntries.end();
- engine::projectJournal()->journalEntryAdded( id() );
- }
-}
-
-
-
-
void JournallingObject::changeID( jo_id_t _id )
{
if( id() != _id )
@@ -159,78 +135,10 @@ void JournallingObject::changeID( jo_id_t _id )
(int) _id, used_by.toUtf8().constData() );
return;
}
- engine::projectJournal()->forgetAboutID( id() );
+
engine::projectJournal()->reallocID( _id, this );
m_id = _id;
}
}
-
-
-void JournallingObject::saveJournal( QDomDocument & _doc,
- QDomElement & _parent )
-{
-/* // avoid creating empty journal-nodes
- if( m_journalEntries.size() == 0 )
- {
- return;
- }*/
- QDomElement journal_de = _doc.createElement( "journal" );
- journal_de.setAttribute( "id", id() );
- journal_de.setAttribute( "entries", m_journalEntries.size() );
- journal_de.setAttribute( "curentry", (int)( m_currentJournalEntry -
- m_journalEntries.begin() ) );
- journal_de.setAttribute( "metadata", true );
-
- for( JournalEntryVector::const_iterator it = m_journalEntries.begin();
- it != m_journalEntries.end(); ++it )
- {
- QDomElement je_de = _doc.createElement( "entry" );
- je_de.setAttribute( "pos", (int)( it -
- m_journalEntries.begin() ) );
- je_de.setAttribute( "actionid", it->actionID() );
- je_de.setAttribute( "data", base64::encode( it->data() ) );
- journal_de.appendChild( je_de );
- }
-
- _parent.appendChild( journal_de );
-}
-
-
-
-
-void JournallingObject::loadJournal( const QDomElement & _this )
-{
- clear();
-
- const jo_id_t new_id = _this.attribute( "id" ).toInt();
-
- if( new_id == 0 )
- {
- return;
- }
-
- changeID( new_id );
-
- m_journalEntries.resize( _this.attribute( "entries" ).toInt() );
-
- QDomNode node = _this.firstChild();
- while( !node.isNull() )
- {
- if( node.isElement() )
- {
- const QDomElement & je = node.toElement();
- m_journalEntries[je.attribute( "pos" ).toInt()] =
- JournalEntry(
- je.attribute( "actionid" ).toInt(),
- base64::decode( je.attribute( "data" ) ) );
- }
- node = node.nextSibling();
- }
-
- m_currentJournalEntry = m_journalEntries.begin() +
- _this.attribute( "curentry" ).toInt();
-}
-
-
diff --git a/src/core/LadspaControl.cpp b/src/core/LadspaControl.cpp
index 5f46961..6c2d02c 100644
--- a/src/core/LadspaControl.cpp
+++ b/src/core/LadspaControl.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -54,6 +54,8 @@ LadspaControl::LadspaControl( Model * _parent, port_desc_t * _port,
{
m_toggledModel.setValue( true );
}
+ // TODO: careful: we must prevent saved scales
+ m_toggledModel.setScaleLogarithmic( m_port->suggests_logscale );
break;
case INTEGER:
@@ -65,6 +67,8 @@ LadspaControl::LadspaControl( Model * _parent, port_desc_t * _port,
static_cast<int>( m_port->def ) );
connect( &m_knobModel, SIGNAL( dataChanged() ),
this, SLOT( knobChanged() ) );
+ // TODO: careful: we must prevent saved scales
+ m_knobModel.setScaleLogarithmic( m_port->suggests_logscale );
break;
case FLOATING:
@@ -72,19 +76,23 @@ LadspaControl::LadspaControl( Model * _parent, port_desc_t * _port,
( m_port->max - m_port->min )
/ ( m_port->name.toUpper() == "GAIN"
&& m_port->max == 10.0f ? 4000.0f :
- 400.0f ) );
+ ( m_port->suggests_logscale ? 8000.0f : 800.0f ) ) );
m_knobModel.setInitValue( m_port->def );
connect( &m_knobModel, SIGNAL( dataChanged() ),
this, SLOT( knobChanged() ) );
+ // TODO: careful: we must prevent saved scales
+ m_knobModel.setScaleLogarithmic( m_port->suggests_logscale );
break;
case TIME:
m_tempoSyncKnobModel.setRange( m_port->min, m_port->max,
( m_port->max -
- m_port->min ) / 400.0f );
+ m_port->min ) / 800.0f );
m_tempoSyncKnobModel.setInitValue( m_port->def );
connect( &m_tempoSyncKnobModel, SIGNAL( dataChanged() ),
this, SLOT( tempoKnobChanged() ) );
+ // TODO: careful: we must prevent saved scales
+ m_tempoSyncKnobModel.setScaleLogarithmic( m_port->suggests_logscale );
break;
default:
diff --git a/src/core/LfoController.cpp b/src/core/LfoController.cpp
index 30f2b73..359c801 100644
--- a/src/core/LfoController.cpp
+++ b/src/core/LfoController.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/MemoryHelper.cpp b/src/core/MemoryHelper.cpp
new file mode 100644
index 0000000..afe0ac3
--- /dev/null
+++ b/src/core/MemoryHelper.cpp
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2014 Simon Symeonidis <lethaljellybean/at/gmail/com>
+ * Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdlib.h>
+
+#include "lmms_basics.h"
+#include "MemoryHelper.h"
+
+/**
+ * Allocate a number of bytes and return them.
+ * @param byteNum is the number of bytes
+ */
+void* MemoryHelper::alignedMalloc( int byteNum )
+{
+ char *ptr, *ptr2, *aligned_ptr;
+ int align_mask = ALIGN_SIZE - 1;
+
+ ptr = static_cast<char*>( malloc( byteNum + ALIGN_SIZE + sizeof( int ) ) );
+
+ if( ptr == NULL ) return NULL;
+
+ ptr2 = ptr + sizeof( int );
+ aligned_ptr = ptr2 + ( ALIGN_SIZE - ( ( size_t ) ptr2 & align_mask ) );
+
+ ptr2 = aligned_ptr - sizeof( int );
+ *( ( int* ) ptr2 ) = ( int )( aligned_ptr - ptr );
+
+ return aligned_ptr;
+}
+
+
+/**
+ * Free an aligned buffer
+ * @param _buffer is the buffer to free
+ */
+void MemoryHelper::alignedFree( void* _buffer )
+{
+ if( _buffer )
+ {
+ int *ptr2 = static_cast<int*>( _buffer ) - 1;
+ _buffer = static_cast<char*>( _buffer ) - *ptr2;
+ free( _buffer );
+ }
+}
+
diff --git a/src/core/MeterModel.cpp b/src/core/MeterModel.cpp
index f4d97d7..95e3ffc 100644
--- a/src/core/MeterModel.cpp
+++ b/src/core/MeterModel.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/MixHelpers.cpp b/src/core/MixHelpers.cpp
index 76e00ca..f314557 100644
--- a/src/core/MixHelpers.cpp
+++ b/src/core/MixHelpers.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,8 +22,7 @@
*
*/
-#include <math.h>
-
+#include "lmms_math.h"
#include "MixHelpers.h"
@@ -106,6 +105,26 @@ void addMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, in
+struct AddSanitizedMultipliedOp
+{
+ AddSanitizedMultipliedOp( float coeff ) : m_coeff( coeff ) { }
+
+ void operator()( sampleFrame& dst, const sampleFrame& src ) const
+ {
+ dst[0] += ( isinff( src[0] ) || isnanf( src[0] ) ) ? 0.0f : src[0] * m_coeff;
+ dst[1] += ( isinff( src[1] ) || isnanf( src[1] ) ) ? 0.0f : src[1] * m_coeff;
+ }
+
+ const float m_coeff;
+};
+
+void addSanitizedMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames )
+{
+ run<>( dst, src, frames, AddSanitizedMultipliedOp(coeffSrc) );
+}
+
+
+
struct AddMultipliedStereoOp
{
AddMultipliedStereoOp( float coeffLeft, float coeffRight )
diff --git a/src/core/Mixer.cpp b/src/core/Mixer.cpp
index d922f63..1868d9a 100644
--- a/src/core/Mixer.cpp
+++ b/src/core/Mixer.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -27,6 +27,7 @@
#include "Mixer.h"
#include "FxMixer.h"
#include "MixHelpers.h"
+#include "MixerWorkerThread.h"
#include "song.h"
#include "templates.h"
#include "EnvelopeAndLfoParameters.h"
@@ -37,7 +38,6 @@
#include "config_mgr.h"
#include "SamplePlayHandle.h"
#include "PianoRoll.h"
-#include "MicroTimer.h"
#include "atomic_int.h"
// platform-specific audio-interface-classes
@@ -56,242 +56,7 @@
#include "MidiWinMM.h"
#include "MidiDummy.h"
-
-static QVector<fx_ch_t> __fx_channel_jobs( NumFxChannels );
-
-
-
-static void aligned_free( void * _buf )
-{
- if( _buf != NULL )
- {
- int *ptr2=(int *)_buf - 1;
- _buf = (char *)_buf- *ptr2;
- free(_buf);
- }
-}
-
-static void * aligned_malloc( int _bytes )
-{
- char *ptr,*ptr2,*aligned_ptr;
- int align_mask = ALIGN_SIZE- 1;
- ptr=(char *)malloc(_bytes +ALIGN_SIZE+ sizeof(int));
- if(ptr==NULL) return(NULL);
-
- ptr2 = ptr + sizeof(int);
- aligned_ptr = ptr2 + (ALIGN_SIZE- ((size_t)ptr2 & align_mask));
-
-
- ptr2 = aligned_ptr - sizeof(int);
- *((int *)ptr2)=(int)(aligned_ptr - ptr);
-
- return(aligned_ptr);
-}
-
-
-
-class MixerWorkerThread : public QThread
-{
-public:
- enum JobTypes
- {
- InvalidJob,
- PlayHandle,
- AudioPortEffects,
- EffectChannel,
- NumJobTypes
- } ;
-
- struct JobQueueItem
- {
- JobQueueItem() :
- type( InvalidJob ),
- job( NULL ),
- param( 0 ),
- done( false )
- {
- }
- JobQueueItem( JobTypes _type, void * _job, int _param = 0 ) :
- type( _type ),
- job( _job ),
- param( _param ),
- done( false )
- {
- }
-
- JobTypes type;
- void * job;
- int param;
-
- AtomicInt done;
- } ;
-
-
- struct JobQueue
- {
-#define JOB_QUEUE_SIZE 1024
- JobQueue() :
- queueSize( 0 )
- {
- }
-
- JobQueueItem items[JOB_QUEUE_SIZE];
- int queueSize;
- AtomicInt itemsDone;
- } ;
-
- static JobQueue s_jobQueue;
-
- MixerWorkerThread( int _worker_num, Mixer* mixer ) :
- QThread( mixer ),
- m_workingBuf( (sampleFrame *) aligned_malloc( mixer->framesPerPeriod() * sizeof( sampleFrame ) ) ),
- m_workerNum( _worker_num ),
- m_quit( false ),
- m_mixer( mixer ),
- m_queueReadyWaitCond( &m_mixer->m_queueReadyWaitCond )
- {
- }
-
- virtual ~MixerWorkerThread()
- {
- aligned_free( m_workingBuf );
- }
-
- virtual void quit()
- {
- m_quit = true;
- }
-
- void processJobQueue();
-
- int workerNum() const
- {
- return m_workerNum;
- }
-
-
-private:
- virtual void run()
- {
-#if 0
-#ifdef LMMS_BUILD_LINUX
-#ifdef LMMS_HAVE_SCHED_H
- cpu_set_t mask;
- CPU_ZERO( &mask );
- CPU_SET( m_workerNum, &mask );
- sched_setaffinity( 0, sizeof( mask ), &mask );
-#endif
-#endif
-#endif
- QMutex m;
- while( m_quit == false )
- {
- m.lock();
- m_queueReadyWaitCond->wait( &m );
- processJobQueue();
- m.unlock();
- }
- }
-
- sampleFrame * m_workingBuf;
- int m_workerNum;
- volatile bool m_quit;
- Mixer* m_mixer;
- QWaitCondition * m_queueReadyWaitCond;
-
-} ;
-
-
-MixerWorkerThread::JobQueue MixerWorkerThread::s_jobQueue;
-
-
-
-void MixerWorkerThread::processJobQueue()
-{
- for( int i = 0; i < s_jobQueue.queueSize; ++i )
- {
- JobQueueItem * it = &s_jobQueue.items[i];
- if( it->done.fetchAndStoreOrdered( 1 ) == 0 )
- {
- switch( it->type )
- {
- case PlayHandle:
- ( (::PlayHandle *) it->job )->play( m_workingBuf );
- break;
- case AudioPortEffects:
- {
- AudioPort * a = (AudioPort *) it->job;
- const bool me = a->processEffects();
- if( me || a->m_bufferUsage != AudioPort::NoUsage )
- {
- engine::fxMixer()->mixToChannel( a->firstBuffer(), a->nextFxChannel() );
- a->nextPeriod();
- }
- }
- break;
- case EffectChannel:
- engine::fxMixer()->processChannel( (fx_ch_t) it->param );
- break;
- default:
- break;
- }
- s_jobQueue.itemsDone.fetchAndAddOrdered( 1 );
- }
- }
-}
-
-#define FILL_JOB_QUEUE_BEGIN(_vec_type,_vec,_condition) \
- MixerWorkerThread::s_jobQueue.queueSize = 0; \
- MixerWorkerThread::s_jobQueue.itemsDone = 0; \
- for( _vec_type::Iterator it = _vec.begin(); \
- it != _vec.end(); ++it ) \
- { \
- if( _condition ) \
- {
-
-#define FILL_JOB_QUEUE_END() \
- ++MixerWorkerThread::s_jobQueue.queueSize; \
- } \
- }
-
-#define FILL_JOB_QUEUE(_vec_type,_vec,_job_type,_condition) \
- FILL_JOB_QUEUE_BEGIN(_vec_type,_vec,_condition) \
- MixerWorkerThread::s_jobQueue.items \
- [MixerWorkerThread::s_jobQueue.queueSize] = \
- MixerWorkerThread::JobQueueItem( _job_type, \
- (void *) *it ); \
- FILL_JOB_QUEUE_END()
-
-#define FILL_JOB_QUEUE_PARAM(_vec_type,_vec,_job_type,_condition) \
- FILL_JOB_QUEUE_BEGIN(_vec_type,_vec,_condition) \
- MixerWorkerThread::s_jobQueue.items \
- [MixerWorkerThread::s_jobQueue.queueSize] = \
- MixerWorkerThread::JobQueueItem( _job_type, \
- NULL, *it ); \
- FILL_JOB_QUEUE_END()
-
-#define START_JOBS() \
- m_queueReadyWaitCond.wakeAll();
-
-// define a pause instruction for spinlock-loop - merely useful on
-// HyperThreading systems with just one physical core (e.g. Intel Atom)
-#ifdef LMMS_HOST_X86
-#define SPINLOCK_PAUSE() asm( "pause" )
-#else
-#ifdef LMMS_HOST_X86_64
-#define SPINLOCK_PAUSE() asm( "pause" )
-#else
-#define SPINLOCK_PAUSE()
-#endif
-#endif
-
-#define WAIT_FOR_JOBS() \
- m_workers[m_numWorkers]->processJobQueue(); \
- while( MixerWorkerThread::s_jobQueue.itemsDone < \
- MixerWorkerThread::s_jobQueue.queueSize ) \
- { \
- SPINLOCK_PAUSE(); \
- } \
+#include "MemoryHelper.h"
@@ -303,7 +68,6 @@ Mixer::Mixer() :
m_inputBufferWrite( 1 ),
m_readBuf( NULL ),
m_writeBuf( NULL ),
- m_cpuLoad( 0 ),
m_workers(),
m_numWorkers( QThread::idealThreadCount()-1 ),
m_queueReadyWaitCond(),
@@ -311,7 +75,8 @@ Mixer::Mixer() :
m_masterGain( 1.0f ),
m_audioDev( NULL ),
m_oldAudioDev( NULL ),
- m_globalMutex( QMutex::Recursive )
+ m_globalMutex( QMutex::Recursive ),
+ m_profiler()
{
for( int i = 0; i < 2; ++i )
{
@@ -321,11 +86,6 @@ Mixer::Mixer() :
clearAudioBuffer( m_inputBuffer[i], m_inputBufferSize[i] );
}
- for( int i = 1; i < NumFxChannels+1; ++i )
- {
- __fx_channel_jobs[i-1] = (fx_ch_t) i;
- }
-
// just rendering?
if( !engine::hasGUI() )
{
@@ -358,12 +118,12 @@ Mixer::Mixer() :
m_fifo = new fifo( 1 );
}
- m_workingBuf = (sampleFrame*) aligned_malloc( m_framesPerPeriod *
+ m_workingBuf = (sampleFrame*) MemoryHelper::alignedMalloc( m_framesPerPeriod *
sizeof( sampleFrame ) );
for( int i = 0; i < 3; i++ )
{
m_readBuf = (surroundSampleFrame*)
- aligned_malloc( m_framesPerPeriod *
+ MemoryHelper::alignedMalloc( m_framesPerPeriod *
sizeof( surroundSampleFrame ) );
clearAudioBuffer( m_readBuf, m_framesPerPeriod );
@@ -372,7 +132,7 @@ Mixer::Mixer() :
for( int i = 0; i < m_numWorkers+1; ++i )
{
- MixerWorkerThread * wt = new MixerWorkerThread( i, this );
+ MixerWorkerThread * wt = new MixerWorkerThread( this );
if( i < m_numWorkers )
{
wt->start( QThread::TimeCriticalPriority );
@@ -390,14 +150,13 @@ Mixer::Mixer() :
Mixer::~Mixer()
{
- // distribute an empty job-queue so that worker-threads
- // get out of their processing-loop
- MixerWorkerThread::s_jobQueue.queueSize = 0;
for( int w = 0; w < m_numWorkers; ++w )
{
m_workers[w]->quit();
}
- START_JOBS();
+
+ MixerWorkerThread::startAndWaitForJobs();
+
for( int w = 0; w < m_numWorkers; ++w )
{
m_workers[w]->wait( 500 );
@@ -414,10 +173,10 @@ Mixer::~Mixer()
for( int i = 0; i < 3; i++ )
{
- aligned_free( m_bufferPool[i] );
+ MemoryHelper::alignedFree( m_bufferPool[i] );
}
- aligned_free( m_workingBuf );
+ MemoryHelper::alignedFree( m_workingBuf );
for( int i = 0; i < 2; ++i )
{
@@ -517,7 +276,7 @@ sample_rate_t Mixer::processingSampleRate() const
bool Mixer::criticalXRuns() const
{
- return m_cpuLoad >= 99 && engine::getSong()->isExporting() == false;
+ return cpuLoad() >= 99 && engine::getSong()->isExporting() == false;
}
@@ -555,7 +314,8 @@ void Mixer::pushInputFrames( sampleFrame * _ab, const f_cnt_t _frames )
const surroundSampleFrame * Mixer::renderNextBuffer()
{
- MicroTimer timer;
+ m_profiler.startPeriod();
+
static song::playPos last_metro_pos = -1;
song::playPos p = engine::getSong()->getPlayPos(
@@ -617,9 +377,8 @@ const surroundSampleFrame * Mixer::renderNextBuffer()
// STAGE 1: run and render all play handles
- FILL_JOB_QUEUE(PlayHandleList,m_playHandles,MixerWorkerThread::PlayHandle, !( *it )->isFinished());
- START_JOBS();
- WAIT_FOR_JOBS();
+ MixerWorkerThread::fillJobQueue<PlayHandleList>( m_playHandles );
+ MixerWorkerThread::startAndWaitForJobs();
// removed all play handles which are done
for( PlayHandleList::Iterator it = m_playHandles.begin();
@@ -644,20 +403,11 @@ const surroundSampleFrame * Mixer::renderNextBuffer()
// STAGE 2: process effects of all instrument- and sampletracks
- FILL_JOB_QUEUE(QVector<AudioPort*>,m_audioPorts,
- MixerWorkerThread::AudioPortEffects,1);
- START_JOBS();
- WAIT_FOR_JOBS();
+ MixerWorkerThread::fillJobQueue<QVector<AudioPort *> >( m_audioPorts );
+ MixerWorkerThread::startAndWaitForJobs();
- // STAGE 3: process effects in FX mixer
- FILL_JOB_QUEUE_PARAM(QVector<fx_ch_t>,__fx_channel_jobs,
- MixerWorkerThread::EffectChannel,1);
- START_JOBS();
- WAIT_FOR_JOBS();
-
-
- // STAGE 4: do master mix in FX mixer
+ // STAGE 3: do master mix in FX mixer
engine::fxMixer()->masterMix( m_writeBuf );
unlock();
@@ -669,10 +419,7 @@ const surroundSampleFrame * Mixer::renderNextBuffer()
EnvelopeAndLfoParameters::instances()->trigger();
Controller::triggerFrameCounter();
- const float new_cpu_load = timer.elapsed() / 10000.0f *
- processingSampleRate() / m_framesPerPeriod;
- m_cpuLoad = tLimit( (int) ( new_cpu_load * 0.1f + m_cpuLoad * 0.9f ), 0,
- 100 );
+ m_profiler.finishPeriod( processingSampleRate(), m_framesPerPeriod );
return m_readBuf;
}
@@ -768,14 +515,7 @@ float Mixer::peakValueLeft( sampleFrame * _ab, const f_cnt_t _frames )
float p = 0.0f;
for( f_cnt_t f = 0; f < _frames; ++f )
{
- if( _ab[f][0] > p )
- {
- p = _ab[f][0];
- }
- else if( -_ab[f][0] > p )
- {
- p = -_ab[f][0];
- }
+ p = qMax( p, qAbs( _ab[f][0] ) );
}
return p;
}
@@ -788,14 +528,7 @@ float Mixer::peakValueRight( sampleFrame * _ab, const f_cnt_t _frames )
float p = 0.0f;
for( f_cnt_t f = 0; f < _frames; ++f )
{
- if( _ab[f][1] > p )
- {
- p = _ab[f][1];
- }
- else if( -_ab[f][1] > p )
- {
- p = -_ab[f][1];
- }
+ p = qMax( p, qAbs( _ab[f][1] ) );
}
return p;
}
@@ -936,13 +669,13 @@ void Mixer::removePlayHandle( PlayHandle * _ph )
-void Mixer::removePlayHandles( track * _track )
+void Mixer::removePlayHandles( track * _track, bool removeIPHs )
{
lock();
PlayHandleList::Iterator it = m_playHandles.begin();
while( it != m_playHandles.end() )
{
- if( ( *it )->isFromTrack( _track ) )
+ if( ( *it )->isFromTrack( _track ) && ( removeIPHs || ( *it )->type() != PlayHandle::TypeInstrumentPlayHandle ) )
{
delete *it;
it = m_playHandles.erase( it );
@@ -1184,6 +917,16 @@ void Mixer::fifoWriter::finish()
void Mixer::fifoWriter::run()
{
+// set denormal protection for this thread
+#ifdef __SSE3__
+/* DAZ flag */
+ _MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON );
+#endif
+#ifdef __SSE__
+/* FTZ flag */
+ _MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON );
+#endif
+
#if 0
#ifdef LMMS_BUILD_LINUX
#ifdef LMMS_HAVE_SCHED_H
diff --git a/src/core/MixerProfiler.cpp b/src/core/MixerProfiler.cpp
new file mode 100644
index 0000000..a081cae
--- /dev/null
+++ b/src/core/MixerProfiler.cpp
@@ -0,0 +1,63 @@
+/*
+ * MixerProfiler.cpp - class for profiling performance of Mixer
+ *
+ * Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "MixerProfiler.h"
+
+
+MixerProfiler::MixerProfiler() :
+ m_periodTimer(),
+ m_cpuLoad( 0 ),
+ m_outputFile()
+{
+}
+
+
+
+MixerProfiler::~MixerProfiler()
+{
+}
+
+
+void MixerProfiler::finishPeriod( sample_rate_t sampleRate, fpp_t framesPerPeriod )
+{
+ int periodElapsed = m_periodTimer.elapsed();
+
+ const float newCpuLoad = periodElapsed / 10000.0f * sampleRate / framesPerPeriod;
+ m_cpuLoad = qBound<int>( 0, ( newCpuLoad * 0.1f + m_cpuLoad * 0.9f ), 100 );
+
+ if( m_outputFile.isOpen() )
+ {
+ m_outputFile.write( QString( "%1\n" ).arg( periodElapsed ).toLatin1() );
+ }
+}
+
+
+
+void MixerProfiler::setOutputFile( const QString& outputFile )
+{
+ m_outputFile.close();
+ m_outputFile.setFileName( outputFile );
+ m_outputFile.open( QFile::WriteOnly | QFile::Truncate );
+}
+
diff --git a/src/core/MixerWorkerThread.cpp b/src/core/MixerWorkerThread.cpp
new file mode 100644
index 0000000..c82f9e0
--- /dev/null
+++ b/src/core/MixerWorkerThread.cpp
@@ -0,0 +1,174 @@
+/*
+ * MixerWorkerThread.cpp - implementation of MixerWorkerThread
+ *
+ * Copyright (c) 2009-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "MixerWorkerThread.h"
+#include "engine.h"
+
+
+MixerWorkerThread::JobQueue MixerWorkerThread::globalJobQueue;
+QWaitCondition * MixerWorkerThread::queueReadyWaitCond = NULL;
+QList<MixerWorkerThread *> MixerWorkerThread::workerThreads;
+
+
+
+// implementation of internal JobQueue
+void MixerWorkerThread::JobQueue::reset( OperationMode _opMode )
+{
+ m_queueSize = 0;
+ m_itemsDone = 0;
+ m_opMode = _opMode;
+}
+
+
+
+
+void MixerWorkerThread::JobQueue::addJob( ThreadableJob * _job )
+{
+ if( _job->requiresProcessing() )
+ {
+ // update job state
+ _job->queue();
+ // actually queue the job via atomic operations
+ m_items[m_queueSize.fetchAndAddOrdered(1)] = _job;
+ }
+}
+
+
+
+void MixerWorkerThread::JobQueue::run( sampleFrame * _buffer )
+{
+ bool processedJob = true;
+ while( processedJob && (int) m_itemsDone < (int) m_queueSize )
+ {
+ processedJob = false;
+ for( int i = 0; i < m_queueSize; ++i )
+ {
+ ThreadableJob * job = m_items[i].fetchAndStoreOrdered( NULL );
+ if( job )
+ {
+ job->process( _buffer );
+ processedJob = true;
+ m_itemsDone.fetchAndAddOrdered( 1 );
+ }
+ }
+ // always exit loop if we're not in dynamic mode
+ processedJob = processedJob && ( m_opMode == Dynamic );
+ }
+}
+
+
+
+
+void MixerWorkerThread::JobQueue::wait()
+{
+ while( (int) m_itemsDone < (int) m_queueSize )
+ {
+#if defined(LMMS_HOST_X86) || defined(LMMS_HOST_X86_64)
+ asm( "pause" );
+#endif
+ }
+}
+
+
+
+
+
+// implementation of worker threads
+
+MixerWorkerThread::MixerWorkerThread( Mixer* mixer ) :
+ QThread( mixer ),
+ m_workingBuf( new sampleFrame[mixer->framesPerPeriod()] ),
+ m_quit( false )
+{
+ // initialize global static data
+ if( queueReadyWaitCond == NULL )
+ {
+ queueReadyWaitCond = new QWaitCondition;
+ }
+
+ // keep track of all instantiated worker threads - this is used for
+ // processing the last worker thread "inline", see comments in
+ // MixerWorkerThread::startAndWaitForJobs() for details
+ workerThreads << this;
+
+ resetJobQueue();
+}
+
+
+
+
+MixerWorkerThread::~MixerWorkerThread()
+{
+ delete[] m_workingBuf;
+
+ workerThreads.removeAll( this );
+}
+
+
+
+
+void MixerWorkerThread::quit()
+{
+ m_quit = true;
+ resetJobQueue();
+}
+
+
+
+
+void MixerWorkerThread::startAndWaitForJobs()
+{
+ queueReadyWaitCond->wakeAll();
+ // The last worker-thread is never started. Instead it's processed "inline"
+ // i.e. within the global Mixer thread. This way we can reduce latencies
+ // that otherwise would be caused by synchronizing with another thread.
+ globalJobQueue.run( workerThreads.last()->m_workingBuf );
+ globalJobQueue.wait();
+}
+
+
+
+
+void MixerWorkerThread::run()
+{
+// set denormal protection for this thread
+#ifdef __SSE3__
+/* DAZ flag */
+ _MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON );
+#endif
+#ifdef __SSE__
+/* FTZ flag */
+ _MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON );
+#endif
+ QMutex m;
+ while( m_quit == false )
+ {
+ m.lock();
+ queueReadyWaitCond->wait( &m );
+ globalJobQueue.run( m_workingBuf );
+ m.unlock();
+ }
+}
+
+
diff --git a/src/core/Model.cpp b/src/core/Model.cpp
index db909ec..425aa4e 100644
--- a/src/core/Model.cpp
+++ b/src/core/Model.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/NotePlayHandle.cpp b/src/core/NotePlayHandle.cpp
index fa5f309..ee1d5e9 100644
--- a/src/core/NotePlayHandle.cpp
+++ b/src/core/NotePlayHandle.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -49,7 +49,6 @@ NotePlayHandle::NotePlayHandle( InstrumentTrack* instrumentTrack,
const f_cnt_t _frames,
const note& n,
NotePlayHandle *parent,
- const bool _part_of_arp,
int midiEventChannel,
Origin origin ) :
PlayHandle( TypeNotePlayHandle, _offset ),
@@ -62,13 +61,14 @@ NotePlayHandle::NotePlayHandle( InstrumentTrack* instrumentTrack,
m_framesBeforeRelease( 0 ),
m_releaseFramesToDo( 0 ),
m_releaseFramesDone( 0 ),
+ m_scheduledNoteOff( -1 ),
m_released( false ),
- m_topNote( parent == NULL ),
- m_partOfArpeggio( _part_of_arp ),
+ m_hasParent( parent != NULL ),
+ m_hadChildren( false ),
m_muted( false ),
m_bbTrack( NULL ),
m_origTempo( engine::getSong()->getTempo() ),
- m_origBaseNote( instrumentTrack->baseNoteModel()->value() ),
+ m_origBaseNote( instrumentTrack->baseNote() ),
m_frequency( 0 ),
m_unpitchedFrequency( 0 ),
m_baseDetuning( NULL ),
@@ -76,7 +76,7 @@ NotePlayHandle::NotePlayHandle( InstrumentTrack* instrumentTrack,
m_midiChannel( midiEventChannel >= 0 ? midiEventChannel : instrumentTrack->midiPort()->realOutputChannel() ),
m_origin( origin )
{
- if( isTopNote() )
+ if( hasParent() == false )
{
m_baseDetuning = new BaseDetuning( detuning() );
m_instrumentTrack->m_processHandles.push_back( this );
@@ -86,10 +86,7 @@ NotePlayHandle::NotePlayHandle( InstrumentTrack* instrumentTrack,
m_baseDetuning = parent->m_baseDetuning;
parent->m_subNotes.push_back( this );
- // if there was an arp-note added and parent is a base-note
- // we set arp-note-flag for indicating that parent is an
- // arpeggio-base-note
- parent->m_partOfArpeggio = isPartOfArpeggio() && parent->isTopNote();
+ parent->m_hadChildren = true;
m_bbTrack = parent->m_bbTrack;
}
@@ -104,14 +101,15 @@ NotePlayHandle::NotePlayHandle( InstrumentTrack* instrumentTrack,
m_instrumentTrack->midiNoteOn( *this );
}
- if( !isTopNote() || !instrumentTrack->isArpeggioEnabled() )
+ if( hasParent() || ! m_instrumentTrack->isArpeggioEnabled() )
{
const int baseVelocity = m_instrumentTrack->midiPort()->baseVelocity();
// send MidiNoteOn event
m_instrumentTrack->processOutEvent(
MidiEvent( MidiNoteOn, midiChannel(), midiKey(), midiVelocity( baseVelocity ) ),
- MidiTime::fromFrames( offset(), engine::framesPerTick() ) );
+ MidiTime::fromFrames( offset(), engine::framesPerTick() ),
+ offset() );
}
}
@@ -121,8 +119,15 @@ NotePlayHandle::NotePlayHandle( InstrumentTrack* instrumentTrack,
NotePlayHandle::~NotePlayHandle()
{
noteOff( 0 );
-
- if( isTopNote() )
+ if( m_scheduledNoteOff >= 0 ) // ensure that scheduled noteoffs get triggered if somehow the nph got destructed prematurely
+ {
+ m_instrumentTrack->processOutEvent(
+ MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ),
+ MidiTime::fromFrames( m_scheduledNoteOff, engine::framesPerTick() ),
+ m_scheduledNoteOff );
+ }
+
+ if( hasParent() == false )
{
delete m_baseDetuning;
m_instrumentTrack->m_processHandles.removeAll( this );
@@ -177,7 +182,7 @@ void NotePlayHandle::setPanning( panning_t panning )
int NotePlayHandle::midiKey() const
{
- return key() - m_origBaseNote + instrumentTrack()->baseNoteModel()->value();
+ return key() - m_origBaseNote + instrumentTrack()->baseNote();
}
@@ -185,6 +190,22 @@ int NotePlayHandle::midiKey() const
void NotePlayHandle::play( sampleFrame * _working_buffer )
{
+ if( m_scheduledNoteOff >= 0 ) // always trigger scheduled noteoffs, because they're only scheduled if the note is released
+ {
+ if( m_scheduledNoteOff < engine::mixer()->framesPerPeriod() )
+ {
+ m_instrumentTrack->processOutEvent(
+ MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ),
+ MidiTime::fromFrames( m_scheduledNoteOff, engine::framesPerTick() ),
+ m_scheduledNoteOff );
+ m_scheduledNoteOff = -1;
+ }
+ else
+ {
+ m_scheduledNoteOff -= engine::mixer()->framesPerPeriod();
+ }
+ }
+
if( m_muted )
{
return;
@@ -192,7 +213,7 @@ void NotePlayHandle::play( sampleFrame * _working_buffer )
if( m_released == false &&
instrumentTrack()->isSustainPedalPressed() == false &&
- m_totalFramesPlayed + engine::mixer()->framesPerPeriod() >= m_frames )
+ m_totalFramesPlayed + engine::mixer()->framesPerPeriod() > m_frames )
{
noteOff( m_frames - m_totalFramesPlayed );
}
@@ -209,12 +230,13 @@ void NotePlayHandle::play( sampleFrame * _working_buffer )
if( m_released )
{
f_cnt_t todo = engine::mixer()->framesPerPeriod();
+
// if this note is base-note for arpeggio, always set
// m_releaseFramesToDo to bigger value than m_releaseFramesDone
// because we do not allow NotePlayHandle::isFinished() to be true
// until all sub-notes are completely played and no new ones
// are inserted by arpAndChordsTabWidget::processNote()
- if( isArpeggioBaseNote() )
+ if( ! m_subNotes.isEmpty() )
{
m_releaseFramesToDo = m_releaseFramesDone + 2 * engine::mixer()->framesPerPeriod();
}
@@ -274,16 +296,6 @@ void NotePlayHandle::play( sampleFrame * _working_buffer )
}
}
- // if this note is a base-note and there're no more sub-notes left we
- // can set m_releaseFramesDone to m_releaseFramesToDo so that
- // NotePlayHandle::isFinished() returns true and also this base-note is
- // removed from mixer's active note vector
- if( m_released && isArpeggioBaseNote() && m_subNotes.size() == 0 )
- {
- m_releaseFramesDone = m_releaseFramesToDo;
- m_frames = 0;
- }
-
// update internal data
m_totalFramesPlayed += engine::mixer()->framesPerPeriod();
}
@@ -301,9 +313,9 @@ f_cnt_t NotePlayHandle::framesLeft() const
{
return m_framesBeforeRelease;
}
- else if( m_released && actualReleaseFramesToDo() >= m_releaseFramesDone )
+ else if( m_released )
{
- return m_framesBeforeRelease + actualReleaseFramesToDo() - m_releaseFramesDone;
+ return m_framesBeforeRelease + m_releaseFramesToDo - m_releaseFramesDone;
}
return m_frames+actualReleaseFramesToDo()-m_totalFramesPlayed;
}
@@ -342,14 +354,23 @@ void NotePlayHandle::noteOff( const f_cnt_t _s )
// then set some variables indicating release-state
m_framesBeforeRelease = _s;
- m_releaseFramesToDo = qMax<f_cnt_t>( 0, m_instrumentTrack->m_soundShaping.releaseFrames() );
+ m_releaseFramesToDo = qMax<f_cnt_t>( 0, actualReleaseFramesToDo() );
- if( !isTopNote() || !instrumentTrack()->isArpeggioEnabled() )
+ if( hasParent() || ! m_instrumentTrack->isArpeggioEnabled() )
{
// send MidiNoteOff event
- m_instrumentTrack->processOutEvent(
- MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ),
- MidiTime::fromFrames( m_framesBeforeRelease, engine::framesPerTick() ) );
+ f_cnt_t realOffset = offset() + _s; // get actual frameoffset of release, in global time
+ if( realOffset < engine::mixer()->framesPerPeriod() ) // if release happens during this period, trigger midievent
+ {
+ m_instrumentTrack->processOutEvent(
+ MidiEvent( MidiNoteOff, midiChannel(), midiKey(), 0 ),
+ MidiTime::fromFrames( realOffset, engine::framesPerTick() ),
+ realOffset );
+ }
+ else // if release flows over to next period, use m_scheduledNoteOff to trigger it later
+ {
+ m_scheduledNoteOff = realOffset - engine::mixer()->framesPerPeriod();
+ }
}
// inform attached components about MIDI finished (used for recording in Piano Roll)
@@ -367,8 +388,7 @@ void NotePlayHandle::noteOff( const f_cnt_t _s )
f_cnt_t NotePlayHandle::actualReleaseFramesToDo() const
{
- return m_instrumentTrack->m_soundShaping.releaseFrames(/*
- isArpeggioBaseNote()*/ );
+ return m_instrumentTrack->m_soundShaping.releaseFrames();
}
@@ -395,19 +415,10 @@ float NotePlayHandle::volumeLevel( const f_cnt_t _frame )
-bool NotePlayHandle::isArpeggioBaseNote() const
-{
- return isTopNote() && ( m_partOfArpeggio || m_instrumentTrack->isArpeggioEnabled() );
-}
-
-
-
-
void NotePlayHandle::mute()
{
// mute all sub-notes
- for( NotePlayHandleList::Iterator it = m_subNotes.begin();
- it != m_subNotes.end(); ++it )
+ for( NotePlayHandleList::Iterator it = m_subNotes.begin(); it != m_subNotes.end(); ++it )
{
( *it )->mute();
}
@@ -471,10 +482,11 @@ bool NotePlayHandle::operator==( const NotePlayHandle & _nph ) const
offset() == _nph.offset() &&
m_totalFramesPlayed == _nph.m_totalFramesPlayed &&
m_released == _nph.m_released &&
- m_topNote == _nph.m_topNote &&
- m_partOfArpeggio == _nph.m_partOfArpeggio &&
+ m_hasParent == _nph.m_hasParent &&
m_origBaseNote == _nph.m_origBaseNote &&
- m_muted == _nph.m_muted;
+ m_muted == _nph.m_muted &&
+ m_midiChannel == _nph.m_midiChannel &&
+ m_origin == _nph.m_origin;
}
diff --git a/src/core/Oscillator.cpp b/src/core/Oscillator.cpp
index 7b5c8a6..b07699c 100644
--- a/src/core/Oscillator.cpp
+++ b/src/core/Oscillator.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/PeakController.cpp b/src/core/PeakController.cpp
index 5081748..851ea32 100644
--- a/src/core/PeakController.cpp
+++ b/src/core/PeakController.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/Piano.cpp b/src/core/Piano.cpp
index 93fa348..4c95546 100644
--- a/src/core/Piano.cpp
+++ b/src/core/Piano.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -101,7 +101,7 @@ void Piano::handleKeyPress( int key, int midiVelocity )
}
if( isValidKey( key ) )
{
- m_midiEvProc->processInEvent( MidiEvent( MidiNoteOn, 0, key, midiVelocity ) );
+ m_midiEvProc->processInEvent( MidiEvent( MidiNoteOn, -1, key, midiVelocity ) );
m_pressedKeys[key] = true;
}
}
@@ -118,7 +118,7 @@ void Piano::handleKeyRelease( int key )
{
if( isValidKey( key ) )
{
- m_midiEvProc->processInEvent( MidiEvent( MidiNoteOff, 0, key, 0 ) );
+ m_midiEvProc->processInEvent( MidiEvent( MidiNoteOff, -1, key, 0 ) );
m_pressedKeys[key] = false;
}
}
diff --git a/src/core/Plugin.cpp b/src/core/Plugin.cpp
index 8a81e2c..e188991 100644
--- a/src/core/Plugin.cpp
+++ b/src/core/Plugin.cpp
@@ -1,11 +1,9 @@
-#ifndef SINGLE_SOURCE_COMPILE
-
/*
* Plugin.cpp - implementation of plugin-class including plugin-loader
*
- * Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,6 +22,7 @@
*
*/
+#include <QtCore/QDebug>
#include <QtCore/QDir>
#include <QtCore/QLibrary>
#include <QtGui/QMessageBox>
@@ -54,9 +53,9 @@ static Plugin::Descriptor dummy_plugin_descriptor =
-Plugin::Plugin( const Descriptor * _descriptor, Model * _parent ) :
+Plugin::Plugin( const Descriptor * _descriptor, Model * parent ) :
+ Model( parent ),
JournallingObject(),
- Model( _parent ),
m_descriptor( _descriptor )
{
if( m_descriptor == NULL )
@@ -91,89 +90,80 @@ AutomatableModel * Plugin::childModel( const QString & )
-Plugin * Plugin::instantiate( const QString & _plugin_name, Model * _parent,
- void * _data )
+Plugin * Plugin::instantiate( const QString & pluginName, Model * parent,
+ void * data )
{
- QLibrary plugin_lib( configManager::inst()->pluginDir() +
- _plugin_name );
- if( plugin_lib.load() == false )
+ QLibrary pluginLibrary( configManager::inst()->pluginDir() + pluginName );
+ if( pluginLibrary.load() == false )
{
if( engine::hasGUI() )
{
QMessageBox::information( NULL,
tr( "Plugin not found" ),
- tr( "The plugin \"%1\" wasn't found "
- "or could not be loaded!\n"
- "Reason: \"%2\"" ).arg( _plugin_name ).
- arg( plugin_lib.errorString() ),
- QMessageBox::Ok |
- QMessageBox::Default );
+ tr( "The plugin \"%1\" wasn't found or could not be loaded!\nReason: \"%2\"" ).
+ arg( pluginName ).arg( pluginLibrary.errorString() ),
+ QMessageBox::Ok | QMessageBox::Default );
}
return new DummyPlugin();
}
- instantiationHook inst_hook = ( instantiationHook ) plugin_lib.resolve(
- "lmms_plugin_main" );
- if( inst_hook == NULL )
+
+ InstantiationHook instantiationHook = ( InstantiationHook ) pluginLibrary.resolve( "lmms_plugin_main" );
+ if( instantiationHook == NULL )
{
if( engine::hasGUI() )
{
QMessageBox::information( NULL,
tr( "Error while loading plugin" ),
- tr( "Failed to load plugin \"%1\"!"
- ).arg( _plugin_name ),
- QMessageBox::Ok |
- QMessageBox::Default );
+ tr( "Failed to load plugin \"%1\"!").arg( pluginName ),
+ QMessageBox::Ok | QMessageBox::Default );
}
return new DummyPlugin();
}
- Plugin * inst = inst_hook( _parent, _data );
+
+ Plugin * inst = instantiationHook( parent, data );
return inst;
}
-void Plugin::getDescriptorsOfAvailPlugins( DescriptorList & _plugin_descs )
+void Plugin::getDescriptorsOfAvailPlugins( DescriptorList& pluginDescriptors )
{
QDir directory( configManager::inst()->pluginDir() );
#ifdef LMMS_BUILD_WIN32
- QFileInfoList list = directory.entryInfoList(
- QStringList( "*.dll" ) );
+ QFileInfoList list = directory.entryInfoList( QStringList( "*.dll" ) );
#else
- QFileInfoList list = directory.entryInfoList(
- QStringList( "lib*.so" ) );
+ QFileInfoList list = directory.entryInfoList( QStringList( "lib*.so" ) );
#endif
- foreach( const QFileInfo & f, list )
+ foreach( const QFileInfo& f, list )
{
QLibrary( f.absoluteFilePath() ).load();
}
- foreach( const QFileInfo & f, list )
+ foreach( const QFileInfo& f, list )
{
- QLibrary plugin_lib( f.absoluteFilePath() );
- if( plugin_lib.load() == false ||
- plugin_lib.resolve( "lmms_plugin_main" ) == NULL )
+ QLibrary pluginLibrary( f.absoluteFilePath() );
+ if( pluginLibrary.load() == false ||
+ pluginLibrary.resolve( "lmms_plugin_main" ) == NULL )
{
continue;
}
- QString desc_name = f.fileName().section( '.', 0, 0 ) +
- "_plugin_descriptor";
- if( desc_name.left( 3 ) == "lib" )
+
+ QString descriptorName = f.baseName() + "_plugin_descriptor";
+ if( descriptorName.left( 3 ) == "lib" )
{
- desc_name = desc_name.mid( 3 );
+ descriptorName = descriptorName.mid( 3 );
}
- Descriptor * plugin_desc =
- (Descriptor *) plugin_lib.resolve(
- desc_name.toUtf8().constData() );
- if( plugin_desc == NULL )
+
+ Descriptor* pluginDescriptor = (Descriptor *) pluginLibrary.resolve( descriptorName.toUtf8().constData() );
+ if( pluginDescriptor == NULL )
{
- printf( "LMMS plugin %s does not have a "
- "plugin descriptor named %s!\n",
- f.absoluteFilePath().toUtf8().constData(),
- desc_name.toUtf8().constData() );
+ qWarning() << tr( "LMMS plugin %1 does not have a plugin descriptor named %2!" ).
+ arg( f.absoluteFilePath() ).arg( descriptorName );
continue;
}
- _plugin_descs.push_back( *plugin_desc );
+
+ pluginDescriptors += *pluginDescriptor;
}
}
@@ -181,9 +171,9 @@ void Plugin::getDescriptorsOfAvailPlugins( DescriptorList & _plugin_descs )
-PluginView * Plugin::createView( QWidget * _parent )
+PluginView * Plugin::createView( QWidget * parent )
{
- PluginView * pv = instantiateView( _parent );
+ PluginView * pv = instantiateView( parent );
if( pv != NULL )
{
pv->setModel( this );
@@ -226,5 +216,4 @@ QDomElement Plugin::Descriptor::SubPluginFeatures::Key::saveXML(
return e;
}
-
-#endif
+#include "moc_Plugin.cxx"
diff --git a/src/core/PresetPreviewPlayHandle.cpp b/src/core/PresetPreviewPlayHandle.cpp
index 04dc2d2..4d5052d 100644
--- a/src/core/PresetPreviewPlayHandle.cpp
+++ b/src/core/PresetPreviewPlayHandle.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/ProjectJournal.cpp b/src/core/ProjectJournal.cpp
index dffd60e..511df40 100644
--- a/src/core/ProjectJournal.cpp
+++ b/src/core/ProjectJournal.cpp
@@ -1,9 +1,9 @@
/*
* ProjectJournal.cpp - implementation of ProjectJournal
*
- * Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -29,11 +29,12 @@
#include "JournallingObject.h"
#include "song.h"
+const int ProjectJournal::MAX_UNDO_STATES = 100; // TODO: make this configurable in settings
ProjectJournal::ProjectJournal() :
m_joIDs(),
- m_journalEntries(),
- m_currentJournalEntry( m_journalEntries.end() ),
+ m_undoCheckPoints(),
+ m_redoCheckPoints(),
m_journalling( false )
{
}
@@ -50,51 +51,70 @@ ProjectJournal::~ProjectJournal()
void ProjectJournal::undo()
{
- if( m_journalEntries.empty() == true )
+ while( !m_undoCheckPoints.isEmpty() )
{
- return;
- }
-
- JournallingObject * jo;
+ CheckPoint c = m_undoCheckPoints.pop();
+ JournallingObject *jo = m_joIDs[c.joID];
- if( m_currentJournalEntry - 1 >= m_journalEntries.begin() &&
- ( jo = m_joIDs[*--m_currentJournalEntry] ) != NULL )
- {
- jo->undo();
- engine::getSong()->setModified();
+ if( jo )
+ {
+ DataFile curState( DataFile::JournalData );
+ jo->saveState( curState, curState.content() );
+ m_redoCheckPoints.push( CheckPoint( c.joID, curState ) );
+
+ bool prev = isJournalling();
+ setJournalling( false );
+ jo->restoreState( c.data.content().firstChildElement() );
+ setJournalling( prev );
+ engine::getSong()->setModified();
+ break;
+ }
}
}
-
void ProjectJournal::redo()
{
- if( m_journalEntries.empty() == true )
+ while( !m_redoCheckPoints.isEmpty() )
{
- return;
- }
+ CheckPoint c = m_redoCheckPoints.pop();
+ JournallingObject *jo = m_joIDs[c.joID];
- JournallingObject * jo;
-
- //printf("%d\n", m_joIDs[*(m_currentJournalEntry+1)] );
- if( m_currentJournalEntry < m_journalEntries.end() &&
- ( jo = m_joIDs[*m_currentJournalEntry++] ) != NULL )
- {
- jo->redo();
- engine::getSong()->setModified();
+ if( jo )
+ {
+ DataFile curState( DataFile::JournalData );
+ jo->saveState( curState, curState.content() );
+ m_undoCheckPoints.push( CheckPoint( c.joID, curState ) );
+
+ bool prev = isJournalling();
+ setJournalling( false );
+ jo->restoreState( c.data.content().firstChildElement() );
+ setJournalling( prev );
+ engine::getSong()->setModified();
+ break;
+ }
}
}
-void ProjectJournal::journalEntryAdded( const jo_id_t _id )
+void ProjectJournal::addJournalCheckPoint( JournallingObject *jo )
{
- m_journalEntries.erase( m_currentJournalEntry, m_journalEntries.end() );
- m_journalEntries.push_back( _id );
- m_currentJournalEntry = m_journalEntries.end();
- engine::getSong()->setModified();
+ if( isJournalling() )
+ {
+ m_redoCheckPoints.clear();
+
+ DataFile dataFile( DataFile::JournalData );
+ jo->saveState( dataFile, dataFile.content() );
+
+ m_undoCheckPoints.push( CheckPoint( jo->id(), dataFile ) );
+ if( m_undoCheckPoints.size() > MAX_UNDO_STATES )
+ {
+ m_undoCheckPoints.remove( 0, m_undoCheckPoints.size() - MAX_UNDO_STATES );
+ }
+ }
}
@@ -105,7 +125,7 @@ jo_id_t ProjectJournal::allocID( JournallingObject * _obj )
const jo_id_t EO_ID_MAX = (1 << 23)-1;
jo_id_t id;
while( m_joIDs.contains( id =
- static_cast<jo_id_t>( (jo_id_t)rand()*(jo_id_t)rand() %
+ static_cast<jo_id_t>( (jo_id_t)rand()*(jo_id_t)rand() %
EO_ID_MAX ) ) )
{
}
@@ -130,29 +150,11 @@ void ProjectJournal::reallocID( const jo_id_t _id, JournallingObject * _obj )
-void ProjectJournal::forgetAboutID( const jo_id_t _id )
-{
- //printf("forget about %d\n", _id );
- JournalEntryVector::Iterator it;
- while( ( it = qFind( m_journalEntries.begin(), m_journalEntries.end(),
- _id ) ) != m_journalEntries.end() )
- {
- if( m_currentJournalEntry >= it )
- {
- --m_currentJournalEntry;
- }
- m_journalEntries.erase( it );
- }
- m_joIDs.remove( _id );
-}
-
-
-
-
void ProjectJournal::clearJournal()
{
- m_journalEntries.clear();
- m_currentJournalEntry = m_journalEntries.end();
+ m_undoCheckPoints.clear();
+ m_redoCheckPoints.clear();
+
for( JoIdMap::Iterator it = m_joIDs.begin(); it != m_joIDs.end(); )
{
if( it.value() == NULL )
@@ -166,5 +168,17 @@ void ProjectJournal::clearJournal()
}
}
+void ProjectJournal::stopAllJournalling()
+{
+ for( JoIdMap::Iterator it = m_joIDs.begin(); it != m_joIDs.end(); ++it)
+ {
+ if( it.value() != NULL )
+ {
+ it.value()->setJournalling(false);
+ }
+ }
+ setJournalling(false);
+}
+
diff --git a/src/core/ProjectRenderer.cpp b/src/core/ProjectRenderer.cpp
index 4017b46..e46cf85 100644
--- a/src/core/ProjectRenderer.cpp
+++ b/src/core/ProjectRenderer.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/RemotePlugin.cpp b/src/core/RemotePlugin.cpp
index 29baf66..023f683 100644
--- a/src/core/RemotePlugin.cpp
+++ b/src/core/RemotePlugin.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/SampleBuffer.cpp b/src/core/SampleBuffer.cpp
index 7555836..6941c6d 100644
--- a/src/core/SampleBuffer.cpp
+++ b/src/core/SampleBuffer.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,7 +24,6 @@
#include "SampleBuffer.h"
-#include "Mixer.h"
#include <QtCore/QBuffer>
@@ -154,25 +153,6 @@ SampleBuffer::~SampleBuffer()
-void SampleBuffer::sanitizeSettings()
-{
- m_varLock.lock();
-
- if( m_startFrame >= m_endFrame )
- {
- m_endFrame = m_startFrame+1;
- }
-
- if( m_loopStartFrame >= m_loopEndFrame )
- {
- m_loopEndFrame = m_loopStartFrame+1;
- }
-
- m_varLock.unlock();
-}
-
-
-
void SampleBuffer::update( bool _keep_settings )
{
@@ -205,6 +185,7 @@ void SampleBuffer::update( bool _keep_settings )
char * f = qstrdup( file.toUtf8().constData() );
#endif
int_sample_t * buf = NULL;
+ sample_t * fbuf = NULL;
ch_cnt_t channels = DEFAULT_CHANNELS;
sample_rate_t samplerate = engine::mixer()->baseSampleRate();
m_frames = 0;
@@ -229,7 +210,7 @@ void SampleBuffer::update( bool _keep_settings )
#endif
if( m_frames == 0 )
{
- m_frames = decodeSampleSF( f, buf, channels,
+ m_frames = decodeSampleSF( f, fbuf, channels,
samplerate );
}
#ifdef LMMS_HAVE_OGGVORBIS
@@ -291,8 +272,7 @@ void SampleBuffer::convertIntToFloat ( int_sample_t * & _ibuf, f_cnt_t _frames,
{
// following code transforms int-samples into
// float-samples and does amplifying & reversing
- const float fac = m_amplification /
- OUTPUT_SAMPLE_MULTIPLIER;
+ const float fac = 1 / OUTPUT_SAMPLE_MULTIPLIER;
m_data = new sampleFrame[_frames];
const int ch = ( _channels > 1 ) ? 1 : 0;
@@ -396,7 +376,7 @@ void SampleBuffer::normalizeSampleRate( const sample_rate_t _src_sr,
f_cnt_t SampleBuffer::decodeSampleSF( const char * _f,
- int_sample_t * & _buf,
+ sample_t * & _buf,
ch_cnt_t & _channels,
sample_rate_t & _samplerate )
{
@@ -404,29 +384,19 @@ f_cnt_t SampleBuffer::decodeSampleSF( const char * _f,
SF_INFO sf_info;
f_cnt_t frames = 0;
bool sf_rr = false;
- sample_t * fbuf = 0;
if( ( snd_file = sf_open( _f, SFM_READ, &sf_info ) ) != NULL )
{
frames = sf_info.frames;
- // check if float
- if ( (sf_info.format & SF_FORMAT_SUBMASK) == SF_FORMAT_FLOAT ) // if yes, use float format for buffer
- {
- fbuf = new sample_t[sf_info.channels * frames];
- sf_rr = sf_read_float( snd_file, fbuf, sf_info.channels * frames );
- }
- else // otherwise, use int
- {
- _buf = new int_sample_t[sf_info.channels * frames];
- sf_rr = sf_read_short( snd_file, _buf, sf_info.channels * frames );
- }
+ _buf = new sample_t[sf_info.channels * frames];
+ sf_rr = sf_read_float( snd_file, _buf, sf_info.channels * frames );
if( sf_rr < sf_info.channels * frames )
{
#ifdef DEBUG_LMMS
- printf( "SampleBuffer::decodeSampleSF(): could not read"
- " sample %s: %s\n", _f, sf_strerror( NULL ) );
+ qDebug( "SampleBuffer::decodeSampleSF(): could not read"
+ " sample %s: %s", _f, sf_strerror( NULL ) );
#endif
}
_channels = sf_info.channels;
@@ -437,19 +407,15 @@ f_cnt_t SampleBuffer::decodeSampleSF( const char * _f,
else
{
#ifdef DEBUG_LMMS
- printf( "SampleBuffer::decodeSampleSF(): could not load "
- "sample %s: %s\n", _f, sf_strerror( NULL ) );
+ qDebug( "SampleBuffer::decodeSampleSF(): could not load "
+ "sample %s: %s", _f, sf_strerror( NULL ) );
#endif
}
//write down either directly or convert i->f depending on file type
- if ( frames > 0 && fbuf != NULL )
- {
- directFloatWrite ( fbuf, frames, _channels);
- }
- else if ( frames > 0 && _buf != NULL )
+ if ( frames > 0 && _buf != NULL )
{
- convertIntToFloat ( _buf, frames, _channels);
+ directFloatWrite ( _buf, frames, _channels);
}
return frames;
@@ -629,60 +595,66 @@ f_cnt_t SampleBuffer::decodeSampleDS( const char * _f,
bool SampleBuffer::play( sampleFrame * _ab, handleState * _state,
const fpp_t _frames,
const float _freq,
- const bool _looped )
+ const LoopMode _loopmode )
{
QMutexLocker ml( &m_varLock );
- engine::mixer()->clearAudioBuffer( _ab, _frames );
+ f_cnt_t startFrame = m_startFrame;
+ f_cnt_t endFrame = m_endFrame;
+ f_cnt_t loopStartFrame = m_loopStartFrame;
+ f_cnt_t loopEndFrame = m_loopEndFrame;
- if( m_endFrame == 0 || _frames == 0 )
+ if( endFrame == 0 || _frames == 0 )
{
return false;
}
+ // variable for determining if we should currently be playing backwards in a ping-pong loop
+ bool is_backwards = _state->isBackwards();
+
const double freq_factor = (double) _freq / (double) m_frequency *
m_sampleRate / engine::mixer()->processingSampleRate();
// calculate how many frames we have in requested pitch
const f_cnt_t total_frames_for_current_pitch = static_cast<f_cnt_t>( (
- m_endFrame - m_startFrame ) /
+ endFrame - startFrame ) /
freq_factor );
+
if( total_frames_for_current_pitch == 0 )
{
return false;
}
+
// this holds the number of the first frame to play
f_cnt_t play_frame = _state->m_frameIndex;
- if( play_frame < m_startFrame )
- {
- play_frame = m_startFrame;
- }
- // this holds the number of remaining frames in current loop
- f_cnt_t frames_for_loop;
- if( _looped )
+ if( play_frame < startFrame )
{
- play_frame = getLoopedIndex( play_frame );
- frames_for_loop = static_cast<f_cnt_t>(
- ( m_loopEndFrame - play_frame ) /
- freq_factor );
+ play_frame = startFrame;
}
- else
+
+ if( _loopmode == LoopOff )
{
- if( play_frame >= m_endFrame )
- {
- return false;
- }
- frames_for_loop = static_cast<f_cnt_t>(
- ( m_endFrame - play_frame ) /
- freq_factor );
- if( frames_for_loop == 0 )
+ if( play_frame >= endFrame )
{
return false;
}
+
+ if( ( endFrame - play_frame ) / freq_factor == 0 ) return false;
+ }
+
+ else if( _loopmode == LoopOn )
+ {
+ play_frame = getLoopedIndex( play_frame, loopStartFrame, loopEndFrame );
}
+ else
+ {
+ play_frame = getPingPongIndex( play_frame, loopStartFrame, loopEndFrame );
+ }
+
+
sampleFrame * tmp = NULL;
// check whether we have to change pitch...
@@ -690,11 +662,10 @@ bool SampleBuffer::play( sampleFrame * _ab, handleState * _state,
{
SRC_DATA src_data;
// Generate output
- const f_cnt_t margin = 64;
- f_cnt_t fragment_size = (f_cnt_t)( _frames * freq_factor )
- + margin;
- src_data.data_in = getSampleFragment( play_frame,
- fragment_size, _looped, &tmp )[0];
+ f_cnt_t fragment_size = (f_cnt_t)( _frames * freq_factor ) + MARGIN[ _state->interpolationMode() ];
+ src_data.data_in =
+ getSampleFragment( play_frame, fragment_size, _loopmode, &tmp, &is_backwards,
+ loopStartFrame, loopEndFrame, endFrame )[0];
src_data.data_out = _ab[0];
src_data.input_frames = fragment_size;
src_data.output_frames = _frames;
@@ -713,10 +684,32 @@ bool SampleBuffer::play( sampleFrame * _ab, handleState * _state,
src_data.output_frames_gen, _frames );
}
// Advance
- play_frame += src_data.input_frames_used;
- if( _looped )
+ switch( _loopmode )
{
- play_frame = getLoopedIndex( play_frame );
+ case LoopOff:
+ play_frame += src_data.input_frames_used;
+ break;
+ case LoopOn:
+ play_frame += src_data.input_frames_used;
+ play_frame = getLoopedIndex( play_frame, loopStartFrame, loopEndFrame );
+ break;
+ case LoopPingPong:
+ {
+ f_cnt_t left = src_data.input_frames_used;
+ if( _state->isBackwards() )
+ {
+ play_frame -= src_data.input_frames_used;
+ if( play_frame < loopStartFrame )
+ {
+ left -= ( loopStartFrame - play_frame );
+ play_frame = loopStartFrame;
+ }
+ else left = 0;
+ }
+ play_frame += left;
+ play_frame = getPingPongIndex( play_frame, loopStartFrame, loopEndFrame );
+ break;
+ }
}
}
else
@@ -726,19 +719,49 @@ bool SampleBuffer::play( sampleFrame * _ab, handleState * _state,
// Generate output
memcpy( _ab,
- getSampleFragment( play_frame, _frames, _looped, &tmp ),
+ getSampleFragment( play_frame, _frames, _loopmode, &tmp, &is_backwards,
+ loopStartFrame, loopEndFrame, endFrame ),
_frames * BYTES_PER_FRAME );
// Advance
- play_frame += _frames;
- if( _looped )
+ switch( _loopmode )
{
- play_frame = getLoopedIndex( play_frame );
+ case LoopOff:
+ play_frame += _frames;
+ break;
+ case LoopOn:
+ play_frame += _frames;
+ play_frame = getLoopedIndex( play_frame, loopStartFrame, loopEndFrame );
+ break;
+ case LoopPingPong:
+ {
+ f_cnt_t left = _frames;
+ if( _state->isBackwards() )
+ {
+ play_frame -= _frames;
+ if( play_frame < loopStartFrame )
+ {
+ left -= ( loopStartFrame - play_frame );
+ play_frame = loopStartFrame;
+ }
+ else left = 0;
+ }
+ play_frame += left;
+ play_frame = getPingPongIndex( play_frame, loopStartFrame, loopEndFrame );
+ break;
+ }
}
}
- delete[] tmp;
+ if( tmp != NULL ) delete[] tmp;
- _state->m_frameIndex = play_frame;
+ _state->setBackwards( is_backwards );
+ _state->setFrameIndex( play_frame );
+
+ for( fpp_t i = 0; i < _frames; ++i )
+ {
+ _ab[i][0] *= m_amplification;
+ _ab[i][1] *= m_amplification;
+ }
return true;
@@ -747,45 +770,103 @@ bool SampleBuffer::play( sampleFrame * _ab, handleState * _state,
-sampleFrame * SampleBuffer::getSampleFragment( f_cnt_t _start,
- f_cnt_t _frames, bool _looped, sampleFrame * * _tmp ) const
+sampleFrame * SampleBuffer::getSampleFragment( f_cnt_t _index,
+ f_cnt_t _frames, LoopMode _loopmode, sampleFrame * * _tmp, bool * _backwards,
+ f_cnt_t _loopstart, f_cnt_t _loopend, f_cnt_t _end ) const
{
- if( _looped )
+ if( _loopmode == LoopOff )
{
- if( _start + _frames <= m_loopEndFrame || m_loopStartFrame >= m_loopEndFrame )
+ if( _index + _frames <= _end )
{
- return m_data + _start;
+ return m_data + _index;
}
}
- else
+ else if( _loopmode == LoopOn )
{
- if( _start + _frames <= m_endFrame || m_startFrame >= m_endFrame )
+ if( _index + _frames <= _loopend )
{
- return m_data + _start;
+ return m_data + _index;
}
}
+ else
+ {
+ if( ! *_backwards && _index + _frames < _loopend )
+ return m_data + _index;
+ }
*_tmp = new sampleFrame[_frames];
- if( _looped )
+ if( _loopmode == LoopOff )
+ {
+ f_cnt_t available = _end - _index;
+ memcpy( *_tmp, m_data + _index, available * BYTES_PER_FRAME );
+ memset( *_tmp + available, 0, ( _frames - available ) *
+ BYTES_PER_FRAME );
+ }
+ else if( _loopmode == LoopOn )
{
- f_cnt_t copied = m_loopEndFrame - _start;
- memcpy( *_tmp, m_data + _start, copied * BYTES_PER_FRAME );
- f_cnt_t loop_frames = m_loopEndFrame - m_loopStartFrame;
- while( _frames - copied > 0 )
+ f_cnt_t copied = qMin( _frames, _loopend - _index );
+ memcpy( *_tmp, m_data + _index, copied * BYTES_PER_FRAME );
+ f_cnt_t loop_frames = _loopend - _loopstart;
+ while( copied < _frames )
{
f_cnt_t todo = qMin( _frames - copied, loop_frames );
- memcpy( *_tmp + copied, m_data + m_loopStartFrame,
- todo * BYTES_PER_FRAME );
+ memcpy( *_tmp + copied, m_data + _loopstart, todo * BYTES_PER_FRAME );
copied += todo;
}
}
else
{
- f_cnt_t available = m_endFrame - _start;
- memcpy( *_tmp, m_data + _start, available * BYTES_PER_FRAME );
- memset( *_tmp + available, 0, ( _frames - available ) *
- BYTES_PER_FRAME );
+ f_cnt_t pos = _index;
+ bool backwards = pos < _loopstart
+ ? false
+ : *_backwards;
+ f_cnt_t copied = 0;
+
+
+ if( backwards )
+ {
+ copied = qMin( _frames, pos - _loopstart );
+ for( int i=0; i < copied; i++ )
+ {
+ (*_tmp)[i][0] = m_data[ pos - i ][0];
+ (*_tmp)[i][1] = m_data[ pos - i ][1];
+ }
+ pos -= copied;
+ if( pos == _loopstart ) backwards = false;
+ }
+ else
+ {
+ copied = qMin( _frames, _loopend - pos );
+ memcpy( *_tmp, m_data + pos, copied * BYTES_PER_FRAME );
+ pos += copied;
+ if( pos == _loopend ) backwards = true;
+ }
+
+ while( copied < _frames )
+ {
+ if( backwards )
+ {
+ f_cnt_t todo = qMin( _frames - copied, pos - _loopstart );
+ for ( int i=0; i < todo; i++ )
+ {
+ (*_tmp)[ copied + i ][0] = m_data[ pos - i ][0];
+ (*_tmp)[ copied + i ][1] = m_data[ pos - i ][1];
+ }
+ pos -= todo;
+ copied += todo;
+ if( pos <= _loopstart ) backwards = false;
+ }
+ else
+ {
+ f_cnt_t todo = qMin( _frames - copied, _loopend - pos );
+ memcpy( *_tmp + copied, m_data + pos, todo * BYTES_PER_FRAME );
+ pos += todo;
+ copied += todo;
+ if( pos >= _loopend ) backwards = true;
+ }
+ }
+ *_backwards = backwards;
}
return *_tmp;
@@ -794,22 +875,37 @@ sampleFrame * SampleBuffer::getSampleFragment( f_cnt_t _start,
-f_cnt_t SampleBuffer::getLoopedIndex( f_cnt_t _index ) const
+f_cnt_t SampleBuffer::getLoopedIndex( f_cnt_t _index, f_cnt_t _startf, f_cnt_t _endf ) const
{
- if( _index < m_loopEndFrame )
+ if( _index < _endf )
{
return _index;
}
- return m_loopStartFrame + ( _index - m_loopStartFrame )
- % ( m_loopEndFrame - m_loopStartFrame );
+ return _startf + ( _index - _startf )
+ % ( _endf - _startf );
}
+f_cnt_t SampleBuffer::getPingPongIndex( f_cnt_t _index, f_cnt_t _startf, f_cnt_t _endf ) const
+{
+ if( _index < _endf )
+ {
+ return _index;
+ }
+ const f_cnt_t looplen = _endf - _startf;
+ const f_cnt_t looppos = ( _index - _endf ) % ( looplen*2 );
+
+ return ( looppos < looplen )
+ ? _endf - looppos
+ : _startf + ( looppos - looplen );
+}
void SampleBuffer::visualize( QPainter & _p, const QRect & _dr,
const QRect & _clip, f_cnt_t _from_frame, f_cnt_t _to_frame )
{
+ if( m_frames == 0 ) return;
+
const bool focus_on_range = _to_frame <= m_frames
&& 0 <= _from_frame && _from_frame < _to_frame;
// _p.setClipRect( _clip );
@@ -819,7 +915,7 @@ void SampleBuffer::visualize( QPainter & _p, const QRect & _dr,
const int h = _dr.height();
const int yb = h / 2 + _dr.y();
- const float y_space = h*0.25f;
+ const float y_space = h*0.5f;
const int nb_frames = focus_on_range ? _to_frame - _from_frame : m_frames;
if( nb_frames < 60000 )
@@ -830,6 +926,7 @@ void SampleBuffer::visualize( QPainter & _p, const QRect & _dr,
}
const int fpp = tLimit<int>( nb_frames / w, 1, 20 );
QPoint * l = new QPoint[nb_frames / fpp + 1];
+ QPoint * r = new QPoint[nb_frames / fpp + 1];
int n = 0;
const int xb = _dr.x();
const int first = focus_on_range ? _from_frame : 0;
@@ -837,37 +934,19 @@ void SampleBuffer::visualize( QPainter & _p, const QRect & _dr,
for( int frame = first; frame < last; frame += fpp )
{
l[n] = QPoint( xb + ( (frame - first) * double( w ) / nb_frames ),
- (int)( yb - ( ( m_data[frame][0]+m_data[frame][1] ) *
- y_space ) ) );
+ (int)( yb - ( m_data[frame][0] * y_space * m_amplification ) ) );
+ r[n] = QPoint( xb + ( (frame - first) * double( w ) / nb_frames ),
+ (int)( yb - ( m_data[frame][1] * y_space * m_amplification ) ) );
++n;
}
_p.drawPolyline( l, nb_frames / fpp );
+ _p.drawPolyline( r, nb_frames / fpp );
delete[] l;
+ delete[] r;
}
-void SampleBuffer::setLoopStartFrame( f_cnt_t start )
-{
- m_varLock.lock();
- m_loopStartFrame = start;
- m_varLock.unlock();
-
- sanitizeSettings();
-}
-
-
-
-void SampleBuffer::setLoopEndFrame( f_cnt_t end )
-{
- m_varLock.lock();
- m_loopEndFrame = end;
- m_varLock.unlock();
-
- sanitizeSettings();
-}
-
-
QString SampleBuffer::openAudioFile() const
{
@@ -954,19 +1033,19 @@ QString SampleBuffer::openAndSetWaveformFile()
{
m_audioFile = configManager::inst()->factorySamplesDir() + "waveforms/10saw.flac";
}
-
+
QString fileName = this->openAudioFile();
if(!fileName.isEmpty())
{
this->setAudioFile( fileName );
- }
- else
+ }
+ else
{
m_audioFile = "";
}
- return fileName;
+ return fileName;
}
@@ -1280,25 +1359,21 @@ void SampleBuffer::loadFromBase64( const QString & _data )
-void SampleBuffer::setStartFrame( f_cnt_t start )
+void SampleBuffer::setStartFrame( const f_cnt_t _s )
{
m_varLock.lock();
- m_loopStartFrame = m_startFrame = start;
+ m_startFrame = _s;
m_varLock.unlock();
-
- sanitizeSettings();
}
-void SampleBuffer::setEndFrame( f_cnt_t end )
+void SampleBuffer::setEndFrame( const f_cnt_t _e )
{
m_varLock.lock();
- m_loopEndFrame = m_endFrame = end;
+ m_endFrame = _e;
m_varLock.unlock();
-
- sanitizeSettings();
}
@@ -1307,7 +1382,7 @@ void SampleBuffer::setEndFrame( f_cnt_t end )
void SampleBuffer::setAmplification( float _a )
{
m_amplification = _a;
- update( true );
+ emit sampleUpdated();
}
@@ -1369,18 +1444,17 @@ QString SampleBuffer::tryToMakeAbsolute( const QString & _file )
-SampleBuffer::handleState::handleState( bool _varying_pitch ) :
+SampleBuffer::handleState::handleState( bool _varying_pitch, int interpolation_mode ) :
m_frameIndex( 0 ),
- m_varyingPitch( _varying_pitch )
+ m_varyingPitch( _varying_pitch ),
+ m_isBackwards( false )
{
int error;
- if( ( m_resamplingData = src_new(/*
- ( engine::mixer()->highQuality() == true ) ?
- SRC_SINC_FASTEST :*/
- SRC_LINEAR,
- DEFAULT_CHANNELS, &error ) ) == NULL )
+ m_interpolationMode = interpolation_mode;
+
+ if( ( m_resamplingData = src_new( interpolation_mode, DEFAULT_CHANNELS, &error ) ) == NULL )
{
- printf( "Error: src_new() failed in sample_buffer.cpp!\n" );
+ qDebug( "Error: src_new() failed in sample_buffer.cpp!\n" );
}
}
diff --git a/src/core/SamplePlayHandle.cpp b/src/core/SamplePlayHandle.cpp
index 9561395..cc85d38 100644
--- a/src/core/SamplePlayHandle.cpp
+++ b/src/core/SamplePlayHandle.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -27,7 +27,7 @@
#include "bb_track.h"
#include "engine.h"
#include "InstrumentTrack.h"
-#include "pattern.h"
+#include "Pattern.h"
#include "SampleBuffer.h"
#include "SampleTrack.h"
diff --git a/src/core/SampleRecordHandle.cpp b/src/core/SampleRecordHandle.cpp
index edae630..19dc32a 100644
--- a/src/core/SampleRecordHandle.cpp
+++ b/src/core/SampleRecordHandle.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008 Csaba Hruska <csaba.hruska/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -27,7 +27,7 @@
#include "bb_track.h"
#include "engine.h"
#include "InstrumentTrack.h"
-#include "pattern.h"
+#include "Pattern.h"
#include "SampleBuffer.h"
#include "SampleTrack.h"
diff --git a/src/core/SerializingObject.cpp b/src/core/SerializingObject.cpp
index da1b7a5..a0ec2a6 100644
--- a/src/core/SerializingObject.cpp
+++ b/src/core/SerializingObject.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/TempoSyncKnobModel.cpp b/src/core/TempoSyncKnobModel.cpp
index c54e43b..de84c3b 100644
--- a/src/core/TempoSyncKnobModel.cpp
+++ b/src/core/TempoSyncKnobModel.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2005-2007 Danny McRae <khjklujn/at/yahoo.com>
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/ToolPlugin.cpp b/src/core/ToolPlugin.cpp
index e2d520b..8f72e11 100644
--- a/src/core/ToolPlugin.cpp
+++ b/src/core/ToolPlugin.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/TrackContainer.cpp b/src/core/TrackContainer.cpp
index c243091..33a8aeb 100644
--- a/src/core/TrackContainer.cpp
+++ b/src/core/TrackContainer.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -73,10 +73,16 @@ void TrackContainer::saveSettings( QDomDocument & _doc, QDomElement & _this )
void TrackContainer::loadSettings( const QDomElement & _this )
{
+ bool journalRestore = _this.parentNode().nodeName() == "journaldata";
+ if( journalRestore )
+ {
+ clearAllTracks();
+ }
+
static QProgressDialog * pd = NULL;
bool was_null = ( pd == NULL );
int start_val = 0;
- if( engine::hasGUI() )
+ if( !journalRestore && engine::hasGUI() )
{
if( pd == NULL )
{
@@ -169,6 +175,10 @@ void TrackContainer::removeTrack( track * _track )
int index = m_tracks.indexOf( _track );
if( index != -1 )
{
+ // If the track is solo, all other tracks are muted. Change this before removing the solo track:
+ if (_track->isSolo()) {
+ _track->setSolo(false);
+ }
m_tracksMutex.lockForWrite();
m_tracks.remove( index );
m_tracksMutex.unlock();
diff --git a/src/core/VstSyncController.cpp b/src/core/VstSyncController.cpp
index 7d7177c..9b5454e 100644
--- a/src/core/VstSyncController.cpp
+++ b/src/core/VstSyncController.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2013 Mike Choi <rdavidian71/at/gmail/dot/com>
*
- * This file is part of LMMS - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/audio/AudioAlsa.cpp b/src/core/audio/AudioAlsa.cpp
index 4e2dd70..c396442 100644
--- a/src/core/audio/AudioAlsa.cpp
+++ b/src/core/audio/AudioAlsa.cpp
@@ -1,9 +1,9 @@
/*
* audio_alsa.cpp - device-class which implements ALSA-PCM-output
*
- * Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -93,6 +93,7 @@ AudioAlsa::AudioAlsa( bool & _success_ful, Mixer* _mixer ) :
oldflags |= FD_CLOEXEC;
fcntl( fd, F_SETFD, oldflags );
}
+ delete[] ufds;
_success_ful = true;
}
@@ -145,10 +146,11 @@ int AudioAlsa::handleError( int _err )
// under-run
_err = snd_pcm_prepare( m_handle );
if( _err < 0 )
- printf( "Can't recovery from underrun, prepare "
+ printf( "Can't recover from underrun, prepare "
"failed: %s\n", snd_strerror( _err ) );
return ( 0 );
}
+#ifdef ESTRPIPE
else if( _err == -ESTRPIPE )
{
while( ( _err = snd_pcm_resume( m_handle ) ) == -EAGAIN )
@@ -161,11 +163,12 @@ int AudioAlsa::handleError( int _err )
{
_err = snd_pcm_prepare( m_handle );
if( _err < 0 )
- printf( "Can't recovery from suspend, prepare "
+ printf( "Can't recover from suspend, prepare "
"failed: %s\n", snd_strerror( _err ) );
}
return ( 0 );
}
+#endif
return _err;
}
@@ -520,7 +523,7 @@ AudioAlsa::setupWidget::setupWidget( QWidget * _parent ) :
AudioAlsa::setupWidget::~setupWidget()
{
-
+ delete m_channels->model();
}
diff --git a/src/core/audio/AudioDevice.cpp b/src/core/audio/AudioDevice.cpp
index a6e4094..8e0c9ca 100644
--- a/src/core/audio/AudioDevice.cpp
+++ b/src/core/audio/AudioDevice.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/audio/AudioFileDevice.cpp b/src/core/audio/AudioFileDevice.cpp
index 2a87db5..94a172f 100644
--- a/src/core/audio/AudioFileDevice.cpp
+++ b/src/core/audio/AudioFileDevice.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/audio/AudioFileOgg.cpp b/src/core/audio/AudioFileOgg.cpp
index dbf52c5..72efe88 100644
--- a/src/core/audio/AudioFileOgg.cpp
+++ b/src/core/audio/AudioFileOgg.cpp
@@ -7,7 +7,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/audio/AudioFileWave.cpp b/src/core/audio/AudioFileWave.cpp
index 074a1de..cbb0d6c 100644
--- a/src/core/audio/AudioFileWave.cpp
+++ b/src/core/audio/AudioFileWave.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2013 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp
index d29dc7a..3dd6d3a 100644
--- a/src/core/audio/AudioJack.cpp
+++ b/src/core/audio/AudioJack.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -464,6 +464,7 @@ AudioJack::setupWidget::setupWidget( QWidget * _parent ) :
AudioJack::setupWidget::~setupWidget()
{
+ delete m_channels->model();
}
diff --git a/src/core/audio/AudioOss.cpp b/src/core/audio/AudioOss.cpp
index 31a98a4..3db660f 100644
--- a/src/core/audio/AudioOss.cpp
+++ b/src/core/audio/AudioOss.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -356,7 +356,7 @@ AudioOss::setupWidget::setupWidget( QWidget * _parent ) :
AudioOss::setupWidget::~setupWidget()
{
-
+ delete m_channels->model();
}
diff --git a/src/core/audio/AudioPort.cpp b/src/core/audio/AudioPort.cpp
index cdcf675..26c1d70 100644
--- a/src/core/audio/AudioPort.cpp
+++ b/src/core/audio/AudioPort.cpp
@@ -1,9 +1,9 @@
/*
* AudioPort.cpp - base-class for objects providing sound at a port
*
- * Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -25,6 +25,7 @@
#include "AudioPort.h"
#include "AudioDevice.h"
#include "EffectChain.h"
+#include "FxMixer.h"
#include "engine.h"
@@ -118,3 +119,13 @@ bool AudioPort::processEffects()
}
+void AudioPort::doProcessing( sampleFrame * )
+{
+ const bool me = processEffects();
+ if( me || m_bufferUsage != NoUsage )
+ {
+ engine::fxMixer()->mixToChannel( firstBuffer(), nextFxChannel() );
+ nextPeriod();
+ }
+}
+
diff --git a/src/core/audio/AudioPortAudio.cpp b/src/core/audio/AudioPortAudio.cpp
index 2afaa3c..3e6747b 100644
--- a/src/core/audio/AudioPortAudio.cpp
+++ b/src/core/audio/AudioPortAudio.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008 Csaba Hruska <csaba.hruska/at/gmail.com>
* Copyright (c) 2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/audio/AudioPulseAudio.cpp b/src/core/audio/AudioPulseAudio.cpp
index 12e119d..2616e78 100644
--- a/src/core/audio/AudioPulseAudio.cpp
+++ b/src/core/audio/AudioPulseAudio.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -307,7 +307,7 @@ AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) :
AudioPulseAudio::setupWidget::~setupWidget()
{
-
+ delete m_channels->model();
}
diff --git a/src/core/audio/AudioSampleRecorder.cpp b/src/core/audio/AudioSampleRecorder.cpp
index 0e23057..e239c7b 100644
--- a/src/core/audio/AudioSampleRecorder.cpp
+++ b/src/core/audio/AudioSampleRecorder.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/audio/AudioSdl.cpp b/src/core/audio/AudioSdl.cpp
index a72dd58..2bebca7 100644
--- a/src/core/audio/AudioSdl.cpp
+++ b/src/core/audio/AudioSdl.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/base64.cpp b/src/core/base64.cpp
index 973a2c4..fd0e8da 100644
--- a/src/core/base64.cpp
+++ b/src/core/base64.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/bb_track_container.cpp b/src/core/bb_track_container.cpp
index 0cbcef4..90ad589 100644
--- a/src/core/bb_track_container.cpp
+++ b/src/core/bb_track_container.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/config_mgr.cpp b/src/core/config_mgr.cpp
index 51e61ac..93f2863 100644
--- a/src/core/config_mgr.cpp
+++ b/src/core/config_mgr.cpp
@@ -1,9 +1,9 @@
/*
* config_mgr.cpp - implementation of class configManager
*
- * Copyright (c) 2005-2011 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -159,6 +159,7 @@ void configManager::addRecentlyOpenedProject( const QString & _file )
m_recentlyOpenedProjects.removeLast();
}
m_recentlyOpenedProjects.push_front( _file );
+ configManager::inst()->saveConfigFile();
}
@@ -288,7 +289,13 @@ void configManager::loadConfigFile()
node = node.nextSibling();
}
- if( value( "paths", "artwork" ) != "" )
+ // don't use dated theme folders as they break the UI (i.e. 0.4 != 1.0, etc)
+ bool use_artwork_path =
+ root.attribute( "version" ).startsWith(
+ QString::number( LMMS_VERSION_MAJOR ) + "." +
+ QString::number( LMMS_VERSION_MINOR ) );
+
+ if( use_artwork_path && value( "paths", "artwork" ) != "" )
{
m_artworkDir = value( "paths", "artwork" );
if( !QDir( m_artworkDir ).exists() )
@@ -313,7 +320,7 @@ void configManager::loadConfigFile()
#endif
setBackgroundArtwork( value( "paths", "backgroundartwork" ) );
}
- else
+ else if( QApplication::type() == QApplication::GuiClient )
{
QMessageBox::warning( NULL, MainWindow::tr( "Configuration file" ),
MainWindow::tr( "Error while parsing configuration file at line %1:%2: %3" ).
@@ -371,19 +378,18 @@ void configManager::loadConfigFile()
QDir::setSearchPaths( "resources", QStringList() << artworkDir()
<< defaultArtworkDir() );
- if( !QDir( m_workingDir ).exists() )
- {
- if( QMessageBox::question( 0,
+ if( !QDir( m_workingDir ).exists() &&
+ QApplication::type() == QApplication::GuiClient &&
+ QMessageBox::question( 0,
MainWindow::tr( "Working directory" ),
MainWindow::tr( "The LMMS working directory %1 does not "
"exist. Create it now? You can change the directory "
"later via Edit -> Settings." ).arg( m_workingDir ),
- QMessageBox::Yes, QMessageBox::No ) ==
- QMessageBox::Yes )
- {
- QDir().mkpath( m_workingDir );
- }
+ QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
+ {
+ QDir().mkpath( m_workingDir );
}
+
if( QDir( m_workingDir ).exists() )
{
QDir().mkpath( userProjectsDir() );
diff --git a/src/core/drumsynth.cpp b/src/core/drumsynth.cpp
index b2f02df..d55f7f8 100644
--- a/src/core/drumsynth.cpp
+++ b/src/core/drumsynth.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 1998-2000 Paul Kellett (mda-vst.com)
* Copyright (c) 2007 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/engine.cpp b/src/core/engine.cpp
index 5832368..f7864e4 100644
--- a/src/core/engine.cpp
+++ b/src/core/engine.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,7 +35,7 @@
#include "ladspa_2_lmms.h"
#include "MainWindow.h"
#include "Mixer.h"
-#include "pattern.h"
+#include "Pattern.h"
#include "PianoRoll.h"
#include "PresetPreviewPlayHandle.h"
#include "ProjectJournal.h"
@@ -43,6 +43,7 @@
#include "Plugin.h"
#include "SongEditor.h"
#include "song.h"
+#include "BandLimitedWave.h"
bool engine::s_hasGUI = true;
@@ -72,6 +73,9 @@ void engine::init( const bool _has_gui )
{
s_hasGUI = _has_gui;
+ // generate (load from file) bandlimited wavetables
+ BandLimitedWave::generateWaves();
+
initPluginFileHandling();
s_projectJournal = new ProjectJournal;
@@ -111,6 +115,7 @@ void engine::init( const bool _has_gui )
void engine::destroy()
{
+ s_projectJournal->stopAllJournalling();
s_mixer->stopProcessing();
deleteHelper( &s_projectNotes );
diff --git a/src/core/fft_helpers.cpp b/src/core/fft_helpers.cpp
index ebc95a4..71e84a8 100644
--- a/src/core/fft_helpers.cpp
+++ b/src/core/fft_helpers.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2012 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -25,7 +25,7 @@
#include "fft_helpers.h"
-#include <math.h>
+#include "lmms_math.h"
/* returns biggest value from abs_spectrum[spec_size] array
@@ -73,7 +73,7 @@ int hanming(float *timebuffer, int length, WINDOWS type)
for ( i=0; i<length; i++ )
{
- timebuffer[i]=timebuffer[i]*(alpha+(1-alpha)*cos(2*M_PI*i/((float)length-1.0)));
+ timebuffer[i]=timebuffer[i]*(alpha+(1-alpha)*cos(2*F_PI*i/((float)length-1.0)));
}
return 0;
diff --git a/src/core/ladspa_2_lmms.cpp b/src/core/ladspa_2_lmms.cpp
index d3d36c6..014a192 100644
--- a/src/core/ladspa_2_lmms.cpp
+++ b/src/core/ladspa_2_lmms.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2008 Danny McRae <khjklujn at netscape.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/ladspa_manager.cpp b/src/core/ladspa_manager.cpp
index bd533fb..fa13d0e 100644
--- a/src/core/ladspa_manager.cpp
+++ b/src/core/ladspa_manager.cpp
@@ -5,7 +5,7 @@
* Copyright (c) 2005-2008 Danny McRae <khjklujn at netscape.net>
* Copyright (c) 2011-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/main.cpp b/src/core/main.cpp
index 9263187..1249c57 100644
--- a/src/core/main.cpp
+++ b/src/core/main.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2012-2013 Paul Giblock <p/at/pgiblock.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -27,6 +27,14 @@
#include "lmmsversion.h"
#include "versioninfo.h"
+// denormals stripping
+#ifdef __SSE__
+#include <xmmintrin.h>
+#endif
+#ifdef __SSE3__
+#include <pmmintrin.h>
+#endif
+
#include <QtCore/QDir>
#include <QtCore/QFileInfo>
#include <QtCore/QLocale>
@@ -65,6 +73,7 @@
#include "ProjectRenderer.h"
#include "DataFile.h"
#include "song.h"
+#include "LmmsPalette.h"
static inline QString baseName( const QString & _file )
{
@@ -91,10 +100,20 @@ int main( int argc, char * * argv )
// intialize RNG
srand( getpid() + time( 0 ) );
+ // set denormal protection for this thread
+ #ifdef __SSE3__
+ /* DAZ flag */
+ _MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON );
+ #endif
+ #ifdef __SSE__
+ /* FTZ flag */
+ _MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON );
+ #endif
+
bool core_only = false;
bool fullscreen = true;
bool exit_after_import = false;
- QString file_to_load, file_to_save, file_to_import, render_out;
+ QString file_to_load, file_to_save, file_to_import, render_out, profilerOutputFile;
for( int i = 1; i < argc; ++i )
{
@@ -119,7 +138,6 @@ int main( int argc, char * * argv )
new QCoreApplication( argc, argv ) :
new QApplication( argc, argv ) ;
-
Mixer::qualitySettings qs( Mixer::qualitySettings::Mode_HighQuality );
ProjectRenderer::OutputSettings os( 44100, false, 160,
ProjectRenderer::Depth_16Bit );
@@ -131,13 +149,13 @@ int main( int argc, char * * argv )
if( QString( argv[i] ) == "--version" ||
QString( argv[i] ) == "-v" )
{
- printf( "\nLinux MultiMedia Studio %s\n(%s %s, Qt %s, %s)\n\n"
+ printf( "LMMS %s\n(%s %s, Qt %s, %s)\n\n"
"Copyright (c) 2004-2014 LMMS developers.\n\n"
"This program is free software; you can redistribute it and/or\n"
"modify it under the terms of the GNU General Public\n"
"License as published by the Free Software Foundation; either\n"
"version 2 of the License, or (at your option) any later version.\n\n"
- "Try \"%s --help\" for more information.\n\n", LMMS_VERSION,
+ "Try \"%s --help\" for more information.\n\n", LMMS_VERSION,
PLATFORM, MACHINE, QT_VERSION_STR, GCC_VERSION,
argv[0] );
@@ -146,7 +164,7 @@ int main( int argc, char * * argv )
else if( argc > i && ( QString( argv[i] ) == "--help" ||
QString( argv[i] ) == "-h" ) )
{
- printf( "\nLinux MultiMedia Studio %s\n"
+ printf( "LMMS %s\n"
"Copyright (c) 2004-2014 LMMS developers.\n\n"
"usage: lmms [ -r <project file> ] [ options ]\n"
" [ -u <in> <out> ]\n"
@@ -341,6 +359,11 @@ int main( int argc, char * * argv )
exit_after_import = true;
}
}
+ else if( argc > i && ( QString( argv[i] ) == "--profile" || QString( argv[i] ) == "-p" ) )
+ {
+ profilerOutputFile = argv[i+1];
+ ++i;
+ }
else
{
if( argv[i][0] == '-' )
@@ -390,7 +413,15 @@ int main( int argc, char * * argv )
if( render_out.isEmpty() )
{
// init style and palette
- QApplication::setStyle( new LmmsStyle() );
+ LmmsStyle * lmmsstyle = new LmmsStyle();
+ QApplication::setStyle( lmmsstyle );
+
+ LmmsPalette * lmmspal = new LmmsPalette( NULL, lmmsstyle );
+ QPalette lpal = lmmspal->palette();
+
+ QApplication::setPalette( lpal );
+ LmmsStyle::s_palette = &lpal;
+
// show splash screen
QSplashScreen splashScreen( embed::getIconPixmap( "splash" ) );
@@ -409,7 +440,7 @@ int main( int argc, char * * argv )
srand( getpid() + time( 0 ) );
// recover a file?
- QString recoveryFile = QDir(configManager::inst()->workingDir()).absoluteFilePath("recover.dataFile");
+ QString recoveryFile = QDir(configManager::inst()->workingDir()).absoluteFilePath("recover.mmp");
if( QFileInfo(recoveryFile).exists() &&
QMessageBox::question( engine::mainWindow(), MainWindow::tr( "Project recovery" ),
MainWindow::tr( "It looks like the last session did not end properly. "
@@ -486,6 +517,11 @@ int main( int argc, char * * argv )
SLOT( updateConsoleProgress() ) );
t->start( 200 );
+ if( profilerOutputFile.isEmpty() == false )
+ {
+ engine::mixer()->profiler().setOutputFile( profilerOutputFile );
+ }
+
// start now!
r->startProcessing();
}
diff --git a/src/core/midi/MidiAlsaRaw.cpp b/src/core/midi/MidiAlsaRaw.cpp
index 0820a4b..18670a3 100644
--- a/src/core/midi/MidiAlsaRaw.cpp
+++ b/src/core/midi/MidiAlsaRaw.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/midi/MidiAlsaSeq.cpp b/src/core/midi/MidiAlsaSeq.cpp
index 662dc43..2fd8ee1 100644
--- a/src/core/midi/MidiAlsaSeq.cpp
+++ b/src/core/midi/MidiAlsaSeq.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/midi/MidiClient.cpp b/src/core/midi/MidiClient.cpp
index 673d5f2..494641a 100644
--- a/src/core/midi/MidiClient.cpp
+++ b/src/core/midi/MidiClient.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* This file partly contains code from Fluidsynth, Peter Hanappe
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/midi/MidiController.cpp b/src/core/midi/MidiController.cpp
index 5e65b5c..81e908c 100644
--- a/src/core/midi/MidiController.cpp
+++ b/src/core/midi/MidiController.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -73,7 +73,7 @@ void MidiController::updateName()
-void MidiController::processInEvent( const MidiEvent& event, const MidiTime& time )
+void MidiController::processInEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset )
{
unsigned char controllerNum;
switch( event.type() )
diff --git a/src/core/midi/MidiOss.cpp b/src/core/midi/MidiOss.cpp
index c4cff51..0f7e0f3 100644
--- a/src/core/midi/MidiOss.cpp
+++ b/src/core/midi/MidiOss.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/midi/MidiPort.cpp b/src/core/midi/MidiPort.cpp
index 3c5bd49..2be6944 100644
--- a/src/core/midi/MidiPort.cpp
+++ b/src/core/midi/MidiPort.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -48,7 +48,7 @@ MidiPort::MidiPort( const QString& name,
m_outputControllerModel( 0, 0, MidiControllerCount, this, tr( "Output controller" ) ),
m_fixedInputVelocityModel( -1, -1, MidiMaxVelocity, this, tr( "Fixed input velocity" ) ),
m_fixedOutputVelocityModel( -1, -1, MidiMaxVelocity, this, tr( "Fixed output velocity" ) ),
- m_fixedOutputNoteModel( -1, -1, MidiMaxNote, this, tr( "Fixed output note" ) ),
+ m_fixedOutputNoteModel( -1, -1, MidiMaxKey, this, tr( "Fixed output note" ) ),
m_outputProgramModel( 1, 1, MidiProgramCount, this, tr( "Output MIDI program" ) ),
m_baseVelocityModel( MidiMaxVelocity/2, 1, MidiMaxVelocity, this, tr( "Base velocity" ) ),
m_readableModel( false, this, tr( "Receive MIDI-events" ) ),
diff --git a/src/core/midi/MidiWinMM.cpp b/src/core/midi/MidiWinMM.cpp
index 799d7f5..fdca737 100644
--- a/src/core/midi/MidiWinMM.cpp
+++ b/src/core/midi/MidiWinMM.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/note.cpp b/src/core/note.cpp
index 0b67f4a..1a24f46 100644
--- a/src/core/note.cpp
+++ b/src/core/note.cpp
@@ -1,9 +1,9 @@
/*
* note.cpp - implementation of class note
*
- * Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -50,13 +50,14 @@ note::note( const MidiTime & _length, const MidiTime & _pos,
m_pos( _pos ),
m_detuning( NULL )
{
- //saveJournallingState( false );
-// setJournalling( false );
if( _detuning )
{
m_detuning = sharedObject::ref( _detuning );
}
- //restoreJournallingState();
+ else
+ {
+ createDetuning();
+ }
}
@@ -98,7 +99,6 @@ note::~note()
void note::setLength( const MidiTime & _length )
{
-// addJournalEntry( journalEntry( ChangeLength, m_length - _length ) );
m_length = _length;
}
@@ -107,7 +107,6 @@ void note::setLength( const MidiTime & _length )
void note::setPos( const MidiTime & _pos )
{
-// addJournalEntry( journalEntry( ChangePosition, m_pos - _pos ) );
m_pos = _pos;
}
@@ -117,7 +116,6 @@ void note::setPos( const MidiTime & _pos )
void note::setKey( const int _key )
{
const int k = qBound( 0, _key, NumKeys );
-// addJournalEntry( journalEntry( ChangeKey, m_key - k ) );
m_key = k;
}
@@ -127,7 +125,6 @@ void note::setKey( const int _key )
void note::setVolume( volume_t _volume )
{
const volume_t v = qBound( MinVolume, _volume, MaxVolume );
-// addJournalEntry( journalEntry( ChangeVolume, (int) m_volume - v ) );
m_volume = v;
}
@@ -137,7 +134,6 @@ void note::setVolume( volume_t _volume )
void note::setPanning( panning_t _panning )
{
const panning_t p = qBound( PanningLeft, _panning, PanningRight );
-// addJournalEntry( journalEntry( ChangePanning, (int) m_panning - p ) );
m_panning = p;
}
@@ -213,46 +209,6 @@ void note::loadSettings( const QDomElement & _this )
-/*void note::undoStep( journalEntry & _je )
-{
- saveJournallingState( false );
- switch( static_cast<Actions>( _je.actionID() ) )
- {
- case ChangeKey:
- setKey( key() - _je.data().toInt() );
- break;
-
- case ChangeVolume:
- setVolume( getVolume() - _je.data().toInt() );
- break;
-
- case ChangePanning:
- setPanning( getPanning() - _je.data().toInt() );
- break;
-
- case ChangeLength:
- setLength( length() - _je.data().toInt() );
- break;
-
- case ChangePosition:
- setPos( pos() - _je.data().toInt() );
- break;
- }
- restoreJournallingState();
-}
-
-
-
-
-void note::redoStep( journalEntry & _je )
-{
- journalEntry je( _je.actionID(), -_je.data().toInt() );
- undoStep( je );
-}*/
-
-
-
-
void note::editDetuningPattern()
{
createDetuning();
diff --git a/src/core/project_version.cpp b/src/core/project_version.cpp
index f02fac6..15b584e 100644
--- a/src/core/project_version.cpp
+++ b/src/core/project_version.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/core/song.cpp b/src/core/song.cpp
index 46b51af..cbf51f6 100644
--- a/src/core/song.cpp
+++ b/src/core/song.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -51,7 +51,7 @@
#include "MidiClient.h"
#include "DataFile.h"
#include "NotePlayHandle.h"
-#include "pattern.h"
+#include "Pattern.h"
#include "PianoRoll.h"
#include "ProjectJournal.h"
#include "project_notes.h"
@@ -471,14 +471,14 @@ void song::playBB()
-void song::playPattern( pattern * _patternToPlay, bool _loop )
+void song::playPattern( Pattern* patternToPlay, bool _loop )
{
if( isStopped() == false )
{
stop();
}
- m_patternToPlay = _patternToPlay;
+ m_patternToPlay = patternToPlay;
m_loopPattern = _loop;
if( m_patternToPlay != NULL )
@@ -666,8 +666,7 @@ void song::addBBTrack()
{
engine::mixer()->lock();
track * t = track::create( track::BBTrack, this );
- engine::getBBTrackContainer()->setCurrentBB(
- bbTrack::numOfBBTrack( t ) );
+ engine::getBBTrackContainer()->setCurrentBB( dynamic_cast<bbTrack *>( t )->index() );
engine::mixer()->unlock();
}
@@ -877,6 +876,8 @@ void song::createNewProjectFromTemplate( const QString & _template )
// load given song
void song::loadProject( const QString & _file_name )
{
+ QDomNode node;
+
m_loadingProject = true;
clearProject();
@@ -895,6 +896,8 @@ void song::loadProject( const QString & _file_name )
return;
}
+ DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeLoad );
+
engine::mixer()->lock();
// get the header information from the DOM
@@ -918,7 +921,19 @@ void song::loadProject( const QString & _file_name )
//Backward compatibility for LMMS <= 0.4.15
PeakController::initGetControllerBySetting();
- QDomNode node = dataFile.content().firstChild();
+ // Load mixer first to be able to set the correct range for FX channels
+ node = dataFile.content().firstChildElement( engine::fxMixer()->nodeName() );
+ if( !node.isNull() )
+ {
+ engine::fxMixer()->restoreState( node.toElement() );
+ if( engine::hasGUI() )
+ {
+ // refresh FxMixerView
+ engine::fxMixerView()->refreshDisplay();
+ }
+ }
+
+ node = dataFile.content().firstChild();
while( !node.isNull() )
{
if( node.isElement() )
@@ -931,10 +946,6 @@ void song::loadProject( const QString & _file_name )
{
restoreControllerStates( node.toElement() );
}
- else if( node.nodeName() == engine::fxMixer()->nodeName() )
- {
- engine::fxMixer()->restoreState( node.toElement() );
- }
else if( engine::hasGUI() )
{
if( node.nodeName() == engine::getControllerRackView()->nodeName() )
@@ -995,6 +1006,8 @@ void song::loadProject( const QString & _file_name )
// only save current song as _filename and do nothing else
bool song::saveProjectFile( const QString & _filename )
{
+ DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeSave );
+
DataFile dataFile( DataFile::SongProject );
m_tempoModel.saveSettings( dataFile, dataFile.head(), "bpm" );
@@ -1186,12 +1199,28 @@ void song::exportProject(bool multiExport)
efd.setAcceptMode( FileDialog::AcceptSave );
- if( efd.exec() == QDialog::Accepted &&
- !efd.selectedFiles().isEmpty() && !efd.selectedFiles()[0].isEmpty() )
+ if( efd.exec() == QDialog::Accepted && !efd.selectedFiles().isEmpty() && !efd.selectedFiles()[0].isEmpty() )
{
- const QString export_file_name = efd.selectedFiles()[0];
- exportProjectDialog epd( export_file_name,
- engine::mainWindow(), multiExport );
+ QString suffix = "";
+ if ( !multiExport )
+ {
+ int stx = efd.selectedNameFilter().indexOf( "(*." );
+ int etx = efd.selectedNameFilter().indexOf( ")" );
+
+ if ( stx > 0 && etx > stx )
+ {
+ // Get first extension from selected dropdown.
+ // i.e. ".wav" from "WAV-File (*.wav), Dummy-File (*.dum)"
+ suffix = efd.selectedNameFilter().mid( stx + 2, etx - stx - 2 ).split( " " )[0].trimmed();
+ if ( efd.selectedFiles()[0].endsWith( suffix ) )
+ {
+ suffix = "";
+ }
+ }
+ }
+
+ const QString export_file_name = efd.selectedFiles()[0] + suffix;
+ exportProjectDialog epd( export_file_name, engine::mainWindow(), multiExport );
epd.exec();
}
}
diff --git a/src/core/timeline.cpp b/src/core/timeline.cpp
index 6a417f5..a67ddc3 100644
--- a/src/core/timeline.cpp
+++ b/src/core/timeline.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -47,8 +47,8 @@
QPixmap * timeLine::s_timeLinePixmap = NULL;
QPixmap * timeLine::s_posMarkerPixmap = NULL;
-QPixmap * timeLine::s_loopPointPixmap = NULL;
-
+QPixmap * timeLine::s_loopPointBeginPixmap = NULL;
+QPixmap * timeLine::s_loopPointEndPixmap = NULL;
timeLine::timeLine( const int _xoff, const int _yoff, const float _ppt,
song::playPos & _pos, const MidiTime & _begin,
@@ -81,10 +81,15 @@ timeLine::timeLine( const int _xoff, const int _yoff, const float _ppt,
s_posMarkerPixmap = new QPixmap( embed::getIconPixmap(
"playpos_marker" ) );
}
- if( s_loopPointPixmap == NULL )
+ if( s_loopPointBeginPixmap == NULL )
+ {
+ s_loopPointBeginPixmap = new QPixmap( embed::getIconPixmap(
+ "loop_point_b" ) );
+ }
+ if( s_loopPointEndPixmap == NULL )
{
- s_loopPointPixmap = new QPixmap( embed::getIconPixmap(
- "loop_point" ) );
+ s_loopPointEndPixmap = new QPixmap( embed::getIconPixmap(
+ "loop_point_e" ) );
}
setAttribute( Qt::WA_OpaquePaintEvent, true );
@@ -235,8 +240,8 @@ void timeLine::paintEvent( QPaintEvent * )
p.setPen( QColor( 0, 0, 0 ) );
p.setOpacity( loopPointsEnabled() ? 0.9 : 0.2 );
- p.drawPixmap( markerX( loopBegin() )+2, 2, *s_loopPointPixmap );
- p.drawPixmap( markerX( loopEnd() )+2, 2, *s_loopPointPixmap );
+ p.drawPixmap( markerX( loopBegin() )+2, 2, *s_loopPointBeginPixmap );
+ p.drawPixmap( markerX( loopEnd() )+2, 2, *s_loopPointEndPixmap );
p.setOpacity( 1.0 );
@@ -289,6 +294,7 @@ void timeLine::mousePressEvent( QMouseEvent* event )
}
else if( event->button() == Qt::RightButton || event->button() == Qt::MiddleButton )
{
+ m_moveXOff = s_posMarkerPixmap->width() / 2;
const MidiTime t = m_begin + static_cast<int>( event->x() * MidiTime::ticksPerTact() / m_ppt );
if( m_loopPos[0] > m_loopPos[1] )
{
diff --git a/src/core/track.cpp b/src/core/track.cpp
index f179c5d..9dfa5cf 100644
--- a/src/core/track.cpp
+++ b/src/core/track.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -149,7 +149,6 @@ void trackContentObject::movePosition( const MidiTime & _pos )
{
if( m_startPosition != _pos )
{
- addJournalEntry( JournalEntry( Move, m_startPosition - _pos ) );
m_startPosition = _pos;
engine::getSong()->updateLength();
}
@@ -170,7 +169,6 @@ void trackContentObject::changeLength( const MidiTime & _length )
{
if( m_length != _length )
{
- addJournalEntry( JournalEntry( Resize, m_length - _length ) );
m_length = _length;
engine::getSong()->updateLength();
}
@@ -180,47 +178,6 @@ void trackContentObject::changeLength( const MidiTime & _length )
-/*! \brief Undo one journal entry of this trackContentObject
- *
- * Restore the previous state of this track content object. This will
- * restore the position or the length of the track content object
- * depending on what was changed.
- *
- * \param _je The journal entry to undo
- */
-void trackContentObject::undoStep( JournalEntry & _je )
-{
- saveJournallingState( false );
- switch( _je.actionID() )
- {
- case Move:
- movePosition( startPosition() + _je.data().toInt() );
- break;
- case Resize:
- changeLength( length() + _je.data().toInt() );
- break;
- }
- restoreJournallingState();
-}
-
-
-
-
-/*! \brief Redo one journal entry of this trackContentObject
- *
- * Undoes one 'undo' of this track content object.
- *
- * \param _je The journal entry to redo
- */
-void trackContentObject::redoStep( JournalEntry & _je )
-{
- JournalEntry je( _je.actionID(), -_je.data().toInt() );
- undoStep( je );
-}
-
-
-
-
/*! \brief Copy this trackContentObject to the clipboard.
*
* Copies this track content object to the clipboard.
@@ -292,7 +249,9 @@ trackContentObjectView::trackContentObjectView( trackContentObject * _tco,
m_action( NoAction ),
m_autoResize( false ),
m_initialMouseX( 0 ),
- m_hint( NULL )
+ m_hint( NULL ),
+ m_fgColor( 0, 0, 0 ),
+ m_textColor( 0, 0, 0 )
{
if( s_textFloat == NULL )
{
@@ -303,7 +262,7 @@ trackContentObjectView::trackContentObjectView( trackContentObject * _tco,
setAttribute( Qt::WA_OpaquePaintEvent, true );
setAttribute( Qt::WA_DeleteOnClose, true );
setFocusPolicy( Qt::StrongFocus );
- setCursor( QCursor( embed::getIconPixmap( "hand" ), 0, 0 ) );
+ setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) );
move( 0, 1 );
show();
@@ -357,6 +316,23 @@ bool trackContentObjectView::fixedTCOs()
+// qproperty access functions, to be inherited & used by TCOviews
+//! \brief CSS theming qproperty access method
+QColor trackContentObjectView::fgColor() const
+{ return m_fgColor; }
+
+//! \brief CSS theming qproperty access method
+QColor trackContentObjectView::textColor() const
+{ return m_textColor; }
+
+//! \brief CSS theming qproperty access method
+void trackContentObjectView::setFgColor( const QColor & _c )
+{ m_fgColor = QColor( _c ); }
+
+//! \brief CSS theming qproperty access method
+void trackContentObjectView::setTextColor( const QColor & _c )
+{ m_textColor = QColor( _c ); }
+
/*! \brief Close a trackContentObjectView
*
@@ -383,6 +359,8 @@ bool trackContentObjectView::close()
*/
void trackContentObjectView::remove()
{
+ m_trackView->getTrack()->addJournalCheckPoint();
+
// delete ourself
close();
m_tco->deleteLater();
@@ -554,11 +532,6 @@ void trackContentObjectView::mousePressEvent( QMouseEvent * _me )
}
return;
}
- else if( _me->modifiers() & Qt::ShiftModifier )
- {
- // add/remove object to/from selection
- selectableObject::mousePressEvent( _me );
- }
else if( _me->button() == Qt::LeftButton &&
_me->modifiers() & Qt::ControlModifier )
{
@@ -577,6 +550,8 @@ void trackContentObjectView::mousePressEvent( QMouseEvent * _me )
/* engine::mainWindow()->isShiftPressed() == false &&*/
fixedTCOs() == false )
{
+ m_tco->addJournalCheckPoint();
+
// move or resize
m_tco->setJournalling( false );
@@ -613,6 +588,17 @@ void trackContentObjectView::mousePressEvent( QMouseEvent * _me )
mouseMoveEvent( _me );
s_textFloat->show();
}
+ else if( _me->button() == Qt::RightButton )
+ {
+ if( _me->modifiers() & Qt::ControlModifier )
+ {
+ m_tco->toggleMute();
+ }
+ else if( _me->modifiers() & Qt::ShiftModifier && fixedTCOs() == false )
+ {
+ remove();
+ }
+ }
else if( _me->button() == Qt::MidButton )
{
if( _me->modifiers() & Qt::ControlModifier )
@@ -770,9 +756,6 @@ void trackContentObjectView::mouseReleaseEvent( QMouseEvent * _me )
if( m_action == Move || m_action == Resize )
{
m_tco->setJournalling( true );
- m_tco->addJournalEntry( JournalEntry( m_action, m_oldTime -
- ( ( m_action == Move ) ?
- m_tco->startPosition() : m_tco->length() ) ) );
}
m_action = NoAction;
delete m_hint;
@@ -794,6 +777,11 @@ void trackContentObjectView::mouseReleaseEvent( QMouseEvent * _me )
*/
void trackContentObjectView::contextMenuEvent( QContextMenuEvent * _cme )
{
+ if( _cme->modifiers() )
+ {
+ return;
+ }
+
QMenu contextMenu( this );
if( fixedTCOs() == false )
{
@@ -867,6 +855,8 @@ trackContentWidget::trackContentWidget( trackView * _parent ) :
SIGNAL( positionChanged( const MidiTime & ) ),
this, SLOT( changePosition( const MidiTime & ) ) );
+ setStyle( QApplication::style() );
+
updateBackground();
}
@@ -897,22 +887,13 @@ void trackContentWidget::updateBackground()
m_background = QPixmap( w * 2, height() );
QPainter pmp( &m_background );
- QLinearGradient grad( 0,0, 0, h );
- grad.setColorAt( 0.0, QColor( 50, 50, 50 ) );
- grad.setColorAt( 0.33, QColor( 20, 20, 20 ) );
- grad.setColorAt( 1.0, QColor( 15, 15, 15 ) );
- pmp.fillRect( 0, 0, w, h, grad );
-
- QLinearGradient grad2( 0,0, 0, h );
- grad2.setColorAt( 0.0, QColor( 50, 50, 50 ) );
- grad2.setColorAt( 0.33, QColor( 40, 40, 40 ) );
- grad2.setColorAt( 1.0, QColor( 30, 30, 30 ) );
- pmp.fillRect( w, 0, w , h, grad2 );
+ pmp.fillRect( 0, 0, w, h, darkerColor() );
+ pmp.fillRect( w, 0, w , h, lighterColor() );
// draw lines
pmp.setPen( QPen( QColor( 0, 0, 0, 160 ), 1 ) );
// horizontal line
- pmp.drawLine( 0, 0, w*2, 0 );
+ pmp.drawLine( 0, h-1, w*2, h-1 );
// vertical lines
for( float x = 0; x < w * 2; x += ppt )
@@ -945,9 +926,6 @@ void trackContentWidget::updateBackground()
void trackContentWidget::addTCOView( trackContentObjectView * _tcov )
{
trackContentObject * tco = _tcov->getTrackContentObject();
-/* QMap<QString, QVariant> map;
- map["id"] = tco->id();
- addJournalEntry( JournalEntry( AddTrackContentObject, map ) );*/
m_tcoViews.push_back( _tcov );
@@ -972,14 +950,6 @@ void trackContentWidget::removeTCOView( trackContentObjectView * _tcov )
_tcov );
if( it != m_tcoViews.end() )
{
-/* QMap<QString, QVariant> map;
- DataFile dataFile( DataFile::JournalData );
- _tcov->getTrackContentObject()->saveState( dataFile, dataFile.content() );
- map["id"] = _tcov->getTrackContentObject()->id();
- map["state"] = dataFile.toString();
- addJournalEntry( JournalEntry( RemoveTrackContentObject,
- map ) );*/
-
m_tcoViews.erase( it );
engine::getSong()->setModified();
}
@@ -1121,6 +1091,7 @@ void trackContentWidget::dropEvent( QDropEvent * _de )
{
const MidiTime pos = getPosition( _de->pos().x()
).getTact() * MidiTime::ticksPerTact();
+ getTrack()->addJournalCheckPoint();
trackContentObject * tco = getTrack()->createTCO( pos );
// value contains our XML-data so simply create a
@@ -1209,71 +1180,6 @@ void trackContentWidget::resizeEvent( QResizeEvent * resizeEvent )
-/*! \brief Undo an action on the trackContentWidget
- *
- * \param _je the details of the edit journal
- */
-void trackContentWidget::undoStep( JournalEntry & _je )
-{
- saveJournallingState( false );
- switch( _je.actionID() )
- {
- case AddTrackContentObject:
- {
- QMap<QString, QVariant> map = _je.data().toMap();
- trackContentObject * tco =
- dynamic_cast<trackContentObject *>(
- engine::projectJournal()->journallingObject( map["id"].toInt() ) );
- DataFile dataFile( DataFile::JournalData );
- tco->saveState( dataFile, dataFile.content() );
- map["state"] = dataFile.toString();
- _je.data() = map;
- tco->deleteLater();
- break;
- }
-
- case RemoveTrackContentObject:
- {
- trackContentObject * tco = getTrack()->createTCO( MidiTime( 0 ) );
- DataFile dataFile(
- _je.data().toMap()["state"].
- toString().toUtf8() );
- tco->restoreState( dataFile.content().firstChild().toElement() );
- break;
- }
- }
- restoreJournallingState();
-}
-
-
-
-
-/*! \brief Redo an action of the trackContentWidget
- *
- * \param _je the entry in the edit journal to redo.
- */
-void trackContentWidget::redoStep( JournalEntry & _je )
-{
- switch( _je.actionID() )
- {
- case AddTrackContentObject:
- case RemoveTrackContentObject:
- _je.actionID() = ( _je.actionID() ==
- AddTrackContentObject ) ?
- RemoveTrackContentObject :
- AddTrackContentObject;
- undoStep( _je );
- _je.actionID() = ( _je.actionID() ==
- AddTrackContentObject ) ?
- RemoveTrackContentObject :
- AddTrackContentObject;
- break;
- }
-}
-
-
-
-
/*! \brief Return the track shown by the trackContentWidget
*
*/
@@ -1312,7 +1218,22 @@ MidiTime trackContentWidget::endPosition( const MidiTime & _pos_start )
}
+// qproperty access methods
+//! \brief CSS theming qproperty access method
+QBrush trackContentWidget::darkerColor() const
+{ return m_darkerColor; }
+
+//! \brief CSS theming qproperty access method
+QBrush trackContentWidget::lighterColor() const
+{ return m_lighterColor; }
+
+//! \brief CSS theming qproperty access method
+void trackContentWidget::setDarkerColor( const QBrush & c )
+{ m_darkerColor = c; }
+//! \brief CSS theming qproperty access method
+void trackContentWidget::setLighterColor( const QBrush & c )
+{ m_lighterColor = c; }
@@ -1484,6 +1405,14 @@ void trackOperationsWidget::cloneTrack()
}
+/*! \brief Clear this track - clears all TCOs from the track */
+void trackOperationsWidget::clearTrack()
+{
+ engine::mixer()->lock();
+ m_trackView->getTrack()->deleteTCOs();
+ engine::mixer()->unlock();
+}
+
/*! \brief Remove this track from the track list
@@ -1501,6 +1430,9 @@ void trackOperationsWidget::removeTrack()
*
* For all track types, we have the Clone and Remove options.
* For instrument-tracks we also offer the MIDI-control-menu
+ * For automation tracks, extra options: turn on/off recording
+ * on all TCOs (same should be added for sample tracks when
+ * sampletrack recording is implemented)
*/
void trackOperationsWidget::updateMenu()
{
@@ -1512,6 +1444,11 @@ void trackOperationsWidget::updateMenu()
to_menu->addAction( embed::getIconPixmap( "cancel", 16, 16 ),
tr( "Remove this track" ),
this, SLOT( removeTrack() ) );
+
+ if( ! m_trackView->trackContainerView()->fixedTCOs() )
+ {
+ to_menu->addAction( tr( "Clear this track" ), this, SLOT( clearTrack() ) );
+ }
if( dynamic_cast<InstrumentTrackView *>( m_trackView ) )
{
@@ -1519,11 +1456,45 @@ void trackOperationsWidget::updateMenu()
to_menu->addMenu( dynamic_cast<InstrumentTrackView *>(
m_trackView )->midiMenu() );
}
+ if( dynamic_cast<AutomationTrackView *>( m_trackView ) )
+ {
+ to_menu->addAction( tr( "Turn all recording on" ), this, SLOT( recordingOn() ) );
+ to_menu->addAction( tr( "Turn all recording off" ), this, SLOT( recordingOff() ) );
+ }
}
+void trackOperationsWidget::recordingOn()
+{
+ AutomationTrackView * atv = dynamic_cast<AutomationTrackView *>( m_trackView );
+ if( atv )
+ {
+ const track::tcoVector & tcov = atv->getTrack()->getTCOs();
+ for( track::tcoVector::const_iterator it = tcov.begin(); it != tcov.end(); it++ )
+ {
+ AutomationPattern * ap = dynamic_cast<AutomationPattern *>( *it );
+ if( ap ) { ap->setRecording( true ); }
+ }
+ atv->update();
+ }
+}
+void trackOperationsWidget::recordingOff()
+{
+ AutomationTrackView * atv = dynamic_cast<AutomationTrackView *>( m_trackView );
+ if( atv )
+ {
+ const track::tcoVector & tcov = atv->getTrack()->getTCOs();
+ for( track::tcoVector::const_iterator it = tcov.begin(); it != tcov.end(); it++ )
+ {
+ AutomationPattern * ap = dynamic_cast<AutomationPattern *>( *it );
+ if( ap ) { ap->setRecording( false ); }
+ }
+ atv->update();
+ }
+}
+
// ===========================================================================
// track
@@ -1815,6 +1786,14 @@ void track::removeTCO( trackContentObject * _tco )
}
+/*! \brief Remove all TCOs from this track */
+void track::deleteTCOs()
+{
+ while( ! m_trackContentObjects.isEmpty() )
+ {
+ delete m_trackContentObjects.first();
+ }
+}
/*! \brief Return the number of trackContentObjects we contain
@@ -2227,55 +2206,6 @@ void trackView::modelChanged()
-/*! \brief Undo a change to this track View.
- *
- * \param _je the Journal Entry to undo.
- */
-void trackView::undoStep( JournalEntry & _je )
-{
- saveJournallingState( false );
- switch( _je.actionID() )
- {
- case MoveTrack:
- if( _je.data().toInt() > 0 )
- {
- m_trackContainerView->moveTrackViewUp( this );
- }
- else
- {
- m_trackContainerView->moveTrackViewDown( this );
- }
- break;
- case ResizeTrack:
- setFixedHeight( qMax<int>( height() +
- _je.data().toInt(),
- MINIMAL_TRACK_HEIGHT ) );
- m_trackContainerView->realignTracks();
- break;
- /*case RestoreTrack:
- setFixedHeight( DEFAULT_TRACK_HEIGHT );
- m_trackContainerView->realignTracks();
- break; */
- }
- restoreJournallingState();
-}
-
-
-
-
-/*! \brief Redo a change to this track View.
- *
- * \param _je the Journal Event to redo.
- */
-void trackView::redoStep( JournalEntry & _je )
-{
- JournalEntry je( _je.actionID(), -_je.data().toInt() );
- undoStep( je );
-}
-
-
-
-
/*! \brief Start a drag event on this track View.
*
* \param _dee the DragEnterEvent to start.
@@ -2408,7 +2338,7 @@ void trackView::mouseMoveEvent( QMouseEvent * _me )
// debug code
// qDebug( "y position %d", y_pos );
-
+
// a track-widget not equal to ourself?
if( track_at_y != NULL && track_at_y != this )
{
@@ -2421,7 +2351,6 @@ void trackView::mouseMoveEvent( QMouseEvent * _me )
{
m_trackContainerView->moveTrackViewDown( this );
}
- addJournalEntry( JournalEntry( MoveTrack, _me->y() ) );
}
}
else if( m_action == ResizeTrack )
diff --git a/src/gui/AutomatableModelView.cpp b/src/gui/AutomatableModelView.cpp
index e60d042..577d5ad 100644
--- a/src/gui/AutomatableModelView.cpp
+++ b/src/gui/AutomatableModelView.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2011-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -41,7 +41,7 @@ AutomatableModelView::AutomatableModelView( ::Model* model, QWidget* _this ) :
m_unit( QString::null )
{
widget()->setAcceptDrops( true );
- widget()->setCursor( QCursor( embed::getIconPixmap( "hand" ), 0, 0 ) );
+ widget()->setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) );
}
diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp
index b58e49f..e45097e 100644
--- a/src/gui/AutomationEditor.cpp
+++ b/src/gui/AutomationEditor.cpp
@@ -1,12 +1,12 @@
/*
* AutomationEditor.cpp - implementation of AutomationEditor which is used for
- * actual setting of dynamic values
+ * actual setting of dynamic values
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2008-2013 Paul Giblock <pgib/at/users.sourceforge.net>
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -40,7 +40,6 @@
#include <QToolTip>
-
#ifndef __USE_XOPEN
#define __USE_XOPEN
#endif
@@ -63,7 +62,7 @@
#include "bb_track_container.h"
#include "PianoRoll.h"
#include "debug.h"
-
+#include "MeterModel.h"
QPixmap * AutomationEditor::s_toolDraw = NULL;
@@ -72,8 +71,6 @@ QPixmap * AutomationEditor::s_toolSelect = NULL;
QPixmap * AutomationEditor::s_toolMove = NULL;
-const QColor DRAGGABLE_PIN_COLOR = QColor( 0xFF, 0x00, 0x00 );
-const QColor DRAGGABLE_PIN_BORDER_COLOR = QColor( 0xFF, 0xFF, 0xFF );
AutomationEditor::AutomationEditor() :
@@ -99,12 +96,17 @@ AutomationEditor::AutomationEditor() :
m_y_delta( DEFAULT_Y_DELTA ),
m_y_auto( TRUE ),
m_editMode( DRAW ),
- m_scrollBack( FALSE )
+ m_scrollBack( FALSE ),
+ m_gridColor( 0,0,0 ),
+ m_graphColor(),
+ m_vertexColor( 0,0,0 ),
+ m_scaleColor()
{
connect( this, SIGNAL( currentPatternChanged() ),
this, SLOT( updateAfterPatternChange() ),
Qt::QueuedConnection );
-
+ connect( engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ),
+ this, SLOT( update() ) );
// init pixmaps
if( s_toolDraw == NULL )
{
@@ -358,7 +360,7 @@ AutomationEditor::AutomationEditor() :
m_zoomingYComboBox->setFixedSize( 80, 22 );
m_zoomingYModel.addItem( "Auto" );
- for( int i = 0; i < 6; ++i )
+ for( int i = 0; i < 7; ++i )
{
m_zoomingYModel.addItem( QString::number( 25 << i ) + "%" );
}
@@ -377,15 +379,13 @@ AutomationEditor::AutomationEditor() :
m_quantizeComboBox = new comboBox( m_toolBar );
m_quantizeComboBox->setFixedSize( 60, 22 );
- // TODO: leak
- ComboBoxModel * quantize_model = new ComboBoxModel( /* this */ );
for( int i = 0; i < 7; ++i )
{
- quantize_model->addItem( "1/" + QString::number( 1 << i ) );
+ m_quantizeModel.addItem( "1/" + QString::number( 1 << i ) );
}
- quantize_model->setValue( quantize_model->findText( "1/16" ) );
+ m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) );
- m_quantizeComboBox->setModel( quantize_model );
+ m_quantizeComboBox->setModel( &m_quantizeModel );
tb_layout->addSpacing( 5 );
@@ -456,7 +456,10 @@ AutomationEditor::~AutomationEditor()
{
m_zoomingXModel.disconnect();
m_zoomingYModel.disconnect();
+ m_quantizeModel.disconnect();
m_tensionModel->disconnect();
+
+ delete m_tensionModel;
}
@@ -502,6 +505,24 @@ void AutomationEditor::setPauseIcon( bool pause )
}
}
+// qproperty access methods
+
+QColor AutomationEditor::gridColor() const
+{ return m_gridColor; }
+QBrush AutomationEditor::graphColor() const
+{ return m_graphColor; }
+QColor AutomationEditor::vertexColor() const
+{ return m_vertexColor; }
+QBrush AutomationEditor::scaleColor() const
+{ return m_scaleColor; }
+void AutomationEditor::setGridColor( const QColor & c )
+{ m_gridColor = c; }
+void AutomationEditor::setGraphColor( const QBrush & c )
+{ m_graphColor = c; }
+void AutomationEditor::setVertexColor( const QColor & c )
+{ m_vertexColor = c; }
+void AutomationEditor::setScaleColor( const QBrush & c )
+{ m_scaleColor = c; }
@@ -820,7 +841,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me )
x -= VALUES_WIDTH;
// get tick in which the user clicked
- int pos_ticks = x * DefaultTicksPerTact / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
m_currentPosition;
// get time map of current pattern
@@ -840,7 +861,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me )
len > 0 &&
( it+1==time_map.end() ||
pos_ticks <= (it+1).key() ) &&
- ( pos_ticks<= it.key() + DefaultTicksPerTact *4 / m_ppt ) &&
+ ( pos_ticks<= it.key() + MidiTime::ticksPerTact() *4 / m_ppt ) &&
level <= it.value() )
{
break;
@@ -884,7 +905,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me )
int aligned_x = (int)( (float)( (
it.key() -
m_currentPosition ) *
- m_ppt ) / DefaultTicksPerTact );
+ m_ppt ) / MidiTime::ticksPerTact() );
m_moveXOffset = x - aligned_x - 1;
// set move-cursor
QCursor c( Qt::SizeAllCursor );
@@ -993,7 +1014,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me )
x -= m_moveXOffset;
}
- int pos_ticks = x * DefaultTicksPerTact / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
m_currentPosition;
if( _me->buttons() & Qt::LeftButton && m_editMode == DRAW )
{
@@ -1117,7 +1138,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me )
}
// get tick in which the cursor is posated
- int pos_ticks = x * DefaultTicksPerTact / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
m_currentPosition;
m_selectedTick = pos_ticks - m_selectStartTick;
@@ -1138,7 +1159,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me )
// move selection + selected values
// do horizontal move-stuff
- int pos_ticks = x * DefaultTicksPerTact / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
m_currentPosition;
int ticks_diff = pos_ticks -
m_moveStartTick;
@@ -1163,8 +1184,8 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me )
}
m_selectStartTick += ticks_diff;
- int tact_diff = ticks_diff / DefaultTicksPerTact;
- ticks_diff = ticks_diff % DefaultTicksPerTact;
+ int tact_diff = ticks_diff / MidiTime::ticksPerTact();
+ ticks_diff = ticks_diff % MidiTime::ticksPerTact();
// do vertical move-stuff
@@ -1214,19 +1235,19 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me )
{
int value_tact =
( it.key() /
- DefaultTicksPerTact )
+ MidiTime::ticksPerTact() )
+ tact_diff;
int value_ticks =
( it.key() %
- DefaultTicksPerTact )
+ MidiTime::ticksPerTact() )
+ ticks_diff;
// ensure value_ticks range
- if( value_ticks / DefaultTicksPerTact )
+ if( value_ticks / MidiTime::ticksPerTact() )
{
value_tact += value_ticks
- / DefaultTicksPerTact;
+ / MidiTime::ticksPerTact();
value_ticks %=
- DefaultTicksPerTact;
+ MidiTime::ticksPerTact();
}
m_pattern->removeValue( it.key() );
new_value_pos = MidiTime( value_tact,
@@ -1277,7 +1298,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me )
}
// get tick in which the cursor is posated
- int pos_ticks = x * DefaultTicksPerTact / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
m_currentPosition;
m_selectedTick = pos_ticks -
@@ -1340,7 +1361,8 @@ inline void AutomationEditor::drawCross( QPainter & _p )
QPoint tt_pos = QCursor::pos();
tt_pos.ry() -= 64;
tt_pos.rx() += 32;
- QToolTip::showText( tt_pos,QString::number( level ),this);
+ float scaledLevel = m_pattern->firstObject()->scaledValue( level );
+ QToolTip::showText( tt_pos, QString::number( scaledLevel ), this );
}
@@ -1350,13 +1372,10 @@ inline void AutomationEditor::drawAutomationPoint( QPainter & p, timeMap::iterat
{
int x = xCoordOfTick( it.key() );
int y = yCoordOfLevel( it.value() );
- int outerRadius = qMin( 8, m_ppt/quantization() );
- int innerRadius = qMax( 0, outerRadius-2 );
- p.setBrush( QBrush( DRAGGABLE_PIN_BORDER_COLOR ) );
- p.drawEllipse( x-outerRadius/2, y-outerRadius/2, outerRadius, outerRadius );
- p.setBrush( QBrush( DRAGGABLE_PIN_COLOR ) );
- p.drawEllipse( x-innerRadius/2, y-innerRadius/2, innerRadius, innerRadius );
- p.setBrush( QBrush() );
+ const int outerRadius = qBound( 2, ( m_ppt * quantization() ) / 576, 5 ); // man, getting this calculation right took forever
+ p.setPen( QPen( vertexColor().lighter( 200 ) ) );
+ p.setBrush( QBrush( vertexColor() ) );
+ p.drawEllipse( x - outerRadius, y - outerRadius, outerRadius * 2, outerRadius * 2 );
}
@@ -1371,6 +1390,12 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
QPainter p( this );
style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this );
+ // get foreground color
+ QColor fgColor = p.pen().brush().color();
+ // get background color and fill background
+ QBrush bgColor = p.background();
+ p.fillRect( 0, 0, width(), height(), bgColor );
+
// set font-size to 8
p.setFont( pointSize<8>( p.font() ) );
@@ -1380,7 +1405,7 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
int grid_bottom = height() - SCROLLBAR_SIZE - 1;
p.fillRect( 0, TOP_MARGIN, VALUES_WIDTH, height() - TOP_MARGIN,
- QColor( 0x33, 0x33, 0x33 ) );
+ scaleColor() );
// print value numbers
int font_height = p.fontMetrics().height();
@@ -1397,11 +1422,12 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
{
const QString & label = m_pattern->firstObject()
->displayValue( level[i] );
- p.setPen( QColor( 240, 240, 240 ) );
+ p.setPen( QApplication::palette().color( QPalette::Active,
+ QPalette::Shadow ) );
p.drawText( 1, y[i] - font_height + 1,
VALUES_WIDTH - 10, 2 * font_height,
text_flags, label );
- p.setPen( QColor( 0, 0, 0 ) );
+ p.setPen( fgColor );
p.drawText( 0, y[i] - font_height,
VALUES_WIDTH - 10, 2 * font_height,
text_flags, label );
@@ -1425,11 +1451,12 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
const QString & label = m_pattern->firstObject()
->displayValue( level );
y = yCoordOfLevel( level );
- p.setPen( QColor( 240, 240, 240 ) );
+ p.setPen( QApplication::palette().color( QPalette::Active,
+ QPalette::Shadow ) );
p.drawText( 1, y - font_height + 1,
VALUES_WIDTH - 10, 2 * font_height,
text_flags, label );
- p.setPen( QColor( 0, 0, 0 ) );
+ p.setPen( fgColor );
p.drawText( 0, y - font_height,
VALUES_WIDTH - 10, 2 * font_height,
text_flags, label );
@@ -1443,46 +1470,54 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
grid_height );
// draw vertical raster
- int tact_16th = m_currentPosition / ( DefaultTicksPerTact / 16 );
- const int offset = ( m_currentPosition % (DefaultTicksPerTact/16) ) *
- m_ppt / DEFAULT_STEPS_PER_TACT / 8;
-
+ QColor lineColor = QColor( gridColor() );
if( m_pattern )
{
+ int tick, x;
int x_line_end = (int)( m_y_auto || m_topLevel < m_maxLevel ?
TOP_MARGIN :
grid_bottom - ( m_topLevel - m_bottomLevel )
* m_y_delta );
-
- for( int x = VALUES_WIDTH - offset; x < width();
- x += m_ppt / DEFAULT_STEPS_PER_TACT, ++tact_16th )
+ // 3 independent loops, because quantization might not divide evenly into
+ // exotic denominators (e.g. 7/11 time), which are allowed ATM.
+ // First quantization grid...
+ for( tick = m_currentPosition - m_currentPosition % quantization(),
+ x = xCoordOfTick( tick );
+ x<=width();
+ tick += quantization(), x = xCoordOfTick( tick ) )
{
- if( x >= VALUES_WIDTH )
- {
- // every tact-start needs to be a bright line
- if( tact_16th % 16 == 0 )
- {
- p.setPen( QColor( 0x7F, 0x7F, 0x7F ) );
- }
- // normal line
- else if( tact_16th % 4 == 0 )
- {
- p.setPen( QColor( 0x5F, 0x5F, 0x5F ) );
- }
- // weak line
- else
- {
- p.setPen( QColor( 0x3F, 0x3F, 0x3F ) );
- }
- p.drawLine( x, grid_bottom, x, x_line_end );
- }
+ lineColor.setAlpha( 80 );
+ p.setPen( lineColor );
+ p.drawLine( x, grid_bottom, x, x_line_end );
+ }
+ // Then beat grid
+ int ticksPerBeat = DefaultTicksPerTact /
+ engine::getSong()->getTimeSigModel().getDenominator();
+ for( tick = m_currentPosition - m_currentPosition % ticksPerBeat,
+ x = xCoordOfTick( tick );
+ x<=width();
+ tick += ticksPerBeat, x = xCoordOfTick( tick ) )
+ {
+ lineColor.setAlpha( 160 );
+ p.setPen( lineColor );
+ p.drawLine( x, grid_bottom, x, x_line_end );
+ }
+ // and finally bars
+ for( tick = m_currentPosition - m_currentPosition % MidiTime::ticksPerTact(),
+ x = xCoordOfTick( tick );
+ x<=width();
+ tick += MidiTime::ticksPerTact(), x = xCoordOfTick( tick ) )
+ {
+ lineColor.setAlpha( 255 );
+ p.setPen( lineColor );
+ p.drawLine( x, grid_bottom, x, x_line_end );
}
- // TODO: move this horizontal line drawing code into the same loop as
- // the value ticks?
+ /// \todo move this horizontal line drawing code into the same loop as the value ticks?
if( m_y_auto )
{
- QPen pen( QColor( 0x4F, 0x4F, 0x4F ) );
+ lineColor.setAlpha( 160 );
+ QPen pen( lineColor );
p.setPen( pen );
p.drawLine( VALUES_WIDTH, grid_bottom, width(),
grid_bottom );
@@ -1503,11 +1538,13 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
y = yCoordOfLevel( (float)level );
if( level % 5 == 0 )
{
- p.setPen( QColor( 0x4F, 0x4F, 0x4F ) );
+ lineColor.setAlpha( 160 );
+ p.setPen( lineColor );
}
else
{
- p.setPen( QColor( 0x3F, 0x3F, 0x3F ) );
+ lineColor.setAlpha( 80 );
+ p.setPen( lineColor );
}
// draw level line
@@ -1544,8 +1581,7 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
//Don't bother doing/rendering anything if there is no automation points
if( time_map.size() > 0 )
{
- timeMap::iterator it = time_map.begin();
- p.setPen( QColor( 0xCF, 0xD9, 0xFF ) );
+ timeMap::iterator it = time_map.begin();
while( it+1 != time_map.end() )
{
// skip this section if it occurs completely before the
@@ -1582,10 +1618,11 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
{
is_selected = TRUE;
}
-
+
float *values = m_pattern->valuesAfter( it.key() );
for( int i = 0; i < (it+1).key() - it.key(); i++ )
{
+
drawLevelTick( p, it.key() + i, values[i],
is_selected );
}
@@ -1614,7 +1651,8 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
QFont f = p.font();
f.setBold( TRUE );
p.setFont( pointSize<14>( f ) );
- p.setPen( QColor( 74, 253, 133 ) );
+ p.setPen( QApplication::palette().color( QPalette::Active,
+ QPalette::BrightText ) );
p.drawText( VALUES_WIDTH + 20, TOP_MARGIN + 40,
width() - VALUES_WIDTH - 20 - SCROLLBAR_SIZE,
grid_height - 40, Qt::TextWordWrap,
@@ -1624,8 +1662,8 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
// now draw selection-frame
int x = ( sel_pos_start - m_currentPosition ) * m_ppt /
- DefaultTicksPerTact;
- int w = ( sel_pos_end - sel_pos_start ) * m_ppt / DefaultTicksPerTact;
+ MidiTime::ticksPerTact();
+ int w = ( sel_pos_end - sel_pos_start ) * m_ppt / MidiTime::ticksPerTact();
int y, h;
if( m_y_auto )
{
@@ -1679,7 +1717,7 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe )
int AutomationEditor::xCoordOfTick( int _tick )
{
return VALUES_WIDTH + ( ( _tick - m_currentPosition )
- * m_ppt / DefaultTicksPerTact );
+ * m_ppt / MidiTime::ticksPerTact() );
}
@@ -1733,17 +1771,18 @@ void AutomationEditor::drawLevelTick( QPainter & _p, int _tick, float _level,
rect_height = (int)( _level * m_y_delta );
}
- QColor current_color( 0x9F, 0xAF, 0xFF );
- if( _is_selected == TRUE )
- {
- current_color.setRgb( 0x00, 0x40, 0xC0 );
- }
- _p.fillRect( x, y_start, rect_width, rect_height, current_color );
+ QBrush currentColor = _is_selected
+ ? QBrush( QColor( 0x00, 0x40, 0xC0 ) )
+ : graphColor();
+
+ _p.fillRect( x, y_start, rect_width, rect_height, currentColor );
}
+
else
{
printf("not in range\n");
}
+
}
@@ -1795,26 +1834,49 @@ void AutomationEditor::resizeEvent( QResizeEvent * )
void AutomationEditor::wheelEvent( QWheelEvent * _we )
{
_we->accept();
- if( _we->modifiers() & Qt::ControlModifier )
+ if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::ShiftModifier )
+ {
+ int y = m_zoomingYModel.value();
+ if( _we->delta() > 0 )
+ {
+ y++;
+ }
+ if( _we->delta() < 0 )
+ {
+ y--;
+ }
+ y = qBound( 0, y, m_zoomingYModel.size() - 1 );
+ m_zoomingYModel.setValue( y );
+ }
+ else if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::AltModifier )
{
+ int q = m_quantizeModel.value();
if( _we->delta() > 0 )
{
- m_ppt = qMin( m_ppt * 2, m_y_delta *
- DEFAULT_STEPS_PER_TACT * 8 );
+ q--;
}
- else if( m_ppt >= 72 )
+ if( _we->delta() < 0 )
{
- m_ppt /= 2;
+ q++;
}
- // update combobox with zooming-factor
- m_zoomingXComboBox->model()->setValue(
- m_zoomingXComboBox->model()->findText( QString::number(
- qRound( m_ppt * 100 /
- DEFAULT_PPT ) ) +"%" ) );
- // update timeline
- m_timeLine->setPixelsPerTact( m_ppt );
+ q = qBound( 0, q, m_quantizeModel.size() - 1 );
+ m_quantizeModel.setValue( q );
update();
}
+ else if( _we->modifiers() & Qt::ControlModifier )
+ {
+ int x = m_zoomingXModel.value();
+ if( _we->delta() > 0 )
+ {
+ x++;
+ }
+ if( _we->delta() < 0 )
+ {
+ x--;
+ }
+ x = qBound( 0, x, m_zoomingXModel.size() - 1 );
+ m_zoomingXModel.setValue( x );
+ }
else if( _we->modifiers() & Qt::ShiftModifier
|| _we->orientation() == Qt::Horizontal )
{
@@ -1837,17 +1899,10 @@ float AutomationEditor::getLevel( int _y )
// pressed level
float level = roundf( ( m_bottomLevel + ( m_y_auto ?
( m_maxLevel - m_minLevel ) * ( level_line_y - _y )
- / (float)( level_line_y - TOP_MARGIN ) :
+ / (float)( level_line_y - ( TOP_MARGIN + 2 ) ) :
( level_line_y - _y ) / (float)m_y_delta ) ) / m_step ) * m_step;
// some range-checking-stuff
- if( level < m_bottomLevel )
- {
- level = m_bottomLevel;
- }
- else if( level > m_topLevel )
- {
- level = m_topLevel;
- }
+ level = qBound( m_bottomLevel, level, m_topLevel );
return( level );
}
@@ -1879,7 +1934,7 @@ void AutomationEditor::play()
if( engine::getSong()->playMode() != song::Mode_PlayPattern )
{
engine::getSong()->stop();
- engine::getSong()->playPattern( (pattern *) engine::pianoRoll()->currentPattern() );
+ engine::getSong()->playPattern( (Pattern *) engine::pianoRoll()->currentPattern() );
}
else if( engine::getSong()->isStopped() == false )
{
@@ -1887,7 +1942,7 @@ void AutomationEditor::play()
}
else
{
- engine::getSong()->playPattern( (pattern *) engine::pianoRoll()->currentPattern() );
+ engine::getSong()->playPattern( (Pattern *) engine::pianoRoll()->currentPattern() );
}
}
else if( inBBEditor() )
@@ -2124,7 +2179,7 @@ void AutomationEditor::getSelectedValues( timeMap & _selected_values )
++it )
{
//TODO: Add constant
- tick_t len_ticks = DefaultTicksPerTact / 16;
+ tick_t len_ticks = MidiTime::ticksPerTact() / 16;
float level = it.value();
tick_t pos_ticks = it.key();
@@ -2258,17 +2313,17 @@ void AutomationEditor::updatePosition( const MidiTime & _t )
m_scrollBack == TRUE )
{
const int w = width() - VALUES_WIDTH;
- if( _t > m_currentPosition + w * DefaultTicksPerTact / m_ppt )
+ if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt )
{
m_leftRightScroll->setValue( _t.getTact() *
- DefaultTicksPerTact );
+ MidiTime::ticksPerTact() );
}
else if( _t < m_currentPosition )
{
- MidiTime t = qMax( _t - w * DefaultTicksPerTact *
- DefaultTicksPerTact / m_ppt, 0 );
+ MidiTime t = qMax( _t - w * MidiTime::ticksPerTact() *
+ MidiTime::ticksPerTact() / m_ppt, 0 );
m_leftRightScroll->setValue( t.getTact() *
- DefaultTicksPerTact );
+ MidiTime::ticksPerTact() );
}
m_scrollBack = FALSE;
}
diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp
index 9cec792..1439d7e 100644
--- a/src/gui/AutomationPatternView.cpp
+++ b/src/gui/AutomationPatternView.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -38,6 +38,7 @@
#include "tooltip.h"
+QPixmap * AutomationPatternView::s_pat_rec = NULL;
AutomationPatternView::AutomationPatternView( AutomationPattern * _pattern,
trackView * _parent ) :
@@ -58,6 +59,9 @@ AutomationPatternView::AutomationPatternView( AutomationPattern * _pattern,
toolTip::add( this, tr( "double-click to open this pattern in "
"automation editor" ) );
setStyle( QApplication::style() );
+
+ if( s_pat_rec == NULL ) { s_pat_rec = new QPixmap( embed::getIconPixmap(
+ "pat_rec" ) ); }
}
@@ -134,6 +138,11 @@ void AutomationPatternView::disconnectObject( QAction * _a )
}
+void AutomationPatternView::toggleRecording()
+{
+ m_pat->setRecording( ! m_pat->isRecording() );
+ update();
+}
void AutomationPatternView::constructContextMenu( QMenu * _cm )
@@ -156,6 +165,9 @@ void AutomationPatternView::constructContextMenu( QMenu * _cm )
_cm->addAction( embed::getIconPixmap( "edit_rename" ),
tr( "Change name" ),
this, SLOT( changeName() ) );
+ _cm->addAction( embed::getIconPixmap( "record" ),
+ tr( "Set/clear record" ),
+ this, SLOT( toggleRecording() ) );
if( !m_pat->m_objects.isEmpty() )
{
_cm->addSeparator();
@@ -236,12 +248,6 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
p.setPen( c.lighter( 130 ) );
p.drawRect( 1, 1, width()-3, height()-3 );
- p.setBrush( QBrush() );
- if( engine::automationEditor()->currentPattern() == m_pat )
- p.setPen( c.lighter( 130 ) );
- else
- p.setPen( c.darker( 300 ) );
- p.drawRect( 0, 0, width()-1, height()-1 );
const float ppt = fixedTCOs() ?
( parentWidget()->width() - 2 * TCO_BORDER_WIDTH )
@@ -273,8 +279,9 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
QLinearGradient lin2grad( 0, min, 0, max );
- lin2grad.setColorAt( 1, c.lighter( 200 ) );
- lin2grad.setColorAt( 0, c );
+ lin2grad.setColorAt( 1, fgColor().lighter( 150 ) );
+ lin2grad.setColorAt( 0.5, fgColor() );
+ lin2grad.setColorAt( 0, fgColor().darker( 150 ) );
for( AutomationPattern::timeMap::const_iterator it =
m_pat->getTimeMap().begin();
@@ -309,11 +316,27 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
}
p.resetMatrix();
+
+ // recording icon for when recording automation
+ if( m_pat->isRecording() )
+ {
+ p.drawPixmap( 4, 14, *s_pat_rec );
+ }
+
+ // outer edge
+ p.setBrush( QBrush() );
+ if( engine::automationEditor()->currentPattern() == m_pat )
+ p.setPen( c.lighter( 130 ) );
+ else
+ p.setPen( c.darker( 300 ) );
+ p.drawRect( 0, 0, width()-1, height()-1 );
+
+ // pattern name
p.setFont( pointSize<8>( p.font() ) );
QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
? QColor( 30, 30, 30 )
- : QColor( 255, 255, 255 );
+ : textColor();
p.setPen( QColor( 0, 0, 0 ) );
p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() );
@@ -326,6 +349,7 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
embed::getIconPixmap( "muted", 16, 16 ) );
}
+
p.end();
_p.drawPixmap( 0, 0, m_paintPixmap );
@@ -367,14 +391,6 @@ void AutomationPatternView::dropEvent( QDropEvent * _de )
{
engine::automationEditor()->setCurrentPattern( m_pat );
}
-
- //This is the only model that's just added to AutomationPattern.
- if( m_pat->m_objects.size() == 1 )
- {
- //scale the points to fit the new min. and max. value
- this->scaleTimemapToFit( AutomationPattern::DEFAULT_MIN_VALUE,
- AutomationPattern::DEFAULT_MAX_VALUE );
- }
}
else
{
diff --git a/src/gui/ControllerConnectionDialog.cpp b/src/gui/ControllerConnectionDialog.cpp
index ba9833d..a9e627a 100644
--- a/src/gui/ControllerConnectionDialog.cpp
+++ b/src/gui/ControllerConnectionDialog.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -63,7 +63,7 @@ public:
}
- virtual void processInEvent( const MidiEvent& event, const MidiTime& time )
+ virtual void processInEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset = 0 )
{
if( event.type() == MidiControlChange &&
( m_midiPort.inputChannel() == 0 || m_midiPort.inputChannel() == event.channel() + 1 ) )
diff --git a/src/gui/ControllerDialog.cpp b/src/gui/ControllerDialog.cpp
index de7d496..48064f5 100644
--- a/src/gui/ControllerDialog.cpp
+++ b/src/gui/ControllerDialog.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/EffectControlDialog.cpp b/src/gui/EffectControlDialog.cpp
index e5f590f..b6fbd5e 100644
--- a/src/gui/EffectControlDialog.cpp
+++ b/src/gui/EffectControlDialog.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/EffectSelectDialog.cpp b/src/gui/EffectSelectDialog.cpp
index 321100f..d191ef5 100644
--- a/src/gui/EffectSelectDialog.cpp
+++ b/src/gui/EffectSelectDialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -128,6 +128,7 @@ EffectSelectDialog::EffectSelectDialog( QWidget * _parent ) :
EffectSelectDialog::~EffectSelectDialog()
{
+ delete ui;
}
diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp
new file mode 100644
index 0000000..c47825a
--- /dev/null
+++ b/src/gui/FileBrowser.cpp
@@ -0,0 +1,1057 @@
+/*
+ * FileBrowser.cpp - implementation of the project-, preset- and
+ * sample-file-browser
+ *
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#include <QtGui/QHBoxLayout>
+#include <QtGui/QKeyEvent>
+#include <QtGui/QLineEdit>
+#include <QtGui/QMenu>
+#include <QtGui/QPushButton>
+#include <QtGui/QMdiArea>
+#include <QtGui/QMdiSubWindow>
+
+#include "FileBrowser.h"
+#include "bb_track_container.h"
+#include "config_mgr.h"
+#include "debug.h"
+#include "embed.h"
+#include "engine.h"
+#include "gui_templates.h"
+#include "ImportFilter.h"
+#include "Instrument.h"
+#include "InstrumentTrack.h"
+#include "MainWindow.h"
+#include "DataFile.h"
+#include "PresetPreviewPlayHandle.h"
+#include "SamplePlayHandle.h"
+#include "song.h"
+#include "string_pair_drag.h"
+#include "text_float.h"
+
+
+
+enum TreeWidgetItemTypes
+{
+ TypeFileItem = QTreeWidgetItem::UserType,
+ TypeDirectoryItem
+} ;
+
+
+
+FileBrowser::FileBrowser(const QString & directories, const QString & filter,
+ const QString & title, const QPixmap & pm,
+ QWidget * parent, bool dirs_as_items ) :
+ SideBarWidget( title, pm, parent ),
+ m_directories( directories ),
+ m_filter( filter ),
+ m_dirsAsItems( dirs_as_items )
+{
+ setWindowTitle( tr( "Browser" ) );
+ m_l = new FileBrowserTreeWidget( contentParent() );
+ addContentWidget( m_l );
+
+ QWidget * ops = new QWidget( contentParent() );
+ ops->setFixedHeight( 24 );
+
+ QHBoxLayout * opl = new QHBoxLayout( ops );
+ opl->setMargin( 0 );
+ opl->setSpacing( 0 );
+
+ m_filterEdit = new QLineEdit( ops );
+ connect( m_filterEdit, SIGNAL( textEdited( const QString & ) ),
+ this, SLOT( filterItems( const QString & ) ) );
+
+ QPushButton * reload_btn = new QPushButton(
+ embed::getIconPixmap( "reload" ),
+ QString::null, ops );
+ connect( reload_btn, SIGNAL( clicked() ), this, SLOT( reloadTree() ) );
+
+ opl->addWidget( m_filterEdit );
+ opl->addSpacing( 5 );
+ opl->addWidget( reload_btn );
+
+ addContentWidget( ops );
+
+ reloadTree();
+ show();
+}
+
+
+
+
+FileBrowser::~FileBrowser()
+{
+}
+
+
+
+
+void FileBrowser::filterItems( const QString & filter )
+{
+ const bool show_all = filter.isEmpty();
+
+ for( int i = 0; i < m_l->topLevelItemCount(); ++i )
+ {
+ QTreeWidgetItem * it = m_l->topLevelItem( i );
+ // show all items if filter is empty
+ if( show_all )
+ {
+ it->setHidden( false );
+ if( it->childCount() )
+ {
+ filterItems( it, filter );
+ }
+ }
+ // is directory?
+ else if( it->childCount() )
+ {
+ // matches filter?
+ if( it->text( 0 ).
+ contains( filter, Qt::CaseInsensitive ) )
+ {
+ // yes, then show everything below
+ it->setHidden( false );
+ filterItems( it, QString::null );
+ }
+ else
+ {
+ // only show if item below matches filter
+ it->setHidden( !filterItems( it, filter ) );
+ }
+ }
+ // a standard item (i.e. no file or directory item?)
+ else if( it->type() == QTreeWidgetItem::Type )
+ {
+ // hide in every case when filtering
+ it->setHidden( true );
+ }
+ else
+ {
+ // file matches filter?
+ it->setHidden( !it->text( 0 ).
+ contains( filter, Qt::CaseInsensitive ) );
+ }
+
+ }
+}
+
+
+
+
+bool FileBrowser::filterItems(QTreeWidgetItem * item, const QString & filter )
+{
+ const bool show_all = filter.isEmpty();
+ bool matched = false;
+
+ for( int i = 0; i < item->childCount(); ++i )
+ {
+ QTreeWidgetItem * it = item->child( i );
+ bool cm = false; // whether current item matched
+ // show all items if filter is empty
+ if( show_all )
+ {
+ it->setHidden( false );
+ if( it->childCount() )
+ {
+ filterItems( it, filter );
+ }
+ }
+ // is directory?
+ else if( it->childCount() )
+ {
+ // matches filter?
+ if( it->text( 0 ).
+ contains( filter, Qt::CaseInsensitive ) )
+ {
+ // yes, then show everything below
+ it->setHidden( false );
+ filterItems( it, QString::null );
+ cm = true;
+ }
+ else
+ {
+ // only show if item below matches filter
+ cm = filterItems( it, filter );
+ it->setHidden( !cm );
+ }
+ }
+ // a standard item (i.e. no file or directory item?)
+ else if( it->type() == QTreeWidgetItem::Type )
+ {
+ // hide in every case when filtering
+ it->setHidden( true );
+ }
+ else
+ {
+ // file matches filter?
+ cm = it->text( 0 ).
+ contains( filter, Qt::CaseInsensitive );
+ it->setHidden( !cm );
+ }
+
+ if( cm )
+ {
+ matched = true;
+ }
+ }
+
+ return matched;
+}
+
+
+
+
+void FileBrowser::reloadTree( void )
+{
+ const QString text = m_filterEdit->text();
+ m_filterEdit->clear();
+ m_l->clear();
+ QStringList paths = m_directories.split( '*' );
+ for( QStringList::iterator it = paths.begin(); it != paths.end(); ++it )
+ {
+ addItems( *it );
+ }
+ m_filterEdit->setText( text );
+ filterItems( text );
+}
+
+
+
+
+void FileBrowser::addItems(const QString & path )
+{
+ if( m_dirsAsItems )
+ {
+ m_l->addTopLevelItem( new Directory( path,
+ QString::null, m_filter ) );
+ return;
+ }
+
+ QDir cdir( path );
+ QStringList files = cdir.entryList( QDir::Dirs, QDir::Name );
+ for( QStringList::const_iterator it = files.constBegin();
+ it != files.constEnd(); ++it )
+ {
+ QString cur_file = *it;
+ if( cur_file[0] != '.' )
+ {
+ bool orphan = true;
+ for( int i = 0; i < m_l->topLevelItemCount(); ++i )
+ {
+ Directory * d = dynamic_cast<Directory *>(
+ m_l->topLevelItem( i ) );
+ if( d == NULL || cur_file < d->text( 0 ) )
+ {
+ m_l->insertTopLevelItem( i,
+ new Directory( cur_file, path,
+ m_filter ) );
+ orphan = false;
+ break;
+ }
+ else if( cur_file == d->text( 0 ) )
+ {
+ d->addDirectory( path );
+ orphan = false;
+ break;
+ }
+ }
+ if( orphan )
+ {
+ m_l->addTopLevelItem( new Directory( cur_file,
+ path, m_filter ) );
+ }
+ }
+ }
+
+ files = cdir.entryList( QDir::Files, QDir::Name );
+ for( QStringList::const_iterator it = files.constBegin();
+ it != files.constEnd(); ++it )
+ {
+ QString cur_file = *it;
+ if( cur_file[0] != '.' )
+ {
+ // TODO: don't insert instead of removing, order changed
+ // remove existing file-items
+ QList<QTreeWidgetItem *> existing = m_l->findItems(
+ cur_file, Qt::MatchFixedString );
+ if( !existing.empty() )
+ {
+ delete existing.front();
+ }
+ (void) new FileItem( m_l, cur_file, path );
+ }
+ }
+}
+
+
+
+
+void FileBrowser::keyPressEvent(QKeyEvent * ke )
+{
+ if( ke->key() == Qt::Key_F5 )
+ {
+ reloadTree();
+ }
+ else
+ {
+ ke->ignore();
+ }
+}
+
+
+
+
+
+
+
+
+FileBrowserTreeWidget::FileBrowserTreeWidget(QWidget * parent ) :
+ QTreeWidget( parent ),
+ m_mousePressed( false ),
+ m_pressPos(),
+ m_previewPlayHandle( NULL ),
+ m_pphMutex( QMutex::Recursive ),
+ m_contextMenuItem( NULL )
+{
+ setColumnCount( 1 );
+ headerItem()->setHidden( true );
+ setSortingEnabled( false );
+
+ setFont( pointSizeF( font(), 7.5f ) );
+
+ connect( this, SIGNAL( itemDoubleClicked( QTreeWidgetItem *, int ) ),
+ SLOT( activateListItem( QTreeWidgetItem *, int ) ) );
+ connect( this, SIGNAL( itemCollapsed( QTreeWidgetItem * ) ),
+ SLOT( updateDirectory( QTreeWidgetItem * ) ) );
+ connect( this, SIGNAL( itemExpanded( QTreeWidgetItem * ) ),
+ SLOT( updateDirectory( QTreeWidgetItem * ) ) );
+}
+
+
+
+
+FileBrowserTreeWidget::~FileBrowserTreeWidget()
+{
+}
+
+
+
+
+void FileBrowserTreeWidget::contextMenuEvent(QContextMenuEvent * e )
+{
+ FileItem * f = dynamic_cast<FileItem *>( itemAt( e->pos() ) );
+ if( f != NULL && ( f->handling() == FileItem::LoadAsPreset ||
+ f->handling() == FileItem::LoadByPlugin ) )
+ {
+ m_contextMenuItem = f;
+ QMenu contextMenu( this );
+ contextMenu.addAction( tr( "Send to active instrument-track" ),
+ this,
+ SLOT( sendToActiveInstrumentTrack() ) );
+ contextMenu.addAction( tr( "Open in new instrument-track/"
+ "Song-Editor" ),
+ this,
+ SLOT( openInNewInstrumentTrackSE() ) );
+ contextMenu.addAction( tr( "Open in new instrument-track/"
+ "B+B Editor" ),
+ this,
+ SLOT( openInNewInstrumentTrackBBE() ) );
+ contextMenu.exec( e->globalPos() );
+ m_contextMenuItem = NULL;
+ }
+}
+
+
+
+
+void FileBrowserTreeWidget::mousePressEvent(QMouseEvent * me )
+{
+ QTreeWidget::mousePressEvent( me );
+ if( me->button() != Qt::LeftButton )
+ {
+ return;
+ }
+
+ QTreeWidgetItem * i = itemAt( me->pos() );
+ if ( i )
+ {
+ // TODO: Restrict to visible selection
+// if ( _me->x() > header()->cellPos( header()->mapToActual( 0 ) )
+// + treeStepSize() * ( i->depth() + ( rootIsDecorated() ?
+// 1 : 0 ) ) + itemMargin() ||
+// _me->x() < header()->cellPos(
+// header()->mapToActual( 0 ) ) )
+// {
+ m_pressPos = me->pos();
+ m_mousePressed = true;
+// }
+ }
+
+ FileItem * f = dynamic_cast<FileItem *>( i );
+ if( f != NULL )
+ {
+ m_pphMutex.lock();
+ if( m_previewPlayHandle != NULL )
+ {
+ engine::mixer()->removePlayHandle(
+ m_previewPlayHandle );
+ m_previewPlayHandle = NULL;
+ }
+
+ // in special case of sample-files we do not care about
+ // handling() rather than directly creating a SamplePlayHandle
+ if( f->type() == FileItem::SampleFile )
+ {
+ textFloat * tf = textFloat::displayMessage(
+ tr( "Loading sample" ),
+ tr( "Please wait, loading sample for "
+ "preview..." ),
+ embed::getIconPixmap( "sample_file",
+ 24, 24 ), 0 );
+ qApp->processEvents(
+ QEventLoop::ExcludeUserInputEvents );
+ SamplePlayHandle * s = new SamplePlayHandle(
+ f->fullName() );
+ s->setDoneMayReturnTrue( false );
+ m_previewPlayHandle = s;
+ delete tf;
+ }
+ else if( f->type() != FileItem::VstPluginFile &&
+ ( f->handling() == FileItem::LoadAsPreset ||
+ f->handling() == FileItem::LoadByPlugin ) )
+ {
+ m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == FileItem::LoadByPlugin );
+ }
+ if( m_previewPlayHandle != NULL )
+ {
+ if( !engine::mixer()->addPlayHandle(
+ m_previewPlayHandle ) )
+ {
+ m_previewPlayHandle = NULL;
+ }
+ }
+ m_pphMutex.unlock();
+ }
+}
+
+
+
+
+void FileBrowserTreeWidget::mouseMoveEvent( QMouseEvent * me )
+{
+ if( m_mousePressed == true &&
+ ( m_pressPos - me->pos() ).manhattanLength() >
+ QApplication::startDragDistance() )
+ {
+ // make sure any playback is stopped
+ mouseReleaseEvent( NULL );
+
+ FileItem * f = dynamic_cast<FileItem *>( itemAt( m_pressPos ) );
+ if( f != NULL )
+ {
+ switch( f->type() )
+ {
+ case FileItem::PresetFile:
+ new stringPairDrag( f->handling() == FileItem::LoadAsPreset ?
+ "presetfile" : "pluginpresetfile",
+ f->fullName(),
+ embed::getIconPixmap( "preset_file" ), this );
+ break;
+
+ case FileItem::SampleFile:
+ new stringPairDrag( "samplefile", f->fullName(),
+ embed::getIconPixmap( "sample_file" ), this );
+ break;
+ case FileItem::SoundFontFile:
+ new stringPairDrag( "soundfontfile", f->fullName(),
+ embed::getIconPixmap( "soundfont_file" ), this );
+ break;
+ case FileItem::VstPluginFile:
+ new stringPairDrag( "vstpluginfile", f->fullName(),
+ embed::getIconPixmap( "vst_plugin_file" ), this );
+ break;
+ case FileItem::MidiFile:
+// don't allow dragging FLP-files as FLP import filter clears project
+// without asking
+// case fileItem::FlpFile:
+ new stringPairDrag( "importedproject", f->fullName(),
+ embed::getIconPixmap( "midi_file" ), this );
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+}
+
+
+
+
+void FileBrowserTreeWidget::mouseReleaseEvent(QMouseEvent * me )
+{
+ m_mousePressed = false;
+
+ m_pphMutex.lock();
+ if( m_previewPlayHandle != NULL )
+ {
+ // if there're samples shorter than 3 seconds, we don't
+ // stop them if the user releases mouse-button...
+ if( m_previewPlayHandle->type() == PlayHandle::TypeSamplePlayHandle )
+ {
+ SamplePlayHandle * s = dynamic_cast<SamplePlayHandle *>(
+ m_previewPlayHandle );
+ if( s && s->totalFrames() - s->framesDone() <=
+ static_cast<f_cnt_t>( engine::mixer()->
+ processingSampleRate() * 3 ) )
+ {
+ s->setDoneMayReturnTrue( true );
+ m_previewPlayHandle = NULL;
+ m_pphMutex.unlock();
+ return;
+ }
+ }
+ engine::mixer()->removePlayHandle( m_previewPlayHandle );
+ m_previewPlayHandle = NULL;
+ }
+ m_pphMutex.unlock();
+}
+
+
+
+
+
+void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it )
+{
+ engine::mixer()->lock();
+ switch( f->handling() )
+ {
+ case FileItem::LoadAsProject:
+ if( engine::mainWindow()->mayChangeProject() )
+ {
+ engine::getSong()->loadProject( f->fullName() );
+ }
+ break;
+
+ case FileItem::LoadByPlugin:
+ {
+ const QString e = f->extension();
+ Instrument * i = it->instrument();
+ if( i == NULL ||
+ !i->descriptor()->supportsFileType( e ) )
+ {
+ i = it->loadInstrument(
+ engine::pluginFileHandling()[e] );
+ }
+ i->loadFile( f->fullName() );
+ break;
+ }
+
+ case FileItem::LoadAsPreset:
+ {
+ DataFile dataFile( f->fullName() );
+ InstrumentTrack::removeMidiPortNode( dataFile );
+ it->setSimpleSerializing();
+ it->loadSettings( dataFile.content().toElement() );
+ break;
+ }
+
+ case FileItem::ImportAsProject:
+ if( f->type() == FileItem::FlpFile &&
+ !engine::mainWindow()->mayChangeProject() )
+ {
+ break;
+ }
+ ImportFilter::import( f->fullName(),
+ engine::getSong() );
+ break;
+
+ case FileItem::NotSupported:
+ default:
+ break;
+
+ }
+ engine::mixer()->unlock();
+}
+
+
+
+
+void FileBrowserTreeWidget::activateListItem(QTreeWidgetItem * item,
+ int column )
+{
+ FileItem * f = dynamic_cast<FileItem *>( item );
+ if( f == NULL )
+ {
+ return;
+ }
+
+ if( f->handling() == FileItem::LoadAsProject ||
+ f->handling() == FileItem::ImportAsProject )
+ {
+ handleFile( f, NULL );
+ }
+ else if( f->handling() != FileItem::NotSupported )
+ {
+ engine::mixer()->lock();
+ InstrumentTrack * it = dynamic_cast<InstrumentTrack *>(
+ track::create( track::InstrumentTrack,
+ engine::getBBTrackContainer() ) );
+ handleFile( f, it );
+ engine::mixer()->unlock();
+ }
+}
+
+
+
+
+void FileBrowserTreeWidget::openInNewInstrumentTrack( TrackContainer* tc )
+{
+ if( m_contextMenuItem->handling() == FileItem::LoadAsPreset ||
+ m_contextMenuItem->handling() == FileItem::LoadByPlugin )
+ {
+ engine::mixer()->lock();
+ InstrumentTrack * it = dynamic_cast<InstrumentTrack *>(
+ track::create( track::InstrumentTrack, tc ) );
+ handleFile( m_contextMenuItem, it );
+ engine::mixer()->unlock();
+ }
+}
+
+
+
+
+void FileBrowserTreeWidget::openInNewInstrumentTrackBBE( void )
+{
+ openInNewInstrumentTrack( engine::getBBTrackContainer() );
+}
+
+
+
+
+void FileBrowserTreeWidget::openInNewInstrumentTrackSE( void )
+{
+ openInNewInstrumentTrack( engine::getSong() );
+}
+
+
+
+
+void FileBrowserTreeWidget::sendToActiveInstrumentTrack( void )
+{
+ // get all windows opened in the workspace
+ QList<QMdiSubWindow*> pl =
+ engine::mainWindow()->workspace()->
+ subWindowList( QMdiArea::StackingOrder );
+ QListIterator<QMdiSubWindow *> w( pl );
+ w.toBack();
+ // now we travel through the window-list until we find an
+ // instrument-track
+ while( w.hasPrevious() )
+ {
+ InstrumentTrackWindow * itw =
+ dynamic_cast<InstrumentTrackWindow *>(
+ w.previous()->widget() );
+ if( itw != NULL && itw->isHidden() == false )
+ {
+ handleFile( m_contextMenuItem, itw->model() );
+ break;
+ }
+ }
+}
+
+
+
+
+void FileBrowserTreeWidget::updateDirectory(QTreeWidgetItem * item )
+{
+ Directory * dir = dynamic_cast<Directory *>( item );
+ if( dir != NULL )
+ {
+ dir->update();
+ }
+}
+
+
+
+
+
+
+QPixmap * Directory::s_folderPixmap = NULL;
+QPixmap * Directory::s_folderOpenedPixmap = NULL;
+QPixmap * Directory::s_folderLockedPixmap = NULL;
+
+
+Directory::Directory(const QString & filename, const QString & path,
+ const QString & filter ) :
+ QTreeWidgetItem( QStringList( filename ), TypeDirectoryItem ),
+ m_directories( path ),
+ m_filter( filter )
+{
+ initPixmaps();
+
+ setChildIndicatorPolicy( QTreeWidgetItem::ShowIndicator );
+
+ if( !QDir( fullName() ).isReadable() )
+ {
+ setIcon( 0, *s_folderLockedPixmap );
+ }
+ else
+ {
+ setIcon( 0, *s_folderPixmap );
+ }
+}
+
+
+
+
+void Directory::initPixmaps( void )
+{
+ if( s_folderPixmap == NULL )
+ {
+ s_folderPixmap = new QPixmap(
+ embed::getIconPixmap( "folder" ) );
+ }
+
+ if( s_folderOpenedPixmap == NULL )
+ {
+ s_folderOpenedPixmap = new QPixmap(
+ embed::getIconPixmap( "folder_opened" ) );
+ }
+
+ if( s_folderLockedPixmap == NULL )
+ {
+ s_folderLockedPixmap = new QPixmap(
+ embed::getIconPixmap( "folder_locked" ) );
+ }
+}
+
+
+
+
+void Directory::update( void )
+{
+ if( !isExpanded() )
+ {
+ setIcon( 0, *s_folderPixmap );
+ return;
+ }
+
+ setIcon( 0, *s_folderOpenedPixmap );
+ if( !childCount() )
+ {
+ for( QStringList::iterator it = m_directories.begin();
+ it != m_directories.end(); ++it )
+ {
+ int top_index = childCount();
+ if( addItems( fullName( *it ) ) &&
+ ( *it ).contains(
+ configManager::inst()->dataDir() ) )
+ {
+ QTreeWidgetItem * sep = new QTreeWidgetItem;
+ sep->setText( 0,
+ FileBrowserTreeWidget::tr(
+ "--- Factory files ---" ) );
+ sep->setIcon( 0, embed::getIconPixmap(
+ "factory_files" ) );
+ insertChild( top_index, sep );
+ }
+ }
+ }
+}
+
+
+
+
+bool Directory::addItems(const QString & path )
+{
+ QDir thisDir( path );
+ if( !thisDir.isReadable() )
+ {
+ return false;
+ }
+
+ treeWidget()->setUpdatesEnabled( false );
+
+ bool added_something = false;
+
+ QStringList files = thisDir.entryList( QDir::Dirs, QDir::Name );
+ for( QStringList::const_iterator it = files.constBegin();
+ it != files.constEnd(); ++it )
+ {
+ QString cur_file = *it;
+ if( cur_file[0] != '.' )
+ {
+ bool orphan = true;
+ for( int i = 0; i < childCount(); ++i )
+ {
+ Directory * d = dynamic_cast<Directory *>(
+ child( i ) );
+ if( d == NULL || cur_file < d->text( 0 ) )
+ {
+ insertChild( i, new Directory( cur_file,
+ path, m_filter ) );
+ orphan = false;
+ break;
+ }
+ else if( cur_file == d->text( 0 ) )
+ {
+ d->addDirectory( path );
+ orphan = false;
+ break;
+ }
+ }
+ if( orphan )
+ {
+ addChild( new Directory( cur_file, path,
+ m_filter ) );
+ }
+
+ added_something = true;
+ }
+ }
+
+ QList<QTreeWidgetItem*> items;
+ files = thisDir.entryList( QDir::Files, QDir::Name );
+ for( QStringList::const_iterator it = files.constBegin();
+ it != files.constEnd(); ++it )
+ {
+ QString cur_file = *it;
+ if( cur_file[0] != '.' &&
+ thisDir.match( m_filter, cur_file.toLower() ) )
+ {
+ items << new FileItem( cur_file, path );
+ added_something = true;
+ }
+ }
+ addChildren( items );
+
+ treeWidget()->setUpdatesEnabled( true );
+
+ return added_something;
+}
+
+
+
+
+QPixmap * FileItem::s_projectFilePixmap = NULL;
+QPixmap * FileItem::s_presetFilePixmap = NULL;
+QPixmap * FileItem::s_sampleFilePixmap = NULL;
+QPixmap * FileItem::s_soundfontFilePixmap = NULL;
+QPixmap * FileItem::s_vstPluginFilePixmap = NULL;
+QPixmap * FileItem::s_midiFilePixmap = NULL;
+QPixmap * FileItem::s_flpFilePixmap = NULL;
+QPixmap * FileItem::s_unknownFilePixmap = NULL;
+
+
+FileItem::FileItem(QTreeWidget * parent, const QString & name,
+ const QString & path ) :
+ QTreeWidgetItem( parent, QStringList( name) , TypeFileItem ),
+ m_path( path )
+{
+ determineFileType();
+ initPixmaps();
+}
+
+
+
+
+FileItem::FileItem(const QString & name, const QString & path ) :
+ QTreeWidgetItem( QStringList( name ), TypeFileItem ),
+ m_path( path )
+{
+ determineFileType();
+ initPixmaps();
+}
+
+
+
+
+void FileItem::initPixmaps( void )
+{
+ if( s_projectFilePixmap == NULL )
+ {
+ s_projectFilePixmap = new QPixmap( embed::getIconPixmap(
+ "project_file", 16, 16 ) );
+ }
+
+ if( s_presetFilePixmap == NULL )
+ {
+ s_presetFilePixmap = new QPixmap( embed::getIconPixmap(
+ "preset_file", 16, 16 ) );
+ }
+
+ if( s_sampleFilePixmap == NULL )
+ {
+ s_sampleFilePixmap = new QPixmap( embed::getIconPixmap(
+ "sample_file", 16, 16 ) );
+ }
+
+ if ( s_soundfontFilePixmap == NULL )
+ {
+ s_soundfontFilePixmap = new QPixmap( embed::getIconPixmap(
+ "soundfont_file", 16, 16 ) );
+ }
+
+ if ( s_vstPluginFilePixmap == NULL )
+ {
+ s_vstPluginFilePixmap = new QPixmap( embed::getIconPixmap(
+ "vst_plugin_file", 16, 16 ) );
+ }
+
+ if( s_midiFilePixmap == NULL )
+ {
+ s_midiFilePixmap = new QPixmap( embed::getIconPixmap(
+ "midi_file", 16, 16 ) );
+ }
+
+ if( s_flpFilePixmap == NULL )
+ {
+ s_flpFilePixmap = new QPixmap( embed::getIconPixmap(
+ "midi_file", 16, 16 ) );
+ }
+
+ if( s_unknownFilePixmap == NULL )
+ {
+ s_unknownFilePixmap = new QPixmap( embed::getIconPixmap(
+ "unknown_file" ) );
+ }
+
+ switch( m_type )
+ {
+ case ProjectFile:
+ setIcon( 0, *s_projectFilePixmap );
+ break;
+ case PresetFile:
+ setIcon( 0, *s_presetFilePixmap );
+ break;
+ case SoundFontFile:
+ setIcon( 0, *s_soundfontFilePixmap );
+ break;
+ case VstPluginFile:
+ setIcon( 0, *s_vstPluginFilePixmap );
+ break;
+ case SampleFile:
+ case PatchFile: // TODO
+ setIcon( 0, *s_sampleFilePixmap );
+ break;
+ case MidiFile:
+ setIcon( 0, *s_midiFilePixmap );
+ break;
+ case FlpFile:
+ setIcon( 0, *s_flpFilePixmap );
+ break;
+ case UnknownFile:
+ default:
+ setIcon( 0, *s_unknownFilePixmap );
+ break;
+ }
+}
+
+
+
+
+void FileItem::determineFileType( void )
+{
+ m_handling = NotSupported;
+
+ const QString ext = extension();
+ if( ext == "mmp" || ext == "mpt" || ext == "mmpz" )
+ {
+ m_type = ProjectFile;
+ m_handling = LoadAsProject;
+ }
+ else if( ext == "xpf" || ext == "xml" )
+ {
+ m_type = PresetFile;
+ m_handling = LoadAsPreset;
+ }
+ else if( ext == "xiz" && engine::pluginFileHandling().contains( ext ) )
+ {
+ m_type = PresetFile;
+ m_handling = LoadByPlugin;
+ }
+ else if( ext == "sf2" )
+ {
+ m_type = SoundFontFile;
+ }
+ else if( ext == "pat" )
+ {
+ m_type = PatchFile;
+ }
+ else if( ext == "mid" )
+ {
+ m_type = MidiFile;
+ m_handling = ImportAsProject;
+ }
+ else if( ext == "flp" )
+ {
+ m_type = FlpFile;
+ m_handling = ImportAsProject;
+ }
+ else if( ext == "dll" )
+ {
+ m_type = VstPluginFile;
+ m_handling = LoadByPlugin;
+ }
+ else
+ {
+ m_type = UnknownFile;
+ }
+
+ if( m_handling == NotSupported &&
+ !ext.isEmpty() && engine::pluginFileHandling().contains( ext ) )
+ {
+ m_handling = LoadByPlugin;
+ // classify as sample if not classified by anything yet but can
+ // be handled by a certain plugin
+ if( m_type == UnknownFile )
+ {
+ m_type = SampleFile;
+ }
+ }
+}
+
+
+
+
+QString FileItem::extension( void )
+{
+ return extension( fullName() );
+}
+
+
+
+
+QString FileItem::extension(const QString & file )
+{
+ return QFileInfo( file ).suffix().toLower();
+}
+
+
+
+
+#include "moc_FileBrowser.cxx"
+
diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp
index 2ff35c9..f750bbc 100644
--- a/src/gui/FxMixerView.cpp
+++ b/src/gui/FxMixerView.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -22,6 +22,9 @@
*
*/
+#include <QtGlobal>
+#include <QDebug>
+
#include <QtGui/QButtonGroup>
#include <QtGui/QInputDialog>
#include <QtGui/QLayout>
@@ -30,98 +33,19 @@
#include <QtGui/QPainter>
#include <QtGui/QPushButton>
#include <QtGui/QToolButton>
-#include <QtGui/QStackedLayout>
+#include <QtGui/QScrollArea>
+#include <QtGui/QStyle>
+#include <QtGui/QKeyEvent>
#include "FxMixerView.h"
-#include "fader.h"
-#include "EffectRackView.h"
+#include "knob.h"
#include "engine.h"
#include "embed.h"
#include "MainWindow.h"
-#include "LcdWidget.h"
#include "gui_templates.h"
-#include "tooltip.h"
-#include "pixmap_button.h"
-
-
-
-class FxLine : public QWidget
-{
-public:
- FxLine( QWidget * _parent, FxMixerView * _mv, QString & _name ) :
- QWidget( _parent ),
- m_mv( _mv ),
- m_name( _name )
- {
- setFixedSize( 32, 232 );
- setAttribute( Qt::WA_OpaquePaintEvent, true );
- setCursor( QCursor( embed::getIconPixmap( "hand" ), 0, 0 ) );
- }
-
- virtual void paintEvent( QPaintEvent * )
- {
- QPainter p( this );
- QColor bg_color = QApplication::palette().color( QPalette::Active,
- QPalette::Background );
- QColor sh_color = QApplication::palette().color( QPalette::Active,
- QPalette::Shadow );
- QColor te_color = QApplication::palette().color( QPalette::Active,
- QPalette::Text );
- QColor bt_color = QApplication::palette().color( QPalette::Active,
- QPalette::BrightText );
-
- p.fillRect( rect(),
- m_mv->currentFxLine() == this ? bg_color.lighter(130) : bg_color );
-
- p.setPen( bg_color.darker(130) );
- p.drawRect( 0, 0, width()-2, height()-2 );
-
- p.setPen( bg_color.lighter(150) );
- p.drawRect( 1, 1, width()-2, height()-2 );
-
- p.setPen( m_mv->currentFxLine() == this ? sh_color : bg_color.darker(130) );
- p.drawRect( 0, 0, width()-1, height()-1 );
-
- p.rotate( -90 );
- p.setFont( pointSizeF( font(), 7.5f ) );
-
- p.setPen( sh_color );
- p.drawText( -91, 21, m_name );
-
- p.setPen( m_mv->currentFxLine() == this ? bt_color : te_color );
- p.drawText( -90, 20, m_name );
-
- }
-
- virtual void mousePressEvent( QMouseEvent * )
- {
- m_mv->setCurrentFxLine( this );
- }
-
- virtual void mouseDoubleClickEvent( QMouseEvent * )
- {
- bool ok;
- QString new_name = QInputDialog::getText( this,
- FxMixerView::tr( "Rename FX channel" ),
- FxMixerView::tr( "Enter the new name for this "
- "FX channel" ),
- QLineEdit::Normal, m_name, &ok );
- if( ok && !new_name.isEmpty() )
- {
- m_name = new_name;
- update();
- }
- }
-
-
-private:
- FxMixerView * m_mv;
- QString & m_name;
-
-} ;
-
-
-
+#include "InstrumentTrack.h"
+#include "song.h"
+#include "bb_track_container.h"
FxMixerView::FxMixerView() :
QWidget(),
@@ -131,121 +55,91 @@ FxMixerView::FxMixerView() :
FxMixer * m = engine::fxMixer();
m->setHook( this );
-/* QPalette pal = palette();
- pal.setColor( QPalette::Background, QColor( 72, 76, 88 ) );
- setPalette( pal );*/
-
+ //QPalette pal = palette();
+ //pal.setColor( QPalette::Background, QColor( 72, 76, 88 ) );
+ //setPalette( pal );
setAutoFillBackground( true );
- setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Minimum );
+ setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed );
setWindowTitle( tr( "FX-Mixer" ) );
setWindowIcon( embed::getIconPixmap( "fx_mixer" ) );
- m_fxLineBanks = new QStackedLayout;
- m_fxLineBanks->setSpacing( 0 );
- m_fxLineBanks->setMargin( 1 );
-
- m_fxRacksLayout = new QStackedLayout;
- m_fxRacksLayout->setSpacing( 0 );
- m_fxRacksLayout->setMargin( 0 );
-
// main-layout
QHBoxLayout * ml = new QHBoxLayout;
- ml->setMargin( 0 );
- ml->setSpacing( 0 );
- ml->addSpacing( 6 );
+ // Channel area
+ m_channelAreaWidget = new QWidget;
+ chLayout = new QHBoxLayout( m_channelAreaWidget );
+ chLayout->setSizeConstraint( QLayout::SetMinimumSize );
+ chLayout->setSpacing( 0 );
+ chLayout->setMargin( 0 );
+ m_channelAreaWidget->setLayout(chLayout);
+
+ // create rack layout before creating the first channel
+ m_racksWidget = new QWidget;
+ m_racksLayout = new QStackedLayout( m_racksWidget );
+ m_racksLayout->setContentsMargins( 0, 0, 0, 0 );
+ m_racksWidget->setLayout( m_racksLayout );
+
+ // add master channel
+ m_fxChannelViews.resize( m->numChannels() );
+ m_fxChannelViews[0] = new FxChannelView( this, this, 0 );
+
+ m_racksLayout->addWidget( m_fxChannelViews[0]->m_rackView );
- QHBoxLayout * banks[NumFxChannels/16];
- for( int i = 0; i < NumFxChannels/16; ++i )
+ FxChannelView * masterView = m_fxChannelViews[0];
+ ml->addWidget( masterView->m_fxLine, 0, Qt::AlignTop );
+
+ QSize fxLineSize = masterView->m_fxLine->size();
+
+ // add mixer channels
+ for( int i = 1; i < m_fxChannelViews.size(); ++i )
{
- QWidget * w = new QWidget( this );
- banks[i] = new QHBoxLayout( w );
- banks[i]->setMargin( 5 );
- banks[i]->setSpacing( 1 );
- m_fxLineBanks->addWidget( w );
+ m_fxChannelViews[i] = new FxChannelView(m_channelAreaWidget, this, i);
+ chLayout->addWidget( m_fxChannelViews[i]->m_fxLine );
}
- for( int i = 0; i < NumFxChannels+1; ++i )
+ // add the scrolling section to the main layout
+ // class solely for scroll area to pass key presses down
+ class ChannelArea : public QScrollArea
{
- FxChannelView * cv = &m_fxChannelViews[i];
- if( i == 0 )
- {
- cv->m_fxLine = new FxLine( NULL, this,
- m->m_fxChannels[i]->m_name );
- ml->addWidget( cv->m_fxLine );
- ml->addSpacing( 10 );
- }
- else
- {
- const int bank = (i-1) / 16;
- cv->m_fxLine = new FxLine( NULL, this,
- m->m_fxChannels[i]->m_name );
- banks[bank]->addWidget( cv->m_fxLine );
- }
- LcdWidget* l = new LcdWidget( 2, cv->m_fxLine );
- l->setValue( i );
- l->move( 3, 4 );
- l->setMarginWidth( 1 );
-
-
- cv->m_fader = new fader( &m->m_fxChannels[i]->m_volumeModel,
- tr( "FX Fader %1" ).arg( i ),
- cv->m_fxLine );
- cv->m_fader->move( 15-cv->m_fader->width()/2,
- cv->m_fxLine->height()-
- cv->m_fader->height()-5 );
-
- cv->m_muteBtn = new pixmapButton( cv->m_fxLine, tr( "Mute" ) );
- cv->m_muteBtn->setModel( &m->m_fxChannels[i]->m_muteModel );
- cv->m_muteBtn->setActiveGraphic(
- embed::getIconPixmap( "led_off" ) );
- cv->m_muteBtn->setInactiveGraphic(
- embed::getIconPixmap( "led_green" ) );
- cv->m_muteBtn->setCheckable( true );
- cv->m_muteBtn->move( 9, cv->m_fader->y()-16);
- toolTip::add( cv->m_muteBtn, tr( "Mute this FX channel" ) );
-
- cv->m_rackView = new EffectRackView(
- &m->m_fxChannels[i]->m_fxChain, this );
- cv->m_rackView->setMinimumWidth( 244 );
-
- m_fxRacksLayout->addWidget( cv->m_rackView );
- if( i == 0 )
- {
- QVBoxLayout * l = new QVBoxLayout;
- l->addSpacing( 10 );
- QButtonGroup * g = new QButtonGroup( this );
- m_bankButtons = g;
- g->setExclusive( true );
- for( int j = 0; j < 4; ++j )
+ public:
+ ChannelArea( QWidget * parent, FxMixerView * mv ) :
+ QScrollArea( parent ), m_mv( mv ) {}
+ ~ChannelArea() {}
+ virtual void keyPressEvent( QKeyEvent * e )
{
- QToolButton * btn = new QToolButton;
- btn->setText( QString( 'A'+j ) );
- btn->setCheckable( true );
- btn->setSizePolicy( QSizePolicy::Preferred,
- QSizePolicy::Expanding );
- l->addWidget( btn );
- g->addButton( btn, j );
- btn->setChecked( j == 0);
+ m_mv->keyPressEvent( e );
}
- l->addSpacing( 10 );
- ml->addLayout( l );
- connect( g, SIGNAL( buttonClicked( int ) ),
- m_fxLineBanks, SLOT( setCurrentIndex( int ) ) );
- }
- }
-
- ml->addLayout( m_fxLineBanks );
- ml->addLayout( m_fxRacksLayout );
+ private:
+ FxMixerView * m_mv;
+ };
+ channelArea = new ChannelArea( this, this );
+ channelArea->setWidget( m_channelAreaWidget );
+ channelArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
+ channelArea->setFrameStyle( QFrame::NoFrame );
+ channelArea->setMinimumWidth( fxLineSize.width() * 6 );
+ channelArea->setFixedHeight( fxLineSize.height() +
+ style()->pixelMetric( QStyle::PM_ScrollBarExtent ) );
+ ml->addWidget( channelArea, 1, Qt::AlignTop );
+
+ // show the add new effect channel button
+ QPushButton * newChannelBtn = new QPushButton( embed::getIconPixmap( "new_channel" ), QString::null, this );
+ newChannelBtn->setObjectName( "newChannelBtn" );
+ newChannelBtn->setFixedSize( fxLineSize );
+ connect( newChannelBtn, SIGNAL( clicked() ), this, SLOT( addNewChannel() ) );
+ ml->addWidget( newChannelBtn, 0, Qt::AlignTop );
+
+
+ // add the stacked layout for the effect racks of fx channels
+ ml->addWidget( m_racksWidget, 0, Qt::AlignTop | Qt::AlignRight );
+
+ setCurrentFxLine( m_fxChannelViews[0]->m_fxLine );
setLayout( ml );
updateGeometry();
- m_fxLineBanks->setCurrentIndex( 0 );
- setCurrentFxLine( m_fxChannelViews[0].m_fxLine );
-
// timer for updating faders
connect( engine::mainWindow(), SIGNAL( periodicUpdate() ),
this, SLOT( updateFaders() ) );
@@ -255,10 +149,10 @@ FxMixerView::FxMixerView() :
QMdiSubWindow * subWin =
engine::mainWindow()->workspace()->addSubWindow( this );
Qt::WindowFlags flags = subWin->windowFlags();
- flags |= Qt::MSWindowsFixedSizeDialogHint;
flags &= ~Qt::WindowMaximizeButtonHint;
subWin->setWindowFlags( flags );
- //subWin->layout()->setSizeConstraint(QLayout::SetFixedSize);
+ layout()->setSizeConstraint( QLayout::SetMinimumSize );
+ subWin->layout()->setSizeConstraint( QLayout::SetMinAndMaxSize );
parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false );
parentWidget()->move( 5, 310 );
@@ -267,14 +161,91 @@ FxMixerView::FxMixerView() :
setModel( m );
}
+FxMixerView::~FxMixerView()
+{
+ for (int i=0; i<m_fxChannelViews.size(); i++)
+ {
+ delete m_fxChannelViews.at(i);
+ }
+}
-FxMixerView::~FxMixerView()
+void FxMixerView::addNewChannel()
{
+ // add new fx mixer channel and redraw the form.
+ FxMixer * mix = engine::fxMixer();
+
+ int newChannelIndex = mix->createChannel();
+ m_fxChannelViews.push_back(new FxChannelView(m_channelAreaWidget, this,
+ newChannelIndex));
+ chLayout->addWidget( m_fxChannelViews[newChannelIndex]->m_fxLine );
+ m_racksLayout->addWidget( m_fxChannelViews[newChannelIndex]->m_rackView );
+
+ updateFxLine(newChannelIndex);
+
+ updateMaxChannelSelector();
}
+void FxMixerView::refreshDisplay()
+{
+ // delete all views and re-add them
+ for( int i = 1; i<m_fxChannelViews.size(); ++i )
+ {
+ chLayout->removeWidget(m_fxChannelViews[i]->m_fxLine);
+ m_racksLayout->removeWidget( m_fxChannelViews[i]->m_rackView );
+ delete m_fxChannelViews[i]->m_fader;
+ delete m_fxChannelViews[i]->m_muteBtn;
+ delete m_fxChannelViews[i]->m_fxLine;
+ delete m_fxChannelViews[i]->m_rackView;
+ delete m_fxChannelViews[i];
+ }
+ m_channelAreaWidget->adjustSize();
+
+ // re-add the views
+ m_fxChannelViews.resize(engine::fxMixer()->numChannels());
+ for( int i = 1; i < m_fxChannelViews.size(); ++i )
+ {
+ m_fxChannelViews[i] = new FxChannelView(m_channelAreaWidget, this, i);
+ chLayout->addWidget(m_fxChannelViews[i]->m_fxLine);
+ m_racksLayout->addWidget( m_fxChannelViews[i]->m_rackView );
+ }
+
+ // set selected fx line to 0
+ setCurrentFxLine( 0 );
+
+ // update all fx lines
+ for( int i = 0; i < m_fxChannelViews.size(); ++i )
+ {
+ updateFxLine( i );
+ }
+
+ updateMaxChannelSelector();
+}
+
+
+// update the and max. channel number for every instrument
+void FxMixerView::updateMaxChannelSelector()
+{
+ QVector<track *> songTrackList = engine::getSong()->tracks();
+ QVector<track *> bbTrackList = engine::getBBTrackContainer()->tracks();
+
+ QVector<track *> trackLists[] = {songTrackList, bbTrackList};
+ for(int tl=0; tl<2; ++tl)
+ {
+ QVector<track *> trackList = trackLists[tl];
+ for(int i=0; i<trackList.size(); ++i)
+ {
+ if( trackList[i]->type() == track::InstrumentTrack )
+ {
+ InstrumentTrack * inst = (InstrumentTrack *) trackList[i];
+ inst->effectChannelModel()->setRange(0,
+ m_fxChannelViews.size()-1,1);
+ }
+ }
+ }
+}
void FxMixerView::saveSettings( QDomDocument & _doc, QDomElement & _this )
@@ -291,73 +262,252 @@ void FxMixerView::loadSettings( const QDomElement & _this )
}
+FxMixerView::FxChannelView::FxChannelView(QWidget * _parent, FxMixerView * _mv,
+ int _chIndex )
+{
+ m_fxLine = new FxLine(_parent, _mv, _chIndex);
+
+ FxMixer * m = engine::fxMixer();
+ m_fader = new fader( &m->effectChannel(_chIndex)->m_volumeModel,
+ tr( "FX Fader %1" ).arg( _chIndex ), m_fxLine );
+ m_fader->move( 16-m_fader->width()/2,
+ m_fxLine->height()-
+ m_fader->height()-5 );
+
+ m_muteBtn = new pixmapButton( m_fxLine, tr( "Mute" ) );
+ m_muteBtn->setModel( &m->effectChannel(_chIndex)->m_muteModel );
+ m_muteBtn->setActiveGraphic(
+ embed::getIconPixmap( "led_off" ) );
+ m_muteBtn->setInactiveGraphic(
+ embed::getIconPixmap( "led_green" ) );
+ m_muteBtn->setCheckable( true );
+ m_muteBtn->move( 9, m_fader->y()-16);
+ toolTip::add( m_muteBtn, tr( "Mute this FX channel" ) );
+
+ // Create EffectRack for the channel
+ m_rackView = new EffectRackView( &m->effectChannel(_chIndex)->m_fxChain, _mv->m_racksWidget );
+ m_rackView->setFixedSize( 245, FxLine::FxLineHeight );
+}
void FxMixerView::setCurrentFxLine( FxLine * _line )
{
+ // select
m_currentFxLine = _line;
- for( int i = 0; i < NumFxChannels+1; ++i )
+ m_racksLayout->setCurrentWidget( m_fxChannelViews[ _line->channelIndex() ]->m_rackView );
+
+ // set up send knob
+ for(int i = 0; i < m_fxChannelViews.size(); ++i)
+ {
+ updateFxLine(i);
+ }
+}
+
+
+void FxMixerView::updateFxLine(int index)
+{
+ FxMixer * mix = engine::fxMixer();
+
+ // does current channel send to this channel?
+ int selIndex = m_currentFxLine->channelIndex();
+ FxLine * thisLine = m_fxChannelViews[index]->m_fxLine;
+ FloatModel * sendModel = mix->channelSendModel(selIndex, index);
+ if( sendModel == NULL )
+ {
+ // does not send, hide send knob
+ thisLine->m_sendKnob->setVisible(false);
+ }
+ else
{
- if( m_fxChannelViews[i].m_fxLine == _line )
+ // it does send, show knob and connect
+ thisLine->m_sendKnob->setVisible(true);
+ thisLine->m_sendKnob->setModel(sendModel);
+ }
+
+ // disable the send button if it would cause an infinite loop
+ thisLine->m_sendBtn->setVisible(! mix->isInfiniteLoop(selIndex, index));
+ thisLine->m_sendBtn->updateLightStatus();
+ thisLine->update();
+}
+
+
+void FxMixerView::deleteChannel(int index)
+{
+ // can't delete master
+ if( index == 0 ) return;
+
+ // remember selected line
+ int selLine = m_currentFxLine->channelIndex();
+
+ // delete the real channel
+ engine::fxMixer()->deleteChannel(index);
+
+ // delete the view
+ chLayout->removeWidget(m_fxChannelViews[index]->m_fxLine);
+ m_racksLayout->removeWidget( m_fxChannelViews[index]->m_rackView );
+ delete m_fxChannelViews[index]->m_fader;
+ delete m_fxChannelViews[index]->m_muteBtn;
+ delete m_fxChannelViews[index]->m_fxLine;
+ delete m_fxChannelViews[index]->m_rackView;
+ delete m_fxChannelViews[index];
+ m_channelAreaWidget->adjustSize();
+
+ // make sure every channel knows what index it is
+ for(int i=0; i<m_fxChannelViews.size(); ++i)
+ {
+ if( i > index )
{
- m_fxRacksLayout->setCurrentIndex( i );
+ m_fxChannelViews[i]->m_fxLine->setChannelIndex(i-1);
}
- m_fxChannelViews[i].m_fxLine->update();
}
+ m_fxChannelViews.remove(index);
+
+ // select the next channel
+ if( selLine >= m_fxChannelViews.size() )
+ {
+ selLine = m_fxChannelViews.size()-1;
+ }
+ setCurrentFxLine(selLine);
+
+ updateMaxChannelSelector();
}
-void FxMixerView::setCurrentFxLine( int _line )
+void FxMixerView::moveChannelLeft(int index)
{
- if ( _line >= 0 && _line < NumFxChannels+1 )
+ // can't move master or first channel left or last channel right
+ if( index <= 1 || index >= m_fxChannelViews.size() ) return;
+
+ int selIndex = m_currentFxLine->channelIndex();
+
+ FxMixer * mix = engine::fxMixer();
+ mix->moveChannelLeft(index);
+
+ // refresh the two mixer views
+ for( int i = index-1; i <= index; ++i )
{
- setCurrentFxLine( m_fxChannelViews[_line].m_fxLine );
+ // delete the mixer view
+ int replaceIndex = chLayout->indexOf(m_fxChannelViews[i]->m_fxLine);
+
+ chLayout->removeWidget(m_fxChannelViews[i]->m_fxLine);
+ m_racksLayout->removeWidget( m_fxChannelViews[i]->m_rackView );
+ delete m_fxChannelViews[i]->m_fader;
+ delete m_fxChannelViews[i]->m_muteBtn;
+ delete m_fxChannelViews[i];
+
+ // add it again
+ m_fxChannelViews[i] = new FxChannelView( m_channelAreaWidget, this, i );
+ chLayout->insertWidget( replaceIndex, m_fxChannelViews[i]->m_fxLine );
+ m_racksLayout->insertWidget( replaceIndex, m_fxChannelViews[i]->m_rackView );
+ }
- m_bankButtons->button( (_line-1) / 16 )->click();
+ // keep selected channel
+ if( selIndex == index )
+ {
+ selIndex = index-1;
+ }
+ else if( selIndex == index - 1 )
+ {
+ selIndex = index;
}
+ setCurrentFxLine(selIndex);
}
+void FxMixerView::moveChannelRight(int index)
+{
+ moveChannelLeft(index+1);
+}
-void FxMixerView::clear()
+
+
+void FxMixerView::keyPressEvent(QKeyEvent * e)
{
- for( int i = 0; i <= NumFxChannels; ++i )
+ switch(e->key())
{
- m_fxChannelViews[i].m_rackView->clearViews();
+ case Qt::Key_Delete:
+ deleteChannel(m_currentFxLine->channelIndex());
+ break;
+ case Qt::Key_Left:
+ if( e->modifiers() & Qt::AltModifier )
+ {
+ moveChannelLeft( m_currentFxLine->channelIndex() );
+ }
+ else
+ {
+ // select channel to the left
+ setCurrentFxLine( m_currentFxLine->channelIndex()-1 );
+ }
+ break;
+ case Qt::Key_Right:
+ if( e->modifiers() & Qt::AltModifier )
+ {
+ moveChannelRight( m_currentFxLine->channelIndex() );
+ }
+ else
+ {
+ // select channel to the right
+ setCurrentFxLine( m_currentFxLine->channelIndex()+1 );
+ }
+ break;
}
}
+void FxMixerView::setCurrentFxLine( int _line )
+{
+ if( _line >= 0 && _line < m_fxChannelViews.size() )
+ {
+ setCurrentFxLine( m_fxChannelViews[_line]->m_fxLine );
+ }
+}
+
+
+
+void FxMixerView::clear()
+{
+ engine::fxMixer()->clear();
+
+ refreshDisplay();
+}
+
+
+
void FxMixerView::updateFaders()
{
FxMixer * m = engine::fxMixer();
- for( int i = 0; i < NumFxChannels+1; ++i )
+
+ // apply master gain
+ m->m_fxChannels[0]->m_peakLeft *= engine::mixer()->masterGain();
+ m->m_fxChannels[0]->m_peakRight *= engine::mixer()->masterGain();
+
+ for( int i = 0; i < m_fxChannelViews.size(); ++i )
{
- const float opl = m_fxChannelViews[i].m_fader->getPeak_L();
- const float opr = m_fxChannelViews[i].m_fader->getPeak_R();
+ const float opl = m_fxChannelViews[i]->m_fader->getPeak_L();
+ const float opr = m_fxChannelViews[i]->m_fader->getPeak_R();
const float fall_off = 1.2;
if( m->m_fxChannels[i]->m_peakLeft > opl )
{
- m_fxChannelViews[i].m_fader->setPeak_L( m->m_fxChannels[i]->m_peakLeft );
+ m_fxChannelViews[i]->m_fader->setPeak_L( m->m_fxChannels[i]->m_peakLeft );
m->m_fxChannels[i]->m_peakLeft = 0;
}
else
{
- m_fxChannelViews[i].m_fader->setPeak_L( opl/fall_off );
+ m_fxChannelViews[i]->m_fader->setPeak_L( opl/fall_off );
}
if( m->m_fxChannels[i]->m_peakRight > opr )
{
- m_fxChannelViews[i].m_fader->setPeak_R( m->m_fxChannels[i]->m_peakRight );
+ m_fxChannelViews[i]->m_fader->setPeak_R( m->m_fxChannels[i]->m_peakRight );
m->m_fxChannels[i]->m_peakRight = 0;
}
else
{
- m_fxChannelViews[i].m_fader->setPeak_R( opr/fall_off );
+ m_fxChannelViews[i]->m_fader->setPeak_R( opr/fall_off );
}
}
}
diff --git a/src/gui/InstrumentView.cpp b/src/gui/InstrumentView.cpp
index 2088020..b8c63ca 100644
--- a/src/gui/InstrumentView.cpp
+++ b/src/gui/InstrumentView.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/LfoControllerDialog.cpp b/src/gui/LfoControllerDialog.cpp
index 03b0b2d..32c1a92 100644
--- a/src/gui/LfoControllerDialog.cpp
+++ b/src/gui/LfoControllerDialog.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008-2009 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -158,7 +158,7 @@ LfoControllerDialog::LfoControllerDialog( Controller * _model, QWidget * _parent
moog_saw_wave_btn->setInactiveGraphic(
embed::getIconPixmap( "moog_saw_wave_inactive" ) );
toolTip::add( moog_saw_wave_btn,
- tr( "Click here for a a moog saw-wave." ) );
+ tr( "Click here for a moog saw-wave." ) );
pixmapButton * exp_wave_btn = new pixmapButton( this, NULL );
exp_wave_btn->move( CD_LFO_SHAPES_X + 15, CD_LFO_SHAPES_Y + 15 );
diff --git a/src/gui/LmmsPalette.cpp b/src/gui/LmmsPalette.cpp
new file mode 100644
index 0000000..6e5c93a
--- /dev/null
+++ b/src/gui/LmmsPalette.cpp
@@ -0,0 +1,100 @@
+/*
+ * LmmsPalette.cpp - dummy class for fetching palette qproperties from CSS
+ *
+ *
+ * Copyright (c) 2007-2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <QApplication>
+#include <QStyle>
+#include "LmmsPalette.h"
+#include "LmmsStyle.h"
+
+
+LmmsPalette::LmmsPalette( QWidget * parent, QStyle * stylearg ) :
+ QWidget( parent ),
+
+/* sane defaults in case fetching from stylesheet fails*/
+
+ m_background( 91, 101, 113 ),
+ m_windowText( 240, 240, 240 ),
+ m_base( 128, 128, 128 ),
+ m_text( 224, 224, 224 ),
+ m_button( 201, 201, 201 ),
+ m_shadow( 0,0,0 ),
+ m_buttonText( 0,0,0 ),
+ m_brightText( 74, 253, 133 ),
+ m_highlight( 100, 100, 100 ),
+ m_highlightedText( 255, 255, 255 ),
+ m_toolTipText( 0, 0, 0 ),
+ m_toolTipBase( 128, 128, 128 )
+{
+ setStyle( stylearg );
+ stylearg->polish( this );
+ ensurePolished();
+}
+
+LmmsPalette::~LmmsPalette()
+{
+}
+
+#define ACCESSMET( read, write ) \
+ QColor LmmsPalette:: read () const \
+ { return m_##read ; } \
+ void LmmsPalette:: write ( const QColor & c ) \
+ { m_##read = QColor( c ); }
+
+
+ ACCESSMET( background, setBackground )
+ ACCESSMET( windowText, setWindowText )
+ ACCESSMET( base, setBase )
+ ACCESSMET( text, setText )
+ ACCESSMET( button, setButton )
+ ACCESSMET( shadow, setShadow )
+ ACCESSMET( buttonText, setButtonText )
+ ACCESSMET( brightText, setBrightText )
+ ACCESSMET( highlight, setHighlight )
+ ACCESSMET( highlightedText, setHighlightedText )
+ ACCESSMET( toolTipText, setToolTipText )
+ ACCESSMET( toolTipBase, setToolTipBase )
+
+
+QPalette LmmsPalette::palette() const
+{
+ QPalette pal = QApplication::style()->standardPalette();
+
+ pal.setColor( QPalette::Background, background() );
+ pal.setColor( QPalette::WindowText, windowText() );
+ pal.setColor( QPalette::Base, base() );
+ pal.setColor( QPalette::ButtonText, buttonText() );
+ pal.setColor( QPalette::BrightText, brightText() );
+ pal.setColor( QPalette::Text, text() );
+ pal.setColor( QPalette::Button, button() );
+ pal.setColor( QPalette::Shadow, shadow() );
+ pal.setColor( QPalette::Highlight, highlight() );
+ pal.setColor( QPalette::HighlightedText, highlightedText() );
+ pal.setBrush( QPalette::ToolTipText, QBrush( toolTipText() ) );
+ pal.setBrush( QPalette::ToolTipBase, QBrush( toolTipBase() ) );
+ return pal;
+}
+
+
+#include "moc_LmmsPalette.cxx"
diff --git a/src/gui/LmmsStyle.cpp b/src/gui/LmmsStyle.cpp
index cc57470..1028165 100644
--- a/src/gui/LmmsStyle.cpp
+++ b/src/gui/LmmsStyle.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -32,7 +32,7 @@
#include <QtGui/QStyleOption>
#include "LmmsStyle.h"
-
+#include "LmmsPalette.h"
const int BUTTON_LENGTH = 24;
@@ -106,7 +106,7 @@ static const char * const s_scrollbarArrowLeftXpm[] = {
"..#$$%",
"...+@@"};
-
+QPalette * LmmsStyle::s_palette = NULL;
QLinearGradient getGradient( const QColor & _col, const QRectF & _rect )
{
@@ -195,6 +195,7 @@ void drawPath( QPainter *p, const QPainterPath &path,
}
+
LmmsStyle::LmmsStyle() :
QPlastiqueStyle()
{
@@ -202,7 +203,7 @@ LmmsStyle::LmmsStyle() :
file.open( QIODevice::ReadOnly );
qApp->setStyleSheet( file.readAll() );
- qApp->setPalette( standardPalette() );
+ if( s_palette != NULL ) { qApp->setPalette( *s_palette ); }
}
@@ -210,39 +211,10 @@ LmmsStyle::LmmsStyle() :
QPalette LmmsStyle::standardPalette( void ) const
{
+ if( s_palette != NULL) { return * s_palette; }
QPalette pal = QPlastiqueStyle::standardPalette();
-/* sane defaults in case fetching from stylesheet fails*/
-
- pal.setColor( QPalette::Background, QColor( 91, 101, 113 ) );
- pal.setColor( QPalette::WindowText, QColor( 240, 240, 240 ) );
- pal.setColor( QPalette::Base, QColor( 128, 128, 128 ) );
- pal.setColor( QPalette::Text, QColor( 224, 224, 224 ) );
- pal.setColor( QPalette::Button, QColor( 201, 201, 201 ) );
- pal.setColor( QPalette::Shadow, QColor( 0, 0, 0 ) );
- pal.setColor( QPalette::ButtonText, QColor( 0, 0, 0 ) );
- pal.setColor( QPalette::BrightText, QColor( 74, 253, 133 ) );
- pal.setColor( QPalette::Highlight, QColor( 100, 100, 100 ) );
- pal.setColor( QPalette::HighlightedText, QColor( 255, 255, 255 ) );
-
-/* fetch from stylesheet using regexp */
-
- QStringList paletteData = qApp->styleSheet().split( '\n' ).filter( QRegExp( "^palette:*" ) );
- foreach( QString s, paletteData )
- {
- if (s.contains(":background")) { pal.setColor( QPalette::Background, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":windowtext")) { pal.setColor( QPalette::WindowText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":base")) { pal.setColor( QPalette::Base, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":buttontext")) { pal.setColor( QPalette::ButtonText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":brighttext")) { pal.setColor( QPalette::BrightText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":text")) { pal.setColor( QPalette::Text, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":button")) { pal.setColor( QPalette::Button, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":shadow")) { pal.setColor( QPalette::Shadow, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":highlightedtext")) { pal.setColor( QPalette::HighlightedText, QColor( s.mid( s.indexOf("#"), 7 ) ) ); }
- else if (s.contains(":highlight")) { pal.setColor( QPalette::Highlight, QColor( s.mid( s.indexOf("#"), 7 ) ) ); };
- }
-
return( pal );
}
diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp
index eb6dcf1..fa7b38c 100644
--- a/src/gui/MainWindow.cpp
+++ b/src/gui/MainWindow.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -48,7 +48,7 @@
#include "PianoView.h"
#include "about_dialog.h"
#include "ControllerRackView.h"
-#include "file_browser.h"
+#include "FileBrowser.h"
#include "plugin_browser.h"
#include "SideBar.h"
#include "config_mgr.h"
@@ -94,43 +94,51 @@ MainWindow::MainWindow() :
splitter->setChildrenCollapsible( FALSE );
QString wdir = configManager::inst()->workingDir();
- sideBar->appendTab( new pluginBrowser( splitter ) );
- sideBar->appendTab( new fileBrowser(
+ sideBar->appendTab( new PluginBrowser( splitter ) );
+ sideBar->appendTab( new FileBrowser(
configManager::inst()->userProjectsDir() + "*" +
configManager::inst()->factoryProjectsDir(),
"*.mmp *.mmpz *.xml *.mid *.flp",
tr( "My projects" ),
embed::getIconPixmap( "project_file" ).transformed( QTransform().rotate( 90 ) ),
splitter ) );
- sideBar->appendTab( new fileBrowser(
+ sideBar->appendTab( new FileBrowser(
configManager::inst()->userSamplesDir() + "*" +
configManager::inst()->factorySamplesDir(),
"*", tr( "My samples" ),
embed::getIconPixmap( "sample_file" ).transformed( QTransform().rotate( 90 ) ),
splitter ) );
- sideBar->appendTab( new fileBrowser(
+ sideBar->appendTab( new FileBrowser(
configManager::inst()->userPresetsDir() + "*" +
configManager::inst()->factoryPresetsDir(),
"*.xpf *.cs.xml *.xiz",
tr( "My presets" ),
embed::getIconPixmap( "preset_file" ).transformed( QTransform().rotate( 90 ) ),
splitter ) );
- sideBar->appendTab( new fileBrowser( QDir::homePath(), "*",
+ sideBar->appendTab( new FileBrowser( QDir::homePath(), "*",
tr( "My home" ),
embed::getIconPixmap( "home" ).transformed( QTransform().rotate( 90 ) ),
splitter ) );
- QFileInfoList drives = QDir::drives();
+
QStringList root_paths;
+#ifdef LMMS_BUILD_APPLE
+ root_paths += "/Volumes";
+#else
+ QFileInfoList drives = QDir::drives();
foreach( const QFileInfo & drive, drives )
{
root_paths += drive.absolutePath();
}
- sideBar->appendTab( new fileBrowser( root_paths.join( "*" ), "*",
+#endif
+ sideBar->appendTab( new FileBrowser( root_paths.join( "*" ), "*",
#ifdef LMMS_BUILD_WIN32
tr( "My computer" ),
+#elif defined(LMMS_BUILD_APPLE)
+ tr( "Volumes" ),
#else
tr( "Root directory" ),
#endif
+
embed::getIconPixmap( "computer" ).transformed( QTransform().rotate( 90 ) ),
splitter,
#ifdef LMMS_BUILD_WIN32
@@ -279,15 +287,15 @@ void MainWindow::finalize()
QMenu * edit_menu = new QMenu( this );
menuBar()->addMenu( edit_menu )->setText( tr( "&Edit" ) );
-/* edit_menu->addAction( embed::getIconPixmap( "edit_undo" ),
+ edit_menu->addAction( embed::getIconPixmap( "edit_undo" ),
tr( "Undo" ),
this, SLOT( undo() ),
Qt::CTRL + Qt::Key_Z );
edit_menu->addAction( embed::getIconPixmap( "edit_redo" ),
tr( "Redo" ),
this, SLOT( redo() ),
- Qt::CTRL + Qt::Key_R );
- edit_menu->addSeparator();*/
+ Qt::CTRL + Qt::Key_Y );
+ edit_menu->addSeparator();
edit_menu->addAction( embed::getIconPixmap( "setup_general" ),
tr( "Settings" ),
this, SLOT( showSettingsDialog() ) );
@@ -388,6 +396,12 @@ void MainWindow::finalize()
SLOT( exportProject() ),
m_toolBar );
+ toolButton * whatsthis = new toolButton(
+ embed::getIconPixmap( "whatsthis" ),
+ tr( "What's this?" ),
+ this, SLOT( enterWhatsThisMode() ),
+ m_toolBar );
+
m_toolBarLayout->setColumnMinimumWidth( 0, 5 );
m_toolBarLayout->addWidget( project_new, 0, 1 );
@@ -396,7 +410,7 @@ void MainWindow::finalize()
m_toolBarLayout->addWidget( project_open_recent, 0, 4 );
m_toolBarLayout->addWidget( project_save, 0, 5 );
m_toolBarLayout->addWidget( project_export, 0, 6 );
-
+ m_toolBarLayout->addWidget( whatsthis, 0, 7 );
// window-toolbar
@@ -515,6 +529,11 @@ void MainWindow::finalize()
setupDialog sd( setupDialog::AudioSettings );
sd.exec();
}
+ // reset window title every time we change the state of a subwindow to show the correct title
+ foreach( QMdiSubWindow * subWindow, workspace()->subWindowList() )
+ {
+ connect( subWindow, SIGNAL( windowStateChanged(Qt::WindowStates,Qt::WindowStates) ), this, SLOT( resetWindowTitle() ) );
+ }
}
@@ -740,11 +759,14 @@ void MainWindow::updateRecentlyOpenedProjectsMenu()
void MainWindow::openRecentlyOpenedProject( QAction * _action )
{
- const QString & f = _action->text();
- setCursor( Qt::WaitCursor );
- engine::getSong()->loadProject( f );
- configManager::inst()->addRecentlyOpenedProject( f );
- setCursor( Qt::ArrowCursor );
+ if ( mayChangeProject() )
+ {
+ const QString & f = _action->text();
+ setCursor( Qt::WaitCursor );
+ engine::getSong()->loadProject( f );
+ configManager::inst()->addRecentlyOpenedProject( f );
+ setCursor( Qt::ArrowCursor );
+ }
}
diff --git a/src/gui/ModelView.cpp b/src/gui/ModelView.cpp
index 3d22b09..6dfb530 100644
--- a/src/gui/ModelView.cpp
+++ b/src/gui/ModelView.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/PeakControllerDialog.cpp b/src/gui/PeakControllerDialog.cpp
index 06fb770..e513cd4 100644
--- a/src/gui/PeakControllerDialog.cpp
+++ b/src/gui/PeakControllerDialog.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008-2009 Paul Giblock <drfaygo/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp
index 7d0b994..266a141 100644
--- a/src/gui/PianoRoll.cpp
+++ b/src/gui/PianoRoll.cpp
@@ -5,7 +5,7 @@
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2008 Andrew Kelley <superjoe30/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -58,7 +58,7 @@
#include "MainWindow.h"
#include "MidiEvent.h"
#include "DataFile.h"
-#include "pattern.h"
+#include "Pattern.h"
#include "Piano.h"
#include "pixmap_button.h"
#include "song.h"
@@ -67,7 +67,12 @@
#include "text_float.h"
#include "timeline.h"
#include "tool_button.h"
-#include "tooltip.h"
+#include "text_float.h"
+
+
+#if QT_VERSION < 0x040800
+#define MiddleButton MidButton
+#endif
typedef AutomationPattern::timeMap timeMap;
@@ -126,6 +131,8 @@ QPixmap * PianoRoll::s_toolSelect = NULL;
QPixmap * PianoRoll::s_toolMove = NULL;
QPixmap * PianoRoll::s_toolOpen = NULL;
+textFloat * PianoRoll::s_textFloat = NULL;
+
// used for drawing of piano
PianoRoll::PianoRollKeyTypes PianoRoll::prKeyOrder[] =
{
@@ -170,7 +177,11 @@ PianoRoll::PianoRoll() :
m_editMode( ModeDraw ),
m_mouseDownLeft( false ),
m_mouseDownRight( false ),
- m_scrollBack( false )
+ m_scrollBack( false ),
+ m_gridColor( 0, 0, 0 ),
+ m_noteModeColor( 0, 0, 0 ),
+ m_noteColor( 0, 0, 0 ),
+ m_barColor( 0, 0, 0 )
{
// gui names of edit modes
m_nemStr.push_back( tr( "Note Volume" ) );
@@ -275,6 +286,12 @@ PianoRoll::PianoRoll() :
s_toolOpen = new QPixmap( embed::getIconPixmap(
"automation" ) );
}
+
+ // init text-float
+ if( s_textFloat == NULL )
+ {
+ s_textFloat = new textFloat;
+ }
setAttribute( Qt::WA_OpaquePaintEvent, true );
@@ -456,8 +473,6 @@ PianoRoll::PianoRoll() :
tr( "Click here and the notes from the clipboard will be "
"pasted at the first visible measure." ) );
-
-
QLabel * zoom_lbl = new QLabel( m_toolBar );
zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) );
@@ -608,6 +623,54 @@ PianoRoll::PianoRoll() :
tb_layout->addSpacing( 4 );
tb_layout->addWidget( m_chordComboBox );
tb_layout->addStretch();
+
+ m_zoomingComboBox->setWhatsThis(
+ tr(
+ "This controls the magnification of an axis. "
+ "It can be helpful to choose magnification for a specific "
+ "task. For ordinary editing, the magnification should be "
+ "fitted to your smallest notes. "
+ ) );
+
+ m_quantizeComboBox->setWhatsThis(
+ tr(
+ "The 'Q' stands for quantization, and controls the grid size "
+ "notes and control points snap to. "
+ "With smaller quantization values, you can draw shorter notes "
+ "in Piano Roll, and more exact control points in the "
+ "Automation Editor."
+
+ ) );
+
+ m_noteLenComboBox->setWhatsThis(
+ tr(
+ "This lets you select the length of new notes. "
+ "'Last Note' means that LMMS will use the note length of "
+ "the note you last edited"
+ ) );
+
+ m_scaleComboBox->setWhatsThis(
+ tr(
+ "The feature is directly connected to the context-menu "
+ "on the virtual keyboard, to the left in Piano Roll. "
+ "After you have chosen the scale you want "
+ "in this drop-down menu, "
+ "you can right click on a desired key in the virtual keyboard, "
+ "and then choose 'Mark current Scale'. "
+ "LMMS will highlight all notes that belongs to the chosen scale, "
+ "and in the key you have selected!"
+ ) );
+
+
+ m_chordComboBox->setWhatsThis(
+ tr(
+ "Let you select a chord which LMMS then can draw or highlight."
+ "You can find the most common chords in this drop-down menu. "
+ "After you have selected a chord, click anywhere to place the chord, and right "
+ "click on the virtual keyboard to open context menu and highlight the chord. "
+ "To return to single note placement, you need to choose 'No chord' "
+ "in this drop-down menu."
+ ) );
// setup our actual window
setFocusPolicy( Qt::StrongFocus );
@@ -729,19 +792,27 @@ PianoRoll::~PianoRoll()
}
-void PianoRoll::setCurrentPattern( pattern * _new_pattern )
+void PianoRoll::setCurrentPattern( Pattern* newPattern )
{
- if( validPattern() )
+ if( hasValidPattern() )
{
m_pattern->instrumentTrack()->disconnect( this );
}
- m_pattern = _new_pattern;
+ // force the song-editor to stop playing if it played pattern before
+ if( engine::getSong()->isPlaying() &&
+ engine::getSong()->playMode() == song::Mode_PlayPattern )
+ {
+ engine::getSong()->playPattern( NULL );
+ }
+
+ // set new data
+ m_pattern = newPattern;
m_currentPosition = 0;
m_currentNote = NULL;
m_startKey = INITIAL_START_KEY;
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
//resizeEvent( NULL );
setWindowTitle( tr( "Piano-Roll - no pattern" ) );
@@ -782,6 +853,9 @@ void PianoRoll::setCurrentPattern( pattern * _new_pattern )
// of start-notes and so on...)
resizeEvent( NULL );
+ // make sure to always get informed about the pattern being destroyed
+ connect( m_pattern, SIGNAL( destroyedPattern( Pattern* ) ), this, SLOT( hidePattern( Pattern* ) ) );
+
connect( m_pattern->instrumentTrack(), SIGNAL( midiNoteOn( const note& ) ), this, SLOT( startRecordNote( const note& ) ) );
connect( m_pattern->instrumentTrack(), SIGNAL( midiNoteOff( const note& ) ), this, SLOT( finishRecordNote( const note& ) ) );
connect( m_pattern->instrumentTrack()->pianoModel(), SIGNAL( dataChanged() ), this, SLOT( update() ) );
@@ -794,6 +868,15 @@ void PianoRoll::setCurrentPattern( pattern * _new_pattern )
+void PianoRoll::hidePattern( Pattern* pattern )
+{
+ if( m_pattern == pattern )
+ {
+ setCurrentPattern( NULL );
+ }
+}
+
+
void PianoRoll::saveSettings( QDomDocument & _doc, QDomElement & _this )
{
@@ -824,10 +907,36 @@ void PianoRoll::setPauseIcon( bool pause )
}
+/** \brief qproperty access implementation */
+
+QColor PianoRoll::gridColor() const
+{ return m_gridColor; }
+
+void PianoRoll::setGridColor( const QColor & c )
+{ m_gridColor = c; }
+
+QColor PianoRoll::noteModeColor() const
+{ return m_noteModeColor; }
+
+void PianoRoll::setNoteModeColor( const QColor & c )
+{ m_noteModeColor = c; }
+
+QColor PianoRoll::noteColor() const
+{ return m_noteColor; }
+
+void PianoRoll::setNoteColor( const QColor & c )
+{ m_noteColor = c; }
+
+QColor PianoRoll::barColor() const
+{ return m_barColor; }
+
+void PianoRoll::setBarColor( const QColor & c )
+{ m_barColor = c; }
+
inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y,
- int _width, note * _n )
+ int _width, note * _n, const QColor & noteCol )
{
++_x;
++_y;
@@ -838,9 +947,8 @@ inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y,
_width = 2;
}
- int volVal = qMin( 255, (int) (
- ( (float)( _n->getVolume() - MinVolume ) ) /
- ( (float)( MaxVolume - MinVolume ) ) * 255.0f) );
+ int volVal = qMin( 255, 25 + (int) ( ( (float)( _n->getVolume() - MinVolume ) ) /
+ ( (float)( MaxVolume - MinVolume ) ) * 230.0f) );
float rightPercent = qMin<float>( 1.0f,
( (float)( _n->getPanning() - PanningLeft ) ) /
( (float)( PanningRight - PanningLeft ) ) * 2.0f );
@@ -849,8 +957,7 @@ inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y,
( (float)( PanningRight - _n->getPanning() ) ) /
( (float)( PanningRight - PanningLeft ) ) * 2.0f );
- const QColor defaultNoteColor( 0x77, 0xC7, 0xD8 );
- QColor col = defaultNoteColor;
+ QColor col = QColor( noteCol );
if( _n->length() < 0 )
{
@@ -886,13 +993,13 @@ inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y,
_p.setPen( Qt::SolidLine );
_p.setBrush( Qt::NoBrush );
- col = defaultNoteColor;
+ col = QColor( noteCol );
_p.setPen( QColor::fromHsv( col.hue(), col.saturation(),
qMin<float>( 255, volVal*1.7f ) ) );
_p.drawLine( _x, _y, _x + _width, _y );
_p.drawLine( _x, _y, _x, _y + KEY_LINE_HEIGHT - 2 );
- col = defaultNoteColor;
+ col = QColor( noteCol );
_p.setPen( QColor::fromHsv( col.hue(), col.saturation(), volVal/1.7 ) );
_p.drawLine( _x + _width, _y, _x + _width, _y + KEY_LINE_HEIGHT - 2 );
_p.drawLine( _x, _y + KEY_LINE_HEIGHT - 2, _x + _width,
@@ -900,7 +1007,7 @@ inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y,
// that little tab thing on the end hinting at the user
// to resize the note
- _p.setPen( defaultNoteColor.lighter( 200 ) );
+ _p.setPen( noteCol.lighter( 200 ) );
if( _width > 2 )
{
_p.drawLine( _x + _width - 3, _y + 2, _x + _width - 3,
@@ -919,7 +1026,7 @@ inline void PianoRoll::drawDetuningInfo( QPainter & _p, note * _n, int _x,
int _y )
{
int middle_y = _y + KEY_LINE_HEIGHT / 2;
- _p.setPen( QColor( 0x99, 0xAF, 0xFF ) );
+ _p.setPen( noteColor() );
int old_x = 0;
int old_y = 0;
@@ -1110,7 +1217,7 @@ int PianoRoll::selectionCount() const // how many notes are selected?
void PianoRoll::keyPressEvent( QKeyEvent* event )
{
- if( validPattern() && event->modifiers() == Qt::NoModifier )
+ if( hasValidPattern() && event->modifiers() == Qt::NoModifier )
{
const int key_num = PianoView::getKeyFromKeyEvent( event ) + ( DefaultOctave - 1 ) * KeysPerOctave;
@@ -1130,6 +1237,11 @@ void PianoRoll::keyPressEvent( QKeyEvent* event )
// if nothing selected, shift _everything_
shiftSemiTone( +12 );
}
+ else if((event->modifiers() & Qt::ShiftModifier) && m_action == ActionNone)
+ {
+ // Move selected notes up by one semitone
+ shiftSemiTone( 1 );
+ }
else
{
// scroll
@@ -1157,6 +1269,11 @@ void PianoRoll::keyPressEvent( QKeyEvent* event )
// if nothing selected, shift _everything_
shiftSemiTone( -12 );
}
+ else if((event->modifiers() & Qt::ShiftModifier) && m_action == ActionNone)
+ {
+ // Move selected notes down by one semitone
+ shiftSemiTone( -1 );
+ }
else
{
// scroll
@@ -1180,12 +1297,8 @@ void PianoRoll::keyPressEvent( QKeyEvent* event )
case Qt::Key_Left:
if( event->modifiers() & Qt::ControlModifier && m_action == ActionNone )
{
- // move time ticker
- if( ( m_timeLine->pos() -= 16 ) < 0 )
- {
- m_timeLine->pos().setTicks( 0 );
- }
- m_timeLine->updatePosition();
+ // Move selected notes by one bar to the left
+ shiftPos( - MidiTime::ticksPerTact() );
}
else if( event->modifiers() & Qt::ShiftModifier && m_action == ActionNone)
{
@@ -1218,9 +1331,8 @@ void PianoRoll::keyPressEvent( QKeyEvent* event )
case Qt::Key_Right:
if( event->modifiers() & Qt::ControlModifier && m_action == ActionNone)
{
- // move time ticker
- m_timeLine->pos() += 16;
- m_timeLine->updatePosition();
+ // Move selected notes by one bar to the right
+ shiftPos( MidiTime::ticksPerTact() );
}
else if( event->modifiers() & Qt::ShiftModifier && m_action == ActionNone)
{
@@ -1278,7 +1390,6 @@ void PianoRoll::keyPressEvent( QKeyEvent* event )
if( event->modifiers() & Qt::ControlModifier )
{
event->accept();
- m_selectButton->setChecked( true );
selectAll();
update();
}
@@ -1386,7 +1497,7 @@ void PianoRoll::keyPressEvent( QKeyEvent* event )
void PianoRoll::keyReleaseEvent( QKeyEvent* event )
{
- if( validPattern() && event->modifiers() == Qt::NoModifier )
+ if( hasValidPattern() && event->modifiers() == Qt::NoModifier )
{
const int key_num = PianoView::getKeyFromKeyEvent( event ) + ( DefaultOctave - 1 ) * KeysPerOctave;
@@ -1404,6 +1515,15 @@ void PianoRoll::keyReleaseEvent( QKeyEvent* event )
m_editMode = m_ctrlMode;
update();
break;
+
+ // update after undo/redo
+ case Qt::Key_Z:
+ case Qt::Key_R:
+ if( hasValidPattern() && event->modifiers() == Qt::ControlModifier )
+ {
+ update();
+ }
+ break;
}
update();
@@ -1420,6 +1540,7 @@ void PianoRoll::leaveEvent( QEvent * _e )
}
QWidget::leaveEvent( _e );
+ s_textFloat->hide();
}
@@ -1476,7 +1597,9 @@ inline int PianoRoll::keyAreaBottom() const
void PianoRoll::mousePressEvent( QMouseEvent * _me )
{
- if( validPattern() == false )
+ m_startedWithShift = _me->modifiers() & Qt::ShiftModifier;
+
+ if( hasValidPattern() == false )
{
return;
}
@@ -1571,6 +1694,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me )
// area
if( edit_note == true )
{
+ m_pattern->addJournalCheckPoint();
// scribble note edit changes
mouseMoveEvent( _me );
return;
@@ -1588,7 +1712,8 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me )
if( it == notes.begin()-1 )
{
is_new_note = true;
- m_pattern->setType( pattern::MelodyPattern );
+ m_pattern->addJournalCheckPoint();
+ m_pattern->setType( Pattern::MelodyPattern );
// then set new note
@@ -1633,8 +1758,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me )
// ops (move, resize) after this
// code-block
it = notes.begin();
- while( it != notes.end() &&
- *it != created_new_note )
+ while( it != notes.end() && *it != created_new_note )
{
++it;
}
@@ -1710,6 +1834,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me )
( m_currentNote->pos() + m_currentNote->length() )*m_ppt/ MidiTime::ticksPerTact() - RESIZE_AREA_WIDTH &&
m_currentNote->length() > 0 )
{
+ m_pattern->addJournalCheckPoint();
// then resize the note
m_action = ActionResizeNote;
@@ -1719,6 +1844,11 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me )
}
else
{
+ if( !created_new_note )
+ {
+ m_pattern->addJournalCheckPoint();
+ }
+
// otherwise move it
m_action = ActionMoveNote;
@@ -1774,6 +1904,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me )
m_mouseDownRight = true;
if( it != notes.begin()-1 )
{
+ m_pattern->addJournalCheckPoint();
if( ( *it )->length() > 0 )
{
m_pattern->removeNote( *it );
@@ -1850,16 +1981,69 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me )
void PianoRoll::mouseDoubleClickEvent( QMouseEvent * _me )
{
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
return;
}
- // if they clicked in the note edit area, clear selection
+ // if they clicked in the note edit area, enter value for the volume bar
if( _me->x() > noteEditLeft() && _me->x() < noteEditRight()
&& _me->y() > noteEditTop() && _me->y() < noteEditBottom() )
{
- clearSelectedNotes();
+ // get values for going through notes
+ int pixel_range = 4;
+ int x = _me->x() - WHITE_KEY_WIDTH;
+ const int ticks_start = ( x-pixel_range/2 ) *
+ MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ const int ticks_end = ( x+pixel_range/2 ) *
+ MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ const int ticks_middle = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+
+ // get note-vector of current pattern
+ NoteVector notes;
+ notes += m_pattern->notes();
+
+ // go through notes to figure out which one we want to change
+ NoteVector nv;
+ foreach( note * i, notes )
+ {
+ if( i->pos().getTicks() >= ticks_start
+ && i->pos().getTicks() <= ticks_end
+ && i->length().getTicks() != 0
+ && ( i->selected() || ! isSelection() ) )
+ {
+ nv += i;
+ }
+ }
+ // make sure we're on a note
+ if( nv.size() > 0 )
+ {
+ note * closest = NULL;
+ int closest_dist = 9999999;
+ // if we caught multiple notes, find the closest...
+ if( nv.size() > 1 )
+ {
+ foreach( note * i, nv )
+ {
+ const int dist = qAbs( i->pos().getTicks() - ticks_middle );
+ if( dist < closest_dist ) { closest = i; closest_dist = dist; }
+ }
+ // ... then remove all notes from the vector that aren't on the same exact time
+ NoteVector::Iterator it = nv.begin();
+ while( it != nv.end() )
+ {
+ if( ( *it )->pos().getTicks() != closest->pos().getTicks() )
+ {
+ it = nv.erase( it );
+ }
+ else
+ {
+ it++;
+ }
+ }
+ }
+ enterValue( &nv );
+ }
}
}
@@ -1878,7 +2062,7 @@ void PianoRoll::testPlayNote( note * n )
m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( n->key(), n->midiVelocity( baseVelocity ) );
- MidiEvent event( MidiMetaEvent, 0, n->key(), panningToMidi( n->getPanning() ) );
+ MidiEvent event( MidiMetaEvent, -1, n->key(), panningToMidi( n->getPanning() ) );
event.setMetaEvent( MidiNotePanning );
@@ -1959,7 +2143,7 @@ void PianoRoll::computeSelectedNotes(bool shift)
}
//int y_base = noteEditTop() - 1;
- if( validPattern() == true )
+ if( hasValidPattern() == true )
{
const NoteVector & notes = m_pattern->notes();
@@ -2015,6 +2199,7 @@ void PianoRoll::computeSelectedNotes(bool shift)
void PianoRoll::mouseReleaseEvent( QMouseEvent * _me )
{
+ s_textFloat->hide();
bool mustRepaint = false;
if( _me->button() & Qt::LeftButton )
@@ -2060,7 +2245,7 @@ void PianoRoll::mouseReleaseEvent( QMouseEvent * _me )
}
- if( validPattern() == true )
+ if( hasValidPattern() == true )
{
// turn off all notes that are playing
const NoteVector & notes = m_pattern->notes();
@@ -2101,7 +2286,7 @@ void PianoRoll::mouseReleaseEvent( QMouseEvent * _me )
void PianoRoll::mouseMoveEvent( QMouseEvent * _me )
{
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
update();
return;
@@ -2158,7 +2343,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me )
bool replay_note = key_num != m_lastKey
&& m_action == ActionMoveNote;
- if( replay_note )
+ if( replay_note || ( m_action == ActionMoveNote && ( _me->modifiers() & Qt::ShiftModifier ) && ! m_startedWithShift ) )
{
pauseTestNotes();
}
@@ -2170,13 +2355,14 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me )
_me->modifiers() & Qt::ShiftModifier
);
- if( replay_note && m_action == ActionMoveNote )
+ if( replay_note && m_action == ActionMoveNote && ! ( ( _me->modifiers() & Qt::ShiftModifier ) && ! m_startedWithShift ) )
{
pauseTestNotes( false );
}
}
else if( ( edit_note == true || m_action == ActionChangeNoteProperty ) &&
- _me->buttons() & Qt::LeftButton )
+ ( _me->buttons() & Qt::LeftButton || _me->buttons() & Qt::MiddleButton
+ || ( _me->buttons() & Qt::RightButton && _me->modifiers() & Qt::ShiftModifier ) ) )
{
// editing note properties
@@ -2186,38 +2372,66 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me )
// convert to ticks so that we can check which notes
// are in the range
- int ticks_start = (x-pixel_range/2) *
+ int ticks_start = ( x-pixel_range/2 ) *
MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
- int ticks_end = (x+pixel_range/2) *
+ int ticks_end = ( x+pixel_range/2 ) *
MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
// get note-vector of current pattern
const NoteVector & notes = m_pattern->notes();
// determine what volume/panning to set note to
- volume_t vol = tLimit<int>( MinVolume +
- ( ( (float)noteEditBottom() ) - ( (float)_me->y() ) ) /
- ( (float)( noteEditBottom() - noteEditTop() ) ) *
- ( MaxVolume - MinVolume ),
- MinVolume, MaxVolume );
- panning_t pan = tLimit<int>( PanningLeft +
- ( (float)( noteEditBottom() - _me->y() ) ) /
- ( (float)( noteEditBottom() - noteEditTop() ) ) *
- ( (float)( PanningRight - PanningLeft ) ),
- PanningLeft, PanningRight);
-
+ // if middle-click, set to defaults
+ volume_t vol;
+ panning_t pan;
+
+ if( _me->buttons() & Qt::LeftButton )
+ {
+ vol = tLimit<int>( MinVolume +
+ ( ( (float)noteEditBottom() ) - ( (float)_me->y() ) ) /
+ ( (float)( noteEditBottom() - noteEditTop() ) ) *
+ ( MaxVolume - MinVolume ),
+ MinVolume, MaxVolume );
+ pan = tLimit<int>( PanningLeft +
+ ( (float)( noteEditBottom() - _me->y() ) ) /
+ ( (float)( noteEditBottom() - noteEditTop() ) ) *
+ ( (float)( PanningRight - PanningLeft ) ),
+ PanningLeft, PanningRight);
+ }
+ else
+ {
+ vol = DefaultVolume;
+ pan = DefaultPanning;
+ }
+
if( m_noteEditMode == NoteEditVolume )
{
m_lastNoteVolume = vol;
+ //! \todo display velocity for MIDI-based instruments
+ // possibly dBV values too? not sure if it makes sense for note volumes...
+ s_textFloat->setText( tr("Volume: %1%").arg( vol ) );
}
else if( m_noteEditMode == NoteEditPanning )
{
m_lastNotePanning = pan;
+ if( pan < 0 )
+ {
+ s_textFloat->setText( tr("Panning: %1% left").arg( qAbs( pan ) ) );
+ }
+ else if( pan > 0 )
+ {
+ s_textFloat->setText( tr("Panning: %1% right").arg( qAbs( pan ) ) );
+ }
+ else
+ {
+ s_textFloat->setText( tr("Panning: center") );
+ }
}
// loop through vector
+ bool on_note = false;
bool use_selection = isSelection();
NoteVector::ConstIterator it = notes.begin()+notes.size()-1;
for( int i = 0; i < notes.size(); ++i )
@@ -2228,6 +2442,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me )
&& n->length().getTicks() != 0
&& ( n->selected() || ! use_selection ) )
{
+ on_note = true;
m_pattern->dataChanged();
// play the note so that the user can tell how loud it is
@@ -2240,12 +2455,12 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me )
const int baseVelocity = m_pattern->instrumentTrack()->midiPort()->baseVelocity();
- m_pattern->instrumentTrack()->processInEvent( MidiEvent( MidiKeyPressure, 0, n->key(), n->midiVelocity( baseVelocity ) ) );
+ m_pattern->instrumentTrack()->processInEvent( MidiEvent( MidiKeyPressure, -1, n->key(), n->midiVelocity( baseVelocity ) ) );
}
else if( m_noteEditMode == NoteEditPanning )
{
n->setPanning( pan );
- MidiEvent evt( MidiMetaEvent, 0, n->key(), panningToMidi( pan ) );
+ MidiEvent evt( MidiMetaEvent, -1, n->key(), panningToMidi( pan ) );
evt.setMetaEvent( MidiNotePanning );
m_pattern->instrumentTrack()->processInEvent( evt );
}
@@ -2261,10 +2476,22 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me )
}
}
+ // set textfloat visible if we're on a note
+ if( on_note )
+ {
+ s_textFloat->moveGlobal( this, QPoint( _me->x() + 4, _me->y() + 16 ) );
+ s_textFloat->show();
+ }
+ else
+ {
+ s_textFloat->hide();
+ }
+
--it;
}
}
+
else if( _me->buttons() == Qt::NoButton && m_editMode == ModeDraw )
{
// set move- or resize-cursor
@@ -2557,7 +2784,7 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift )
}
// make sure notes won't go outside boundary conditions
- if( m_action == ActionMoveNote )
+ if( m_action == ActionMoveNote && ! ( shift && ! m_startedWithShift ) )
{
if( m_moveBoundaryLeft + off_ticks < 0 )
{
@@ -2598,8 +2825,7 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift )
if( ( *it )->selected() )
{
-
- if( m_action == ActionMoveNote )
+ if( m_action == ActionMoveNote && ! ( shift && ! m_startedWithShift ) )
{
// moving note
int pos_ticks = ( *it )->oldPos().getTicks()
@@ -2646,6 +2872,17 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift )
m_lenOfNewNotes = ( *it )->length();
}
+ else if( m_action == ActionMoveNote && ( shift && ! m_startedWithShift ) )
+ {
+ // quick resize, toggled by holding shift after starting a note move, but not before
+ int ticks_new = ( *it )->oldLength().getTicks() + off_ticks;
+ if( ticks_new <= 0 )
+ {
+ ticks_new = 1;
+ }
+ ( *it )->setLength( MidiTime( ticks_new ) );
+ m_lenOfNewNotes = ( *it )->length();
+ }
}
++it;
}
@@ -2717,11 +2954,19 @@ static void printNoteHeights(QPainter& p, int bottom, int width, int startKey)
void PianoRoll::paintEvent( QPaintEvent * _pe )
{
+ QColor horizCol = QColor( gridColor() );
+ QColor vertCol = QColor( gridColor() );
+
QStyleOption opt;
opt.initFrom( this );
QPainter p( this );
style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this );
+ QBrush bgColor = p.background();
+
+ // fill with bg color
+ p.fillRect( 0,0, width(), height(), bgColor );
+
// set font-size to 8
p.setFont( pointSize<8>( p.font() ) );
@@ -2795,7 +3040,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
if( prKeyOrder[key % KeysPerOctave] == PR_WHITE_KEY_SMALL )
{
// draw a small one while checking if it is pressed or not
- if( validPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) )
+ if( hasValidPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) )
{
p.drawPixmap( PIANO_X, y - WHITE_KEY_SMALL_HEIGHT, *s_whiteKeySmallPressedPm );
}
@@ -2811,7 +3056,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
PR_WHITE_KEY_BIG )
{
// draw a big one while checking if it is pressed or not
- if( validPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) )
+ if( hasValidPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) )
{
p.drawPixmap( PIANO_X, y - WHITE_KEY_BIG_HEIGHT, *s_whiteKeyBigPressedPm );
}
@@ -2831,21 +3076,19 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
// label C-keys...
if( static_cast<Keys>( key % KeysPerOctave ) == Key_C )
{
+ const QString cLabel = "C" + QString::number( static_cast<int>( key / KeysPerOctave ) );
p.setPen( QColor( 240, 240, 240 ) );
- p.drawText( C_KEY_LABEL_X + 1, y+14, "C" +
- QString::number( static_cast<int>( key /
- KeysPerOctave ) ) );
+ p.drawText( C_KEY_LABEL_X + 1, y+14, cLabel );
p.setPen( QColor( 0, 0, 0 ) );
- p.drawText( C_KEY_LABEL_X, y + 13, "C" +
- QString::number( static_cast<int>( key /
- KeysPerOctave ) ) );
- p.setPen( QColor( 0x4F, 0x4F, 0x4F ) );
+ p.drawText( C_KEY_LABEL_X, y + 13, cLabel );
+ horizCol.setAlpha( 192 );
}
else
{
- p.setPen( QColor( 0x3F, 0x3F, 0x3F ) );
+ horizCol.setAlpha( 128 );
}
// draw key-line
+ p.setPen( horizCol );
p.drawLine( WHITE_KEY_WIDTH, key_line_y, width(), key_line_y );
++key;
}
@@ -2886,7 +3129,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
// then draw it (calculation of y very complicated,
// but that's the only working solution, sorry...)
// check if the key is pressed or not
- if( validPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) )
+ if( hasValidPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) )
{
p.drawPixmap( PIANO_X, y - ( first_white_key_height -
WHITE_KEY_SMALL_HEIGHT ) -
@@ -2923,14 +3166,13 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
// erase the area below the piano, because there might be keys that
// should be only half-visible
p.fillRect( QRect( 0, keyAreaBottom(),
- WHITE_KEY_WIDTH, noteEditBottom()-keyAreaBottom() ),
- QColor( 0, 0, 0 ) );
+ WHITE_KEY_WIDTH, noteEditBottom()-keyAreaBottom() ), bgColor );
// display note editing info
QFont f = p.font();
f.setBold( false );
p.setFont( pointSize<10>( f ) );
- p.setPen( QColor( 255, 255, 255) );
+ p.setPen( noteModeColor() );
p.drawText( QRect( 0, keyAreaBottom(),
WHITE_KEY_WIDTH, noteEditBottom() - keyAreaBottom() ),
Qt::AlignCenter | Qt::TextWordWrap,
@@ -2973,17 +3215,19 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
// every tact-start needs to be a bright line
if( tact_16th % spt == 0 )
{
- p.setPen( QColor( 0x7F, 0x7F, 0x7F ) );
+ p.setPen( gridColor() );
}
// normal line
else if( tact_16th % 4 == 0 )
{
- p.setPen( QColor( 0x5F, 0x5F, 0x5F ) );
+ vertCol.setAlpha( 160 );
+ p.setPen( vertCol );
}
// weak line
else
{
- p.setPen( QColor( 0x3F, 0x3F, 0x3F ) );
+ vertCol.setAlpha( 128 );
+ p.setPen( vertCol );
}
p.drawLine( (int)x, PR_TOP_MARGIN, (int)x, height() -
@@ -2992,7 +3236,8 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
// extra 32nd's line
if( show32nds )
{
- p.setPen( QColor( 0x22, 0x22, 0x22 ) );
+ vertCol.setAlpha( 80 );
+ p.setPen( vertCol );
p.drawLine( (int)(x + pp16th/2) , PR_TOP_MARGIN,
(int)(x + pp16th/2), height() -
PR_BOTTOM_MARGIN );
@@ -3021,7 +3266,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
}
int y_base = keyAreaBottom() - 1;
- if( validPattern() == true )
+ if( hasValidPattern() == true )
{
p.setClipRect( WHITE_KEY_WIDTH, PR_TOP_MARGIN,
width() - WHITE_KEY_WIDTH,
@@ -3071,15 +3316,14 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
// note
drawNoteRect( p, x + WHITE_KEY_WIDTH,
y_base - key * KEY_LINE_HEIGHT,
- note_width, *it );
+ note_width, *it, noteColor() );
}
// draw note editing stuff
int editHandleTop = 0;
if( m_noteEditMode == NoteEditVolume )
{
- QColor color = QColor::fromHsv( 140, 221,
- qMin(255, 60 + ( *it )->getVolume() ) );
+ QColor color = barColor().lighter( 30 + ( ( *it )->getVolume() * 90 / MaxVolume ) );
if( ( *it )->selected() )
{
color.setRgb( 0x00, 0x40, 0xC0 );
@@ -3097,7 +3341,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
}
else if( m_noteEditMode == NoteEditPanning )
{
- QColor color( 0x99, 0xAF, 0xFF );
+ QColor color( noteColor() );
if( ( *it )->selected() )
{
color.setRgb( 0x00, 0x40, 0xC0 );
@@ -3125,8 +3369,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
}
}
- p.setPen( QPen( QColor( 0x99, 0xAF, 0xFF ),
- NE_LINE_WIDTH+2 ) );
+ p.setPen( QPen( noteColor(), NE_LINE_WIDTH+2 ) );
p.drawPoints( editHandles );
}
@@ -3135,7 +3378,8 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
QFont f = p.font();
f.setBold( true );
p.setFont( pointSize<14>( f ) );
- p.setPen( QColor( 0x4A, 0xFD, 0x85 ) );
+ p.setPen( QApplication::palette().color( QPalette::Active,
+ QPalette::BrightText ) );
p.drawText( WHITE_KEY_WIDTH + 20, PR_TOP_MARGIN + 40,
tr( "Please open a pattern by double-clicking "
"on it!" ) );
@@ -3156,7 +3400,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
p.drawRect( x + WHITE_KEY_WIDTH, y, w, h );
// TODO: Get this out of paint event
- int l = ( validPattern() == true )? (int) m_pattern->length() : 0;
+ int l = ( hasValidPattern() == true )? (int) m_pattern->length() : 0;
// reset scroll-range
if( m_leftRightScroll->maximum() != l )
@@ -3165,21 +3409,21 @@ void PianoRoll::paintEvent( QPaintEvent * _pe )
m_leftRightScroll->setPageStep( l );
}
+ // set alpha for horizontal lines
+ horizCol.setAlpha( 64 );
+
// horizontal line for the key under the cursor
- if( validPattern() == true )
+ if( hasValidPattern() == true )
{
int key_num = getKey( mapFromGlobal( QCursor::pos() ).y() );
p.fillRect( 10, keyAreaBottom() + 3 - KEY_LINE_HEIGHT *
- ( key_num - m_startKey + 1 ),
- width() - 10, KEY_LINE_HEIGHT - 7,
- QColor( 64, 64, 64 ) );
+ ( key_num - m_startKey + 1 ), width() - 10, KEY_LINE_HEIGHT - 7, horizCol );
}
// bar to resize note edit area
p.setClipRect( 0, 0, width(), height() );
p.fillRect( QRect( 0, keyAreaBottom(),
- width()-PR_RIGHT_MARGIN, NOTE_EDIT_RESIZE_BAR ),
- QColor( 64, 64, 64 ) );
+ width()-PR_RIGHT_MARGIN, NOTE_EDIT_RESIZE_BAR ), horizCol );
const QPixmap * cursor = NULL;
// draw current edit-mode-icon below the cursor
@@ -3255,25 +3499,120 @@ void PianoRoll::resizeEvent( QResizeEvent * )
void PianoRoll::wheelEvent( QWheelEvent * _we )
{
_we->accept();
- if( _we->modifiers() & Qt::ControlModifier )
+ // handle wheel events for note edit area - for editing note vol/pan with mousewheel
+ if( _we->x() > noteEditLeft() && _we->x() < noteEditRight()
+ && _we->y() > noteEditTop() && _we->y() < noteEditBottom() )
+ {
+ // get values for going through notes
+ int pixel_range = 8;
+ int x = _we->x() - WHITE_KEY_WIDTH;
+ int ticks_start = ( x-pixel_range/2 ) *
+ MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ int ticks_end = ( x+pixel_range/2 ) *
+ MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+
+ // get note-vector of current pattern
+ NoteVector notes;
+ notes += m_pattern->notes();
+
+ // go through notes to figure out which one we want to change
+ NoteVector nv;
+ foreach( note * i, notes )
+ {
+ if( i->pos().getTicks() >= ticks_start
+ && i->pos().getTicks() <= ticks_end
+ && i->length().getTicks() != 0
+ && ( i->selected() || ! isSelection() ) )
+ {
+ nv += i;
+ }
+ }
+ if( nv.size() > 0 )
+ {
+ const int step = _we->delta() > 0 ? 1.0 : -1.0;
+ if( m_noteEditMode == NoteEditVolume )
+ {
+ foreach( note * n, nv )
+ {
+ volume_t vol = tLimit<int>( n->getVolume() + step, MinVolume, MaxVolume );
+ n->setVolume( vol );
+ }
+ s_textFloat->setText( tr("Volume: %1%").arg( nv[0]->getVolume() ) );
+ }
+ else if( m_noteEditMode == NoteEditPanning )
+ {
+ foreach( note * n, nv )
+ {
+ panning_t pan = tLimit<int>( n->getPanning() + step, PanningLeft, PanningRight );
+ n->setPanning( pan );
+ }
+ panning_t pan = nv[0]->getPanning();
+ if( pan < 0 )
+ {
+ s_textFloat->setText( tr("Panning: %1% left").arg( qAbs( pan ) ) );
+ }
+ else if( pan > 0 )
+ {
+ s_textFloat->setText( tr("Panning: %1% right").arg( qAbs( pan ) ) );
+ }
+ else
+ {
+ s_textFloat->setText( tr("Panning: center") );
+ }
+ }
+ if( nv.size() == 1 )
+ {
+ s_textFloat->moveGlobal( this, QPoint( _we->x() + 4, _we->y() + 16 ) );
+ s_textFloat->setVisibilityTimeOut( 1000 );
+ }
+ update();
+ }
+ }
+
+ // not in note edit area, so handle scrolling/zooming and quantization change
+ else
+ if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::AltModifier )
+ {
+ int q = m_quantizeModel.value();
+ if( _we->delta() > 0 )
+ {
+ q--;
+ }
+ if( _we->delta() < 0 )
+ {
+ q++;
+ }
+ q = qBound( 0, q, m_quantizeModel.size() - 1 );
+ m_quantizeModel.setValue( q );
+ }
+ else if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::ShiftModifier )
{
+ int l = m_noteLenModel.value();
if( _we->delta() > 0 )
{
- m_ppt = qMin( m_ppt * 2, KEY_LINE_HEIGHT *
- DefaultStepsPerTact * 8 );
+ l--;
}
- else if( m_ppt >= 72 )
+ if( _we->delta() < 0 )
{
- m_ppt /= 2;
+ l++;
}
+ l = qBound( 0, l, m_noteLenModel.size() - 1 );
+ m_noteLenModel.setValue( l );
+ }
+ else if( _we->modifiers() & Qt::ControlModifier )
+ {
+ int z = m_zoomingModel.value();
+ if( _we->delta() > 0 )
+ {
+ z++;
+ }
+ if( _we->delta() < 0 )
+ {
+ z--;
+ }
+ z = qBound( 0, z, m_zoomingModel.size() - 1 );
// update combobox with zooming-factor
- m_zoomingModel.setValue(
- m_zoomingModel.findText( QString::number(
- static_cast<int>( m_ppt * 100 /
- DEFAULT_PR_PPT ) ) +"%" ) );
- // update timeline
- m_timeLine->setPixelsPerTact( m_ppt );
- update();
+ m_zoomingModel.setValue( z );
}
else if( _we->modifiers() & Qt::ShiftModifier
|| _we->orientation() == Qt::Horizontal )
@@ -3330,7 +3669,7 @@ song::PlayModes PianoRoll::desiredPlayModeForAccompany() const
void PianoRoll::play()
{
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
return;
}
@@ -3354,7 +3693,7 @@ void PianoRoll::record()
{
stop();
}
- if( m_recording == true || validPattern() == false )
+ if( m_recording == true || hasValidPattern() == false )
{
return;
}
@@ -3373,7 +3712,7 @@ void PianoRoll::recordAccompany()
{
stop();
}
- if( m_recording == true || validPattern() == false )
+ if( m_recording == true || hasValidPattern() == false )
{
return;
}
@@ -3406,7 +3745,7 @@ void PianoRoll::stop()
void PianoRoll::startRecordNote( const note & _n )
{
- if( m_recording == true && validPattern() == true &&
+ if( m_recording == true && hasValidPattern() == true &&
engine::getSong()->isPlaying() &&
( engine::getSong()->playMode() ==
desiredPlayModeForAccompany() ||
@@ -3433,7 +3772,7 @@ void PianoRoll::startRecordNote( const note & _n )
void PianoRoll::finishRecordNote( const note & _n )
{
- if( m_recording == true && validPattern() == true &&
+ if( m_recording == true && hasValidPattern() == true &&
engine::getSong()->isPlaying() &&
( engine::getSong()->playMode() ==
desiredPlayModeForAccompany() ||
@@ -3518,7 +3857,7 @@ void PianoRoll::detuneButtonToggled()
void PianoRoll::selectAll()
{
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
return;
}
@@ -3576,7 +3915,7 @@ void PianoRoll::selectAll()
// returns vector with pointers to all selected notes
void PianoRoll::getSelectedNotes( NoteVector & _selected_notes )
{
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
return;
}
@@ -3594,6 +3933,49 @@ void PianoRoll::getSelectedNotes( NoteVector & _selected_notes )
}
+void PianoRoll::enterValue( NoteVector* nv )
+{
+
+ if( m_noteEditMode == NoteEditVolume )
+ {
+ bool ok;
+ int new_val;
+ new_val = QInputDialog::getInt( this, "Piano roll: note volume",
+ tr( "Please enter a new value between %1 and %2:" ).
+ arg( MinVolume ).arg( MaxVolume ),
+ (*nv)[0]->getVolume(),
+ MinVolume, MaxVolume, 1, &ok );
+
+ if( ok )
+ {
+ foreach( note * n, *nv )
+ {
+ n->setVolume( new_val );
+ }
+ m_lastNoteVolume = new_val;
+ }
+ }
+ else if( m_noteEditMode == NoteEditPanning )
+ {
+ bool ok;
+ int new_val;
+ new_val = QInputDialog::getInt( this, "Piano roll: note panning",
+ tr( "Please enter a new value between %1 and %2:" ).
+ arg( PanningLeft ).arg( PanningRight ),
+ (*nv)[0]->getPanning(),
+ PanningLeft, PanningRight, 1, &ok );
+
+ if( ok )
+ {
+ foreach( note * n, *nv )
+ {
+ n->setPanning( new_val );
+ }
+ m_lastNotePanning = new_val;
+ }
+
+ }
+}
void PianoRoll::copy_to_clipboard( const NoteVector & _notes ) const
@@ -3636,7 +4018,7 @@ void PianoRoll::copySelectedNotes()
void PianoRoll::cutSelectedNotes()
{
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
return;
}
@@ -3668,7 +4050,7 @@ void PianoRoll::cutSelectedNotes()
void PianoRoll::pasteNotes()
{
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
return;
}
@@ -3686,6 +4068,11 @@ void PianoRoll::pasteNotes()
// remove selection and select the newly pasted notes
clearSelectedNotes();
+ if( !list.isEmpty() )
+ {
+ m_pattern->addJournalCheckPoint();
+ }
+
for( int i = 0; !list.item( i ).isNull(); ++i )
{
// create the note
@@ -3715,14 +4102,15 @@ void PianoRoll::pasteNotes()
void PianoRoll::deleteSelectedNotes()
{
- if( validPattern() == false )
+ if( hasValidPattern() == false )
{
return;
}
bool update_after_delete = false;
-
+ m_pattern->addJournalCheckPoint();
+
// get note-vector of current pattern
const NoteVector & notes = m_pattern->notes();
@@ -3797,7 +4185,7 @@ void PianoRoll::updatePositionAccompany( const MidiTime & _t )
{
song * s = engine::getSong();
- if( m_recording && validPattern() &&
+ if( m_recording && hasValidPattern() &&
s->playMode() != song::Mode_PlayPattern )
{
MidiTime pos = _t;
@@ -3833,13 +4221,6 @@ void PianoRoll::zoomingChanged()
void PianoRoll::quantizeChanged()
{
- if( m_quantizeModel.value() == 0 &&
- m_noteLenModel.value() == 0 )
- {
- m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) );
- return;
- }
- // Could be smarter
update();
}
@@ -3848,7 +4229,14 @@ int PianoRoll::quantization() const
{
if( m_quantizeModel.value() == 0 )
{
- return newNoteLen();
+ if( m_noteLenModel.value() > 0 )
+ {
+ return newNoteLen();
+ }
+ else
+ {
+ return DefaultTicksPerTact / 16;
+ }
}
return DefaultTicksPerTact / m_quantizeModel.currentText().right(
m_quantizeModel.currentText().length() -
@@ -3889,7 +4277,7 @@ MidiTime PianoRoll::newNoteLen() const
bool PianoRoll::mouseOverNote()
{
- return validPattern() && noteUnderMouse() != NULL;
+ return hasValidPattern() && noteUnderMouse() != NULL;
}
diff --git a/src/gui/PianoView.cpp b/src/gui/PianoView.cpp
index af4b073..886ba29 100644
--- a/src/gui/PianoView.cpp
+++ b/src/gui/PianoView.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -472,7 +472,7 @@ void PianoView::mousePressEvent( QMouseEvent * _me )
velocity = m_piano->instrumentTrack()->midiPort()->baseVelocity();
}
// set note on
- m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOn, 0, key_num, velocity ) );
+ m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOn, -1, key_num, velocity ) );
m_piano->setKeyState( key_num, true );
m_lastKey = key_num;
@@ -517,7 +517,7 @@ void PianoView::mouseReleaseEvent( QMouseEvent * )
{
if( m_piano != NULL )
{
- m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, 0, m_lastKey, 0 ) );
+ m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, -1, m_lastKey, 0 ) );
m_piano->setKeyState( m_lastKey, false );
}
@@ -578,7 +578,7 @@ void PianoView::mouseMoveEvent( QMouseEvent * _me )
{
if( m_lastKey != -1 )
{
- m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, 0, m_lastKey, 0 ) );
+ m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, -1, m_lastKey, 0 ) );
m_piano->setKeyState( m_lastKey, false );
m_lastKey = -1;
}
@@ -586,7 +586,7 @@ void PianoView::mouseMoveEvent( QMouseEvent * _me )
{
if( _me->pos().y() > PIANO_BASE )
{
- m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOn, 0, key_num, velocity ) );
+ m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOn, -1, key_num, velocity ) );
m_piano->setKeyState( key_num, true );
m_lastKey = key_num;
}
@@ -600,7 +600,7 @@ void PianoView::mouseMoveEvent( QMouseEvent * _me )
}
else if( m_piano->isKeyPressed( key_num ) )
{
- m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiKeyPressure, 0, key_num, velocity ) );
+ m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiKeyPressure, -1, key_num, velocity ) );
}
}
@@ -697,7 +697,7 @@ void PianoView::focusOutEvent( QFocusEvent * )
// hang otherwise
for( int i = 0; i < NumKeys; ++i )
{
- m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, 0, i, 0 ) );
+ m_piano->midiEventProcessor()->processInEvent( MidiEvent( MidiNoteOff, -1, i, 0 ) );
m_piano->setKeyState( i, false );
}
update();
diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp
index 1d99a5a..ce2f3fa 100644
--- a/src/gui/SongEditor.cpp
+++ b/src/gui/SongEditor.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/ToolPluginView.cpp b/src/gui/ToolPluginView.cpp
index d3402a8..9090afe 100644
--- a/src/gui/ToolPluginView.cpp
+++ b/src/gui/ToolPluginView.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/TrackContainerView.cpp b/src/gui/TrackContainerView.cpp
index bfcbd62..157af14 100644
--- a/src/gui/TrackContainerView.cpp
+++ b/src/gui/TrackContainerView.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -36,7 +36,7 @@
#include "bb_track.h"
#include "MainWindow.h"
#include "debug.h"
-#include "file_browser.h"
+#include "FileBrowser.h"
#include "ImportFilter.h"
#include "Instrument.h"
#include "InstrumentTrack.h"
@@ -121,10 +121,6 @@ void TrackContainerView::loadSettings( const QDomElement & _this )
trackView * TrackContainerView::addTrackView( trackView * _tv )
{
-/* QMap<QString, QVariant> map;
- map["id"] = _tv->getTrack()->id();
- addJournalEntry( JournalEntry( AddTrack, map ) );*/
-
m_trackViews.push_back( _tv );
m_scrollLayout->addWidget( _tv );
connect( this, SIGNAL( positionChanged( const MidiTime & ) ),
@@ -142,13 +138,6 @@ void TrackContainerView::removeTrackView( trackView * _tv )
int index = m_trackViews.indexOf( _tv );
if( index != -1 )
{
-/* QMap<QString, QVariant> map;
- DataFile dataFile( DataFile::JournalData );
- _tv->getTrack()->saveState( dataFile, dataFile.content() );
- map["id"] = _tv->getTrack()->id();
- map["state"] = dataFile.toString();
- addJournalEntry( JournalEntry( RemoveTrack, map ) );*/
-
m_trackViews.removeAt( index );
disconnect( _tv );
@@ -230,6 +219,8 @@ void TrackContainerView::realignTracks()
void TrackContainerView::createTrackView( track * _t )
{
+ //m_tc->addJournalCheckPoint();
+
_t->createView( this );
}
@@ -238,6 +229,8 @@ void TrackContainerView::createTrackView( track * _t )
void TrackContainerView::deleteTrackView( trackView * _tv )
{
+ //m_tc->addJournalCheckPoint();
+
track * t = _tv->getTrack();
removeTrackView( _tv );
delete _tv;
@@ -311,69 +304,12 @@ void TrackContainerView::clearAllTracks()
-void TrackContainerView::undoStep( JournalEntry & _je )
-{
-#if 0
- saveJournallingState( false );
- switch( _je.actionID() )
- {
- case AddTrack:
- {
- QMap<QString, QVariant> map = _je.data().toMap();
- track * t =
- dynamic_cast<track *>(
- engine::projectJournal()->getJournallingObject(
- map["id"].toInt() ) );
- assert( t != NULL );
- DataFile dataFile( DataFile::JournalData );
- t->saveState( dataFile, dataFile.content() );
- map["state"] = dataFile.toString();
- _je.data() = map;
- t->deleteLater();
- break;
- }
-
- case RemoveTrack:
- {
- DataFile dataFile(
- _je.data().toMap()["state"].toString().utf8() );
- track::create( dataFile.content().firstChild().toElement(),
- m_tc );
- break;
- }
- }
- restoreJournallingState();
-#endif
-}
-
-
-
-
-void TrackContainerView::redoStep( JournalEntry & _je )
-{
-#if 0
- switch( _je.actionID() )
- {
- case AddTrack:
- case RemoveTrack:
- _je.actionID() = ( _je.actionID() == AddTrack ) ?
- RemoveTrack : AddTrack;
- undoStep( _je );
- _je.actionID() = ( _je.actionID() == AddTrack ) ?
- RemoveTrack : AddTrack;
- break;
- }
-#endif
-}
-
-
-
-
void TrackContainerView::dragEnterEvent( QDragEnterEvent * _dee )
{
stringPairDrag::processDragEnterEvent( _dee,
QString( "presetfile,pluginpresetfile,samplefile,instrument,"
- "importedproject,track_%1,track_%2" ).
+ "importedproject,soundfontfile,vstpluginfile,"
+ "track_%1,track_%2" ).
arg( track::InstrumentTrack ).
arg( track::SampleTrack ) );
}
@@ -395,13 +331,14 @@ void TrackContainerView::dropEvent( QDropEvent * _de )
//it->toggledInstrumentTrackButton( true );
_de->accept();
}
- else if( type == "samplefile" || type == "pluginpresetfile" )
+ else if( type == "samplefile" || type == "pluginpresetfile"
+ || type == "soundfontfile" || type == "vstpluginfile")
{
InstrumentTrack * it = dynamic_cast<InstrumentTrack *>(
track::create( track::InstrumentTrack,
m_tc ) );
Instrument * i = it->loadInstrument(
- engine::pluginFileHandling()[fileItem::extension(
+ engine::pluginFileHandling()[FileItem::extension(
value )]);
i->loadFile( value );
//it->toggledInstrumentTrackButton( true );
diff --git a/src/gui/about_dialog.cpp b/src/gui/about_dialog.cpp
index 0567326..6110210 100644
--- a/src/gui/about_dialog.cpp
+++ b/src/gui/about_dialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -52,18 +52,5 @@ aboutDialog::aboutDialog() :
licenseLabel->setPlainText( embed::getText( "COPYING" ) );
- QString contText = embed::getText( "CONTRIBUTORS" );
- if ( contText.length() >= 2 )
- {
- QWidget *widget = new QWidget();
- QVBoxLayout *layout = new QVBoxLayout();
- QTextEdit *contWidget = new QTextEdit();
- contWidget->setReadOnly(true);
- contWidget->setText( contText );
-
- layout->addWidget( new QLabel( tr("Contributors ordered by number of commits:"), this ) );
- layout->addWidget( contWidget );
- widget->setLayout( layout );
- tabWidget->insertTab( 2, widget, tr("Involved") );
- }
+ involvedLabel->setPlainText( embed::getText( "CONTRIBUTORS" ) );
}
diff --git a/src/gui/bb_editor.cpp b/src/gui/bb_editor.cpp
index 939b8f6..ab63776 100644
--- a/src/gui/bb_editor.cpp
+++ b/src/gui/bb_editor.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -35,9 +35,11 @@
#include "song.h"
#include "tool_button.h"
#include "config_mgr.h"
+#include "DataFile.h"
+#include "string_pair_drag.h"
#include "TrackContainer.h"
-#include "pattern.h"
+#include "Pattern.h"
@@ -157,14 +159,33 @@ bbEditor::~bbEditor()
}
+void bbEditor::dropEvent( QDropEvent * de )
+{
+ QString type = stringPairDrag::decodeKey( de );
+ QString value = stringPairDrag::decodeValue( de );
+
+ if( type.left( 6 ) == "track_" )
+ {
+ DataFile dataFile( value.toUtf8() );
+ track * t = track::create( dataFile.content().firstChild().toElement(), model() );
+
+ t->deleteTCOs();
+ m_bbtc->updateAfterTrackAdd();
+
+ de->accept();
+ }
+ else
+ {
+ TrackContainerView::dropEvent( de );
+ }
+}
void bbEditor::removeBBView( int _bb )
{
- QList<trackView *> tl = trackViews();
- for( int i = 0; i < tl.size(); ++i )
+ foreach( trackView* view, trackViews() )
{
- tl[i]->getTrackContentWidget()->removeTCOView( _bb );
+ view->getTrackContentWidget()->removeTCOView( _bb );
}
}
@@ -235,8 +256,7 @@ void bbEditor::addSteps()
{
if( ( *it )->type() == track::InstrumentTrack )
{
- pattern * p = static_cast<pattern *>(
- ( *it )->getTCO( m_bbtc->currentBB() ) );
+ Pattern* p = static_cast<Pattern *>( ( *it )->getTCO( m_bbtc->currentBB() ) );
p->addSteps();
}
}
@@ -254,8 +274,7 @@ void bbEditor::removeSteps()
{
if( ( *it )->type() == track::InstrumentTrack )
{
- pattern * p = static_cast<pattern *>(
- ( *it )->getTCO( m_bbtc->currentBB() ) );
+ Pattern* p = static_cast<Pattern *>( ( *it )->getTCO( m_bbtc->currentBB() ) );
p->removeSteps();
}
}
diff --git a/src/gui/dialogs/FileDialog.cpp b/src/gui/dialogs/FileDialog.cpp
index ad77018..b3df8e6 100644
--- a/src/gui/dialogs/FileDialog.cpp
+++ b/src/gui/dialogs/FileDialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Lukas W <lukaswhl/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -52,6 +52,14 @@ FileDialog::FileDialog( QWidget *parent, const QString &caption,
urls << QUrl::fromLocalFile( QDesktopServices::storageLocation( QDesktopServices::MusicLocation ) );
urls << QUrl::fromLocalFile( configManager::inst()->workingDir() );
+ // Add `/Volumes` directory on OS X systems, this allows the user to browse
+ // external disk drives.
+#ifdef LMMS_BUILD_APPLE
+ QDir volumesDir( QDir("/Volumes") );
+ if ( volumesDir.exists() )
+ urls << QUrl::fromLocalFile( volumesDir.absolutePath() );
+#endif
+
setSidebarUrls(urls);
}
diff --git a/src/gui/dialogs/VersionedSaveDialog.cpp b/src/gui/dialogs/VersionedSaveDialog.cpp
index c52f47d..015c404 100644
--- a/src/gui/dialogs/VersionedSaveDialog.cpp
+++ b/src/gui/dialogs/VersionedSaveDialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Lukas W <lukaswhl/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/dialogs/about_dialog.ui b/src/gui/dialogs/about_dialog.ui
index 39c1974..6d9a113 100644
--- a/src/gui/dialogs/about_dialog.ui
+++ b/src/gui/dialogs/about_dialog.ui
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0" >
+<ui version="4.0">
<class>AboutDialog</class>
- <widget class="QDialog" name="AboutDialog" >
- <property name="geometry" >
+ <widget class="QDialog" name="AboutDialog">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@@ -10,46 +10,55 @@
<height>357</height>
</rect>
</property>
- <property name="windowTitle" >
+ <property name="windowTitle">
<string>About LMMS</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_3" >
- <property name="spacing" >
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <property name="spacing">
<number>8</number>
</property>
- <property name="margin" >
+ <property name="leftMargin">
+ <number>8</number>
+ </property>
+ <property name="topMargin">
+ <number>8</number>
+ </property>
+ <property name="rightMargin">
+ <number>8</number>
+ </property>
+ <property name="bottomMargin">
<number>8</number>
</property>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout" >
+ <layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QLabel" name="iconLabel" >
- <property name="minimumSize" >
+ <widget class="QLabel" name="iconLabel">
+ <property name="minimumSize">
<size>
<width>64</width>
<height>64</height>
</size>
</property>
- <property name="text" >
+ <property name="text">
<string/>
</property>
</widget>
</item>
<item>
- <layout class="QVBoxLayout" name="verticalLayout_2" >
+ <layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="QLabel" name="label" >
- <property name="styleSheet" >
- <string notr="true" >font:12pt; font-weight:bold;</string>
+ <widget class="QLabel" name="label">
+ <property name="styleSheet">
+ <string notr="true">font:12pt; font-weight:bold;</string>
</property>
- <property name="text" >
- <string>LMMS (Linux MultiMedia Studio)</string>
+ <property name="text">
+ <string>LMMS</string>
</property>
</widget>
</item>
<item>
- <widget class="QLabel" name="versionLabel" >
- <property name="text" >
+ <widget class="QLabel" name="versionLabel">
+ <property name="text">
<string>Version %1 (%2/%3, Qt %4, %5)</string>
</property>
</widget>
@@ -57,11 +66,11 @@
</layout>
</item>
<item>
- <spacer name="horizontalSpacer" >
- <property name="orientation" >
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
@@ -72,24 +81,24 @@
</layout>
</item>
<item>
- <widget class="QTabWidget" name="tabWidget" >
- <property name="currentIndex" >
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
<number>0</number>
</property>
- <widget class="QWidget" name="tab" >
- <attribute name="title" >
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
<string>About</string>
</attribute>
- <layout class="QVBoxLayout" name="verticalLayout" >
+ <layout class="QVBoxLayout" name="verticalLayout">
<item>
- <spacer name="verticalSpacer_3" >
- <property name="orientation" >
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeType" >
+ <property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
@@ -98,24 +107,24 @@
</spacer>
</item>
<item>
- <widget class="QLabel" name="label_2" >
- <property name="text" >
+ <widget class="QLabel" name="label_2">
+ <property name="text">
<string>LMMS - easy music production for everyone</string>
</property>
- <property name="wordWrap" >
+ <property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_2" >
- <property name="orientation" >
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeType" >
+ <property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
@@ -124,24 +133,24 @@
</spacer>
</item>
<item>
- <widget class="QLabel" name="label_3" >
- <property name="text" >
+ <widget class="QLabel" name="label_3">
+ <property name="text">
<string>Copyright (c) 2004-2014, LMMS developers</string>
</property>
- <property name="wordWrap" >
+ <property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer_4" >
- <property name="orientation" >
+ <spacer name="verticalSpacer_4">
+ <property name="orientation">
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeType" >
+ <property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
@@ -150,21 +159,21 @@
</spacer>
</item>
<item>
- <widget class="QLabel" name="label_4" >
- <property name="text" >
- <string><html><head/><body><p><a href="http://lmms.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.sourceforge.net</span></a></p></body></html></string>
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string><html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html></string>
</property>
- <property name="wordWrap" >
+ <property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
- <spacer name="verticalSpacer" >
- <property name="orientation" >
+ <spacer name="verticalSpacer">
+ <property name="orientation">
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
@@ -174,31 +183,52 @@
</item>
</layout>
</widget>
- <widget class="QWidget" name="tab_2" >
- <attribute name="title" >
+ <widget class="QWidget" name="tab_2">
+ <attribute name="title">
<string>Authors</string>
</attribute>
- <layout class="QVBoxLayout" name="verticalLayout_4" >
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <widget class="QTextEdit" name="authorLabel">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_3">
+ <attribute name="title">
+ <string>Involved</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <item>
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Contributors ordered by number of commits:</string>
+ </property>
+ </widget>
+ </item>
<item>
- <widget class="QTextEdit" name="authorLabel" >
- <property name="readOnly" >
+ <widget class="QTextEdit" name="involvedLabel">
+ <property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
- <widget class="QWidget" name="Seite" >
- <attribute name="title" >
+ <widget class="QWidget" name="Seite">
+ <attribute name="title">
<string>Translation</string>
</attribute>
- <layout class="QVBoxLayout" name="verticalLayout_5" >
+ <layout class="QVBoxLayout" name="verticalLayout_5">
<item>
- <widget class="QTextEdit" name="translationLabel" >
- <property name="readOnly" >
+ <widget class="QTextEdit" name="translationLabel">
+ <property name="readOnly">
<bool>true</bool>
</property>
- <property name="plainText" >
+ <property name="plainText">
<string>Current language not translated (or native English).
If you're interested in translating LMMS in another language or want to improve existing translations, you're welcome to help us! Simply contact the maintainer!</string>
@@ -207,14 +237,14 @@ If you're interested in translating LMMS in another language or want to improve
</item>
</layout>
</widget>
- <widget class="QWidget" name="Seite_2" >
- <attribute name="title" >
+ <widget class="QWidget" name="Seite_2">
+ <attribute name="title">
<string>License</string>
</attribute>
- <layout class="QVBoxLayout" name="verticalLayout_6" >
+ <layout class="QVBoxLayout" name="verticalLayout_6">
<item>
- <widget class="QTextEdit" name="licenseLabel" >
- <property name="readOnly" >
+ <widget class="QTextEdit" name="licenseLabel">
+ <property name="readOnly">
<bool>true</bool>
</property>
</widget>
@@ -224,11 +254,11 @@ If you're interested in translating LMMS in another language or want to improve
</widget>
</item>
<item>
- <widget class="QDialogButtonBox" name="buttonBox" >
- <property name="orientation" >
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="standardButtons" >
+ <property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
@@ -243,11 +273,11 @@ If you're interested in translating LMMS in another language or want to improve
<receiver>AboutDialog</receiver>
<slot>accept()</slot>
<hints>
- <hint type="sourcelabel" >
+ <hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
- <hint type="destinationlabel" >
+ <hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
@@ -259,11 +289,11 @@ If you're interested in translating LMMS in another language or want to improve
<receiver>AboutDialog</receiver>
<slot>reject()</slot>
<hints>
- <hint type="sourcelabel" >
+ <hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
- <hint type="destinationlabel" >
+ <hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
diff --git a/src/gui/dialogs/export_project.ui b/src/gui/dialogs/export_project.ui
index dae06e6..e9fcaeb 100644
--- a/src/gui/dialogs/export_project.ui
+++ b/src/gui/dialogs/export_project.ui
@@ -273,13 +273,6 @@
</widget>
</item>
<item>
- <widget class="QCheckBox" name="sampleExactControllersCB" >
- <property name="text" >
- <string>Sample-exact controllers</string>
- </property>
- </widget>
- </item>
- <item>
<widget class="QCheckBox" name="exportLoopCB">
<property name="text">
<string>Export as loop (remove end silence)</string>
@@ -287,13 +280,6 @@
</widget>
</item>
<item>
- <widget class="QCheckBox" name="aliasFreeOscillatorsCB" >
- <property name="text" >
- <string>Alias-free oscillators</string>
- </property>
- </widget>
- </item>
- <item>
<spacer>
<property name="orientation" >
<enum>Qt::Vertical</enum>
diff --git a/src/gui/embed.cpp b/src/gui/embed.cpp
index d95be2f..d2d5118 100644
--- a/src/gui/embed.cpp
+++ b/src/gui/embed.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/export_project_dialog.cpp b/src/gui/export_project_dialog.cpp
index f819d93..1a18b56 100644
--- a/src/gui/export_project_dialog.cpp
+++ b/src/gui/export_project_dialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2013 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -251,14 +251,15 @@ ProjectRenderer* exportProjectDialog::prepRender()
Mixer::qualitySettings qs =
Mixer::qualitySettings(
static_cast<Mixer::qualitySettings::Interpolation>(interpolationCB->currentIndex()),
- static_cast<Mixer::qualitySettings::Oversampling>(oversamplingCB->currentIndex()),
- sampleExactControllersCB->isChecked(),
- aliasFreeOscillatorsCB->isChecked() );
+ static_cast<Mixer::qualitySettings::Oversampling>(oversamplingCB->currentIndex()) );
+
+ const int samplerates[5] = { 44100, 48000, 88200, 96000, 192000 };
+ const int bitrates[6] = { 64, 128, 160, 192, 256, 320 };
ProjectRenderer::OutputSettings os = ProjectRenderer::OutputSettings(
- samplerateCB->currentText().section(" ", 0, 0).toUInt(),
+ samplerates[ samplerateCB->currentIndex() ],
false,
- bitrateCB->currentText().section(" ", 0, 0).toUInt(),
+ bitrates[ bitrateCB->currentIndex() ],
static_cast<ProjectRenderer::Depths>( depthCB->currentIndex() ) );
engine::getSong()->setExportLoop( exportLoopCB->isChecked() );
diff --git a/src/gui/file_browser.cpp b/src/gui/file_browser.cpp
deleted file mode 100644
index 2d51597..0000000
--- a/src/gui/file_browser.cpp
+++ /dev/null
@@ -1,1033 +0,0 @@
-/*
- * file_browser.cpp - implementation of the project-, preset- and
- * sample-file-browser
- *
- * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QKeyEvent>
-#include <QtGui/QLineEdit>
-#include <QtGui/QMenu>
-#include <QtGui/QPushButton>
-#include <QtGui/QMdiArea>
-#include <QtGui/QMdiSubWindow>
-
-#include "file_browser.h"
-#include "bb_track_container.h"
-#include "config_mgr.h"
-#include "debug.h"
-#include "embed.h"
-#include "engine.h"
-#include "gui_templates.h"
-#include "ImportFilter.h"
-#include "Instrument.h"
-#include "InstrumentTrack.h"
-#include "MainWindow.h"
-#include "DataFile.h"
-#include "PresetPreviewPlayHandle.h"
-#include "SamplePlayHandle.h"
-#include "song.h"
-#include "string_pair_drag.h"
-#include "text_float.h"
-
-
-
-enum TreeWidgetItemTypes
-{
- TypeFileItem = QTreeWidgetItem::UserType,
- TypeDirectoryItem
-} ;
-
-
-
-fileBrowser::fileBrowser( const QString & _directories, const QString & _filter,
- const QString & _title, const QPixmap & _pm,
- QWidget * _parent, bool _dirs_as_items ) :
- SideBarWidget( _title, _pm, _parent ),
- m_directories( _directories ),
- m_filter( _filter ),
- m_dirsAsItems( _dirs_as_items )
-{
- setWindowTitle( tr( "Browser" ) );
- m_l = new fileBrowserTreeWidget( contentParent() );
- addContentWidget( m_l );
-
- QWidget * ops = new QWidget( contentParent() );
- ops->setFixedHeight( 24 );
-
- QHBoxLayout * opl = new QHBoxLayout( ops );
- opl->setMargin( 0 );
- opl->setSpacing( 0 );
-
- m_filterEdit = new QLineEdit( ops );
- connect( m_filterEdit, SIGNAL( textEdited( const QString & ) ),
- this, SLOT( filterItems( const QString & ) ) );
-
- QPushButton * reload_btn = new QPushButton(
- embed::getIconPixmap( "reload" ),
- QString::null, ops );
- connect( reload_btn, SIGNAL( clicked() ), this, SLOT( reloadTree() ) );
-
- opl->addWidget( m_filterEdit );
- opl->addSpacing( 5 );
- opl->addWidget( reload_btn );
-
- addContentWidget( ops );
-
- reloadTree();
- show();
-}
-
-
-
-
-fileBrowser::~fileBrowser()
-{
-}
-
-
-
-
-void fileBrowser::filterItems( const QString & _filter )
-{
- const bool show_all = _filter.isEmpty();
-
- for( int i = 0; i < m_l->topLevelItemCount(); ++i )
- {
- QTreeWidgetItem * it = m_l->topLevelItem( i );
- // show all items if filter is empty
- if( show_all )
- {
- it->setHidden( false );
- if( it->childCount() )
- {
- filterItems( it, _filter );
- }
- }
- // is directory?
- else if( it->childCount() )
- {
- // matches filter?
- if( it->text( 0 ).
- contains( _filter, Qt::CaseInsensitive ) )
- {
- // yes, then show everything below
- it->setHidden( false );
- filterItems( it, QString::null );
- }
- else
- {
- // only show if item below matches filter
- it->setHidden( !filterItems( it, _filter ) );
- }
- }
- // a standard item (i.e. no file or directory item?)
- else if( it->type() == QTreeWidgetItem::Type )
- {
- // hide in every case when filtering
- it->setHidden( true );
- }
- else
- {
- // file matches filter?
- it->setHidden( !it->text( 0 ).
- contains( _filter, Qt::CaseInsensitive ) );
- }
-
- }
-}
-
-
-
-
-bool fileBrowser::filterItems( QTreeWidgetItem * _item, const QString & _filter )
-{
- const bool show_all = _filter.isEmpty();
- bool matched = false;
-
- for( int i = 0; i < _item->childCount(); ++i )
- {
- QTreeWidgetItem * it = _item->child( i );
- bool cm = false; // whether current item matched
- // show all items if filter is empty
- if( show_all )
- {
- it->setHidden( false );
- if( it->childCount() )
- {
- filterItems( it, _filter );
- }
- }
- // is directory?
- else if( it->childCount() )
- {
- // matches filter?
- if( it->text( 0 ).
- contains( _filter, Qt::CaseInsensitive ) )
- {
- // yes, then show everything below
- it->setHidden( false );
- filterItems( it, QString::null );
- cm = true;
- }
- else
- {
- // only show if item below matches filter
- cm = filterItems( it, _filter );
- it->setHidden( !cm );
- }
- }
- // a standard item (i.e. no file or directory item?)
- else if( it->type() == QTreeWidgetItem::Type )
- {
- // hide in every case when filtering
- it->setHidden( true );
- }
- else
- {
- // file matches filter?
- cm = it->text( 0 ).
- contains( _filter, Qt::CaseInsensitive );
- it->setHidden( !cm );
- }
-
- if( cm )
- {
- matched = true;
- }
- }
-
- return matched;
-}
-
-
-
-
-void fileBrowser::reloadTree( void )
-{
- m_filterEdit->clear();
- m_l->clear();
- QStringList paths = m_directories.split( '*' );
- for( QStringList::iterator it = paths.begin(); it != paths.end(); ++it )
- {
- addItems( *it );
- }
-}
-
-
-
-
-void fileBrowser::addItems( const QString & _path )
-{
- if( m_dirsAsItems )
- {
- m_l->addTopLevelItem( new directory( _path,
- QString::null, m_filter ) );
- return;
- }
-
- QDir cdir( _path );
- QStringList files = cdir.entryList( QDir::Dirs, QDir::Name );
- for( QStringList::const_iterator it = files.constBegin();
- it != files.constEnd(); ++it )
- {
- QString cur_file = *it;
- if( cur_file[0] != '.' )
- {
- bool orphan = true;
- for( int i = 0; i < m_l->topLevelItemCount(); ++i )
- {
- directory * d = dynamic_cast<directory *>(
- m_l->topLevelItem( i ) );
- if( d == NULL || cur_file < d->text( 0 ) )
- {
- m_l->insertTopLevelItem( i,
- new directory( cur_file, _path,
- m_filter ) );
- orphan = false;
- break;
- }
- else if( cur_file == d->text( 0 ) )
- {
- d->addDirectory( _path );
- orphan = false;
- break;
- }
- }
- if( orphan )
- {
- m_l->addTopLevelItem( new directory( cur_file,
- _path, m_filter ) );
- }
- }
- }
-
- files = cdir.entryList( QDir::Files, QDir::Name );
- for( QStringList::const_iterator it = files.constBegin();
- it != files.constEnd(); ++it )
- {
- QString cur_file = *it;
- if( cur_file[0] != '.' )
- {
- // TODO: don't insert instead of removing, order changed
- // remove existing file-items
- QList<QTreeWidgetItem *> existing = m_l->findItems(
- cur_file, Qt::MatchFixedString );
- if( !existing.empty() )
- {
- delete existing.front();
- }
- (void) new fileItem( m_l, cur_file, _path );
- }
- }
-}
-
-
-
-
-void fileBrowser::keyPressEvent( QKeyEvent * _ke )
-{
- if( _ke->key() == Qt::Key_F5 )
- {
- reloadTree();
- }
- else
- {
- _ke->ignore();
- }
-}
-
-
-
-
-
-
-
-
-fileBrowserTreeWidget::fileBrowserTreeWidget( QWidget * _parent ) :
- QTreeWidget( _parent ),
- m_mousePressed( false ),
- m_pressPos(),
- m_previewPlayHandle( NULL ),
- m_pphMutex( QMutex::Recursive ),
- m_contextMenuItem( NULL )
-{
- setColumnCount( 1 );
- headerItem()->setHidden( true );
- setSortingEnabled( false );
-
- setFont( pointSizeF( font(), 7.5f ) );
-
- connect( this, SIGNAL( itemDoubleClicked( QTreeWidgetItem *, int ) ),
- SLOT( activateListItem( QTreeWidgetItem *, int ) ) );
- connect( this, SIGNAL( itemCollapsed( QTreeWidgetItem * ) ),
- SLOT( updateDirectory( QTreeWidgetItem * ) ) );
- connect( this, SIGNAL( itemExpanded( QTreeWidgetItem * ) ),
- SLOT( updateDirectory( QTreeWidgetItem * ) ) );
-}
-
-
-
-
-fileBrowserTreeWidget::~fileBrowserTreeWidget()
-{
-}
-
-
-
-
-void fileBrowserTreeWidget::contextMenuEvent( QContextMenuEvent * _e )
-{
- fileItem * f = dynamic_cast<fileItem *>( itemAt( _e->pos() ) );
- if( f != NULL && ( f->handling() == fileItem::LoadAsPreset ||
- f->handling() == fileItem::LoadByPlugin ) )
- {
- m_contextMenuItem = f;
- QMenu contextMenu( this );
- contextMenu.addAction( tr( "Send to active instrument-track" ),
- this,
- SLOT( sendToActiveInstrumentTrack() ) );
- contextMenu.addAction( tr( "Open in new instrument-track/"
- "Song-Editor" ),
- this,
- SLOT( openInNewInstrumentTrackSE() ) );
- contextMenu.addAction( tr( "Open in new instrument-track/"
- "B+B Editor" ),
- this,
- SLOT( openInNewInstrumentTrackBBE() ) );
- contextMenu.exec( _e->globalPos() );
- m_contextMenuItem = NULL;
- }
-}
-
-
-
-
-void fileBrowserTreeWidget::mousePressEvent( QMouseEvent * _me )
-{
- QTreeWidget::mousePressEvent( _me );
- if( _me->button() != Qt::LeftButton )
- {
- return;
- }
-
- QTreeWidgetItem * i = itemAt( _me->pos() );
- if ( i )
- {
- // TODO: Restrict to visible selection
-// if ( _me->x() > header()->cellPos( header()->mapToActual( 0 ) )
-// + treeStepSize() * ( i->depth() + ( rootIsDecorated() ?
-// 1 : 0 ) ) + itemMargin() ||
-// _me->x() < header()->cellPos(
-// header()->mapToActual( 0 ) ) )
-// {
- m_pressPos = _me->pos();
- m_mousePressed = true;
-// }
- }
-
- fileItem * f = dynamic_cast<fileItem *>( i );
- if( f != NULL )
- {
- m_pphMutex.lock();
- if( m_previewPlayHandle != NULL )
- {
- engine::mixer()->removePlayHandle(
- m_previewPlayHandle );
- m_previewPlayHandle = NULL;
- }
-
- // in special case of sample-files we do not care about
- // handling() rather than directly creating a SamplePlayHandle
- if( f->type() == fileItem::SampleFile )
- {
- textFloat * tf = textFloat::displayMessage(
- tr( "Loading sample" ),
- tr( "Please wait, loading sample for "
- "preview..." ),
- embed::getIconPixmap( "sample_file",
- 24, 24 ), 0 );
- qApp->processEvents(
- QEventLoop::ExcludeUserInputEvents );
- SamplePlayHandle * s = new SamplePlayHandle(
- f->fullName() );
- s->setDoneMayReturnTrue( false );
- m_previewPlayHandle = s;
- delete tf;
- }
- else if( f->type() != fileItem::VstPluginFile &&
- ( f->handling() == fileItem::LoadAsPreset ||
- f->handling() == fileItem::LoadByPlugin ) )
- {
- m_previewPlayHandle = new PresetPreviewPlayHandle( f->fullName(), f->handling() == fileItem::LoadByPlugin );
- }
- if( m_previewPlayHandle != NULL )
- {
- if( !engine::mixer()->addPlayHandle(
- m_previewPlayHandle ) )
- {
- m_previewPlayHandle = NULL;
- }
- }
- m_pphMutex.unlock();
- }
-}
-
-
-
-
-void fileBrowserTreeWidget::mouseMoveEvent( QMouseEvent * _me )
-{
- if( m_mousePressed == true &&
- ( m_pressPos - _me->pos() ).manhattanLength() >
- QApplication::startDragDistance() )
- {
- // make sure any playback is stopped
- mouseReleaseEvent( NULL );
-
- fileItem * f = dynamic_cast<fileItem *>( itemAt( m_pressPos ) );
- if( f != NULL )
- {
- switch( f->type() )
- {
- case fileItem::PresetFile:
- new stringPairDrag( f->handling() == fileItem::LoadAsPreset ?
- "presetfile" : "pluginpresetfile",
- f->fullName(),
- embed::getIconPixmap( "preset_file" ), this );
- break;
-
- case fileItem::SampleFile:
- new stringPairDrag( "samplefile", f->fullName(),
- embed::getIconPixmap( "sample_file" ), this );
- break;
-
- case fileItem::MidiFile:
-// don't allow dragging FLP-files as FLP import filter clears project
-// without asking
-// case fileItem::FlpFile:
- new stringPairDrag( "importedproject", f->fullName(),
- embed::getIconPixmap( "midi_file" ), this );
- break;
-
- case fileItem::VstPluginFile:
- new stringPairDrag( "vstplugin", f->fullName(),
- embed::getIconPixmap( "sample_file" ), this );
- break;
-
- default:
- break;
- }
- }
- }
-}
-
-
-
-
-void fileBrowserTreeWidget::mouseReleaseEvent( QMouseEvent * _me )
-{
- m_mousePressed = false;
-
- m_pphMutex.lock();
- if( m_previewPlayHandle != NULL )
- {
- // if there're samples shorter than 3 seconds, we don't
- // stop them if the user releases mouse-button...
- if( m_previewPlayHandle->type() == PlayHandle::TypeSamplePlayHandle )
- {
- SamplePlayHandle * s = dynamic_cast<SamplePlayHandle *>(
- m_previewPlayHandle );
- if( s && s->totalFrames() - s->framesDone() <=
- static_cast<f_cnt_t>( engine::mixer()->
- processingSampleRate() * 3 ) )
- {
- s->setDoneMayReturnTrue( true );
- m_previewPlayHandle = NULL;
- m_pphMutex.unlock();
- return;
- }
- }
- engine::mixer()->removePlayHandle( m_previewPlayHandle );
- m_previewPlayHandle = NULL;
- }
- m_pphMutex.unlock();
-}
-
-
-
-
-
-void fileBrowserTreeWidget::handleFile( fileItem * f, InstrumentTrack * _it )
-{
- engine::mixer()->lock();
- switch( f->handling() )
- {
- case fileItem::LoadAsProject:
- if( engine::mainWindow()->mayChangeProject() )
- {
- engine::getSong()->loadProject( f->fullName() );
- }
- break;
-
- case fileItem::LoadByPlugin:
- {
- const QString e = f->extension();
- Instrument * i = _it->instrument();
- if( i == NULL ||
- !i->descriptor()->supportsFileType( e ) )
- {
- i = _it->loadInstrument(
- engine::pluginFileHandling()[e] );
- }
- i->loadFile( f->fullName() );
- break;
- }
-
- case fileItem::LoadAsPreset:
- {
- DataFile dataFile( f->fullName() );
- InstrumentTrack::removeMidiPortNode( dataFile );
- _it->setSimpleSerializing();
- _it->loadSettings( dataFile.content().toElement() );
- break;
- }
-
- case fileItem::ImportAsProject:
- if( f->type() == fileItem::FlpFile &&
- !engine::mainWindow()->mayChangeProject() )
- {
- break;
- }
- ImportFilter::import( f->fullName(),
- engine::getSong() );
- break;
-
- case fileItem::NotSupported:
- default:
- break;
-
- }
- engine::mixer()->unlock();
-}
-
-
-
-
-void fileBrowserTreeWidget::activateListItem( QTreeWidgetItem * _item,
- int _column )
-{
- fileItem * f = dynamic_cast<fileItem *>( _item );
- if( f == NULL )
- {
- return;
- }
-
- if( f->handling() == fileItem::LoadAsProject ||
- f->handling() == fileItem::ImportAsProject )
- {
- handleFile( f, NULL );
- }
- else if( f->handling() != fileItem::NotSupported )
- {
- engine::mixer()->lock();
- InstrumentTrack * it = dynamic_cast<InstrumentTrack *>(
- track::create( track::InstrumentTrack,
- engine::getBBTrackContainer() ) );
- handleFile( f, it );
- engine::mixer()->unlock();
- }
-}
-
-
-
-
-void fileBrowserTreeWidget::openInNewInstrumentTrack( TrackContainer* tc )
-{
- if( m_contextMenuItem->handling() == fileItem::LoadAsPreset ||
- m_contextMenuItem->handling() == fileItem::LoadByPlugin )
- {
- engine::mixer()->lock();
- InstrumentTrack * it = dynamic_cast<InstrumentTrack *>(
- track::create( track::InstrumentTrack, tc ) );
- handleFile( m_contextMenuItem, it );
- engine::mixer()->unlock();
- }
-}
-
-
-
-
-void fileBrowserTreeWidget::openInNewInstrumentTrackBBE( void )
-{
- openInNewInstrumentTrack( engine::getBBTrackContainer() );
-}
-
-
-
-
-void fileBrowserTreeWidget::openInNewInstrumentTrackSE( void )
-{
- openInNewInstrumentTrack( engine::getSong() );
-}
-
-
-
-
-void fileBrowserTreeWidget::sendToActiveInstrumentTrack( void )
-{
- // get all windows opened in the workspace
- QList<QMdiSubWindow*> pl =
- engine::mainWindow()->workspace()->
- subWindowList( QMdiArea::StackingOrder );
- QListIterator<QMdiSubWindow *> w( pl );
- w.toBack();
- // now we travel through the window-list until we find an
- // instrument-track
- while( w.hasPrevious() )
- {
- InstrumentTrackWindow * itw =
- dynamic_cast<InstrumentTrackWindow *>(
- w.previous()->widget() );
- if( itw != NULL && itw->isHidden() == false )
- {
- handleFile( m_contextMenuItem, itw->model() );
- break;
- }
- }
-}
-
-
-
-
-void fileBrowserTreeWidget::updateDirectory( QTreeWidgetItem * _item )
-{
- directory * dir = dynamic_cast<directory *>( _item );
- if( dir != NULL )
- {
- dir->update();
- }
-}
-
-
-
-
-
-
-QPixmap * directory::s_folderPixmap = NULL;
-QPixmap * directory::s_folderOpenedPixmap = NULL;
-QPixmap * directory::s_folderLockedPixmap = NULL;
-
-
-directory::directory( const QString & _name, const QString & _path,
- const QString & _filter ) :
- QTreeWidgetItem( QStringList( _name ), TypeDirectoryItem ),
- m_directories( _path ),
- m_filter( _filter )
-{
- initPixmaps();
-
- setChildIndicatorPolicy( QTreeWidgetItem::ShowIndicator );
-
- if( !QDir( fullName() ).isReadable() )
- {
- setIcon( 0, *s_folderLockedPixmap );
- }
- else
- {
- setIcon( 0, *s_folderPixmap );
- }
-}
-
-
-
-
-void directory::initPixmaps( void )
-{
- if( s_folderPixmap == NULL )
- {
- s_folderPixmap = new QPixmap(
- embed::getIconPixmap( "folder" ) );
- }
-
- if( s_folderOpenedPixmap == NULL )
- {
- s_folderOpenedPixmap = new QPixmap(
- embed::getIconPixmap( "folder_opened" ) );
- }
-
- if( s_folderLockedPixmap == NULL )
- {
- s_folderLockedPixmap = new QPixmap(
- embed::getIconPixmap( "folder_locked" ) );
- }
-}
-
-
-
-
-void directory::update( void )
-{
- if( !isExpanded() )
- {
- setIcon( 0, *s_folderPixmap );
- return;
- }
-
- setIcon( 0, *s_folderOpenedPixmap );
- if( !childCount() )
- {
- for( QStringList::iterator it = m_directories.begin();
- it != m_directories.end(); ++it )
- {
- int top_index = childCount();
- if( addItems( fullName( *it ) ) &&
- ( *it ).contains(
- configManager::inst()->dataDir() ) )
- {
- QTreeWidgetItem * sep = new QTreeWidgetItem;
- sep->setText( 0,
- fileBrowserTreeWidget::tr(
- "--- Factory files ---" ) );
- sep->setIcon( 0, embed::getIconPixmap(
- "factory_files" ) );
- insertChild( top_index, sep );
- }
- }
- }
-}
-
-
-
-
-bool directory::addItems( const QString & _path )
-{
- QDir thisDir( _path );
- if( !thisDir.isReadable() )
- {
- return false;
- }
-
- treeWidget()->setUpdatesEnabled( false );
-
- bool added_something = false;
-
- QStringList files = thisDir.entryList( QDir::Dirs, QDir::Name );
- for( QStringList::const_iterator it = files.constBegin();
- it != files.constEnd(); ++it )
- {
- QString cur_file = *it;
- if( cur_file[0] != '.' )
- {
- bool orphan = true;
- for( int i = 0; i < childCount(); ++i )
- {
- directory * d = dynamic_cast<directory *>(
- child( i ) );
- if( d == NULL || cur_file < d->text( 0 ) )
- {
- insertChild( i, new directory( cur_file,
- _path, m_filter ) );
- orphan = false;
- break;
- }
- else if( cur_file == d->text( 0 ) )
- {
- d->addDirectory( _path );
- orphan = false;
- break;
- }
- }
- if( orphan )
- {
- addChild( new directory( cur_file, _path,
- m_filter ) );
- }
-
- added_something = true;
- }
- }
-
- QList<QTreeWidgetItem*> items;
- files = thisDir.entryList( QDir::Files, QDir::Name );
- for( QStringList::const_iterator it = files.constBegin();
- it != files.constEnd(); ++it )
- {
- QString cur_file = *it;
- if( cur_file[0] != '.' &&
- thisDir.match( m_filter, cur_file.toLower() ) )
- {
- items << new fileItem( cur_file, _path );
- added_something = true;
- }
- }
- addChildren( items );
-
- treeWidget()->setUpdatesEnabled( true );
-
- return added_something;
-}
-
-
-
-
-QPixmap * fileItem::s_projectFilePixmap = NULL;
-QPixmap * fileItem::s_presetFilePixmap = NULL;
-QPixmap * fileItem::s_sampleFilePixmap = NULL;
-QPixmap * fileItem::s_midiFilePixmap = NULL;
-QPixmap * fileItem::s_flpFilePixmap = NULL;
-QPixmap * fileItem::s_unknownFilePixmap = NULL;
-
-
-fileItem::fileItem( QTreeWidget * _parent, const QString & _name,
- const QString & _path ) :
- QTreeWidgetItem( _parent, QStringList( _name) , TypeFileItem ),
- m_path( _path )
-{
- determineFileType();
- initPixmaps();
-}
-
-
-
-
-fileItem::fileItem( const QString & _name, const QString & _path ) :
- QTreeWidgetItem( QStringList( _name ), TypeFileItem ),
- m_path( _path )
-{
- determineFileType();
- initPixmaps();
-}
-
-
-
-
-void fileItem::initPixmaps( void )
-{
- if( s_projectFilePixmap == NULL )
- {
- s_projectFilePixmap = new QPixmap( embed::getIconPixmap(
- "project_file", 16, 16 ) );
- }
-
- if( s_presetFilePixmap == NULL )
- {
- s_presetFilePixmap = new QPixmap( embed::getIconPixmap(
- "preset_file", 16, 16 ) );
- }
-
- if( s_sampleFilePixmap == NULL )
- {
- s_sampleFilePixmap = new QPixmap( embed::getIconPixmap(
- "sample_file", 16, 16 ) );
- }
-
- if( s_midiFilePixmap == NULL )
- {
- s_midiFilePixmap = new QPixmap( embed::getIconPixmap(
- "midi_file", 16, 16 ) );
- }
-
- if( s_flpFilePixmap == NULL )
- {
- s_flpFilePixmap = new QPixmap( embed::getIconPixmap(
- "midi_file", 16, 16 ) );
- }
-
- if( s_unknownFilePixmap == NULL )
- {
- s_unknownFilePixmap = new QPixmap( embed::getIconPixmap(
- "unknown_file" ) );
- }
-
- switch( m_type )
- {
- case ProjectFile:
- setIcon( 0, *s_projectFilePixmap );
- break;
- case PresetFile:
- setIcon( 0, *s_presetFilePixmap );
- break;
- case SampleFile:
- case SoundFontFile: // TODO
- case PatchFile: // TODO
- setIcon( 0, *s_sampleFilePixmap );
- break;
- case MidiFile:
- setIcon( 0, *s_midiFilePixmap );
- break;
- case FlpFile:
- setIcon( 0, *s_flpFilePixmap );
- break;
- case UnknownFile:
- default:
- setIcon( 0, *s_unknownFilePixmap );
- break;
- }
-}
-
-
-
-
-void fileItem::determineFileType( void )
-{
- m_handling = NotSupported;
-
- const QString ext = extension();
- if( ext == "mmp" || ext == "mpt" || ext == "mmpz" )
- {
- m_type = ProjectFile;
- m_handling = LoadAsProject;
- }
- else if( ext == "xpf" || ext == "xml" )
- {
- m_type = PresetFile;
- m_handling = LoadAsPreset;
- }
- else if( ext == "xiz" && engine::pluginFileHandling().contains( ext ) )
- {
- m_type = PresetFile;
- m_handling = LoadByPlugin;
- }
- else if( ext == "sf2" )
- {
- m_type = SoundFontFile;
- }
- else if( ext == "pat" )
- {
- m_type = PatchFile;
- }
- else if( ext == "mid" )
- {
- m_type = MidiFile;
- m_handling = ImportAsProject;
- }
- else if( ext == "flp" )
- {
- m_type = FlpFile;
- m_handling = ImportAsProject;
- }
- else if( ext == "dll" )
- {
- m_type = VstPluginFile;
- m_handling = LoadByPlugin;
- }
- else
- {
- m_type = UnknownFile;
- }
-
- if( m_handling == NotSupported &&
- !ext.isEmpty() && engine::pluginFileHandling().contains( ext ) )
- {
- m_handling = LoadByPlugin;
- // classify as sample if not classified by anything yet but can
- // be handled by a certain plugin
- if( m_type == UnknownFile )
- {
- m_type = SampleFile;
- }
- }
-}
-
-
-
-
-QString fileItem::extension( void )
-{
- return extension( fullName() );
-}
-
-
-
-
-QString fileItem::extension( const QString & _file )
-{
- return QFileInfo( _file ).suffix().toLower();
-}
-
-
-
-
-#include "moc_file_browser.cxx"
-
diff --git a/src/gui/plugin_browser.cpp b/src/gui/plugin_browser.cpp
index 431d41b..95ec8b4 100644
--- a/src/gui/plugin_browser.cpp
+++ b/src/gui/plugin_browser.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -26,6 +26,9 @@
#include <QtGui/QPainter>
#include <QtGui/QCursor>
#include <QtGui/QMouseEvent>
+#include <QtGui/QScrollArea>
+
+#include <algorithm> // for std::sort
#include "plugin_browser.h"
#include "embed.h"
@@ -43,7 +46,7 @@ bool pluginBefore( const Plugin::Descriptor& d1, const Plugin::Descriptor& d2 )
-pluginBrowser::pluginBrowser( QWidget * _parent ) :
+PluginBrowser::PluginBrowser( QWidget * _parent ) :
SideBarWidget( tr( "Instrument plugins" ),
embed::getIconPixmap( "plugins" ).transformed( QTransform().rotate( 90 ) ), _parent )
{
@@ -65,30 +68,50 @@ pluginBrowser::pluginBrowser( QWidget * _parent ) :
m_view );
hint->setFont( pointSize<8>( hint->font() ) );
hint->setWordWrap( true );
- view_layout->addWidget( hint );
+
+ QScrollArea* scrollarea = new QScrollArea( m_view );
+ PluginDescList* descList = new PluginDescList( m_view );
+ scrollarea->setWidget(descList);
+ scrollarea->setWidgetResizable(true);
+
+ view_layout->addWidget(hint);
+ view_layout->addWidget(scrollarea);
+}
+
+
+
+
+PluginBrowser::~PluginBrowser()
+{
+}
+
+
+
+
+
+
+PluginDescList::PluginDescList(QWidget *parent) :
+ QWidget(parent)
+{
+ QVBoxLayout* layout = new QVBoxLayout(this);
Plugin::getDescriptorsOfAvailPlugins( m_pluginDescriptors );
- qSort( m_pluginDescriptors.begin(), m_pluginDescriptors.end(), pluginBefore );
+ std::sort(m_pluginDescriptors.begin(), m_pluginDescriptors.end(), pluginBefore);
- for( Plugin::DescriptorList::ConstIterator it = m_pluginDescriptors.begin();
- it != m_pluginDescriptors.end(); ++it )
+
+ for(Plugin::DescriptorList::const_iterator it = m_pluginDescriptors.constBegin();
+ it != m_pluginDescriptors.constEnd(); it++)
{
if( it->type == Plugin::Instrument )
{
- pluginDescWidget * p = new pluginDescWidget( *it, m_view );
+ PluginDescWidget* p = new PluginDescWidget( *it, this );
p->show();
- view_layout->addWidget( p );
+ layout->addWidget(p);
}
}
- view_layout->addStretch();
- show();
-}
-
-
-
-pluginBrowser::~pluginBrowser()
-{
+ setLayout(layout);
+ layout->addStretch();
}
@@ -96,8 +119,7 @@ pluginBrowser::~pluginBrowser()
-
-pluginDescWidget::pluginDescWidget( const Plugin::Descriptor & _pd,
+PluginDescWidget::PluginDescWidget( const Plugin::Descriptor & _pd,
QWidget * _parent ) :
QWidget( _parent ),
m_updateTimer( this ),
@@ -115,14 +137,14 @@ pluginDescWidget::pluginDescWidget( const Plugin::Descriptor & _pd,
-pluginDescWidget::~pluginDescWidget()
+PluginDescWidget::~PluginDescWidget()
{
}
-void pluginDescWidget::paintEvent( QPaintEvent * )
+void PluginDescWidget::paintEvent( QPaintEvent * )
{
const QColor fill_color = m_mouseOver ? QColor( 224, 224, 224 ) :
QColor( 192, 192, 192 );
@@ -152,7 +174,7 @@ void pluginDescWidget::paintEvent( QPaintEvent * )
QRect br;
p.drawText( 10 + logo_size.width(), 20, width() - 58 - 5, 999,
Qt::TextWordWrap,
- pluginBrowser::tr( m_pluginDescriptor.description ),
+ PluginBrowser::tr( m_pluginDescriptor.description ),
&br );
if( m_mouseOver )
{
@@ -165,7 +187,7 @@ void pluginDescWidget::paintEvent( QPaintEvent * )
-void pluginDescWidget::enterEvent( QEvent * _e )
+void PluginDescWidget::enterEvent( QEvent * _e )
{
m_mouseOver = true;
m_targetHeight = height() + 1;
@@ -176,7 +198,7 @@ void pluginDescWidget::enterEvent( QEvent * _e )
-void pluginDescWidget::leaveEvent( QEvent * _e )
+void PluginDescWidget::leaveEvent( QEvent * _e )
{
m_mouseOver = false;
m_targetHeight = 24;
@@ -187,7 +209,7 @@ void pluginDescWidget::leaveEvent( QEvent * _e )
-void pluginDescWidget::mousePressEvent( QMouseEvent * _me )
+void PluginDescWidget::mousePressEvent( QMouseEvent * _me )
{
if( _me->button() == Qt::LeftButton )
{
@@ -200,7 +222,7 @@ void pluginDescWidget::mousePressEvent( QMouseEvent * _me )
-void pluginDescWidget::updateHeight()
+void PluginDescWidget::updateHeight()
{
if( m_targetHeight > height() )
{
@@ -225,5 +247,3 @@ void pluginDescWidget::updateHeight()
#include "moc_plugin_browser.cxx"
-
-
diff --git a/src/gui/setup_dialog.cpp b/src/gui/setup_dialog.cpp
index 6ed9e58..bffac4e 100644
--- a/src/gui/setup_dialog.cpp
+++ b/src/gui/setup_dialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -142,7 +142,7 @@ setupDialog::setupDialog( ConfigTabs _tab_to_open ) :
m_tabBar->setFixedWidth( 72 );
QWidget * ws = new QWidget( settings );
- int wsHeight = 336;
+ int wsHeight = 370;
#ifdef LMMS_HAVE_STK
wsHeight += 50;
#endif
@@ -300,7 +300,7 @@ setupDialog::setupDialog( ConfigTabs _tab_to_open ) :
QWidget * paths = new QWidget( ws );
- int pathsHeight = 356;
+ int pathsHeight = 370;
#ifdef LMMS_HAVE_STK
pathsHeight += 55;
#endif
diff --git a/src/gui/string_pair_drag.cpp b/src/gui/string_pair_drag.cpp
index 611421e..3089011 100644
--- a/src/gui/string_pair_drag.cpp
+++ b/src/gui/string_pair_drag.cpp
@@ -5,7 +5,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/ControllerRackView.cpp b/src/gui/widgets/ControllerRackView.cpp
index 97ce687..902088a 100644
--- a/src/gui/widgets/ControllerRackView.cpp
+++ b/src/gui/widgets/ControllerRackView.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008-2009 Paul Giblock <drfaygo/at/gmail.com>
* Copyright (c) 2010-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/ControllerView.cpp b/src/gui/widgets/ControllerView.cpp
index 936412b..f6f5160 100644
--- a/src/gui/widgets/ControllerView.cpp
+++ b/src/gui/widgets/ControllerView.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008-2009 Paul Giblock <drfaygo/at/gmail.com>
* Copyright (c) 2011-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -176,14 +176,12 @@ void ControllerView::modelChanged()
void ControllerView::contextMenuEvent( QContextMenuEvent * )
{
- QPointer<captionMenu> contextMenu = new captionMenu( model()->displayName() );
+ QPointer<captionMenu> contextMenu = new captionMenu( model()->displayName(), this );
contextMenu->addAction( embed::getIconPixmap( "cancel" ),
tr( "&Remove this plugin" ),
this, SLOT( deleteController() ) );
contextMenu->addSeparator();
- contextMenu->addAction( embed::getIconPixmap( "help" ),
- tr( "&Help" ),
- this, SLOT( displayHelp() ) );
+ contextMenu->addHelpAction();
contextMenu->exec( QCursor::pos() );
delete contextMenu;
}
diff --git a/src/gui/widgets/EffectRackView.cpp b/src/gui/widgets/EffectRackView.cpp
index 8c485d7..7776974 100644
--- a/src/gui/widgets/EffectRackView.cpp
+++ b/src/gui/widgets/EffectRackView.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn at netscape.net>
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/EffectView.cpp b/src/gui/widgets/EffectView.cpp
index e4c01be..e303531 100644
--- a/src/gui/widgets/EffectView.cpp
+++ b/src/gui/widgets/EffectView.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2007-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -31,6 +31,7 @@
#include <QtGui/QWhatsThis>
#include "EffectView.h"
+#include "DummyEffect.h"
#include "caption_menu.h"
#include "EffectControls.h"
#include "EffectControlDialog.h"
@@ -51,16 +52,21 @@ EffectView::EffectView( Effect * _model, QWidget * _parent ) :
m_controlView( NULL )
{
setFixedSize( 210, 60 );
-
- m_bypass = new ledCheckBox( "", this );
+
+ // Disable effects that are of type "DummyEffect"
+ bool isEnabled = !dynamic_cast<DummyEffect *>( effect() );
+ m_bypass = new ledCheckBox( this, "", isEnabled ? ledCheckBox::Green : ledCheckBox::Red );
m_bypass->move( 3, 3 );
+ m_bypass->setEnabled( isEnabled );
m_bypass->setWhatsThis( tr( "Toggles the effect on or off." ) );
+
toolTip::add( m_bypass, tr( "On/Off" ) );
m_wetDry = new knob( knobBright_26, this );
m_wetDry->setLabel( tr( "W/D" ) );
m_wetDry->move( 27, 5 );
+ m_wetDry->setEnabled( isEnabled );
m_wetDry->setHintText( tr( "Wet Level:" ) + " ", "" );
m_wetDry->setWhatsThis( tr( "The Wet/Dry knob sets the ratio between "
"the input signal and the effect signal that "
@@ -70,6 +76,7 @@ EffectView::EffectView( Effect * _model, QWidget * _parent ) :
m_autoQuit = new TempoSyncKnob( knobBright_26, this );
m_autoQuit->setLabel( tr( "DECAY" ) );
m_autoQuit->move( 60, 5 );
+ m_autoQuit->setEnabled( isEnabled );
m_autoQuit->setHintText( tr( "Time:" ) + " ", "ms" );
m_autoQuit->setWhatsThis( tr(
"The Decay knob controls how many buffers of silence must pass before the "
@@ -80,6 +87,7 @@ EffectView::EffectView( Effect * _model, QWidget * _parent ) :
m_gate = new knob( knobBright_26, this );
m_gate->setLabel( tr( "GATE" ) );
m_gate->move( 93, 5 );
+ m_gate->setEnabled( isEnabled );
m_gate->setHintText( tr( "Gate:" ) + " ", "" );
m_gate->setWhatsThis( tr(
"The Gate knob controls the signal level that is considered to be 'silence' "
@@ -237,7 +245,7 @@ void EffectView::closeEffects()
void EffectView::contextMenuEvent( QContextMenuEvent * )
{
- QPointer<captionMenu> contextMenu = new captionMenu( model()->displayName() );
+ QPointer<captionMenu> contextMenu = new captionMenu( model()->displayName(), this );
contextMenu->addAction( embed::getIconPixmap( "arp_up" ),
tr( "Move &up" ),
this, SLOT( moveUp() ) );
@@ -249,9 +257,7 @@ void EffectView::contextMenuEvent( QContextMenuEvent * )
tr( "&Remove this plugin" ),
this, SLOT( deletePlugin() ) );
contextMenu->addSeparator();
- contextMenu->addAction( embed::getIconPixmap( "help" ),
- tr( "&Help" ),
- this, SLOT( displayHelp() ) );
+ contextMenu->addHelpAction();
contextMenu->exec( QCursor::pos() );
delete contextMenu;
}
diff --git a/src/gui/widgets/EnvelopeAndLfoView.cpp b/src/gui/widgets/EnvelopeAndLfoView.cpp
index 034e00d..d28ec0d 100644
--- a/src/gui/widgets/EnvelopeAndLfoView.cpp
+++ b/src/gui/widgets/EnvelopeAndLfoView.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -251,7 +251,7 @@ EnvelopeAndLfoView::EnvelopeAndLfoView( QWidget * _parent ) :
tr( "Click here for a square-wave." ) );
m_userLfoBtn = new pixmapButton( this, NULL );
- m_userLfoBtn->move( LFO_SHAPES_X+60, LFO_SHAPES_Y );
+ m_userLfoBtn->move( LFO_SHAPES_X+75, LFO_SHAPES_Y );
m_userLfoBtn->setActiveGraphic( embed::getIconPixmap(
"usr_wave_active" ) );
m_userLfoBtn->setInactiveGraphic( embed::getIconPixmap(
@@ -264,13 +264,22 @@ EnvelopeAndLfoView::EnvelopeAndLfoView( QWidget * _parent ) :
connect( m_userLfoBtn, SIGNAL( toggled( bool ) ),
this, SLOT( lfoUserWaveChanged() ) );
+ pixmapButton * random_lfo_btn = new pixmapButton( this, NULL );
+ random_lfo_btn->move( LFO_SHAPES_X+60, LFO_SHAPES_Y );
+ random_lfo_btn->setActiveGraphic( embed::getIconPixmap(
+ "random_wave_active" ) );
+ random_lfo_btn->setInactiveGraphic( embed::getIconPixmap(
+ "random_wave_inactive" ) );
+ random_lfo_btn->setWhatsThis(
+ tr( "Click here for random wave." ) );
+
m_lfoWaveBtnGrp = new automatableButtonGroup( this );
m_lfoWaveBtnGrp->addButton( sin_lfo_btn );
m_lfoWaveBtnGrp->addButton( triangle_lfo_btn );
m_lfoWaveBtnGrp->addButton( saw_lfo_btn );
m_lfoWaveBtnGrp->addButton( sqr_lfo_btn );
m_lfoWaveBtnGrp->addButton( m_userLfoBtn );
-
+ m_lfoWaveBtnGrp->addButton( random_lfo_btn );
m_x100Cb = new ledCheckBox( tr( "FREQ x 100" ), this );
m_x100Cb->setFont( pointSizeF( m_x100Cb->font(), 6.5 ) );
@@ -525,9 +534,17 @@ void EnvelopeAndLfoView::paintEvent( QPaintEvent * )
case EnvelopeAndLfoParameters::SquareWave:
val = Oscillator::squareSample( phase );
break;
+ case EnvelopeAndLfoParameters::RandomWave:
+ if( x % (int)( 900 * m_lfoSpeedKnob->value<float>() + 1 ) == 0 )
+ {
+ m_randomGraph = Oscillator::noiseSample( 0.0f );
+ }
+ val = m_randomGraph;
+ break;
case EnvelopeAndLfoParameters::UserDefinedWave:
val = m_params->m_userWave.
userWaveSample( phase );
+ break;
}
if( static_cast<f_cnt_t>( cur_sample ) <=
m_params->m_lfoAttackFrames )
diff --git a/src/gui/widgets/FxLine.cpp b/src/gui/widgets/FxLine.cpp
new file mode 100644
index 0000000..0be3bce
--- /dev/null
+++ b/src/gui/widgets/FxLine.cpp
@@ -0,0 +1,263 @@
+/*
+ * FxLine.cpp - FX line widget
+ *
+ * Copyright (c) 2009 Andrew Kelley <superjoe30/at/gmail/dot/com>
+ * Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "FxLine.h"
+
+#include <QDebug>
+#include <QtGui/QInputDialog>
+#include <QtGui/QPainter>
+#include <QtGui/QLineEdit>
+#include <QtGui/QWhatsThis>
+
+#include "FxMixer.h"
+#include "FxMixerView.h"
+#include "embed.h"
+#include "engine.h"
+#include "SendButtonIndicator.h"
+#include "gui_templates.h"
+#include "caption_menu.h"
+
+const int FxLine::FxLineHeight = 287;
+QPixmap * FxLine::s_sendBgArrow = NULL;
+QPixmap * FxLine::s_receiveBgArrow = NULL;
+
+FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) :
+ QWidget( _parent ),
+ m_mv( _mv ),
+ m_channelIndex( _channelIndex )
+{
+ if( ! s_sendBgArrow )
+ {
+ s_sendBgArrow = new QPixmap( embed::getIconPixmap( "send_bg_arrow", 29, 56 ) );
+ }
+ if( ! s_receiveBgArrow )
+ {
+ s_receiveBgArrow = new QPixmap( embed::getIconPixmap( "receive_bg_arrow", 29, 56 ) );
+ }
+
+ setFixedSize( 33, FxLineHeight );
+ setAttribute( Qt::WA_OpaquePaintEvent, true );
+ setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) );
+
+ // mixer sends knob
+ m_sendKnob = new knob( knobBright_26, this, tr("Channel send amount") );
+ m_sendKnob->move( 3, 22 );
+ m_sendKnob->setVisible(false);
+
+ // send button indicator
+ m_sendBtn = new SendButtonIndicator( this, this, m_mv );
+ m_sendBtn->move( 2, 2 );
+
+ // channel number
+ m_lcd = new LcdWidget( 2, this );
+ m_lcd->setValue( m_channelIndex );
+ m_lcd->move( 4, 58 );
+ m_lcd->setMarginWidth( 1 );
+
+ setWhatsThis( tr(
+ "The FX channel receives input from one or more instrument tracks.\n "
+ "It in turn can be routed to multiple other FX channels. LMMS automatically "
+ "takes care of preventing infinite loops for you and doesn't allow making "
+ "a connection that would result in an infinite loop.\n\n"
+
+ "In order to route the channel to another channel, select the FX channel "
+ "and click on the \"send\" button on the channel you want to send to. "
+ "The knob under the send button controls the level of signal that is sent "
+ "to the channel.\n\n"
+
+ "You can remove and move FX channels in the context menu, which is accessed "
+ "by right-clicking the FX channel.\n") );
+}
+
+
+FxLine::~FxLine()
+{
+ delete m_sendKnob;
+ delete m_sendBtn;
+ delete m_lcd;
+}
+
+
+void FxLine::setChannelIndex(int index) {
+ m_channelIndex = index;
+
+ m_lcd->setValue( m_channelIndex );
+ m_lcd->update();
+}
+
+
+void FxLine::drawFxLine( QPainter* p, const FxLine *fxLine, const QString& name, bool isActive, bool sendToThis, bool receiveFromThis )
+{
+ int width = fxLine->rect().width();
+ int height = fxLine->rect().height();
+
+ QColor sh_color = QApplication::palette().color( QPalette::Active,
+ QPalette::Shadow );
+ QColor te_color = p->pen().brush().color();
+ QColor bt_color = QApplication::palette().color( QPalette::Active,
+ QPalette::BrightText );
+
+
+ p->fillRect( fxLine->rect(), isActive ? fxLine->backgroundActive() : p->background() );
+
+ p->setPen( QColor( 255, 255, 255, isActive ? 100 : 50 ) );
+ p->drawRect( 1, 1, width-3, height-3 );
+
+ p->setPen( isActive ? sh_color : QColor( 0, 0, 0, 50 ) );
+ p->drawRect( 0, 0, width-1, height-1 );
+
+ // draw the mixer send background
+ if( sendToThis )
+ {
+ p->drawPixmap( 2, 0, 29, 56, *s_sendBgArrow );
+ }
+ else if( receiveFromThis )
+ {
+ p->drawPixmap( 2, 0, 29, 56, *s_receiveBgArrow );
+ }
+
+ // draw the channel name
+ p->rotate( -90 );
+
+ p->setFont( pointSizeF( fxLine->font(), 7.5f ) );
+ p->setPen( sh_color );
+ p->drawText( -146, 21, name );
+
+ p->setPen( isActive ? bt_color : te_color );
+
+ p->drawText( -145, 20, name );
+
+}
+
+
+void FxLine::paintEvent( QPaintEvent * )
+{
+ FxMixer * mix = engine::fxMixer();
+ bool sendToThis = mix->channelSendModel(
+ m_mv->currentFxLine()->m_channelIndex, m_channelIndex ) != NULL;
+ bool receiveFromThis = mix->channelSendModel(
+ m_channelIndex, m_mv->currentFxLine()->m_channelIndex ) != NULL;
+ QPainter painter;
+ painter.begin( this );
+ drawFxLine( &painter, this,
+ mix->effectChannel( m_channelIndex )->m_name,
+ m_mv->currentFxLine() == this, sendToThis, receiveFromThis );
+ painter.end();
+}
+
+
+void FxLine::mousePressEvent( QMouseEvent * )
+{
+ m_mv->setCurrentFxLine( this );
+}
+
+
+void FxLine::mouseDoubleClickEvent( QMouseEvent * )
+{
+ renameChannel();
+}
+
+
+void FxLine::contextMenuEvent( QContextMenuEvent * )
+{
+ FxMixer * mix = engine::fxMixer();
+ QPointer<captionMenu> contextMenu = new captionMenu( mix->effectChannel( m_channelIndex )->m_name, this );
+ if( m_channelIndex != 0 ) // no move-options in master
+ {
+ contextMenu->addAction( tr( "Move &left" ), this, SLOT( moveChannelLeft() ) );
+ contextMenu->addAction( tr( "Move &right" ), this, SLOT( moveChannelRight() ) );
+ }
+ contextMenu->addAction( tr( "Rename &channel" ), this, SLOT( renameChannel() ) );
+ contextMenu->addSeparator();
+
+ if( m_channelIndex != 0 ) // no remove-option in master
+ {
+ contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "R&emove channel" ),
+ this, SLOT( removeChannel() ) );
+ contextMenu->addSeparator();
+ }
+
+ contextMenu->addHelpAction();
+ contextMenu->exec( QCursor::pos() );
+ delete contextMenu;
+}
+
+
+void FxLine::renameChannel()
+{
+ bool ok;
+ FxMixer * mix = engine::fxMixer();
+ QString new_name = QInputDialog::getText( this,
+ FxMixerView::tr( "Rename FX channel" ),
+ FxMixerView::tr( "Enter the new name for this "
+ "FX channel" ),
+ QLineEdit::Normal, mix->effectChannel(m_channelIndex)->m_name, &ok );
+ if( ok && !new_name.isEmpty() )
+ {
+ mix->effectChannel( m_channelIndex )->m_name = new_name;
+ update();
+ }
+}
+
+
+void FxLine::removeChannel()
+{
+ FxMixerView * mix = engine::fxMixerView();
+ mix->deleteChannel( m_channelIndex );
+}
+
+
+void FxLine::moveChannelLeft()
+{
+ FxMixerView * mix = engine::fxMixerView();
+ mix->moveChannelLeft( m_channelIndex );
+}
+
+
+void FxLine::moveChannelRight()
+{
+ FxMixerView * mix = engine::fxMixerView();
+ mix->moveChannelRight( m_channelIndex );
+}
+
+
+void FxLine::displayHelp()
+{
+ QWhatsThis::showText( mapToGlobal( rect().bottomRight() ),
+ whatsThis() );
+}
+
+QBrush FxLine::backgroundActive() const
+{
+ return m_backgroundActive;
+}
+
+void FxLine::setBackgroundActive( const QBrush & c )
+{
+ m_backgroundActive = c;
+}
+
+#include "moc_FxLine.cxx"
+
diff --git a/src/gui/widgets/InstrumentFunctionViews.cpp b/src/gui/widgets/InstrumentFunctionViews.cpp
index e230590..eb5e3ec 100644
--- a/src/gui/widgets/InstrumentFunctionViews.cpp
+++ b/src/gui/widgets/InstrumentFunctionViews.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/InstrumentMidiIOView.cpp b/src/gui/widgets/InstrumentMidiIOView.cpp
index 6f69d2f..1334867 100644
--- a/src/gui/widgets/InstrumentMidiIOView.cpp
+++ b/src/gui/widgets/InstrumentMidiIOView.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -201,4 +201,4 @@ void InstrumentMidiIOView::modelChanged()
}
}
-
+#include "moc_InstrumentMidiIOView.cxx"
diff --git a/src/gui/widgets/InstrumentSoundShapingView.cpp b/src/gui/widgets/InstrumentSoundShapingView.cpp
index 8bd9b2d..bcbf04b 100644
--- a/src/gui/widgets/InstrumentSoundShapingView.cpp
+++ b/src/gui/widgets/InstrumentSoundShapingView.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/LadspaControlView.cpp b/src/gui/widgets/LadspaControlView.cpp
index 585dba5..bc7b19e 100644
--- a/src/gui/widgets/LadspaControlView.cpp
+++ b/src/gui/widgets/LadspaControlView.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/users.sourceforge.net>
* Copyright (c) 2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/LcdSpinBox.cpp b/src/gui/widgets/LcdSpinBox.cpp
index 3c638c5..78bd886 100644
--- a/src/gui/widgets/LcdSpinBox.cpp
+++ b/src/gui/widgets/LcdSpinBox.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2008 Paul Giblock <pgllama/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -104,7 +104,13 @@ void LcdSpinBox::mousePressEvent( QMouseEvent* event )
m_mouseMoving = true;
m_origMousePos = event->globalPos();
QApplication::setOverrideCursor( Qt::BlankCursor );
- model()->prepareJournalEntryFromOldVal();
+
+ AutomatableModel *thisModel = model();
+ if( thisModel )
+ {
+ thisModel->addJournalCheckPoint();
+ thisModel->saveJournallingState( false );
+ }
}
else
{
@@ -139,7 +145,7 @@ void LcdSpinBox::mouseReleaseEvent( QMouseEvent* )
{
if( m_mouseMoving )
{
- model()->addJournalEntryFromOldToCurVal();
+ model()->restoreJournallingState();
QCursor::setPos( m_origMousePos );
QApplication::restoreOverrideCursor();
diff --git a/src/gui/widgets/LcdWidget.cpp b/src/gui/widgets/LcdWidget.cpp
index b68d4f2..746ff42 100644
--- a/src/gui/widgets/LcdWidget.cpp
+++ b/src/gui/widgets/LcdWidget.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2008 Paul Giblock <pgllama/at/gmail.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -40,48 +40,41 @@
-LcdWidget::LcdWidget( int numDigits, QWidget* parent, const QString& name ) :
- QWidget( parent ),
- m_label(),
- m_numDigits( numDigits )
-{
- setEnabled( true );
-
- setWindowTitle( name );
- m_lcdPixmap = new QPixmap( embed::getIconPixmap( "lcd_19green" ) );
+//! @todo: in C++11, we can use delegating ctors
+#define DEFAULT_LCDWIDGET_INITIALIZER_LIST \
+ QWidget( parent ), \
+ m_label()
- m_cellWidth = m_lcdPixmap->size().width() / LcdWidget::charsPerPixmap;
- m_cellHeight = m_lcdPixmap->size().height() / 2;
-
- m_marginWidth = m_cellWidth / 2;
-
- updateSize();
+LcdWidget::LcdWidget( QWidget* parent, const QString& name ) :
+ DEFAULT_LCDWIDGET_INITIALIZER_LIST,
+ m_numDigits( 1 )
+{
+ initUi( name );
}
-LcdWidget::LcdWidget( int numDigits, const QString& style, QWidget* parent, const QString& name ) :
- QWidget( parent ),
- m_label(),
+LcdWidget::LcdWidget( int numDigits, QWidget* parent, const QString& name ) :
+ DEFAULT_LCDWIDGET_INITIALIZER_LIST,
m_numDigits( numDigits )
{
- setEnabled( true );
-
- setWindowTitle( name );
+ initUi( name );
+}
- // We should make a factory for these or something.
- m_lcdPixmap = new QPixmap( embed::getIconPixmap( QString( "lcd_" + style ).toUtf8().constData() ) );
- m_cellWidth = m_lcdPixmap->size().width() / LcdWidget::charsPerPixmap;
- m_cellHeight = m_lcdPixmap->size().height() / 2;
- m_marginWidth = m_cellWidth / 2;
- updateSize();
+LcdWidget::LcdWidget( int numDigits, const QString& style, QWidget* parent, const QString& name ) :
+ DEFAULT_LCDWIDGET_INITIALIZER_LIST,
+ m_numDigits( numDigits )
+{
+ initUi( name, style );
}
+#undef DEFAULT_LCDWIDGET_INITIALIZER_LIST
+
@@ -242,5 +235,27 @@ void LcdWidget::updateSize()
+
+void LcdWidget::initUi(const QString& name , const QString& style)
+{
+ setEnabled( true );
+
+ setWindowTitle( name );
+
+ // We should make a factory for these or something.
+ //m_lcdPixmap = new QPixmap( embed::getIconPixmap( QString( "lcd_" + style ).toUtf8().constData() ) );
+ //m_lcdPixmap = new QPixmap( embed::getIconPixmap( "lcd_19green" ) ); // TODO!!
+ m_lcdPixmap = new QPixmap( embed::getIconPixmap( QString( "lcd_" + style ).toUtf8().constData() ) );
+
+ m_cellWidth = m_lcdPixmap->size().width() / LcdWidget::charsPerPixmap;
+ m_cellHeight = m_lcdPixmap->size().height() / 2;
+
+ m_marginWidth = m_cellWidth / 2;
+
+ updateSize();
+}
+
+
+
#include "moc_LcdWidget.cxx"
diff --git a/src/gui/widgets/MeterDialog.cpp b/src/gui/widgets/MeterDialog.cpp
index e5fbe13..0fd1764 100644
--- a/src/gui/widgets/MeterDialog.cpp
+++ b/src/gui/widgets/MeterDialog.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2006-2008 Danny McRae <khjklujn/at/yahoo.com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -113,4 +113,4 @@ void MeterDialog::modelChanged()
m_denominator->setModel( &mm->denominatorModel() );
}
-
+#include "moc_MeterDialog.cxx"
diff --git a/src/gui/widgets/MidiPortMenu.cpp b/src/gui/widgets/MidiPortMenu.cpp
index 835f537..a48a047 100644
--- a/src/gui/widgets/MidiPortMenu.cpp
+++ b/src/gui/widgets/MidiPortMenu.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2008-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/SendButtonIndicator.cpp b/src/gui/widgets/SendButtonIndicator.cpp
new file mode 100644
index 0000000..e77c0e9
--- /dev/null
+++ b/src/gui/widgets/SendButtonIndicator.cpp
@@ -0,0 +1,63 @@
+#include "SendButtonIndicator.h"
+
+#include "engine.h"
+#include "FxMixer.h"
+#include "Model.h"
+
+QPixmap * SendButtonIndicator::s_qpmOff = NULL;
+QPixmap * SendButtonIndicator::s_qpmOn = NULL;
+
+SendButtonIndicator:: SendButtonIndicator( QWidget * _parent, FxLine * _owner,
+ FxMixerView * _mv) :
+ QLabel( _parent ),
+ m_parent( _owner ),
+ m_mv( _mv )
+{
+ if( ! s_qpmOff )
+ {
+ s_qpmOff = new QPixmap( embed::getIconPixmap( "mixer_send_off", 29, 20 ) );
+ }
+
+ if( ! s_qpmOn )
+ {
+ s_qpmOn = new QPixmap( embed::getIconPixmap( "mixer_send_on", 29, 20 ) );
+ }
+
+ // don't do any initializing yet, because the FxMixerView and FxLine
+ // that were passed to this constructor are not done with their constructors
+ // yet.
+ setPixmap( *s_qpmOff );
+}
+
+void SendButtonIndicator::mousePressEvent( QMouseEvent * e )
+{
+ FxMixer * mix = engine::fxMixer();
+ int from = m_mv->currentFxLine()->channelIndex();
+ int to = m_parent->channelIndex();
+ FloatModel * sendModel = mix->channelSendModel(from, to);
+ if( sendModel == NULL )
+ {
+ // not sending. create a mixer send.
+ mix->createChannelSend( from, to );
+ }
+ else
+ {
+ // sending. delete the mixer send.
+ mix->deleteChannelSend( from, to );
+ }
+
+ m_mv->updateFxLine(m_parent->channelIndex());
+ updateLightStatus();
+}
+
+FloatModel * SendButtonIndicator::getSendModel()
+{
+ FxMixer * mix = engine::fxMixer();
+ return mix->channelSendModel(
+ m_mv->currentFxLine()->channelIndex(), m_parent->channelIndex());
+}
+
+void SendButtonIndicator::updateLightStatus()
+{
+ setPixmap( getSendModel() == NULL ? *s_qpmOff : *s_qpmOn );
+}
diff --git a/src/gui/widgets/SideBar.cpp b/src/gui/widgets/SideBar.cpp
index ec0eccb..874c940 100644
--- a/src/gui/widgets/SideBar.cpp
+++ b/src/gui/widgets/SideBar.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/SideBarWidget.cpp b/src/gui/widgets/SideBarWidget.cpp
index ae8f1a7..5876271 100644
--- a/src/gui/widgets/SideBarWidget.cpp
+++ b/src/gui/widgets/SideBarWidget.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/TimeDisplayWidget.cpp b/src/gui/widgets/TimeDisplayWidget.cpp
index d13da37..affe4ac 100644
--- a/src/gui/widgets/TimeDisplayWidget.cpp
+++ b/src/gui/widgets/TimeDisplayWidget.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/automatable_button.cpp b/src/gui/widgets/automatable_button.cpp
index d0687a0..224eb66 100644
--- a/src/gui/widgets/automatable_button.cpp
+++ b/src/gui/widgets/automatable_button.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2011 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/automatable_slider.cpp b/src/gui/widgets/automatable_slider.cpp
index 9649e96..170e3a7 100644
--- a/src/gui/widgets/automatable_slider.cpp
+++ b/src/gui/widgets/automatable_slider.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
* Copyright (c) 2007-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/caption_menu.cpp b/src/gui/widgets/caption_menu.cpp
index ebb13d5..e239dc9 100644
--- a/src/gui/widgets/caption_menu.cpp
+++ b/src/gui/widgets/caption_menu.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2007 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,6 +24,7 @@
#include "caption_menu.h"
+#include "embed.h"
@@ -45,6 +46,26 @@ captionMenu::~captionMenu()
+void captionMenu::addHelpAction()
+{
+ QWidget* parent = (QWidget*) this->parent();
+
+ if (parent == NULL)
+ return;
+
+ if (! parent->whatsThis().isEmpty()) {
+ addAction( embed::getIconPixmap( "help" ), tr( "&Help" ),
+ parent, SLOT( displayHelp() ) );
+ }
+ else {
+ QAction* helpAction = addAction( embed::getIconPixmap("help"), tr("Help (not available)") );
+ helpAction->setDisabled(true);
+ }
+}
+
+
+
+
#include "moc_caption_menu.cxx"
diff --git a/src/gui/widgets/combobox.cpp b/src/gui/widgets/combobox.cpp
index 02c97df..919cd17 100644
--- a/src/gui/widgets/combobox.cpp
+++ b/src/gui/widgets/combobox.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2008-2009 Paul Giblock <pgib/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/cpuload_widget.cpp b/src/gui/widgets/cpuload_widget.cpp
index f634a6b..43ccdf0 100644
--- a/src/gui/widgets/cpuload_widget.cpp
+++ b/src/gui/widgets/cpuload_widget.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/fade_button.cpp b/src/gui/widgets/fade_button.cpp
index 0ae0c1f..59b8341 100644
--- a/src/gui/widgets/fade_button.cpp
+++ b/src/gui/widgets/fade_button.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -44,7 +44,7 @@ fadeButton::fadeButton( const QColor & _normal_color,
m_activatedColor( _activated_color )
{
setAttribute( Qt::WA_OpaquePaintEvent, true );
- setCursor( QCursor( embed::getIconPixmap( "hand" ), 0, 0 ) );
+ setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) );
setFocusPolicy( Qt::NoFocus );
}
diff --git a/src/gui/widgets/fader.cpp b/src/gui/widgets/fader.cpp
index f2dc4c5..e52fb24 100644
--- a/src/gui/widgets/fader.cpp
+++ b/src/gui/widgets/fader.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2008-2012 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -60,7 +60,9 @@
textFloat * fader::s_textFloat = NULL;
-
+QPixmap * fader::s_back = NULL;
+QPixmap * fader::s_leds = NULL;
+QPixmap * fader::s_knob = NULL;
fader::fader( FloatModel * _model, const QString & _name, QWidget * _parent ) :
QWidget( _parent ),
@@ -72,18 +74,30 @@ fader::fader( FloatModel * _model, const QString & _name, QWidget * _parent ) :
m_persistentPeak_R( 0.0 ),
m_fMinPeak( 0.01f ),
m_fMaxPeak( 1.1 ),
- m_back( embed::getIconPixmap( "fader_background" ) ),
- m_leds( embed::getIconPixmap( "fader_leds" ) ),
- m_knob( embed::getIconPixmap( "fader_knob" ) ),
m_moveStartPoint( -1 ),
- m_startValue( 0 )
+ m_startValue( 0 ),
+ m_peakGreen( 0, 0, 0 ),
+ m_peakRed( 0, 0, 0 )
{
if( s_textFloat == NULL )
{
s_textFloat = new textFloat;
}
+ if( ! s_back )
+ {
+ s_back = new QPixmap( embed::getIconPixmap( "fader_background" ) );
+ }
+ if( ! s_leds )
+ {
+ s_leds = new QPixmap( embed::getIconPixmap( "fader_leds" ) );
+ }
+ if( ! s_knob )
+ {
+ s_knob = new QPixmap( embed::getIconPixmap( "fader_knob" ) );
+ }
+
setWindowTitle( _name );
- setAttribute( Qt::WA_OpaquePaintEvent, true );
+ setAttribute( Qt::WA_OpaquePaintEvent, false );
setMinimumSize( 23, 116 );
setMaximumSize( 23, 116);
resize( 23, 116 );
@@ -116,7 +130,7 @@ void fader::mouseMoveEvent( QMouseEvent *mouseEvent )
{
int dy = m_moveStartPoint - mouseEvent->globalY();
- float delta = dy * ( m_model->maxValue() - m_model->minValue() ) / (float) ( height() - m_knob.height() );
+ float delta = dy * ( m_model->maxValue() - m_model->minValue() ) / (float) ( height() - ( *s_knob ).height() );
model()->setValue( m_startValue + delta );
@@ -132,7 +146,7 @@ void fader::mousePressEvent( QMouseEvent* mouseEvent )
if( mouseEvent->button() == Qt::LeftButton &&
! ( mouseEvent->modifiers() & Qt::ControlModifier ) )
{
- if( mouseEvent->y() >= knobPosY() - m_knob.height() && mouseEvent->y() < knobPosY() )
+ if( mouseEvent->y() >= knobPosY() - ( *s_knob ).height() && mouseEvent->y() < knobPosY() )
{
updateTextFloat();
s_textFloat->show();
@@ -260,7 +274,7 @@ void fader::updateTextFloat()
{
s_textFloat->setText( QString("Volume: %1 %").arg( m_model->value() * 100 ) );
}
- s_textFloat->moveGlobal( this, QPoint( width() - m_knob.width() - 5, knobPosY() - 46 ) );
+ s_textFloat->moveGlobal( this, QPoint( width() - ( *s_knob ).width() - 5, knobPosY() - 46 ) );
}
@@ -277,8 +291,7 @@ void fader::paintEvent( QPaintEvent * ev)
QPainter painter(this);
// background
-// painter.drawPixmap( rect(), m_back, QRect( 0, 0, 23, 116 ) );
- painter.drawPixmap( ev->rect(), m_back, ev->rect() );
+ painter.drawPixmap( ev->rect(), *s_back, ev->rect() );
// peak leds
@@ -286,28 +299,50 @@ void fader::paintEvent( QPaintEvent * ev)
int peak_L = calculateDisplayPeak( m_fPeakValue_L - m_fMinPeak );
int persistentPeak_L = qMax<int>( 3, calculateDisplayPeak( m_persistentPeak_L - m_fMinPeak ) );
- painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), m_leds, QRect( 0, peak_L, 11, 116 - peak_L ) );
+ painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), *s_leds, QRect( 0, peak_L, 11, 116 - peak_L ) );
if( m_persistentPeak_L > 0.05 )
{
- painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), (m_persistentPeak_L < 1.0 )? QColor( 74, 253, 133) : QColor( 255, 100, 100));
+ painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), ( m_persistentPeak_L < 1.0 )
+ ? peakGreen()
+ : peakRed() );
}
int peak_R = calculateDisplayPeak( m_fPeakValue_R - m_fMinPeak );
int persistentPeak_R = qMax<int>( 3, calculateDisplayPeak( m_persistentPeak_R - m_fMinPeak ) );
- painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), m_leds, QRect( 11, peak_R, 11, 116 - peak_R ) );
+ painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), *s_leds, QRect( 11, peak_R, 11, 116 - peak_R ) );
if( m_persistentPeak_R > 0.05 )
{
- painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), (m_persistentPeak_R < 1.0 )? QColor( 74, 253, 133) : QColor( 255, 100, 100));
+ painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), ( m_persistentPeak_R < 1.0 )
+ ? peakGreen()
+ : peakRed() );
}
// knob
- painter.drawPixmap( 0, knobPosY() - m_knob.height(), m_knob );
+ painter.drawPixmap( 0, knobPosY() - ( *s_knob ).height(), *s_knob );
}
+QColor fader::peakGreen() const
+{
+ return m_peakGreen;
+}
+QColor fader::peakRed() const
+{
+ return m_peakRed;
+}
+
+void fader::setPeakGreen( const QColor & c )
+{
+ m_peakGreen = c;
+}
+
+void fader::setPeakRed( const QColor & c )
+{
+ m_peakRed = c;
+}
#include "moc_fader.cxx"
diff --git a/src/gui/widgets/graph.cpp b/src/gui/widgets/graph.cpp
index a701153..e3afe50 100644
--- a/src/gui/widgets/graph.cpp
+++ b/src/gui/widgets/graph.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2006-2007 Andreas Brandmaier <andy/at/brandmaier/dot/de>
* 2008 Paul Giblock <drfaygo/at/gmail/dot/com>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -221,8 +221,11 @@ void graph::drawLineAt( int _x, int _y, int _lastx )
for ( int i = 0; i < linelen; i++ )
{
int x = (_x + (i * xstep)); // get x value
- model()->setSampleAt( (int)( x * xscale ), val + (i * ystep));
+ model()->drawSampleAt( (int)( x * xscale ), val + (i * ystep));
}
+ int start = qMin( _x, _x + ( ( linelen - 1 ) * xstep ) );
+ int end = qMax( _x, _x + ( ( linelen - 1 ) * xstep ) );
+ model()->samplesChanged( start, end );
}
void graph::changeSampleAt( int _x, int _y )
@@ -488,18 +491,10 @@ void graphModel::setLength( int _length )
-void graphModel::setSampleAt( int _x, float _val )
+void graphModel::setSampleAt( int x, float val )
{
- //snap to the grid
- _val -= ( m_step != 0.0 ) ? fmod( _val, m_step ) * m_step : 0;
-
- // boundary crop
- _x = qMax( 0, qMin( length()-1, _x ) );
- _val = qMax( minValue(), qMin( maxValue(), _val ) );
-
- // change sample shape
- m_samples[_x] = _val;
- emit samplesChanged( _x, _x );
+ drawSampleAt( x, val );
+ emit samplesChanged( x, x );
}
@@ -679,11 +674,31 @@ void graphModel::shiftPhase( int _deg )
// shift phase
for( int i = 0; i < length(); i++ )
- m_samples[i] = temp[ ( i + offset ) % length() ];
+ {
+ int o = ( i + offset ) % length();
+ while( o < 0 ) o += length();
+ m_samples[i] = temp[o];
+ }
emit samplesChanged( 0, length()-1 );
}
+void graphModel::drawSampleAt( int x, float val )
+{
+ //snap to the grid
+ val -= ( m_step != 0.0 ) ? fmod( val, m_step ) * m_step : 0;
+
+ // boundary crop
+ x = qMax( 0, qMin( length()-1, x ) );
+ val = qMax( minValue(), qMin( maxValue(), val ) );
+
+ // change sample shape
+ m_samples[x] = val;
+}
+
+
+
+
#include "moc_graph.cxx"
diff --git a/src/gui/widgets/group_box.cpp b/src/gui/widgets/group_box.cpp
index ee5f3f2..4ea5068 100644
--- a/src/gui/widgets/group_box.cpp
+++ b/src/gui/widgets/group_box.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/knob.cpp b/src/gui/widgets/knob.cpp
index 008ad62..1a2feef 100644
--- a/src/gui/widgets/knob.cpp
+++ b/src/gui/widgets/knob.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -34,8 +34,8 @@
#ifndef __USE_XOPEN
#define __USE_XOPEN
#endif
-#include <math.h>
+#include "lmms_math.h"
#include "knob.h"
#include "caption_menu.h"
#include "config_mgr.h"
@@ -55,17 +55,37 @@ textFloat * knob::s_textFloat = NULL;
-knob::knob( int _knob_num, QWidget * _parent, const QString & _name ) :
- QWidget( _parent ),
- FloatModelView( new FloatModel( 0, 0, 0, 1, NULL, _name, true ), this ),
- m_knobNum( _knob_num ),
- m_label( "" ),
- m_knobPixmap( NULL ),
- m_volumeKnob( false ),
- m_volumeRatio( 100.0, 0.0, 1000000.0 ),
- m_buttonPressed( false ),
- m_angle( -10 ),
- m_outerColor( NULL )
+//! @todo: in C++11, we can use delegating ctors
+#define DEFAULT_KNOB_INITIALIZER_LIST \
+ QWidget( _parent ), \
+ FloatModelView( new FloatModel( 0, 0, 0, 1, NULL, _name, true ), this ), \
+ m_label( "" ), \
+ m_knobPixmap( NULL ), \
+ m_volumeKnob( false ), \
+ m_volumeRatio( 100.0, 0.0, 1000000.0 ), \
+ m_buttonPressed( false ), \
+ m_angle( -10 )
+
+knob::knob( knobTypes _knob_num, QWidget * _parent, const QString & _name ) :
+ DEFAULT_KNOB_INITIALIZER_LIST,
+ m_knobNum( _knob_num )
+{
+ initUi( _name );
+}
+
+knob::knob( QWidget * _parent, const QString & _name ) :
+ DEFAULT_KNOB_INITIALIZER_LIST,
+ m_knobNum( knobBright_26 )
+{
+ initUi( _name );
+}
+
+#undef DEFAULT_KNOB_INITIALIZER_LIST
+
+
+
+
+void knob::initUi( const QString & _name )
{
if( s_textFloat == NULL )
{
@@ -74,6 +94,19 @@ knob::knob( int _knob_num, QWidget * _parent, const QString & _name ) :
setWindowTitle( _name );
+ onKnobNumUpdated();
+ setTotalAngle( 270.0f );
+ setInnerRadius( 1.0f );
+ setOuterRadius( 10.0f );
+ setFocusPolicy( Qt::ClickFocus );
+ doConnections();
+}
+
+
+
+
+void knob::onKnobNumUpdated()
+{
if( m_knobNum != knobStyled )
{
m_knobPixmap = new QPixmap( embed::getIconPixmap( QString( "knob0" +
@@ -81,11 +114,6 @@ knob::knob( int _knob_num, QWidget * _parent, const QString & _name ) :
setFixedSize( m_knobPixmap->width(), m_knobPixmap->height() );
}
- setTotalAngle( 270.0f );
- setInnerRadius( 1.0f );
- setOuterRadius( 10.0f );
- setFocusPolicy( Qt::ClickFocus );
- doConnections();
}
@@ -162,6 +190,27 @@ void knob::setOuterRadius( float _r )
+
+knobTypes knob::knobNum() const
+{
+ return m_knobNum;
+}
+
+
+
+
+void knob::setknobNum( knobTypes _k )
+{
+ if( m_knobNum != _k )
+ {
+ m_knobNum = _k;
+ onKnobNumUpdated();
+ }
+}
+
+
+
+
QPointF knob::centerPoint() const
{
return m_centerPoint;
@@ -213,28 +262,42 @@ void knob::setLineWidth( float _w )
QColor knob::outerColor() const
{
- if( m_outerColor )
- {
- return *m_outerColor;
- }
- else
- {
- return QColor();
- }
+ return m_outerColor;
}
void knob::setOuterColor( const QColor & _c )
{
- if( m_outerColor )
- {
- *m_outerColor = _c;
- }
- else
- {
- m_outerColor = new QColor( _c );
- }
+ m_outerColor = _c;
+}
+
+
+
+QColor knob::lineColor() const
+{
+ return m_lineColor;
+}
+
+
+
+void knob::setlineColor( const QColor & _c )
+{
+ m_lineColor = _c;
+}
+
+
+
+QColor knob::arcColor() const
+{
+ return m_arcColor;
+}
+
+
+
+void knob::setarcColor( const QColor & _c )
+{
+ m_arcColor = _c;
}
@@ -242,7 +305,7 @@ void knob::setOuterColor( const QColor & _c )
QLineF knob::calculateLine( const QPointF & _mid, float _radius, float _innerRadius ) const
{
- const float rarc = m_angle * M_PI / 180.0;
+ const float rarc = m_angle * F_PI / 180.0;
const float ca = cos( rarc );
const float sa = -sin( rarc );
@@ -257,7 +320,7 @@ bool knob::updateAngle()
int angle = 0;
if( model() && model()->maxValue() != model()->minValue() )
{
- angle = angleFromValue( model()->value(), model()->minValue(), model()->maxValue(), m_totalAngle );
+ angle = angleFromValue( model()->inverseScaledValue( model()->value() ), model()->minValue(), model()->maxValue(), m_totalAngle );
}
if( qAbs( angle - m_angle ) > 3 )
{
@@ -290,11 +353,11 @@ void knob::drawKnob( QPainter * _p )
p.setRenderHint( QPainter::Antialiasing );
// Perhaps this can move to setOuterRadius()
- if( m_outerColor )
+ if( m_outerColor.isValid() )
{
QRadialGradient gradient( centerPoint(), outerRadius() );
- gradient.setColorAt(0.4, _p->pen().brush().color() );
- gradient.setColorAt(1, *m_outerColor );
+ gradient.setColorAt( 0.4, _p->pen().brush().color() );
+ gradient.setColorAt( 1, m_outerColor );
p.setPen( QPen( gradient, lineWidth(),
Qt::SolidLine, Qt::RoundCap ) );
@@ -325,7 +388,7 @@ void knob::drawKnob( QPainter * _p )
p.setRenderHint( QPainter::Antialiasing );
- const int centerAngle = angleFromValue( model()->centerValue(), model()->minValue(), model()->maxValue(), m_totalAngle );
+ const int centerAngle = angleFromValue( model()->inverseScaledValue( model()->centerValue() ), model()->minValue(), model()->maxValue(), m_totalAngle );
const int arcLineWidth = 2;
const int arcRectSize = m_knobPixmap->width() - arcLineWidth;
@@ -380,6 +443,8 @@ void knob::drawKnob( QPainter * _p )
p.drawLine( calculateLine( mid, radius-2, 2 ) );
break;
}
+ case knobStyled:
+ break;
}
p.drawArc( mid.x() - arcRectSize/2, 1, arcRectSize, arcRectSize, (90-centerAngle)*16, -16*(m_angle-centerAngle) );
@@ -416,15 +481,22 @@ void knob::contextMenuEvent( QContextMenuEvent * )
// an QApplication::restoreOverrideCursor()-call...
mouseReleaseEvent( NULL );
- captionMenu contextMenu( model()->displayName() );
+ captionMenu contextMenu( model()->displayName(), this );
addDefaultActions( &contextMenu );
+ contextMenu.addAction( QPixmap(),
+ model()->isScaleLogarithmic() ? tr( "Set linear" ) : tr( "Set logarithmic" ),
+ this, SLOT( toggleScale() ) );
contextMenu.addSeparator();
- contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ),
- this, SLOT( displayHelp() ) );
+ contextMenu.addHelpAction();
contextMenu.exec( QCursor::pos() );
}
+void knob::toggleScale()
+{
+ model()->setScaleLogarithmic( ! model()->isScaleLogarithmic() );
+}
+
void knob::dragEnterEvent( QDragEnterEvent * _dee )
@@ -467,7 +539,12 @@ void knob::mousePressEvent( QMouseEvent * _me )
! ( _me->modifiers() & Qt::ControlModifier ) &&
! ( _me->modifiers() & Qt::ShiftModifier ) )
{
- model()->prepareJournalEntryFromOldVal();
+ AutomatableModel *thisModel = model();
+ if( thisModel )
+ {
+ thisModel->addJournalCheckPoint();
+ thisModel->saveJournallingState( false );
+ }
const QPoint & p = _me->pos();
m_origMousePos = p;
@@ -515,9 +592,16 @@ void knob::mouseMoveEvent( QMouseEvent * _me )
-void knob::mouseReleaseEvent( QMouseEvent * /* _me*/ )
+void knob::mouseReleaseEvent( QMouseEvent* event )
{
- model()->addJournalEntryFromOldToCurVal();
+ if( event && event->button() == Qt::LeftButton )
+ {
+ AutomatableModel *thisModel = model();
+ if( thisModel )
+ {
+ thisModel->restoreJournallingState();
+ }
+ }
m_buttonPressed = false;
@@ -592,15 +676,39 @@ void knob::setPosition( const QPoint & _p )
{
const float value = getValue( _p ) + m_leftOver;
const float step = model()->step<float>();
-
- if( qAbs( value ) >= step )
+ const float oldValue = model()->value();
+
+
+ if( model()->isScaleLogarithmic() ) // logarithmic code
{
- model()->setValue( model()->value() - value );
- m_leftOver = 0.0f;
+ const float pos = model()->minValue() < 0
+ ? oldValue / qMax( qAbs( model()->maxValue() ), qAbs( model()->minValue() ) )
+ : ( oldValue - model()->minValue() ) / model()->range();
+ const float ratio = 0.1f + qAbs( pos ) * 15.f;
+ float newValue = value * ratio;
+ if( qAbs( newValue ) >= step )
+ {
+ model()->setValue( oldValue - newValue );
+ m_leftOver = 0.0f;
+ }
+ else
+ {
+ m_leftOver = value;
+ }
}
- else
+
+
+ else // linear code
{
- m_leftOver = value;
+ if( qAbs( value ) >= step )
+ {
+ model()->setValue( oldValue - value );
+ m_leftOver = 0.0f;
+ }
+ else
+ {
+ m_leftOver = value;
+ }
}
}
@@ -626,7 +734,7 @@ void knob::enterValue()
}
else
{
- new_val = pow( 10.0, ( new_val / 20.0 ) ) * 100.0;
+ new_val = dbvToAmp( new_val ) * 100.0;
}
}
else
diff --git a/src/gui/widgets/led_checkbox.cpp b/src/gui/widgets/led_checkbox.cpp
index 142bee7..98d2953 100644
--- a/src/gui/widgets/led_checkbox.cpp
+++ b/src/gui/widgets/led_checkbox.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -38,25 +38,30 @@ static const QString names[ledCheckBox::NumColors] =
+
+//! @todo: in C++11, we can use delegating ctors
+#define DEFAULT_LEDCHECKBOX_INITIALIZER_LIST \
+ automatableButton( _parent, _name )
+
ledCheckBox::ledCheckBox( const QString & _text, QWidget * _parent,
const QString & _name, LedColors _color ) :
- automatableButton( _parent, _name ),
+ DEFAULT_LEDCHECKBOX_INITIALIZER_LIST,
m_text( _text )
{
- setCheckable( true );
+ initUi( _color );
+}
- if( _color >= NumColors || _color < Yellow )
- {
- _color = Yellow;
- }
- m_ledOnPixmap = new QPixmap( embed::getIconPixmap(
- names[_color].toUtf8().constData() ) );
- m_ledOffPixmap = new QPixmap( embed::getIconPixmap( "led_off" ) );
- setFont( pointSize<7>( font() ) );
- setFixedSize( m_ledOffPixmap->width() + 5 + QFontMetrics( font() ).width( text() ), m_ledOffPixmap->height() );
+
+
+ledCheckBox::ledCheckBox( QWidget * _parent,
+ const QString & _name, LedColors _color ) :
+ DEFAULT_LEDCHECKBOX_INITIALIZER_LIST
+{
+ initUi( _color );
}
+#undef DEFAULT_LEDCHECKBOX_INITIALIZER_LIST
@@ -69,14 +74,23 @@ ledCheckBox::~ledCheckBox()
+void ledCheckBox::setText( const QString &s )
+{
+ m_text = s;
+ onTextUpdated();
+}
+
+
+
+
void ledCheckBox::paintEvent( QPaintEvent * )
{
QPainter p( this );
p.setFont( pointSize<7>( font() ) );
if( model()->value() == true )
- {
- p.drawPixmap( 0, 0, *m_ledOnPixmap );
+ {
+ p.drawPixmap( 0, 0, *m_ledOnPixmap );
}
else
{
@@ -91,5 +105,32 @@ void ledCheckBox::paintEvent( QPaintEvent * )
+
+void ledCheckBox::initUi( LedColors _color )
+{
+ setCheckable( true );
+
+ if( _color >= NumColors || _color < Yellow )
+ {
+ _color = Yellow;
+ }
+ m_ledOnPixmap = new QPixmap( embed::getIconPixmap(
+ names[_color].toUtf8().constData() ) );
+ m_ledOffPixmap = new QPixmap( embed::getIconPixmap( "led_off" ) );
+
+ setFont( pointSize<7>( font() ) );
+ setText( m_text );
+}
+
+
+
+
+void ledCheckBox::onTextUpdated()
+{
+ setFixedSize( m_ledOffPixmap->width() + 5 + QFontMetrics( font() ).width( text() ), m_ledOffPixmap->height() );
+}
+
+
+
#include "moc_led_checkbox.cxx"
diff --git a/src/gui/widgets/nstate_button.cpp b/src/gui/widgets/nstate_button.cpp
index e77c989..47ab8d0 100644
--- a/src/gui/widgets/nstate_button.cpp
+++ b/src/gui/widgets/nstate_button.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/pixmap_button.cpp b/src/gui/widgets/pixmap_button.cpp
index a7b5bcf..be90d88 100644
--- a/src/gui/widgets/pixmap_button.cpp
+++ b/src/gui/widgets/pixmap_button.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2013 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/project_notes.cpp b/src/gui/widgets/project_notes.cpp
index fb16a35..b39e2b0 100644
--- a/src/gui/widgets/project_notes.cpp
+++ b/src/gui/widgets/project_notes.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/rename_dialog.cpp b/src/gui/widgets/rename_dialog.cpp
index 7365f3c..8fa76c1 100644
--- a/src/gui/widgets/rename_dialog.cpp
+++ b/src/gui/widgets/rename_dialog.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/rubberband.cpp b/src/gui/widgets/rubberband.cpp
index 007a6b6..8bc6846 100644
--- a/src/gui/widgets/rubberband.cpp
+++ b/src/gui/widgets/rubberband.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2006-2011 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/tab_bar.cpp b/src/gui/widgets/tab_bar.cpp
index 1340cbc..4561164 100644
--- a/src/gui/widgets/tab_bar.cpp
+++ b/src/gui/widgets/tab_bar.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/tab_widget.cpp b/src/gui/widgets/tab_widget.cpp
index 0650aeb..173c330 100644
--- a/src/gui/widgets/tab_widget.cpp
+++ b/src/gui/widgets/tab_widget.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -37,7 +37,8 @@
tabWidget::tabWidget( const QString & _caption, QWidget * _parent ) :
QWidget( _parent ),
m_activeTab( 0 ),
- m_caption( _caption )
+ m_caption( _caption ),
+ m_tabheight( _caption.isEmpty() ? 11: 10 )
{
setFont( pointSize<8>( font() ) );
@@ -149,14 +150,13 @@ void tabWidget::paintEvent( QPaintEvent * _pe )
QColor bg_color = QApplication::palette().color( QPalette::Active,
QPalette::Background );
- QLinearGradient g( 0, 0, 0, 10 );
+ QLinearGradient g( 0, 0, 0, m_tabheight );
g.setColorAt( 0, bg_color.darker( 250 ) );
g.setColorAt( 0.1, bg_color.lighter( 120 ) );
g.setColorAt( 1, bg_color.darker( 250 ) );
p.fillRect( 0, 0, width() - 1, height() - 1, bg_color );
bool big_tab_captions = ( m_caption == "" );
- int add = big_tab_captions ? 1 : 0;
p.setPen( bg_color.darker( 150 ) );
p.drawRect( 0, 0, width() - 1, height() - 1 );
@@ -168,17 +168,17 @@ void tabWidget::paintEvent( QPaintEvent * _pe )
p.setPen( QColor( 0, 0, 0 ) );
p.drawRect( 1, 1, width() - 3, height() - 3 );
- p.fillRect( 2, 2, width() - 4, 10 + add, g );
- p.drawLine( 2, 12 + add, width() - 3, 12 + add );
+ p.fillRect( 2, 2, width() - 4, m_tabheight, g );
+ p.drawLine( 2, m_tabheight + 2, width() - 3, m_tabheight + 2);
- if( !big_tab_captions )
+ if( ! m_caption.isEmpty() )
{
p.setPen( QColor( 255, 255, 255 ) );
p.drawText( 5, 11, m_caption );
}
- int cx = ( big_tab_captions ? 4 : 14 ) +
- fontMetrics().width( m_caption );
+ // Calculate the tabs' x (tabs are painted next to the caption)
+ int tab_x_offset = m_caption.isEmpty() ? 4 : 14 + fontMetrics().width( m_caption );
QColor cap_col( 160, 160, 160 );
if( big_tab_captions )
@@ -199,11 +199,11 @@ void tabWidget::paintEvent( QPaintEvent * _pe )
if( it.key() == m_activeTab )
{
p.setPen( QColor( 32, 48, 64 ) );
- p.fillRect( cx, 2, ( *it ).nwidth - 6, 10, cap_col );
+ p.fillRect( tab_x_offset, 2, ( *it ).nwidth - 6, 10, cap_col );
}
- p.drawText( cx + 3, 10 + add, ( *it ).name );
+ p.drawText( tab_x_offset + 3, m_tabheight, ( *it ).name );
p.setPen( cap_col );
- cx += ( *it ).nwidth;
+ tab_x_offset += ( *it ).nwidth;
}
}
@@ -212,6 +212,9 @@ void tabWidget::paintEvent( QPaintEvent * _pe )
void tabWidget::wheelEvent( QWheelEvent * _we )
{
+ if (_we->y() > m_tabheight)
+ return;
+
_we->accept();
int dir = ( _we->delta() < 0 ) ? 1 : -1;
int tab = m_activeTab;
diff --git a/src/gui/widgets/tempo_sync_knob.cpp b/src/gui/widgets/tempo_sync_knob.cpp
index 4e178ee..93979b4 100644
--- a/src/gui/widgets/tempo_sync_knob.cpp
+++ b/src/gui/widgets/tempo_sync_knob.cpp
@@ -4,7 +4,7 @@
* Copyright (c) 2005-2007 Danny McRae <khjklujn/at/yahoo.com>
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -36,7 +36,7 @@
-TempoSyncKnob::TempoSyncKnob( int _knob_num, QWidget * _parent,
+TempoSyncKnob::TempoSyncKnob( knobTypes _knob_num, QWidget * _parent,
const QString & _name ) :
knob( _knob_num, _parent, _name ),
m_tempoSyncIcon( embed::getIconPixmap( "tempo_sync" ) ),
@@ -83,7 +83,7 @@ void TempoSyncKnob::contextMenuEvent( QContextMenuEvent * )
{
mouseReleaseEvent( NULL );
- captionMenu contextMenu( model()->displayName() );
+ captionMenu contextMenu( model()->displayName(), this );
addDefaultActions( &contextMenu );
contextMenu.addSeparator();
@@ -147,9 +147,7 @@ void TempoSyncKnob::contextMenuEvent( QContextMenuEvent * )
}
- contextMenu.addSeparator();
- contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ),
- this, SLOT( displayHelp() ) );
+ contextMenu.addHelpAction();
contextMenu.exec( QCursor::pos() );
delete syncMenu;
diff --git a/src/gui/widgets/text_float.cpp b/src/gui/widgets/text_float.cpp
index 24d7504..992dd18 100644
--- a/src/gui/widgets/text_float.cpp
+++ b/src/gui/widgets/text_float.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2010 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -24,6 +24,7 @@
#include <QtCore/QTimer>
#include <QtGui/QPainter>
+#include <QtGui/QStyleOption>
#include "text_float.h"
#include "gui_templates.h"
@@ -41,6 +42,8 @@ textFloat::textFloat() :
resize( 20, 20 );
hide();
+ setAttribute( Qt::WA_TranslucentBackground, true );
+ setStyle( QApplication::style() );
setFont( pointSize<8>( font() ) );
}
@@ -125,35 +128,38 @@ textFloat * textFloat::displayMessage( const QString & _title,
void textFloat::paintEvent( QPaintEvent * _pe )
{
+ QStyleOption opt;
+ opt.init( this );
QPainter p( this );
+ p.fillRect( 0, 0, width(), height(), QColor( 0, 0, 0, 0 ) );
- p.setPen( QColor( 0, 0, 0 ) );
-
- p.setBrush( QColor( 224, 224, 224 ) );
+/* p.setPen( p.pen().brush().color() );
+ p.setBrush( p.background() );*/
p.setFont( pointSize<8>( p.font() ) );
+
+ style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, this );
- p.drawRect( 0, 0, rect().right(), rect().bottom() );
+/* p.drawRect( 0, 0, rect().right(), rect().bottom() );*/
-// p.setPen( Qt::black );
- // small message?
if( m_title.isEmpty() )
{
- p.drawText( 2, p.fontMetrics().height()-2, m_text );
+ p.drawText( opt.rect, Qt::AlignCenter, m_text );
}
else
{
- int text_x = 2;
+ int text_x = opt.rect.left() + 2;
+ int text_y = opt.rect.top() + 12;
if( m_pixmap.isNull() == false )
{
- p.drawPixmap( 5, 5, m_pixmap );
+ p.drawPixmap( opt.rect.topLeft() + QPoint( 5, 5 ), m_pixmap );
text_x += m_pixmap.width() + 8;
}
- p.drawText( text_x, 28, m_text );
+ p.drawText( text_x, text_y + 16, m_text );
QFont f = p.font();
f.setBold( true );
p.setFont( f );
- p.drawText( text_x, 12, m_title );
+ p.drawText( text_x, text_y, m_title );
}
}
@@ -194,4 +200,4 @@ void textFloat::updateSize()
-
+#include "moc_text_float.cxx"
diff --git a/src/gui/widgets/tool_button.cpp b/src/gui/widgets/tool_button.cpp
index 0939180..a252713 100644
--- a/src/gui/widgets/tool_button.cpp
+++ b/src/gui/widgets/tool_button.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/tooltip.cpp b/src/gui/widgets/tooltip.cpp
index 6f07962..9ee9e66 100644
--- a/src/gui/widgets/tooltip.cpp
+++ b/src/gui/widgets/tooltip.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
diff --git a/src/gui/widgets/track_label_button.cpp b/src/gui/widgets/track_label_button.cpp
index f264857..9e84937 100644
--- a/src/gui/widgets/track_label_button.cpp
+++ b/src/gui/widgets/track_label_button.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -45,7 +45,7 @@ trackLabelButton::trackLabelButton( trackView * _tv, QWidget * _parent ) :
{
setAttribute( Qt::WA_OpaquePaintEvent, true );
setAcceptDrops( true );
- setCursor( QCursor( embed::getIconPixmap( "hand" ), 0, 0 ) );
+ setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) );
setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
if( configManager::inst()->value( "ui",
diff --git a/src/gui/widgets/visualization_widget.cpp b/src/gui/widgets/visualization_widget.cpp
index 2f6eebe..36692bc 100644
--- a/src/gui/widgets/visualization_widget.cpp
+++ b/src/gui/widgets/visualization_widget.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2005-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -65,6 +65,7 @@ visualizationWidget::visualizationWidget( const QPixmap & _bg, QWidget * _p,
visualizationWidget::~visualizationWidget()
{
delete[] m_buffer;
+ delete[] m_points;
}
diff --git a/src/tracks/AutomationTrack.cpp b/src/tracks/AutomationTrack.cpp
index 3353ae3..4ca402d 100644
--- a/src/tracks/AutomationTrack.cpp
+++ b/src/tracks/AutomationTrack.cpp
@@ -5,7 +5,7 @@
* Copyright (c) 2008-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2006-2008 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -174,7 +174,7 @@ void AutomationTrackView::dropEvent( QDropEvent * _de )
getTrackContentWidget()->x() ) *
MidiTime::ticksPerTact() /
static_cast<int>( trackContainerView()->pixelsPerTact() ) )
- .toNearestTact();
+ .toAbsoluteTact();
if( pos.getTicks() < 0 )
{
@@ -192,4 +192,4 @@ void AutomationTrackView::dropEvent( QDropEvent * _de )
}
-
+#include "moc_AutomationTrack.cxx"
diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp
index c6df216..20b7374 100644
--- a/src/tracks/InstrumentTrack.cpp
+++ b/src/tracks/InstrumentTrack.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -49,7 +49,7 @@
#include "EffectRackView.h"
#include "embed.h"
#include "engine.h"
-#include "file_browser.h"
+#include "FileBrowser.h"
#include "FxMixer.h"
#include "FxMixerView.h"
#include "InstrumentSoundShaping.h"
@@ -68,7 +68,7 @@
#include "MixHelpers.h"
#include "DataFile.h"
#include "NotePlayHandle.h"
-#include "pattern.h"
+#include "Pattern.h"
#include "PluginView.h"
#include "SamplePlayHandle.h"
#include "song.h"
@@ -86,7 +86,7 @@ const char * volume_help = QT_TRANSLATE_NOOP( "InstrumentTrack",
const int INSTRUMENT_WIDTH = 254;
const int INSTRUMENT_HEIGHT = INSTRUMENT_WIDTH;
-const int PIANO_HEIGHT = 84;
+const int PIANO_HEIGHT = 82;
const int INSTRUMENT_WINDOW_CACHE_SIZE = 8;
@@ -106,7 +106,7 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) :
m_panningModel( DefaultPanning, PanningLeft, PanningRight, 0.1f, this, tr( "Panning" ) ),
m_pitchModel( 0, MinPitchDefault, MaxPitchDefault, 1, this, tr( "Pitch" ) ),
m_pitchRangeModel( 1, 1, 24, this, tr( "Pitch range" ) ),
- m_effectChannelModel( 0, 0, NumFxChannels, this, tr( "FX channel" ) ),
+ m_effectChannelModel( 0, 0, 0, this, tr( "FX channel" ) ),
m_instrument( NULL ),
m_soundShaping( this ),
m_arpeggio( this ),
@@ -115,15 +115,13 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) :
{
m_pitchModel.setCenterValue( 0 );
m_panningModel.setCenterValue( DefaultPanning );
-
m_baseNoteModel.setInitValue( DefaultKey );
- connect( &m_baseNoteModel, SIGNAL( dataChanged() ),
- this, SLOT( updateBaseNote() ) );
- connect( &m_pitchModel, SIGNAL( dataChanged() ),
- this, SLOT( updatePitch() ) );
- connect( &m_pitchRangeModel, SIGNAL( dataChanged() ),
- this, SLOT( updatePitchRange() ) );
+ connect( &m_baseNoteModel, SIGNAL( dataChanged() ), this, SLOT( updateBaseNote() ) );
+ connect( &m_pitchModel, SIGNAL( dataChanged() ), this, SLOT( updatePitch() ) );
+ connect( &m_pitchRangeModel, SIGNAL( dataChanged() ), this, SLOT( updatePitchRange() ) );
+
+ m_effectChannelModel.setRange( 0, engine::fxMixer()->numChannels()-1, 1);
for( int i = 0; i < NumKeys; ++i )
{
@@ -137,12 +135,17 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) :
}
+int InstrumentTrack::baseNote() const
+{
+ return m_baseNoteModel.value() - engine::getSong()->masterPitch();
+}
+
InstrumentTrack::~InstrumentTrack()
{
- // kill all running notes
- silenceAllNotes();
+ // kill all running notes and the iph
+ silenceAllNotes( true );
// now we're save deleting the instrument
delete m_instrument;
@@ -234,10 +237,9 @@ MidiEvent InstrumentTrack::applyMasterKey( const MidiEvent& event )
-void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& time )
+void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset )
{
engine::mixer()->lock();
-
bool eventHandled = false;
switch( event.type() )
@@ -254,7 +256,7 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti
NotePlayHandle* nph = new NotePlayHandle( this, time.frames( engine::framesPerTick() ),
typeInfo<f_cnt_t>::max() / 2,
note( MidiTime(), MidiTime(), event.key(), event.volume( midiPort()->baseVelocity() ) ),
- NULL, false, event.channel(),
+ NULL, event.channel(),
NotePlayHandle::OriginMidiInput );
if( engine::mixer()->addPlayHandle( nph ) )
{
@@ -337,7 +339,7 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti
break;
}
- if( eventHandled == false && instrument()->handleMidiEvent( event, time ) == false )
+ if( eventHandled == false && instrument()->handleMidiEvent( event, time, offset ) == false )
{
qWarning( "InstrumentTrack: unhandled MIDI event %d", event.type() );
}
@@ -348,7 +350,7 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti
-void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& time )
+void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset )
{
// do nothing if we do not have an instrument instance (e.g. when loading settings)
if( m_instrument == NULL )
@@ -368,10 +370,10 @@ void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& t
{
if( m_runningMidiNotes[key] > 0 )
{
- m_instrument->handleMidiEvent( MidiEvent( MidiNoteOff, midiPort()->realOutputChannel(), key, 0 ), time );
+ m_instrument->handleMidiEvent( MidiEvent( MidiNoteOff, midiPort()->realOutputChannel(), key, 0 ), time, offset );
}
++m_runningMidiNotes[key];
- m_instrument->handleMidiEvent( MidiEvent( MidiNoteOn, midiPort()->realOutputChannel(), key, event.velocity() ), time );
+ m_instrument->handleMidiEvent( MidiEvent( MidiNoteOn, midiPort()->realOutputChannel(), key, event.velocity() ), time, offset );
emit newNote();
}
@@ -383,12 +385,12 @@ void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& t
if( key >= 0 && key < NumKeys && --m_runningMidiNotes[key] <= 0 )
{
m_runningMidiNotes[key] = qMax( 0, m_runningMidiNotes[key] );
- m_instrument->handleMidiEvent( MidiEvent( MidiNoteOff, midiPort()->realOutputChannel(), key, 0 ), time );
+ m_instrument->handleMidiEvent( MidiEvent( MidiNoteOff, midiPort()->realOutputChannel(), key, 0 ), time, offset );
}
break;
default:
- m_instrument->handleMidiEvent( transposedEvent, time );
+ m_instrument->handleMidiEvent( transposedEvent, time, offset );
break;
}
@@ -399,7 +401,7 @@ void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& t
-void InstrumentTrack::silenceAllNotes()
+void InstrumentTrack::silenceAllNotes( bool removeIPH )
{
engine::mixer()->lock();
for( int i = 0; i < NumKeys; ++i )
@@ -410,7 +412,7 @@ void InstrumentTrack::silenceAllNotes()
// invalidate all NotePlayHandles linked to this track
m_processHandles.clear();
- engine::mixer()->removePlayHandles( this );
+ engine::mixer()->removePlayHandles( this, removeIPH );
engine::mixer()->unlock();
}
@@ -433,18 +435,17 @@ f_cnt_t InstrumentTrack::beatLen( NotePlayHandle * _n ) const
-void InstrumentTrack::playNote( NotePlayHandle * _n,
- sampleFrame * _working_buffer )
+void InstrumentTrack::playNote( NotePlayHandle* n, sampleFrame* workingBuffer )
{
// arpeggio- and chord-widget has to do its work -> adding sub-notes
// for chords/arpeggios
- m_noteStacking.processNote( _n );
- m_arpeggio.processNote( _n );
+ m_noteStacking.processNote( n );
+ m_arpeggio.processNote( n );
- if( !_n->isArpeggioBaseNote() && m_instrument != NULL )
+ if( n->isMasterNote() == false && m_instrument != NULL )
{
// all is done, so now lets play the note!
- m_instrument->playNote( _n, _working_buffer );
+ m_instrument->playNote( n, workingBuffer );
}
}
@@ -480,7 +481,7 @@ void InstrumentTrack::setName( const QString & _new_name )
// which have the same name as the instrument-track
for( int i = 0; i < numOfTCOs(); ++i )
{
- pattern * p = dynamic_cast<pattern *>( getTCO( i ) );
+ Pattern* p = dynamic_cast<Pattern*>( getTCO( i ) );
if( ( p != NULL && p->name() == name() ) || p->name() == "" )
{
p->setName( _new_name );
@@ -540,7 +541,7 @@ void InstrumentTrack::updatePitchRange()
int InstrumentTrack::masterKey( int _midi_key ) const
{
- int key = m_baseNoteModel.value() - engine::getSong()->masterPitch();
+ int key = baseNote();
return tLimit<int>( _midi_key - ( key - DefaultKey ), 0, NumKeys );
}
@@ -591,7 +592,7 @@ bool InstrumentTrack::play( const MidiTime & _start, const fpp_t _frames,
for( tcoVector::Iterator it = tcos.begin(); it != tcos.end(); ++it )
{
- pattern * p = dynamic_cast<pattern *>( *it );
+ Pattern* p = dynamic_cast<Pattern*>( *it );
// everything which is not a pattern or muted won't be played
if( p == NULL || ( *it )->isMuted() )
{
@@ -655,7 +656,7 @@ bool InstrumentTrack::play( const MidiTime & _start, const fpp_t _frames,
trackContentObject * InstrumentTrack::createTCO( const MidiTime & )
{
- return new pattern( this );
+ return new Pattern( this );
}
@@ -698,7 +699,7 @@ void InstrumentTrack::saveTrackSpecificSettings( QDomDocument& doc, QDomElement
void InstrumentTrack::loadTrackSpecificSettings( const QDomElement & thisElement )
{
- silenceAllNotes();
+ silenceAllNotes( true );
engine::mixer()->lock();
@@ -706,6 +707,7 @@ void InstrumentTrack::loadTrackSpecificSettings( const QDomElement & thisElement
m_panningModel.loadSettings( thisElement, "pan" );
m_pitchRangeModel.loadSettings( thisElement, "pitchrange" );
m_pitchModel.loadSettings( thisElement, "pitch" );
+ m_effectChannelModel.setRange( 0, engine::fxMixer()->numChannels()-1 );
m_effectChannelModel.loadSettings( thisElement, "fxch" );
m_baseNoteModel.loadSettings( thisElement, "basenote" );
@@ -765,6 +767,7 @@ void InstrumentTrack::loadTrackSpecificSettings( const QDomElement & thisElement
}
node = node.nextSibling();
}
+ updatePitchRange();
engine::mixer()->unlock();
}
@@ -773,7 +776,7 @@ void InstrumentTrack::loadTrackSpecificSettings( const QDomElement & thisElement
Instrument * InstrumentTrack::loadInstrument( const QString & _plugin_name )
{
- silenceAllNotes();
+ silenceAllNotes( true );
engine::mixer()->lock();
delete m_instrument;
@@ -1203,11 +1206,10 @@ InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) :
connect( saveSettingsBtn, SIGNAL( clicked() ), this, SLOT( saveSettingsBtnClicked() ) );
- toolTip::add( saveSettingsBtn, tr( "Save current channel settings in a preset-file" ) );
+ toolTip::add( saveSettingsBtn, tr( "Save current instrument track settings in a preset file" ) );
saveSettingsBtn->setWhatsThis(
- tr( "Click here, if you want to save current channel settings "
- "in a preset-file. Later you can load this preset by "
- "double-clicking it in the preset-browser." ) );
+ tr( "Click here, if you want to save current instrument track settings in a preset file. "
+ "Later you can load this preset by double-clicking it in the preset-browser." ) );
basicControlsLayout->addWidget( saveSettingsBtn );
@@ -1264,7 +1266,14 @@ InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) :
flags |= Qt::MSWindowsFixedSizeDialogHint;
flags &= ~Qt::WindowMaximizeButtonHint;
subWin->setWindowFlags( flags );
- subWin->setWindowIcon( embed::getIconPixmap( "instrument_track" ) );
+
+ // Hide the Size and Maximize options from the system menu
+ // since the dialog size is fixed.
+ QMenu * systemMenu = subWin->systemMenu();
+ systemMenu->actions().at( 2 )->setVisible( false ); // Size
+ systemMenu->actions().at( 4 )->setVisible( false ); // Maximize
+
+ subWin->setWindowIcon( embed::getIconPixmap( "instrument_track" ) );
subWin->setFixedSize( subWin->size() );
subWin->hide();
}
@@ -1325,6 +1334,7 @@ void InstrumentTrackWindow::modelChanged()
m_pitchKnob->setModel( &m_track->m_pitchModel );
m_pitchRangeSpinBox->setModel( &m_track->m_pitchRangeModel );
m_pitchKnob->show();
+ m_pitchRangeSpinBox->show();
}
else
{
@@ -1366,6 +1376,8 @@ void InstrumentTrackWindow::saveSettingsBtnClicked()
!sfd.selectedFiles().isEmpty() &&
!sfd.selectedFiles().first().isEmpty() )
{
+ DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeSave );
+
DataFile dataFile( DataFile::InstrumentTrackSettings );
m_track->setSimpleSerializing();
m_track->saveSettings( dataFile, dataFile.content() );
@@ -1507,7 +1519,7 @@ void InstrumentTrackWindow::dropEvent( QDropEvent* event )
}
else if( type == "pluginpresetfile" )
{
- const QString ext = fileItem::extension( value );
+ const QString ext = FileItem::extension( value );
Instrument * i = m_track->instrument();
if( !i->descriptor()->supportsFileType( ext ) )
diff --git a/src/tracks/InstrumentTrack.cpp.orig b/src/tracks/InstrumentTrack.cpp.orig
deleted file mode 100644
index 0838590..0000000
--- a/src/tracks/InstrumentTrack.cpp.orig
+++ /dev/null
@@ -1,1667 +0,0 @@
-/*
- * InstrumentTrack.cpp - implementation of instrument-track-class
- * (window + data-structures)
- *
- * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QQueue>
-#include <QtGui/QApplication>
-#include <QtGui/QCloseEvent>
-#include <QtGui/QFileDialog>
-#include <QtGui/QLabel>
-#include <QtGui/QLayout>
-#include <QtGui/QLineEdit>
-#include <QtGui/QMdiArea>
-#include <QtGui/QMenu>
-#include <QtGui/QMessageBox>
-#include <QtGui/QMdiSubWindow>
-#include <QtGui/QPainter>
-
-#include "InstrumentTrack.h"
-#include "AudioPort.h"
-#include "AutomationPattern.h"
-#include "bb_track.h"
-#include "config_mgr.h"
-#include "ControllerConnection.h"
-#include "debug.h"
-#include "EffectChain.h"
-#include "EffectRackView.h"
-#include "embed.h"
-#include "engine.h"
-#include "file_browser.h"
-#include "FxMixer.h"
-#include "FxMixerView.h"
-#include "InstrumentSoundShaping.h"
-#include "InstrumentSoundShapingView.h"
-#include "fade_button.h"
-#include "gui_templates.h"
-#include "Instrument.h"
-#include "InstrumentFunctionViews.h"
-#include "InstrumentMidiIOView.h"
-#include "knob.h"
-#include "lcd_spinbox.h"
-#include "led_checkbox.h"
-#include "MainWindow.h"
-#include "MidiClient.h"
-#include "MidiPortMenu.h"
-#include "mmp.h"
-#include "note_play_handle.h"
-#include "pattern.h"
-#include "PluginView.h"
-#include "SamplePlayHandle.h"
-#include "song.h"
-#include "string_pair_drag.h"
-#include "surround_area.h"
-#include "tab_widget.h"
-#include "tooltip.h"
-#include "track_label_button.h"
-
-
-
-const char * volume_help = QT_TRANSLATE_NOOP( "InstrumentTrack",
- "With this knob you can set "
- "the volume of the opened "
- "channel.");
-
-const int INSTRUMENT_WIDTH = 254;
-const int INSTRUMENT_HEIGHT = INSTRUMENT_WIDTH;
-const int PIANO_HEIGHT = 84;
-const int INSTRUMENT_WINDOW_CACHE_SIZE = 8;
-
-
-// #### IT:
-InstrumentTrack::InstrumentTrack( TrackContainer* tc ) :
- track( track::InstrumentTrack, tc ),
- MidiEventProcessor(),
- m_audioPort( tr( "unnamed_track" ) ),
- m_midiPort( tr( "unnamed_track" ), engine::mixer()->midiClient(),
- this, this ),
- m_notes(),
- m_sustainPedalPressed( false ),
- m_baseNoteModel( 0, 0, KeysPerOctave * NumOctaves - 1, this,
- tr( "Base note" ) ),
- m_volumeModel( DefaultVolume, MinVolume, MaxVolume, 0.1f, this,
- tr( "Volume" ) ),
- m_panningModel( DefaultPanning, PanningLeft, PanningRight, 0.1f,
- this, tr( "Panning" ) ),
- m_pitchModel( 0, -100, 100, 1, this, tr( "Pitch" ) ),
-<<<<<<< HEAD
- m_effectChannelModel( 0, 0, 0, this, tr( "FX channel" ) ),
-=======
- m_pitchRangeModel( 1, 1, 24, this, tr( "Pitch range" ) ),
- m_effectChannelModel( 0, 0, NumFxChannels, this, tr( "FX channel" ) ),
->>>>>>> 3841e05... InstrumentTrack: added pitch range spinbox
- m_instrument( NULL ),
- m_soundShaping( this ),
- m_arpeggiator( this ),
- m_chordCreator( this ),
- m_piano( this )
-{
- m_effectChannelModel.setRange( 0, engine::fxMixer()->numChannels()-1, 1);
- m_baseNoteModel.setInitValue( DefaultKey );
- connect( &m_baseNoteModel, SIGNAL( dataChanged() ),
- this, SLOT( updateBaseNote() ) );
- connect( &m_pitchModel, SIGNAL( dataChanged() ),
- this, SLOT( updatePitch() ) );
-
- connect( &m_pitchRangeModel, SIGNAL( dataChanged() ),
- this, SLOT( updatePitchRange() ) );
-
- for( int i = 0; i < NumKeys; ++i )
- {
- m_notes[i] = NULL;
- m_runningMidiNotes[i] = 0;
- }
-
-
- setName( tr( "Default preset" ) );
-
-}
-
-
-
-
-InstrumentTrack::~InstrumentTrack()
-{
- // kill all running notes
- silenceAllNotes();
-
- // now we're save deleting the instrument
- delete m_instrument;
-}
-
-
-
-
-void InstrumentTrack::processAudioBuffer( sampleFrame * _buf,
- const fpp_t _frames,
- notePlayHandle * _n )
-{
- // we must not play the sound if this InstrumentTrack is muted...
- if( isMuted() || ( _n && _n->bbTrackMuted() ) )
- {
- return;
- }
-
- // if effects "went to sleep" because there was no input, wake them up
- // now
- m_audioPort.effects()->startRunning();
-
- float v_scale = (float) getVolume() / DefaultVolume;
-
- // instruments using instrument-play-handles will call this method
- // without any knowledge about notes, so they pass NULL for _n, which
- // is no problem for us since we just bypass the envelopes+LFOs
- if( _n != NULL )
- {
- m_soundShaping.processAudioBuffer( _buf, _frames, _n );
- v_scale *= ( (float) _n->getVolume() / DefaultVolume );
- }
- else
- {
- if( getVolume() < DefaultVolume &&
- m_instrument->isMidiBased() )
- {
- v_scale = 1;
- }
- }
-
- m_audioPort.setNextFxChannel( m_effectChannelModel.value() );
-
- int panning = m_panningModel.value();
- if( _n != NULL )
- {
- panning += _n->getPanning();
- panning = tLimit<int>( panning, PanningLeft, PanningRight );
- }
- engine::mixer()->bufferToPort( _buf, ( _n != NULL ) ?
- qMin<f_cnt_t>(_n->framesLeftForCurrentPeriod(), _frames ) :
- _frames,
- ( _n != NULL ) ? _n->offset() : 0,
- panningToVolumeVector( panning, v_scale ),
- &m_audioPort );
-}
-
-
-
-
-midiEvent InstrumentTrack::applyMasterKey( const midiEvent & _me )
-{
- midiEvent copy( _me );
- switch( _me.m_type )
- {
- case MidiNoteOn:
- case MidiNoteOff:
- case MidiKeyPressure:
- copy.key() = masterKey( _me.key() );
- break;
- default:
- break;
- }
- return copy;
-}
-
-
-
-
-void InstrumentTrack::processInEvent( const midiEvent & _me,
- const midiTime & _time )
-{
- engine::mixer()->lock();
-
- // in the special case this event comes from a MIDI port, the instrument
- // is MIDI based (VST plugin, Sf2Player etc.) and the user did not set
- // a dedicated MIDI output channel, directly pass the MIDI event to the
- // instrument plugin
- if( _me.isFromMidiPort() && m_instrument->isMidiBased()/* &&
- midiPort()->realOutputChannel() < 0 */ )
- {
- m_instrument->handleMidiEvent( _me, _time );
- engine::mixer()->unlock();
- return;
- }
-
- switch( _me.m_type )
- {
- // we don't send MidiNoteOn, MidiNoteOff and MidiKeyPressure
- // events to instrument as notePlayHandle will send them on its
- // own
- case MidiNoteOn:
- if( _me.velocity() > 0 )
- {
- if( m_notes[_me.key()] == NULL )
- {
- if( !configManager::inst()->value( "ui",
- "manualchannelpiano" ).toInt() )
- {
- m_piano.setKeyState(
- _me.key(), true );
- }
- // create temporary note
- note n;
- n.setKey( _me.key() );
- n.setVolume( _me.getVolume() );
-
- // create (timed) note-play-handle
- notePlayHandle * nph = new
- notePlayHandle( this,
- _time.frames(
- engine::framesPerTick() ),
- typeInfo<f_cnt_t>::max() / 2,
- n );
- if( engine::mixer()->addPlayHandle(
- nph ) )
- {
- m_notes[_me.key()] = nph;
- }
-
- emit noteOn( n );
- }
- break;
- }
-
- case MidiNoteOff:
- {
- notePlayHandle * n = m_notes[_me.key()];
- if( n != NULL )
- {
- // create dummy-note which has the same length
- // as the played note for sending it later
- // to all slots connected to signal noteOff()
- // this is for example needed by piano-roll for
- // recording notes into a pattern
- note done_note(
- midiTime( static_cast<f_cnt_t>(
- n->totalFramesPlayed() /
- engine::framesPerTick() ) ),
- 0,
- n->key(),
- n->getVolume(),
- n->getPanning() );
-
- n->noteOff();
- m_notes[_me.key()] = NULL;
-
- emit noteOff( done_note );
- }
- break;
- }
-
- case MidiKeyPressure:
- if( m_notes[_me.key()] != NULL )
- {
- m_notes[_me.key()]->setVolume( _me.getVolume() );
- }
- break;
-
- case MidiPitchBend:
- // updatePitch() is connected to
- // m_pitchModel::dataChanged() which will send out
- // MidiPitchBend events
- m_pitchModel.setValue( m_pitchModel.minValue() +
- _me.m_data.m_param[0] *
- m_pitchModel.range() / 16384 );
- break;
-
- case MidiControlChange:
- if( _me.controllerNumber() == MidiControllerSustain )
- {
- if( _me.controllerValue() > MidiMaxControllerValue/2 )
- {
- m_sustainPedalPressed = true;
- }
- else
- {
- m_sustainPedalPressed = false;
- }
- }
- if( _me.controllerNumber() == MidiControllerAllSoundOff ||
- _me.controllerNumber() == MidiControllerAllNotesOff ||
- _me.controllerNumber() == MidiControllerOmniOn ||
- _me.controllerNumber() == MidiControllerOmniOff ||
- _me.controllerNumber() == MidiControllerMonoOn ||
- _me.controllerNumber() == MidiControllerPolyOn )
- {
- silenceAllNotes();
- }
- m_instrument->handleMidiEvent( _me, _time );
- break;
-
- case MidiProgramChange:
- m_instrument->handleMidiEvent( _me, _time );
- break;
-
- case MidiMetaEvent:
- // handle special cases such as note panning
- switch( _me.m_metaEvent )
- {
- case MidiNotePanning:
- if( m_notes[_me.key()] != NULL )
- {
- m_notes[_me.key()]->setPanning( _me.getPanning() );
- }
- break;
- default:
- printf( "instrument-track: unhandled "
- "MIDI meta event: %i\n",
- _me.m_metaEvent );
- break;
- }
- break;
-
- default:
- if( !m_instrument->handleMidiEvent( _me, _time ) )
- {
- printf( "instrument-track: unhandled "
- "MIDI event %d\n", _me.m_type );
- }
- break;
- }
- engine::mixer()->unlock();
-}
-
-
-
-
-void InstrumentTrack::processOutEvent( const midiEvent & _me,
- const midiTime & _time )
-{
- int k;
-
- switch( _me.m_type )
- {
- case MidiNoteOn:
- if( !configManager::inst()->value( "ui",
- "manualchannelpiano" ).toInt() )
- {
- m_piano.setKeyState( _me.key(), true );
- }
- if( !configManager::inst()->value( "ui",
- "disablechannelactivityindicators" ).toInt() )
- {
- if( m_notes[_me.key()] == NULL )
- {
- emit newNote();
- }
- }
- k = masterKey( _me.key() );
- if( k >= 0 && k < NumKeys )
- {
- if( m_runningMidiNotes[k] > 0 )
- {
- m_instrument->handleMidiEvent(
- midiEvent( MidiNoteOff, midiPort()->realOutputChannel(), k, 0 ),
- _time );
- }
- ++m_runningMidiNotes[k];
- m_instrument->handleMidiEvent(
- midiEvent( MidiNoteOn, midiPort()->realOutputChannel(), k,
- _me.velocity() ), _time );
- }
- break;
-
- case MidiNoteOff:
- if( !configManager::inst()->value( "ui",
- "manualchannelpiano" ).toInt() )
- {
- m_piano.setKeyState( _me.key(), false );
- }
- k = masterKey( _me.key() );
- if( k >= 0 && k < NumKeys &&
- --m_runningMidiNotes[k] <= 0 )
- {
- m_runningMidiNotes[k] = qMax( 0, m_runningMidiNotes[k] );
- m_instrument->handleMidiEvent(
- midiEvent( MidiNoteOff, midiPort()->realOutputChannel(), k, 0 ),
- _time );
- }
- break;
-
- default:
- if( m_instrument != NULL )
- {
- m_instrument->handleMidiEvent(
- applyMasterKey( _me ),
- _time );
- }
- break;
- }
-
- // if appropriate, midi-port does futher routing
- m_midiPort.processOutEvent( _me, _time );
-}
-
-
-
-
-void InstrumentTrack::silenceAllNotes()
-{
- engine::mixer()->lock();
- for( int i = 0; i < NumKeys; ++i )
- {
- m_notes[i] = NULL;
- m_runningMidiNotes[i] = 0;
- }
-
- // invalidate all NotePlayHandles linked to this track
- m_processHandles.clear();
- engine::mixer()->removePlayHandles( this );
- engine::mixer()->unlock();
-}
-
-
-
-
-f_cnt_t InstrumentTrack::beatLen( notePlayHandle * _n ) const
-{
- if( m_instrument != NULL )
- {
- const f_cnt_t len = m_instrument->beatLen( _n );
- if( len > 0 )
- {
- return len;
- }
- }
- return m_soundShaping.envFrames();
-}
-
-
-
-
-void InstrumentTrack::playNote( notePlayHandle * _n,
- sampleFrame * _working_buffer )
-{
- // arpeggio- and chord-widget has to do its work -> adding sub-notes
- // for chords/arpeggios
- m_chordCreator.processNote( _n );
- m_arpeggiator.processNote( _n );
-
- if( !_n->isArpeggioBaseNote() && m_instrument != NULL )
- {
- // all is done, so now lets play the note!
- m_instrument->playNote( _n, _working_buffer );
- }
-}
-
-
-
-
-QString InstrumentTrack::instrumentName() const
-{
- if( m_instrument != NULL )
- {
- return m_instrument->displayName();
- }
- return QString::null;
-}
-
-
-
-
-void InstrumentTrack::deleteNotePluginData( notePlayHandle * _n )
-{
- if( m_instrument != NULL )
- {
- m_instrument->deleteNotePluginData( _n );
- }
-
- // Notes deleted when keys still pressed
- if( m_notes[_n->key()] == _n )
- {
- note done_note( midiTime( static_cast<f_cnt_t>(
- _n->totalFramesPlayed() /
- engine::framesPerTick() ) ),
- 0, _n->key(),
- _n->getVolume(), _n->getPanning() );
- _n->noteOff();
- m_notes[_n->key()] = NULL;
- emit noteOff( done_note );
- }
-}
-
-
-
-
-void InstrumentTrack::setName( const QString & _new_name )
-{
- // when changing name of track, also change name of those patterns,
- // which have the same name as the instrument-track
- for( int i = 0; i < numOfTCOs(); ++i )
- {
- pattern * p = dynamic_cast<pattern *>( getTCO( i ) );
- if( ( p != NULL && p->name() == name() ) || p->name() == "" )
- {
- p->setName( _new_name );
- }
- }
-
- track::setName( _new_name );
- m_midiPort.setName( name() );
- m_audioPort.setName( name() );
-
- emit nameChanged();
-}
-
-
-
-
-
-
-void InstrumentTrack::updateBaseNote()
-{
- engine::mixer()->lock();
- for( NotePlayHandleList::Iterator it = m_processHandles.begin();
- it != m_processHandles.end(); ++it )
- {
- ( *it )->updateFrequency();
- }
- engine::mixer()->unlock();
-}
-
-
-
-
-void InstrumentTrack::updatePitch()
-{
- updateBaseNote();
- processOutEvent( midiEvent( MidiPitchBend,
- midiPort()->realOutputChannel(),
- midiPitch() ), 0 );
-}
-
-
-
-
-void InstrumentTrack::updatePitchRange()
-{
- const int r = m_pitchRangeModel.value();
- m_pitchModel.setRange( -100 * r, 100 * r );
-}
-
-
-
-
-int InstrumentTrack::masterKey( int _midi_key ) const
-{
- int key = m_baseNoteModel.value() - engine::getSong()->masterPitch();
- return tLimit<int>( _midi_key - ( key - DefaultKey ), 0, NumKeys );
-}
-
-
-
-
-void InstrumentTrack::removeMidiPortNode( multimediaProject & _mmp )
-{
- QDomNodeList n = _mmp.elementsByTagName( "midiport" );
- n.item( 0 ).parentNode().removeChild( n.item( 0 ) );
-}
-
-
-
-
-bool InstrumentTrack::play( const midiTime & _start, const fpp_t _frames,
- const f_cnt_t _offset, int _tco_num )
-{
- const float frames_per_tick = engine::framesPerTick();
-
- tcoVector tcos;
- bbTrack * bb_track = NULL;
- if( _tco_num >= 0 )
- {
- trackContentObject * tco = getTCO( _tco_num );
- tcos.push_back( tco );
- bb_track = bbTrack::findBBTrack( _tco_num );
- }
- else
- {
- getTCOsInRange( tcos, _start, _start + static_cast<int>(
- _frames / frames_per_tick ) );
- }
-
- // Handle automation: detuning
- for( NotePlayHandleList::Iterator it = m_processHandles.begin();
- it != m_processHandles.end(); ++it )
- {
- ( *it )->processMidiTime( _start );
- }
-
- if ( tcos.size() == 0 )
- {
- return false;
- }
-
- bool played_a_note = false; // will be return variable
-
- for( tcoVector::Iterator it = tcos.begin(); it != tcos.end(); ++it )
- {
- pattern * p = dynamic_cast<pattern *>( *it );
- // everything which is not a pattern or muted won't be played
- if( p == NULL || ( *it )->isMuted() )
- {
- continue;
- }
- midiTime cur_start = _start;
- if( _tco_num < 0 )
- {
- cur_start -= p->startPosition();
- }
- if( p->isFrozen() && !engine::getSong()->isExporting() )
- {
- if( cur_start > 0 )
- {
- continue;
- }
-
- SamplePlayHandle* handle = new SamplePlayHandle( p );
- handle->setBBTrack( bb_track );
- handle->setOffset( _offset );
- // send it to the mixer
- engine::mixer()->addPlayHandle( handle );
- played_a_note = true;
- continue;
- }
-
- // get all notes from the given pattern...
- const NoteVector & notes = p->notes();
- // ...and set our index to zero
- NoteVector::ConstIterator nit = notes.begin();
-#if LMMS_SINGERBOT_SUPPORT
- int note_idx = 0;
-#endif
-
- // very effective algorithm for playing notes that are
- // posated within the current sample-frame
-
-
- if( cur_start > 0 )
- {
- // skip notes which are posated before start-tact
- while( nit != notes.end() && ( *nit )->pos() < cur_start )
- {
-#if LMMS_SINGERBOT_SUPPORT
- if( ( *nit )->length() != 0 )
- {
- ++note_idx;
- }
-#endif
- ++nit;
- }
- }
-
- note * cur_note;
- while( nit != notes.end() &&
- ( cur_note = *nit )->pos() == cur_start )
- {
- if( cur_note->length() != 0 )
- {
- const f_cnt_t note_frames =
- cur_note->length().frames(
- frames_per_tick );
-
- notePlayHandle * note_play_handle =
- new notePlayHandle( this, _offset,
- note_frames,
- *cur_note );
- note_play_handle->setBBTrack( bb_track );
- // are we playing global song?
- if( _tco_num < 0 )
- {
- // then set song-global offset of pattern in order to
- // properly perform the note detuning
- note_play_handle->setSongGlobalParentOffset( p->startPosition() );
- }
-
-#if LMMS_SINGERBOT_SUPPORT
- note_play_handle->setPatternIndex( note_idx );
-#endif
- engine::mixer()->addPlayHandle(
- note_play_handle );
- played_a_note = true;
-#if LMMS_SINGERBOT_SUPPORT
- ++note_idx;
-#endif
- }
- ++nit;
- }
- }
- return played_a_note;
-}
-
-
-
-
-trackContentObject * InstrumentTrack::createTCO( const midiTime & )
-{
- return new pattern( this );
-}
-
-
-
-
-trackView * InstrumentTrack::createView( TrackContainerView* tcv )
-{
- return new InstrumentTrackView( this, tcv );
-}
-
-
-
-
-void InstrumentTrack::saveTrackSpecificSettings( QDomDocument & _doc,
- QDomElement & _this )
-{
- m_volumeModel.saveSettings( _doc, _this, "vol" );
- m_panningModel.saveSettings( _doc, _this, "pan" );
- m_pitchModel.saveSettings( _doc, _this, "pitch" );
- m_pitchRangeModel.saveSettings( _doc, _this, "pitchrange" );
-
- m_effectChannelModel.saveSettings( _doc, _this, "fxch" );
- m_baseNoteModel.saveSettings( _doc, _this, "basenote" );
-
- if( m_instrument != NULL )
- {
- QDomElement i = _doc.createElement( "instrument" );
- i.setAttribute( "name", m_instrument->descriptor()->name );
- m_instrument->saveState( _doc, i );
- _this.appendChild( i );
- }
- m_soundShaping.saveState( _doc, _this );
- m_chordCreator.saveState( _doc, _this );
- m_arpeggiator.saveState( _doc, _this );
- m_midiPort.saveState( _doc, _this );
- m_audioPort.effects()->saveState( _doc, _this );
-}
-
-
-
-
-void InstrumentTrack::loadTrackSpecificSettings( const QDomElement & _this )
-{
- silenceAllNotes();
-
- engine::mixer()->lock();
-
- m_volumeModel.loadSettings( _this, "vol" );
-
- // compat-hacks - move to mmp::upgrade
- if( _this.hasAttribute( "surpos" ) || _this.hasAttribute( "surpos-x" )
- || !_this.firstChildElement( "automationpattern" ).
- firstChildElement( "surpos-x" ).isNull() )
- {
- surroundAreaModel m( this, this );
- m.loadSettings( _this, "surpos" );
- m_panningModel.setValue( m.x() * 100 / SURROUND_AREA_SIZE );
- }
- else
- {
- m_panningModel.loadSettings( _this, "pan" );
- }
-
- m_pitchModel.loadSettings( _this, "pitch" );
-<<<<<<< HEAD
- m_effectChannelModel.setRange( 0, INT_MAX );
-=======
- m_pitchRangeModel.loadSettings( _this, "pitchrange" );
->>>>>>> 3841e05... InstrumentTrack: added pitch range spinbox
- m_effectChannelModel.loadSettings( _this, "fxch" );
-
- if( _this.hasAttribute( "baseoct" ) )
- {
- // TODO: move this compat code to mmp.cpp -> upgrade()
- m_baseNoteModel.setInitValue( _this.
- attribute( "baseoct" ).toInt()
- * KeysPerOctave
- + _this.attribute( "basetone" ).toInt() );
- }
- else
- {
- m_baseNoteModel.loadSettings( _this, "basenote" );
- }
-
- // clear effect-chain just in case we load an old preset without FX-data
- m_audioPort.effects()->clear();
-
- QDomNode node = _this.firstChild();
- while( !node.isNull() )
- {
- if( node.isElement() )
- {
- if( m_soundShaping.nodeName() == node.nodeName() )
- {
- m_soundShaping.restoreState( node.toElement() );
- }
- else if( m_chordCreator.nodeName() == node.nodeName() )
- {
- m_chordCreator.restoreState( node.toElement() );
- }
- else if( m_arpeggiator.nodeName() == node.nodeName() )
- {
- m_arpeggiator.restoreState( node.toElement() );
- }
- else if( m_midiPort.nodeName() == node.nodeName() )
- {
- m_midiPort.restoreState( node.toElement() );
- }
- else if( m_audioPort.effects()->nodeName() == node.nodeName() )
- {
- m_audioPort.effects()->restoreState( node.toElement() );
- }
- else if( node.nodeName() == "instrument" )
- {
- delete m_instrument;
- m_instrument = NULL;
- m_instrument = Instrument::instantiate(
- node.toElement().attribute( "name" ),
- this );
- m_instrument->restoreState(
- node.firstChildElement() );
- emit instrumentChanged();
- }
- // compat code - if node-name doesn't match any known
- // one, we assume that it is an instrument-plugin
- // which we'll try to load
- else if( AutomationPattern::classNodeName() != node.nodeName() &&
- ControllerConnection::classNodeName() != node.nodeName() &&
- !node.toElement().hasAttribute( "id" ) )
- {
- delete m_instrument;
- m_instrument = NULL;
- m_instrument = Instrument::instantiate(
- node.nodeName(), this );
- if( m_instrument->nodeName() ==
- node.nodeName() )
- {
- m_instrument->restoreState(
- node.toElement() );
- }
- emit instrumentChanged();
- }
- }
- node = node.nextSibling();
- }
- engine::mixer()->unlock();
-}
-
-
-
-
-Instrument * InstrumentTrack::loadInstrument( const QString & _plugin_name )
-{
- silenceAllNotes();
-
- engine::mixer()->lock();
- delete m_instrument;
- m_instrument = Instrument::instantiate( _plugin_name, this );
- engine::mixer()->unlock();
-
- setName( m_instrument->displayName() );
- emit instrumentChanged();
-
- return m_instrument;
-}
-
-
-
-
-
-// #### ITV:
-
-
-QQueue<InstrumentTrackWindow *> InstrumentTrackView::s_windowCache;
-
-
-
-InstrumentTrackView::InstrumentTrackView( InstrumentTrack * _it, TrackContainerView* tcv ) :
- trackView( _it, tcv ),
- m_window( NULL ),
- m_lastPos( -1, -1 )
-{
- setAcceptDrops( true );
- setFixedHeight( 32 );
-
- m_tlb = new trackLabelButton( this, getTrackSettingsWidget() );
- m_tlb->setCheckable( true );
- m_tlb->setIcon( embed::getIconPixmap( "instrument_track" ) );
- m_tlb->move( 3, 1 );
- m_tlb->show();
-
- connect( m_tlb, SIGNAL( toggled( bool ) ),
- this, SLOT( toggleInstrumentWindow( bool ) ) );
-
- connect( _it, SIGNAL( nameChanged() ),
- m_tlb, SLOT( update() ) );
-
- // creation of widgets for track-settings-widget
- int widgetWidth;
- if( configManager::inst()->value( "ui",
- "compacttrackbuttons" ).toInt() )
- {
- widgetWidth = DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT;
- }
- else
- {
- widgetWidth = DEFAULT_SETTINGS_WIDGET_WIDTH;
- }
-
- m_volumeKnob = new knob( knobSmall_17, getTrackSettingsWidget(),
- tr( "Volume" ) );
- m_volumeKnob->setVolumeKnob( true );
- m_volumeKnob->setModel( &_it->m_volumeModel );
- m_volumeKnob->setHintText( tr( "Volume:" ) + " ", "%" );
- m_volumeKnob->move( widgetWidth-2*24, 4 );
- m_volumeKnob->setLabel( tr( "VOL" ) );
- m_volumeKnob->show();
- m_volumeKnob->setWhatsThis( tr( volume_help ) );
-
- m_panningKnob = new knob( knobSmall_17, getTrackSettingsWidget(),
- tr( "Panning" ) );
- m_panningKnob->setModel( &_it->m_panningModel );
- m_panningKnob->setHintText( tr( "Panning:" ) + " ", "%" );
- m_panningKnob->move( widgetWidth-24, 4 );
- m_panningKnob->setLabel( tr( "PAN" ) );
- m_panningKnob->show();
-
- m_midiMenu = new QMenu( tr( "MIDI" ), this );
-
- // sequenced MIDI?
- if( !engine::mixer()->midiClient()->isRaw() )
- {
- _it->m_midiPort.m_readablePortsMenu = new MidiPortMenu(
- MidiPort::Input );
- _it->m_midiPort.m_writablePortsMenu = new MidiPortMenu(
- MidiPort::Output );
- _it->m_midiPort.m_readablePortsMenu->setModel(
- &_it->m_midiPort );
- _it->m_midiPort.m_writablePortsMenu->setModel(
- &_it->m_midiPort );
- m_midiInputAction = m_midiMenu->addMenu(
- _it->m_midiPort.m_readablePortsMenu );
- m_midiOutputAction = m_midiMenu->addMenu(
- _it->m_midiPort.m_writablePortsMenu );
- }
- else
- {
- m_midiInputAction = m_midiMenu->addAction( "" );
- m_midiOutputAction = m_midiMenu->addAction( "" );
- m_midiInputAction->setCheckable( true );
- m_midiOutputAction->setCheckable( true );
- connect( m_midiInputAction, SIGNAL( changed() ), this,
- SLOT( midiInSelected() ) );
- connect( m_midiOutputAction, SIGNAL( changed() ), this,
- SLOT( midiOutSelected() ) );
- connect( &_it->m_midiPort, SIGNAL( modeChanged() ),
- this, SLOT( midiConfigChanged() ) );
- }
-
- m_midiInputAction->setText( tr( "Input" ) );
- m_midiOutputAction->setText( tr( "Output" ) );
-
- m_activityIndicator = new fadeButton( QColor( 56, 60, 72 ),
- QColor( 64, 255, 16 ),
- getTrackSettingsWidget() );
- m_activityIndicator->setGeometry(
- widgetWidth-2*24-11, 2, 8, 28 );
- m_activityIndicator->show();
- connect( m_activityIndicator, SIGNAL( pressed() ),
- this, SLOT( activityIndicatorPressed() ) );
- connect( m_activityIndicator, SIGNAL( released() ),
- this, SLOT( activityIndicatorReleased() ) );
- connect( _it, SIGNAL( newNote() ),
- m_activityIndicator, SLOT( activate() ) );
-
-
- setModel( _it );
-}
-
-
-
-
-InstrumentTrackView::~InstrumentTrackView()
-{
- freeInstrumentTrackWindow();
-
- delete model()->m_midiPort.m_readablePortsMenu;
- delete model()->m_midiPort.m_writablePortsMenu;
-}
-
-
-
-
-InstrumentTrackWindow * InstrumentTrackView::topLevelInstrumentTrackWindow()
-{
- InstrumentTrackWindow * w = NULL;
- foreach( QMdiSubWindow * sw,
- engine::mainWindow()->workspace()->subWindowList(
- QMdiArea::ActivationHistoryOrder ) )
- {
- if( sw->isVisible() && sw->widget()->inherits( "InstrumentTrackWindow" ) )
- {
- w = qobject_cast<InstrumentTrackWindow *>( sw->widget() );
- }
- }
-
- return w;
-}
-
-
-
-// TODO: Add windows to free list on freeInstrumentTrackWindow.
-// But, don't NULL m_window or disconnect signals. This will allow windows
-// that are being show/hidden frequently to stay connected.
-void InstrumentTrackView::freeInstrumentTrackWindow()
-{
- if( m_window != NULL )
- {
- m_lastPos = m_window->parentWidget()->pos();
-
- if( configManager::inst()->value( "ui",
- "oneinstrumenttrackwindow" ).toInt() ||
- s_windowCache.count() < INSTRUMENT_WINDOW_CACHE_SIZE )
- {
- model()->setHook( NULL );
- m_window->setInstrumentTrackView( NULL );
- m_window->parentWidget()->hide();
- //m_window->setModel(
- // engine::dummyTrackContainer()->
- // dummyInstrumentTrack() );
- m_window->updateInstrumentView();
- s_windowCache << m_window;
- }
- else
- {
- delete m_window;
- }
-
- m_window = NULL;
- }
-}
-
-
-
-
-void InstrumentTrackView::cleanupWindowCache()
-{
- while( !s_windowCache.isEmpty() )
- {
- delete s_windowCache.dequeue();
- }
-}
-
-
-
-
-InstrumentTrackWindow * InstrumentTrackView::getInstrumentTrackWindow()
-{
- if( m_window != NULL )
- {
- }
- else if( !s_windowCache.isEmpty() )
- {
- m_window = s_windowCache.dequeue();
-
- m_window->setInstrumentTrackView( this );
- m_window->setModel( model() );
- m_window->updateInstrumentView();
- model()->setHook( m_window );
-
- if( configManager::inst()->
- value( "ui", "oneinstrumenttrackwindow" ).toInt() )
- {
- s_windowCache << m_window;
- }
- else if( m_lastPos.x() > 0 || m_lastPos.y() > 0 )
- {
- m_window->parentWidget()->move( m_lastPos );
- }
- }
- else
- {
- m_window = new InstrumentTrackWindow( this );
- if( configManager::inst()->
- value( "ui", "oneinstrumenttrackwindow" ).toInt() )
- {
- // first time, an InstrumentTrackWindow is opened
- s_windowCache << m_window;
- }
- }
-
- return m_window;
-}
-
-
-
-
-void InstrumentTrackView::dragEnterEvent( QDragEnterEvent * _dee )
-{
- InstrumentTrackWindow::dragEnterEventGeneric( _dee );
- if( !_dee->isAccepted() )
- {
- trackView::dragEnterEvent( _dee );
- }
-}
-
-
-
-
-void InstrumentTrackView::dropEvent( QDropEvent * _de )
-{
- getInstrumentTrackWindow()->dropEvent( _de );
- trackView::dropEvent( _de );
-}
-
-
-
-
-void InstrumentTrackView::toggleInstrumentWindow( bool _on )
-{
- getInstrumentTrackWindow()->toggleVisibility( _on );
-
- if( !_on )
- {
- freeInstrumentTrackWindow();
- }
-}
-
-
-
-
-void InstrumentTrackView::activityIndicatorPressed()
-{
- model()->processInEvent(
- midiEvent( MidiNoteOn, 0, DefaultKey, MidiMaxVelocity ),
- midiTime() );
-}
-
-
-
-
-void InstrumentTrackView::activityIndicatorReleased()
-{
- model()->processInEvent( midiEvent( MidiNoteOff, 0, DefaultKey, 0 ),
- midiTime() );
-}
-
-
-
-
-
-void InstrumentTrackView::midiInSelected()
-{
- if( model() )
- {
- model()->m_midiPort.setReadable(
- m_midiInputAction->isChecked() );
- }
-}
-
-
-
-
-void InstrumentTrackView::midiOutSelected()
-{
- if( model() )
- {
- model()->m_midiPort.setWritable(
- m_midiOutputAction->isChecked() );
- }
-}
-
-
-
-
-void InstrumentTrackView::midiConfigChanged()
-{
- m_midiInputAction->setChecked( model()->m_midiPort.isReadable() );
- m_midiOutputAction->setChecked( model()->m_midiPort.isWritable() );
-}
-
-
-
-
-
-
-class fxLineLcdSpinBox : public lcdSpinBox
-{
- public:
- fxLineLcdSpinBox( int _num_digits, QWidget * _parent,
- const QString & _name ) :
- lcdSpinBox( _num_digits, _parent, _name ) {}
-
- protected:
- virtual void mouseDoubleClickEvent ( QMouseEvent * _me )
- {
- engine::fxMixerView()->setCurrentFxLine( model()->value() );
-
- engine::fxMixerView()->show();// show fxMixer window
- engine::fxMixerView()->setFocus();// set focus to fxMixer window
- //engine::getFxMixerView()->raise();
- }
-};
-
-
-
-// #### ITW:
-InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) :
- QWidget(),
- ModelView( NULL, this ),
- m_track( _itv->model() ),
- m_itv( _itv ),
- m_instrumentView( NULL )
-{
- setAcceptDrops( true );
-
- // init own layout + widgets
- setFocusPolicy( Qt::StrongFocus );
- QVBoxLayout * vlayout = new QVBoxLayout( this );
- vlayout->setMargin( 0 );
- vlayout->setSpacing( 0 );
-
- tabWidget* generalSettingsWidget = new tabWidget( tr( "GENERAL SETTINGS" ), this );
-
- QVBoxLayout* generalSettingsLayout = new QVBoxLayout( generalSettingsWidget );
-
- generalSettingsLayout->setContentsMargins( 8, 18, 8, 8 );
- generalSettingsLayout->setSpacing( 6 );
-
- // setup line edit for changing instrument track name
- m_nameLineEdit = new QLineEdit;
- m_nameLineEdit->setFont( pointSize<8>( m_nameLineEdit->font() ) );
- connect( m_nameLineEdit, SIGNAL( textChanged( const QString & ) ),
- this, SLOT( textChanged( const QString & ) ) );
-
- generalSettingsLayout->addWidget( m_nameLineEdit );
-
- QHBoxLayout* basicControlsLayout = new QHBoxLayout;
- basicControlsLayout->setSpacing( 3 );
-
- // set up volume knob
- m_volumeKnob = new knob( knobBright_26, NULL, tr( "Instrument volume" ) );
- m_volumeKnob->setVolumeKnob( true );
- m_volumeKnob->setHintText( tr( "Volume:" ) + " ", "%" );
- m_volumeKnob->setLabel( tr( "VOL" ) );
-
- m_volumeKnob->setWhatsThis( tr( volume_help ) );
-
- basicControlsLayout->addWidget( m_volumeKnob );
-
- // set up panning knob
- m_panningKnob = new knob( knobBright_26, NULL, tr( "Panning" ) );
- m_panningKnob->setHintText( tr( "Panning:" ) + " ", "" );
- m_panningKnob->setLabel( tr( "PAN" ) );
-
- basicControlsLayout->addWidget( m_panningKnob );
- basicControlsLayout->addStretch();
-
- // set up pitch knob
- m_pitchKnob = new knob( knobBright_26, NULL, tr( "Pitch" ) );
- m_pitchKnob->setHintText( tr( "Pitch:" ) + " ", " " + tr( "cents" ) );
- m_pitchKnob->setLabel( tr( "PITCH" ) );
-
- basicControlsLayout->addWidget( m_pitchKnob );
-
- // set up pitch range knob
- m_pitchRangeSpinBox= new lcdSpinBox( 2, NULL, tr( "Pitch range (semitones)" ) );
- m_pitchRangeSpinBox->setLabel( tr( "RANGE" ) );
-
- basicControlsLayout->addWidget( m_pitchRangeSpinBox );
- basicControlsLayout->addStretch();
-
- // setup spinbox for selecting FX-channel
- m_effectChannelNumber = new fxLineLcdSpinBox( 2, NULL, tr( "FX channel" ) );
- m_effectChannelNumber->setLabel( tr( "FX CHNL" ) );
-
- basicControlsLayout->addWidget( m_effectChannelNumber );
-
- basicControlsLayout->addStretch();
-
-
- QPushButton* saveSettingsBtn = new QPushButton( embed::getIconPixmap( "project_save" ), QString() );
-
- connect( saveSettingsBtn, SIGNAL( clicked() ), this, SLOT( saveSettingsBtnClicked() ) );
-
- toolTip::add( saveSettingsBtn, tr( "Save current channel settings in a preset-file" ) );
- saveSettingsBtn->setWhatsThis(
- tr( "Click here, if you want to save current channel settings "
- "in a preset-file. Later you can load this preset by "
- "double-clicking it in the preset-browser." ) );
-
- basicControlsLayout->addWidget( saveSettingsBtn );
-
- generalSettingsLayout->addLayout( basicControlsLayout );
-
-
- m_tabWidget = new tabWidget( "", this );
- m_tabWidget->setFixedHeight( INSTRUMENT_HEIGHT + 10 );
-
-
- // create tab-widgets
- m_ssView = new InstrumentSoundShapingView( m_tabWidget );
- QWidget* instrumentFunctions = new QWidget( m_tabWidget );
- m_chordView = new ChordCreatorView( &m_track->m_chordCreator, instrumentFunctions );
- m_arpView= new ArpeggiatorView( &m_track->m_arpeggiator, instrumentFunctions );
- m_midiView = new InstrumentMidiIOView( m_tabWidget );
- m_effectView = new EffectRackView( m_track->m_audioPort.effects(), m_tabWidget );
-
- m_tabWidget->addTab( m_ssView, tr( "ENV/LFO" ), 1 );
- m_tabWidget->addTab( instrumentFunctions, tr( "FUNC" ), 2 );
- m_tabWidget->addTab( m_effectView, tr( "FX" ), 3 );
- m_tabWidget->addTab( m_midiView, tr( "MIDI" ), 4 );
-
- // setup piano-widget
- m_pianoView = new PianoView( this );
- m_pianoView->setFixedSize( INSTRUMENT_WIDTH, PIANO_HEIGHT );
-
- vlayout->addWidget( generalSettingsWidget );
- vlayout->addWidget( m_tabWidget );
- vlayout->addWidget( m_pianoView );
-
-
- setModel( _itv->model() );
-
- updateInstrumentView();
-
- setFixedWidth( INSTRUMENT_WIDTH );
- resize( sizeHint() );
-
- QMdiSubWindow * subWin = engine::mainWindow()->workspace()->addSubWindow( this );
- Qt::WindowFlags flags = subWin->windowFlags();
- flags |= Qt::MSWindowsFixedSizeDialogHint;
- flags &= ~Qt::WindowMaximizeButtonHint;
- subWin->setWindowFlags( flags );
- subWin->setWindowIcon( embed::getIconPixmap( "instrument_track" ) );
- subWin->setFixedSize( subWin->size() );
- subWin->hide();
-}
-
-
-
-
-InstrumentTrackWindow::~InstrumentTrackWindow()
-{
- InstrumentTrackView::s_windowCache.removeAll( this );
-
- delete m_instrumentView;
-
- if( engine::mainWindow()->workspace() )
- {
- parentWidget()->hide();
- parentWidget()->deleteLater();
- }
-}
-
-
-
-
-void InstrumentTrackWindow::setInstrumentTrackView( InstrumentTrackView * _tv )
-{
- if( m_itv && _tv )
- {
- m_itv->m_tlb->setChecked( false );
- }
- m_itv = _tv;
-}
-
-
-
-
-void InstrumentTrackWindow::modelChanged()
-{
- m_track = castModel<InstrumentTrack>();
-
- m_nameLineEdit->setText( m_track->name() );
-
- m_track->disconnect( SIGNAL( nameChanged() ), this );
- m_track->disconnect( SIGNAL( instrumentChanged() ), this );
-
- connect( m_track, SIGNAL( nameChanged() ),
- this, SLOT( updateName() ) );
- connect( m_track, SIGNAL( instrumentChanged() ),
- this, SLOT( updateInstrumentView() ) );
-
- m_volumeKnob->setModel( &m_track->m_volumeModel );
- m_panningKnob->setModel( &m_track->m_panningModel );
- m_effectChannelNumber->setModel( &m_track->m_effectChannelModel );
- m_pianoView->setModel( &m_track->m_piano );
-
- if( m_track->instrument() && m_track->instrument()->isBendable() )
- {
- m_pitchKnob->setModel( &m_track->m_pitchModel );
- m_pitchRangeSpinBox->setModel( &m_track->m_pitchRangeModel );
- m_pitchKnob->show();
- }
- else
- {
- m_pitchKnob->hide();
- m_pitchKnob->setModel( NULL );
- }
-
- m_ssView->setModel( &m_track->m_soundShaping );
- m_chordView->setModel( &m_track->m_chordCreator );
- m_arpView->setModel( &m_track->m_arpeggiator );
- m_midiView->setModel( &m_track->m_midiPort );
- m_effectView->setModel( m_track->m_audioPort.effects() );
- updateName();
-}
-
-
-
-
-void InstrumentTrackWindow::saveSettingsBtnClicked()
-{
- QFileDialog sfd( this, tr( "Save preset" ), "",
- tr( "XML preset file (*.xpf)" ) );
-
- QString preset_root = configManager::inst()->userPresetsDir();
- if( !QDir( preset_root ).exists() )
- {
- QDir().mkdir( preset_root );
- }
- if( !QDir( preset_root + m_track->instrumentName() ).exists() )
- {
- QDir( preset_root ).mkdir( m_track->instrumentName() );
- }
-
- sfd.setAcceptMode( QFileDialog::AcceptSave );
- sfd.setDirectory( preset_root + m_track->instrumentName() );
- sfd.setFileMode( QFileDialog::AnyFile );
- if( sfd.exec () == QDialog::Accepted &&
- !sfd.selectedFiles().isEmpty() && sfd.selectedFiles()[0] != ""
- )
- {
- multimediaProject mmp(
- multimediaProject::InstrumentTrackSettings );
- m_track->setSimpleSerializing();
- m_track->saveSettings( mmp, mmp.content() );
- QString f = sfd.selectedFiles()[0];
- mmp.writeFile( f );
- }
-}
-
-
-
-
-
-void InstrumentTrackWindow::updateName()
-{
- setWindowTitle( m_track->name() );
-
- if( m_nameLineEdit->text() != m_track->name() )
- {
- m_nameLineEdit->setText( m_track->name() );
- }
-}
-
-
-
-
-
-void InstrumentTrackWindow::updateInstrumentView()
-{
- delete m_instrumentView;
- if( m_track->m_instrument != NULL )
- {
- m_instrumentView = m_track->m_instrument->createView(
- m_tabWidget );
- m_tabWidget->addTab( m_instrumentView, tr( "PLUGIN" ), 0 );
- m_tabWidget->setActiveTab( 0 );
-
- modelChanged(); // Get the instrument window to refresh
- m_track->dataChanged(); // Get the text on the trackButton to change
- }
-}
-
-
-
-
-void InstrumentTrackWindow::textChanged( const QString & _new_name )
-{
- m_track->setName( _new_name );
- engine::getSong()->setModified();
-}
-
-
-
-
-void InstrumentTrackWindow::toggleVisibility( bool _on )
-{
-
- if( _on )
- {
- show();
- parentWidget()->show();
- parentWidget()->raise();
- }
- else
- {
- parentWidget()->hide();
- }
-}
-
-
-
-
-void InstrumentTrackWindow::closeEvent( QCloseEvent * _ce )
-{
- _ce->ignore();
- if( engine::mainWindow()->workspace() )
- {
- parentWidget()->hide();
- }
- else
- {
- hide();
- }
- m_itv->m_tlb->setFocus();
- m_itv->m_tlb->setChecked( false );
-}
-
-
-
-
-void InstrumentTrackWindow::focusInEvent( QFocusEvent * )
-{
- m_pianoView->setFocus();
-}
-
-
-
-
-void InstrumentTrackWindow::dragEnterEventGeneric( QDragEnterEvent * _dee )
-{
- stringPairDrag::processDragEnterEvent( _dee, "instrument,presetfile,"
- "pluginpresetfile" );
-}
-
-
-
-
-void InstrumentTrackWindow::dragEnterEvent( QDragEnterEvent * _dee )
-{
- dragEnterEventGeneric( _dee );
-}
-
-
-
-
-void InstrumentTrackWindow::dropEvent( QDropEvent * _de )
-{
- QString type = stringPairDrag::decodeKey( _de );
- QString value = stringPairDrag::decodeValue( _de );
- if( type == "instrument" )
- {
- m_track->loadInstrument( value );
- engine::getSong()->setModified();
- _de->accept();
- }
- else if( type == "presetfile" )
- {
- multimediaProject mmp( value );
- InstrumentTrack::removeMidiPortNode( mmp );
- m_track->setSimpleSerializing();
- m_track->loadSettings( mmp.content().toElement() );
- engine::getSong()->setModified();
- _de->accept();
- }
- else if( type == "pluginpresetfile" )
- {
- const QString ext = fileItem::extension( value );
- Instrument * i = m_track->instrument();
- if( !i->descriptor()->supportsFileType( ext ) )
- {
- i = m_track->loadInstrument(
- engine::pluginFileHandling()[ext] );
- }
- i->loadFile( value );
- _de->accept();
- }
-}
-
-
-
-
-void InstrumentTrackWindow::saveSettings( QDomDocument & _doc,
- QDomElement & _this )
-{
- _this.setAttribute( "tab", m_tabWidget->activeTab() );
- MainWindow::saveWidgetState( this, _this );
-}
-
-
-
-
-void InstrumentTrackWindow::loadSettings( const QDomElement & _this )
-{
- m_tabWidget->setActiveTab( _this.attribute( "tab" ).toInt() );
- MainWindow::restoreWidgetState( this, _this );
- if( isVisible() )
- {
- m_itv->m_tlb->setChecked( true );
- }
-}
-
-
-
-
-#include "moc_InstrumentTrack.cxx"
-
-
diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp
new file mode 100644
index 0000000..1760b1f
--- /dev/null
+++ b/src/tracks/Pattern.cpp
@@ -0,0 +1,1153 @@
+/*
+ * pattern.cpp - implementation of class pattern which holds notes
+ *
+ * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
+ * Copyright (c) 2005-2007 Danny McRae <khjklujn/at/yahoo.com>
+ *
+ * This file is part of LMMS - http://lmms.io
+ *
+ * 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 (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <QtXml/QDomElement>
+#include <QtCore/QTimer>
+#include <QtGui/QMenu>
+#include <QtGui/QMessageBox>
+#include <QtGui/QMouseEvent>
+#include <QtGui/QPainter>
+#include <QtGui/QProgressBar>
+#include <QtGui/QPushButton>
+#include <QtAlgorithms>
+
+#include "Pattern.h"
+#include "InstrumentTrack.h"
+#include "templates.h"
+#include "gui_templates.h"
+#include "embed.h"
+#include "engine.h"
+#include "PianoRoll.h"
+#include "TrackContainer.h"
+#include "rename_dialog.h"
+#include "SampleBuffer.h"
+#include "AudioSampleRecorder.h"
+#include "song.h"
+#include "tooltip.h"
+#include "bb_track_container.h"
+#include "string_pair_drag.h"
+#include "MainWindow.h"
+
+
+QPixmap * PatternView::s_stepBtnOn = NULL;
+QPixmap * PatternView::s_stepBtnOverlay = NULL;
+QPixmap * PatternView::s_stepBtnOff = NULL;
+QPixmap * PatternView::s_stepBtnOffLight = NULL;
+
+
+
+Pattern::Pattern( InstrumentTrack * _instrument_track ) :
+ trackContentObject( _instrument_track ),
+ m_instrumentTrack( _instrument_track ),
+ m_patternType( BeatPattern ),
+ m_steps( MidiTime::stepsPerTact() )
+{
+ setName( _instrument_track->name() );
+ init();
+}
+
+
+
+
+Pattern::Pattern( const Pattern& other ) :
+ trackContentObject( other.m_instrumentTrack ),
+ m_instrumentTrack( other.m_instrumentTrack ),
+ m_patternType( other.m_patternType ),
+ m_steps( other.m_steps )
+{
+ for( NoteVector::ConstIterator it = other.m_notes.begin(); it != other.m_notes.end(); ++it )
+ {
+ m_notes.push_back( new note( **it ) );
+ }
+
+ init();
+}
+
+
+Pattern::~Pattern()
+{
+ emit destroyedPattern( this );
+
+ for( NoteVector::Iterator it = m_notes.begin();
+ it != m_notes.end(); ++it )
+ {
+ delete *it;
+ }
+
+ m_notes.clear();
+}
+
+
+
+
+void Pattern::init()
+{
+ connect( engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ),
+ this, SLOT( changeTimeSignature() ) );
+ saveJournallingState( false );
+
+ ensureBeatNotes();
+
+ changeLength( length() );
+ restoreJournallingState();
+}
+
+
+
+
+MidiTime Pattern::length() const
+{
+ if( m_patternType == BeatPattern )
+ {
+ return beatPatternLength();
+ }
+
+ tick_t max_length = MidiTime::ticksPerTact();
+
+ for( NoteVector::ConstIterator it = m_notes.begin();
+ it != m_notes.end(); ++it )
+ {
+ if( ( *it )->length() > 0 )
+ {
+ max_length = qMax<tick_t>( max_length,
+ ( *it )->endPos() );
+ }
+ }
+ return MidiTime( max_length ).nextFullTact() *
+ MidiTime::ticksPerTact();
+}
+
+
+
+
+MidiTime Pattern::beatPatternLength() const
+{
+ tick_t max_length = MidiTime::ticksPerTact();
+
+ for( NoteVector::ConstIterator it = m_notes.begin();
+ it != m_notes.end(); ++it )
+ {
+ if( ( *it )->length() < 0 )
+ {
+ max_length = qMax<tick_t>( max_length,
+ ( *it )->pos() +
+ MidiTime::ticksPerTact() /
+ MidiTime::stepsPerTact() );
+ }
+ }
+
+ if( m_steps != MidiTime::stepsPerTact() )
+ {
+ max_length = m_steps * MidiTime::ticksPerTact() /
+ MidiTime::stepsPerTact() ;
+ }
+
+ return MidiTime( max_length ).nextFullTact() * MidiTime::ticksPerTact();
+}
+
+note * Pattern::addNote( const note & _new_note, const bool _quant_pos )
+{
+ note * new_note = new note( _new_note );
+ if( _quant_pos && engine::pianoRoll() )
+ {
+ new_note->quantizePos( engine::pianoRoll()->quantization() );
+ }
+
+ engine::mixer()->lock();
+ if( m_notes.size() == 0 || m_notes.back()->pos() <= new_note->pos() )
+ {
+ m_notes.push_back( new_note );
+ }
+ else
+ {
+ // simple algorithm for inserting the note between two
+ // notes with smaller and greater position
+ // maybe it could be optimized by starting in the middle and
+ // going forward or backward but note-inserting isn't that
+ // time-critical since it is usually not done while playing...
+ long new_note_abs_time = new_note->pos();
+ NoteVector::Iterator it = m_notes.begin();
+
+ while( it != m_notes.end() &&
+ ( *it )->pos() < new_note_abs_time )
+ {
+ ++it;
+ }
+
+ m_notes.insert( it, new_note );
+ }
+ engine::mixer()->unlock();
+
+ checkType();
+ changeLength( length() );
+
+ emit dataChanged();
+
+ updateBBTrack();
+
+ return new_note;
+}
+
+
+
+
+void Pattern::removeNote( const note * _note_to_del )
+{
+ engine::mixer()->lock();
+ NoteVector::Iterator it = m_notes.begin();
+ while( it != m_notes.end() )
+ {
+ if( *it == _note_to_del )
+ {
+ delete *it;
+ m_notes.erase( it );
+ break;
+ }
+ ++it;
+ }
+ engine::mixer()->unlock();
+
+ checkType();
+ changeLength( length() );
+
+ emit dataChanged();
+
+ updateBBTrack();
+}
+
+
+// returns a pointer to the note at specified step, or NULL if note doesn't exist
+
+note * Pattern::noteAtStep( int _step )
+{
+ for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end();
+ ++it )
+ {
+ if( ( *it )->pos() == ( _step * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() )
+ {
+ return *it;
+ }
+ }
+ return NULL;
+}
+
+
+note * Pattern::rearrangeNote( const note * _note_to_proc,
+ const bool _quant_pos )
+{
+ // just rearrange the position of the note by removing it and adding
+ // a copy of it -> addNote inserts it at the correct position
+ note copy_of_note( *_note_to_proc );
+ removeNote( _note_to_proc );
+
+ return addNote( copy_of_note, _quant_pos );
+}
+
+
+
+void Pattern::rearrangeAllNotes()
+{
+ // sort notes by start time
+ qSort(m_notes.begin(), m_notes.end(), note::lessThan );
+}
+
+
+
+void Pattern::clearNotes()
+{
+ engine::mixer()->lock();
+ for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end();
+ ++it )
+ {
+ delete *it;
+ }
+ m_notes.clear();
+ engine::mixer()->unlock();
+
+ checkType();
+ emit dataChanged();
+}
+
+
+
+
+void Pattern::setStep( int _step, bool _enabled )
+{
+ for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end();
+ ++it )
+ {
+ if( ( *it )->pos() == ( _step * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() &&
+ ( *it )->length() <= 0 )
+ {
+ ( *it )->setLength( _enabled ?
+ -DefaultTicksPerTact : 0 );
+ }
+ }
+}
+
+
+
+
+void Pattern::setType( PatternTypes _new_pattern_type )
+{
+ if( _new_pattern_type == BeatPattern ||
+ _new_pattern_type == MelodyPattern )
+ {
+ m_patternType = _new_pattern_type;
+ }
+}
+
+
+
+
+void Pattern::checkType()
+{
+ NoteVector::Iterator it = m_notes.begin();
+ while( it != m_notes.end() )
+ {
+ if( ( *it )->length() > 0 )
+ {
+ setType( Pattern::MelodyPattern );
+ return;
+ }
+ ++it;
+ }
+ setType( Pattern::BeatPattern );
+}
+
+
+
+
+void Pattern::saveSettings( QDomDocument & _doc, QDomElement & _this )
+{
+ _this.setAttribute( "type", m_patternType );
+ _this.setAttribute( "name", name() );
+ // as the target of copied/dragged pattern is always an existing
+ // pattern, we must not store actual position, instead we store -1
+ // which tells loadSettings() not to mess around with position
+ if( _this.parentNode().nodeName() == "clipboard" ||
+ _this.parentNode().nodeName() == "dnddata" )
+ {
+ _this.setAttribute( "pos", -1 );
+ }
+ else
+ {
+ _this.setAttribute( "pos", startPosition() );
+ }
+ _this.setAttribute( "len", length() );
+ _this.setAttribute( "muted", isMuted() );
+ _this.setAttribute( "steps", m_steps );
+
+ // now save settings of all notes
+ for( NoteVector::Iterator it = m_notes.begin();
+ it != m_notes.end(); ++it )
+ {
+ if( ( *it )->length() )
+ {
+ ( *it )->saveState( _doc, _this );
+ }
+ }
+}
+
+
+
+
+void Pattern::loadSettings( const QDomElement & _this )
+{
+ m_patternType = static_cast<PatternTypes>( _this.attribute( "type"
+ ).toInt() );
+ setName( _this.attribute( "name" ) );
+ if( _this.attribute( "pos" ).toInt() >= 0 )
+ {
+ movePosition( _this.attribute( "pos" ).toInt() );
+ }
+ changeLength( MidiTime( _this.attribute( "len" ).toInt() ) );
+ if( _this.attribute( "muted" ).toInt() != isMuted() )
+ {
+ toggleMute();
+ }
+
+ clearNotes();
+
+ QDomNode node = _this.firstChild();
+ while( !node.isNull() )
+ {
+ if( node.isElement() &&
+ !node.toElement().attribute( "metadata" ).toInt() )
+ {
+ note * n = new note;
+ n->restoreState( node.toElement() );
+ m_notes.push_back( n );
+ }
+ node = node.nextSibling();
+ }
+
+ m_steps = _this.attribute( "steps" ).toInt();
+ if( m_steps == 0 )
+ {
+ m_steps = MidiTime::stepsPerTact();
+ }
+
+ ensureBeatNotes();
+ checkType();
+
+ emit dataChanged();
+
+ updateBBTrack();
+}
+
+
+
+
+void Pattern::clear()
+{
+ addJournalCheckPoint();
+ clearNotes();
+ ensureBeatNotes();
+}
+
+
+
+
+void Pattern::addSteps()
+{
+ m_steps += MidiTime::stepsPerTact();
+ ensureBeatNotes();
+ emit dataChanged();
+ updateBBTrack();
+}
+
+
+
+
+void Pattern::removeSteps()
+{
+ int _n = MidiTime::stepsPerTact();
+ if( _n < m_steps )
+ {
+ for( int i = m_steps - _n; i < m_steps; ++i )
+ {
+ for( NoteVector::Iterator it = m_notes.begin();
+ it != m_notes.end(); ++it )
+ {
+ if( ( *it )->pos() ==
+ ( i * MidiTime::ticksPerTact() ) /
+ MidiTime::stepsPerTact() &&
+ ( *it )->length() <= 0 )
+ {
+ removeNote( *it );
+ break;
+ }
+ }
+ }
+ m_steps -= _n;
+ emit dataChanged();
+ }
+ updateBBTrack();
+}
+
+
+
+
+trackContentObjectView * Pattern::createView( trackView * _tv )
+{
+ return new PatternView( this, _tv );
+}
+
+
+
+
+
+void Pattern::ensureBeatNotes()
+{
+ // make sure, that all step-note exist
+ for( int i = 0; i < m_steps; ++i )
+ {
+ bool found = false;
+ for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it )
+ {
+ // if a note in this position is the one we want
+ if( ( *it )->pos() ==
+ ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact()
+ && ( *it )->length() <= 0 )
+ {
+ found = true;
+ break;
+ }
+ }
+ if( found == false )
+ {
+ addNote( note( MidiTime( 0 ), MidiTime( ( i *
+ MidiTime::ticksPerTact() ) /
+ MidiTime::stepsPerTact() ) ), false );
+ }
+ }
+
+ // remove notes we no longer need:
+ // that is, disabled notes that no longer fall to the steps of the new time sig
+
+ for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); )
+ {
+ bool needed = false;
+ for( int i = 0; i < m_steps; ++i )
+ {
+ if( ( *it )->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact()
+ || ( *it )->length() != 0 )
+ {
+ needed = true;
+ break;
+ }
+ }
+ if( needed == false )
+ {
+ delete *it;
+ it = m_notes.erase( it );
+ }
+ else ++it;
+ }
+}
+
+
+
+
+void Pattern::updateBBTrack()
+{
+ if( getTrack()->trackContainer() == engine::getBBTrackContainer() )
+ {
+ engine::getBBTrackContainer()->updateBBTrack( this );
+ }
+
+ if( engine::pianoRoll() && engine::pianoRoll()->currentPattern() == this )
+ {
+ engine::pianoRoll()->update();
+ }
+}
+
+
+
+
+bool Pattern::empty()
+{
+ for( NoteVector::ConstIterator it = m_notes.begin();
+ it != m_notes.end(); ++it )
+ {
+ if( ( *it )->length() != 0 )
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+
+
+void Pattern::changeTimeSignature()
+{
+ MidiTime last_pos = MidiTime::ticksPerTact();
+ for( NoteVector::ConstIterator cit = m_notes.begin();
+ cit != m_notes.end(); ++cit )
+ {
+ if( ( *cit )->length() < 0 && ( *cit )->pos() > last_pos )
+ {
+ last_pos = ( *cit )->pos()+MidiTime::ticksPerTact() /
+ MidiTime::stepsPerTact();
+ }
+ }
+ last_pos = last_pos.nextFullTact() * MidiTime::ticksPerTact();
+ for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); )
+ {
+ if( ( *it )->length() == 0 && ( *it )->pos() >= last_pos )
+ {
+ delete *it;
+ it = m_notes.erase( it );
+ --m_steps;
+ }
+ else
+ {
+ ++it;
+ }
+ }
+ m_steps = qMax<tick_t>(
+ qMax<tick_t>( m_steps, MidiTime::stepsPerTact() ),
+ last_pos.getTact() * MidiTime::stepsPerTact() );
+ ensureBeatNotes();
+ updateBBTrack();
+}
+
+
+
+
+
+PatternView::PatternView( Pattern* pattern, trackView* parent ) :
+ trackContentObjectView( pattern, parent ),
+ m_pat( pattern ),
+ m_paintPixmap(),
+ m_needsUpdate( true )
+{
+ connect( engine::pianoRoll(), SIGNAL( currentPatternChanged() ),
+ this, SLOT( update() ) );
+
+ if( s_stepBtnOn == NULL )
+ {
+ s_stepBtnOn = new QPixmap( embed::getIconPixmap(
+ "step_btn_on_100" ) );
+ }
+
+ if( s_stepBtnOverlay == NULL )
+ {
+ s_stepBtnOverlay = new QPixmap( embed::getIconPixmap(
+ "step_btn_on_yellow" ) );
+ }
+
+ if( s_stepBtnOff == NULL )
+ {
+ s_stepBtnOff = new QPixmap( embed::getIconPixmap(
+ "step_btn_off" ) );
+ }
+
+ if( s_stepBtnOffLight == NULL )
+ {
+ s_stepBtnOffLight = new QPixmap( embed::getIconPixmap(
+ "step_btn_off_light" ) );
+ }
+
+ setFixedHeight( parentWidget()->height() - 2 );
+ setAutoResizeEnabled( false );
+
+ toolTip::add( this,
+ tr( "double-click to open this pattern in piano-roll\n"
+ "use mouse wheel to set volume of a step" ) );
+ setStyle( QApplication::style() );
+}
+
+
+
+
+
+
+PatternView::~PatternView()
+{
+}
+
+
+
+
+
+void PatternView::update()
+{
+ m_needsUpdate = true;
+ m_pat->changeLength( m_pat->length() );
+ trackContentObjectView::update();
+}
+
+
+
+
+void PatternView::openInPianoRoll()
+{
+ engine::pianoRoll()->setCurrentPattern( m_pat );
+ engine::pianoRoll()->parentWidget()->show();
+ engine::pianoRoll()->setFocus();
+}
+
+
+
+
+void PatternView::resetName()
+{
+ m_pat->setName( m_pat->m_instrumentTrack->name() );
+}
+
+
+
+
+void PatternView::changeName()
+{
+ QString s = m_pat->name();
+ renameDialog rename_dlg( s );
+ rename_dlg.exec();
+ m_pat->setName( s );
+}
+
+
+
+
+void PatternView::constructContextMenu( QMenu * _cm )
+{
+ QAction * a = new QAction( embed::getIconPixmap( "piano" ),
+ tr( "Open in piano-roll" ), _cm );
+ _cm->insertAction( _cm->actions()[0], a );
+ connect( a, SIGNAL( triggered( bool ) ),
+ this, SLOT( openInPianoRoll() ) );
+ _cm->insertSeparator( _cm->actions()[1] );
+
+ _cm->addSeparator();
+
+ _cm->addAction( embed::getIconPixmap( "edit_erase" ),
+ tr( "Clear all notes" ), m_pat, SLOT( clear() ) );
+ _cm->addSeparator();
+
+ _cm->addAction( embed::getIconPixmap( "reload" ), tr( "Reset name" ),
+ this, SLOT( resetName() ) );
+ _cm->addAction( embed::getIconPixmap( "edit_rename" ),
+ tr( "Change name" ),
+ this, SLOT( changeName() ) );
+ _cm->addSeparator();
+
+ _cm->addAction( embed::getIconPixmap( "step_btn_add" ),
+ tr( "Add steps" ), m_pat, SLOT( addSteps() ) );
+ _cm->addAction( embed::getIconPixmap( "step_btn_remove" ),
+ tr( "Remove steps" ), m_pat, SLOT( removeSteps() ) );
+}
+
+
+
+
+void PatternView::mouseDoubleClickEvent( QMouseEvent * _me )
+{
+ if( _me->button() != Qt::LeftButton )
+ {
+ _me->ignore();
+ return;
+ }
+ if( m_pat->type() == Pattern::MelodyPattern ||
+ !( m_pat->type() == Pattern::BeatPattern &&
+ ( pixelsPerTact() >= 192 ||
+ m_pat->m_steps != MidiTime::stepsPerTact() ) &&
+ _me->y() > height() - s_stepBtnOff->height() ) )
+ {
+ openInPianoRoll();
+ }
+}
+
+
+
+
+void PatternView::mousePressEvent( QMouseEvent * _me )
+{
+ if( _me->button() == Qt::LeftButton &&
+ m_pat->m_patternType == Pattern::BeatPattern &&
+ ( fixedTCOs() || pixelsPerTact() >= 96 ||
+ m_pat->m_steps != MidiTime::stepsPerTact() ) &&
+ _me->y() > height() - s_stepBtnOff->height() )
+
+ // when mouse button is pressed in beat/bassline -mode
+
+ {
+// get the step number that was clicked on and
+// do calculations in floats to prevent rounding errors...
+ float tmp = ( ( float(_me->x()) - TCO_BORDER_WIDTH ) *
+ float( m_pat -> m_steps ) ) / float(width() - TCO_BORDER_WIDTH*2);
+
+ int step = int( tmp );
+
+// debugging to ensure we get the correct step...
+// qDebug( "Step (%f) %d", tmp, step );
+
+ if( step >= m_pat->m_steps )
+ {
+ qDebug( "Something went wrong in pattern.cpp: step %d doesn't exist in pattern!", step );
+ return;
+ }
+
+ note * n = m_pat->noteAtStep( step );
+
+ // if note at step not found, ensureBeatNotes and try again
+ if( n == NULL )
+ {
+ m_pat -> ensureBeatNotes();
+ n = m_pat->noteAtStep( step );
+ if( n == NULL ) // still can't find a note? bail!
+ {
+ qDebug( "Something went wrong in pattern.cpp: couldn't add note at step %d!", step );
+ return;
+ }
+ }
+ else // note at step found
+ {
+ if( n->length() < 0 )
+ {
+ n->setLength( 0 ); // set note as enabled beat note
+ }
+ else
+ {
+ n->setLength( -DefaultTicksPerTact ); // set note as disabled beat note
+ }
+ }
+
+ engine::getSong()->setModified();
+ update();
+
+ if( engine::pianoRoll()->currentPattern() == m_pat )
+ {
+ engine::pianoRoll()->update();
+ }
+ }
+ else
+
+ // if not in beat/bassline -mode, let parent class handle the event
+
+ {
+ trackContentObjectView::mousePressEvent( _me );
+ }
+}
+
+
+
+
+void PatternView::wheelEvent( QWheelEvent * _we )
+{
+ if( m_pat->m_patternType == Pattern::BeatPattern &&
+ ( fixedTCOs() || pixelsPerTact() >= 96 ||
+ m_pat->m_steps != MidiTime::stepsPerTact() ) &&
+ _we->y() > height() - s_stepBtnOff->height() )
+ {
+// get the step number that was wheeled on and
+// do calculations in floats to prevent rounding errors...
+ float tmp = ( ( float(_we->x()) - TCO_BORDER_WIDTH ) *
+ float( m_pat -> m_steps ) ) / float(width() - TCO_BORDER_WIDTH*2);
+
+ int step = int( tmp );
+
+ if( step >= m_pat->m_steps )
+ {
+ return;
+ }
+
+ int vol = 0;
+ int len = 0;
+
+ note * n = m_pat->noteAtStep( step );
+ if( n != NULL )
+ {
+ vol = n->getVolume();
+ len = n->length();
+
+ if( len == 0 && _we->delta() > 0 )
+ {
+ n->setLength( -DefaultTicksPerTact );
+ n->setVolume( 5 );
+ }
+ else if( _we->delta() > 0 )
+ {
+ n->setVolume( qMin( 100, vol + 5 ) );
+ }
+ else
+ {
+ n->setVolume( qMax( 0, vol - 5 ) );
+ }
+
+ engine::getSong()->setModified();
+ update();
+ if( engine::pianoRoll()->currentPattern() == m_pat )
+ {
+ engine::pianoRoll()->update();
+ }
+ }
+ _we->accept();
+ }
+ else
+ {
+ trackContentObjectView::wheelEvent( _we );
+ }
+}
+
+
+
+
+void PatternView::paintEvent( QPaintEvent * )
+{
+ if( m_needsUpdate == false )
+ {
+ QPainter p( this );
+ p.drawPixmap( 0, 0, m_paintPixmap );
+ return;
+ }
+
+ QPainter _p( this );
+ const QColor styleColor = _p.pen().brush().color();
+
+ m_pat->changeLength( m_pat->length() );
+
+ m_needsUpdate = false;
+
+ if( m_paintPixmap.isNull() == true || m_paintPixmap.size() != size() )
+ {
+ m_paintPixmap = QPixmap( size() );
+ }
+
+ QPainter p( &m_paintPixmap );
+
+ QLinearGradient lingrad( 0, 0, 0, height() );
+
+ QColor c;
+
+ if(( m_pat->m_patternType != Pattern::BeatPattern ) &&
+ !( m_pat->getTrack()->isMuted() || m_pat->isMuted() ))
+ c = isSelected() ? QColor( 0, 0, 224 )
+ : styleColor;
+ else
+ c = QColor( 80, 80, 80 );
+
+ if( m_pat->m_patternType != Pattern::BeatPattern )
+ {
+ lingrad.setColorAt( 1, c.darker( 300 ) );
+ lingrad.setColorAt( 0, c );
+ }
+ else
+ {
+ lingrad.setColorAt( 0, c.darker( 300 ) );
+ lingrad.setColorAt( 1, c );
+ }
+
+ p.setBrush( lingrad );
+ if( engine::pianoRoll()->currentPattern() == m_pat && m_pat->m_patternType != Pattern::BeatPattern )
+ p.setPen( c.lighter( 130 ) );
+ else
+ p.setPen( c.darker( 300 ) );
+ p.drawRect( QRect( 0, 0, width() - 1, height() - 1 ) );
+
+ p.setBrush( QBrush() );
+ if( m_pat->m_patternType != Pattern::BeatPattern )
+ {
+ if( engine::pianoRoll()->currentPattern() == m_pat )
+ p.setPen( c.lighter( 160 ) );
+ else
+ p.setPen( c.lighter( 130 ) );
+ p.drawRect( QRect( 1, 1, width() - 3, height() - 3 ) );
+ }
+
+ const float ppt = fixedTCOs() ?
+ ( parentWidget()->width() - 2 * TCO_BORDER_WIDTH )
+ / (float) m_pat->length().getTact() :
+ pixelsPerTact();
+
+ const int x_base = TCO_BORDER_WIDTH;
+ p.setPen( c.darker( 300 ) );
+
+ for( tact_t t = 1; t < m_pat->length().getTact(); ++t )
+ {
+ p.drawLine( x_base + static_cast<int>( ppt * t ) - 1,
+ TCO_BORDER_WIDTH, x_base + static_cast<int>(
+ ppt * t ) - 1, 5 );
+ p.drawLine( x_base + static_cast<int>( ppt * t ) - 1,
+ height() - ( 4 + 2 * TCO_BORDER_WIDTH ),
+ x_base + static_cast<int>( ppt * t ) - 1,
+ height() - 2 * TCO_BORDER_WIDTH );
+ }
+
+// melody pattern paint event
+
+ if( m_pat->m_patternType == Pattern::MelodyPattern )
+ {
+ if( m_pat->m_notes.size() > 0 )
+ {
+ // first determine the central tone so that we can
+ // display the area where most of the m_notes are
+ // also calculate min/max tones so the tonal range can be
+ // properly stretched accross the pattern vertically
+
+ int central_key = 0;
+ int max_key = 0;
+ int min_key = 9999999;
+ int total_notes = 0;
+
+ for( NoteVector::Iterator it = m_pat->m_notes.begin();
+ it != m_pat->m_notes.end(); ++it )
+ {
+ if( ( *it )->length() > 0 )
+ {
+ max_key = qMax( max_key, ( *it )->key() );
+ min_key = qMin( min_key, ( *it )->key() );
+ central_key += ( *it )->key();
+ ++total_notes;
+ }
+ }
+
+ if( total_notes > 0 )
+ {
+ central_key = central_key / total_notes;
+ const int keyrange = qMax( qMax( max_key - central_key, central_key - min_key ), 1 );
+
+ // debug code
+ // qDebug( "keyrange: %d", keyrange );
+
+ // determine height of the pattern view, sans borders
+ const int ht = height() - 1 - TCO_BORDER_WIDTH * 2;
+
+ // determine maximum height value for drawing bounds checking
+ const int max_ht = height() - 1 - TCO_BORDER_WIDTH;
+
+ // set colour based on mute status
+ if( m_pat->getTrack()->isMuted() ||
+ m_pat->isMuted() )
+ {
+ p.setPen( QColor( 160, 160, 160 ) );
+ }
+ else
+ {
+ p.setPen( fgColor() );
+ }
+
+ // scan through all the notes and draw them on the pattern
+ for( NoteVector::Iterator it =
+ m_pat->m_notes.begin();
+ it != m_pat->m_notes.end(); ++it )
+ {
+ // calculate relative y-position
+ const float y_key =
+ ( float( central_key - ( *it )->key() ) / keyrange + 1.0f ) / 2;
+ // multiply that by pattern height
+ const int y_pos = static_cast<int>( TCO_BORDER_WIDTH + y_key * ht );
+
+ // debug code
+ // if( ( *it )->length() > 0 ) qDebug( "key %d, central_key %d, y_key %f, y_pos %d", ( *it )->key(), central_key, y_key, y_pos );
+
+ // check that note isn't out of bounds, and has a length
+ if( ( *it )->length() > 0 &&
+ y_pos >= TCO_BORDER_WIDTH &&
+ y_pos <= max_ht )
+ {
+ // calculate start and end x-coords of the line to be drawn
+ const int x1 = x_base +
+ static_cast<int>
+ ( ( *it )->pos() * ( ppt / MidiTime::ticksPerTact() ) );
+ const int x2 = x_base +
+ static_cast<int>
+ ( ( ( *it )->pos() + ( *it )->length() ) * ( ppt / MidiTime::ticksPerTact() ) );
+
+ // check bounds, draw line
+ if( x1 < width() - TCO_BORDER_WIDTH )
+ p.drawLine( x1, y_pos,
+ qMin( x2, width() - TCO_BORDER_WIDTH ), y_pos );
+ }
+ }
+ }
+ }
+ }
+
+// beat pattern paint event
+
+ else if( m_pat->m_patternType == Pattern::BeatPattern &&
+ ( fixedTCOs() || ppt >= 96
+ || m_pat->m_steps != MidiTime::stepsPerTact() ) )
+ {
+ QPixmap stepon;
+ QPixmap stepoverlay;
+ QPixmap stepoff;
+ QPixmap stepoffl;
+ const int steps = qMax( 1,
+ m_pat->m_steps );
+ const int w = width() - 2 * TCO_BORDER_WIDTH;
+
+ // scale step graphics to fit the beat pattern length
+ stepon = s_stepBtnOn->scaled( w / steps,
+ s_stepBtnOn->height(),
+ Qt::IgnoreAspectRatio,
+ Qt::SmoothTransformation );
+ stepoverlay = s_stepBtnOverlay->scaled( w / steps,
+ s_stepBtnOn->height(),
+ Qt::IgnoreAspectRatio,
+ Qt::SmoothTransformation );
+ stepoff = s_stepBtnOff->scaled( w / steps,
+ s_stepBtnOff->height(),
+ Qt::IgnoreAspectRatio,
+ Qt::SmoothTransformation );
+ stepoffl = s_stepBtnOffLight->scaled( w / steps,
+ s_stepBtnOffLight->height(),
+ Qt::IgnoreAspectRatio,
+ Qt::SmoothTransformation );
+
+ for( int it = 0; it < steps; it++ ) // go through all the steps in the beat pattern
+ {
+ note * n = m_pat->noteAtStep( it );
+
+ // figure out x and y coordinates for step graphic
+ const int x = TCO_BORDER_WIDTH + static_cast<int>( it * w / steps );
+ const int y = height() - s_stepBtnOff->height() - 1;
+
+ // get volume and length of note, if noteAtStep returned null
+ // (meaning, note at step doesn't exist for some reason)
+ // then set both at zero, ie. treat as an off step
+ const int vol = ( n != NULL ? n->getVolume() : 0 );
+ const int len = ( n != NULL ? int( n->length() ) : 0 );
+
+ if( len < 0 )
+ {
+ p.drawPixmap( x, y, stepoff );
+ for( int i = 0; i < vol / 5 + 1; ++i )
+ {
+ p.drawPixmap( x, y, stepon );
+ }
+ for( int i = 0; i < ( 25 + ( vol - 75 ) ) / 5;
+ ++i )
+ {
+ p.drawPixmap( x, y, stepoverlay );
+ }
+ }
+ else if( ( it / 4 ) % 2 )
+ {
+ p.drawPixmap( x, y, stepoffl );
+ }
+ else
+ {
+ p.drawPixmap( x, y, stepoff );
+ }
+ } // end for loop
+ }
+
+ p.setFont( pointSize<8>( p.font() ) );
+
+ QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
+ ? QColor( 30, 30, 30 )
+ : textColor();
+
+ if( m_pat->name() != m_pat->instrumentTrack()->name() )
+ {
+ p.setPen( QColor( 0, 0, 0 ) );
+ p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() );
+ p.setPen( text_color );
+ p.drawText( 3, p.fontMetrics().height(), m_pat->name() );
+ }
+
+ if( m_pat->isMuted() )
+ {
+ p.drawPixmap( 3, p.fontMetrics().height() + 1,
+ embed::getIconPixmap( "muted", 16, 16 ) );
+ }
+
+ p.end();
+
+ _p.drawPixmap( 0, 0, m_paintPixmap );
+
+}
+
+
+
+
+#include "moc_Pattern.cxx"
+
+
diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp
index a886b53..7e0815c 100644
--- a/src/tracks/SampleTrack.cpp
+++ b/src/tracks/SampleTrack.cpp
@@ -4,7 +4,7 @@
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -231,6 +231,11 @@ void SampleTCOView::updateSample()
void SampleTCOView::contextMenuEvent( QContextMenuEvent * _cme )
{
+ if( _cme->modifiers() )
+ {
+ return;
+ }
+
QMenu contextMenu( this );
if( fixedTCOs() == false )
{
@@ -358,7 +363,7 @@ void SampleTCOView::paintEvent( QPaintEvent * _pe )
}
else
{
- p.setPen( c.lighter( 200 ) );
+ p.setPen( fgColor() );
}
QRect r = QRect( 1, 1,
qMax( static_cast<int>( m_tco->sampleLength() *
@@ -383,10 +388,10 @@ void SampleTCOView::paintEvent( QPaintEvent * _pe )
p.setPen( QColor( 0, 0, 0 ) );
p.drawText( 10, p.fontMetrics().height()+1, "Rec" );
- p.setPen( QColor( 255, 60, 60 ) );
+ p.setPen( textColor() );
p.drawText( 9, p.fontMetrics().height(), "Rec" );
- p.setBrush( QBrush( QColor( 255, 60, 60 ) ) );
+ p.setBrush( QBrush( textColor() ) );
p.drawEllipse( 4, 5, 4, 4 );
}
}
diff --git a/src/tracks/bb_track.cpp b/src/tracks/bb_track.cpp
index ff2b9b7..2cc4903 100644
--- a/src/tracks/bb_track.cpp
+++ b/src/tracks/bb_track.cpp
@@ -3,7 +3,7 @@
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ * This file is part of LMMS - http://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -46,12 +46,12 @@
bbTrack::infoMap bbTrack::s_infoMap;
-bbTCO::bbTCO( track * _track, unsigned int _color ) :
+bbTCO::bbTCO( track * _track ) :
trackContentObject( _track ),
- m_color( _color > 0 ? _color : defaultColor() )
+ m_color( 128, 128, 128 ),
+ m_useStyleColor( true )
{
- tact_t t = engine::getBBTrackContainer()->lengthOfBB(
- bbTrack::numOfBBTrack( getTrack() ) );
+ tact_t t = engine::getBBTrackContainer()->lengthOfBB( bbTrackIndex() );
if( t > 0 )
{
saveJournallingState( false );
@@ -70,46 +70,84 @@ bbTCO::~bbTCO()
-void bbTCO::saveSettings( QDomDocument & _doc, QDomElement & _this )
+void bbTCO::saveSettings( QDomDocument & doc, QDomElement & element )
{
- _this.setAttribute( "name", name() );
- if( _this.parentNode().nodeName() == "clipboard" )
+ element.setAttribute( "name", name() );
+ if( element.parentNode().nodeName() == "clipboard" )
{
- _this.setAttribute( "pos", -1 );
+ element.setAttribute( "pos", -1 );
}
else
{
- _this.setAttribute( "pos", startPosition() );
+ element.setAttribute( "pos", startPosition() );
+ }
+ element.setAttribute( "len", length() );
+ element.setAttribute( "muted", isMuted() );
+ element.setAttribute( "color", color() );
+
+ if( m_useStyleColor )
+ {
+ element.setAttribute( "usestyle", 1 );
+ }
+ else
+ {
+ element.setAttribute( "usestyle", 0 );
}
- _this.setAttribute( "len", length() );
- _this.setAttribute( "muted", isMuted() );
- _this.setAttribute( "color", m_color );
}
-void bbTCO::loadSettings( const QDomElement & _this )
+void bbTCO::loadSettings( const QDomElement & element )
{
- setName( _this.attribute( "name" ) );
- if( _this.attribute( "pos" ).toInt() >= 0 )
+ setName( element.attribute( "name" ) );
+ if( element.attribute( "pos" ).toInt() >= 0 )
{
- movePosition( _this.attribute( "pos" ).toInt() );
+ movePosition( element.attribute( "pos" ).toInt() );
}
- changeLength( _this.attribute( "len" ).toInt() );
- if( _this.attribute( "muted" ).toInt() != isMuted() )
+ changeLength( element.attribute( "len" ).toInt() );
+ if( element.attribute( "muted" ).toInt() != isMuted() )
{
toggleMute();
}
- if( _this.attribute( "color" ).toUInt() != 0 )
+ if( element.hasAttribute( "color" ) )
{
- m_color = _this.attribute( "color" ).toUInt();
+ setColor( QColor( element.attribute( "color" ).toUInt() ) );
+ }
+
+ if( element.hasAttribute( "usestyle" ) )
+ {
+ if( element.attribute( "usestyle" ).toUInt() == 1 )
+ {
+ m_useStyleColor = true;
+ }
+ else
+ {
+ m_useStyleColor = false;
+ }
+ }
+ else
+ {
+ if( m_color.rgb() == qRgb( 128, 182, 175 ) || m_color.rgb() == qRgb( 64, 128, 255 ) ) // old or older default color
+ {
+ m_useStyleColor = true;
+ }
+ else
+ {
+ m_useStyleColor = false;
+ }
}
}
+int bbTCO::bbTrackIndex()
+{
+ return dynamic_cast<bbTrack *>( getTrack() )->index();
+}
+
+
trackContentObjectView * bbTCO::createView( trackView * _tv )
{
@@ -158,6 +196,8 @@ void bbTCOView::constructContextMenu( QMenu * _cm )
this, SLOT( changeName() ) );
_cm->addAction( embed::getIconPixmap( "colorize" ),
tr( "Change color" ), this, SLOT( changeColor() ) );
+ _cm->addAction( embed::getIconPixmap( "colorize" ),
+ tr( "Reset color to default" ), this, SLOT( resetColor() ) );
}
@@ -173,7 +213,12 @@ void bbTCOView::mouseDoubleClickEvent( QMouseEvent * )
void bbTCOView::paintEvent( QPaintEvent * )
{
- QColor col( m_bbTCO->m_color );
+ QPainter p( this );
+
+ QColor col = m_bbTCO->m_useStyleColor
+ ? p.pen().brush().color()
+ : m_bbTCO->colorObj();
+
if( m_bbTCO->getTrack()->isMuted() || m_bbTCO->isMuted() )
{
col = QColor( 160, 160, 160 );
@@ -183,15 +228,13 @@ void bbTCOView::paintEvent( QPaintEvent * )
col = QColor( qMax( col.red() - 128, 0 ),
qMax( col.green() - 128, 0 ), 255 );
}
- QPainter p( this );
QLinearGradient lingrad( 0, 0, 0, height() );
lingrad.setColorAt( 0, col.light( 130 ) );
lingrad.setColorAt( 1, col.light( 70 ) );
p.fillRect( rect(), lingrad );
- tact_t t = engine::getBBTrackContainer()->lengthOfBB(
- bbTrack::numOfBBTrack( m_bbTCO->getTrack() ) );
+ tact_t t = engine::getBBTrackContainer()->lengthOfBB( m_bbTCO->bbTrackIndex() );
if( m_bbTCO->length() > MidiTime::ticksPerTact() && t > 0 )
{
for( int x = static_cast<int>( t * pixelsPerTact() );
@@ -215,7 +258,7 @@ void bbTCOView::paintEvent( QPaintEvent * )
p.setPen( QColor( 0, 0, 0 ) );
p.drawText( 4, p.fontMetrics().height()+1, m_bbTCO->name() );
- p.setPen( QColor( 255, 255, 255 ) );
+ p.setPen( textColor() );
p.drawText( 3, p.fontMetrics().height(), m_bbTCO->name() );
if( m_bbTCO->isMuted() )
@@ -230,7 +273,7 @@ void bbTCOView::paintEvent( QPaintEvent * )
void bbTCOView::openInBBEditor()
{
- engine::getBBTrackContainer()->setCurrentBB( bbTrack::numOfBBTrack( m_bbTCO->getTrack() ) );
+ engine::getBBTrackContainer()->setCurrentBB( m_bbTCO->bbTrackIndex() );
engine::mainWindow()->toggleBBEditorWin( true );
}
@@ -259,8 +302,8 @@ void bbTCOView::changeName()
void bbTCOView::changeColor()
{
- QColor _new_color = QColorDialog::getColor( m_bbTCO->m_color );
- if( !_new_color.isValid() )
+ QColor new_color = QColorDialog::getColor( m_bbTCO->m_color );
+ if( ! new_color.isValid() )
{
return;
}
@@ -275,34 +318,48 @@ void bbTCOView::changeColor()
bbTCOView * bb_tcov = dynamic_cast<bbTCOView *>( *it );
if( bb_tcov )
{
- bb_tcov->setColor( _new_color );
+ bb_tcov->setColor( new_color );
}
}
}
else
{
- setColor( _new_color );
+ setColor( new_color );
}
}
+/** \brief Makes the BB pattern use the colour defined in the stylesheet */
+void bbTCOView::resetColor()
+{
+ if( ! m_bbTCO->m_useStyleColor )
+ {
+ m_bbTCO->m_useStyleColor = true;
+ engine::getSong()->setModified();
+ update();
+ }
+ bbTrack::clearLastTCOColor();
+}
+
-void bbTCOView::setColor( QColor _new_color )
+void bbTCOView::setColor( QColor new_color )
{
- if( _new_color.rgb() != m_bbTCO->m_color )
+ if( new_color.rgb() != m_bbTCO->color() )
{
- m_bbTCO->m_color = _new_color.rgb();
+ m_bbTCO->setColor( new_color );
+ m_bbTCO->m_useStyleColor = false;
engine::getSong()->setModified();
update();
}
+ bbTrack::setLastTCOColor( new_color );
}
-
+QColor * bbTrack::s_lastTCOColor = NULL;
bbTrack::bbTrack( TrackContainer* tc ) :
track( BBTrack, tc )
@@ -400,24 +457,18 @@ trackView * bbTrack::createView( TrackContainerView* tcv )
trackContentObject * bbTrack::createTCO( const MidiTime & _pos )
{
- // if we're creating a new bbTCO, we colorize it according to the
- // previous bbTCO, so we have to get all TCOs from 0 to _pos and
- // pickup the last and take the color if it
- tcoVector tcos;
- getTCOsInRange( tcos, 0, _pos );
- if( tcos.size() > 0 && dynamic_cast<bbTCO *>( tcos.back() ) != NULL )
+ bbTCO * bbtco = new bbTCO( this );
+ if( s_lastTCOColor )
{
- return new bbTCO( this, dynamic_cast<bbTCO *>( tcos.back() )->color() );
-
+ bbtco->setColor( *s_lastTCOColor );
+ bbtco->setUseStyleColor( false );
}
- return new bbTCO( this );
+ return bbtco;
}
-
-
void bbTrack::saveTrackSpecificSettings( QDomDocument & _doc,
QDomElement & _this )
{
@@ -426,7 +477,7 @@ void bbTrack::saveTrackSpecificSettings( QDomDocument & _doc,
engine::getBBEditor()->currentBB() );*/
if( s_infoMap[this] == 0 &&
_this.parentNode().parentNode().nodeName() != "clone" &&
- _this.parentNode().nodeName() != "journaldata" )
+ _this.parentNode().parentNode().nodeName() != "journaldata" )
{
( (JournallingObject *)( engine::getBBTrackContainer() ) )->
saveState( _doc, _this );
@@ -504,18 +555,6 @@ bbTrack * bbTrack::findBBTrack( int _bb_num )
-int bbTrack::numOfBBTrack( track * _track )
-{
- if( dynamic_cast<bbTrack *>( _track ) != NULL )
- {
- return s_infoMap[dynamic_cast<bbTrack *>( _track )];
- }
- return 0;
-}
-
-
-
-
void bbTrack::swapBBTracks( track * _track1, track * _track2 )
{
bbTrack * t1 = dynamic_cast<bbTrack *>( _track1 );
@@ -577,8 +616,7 @@ bool bbTrackView::close()
void bbTrackView::clickedTrackLabel()
{
- engine::getBBTrackContainer()->setCurrentBB(
- bbTrack::numOfBBTrack( m_bbTrack ) );
+ engine::getBBTrackContainer()->setCurrentBB( m_bbTrack->index() );
engine::getBBEditor()->show();
/* foreach( bbTrackView * tv,
trackContainerView()->findChildren<bbTrackView *>() )
diff --git a/src/tracks/pattern.cpp b/src/tracks/pattern.cpp
deleted file mode 100644
index 952f6fd..0000000
--- a/src/tracks/pattern.cpp
+++ /dev/null
@@ -1,1163 +0,0 @@
-/*
- * pattern.cpp - implementation of class pattern which holds notes
- *
- * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
- * Copyright (c) 2005-2007 Danny McRae <khjklujn/at/yahoo.com>
- *
- * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
- *
- * 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 (see COPYING); if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- */
-
-#include <QtXml/QDomElement>
-#include <QtCore/QTimer>
-#include <QtGui/QMenu>
-#include <QtGui/QMessageBox>
-#include <QtGui/QMouseEvent>
-#include <QtGui/QPainter>
-#include <QtGui/QProgressBar>
-#include <QtGui/QPushButton>
-#include <QtAlgorithms>
-
-#include "pattern.h"
-#include "InstrumentTrack.h"
-#include "templates.h"
-#include "gui_templates.h"
-#include "embed.h"
-#include "engine.h"
-#include "PianoRoll.h"
-#include "TrackContainer.h"
-#include "rename_dialog.h"
-#include "SampleBuffer.h"
-#include "AudioSampleRecorder.h"
-#include "song.h"
-#include "tooltip.h"
-#include "bb_track_container.h"
-#include "string_pair_drag.h"
-#include "MainWindow.h"
-
-
-QPixmap * patternView::s_stepBtnOn = NULL;
-QPixmap * patternView::s_stepBtnOverlay = NULL;
-QPixmap * patternView::s_stepBtnOff = NULL;
-QPixmap * patternView::s_stepBtnOffLight = NULL;
-
-
-
-pattern::pattern( InstrumentTrack * _instrument_track ) :
- trackContentObject( _instrument_track ),
- m_instrumentTrack( _instrument_track ),
- m_patternType( BeatPattern ),
- m_steps( MidiTime::stepsPerTact() )
-{
- setName( _instrument_track->name() );
- init();
-}
-
-
-
-
-pattern::pattern( const pattern & _pat_to_copy ) :
- trackContentObject( _pat_to_copy.m_instrumentTrack ),
- m_instrumentTrack( _pat_to_copy.m_instrumentTrack ),
- m_patternType( _pat_to_copy.m_patternType ),
- m_steps( _pat_to_copy.m_steps )
-{
- for( NoteVector::ConstIterator it = _pat_to_copy.m_notes.begin();
- it != _pat_to_copy.m_notes.end(); ++it )
- {
- m_notes.push_back( new note( **it ) );
- }
-
- init();
-}
-
-
-pattern::~pattern()
-{
- for( NoteVector::Iterator it = m_notes.begin();
- it != m_notes.end(); ++it )
- {
- delete *it;
- }
-
- m_notes.clear();
-}
-
-
-
-
-void pattern::init()
-{
- connect( engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ),
- this, SLOT( changeTimeSignature() ) );
- saveJournallingState( false );
-
- ensureBeatNotes();
-
- changeLength( length() );
- restoreJournallingState();
-}
-
-
-
-
-MidiTime pattern::length() const
-{
- if( m_patternType == BeatPattern )
- {
- return beatPatternLength();
- }
-
- tick_t max_length = MidiTime::ticksPerTact();
-
- for( NoteVector::ConstIterator it = m_notes.begin();
- it != m_notes.end(); ++it )
- {
- if( ( *it )->length() > 0 )
- {
- max_length = qMax<tick_t>( max_length,
- ( *it )->endPos() );
- }
- }
- return MidiTime( max_length ).nextFullTact() *
- MidiTime::ticksPerTact();
-}
-
-
-
-
-MidiTime pattern::beatPatternLength() const
-{
- tick_t max_length = MidiTime::ticksPerTact();
-
- for( NoteVector::ConstIterator it = m_notes.begin();
- it != m_notes.end(); ++it )
- {
- if( ( *it )->length() < 0 )
- {
- max_length = qMax<tick_t>( max_length,
- ( *it )->pos() +
- MidiTime::ticksPerTact() /
- MidiTime::stepsPerTact() );
- }
- }
-
- if( m_steps != MidiTime::stepsPerTact() )
- {
- max_length = m_steps * MidiTime::ticksPerTact() /
- MidiTime::stepsPerTact() ;
- }
-
- return MidiTime( max_length ).nextFullTact() * MidiTime::ticksPerTact();
-}
-
-note * pattern::addNote( const note & _new_note, const bool _quant_pos )
-{
- note * new_note = new note( _new_note );
- if( _quant_pos && engine::pianoRoll() )
- {
- new_note->quantizePos( engine::pianoRoll()->quantization() );
- }
-
- engine::mixer()->lock();
- if( m_notes.size() == 0 || m_notes.back()->pos() <= new_note->pos() )
- {
- m_notes.push_back( new_note );
- }
- else
- {
- // simple algorithm for inserting the note between two
- // notes with smaller and greater position
- // maybe it could be optimized by starting in the middle and
- // going forward or backward but note-inserting isn't that
- // time-critical since it is usually not done while playing...
- long new_note_abs_time = new_note->pos();
- NoteVector::Iterator it = m_notes.begin();
-
- while( it != m_notes.end() &&
- ( *it )->pos() < new_note_abs_time )
- {
- ++it;
- }
-
- m_notes.insert( it, new_note );
- }
- engine::mixer()->unlock();
-
- checkType();
- changeLength( length() );
-
- emit dataChanged();
-
- updateBBTrack();
-
- return new_note;
-}
-
-
-
-
-void pattern::removeNote( const note * _note_to_del )
-{
- engine::mixer()->lock();
- NoteVector::Iterator it = m_notes.begin();
- while( it != m_notes.end() )
- {
- if( *it == _note_to_del )
- {
- delete *it;
- m_notes.erase( it );
- break;
- }
- ++it;
- }
- engine::mixer()->unlock();
-
- checkType();
- changeLength( length() );
-
- emit dataChanged();
-
- updateBBTrack();
-}
-
-
-// returns a pointer to the note at specified step, or NULL if note doesn't exist
-
-note * pattern::noteAtStep( int _step )
-{
- for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end();
- ++it )
- {
- if( ( *it )->pos() == ( _step * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() )
- {
- return *it;
- }
- }
- return NULL;
-}
-
-
-note * pattern::rearrangeNote( const note * _note_to_proc,
- const bool _quant_pos )
-{
- // just rearrange the position of the note by removing it and adding
- // a copy of it -> addNote inserts it at the correct position
- note copy_of_note( *_note_to_proc );
- removeNote( _note_to_proc );
-
- return addNote( copy_of_note, _quant_pos );
-}
-
-
-
-void pattern::rearrangeAllNotes()
-{
- // sort notes by start time
- qSort(m_notes.begin(), m_notes.end(), note::lessThan );
-}
-
-
-
-void pattern::clearNotes()
-{
- engine::mixer()->lock();
- for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end();
- ++it )
- {
- delete *it;
- }
- m_notes.clear();
- engine::mixer()->unlock();
-
- checkType();
- emit dataChanged();
-}
-
-
-
-
-void pattern::setStep( int _step, bool _enabled )
-{
- for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end();
- ++it )
- {
- if( ( *it )->pos() == ( _step * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() &&
- ( *it )->length() <= 0 )
- {
- ( *it )->setLength( _enabled ?
- -DefaultTicksPerTact : 0 );
- }
- }
-}
-
-
-
-
-void pattern::setType( PatternTypes _new_pattern_type )
-{
- if( _new_pattern_type == BeatPattern ||
- _new_pattern_type == MelodyPattern )
- {
- m_patternType = _new_pattern_type;
- }
-}
-
-
-
-
-void pattern::checkType()
-{
- NoteVector::Iterator it = m_notes.begin();
- while( it != m_notes.end() )
- {
- if( ( *it )->length() > 0 )
- {
- setType( pattern::MelodyPattern );
- return;
- }
- ++it;
- }
- setType( pattern::BeatPattern );
-}
-
-
-
-
-void pattern::saveSettings( QDomDocument & _doc, QDomElement & _this )
-{
- _this.setAttribute( "type", m_patternType );
- _this.setAttribute( "name", name() );
- // as the target of copied/dragged pattern is always an existing
- // pattern, we must not store actual position, instead we store -1
- // which tells loadSettings() not to mess around with position
- if( _this.parentNode().nodeName() == "clipboard" ||
- _this.parentNode().nodeName() == "dnddata" )
- {
- _this.setAttribute( "pos", -1 );
- }
- else
- {
- _this.setAttribute( "pos", startPosition() );
- }
- _this.setAttribute( "len", length() );
- _this.setAttribute( "muted", isMuted() );
- _this.setAttribute( "steps", m_steps );
-
- // now save settings of all notes
- for( NoteVector::Iterator it = m_notes.begin();
- it != m_notes.end(); ++it )
- {
- if( ( *it )->length() )
- {
- ( *it )->saveState( _doc, _this );
- }
- }
-}
-
-
-
-
-void pattern::loadSettings( const QDomElement & _this )
-{
- m_patternType = static_cast<PatternTypes>( _this.attribute( "type"
- ).toInt() );
- setName( _this.attribute( "name" ) );
- if( _this.attribute( "pos" ).toInt() >= 0 )
- {
- movePosition( _this.attribute( "pos" ).toInt() );
- }
- changeLength( MidiTime( _this.attribute( "len" ).toInt() ) );
- if( _this.attribute( "muted" ).toInt() != isMuted() )
- {
- toggleMute();
- }
-
- clearNotes();
-
- QDomNode node = _this.firstChild();
- while( !node.isNull() )
- {
- if( node.isElement() &&
- !node.toElement().attribute( "metadata" ).toInt() )
- {
- note * n = new note;
- n->restoreState( node.toElement() );
- m_notes.push_back( n );
- }
- node = node.nextSibling();
- }
-
- m_steps = _this.attribute( "steps" ).toInt();
- if( m_steps == 0 )
- {
- m_steps = MidiTime::stepsPerTact();
- }
-
- ensureBeatNotes();
- checkType();
-
- emit dataChanged();
-
- updateBBTrack();
-}
-
-
-
-
-void pattern::clear()
-{
- clearNotes();
- ensureBeatNotes();
-}
-
-
-
-
-void pattern::addSteps()
-{
- m_steps += MidiTime::stepsPerTact();
- ensureBeatNotes();
- emit dataChanged();
- updateBBTrack();
-}
-
-
-
-
-void pattern::removeSteps()
-{
- int _n = MidiTime::stepsPerTact();
- if( _n < m_steps )
- {
- for( int i = m_steps - _n; i < m_steps; ++i )
- {
- for( NoteVector::Iterator it = m_notes.begin();
- it != m_notes.end(); ++it )
- {
- if( ( *it )->pos() ==
- ( i * MidiTime::ticksPerTact() ) /
- MidiTime::stepsPerTact() &&
- ( *it )->length() <= 0 )
- {
- removeNote( *it );
- break;
- }
- }
- }
- m_steps -= _n;
- emit dataChanged();
- }
- updateBBTrack();
-}
-
-
-
-
-trackContentObjectView * pattern::createView( trackView * _tv )
-{
- return new patternView( this, _tv );
-}
-
-
-
-
-
-void pattern::ensureBeatNotes()
-{
- // make sure, that all step-note exist
- for( int i = 0; i < m_steps; ++i )
- {
- bool found = false;
- for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it )
- {
- // if a note in this position is the one we want
- if( ( *it )->pos() ==
- ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact()
- && ( *it )->length() <= 0 )
- {
- found = true;
- break;
- }
- }
- if( found == false )
- {
- addNote( note( MidiTime( 0 ), MidiTime( ( i *
- MidiTime::ticksPerTact() ) /
- MidiTime::stepsPerTact() ) ), false );
- }
- }
-
- // remove notes we no longer need:
- // that is, disabled notes that no longer fall to the steps of the new time sig
-
- for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); )
- {
- bool needed = false;
- for( int i = 0; i < m_steps; ++i )
- {
- if( ( *it )->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact()
- || ( *it )->length() != 0 )
- {
- needed = true;
- break;
- }
- }
- if( needed == false )
- {
- delete *it;
- it = m_notes.erase( it );
- }
- else ++it;
- }
-}
-
-
-
-
-void pattern::updateBBTrack()
-{
- if( getTrack()->trackContainer() == engine::getBBTrackContainer() )
- {
- engine::getBBTrackContainer()->updateBBTrack( this );
- }
-
- if( engine::pianoRoll() && engine::pianoRoll()->currentPattern() == this )
- {
- engine::pianoRoll()->update();
- }
-}
-
-
-
-
-bool pattern::empty()
-{
- for( NoteVector::ConstIterator it = m_notes.begin();
- it != m_notes.end(); ++it )
- {
- if( ( *it )->length() != 0 )
- {
- return false;
- }
- }
- return true;
-}
-
-
-
-
-void pattern::changeTimeSignature()
-{
- MidiTime last_pos = MidiTime::ticksPerTact();
- for( NoteVector::ConstIterator cit = m_notes.begin();
- cit != m_notes.end(); ++cit )
- {
- if( ( *cit )->length() < 0 && ( *cit )->pos() > last_pos )
- {
- last_pos = ( *cit )->pos()+MidiTime::ticksPerTact() /
- MidiTime::stepsPerTact();
- }
- }
- last_pos = last_pos.nextFullTact() * MidiTime::ticksPerTact();
- for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); )
- {
- if( ( *it )->length() == 0 && ( *it )->pos() >= last_pos )
- {
- delete *it;
- it = m_notes.erase( it );
- --m_steps;
- }
- else
- {
- ++it;
- }
- }
- m_steps = qMax<tick_t>(
- qMax<tick_t>( m_steps, MidiTime::stepsPerTact() ),
- last_pos.getTact() * MidiTime::stepsPerTact() );
- ensureBeatNotes();
- updateBBTrack();
-}
-
-
-
-
-
-patternView::patternView( pattern * _pattern, trackView * _parent ) :
- trackContentObjectView( _pattern, _parent ),
- m_pat( _pattern ),
- m_paintPixmap(),
- m_needsUpdate( true )
-{
- connect( engine::pianoRoll(), SIGNAL( currentPatternChanged() ),
- this, SLOT( update() ) );
-
- if( s_stepBtnOn == NULL )
- {
- s_stepBtnOn = new QPixmap( embed::getIconPixmap(
- "step_btn_on_100" ) );
- }
-
- if( s_stepBtnOverlay == NULL )
- {
- s_stepBtnOverlay = new QPixmap( embed::getIconPixmap(
- "step_btn_on_yellow" ) );
- }
-
- if( s_stepBtnOff == NULL )
- {
- s_stepBtnOff = new QPixmap( embed::getIconPixmap(
- "step_btn_off" ) );
- }
-
- if( s_stepBtnOffLight == NULL )
- {
- s_stepBtnOffLight = new QPixmap( embed::getIconPixmap(
- "step_btn_off_light" ) );
- }
-
- setFixedHeight( parentWidget()->height() - 2 );
- setAutoResizeEnabled( false );
-
- toolTip::add( this,
- tr( "double-click to open this pattern in piano-roll\n"
- "use mouse wheel to set volume of a step" ) );
- setStyle( QApplication::style() );
-}
-
-
-
-
-
-
-patternView::~patternView()
-{
- if( engine::pianoRoll()->currentPattern() == m_pat )
- {
- engine::pianoRoll()->setCurrentPattern( NULL );
- // we have to have the song-editor to stop playing if it played
- // us before
- if( engine::getSong()->isPlaying() &&
- engine::getSong()->playMode() ==
- song::Mode_PlayPattern )
- {
- engine::getSong()->playPattern( NULL );
- }
- }
-}
-
-
-
-
-
-void patternView::update()
-{
- m_needsUpdate = true;
- m_pat->changeLength( m_pat->length() );
- trackContentObjectView::update();
-}
-
-
-
-
-void patternView::openInPianoRoll()
-{
- engine::pianoRoll()->setCurrentPattern( m_pat );
- engine::pianoRoll()->parentWidget()->show();
- engine::pianoRoll()->setFocus();
-}
-
-
-
-
-void patternView::resetName()
-{
- m_pat->setName( m_pat->m_instrumentTrack->name() );
-}
-
-
-
-
-void patternView::changeName()
-{
- QString s = m_pat->name();
- renameDialog rename_dlg( s );
- rename_dlg.exec();
- m_pat->setName( s );
-}
-
-
-
-
-void patternView::constructContextMenu( QMenu * _cm )
-{
- QAction * a = new QAction( embed::getIconPixmap( "piano" ),
- tr( "Open in piano-roll" ), _cm );
- _cm->insertAction( _cm->actions()[0], a );
- connect( a, SIGNAL( triggered( bool ) ),
- this, SLOT( openInPianoRoll() ) );
- _cm->insertSeparator( _cm->actions()[1] );
-
- _cm->addSeparator();
-
- _cm->addAction( embed::getIconPixmap( "edit_erase" ),
- tr( "Clear all notes" ), m_pat, SLOT( clear() ) );
- _cm->addSeparator();
-
- _cm->addAction( embed::getIconPixmap( "reload" ), tr( "Reset name" ),
- this, SLOT( resetName() ) );
- _cm->addAction( embed::getIconPixmap( "edit_rename" ),
- tr( "Change name" ),
- this, SLOT( changeName() ) );
- _cm->addSeparator();
-
- _cm->addAction( embed::getIconPixmap( "step_btn_add" ),
- tr( "Add steps" ), m_pat, SLOT( addSteps() ) );
- _cm->addAction( embed::getIconPixmap( "step_btn_remove" ),
- tr( "Remove steps" ), m_pat, SLOT( removeSteps() ) );
-}
-
-
-
-
-void patternView::mouseDoubleClickEvent( QMouseEvent * _me )
-{
- if( _me->button() != Qt::LeftButton )
- {
- _me->ignore();
- return;
- }
- if( m_pat->type() == pattern::MelodyPattern ||
- !( m_pat->type() == pattern::BeatPattern &&
- ( pixelsPerTact() >= 192 ||
- m_pat->m_steps != MidiTime::stepsPerTact() ) &&
- _me->y() > height() - s_stepBtnOff->height() ) )
- {
- openInPianoRoll();
- }
-}
-
-
-
-
-void patternView::mousePressEvent( QMouseEvent * _me )
-{
- if( _me->button() == Qt::LeftButton &&
- m_pat->m_patternType == pattern::BeatPattern &&
- ( fixedTCOs() || pixelsPerTact() >= 96 ||
- m_pat->m_steps != MidiTime::stepsPerTact() ) &&
- _me->y() > height() - s_stepBtnOff->height() )
-
- // when mouse button is pressed in beat/bassline -mode
-
- {
-// get the step number that was clicked on and
-// do calculations in floats to prevent rounding errors...
- float tmp = ( ( float(_me->x()) - TCO_BORDER_WIDTH ) *
- float( m_pat -> m_steps ) ) / float(width() - TCO_BORDER_WIDTH*2);
-
- int step = int( tmp );
-
-// debugging to ensure we get the correct step...
-// qDebug( "Step (%f) %d", tmp, step );
-
- if( step >= m_pat->m_steps )
- {
- qDebug( "Something went wrong in pattern.cpp: step %d doesn't exist in pattern!", step );
- return;
- }
-
- note * n = m_pat->noteAtStep( step );
-
- // if note at step not found, ensureBeatNotes and try again
- if( n == NULL )
- {
- m_pat -> ensureBeatNotes();
- n = m_pat->noteAtStep( step );
- if( n == NULL ) // still can't find a note? bail!
- {
- qDebug( "Something went wrong in pattern.cpp: couldn't add note at step %d!", step );
- return;
- }
- }
- else // note at step found
- {
- if( n->length() < 0 )
- {
- n->setLength( 0 ); // set note as enabled beat note
- }
- else
- {
- n->setLength( -DefaultTicksPerTact ); // set note as disabled beat note
- }
- }
-
- engine::getSong()->setModified();
- update();
-
- if( engine::pianoRoll()->currentPattern() == m_pat )
- {
- engine::pianoRoll()->update();
- }
- }
- else
-
- // if not in beat/bassline -mode, let parent class handle the event
-
- {
- trackContentObjectView::mousePressEvent( _me );
- }
-}
-
-
-
-
-void patternView::wheelEvent( QWheelEvent * _we )
-{
- if( m_pat->m_patternType == pattern::BeatPattern &&
- ( fixedTCOs() || pixelsPerTact() >= 96 ||
- m_pat->m_steps != MidiTime::stepsPerTact() ) &&
- _we->y() > height() - s_stepBtnOff->height() )
- {
-// get the step number that was wheeled on and
-// do calculations in floats to prevent rounding errors...
- float tmp = ( ( float(_we->x()) - TCO_BORDER_WIDTH ) *
- float( m_pat -> m_steps ) ) / float(width() - TCO_BORDER_WIDTH*2);
-
- int step = int( tmp );
-
- if( step >= m_pat->m_steps )
- {
- return;
- }
-
- int vol = 0;
- int len = 0;
-
- note * n = m_pat->noteAtStep( step );
- if( n != NULL )
- {
- vol = n->getVolume();
- len = n->length();
- }
-
- if( len == 0 && _we->delta() > 0 )
- {
- n->setLength( -DefaultTicksPerTact );
- n->setVolume( 5 );
- }
- else if( _we->delta() > 0 )
- {
- n->setVolume( qMin( 100, vol + 5 ) );
- }
- else
- {
- n->setVolume( qMax( 0, vol - 5 ) );
- }
-
- engine::getSong()->setModified();
- update();
- if( engine::pianoRoll()->currentPattern() == m_pat )
- {
- engine::pianoRoll()->update();
- }
- _we->accept();
- }
- else
- {
- trackContentObjectView::wheelEvent( _we );
- }
-}
-
-
-
-
-void patternView::paintEvent( QPaintEvent * )
-{
- if( m_needsUpdate == false )
- {
- QPainter p( this );
- p.drawPixmap( 0, 0, m_paintPixmap );
- return;
- }
-
- QPainter _p( this );
- const QColor styleColor = _p.pen().brush().color();
-
- m_pat->changeLength( m_pat->length() );
-
- m_needsUpdate = false;
-
- if( m_paintPixmap.isNull() == true || m_paintPixmap.size() != size() )
- {
- m_paintPixmap = QPixmap( size() );
- }
-
- QPainter p( &m_paintPixmap );
-
- QLinearGradient lingrad( 0, 0, 0, height() );
-
- QColor c;
-
- if(( m_pat->m_patternType != pattern::BeatPattern ) &&
- !( m_pat->getTrack()->isMuted() || m_pat->isMuted() ))
- c = isSelected() ? QColor( 0, 0, 224 )
- : styleColor;
- else
- c = QColor( 80, 80, 80 );
-
- if( m_pat->m_patternType != pattern::BeatPattern )
- {
- lingrad.setColorAt( 1, c.darker( 300 ) );
- lingrad.setColorAt( 0, c );
- }
- else
- {
- lingrad.setColorAt( 0, c.darker( 300 ) );
- lingrad.setColorAt( 1, c );
- }
-
- p.setBrush( lingrad );
- if( engine::pianoRoll()->currentPattern() == m_pat && m_pat->m_patternType != pattern::BeatPattern )
- p.setPen( c.lighter( 130 ) );
- else
- p.setPen( c.darker( 300 ) );
- p.drawRect( QRect( 0, 0, width() - 1, height() - 1 ) );
-
- p.setBrush( QBrush() );
- if( m_pat->m_patternType != pattern::BeatPattern )
- {
- if( engine::pianoRoll()->currentPattern() == m_pat )
- p.setPen( c.lighter( 160 ) );
- else
- p.setPen( c.lighter( 130 ) );
- p.drawRect( QRect( 1, 1, width() - 3, height() - 3 ) );
- }
-
- const float ppt = fixedTCOs() ?
- ( parentWidget()->width() - 2 * TCO_BORDER_WIDTH )
- / (float) m_pat->length().getTact() :
- pixelsPerTact();
-
- const int x_base = TCO_BORDER_WIDTH;
- p.setPen( c.darker( 300 ) );
-
- for( tact_t t = 1; t < m_pat->length().getTact(); ++t )
- {
- p.drawLine( x_base + static_cast<int>( ppt * t ) - 1,
- TCO_BORDER_WIDTH, x_base + static_cast<int>(
- ppt * t ) - 1, 5 );
- p.drawLine( x_base + static_cast<int>( ppt * t ) - 1,
- height() - ( 4 + 2 * TCO_BORDER_WIDTH ),
- x_base + static_cast<int>( ppt * t ) - 1,
- height() - 2 * TCO_BORDER_WIDTH );
- }
-
-// melody pattern paint event
-
- if( m_pat->m_patternType == pattern::MelodyPattern )
- {
- if( m_pat->m_notes.size() > 0 )
- {
- // first determine the central tone so that we can
- // display the area where most of the m_notes are
- // also calculate min/max tones so the tonal range can be
- // properly stretched accross the pattern vertically
-
- int central_key = 0;
- int max_key = 0;
- int min_key = 9999999;
- int total_notes = 0;
-
- for( NoteVector::Iterator it = m_pat->m_notes.begin();
- it != m_pat->m_notes.end(); ++it )
- {
- if( ( *it )->length() > 0 )
- {
- max_key = qMax( max_key, ( *it )->key() );
- min_key = qMin( min_key, ( *it )->key() );
- central_key += ( *it )->key();
- ++total_notes;
- }
- }
-
- if( total_notes > 0 )
- {
- central_key = central_key / total_notes;
- const int keyrange = qMax( qMax( max_key - central_key, central_key - min_key ), 1 );
-
- // debug code
- // qDebug( "keyrange: %d", keyrange );
-
- // determine height of the pattern view, sans borders
- const int ht = height() - 1 - TCO_BORDER_WIDTH * 2;
-
- // determine maximum height value for drawing bounds checking
- const int max_ht = height() - 1 - TCO_BORDER_WIDTH;
-
- // set colour based on mute status
- if( m_pat->getTrack()->isMuted() ||
- m_pat->isMuted() )
- {
- p.setPen( QColor( 160, 160, 160 ) );
- }
- else
- {
- p.setPen( QColor( 255, 255, 255 ) ); /// \todo make this a qproperty
- }
-
- // scan through all the notes and draw them on the pattern
- for( NoteVector::Iterator it =
- m_pat->m_notes.begin();
- it != m_pat->m_notes.end(); ++it )
- {
- // calculate relative y-position
- const float y_key =
- ( float( central_key - ( *it )->key() ) / keyrange + 1.0f ) / 2;
- // multiply that by pattern height
- const int y_pos = static_cast<int>( TCO_BORDER_WIDTH + y_key * ht );
-
- // debug code
- // if( ( *it )->length() > 0 ) qDebug( "key %d, central_key %d, y_key %f, y_pos %d", ( *it )->key(), central_key, y_key, y_pos );
-
- // check that note isn't out of bounds, and has a length
- if( ( *it )->length() > 0 &&
- y_pos >= TCO_BORDER_WIDTH &&
- y_pos <= max_ht )
- {
- // calculate start and end x-coords of the line to be drawn
- const int x1 = x_base +
- static_cast<int>
- ( ( *it )->pos() * ( ppt / MidiTime::ticksPerTact() ) );
- const int x2 = x_base +
- static_cast<int>
- ( ( ( *it )->pos() + ( *it )->length() ) * ( ppt / MidiTime::ticksPerTact() ) );
-
- // check bounds, draw line
- if( x1 < width() - TCO_BORDER_WIDTH )
- p.drawLine( x1, y_pos,
- qMin( x2, width() - TCO_BORDER_WIDTH ), y_pos );
- }
- }
- }
- }
- }
-
-// beat pattern paint event
-
- else if( m_pat->m_patternType == pattern::BeatPattern &&
- ( fixedTCOs() || ppt >= 96
- || m_pat->m_steps != MidiTime::stepsPerTact() ) )
- {
- QPixmap stepon;
- QPixmap stepoverlay;
- QPixmap stepoff;
- QPixmap stepoffl;
- const int steps = qMax( 1,
- m_pat->m_steps );
- const int w = width() - 2 * TCO_BORDER_WIDTH;
-
- // scale step graphics to fit the beat pattern length
- stepon = s_stepBtnOn->scaled( w / steps,
- s_stepBtnOn->height(),
- Qt::IgnoreAspectRatio,
- Qt::SmoothTransformation );
- stepoverlay = s_stepBtnOverlay->scaled( w / steps,
- s_stepBtnOn->height(),
- Qt::IgnoreAspectRatio,
- Qt::SmoothTransformation );
- stepoff = s_stepBtnOff->scaled( w / steps,
- s_stepBtnOff->height(),
- Qt::IgnoreAspectRatio,
- Qt::SmoothTransformation );
- stepoffl = s_stepBtnOffLight->scaled( w / steps,
- s_stepBtnOffLight->height(),
- Qt::IgnoreAspectRatio,
- Qt::SmoothTransformation );
-
- for( int it = 0; it < steps; it++ ) // go through all the steps in the beat pattern
- {
- note * n = m_pat->noteAtStep( it );
-
- // figure out x and y coordinates for step graphic
- const int x = TCO_BORDER_WIDTH + static_cast<int>( it * w / steps );
- const int y = height() - s_stepBtnOff->height() - 1;
-
- // get volume and length of note, if noteAtStep returned null
- // (meaning, note at step doesn't exist for some reason)
- // then set both at zero, ie. treat as an off step
- const int vol = ( n != NULL ? n->getVolume() : 0 );
- const int len = ( n != NULL ? int( n->length() ) : 0 );
-
- if( len < 0 )
- {
- p.drawPixmap( x, y, stepoff );
- for( int i = 0; i < vol / 5 + 1; ++i )
- {
- p.drawPixmap( x, y, stepon );
- }
- for( int i = 0; i < ( 25 + ( vol - 75 ) ) / 5;
- ++i )
- {
- p.drawPixmap( x, y, stepoverlay );
- }
- }
- else if( ( it / 4 ) % 2 )
- {
- p.drawPixmap( x, y, stepoffl );
- }
- else
- {
- p.drawPixmap( x, y, stepoff );
- }
- } // end for loop
- }
-
- p.setFont( pointSize<8>( p.font() ) );
-
- QColor text_color = ( m_pat->isMuted() || m_pat->getTrack()->isMuted() )
- ? QColor( 30, 30, 30 )
- : QColor( 255, 255, 255 );
-
- if( m_pat->name() != m_pat->instrumentTrack()->name() )
- {
- p.setPen( QColor( 0, 0, 0 ) );
- p.drawText( 4, p.fontMetrics().height()+1, m_pat->name() );
- p.setPen( text_color );
- p.drawText( 3, p.fontMetrics().height(), m_pat->name() );
- }
-
- if( m_pat->isMuted() )
- {
- p.drawPixmap( 3, p.fontMetrics().height() + 1,
- embed::getIconPixmap( "muted", 16, 16 ) );
- }
-
- p.end();
-
- _p.drawPixmap( 0, 0, m_paintPixmap );
-
-}
-
-
-
-
-#include "moc_pattern.cxx"
-
-
diff --git a/tests/README b/tests/README
new file mode 100644
index 0000000..0f5c4a6
--- /dev/null
+++ b/tests/README
@@ -0,0 +1,5 @@
+test-files and their MD5 sums go here
+
+16a41b09841f6893c6a621f3e7c63692 emptyproject.wav
+
+
diff --git a/tests/emptyproject.mmp b/tests/emptyproject.mmp
new file mode 100644
index 0000000..204f36e
--- /dev/null
+++ b/tests/emptyproject.mmp
@@ -0,0 +1,279 @@
+<?xml version="1.0"?>
+<!DOCTYPE multimedia-project>
+<multimedia-project version="1.0" creator="Linux MultiMedia Studio (LMMS)" creatorversion="0.4.0-rc2" type="song" >
+ <head timesig_numerator="4" mastervol="100" timesig_denominator="4" bpm="140" masterpitch="0" />
+ <song>
+ <trackcontainer width="600" x="5" y="5" maximized="0" height="300" visible="1" type="song" minimized="0" >
+ <track muted="0" type="0" name="Standard-Preset" >
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
+ <instrument name="tripleoscillator" >
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="0" stphdetun2="0" wavetype1="0" wavetype2="0" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33" />
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
+ <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0" />
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" outputprogram="1" readable="0" />
+ <fxchain numofeffects="0" enabled="0" />
+ </instrumenttrack>
+ <pattern steps="16" muted="0" type="0" name="Standard-Preset" pos="12345" len="192" frozen="0" />
+ </track>
+ <track muted="0" type="2" name="Sample-Spur" >
+ <sampletrack vol="100" >
+ <fxchain numofeffects="0" enabled="0" />
+ </sampletrack>
+ </track>
+ <track muted="0" type="1" name="Beat/Bassline 0" >
+ <bbtrack>
+ <trackcontainer width="504" x="610" y="5" maximized="0" height="300" visible="1" type="bbtrackcontainer" minimized="0" >
+ <track muted="0" type="0" name="Standard-Preset" >
+ <instrumenttrack pan="0" fxch="0" pitch="0" basenote="57" vol="100" >
+ <instrument name="tripleoscillator" >
+ <tripleoscillator phoffset2="0" userwavefile0="" finer0="0" userwavefile1="" finer1="0" userwavefile2="" finer2="0" coarse0="0" coarse1="0" coarse2="0" finel0="0" finel1="0" modalgo1="2" modalgo2="2" finel2="0" pan0="0" modalgo3="2" pan1="0" stphdetun0="0" pan2="0" stphdetun1="0" wavetype0="0" stphdetun2="0" wavetype1="0" wavetype2="0" vol0="33" vol1="33" phoffset0="0" phoffset1="0" vol2="33" />
+ </instrument>
+ <eldata fres="0.5" ftype="0" fcut="14000" fwet="0" >
+ <elvol lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <elcut lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ <elres lspd_denominator="4" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" sus="0.5" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" />
+ </eldata>
+ <chordcreator chord="0" chordrange="1" chord-enabled="0" />
+ <arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100" />
+ <midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" outputprogram="1" readable="0" />
+ <fxchain numofeffects="0" enabled="0" />
+ </instrumenttrack>
+ <pattern steps="16" muted="0" type="0" name="Standard-Preset" pos="0" len="192" frozen="0" />
+ </track>
+ </trackcontainer>
+ </bbtrack>
+ </track>
+ <track muted="0" type="5" name="Automation track" >
+ <automationtrack/>
+ </track>
+ </trackcontainer>
+ <track muted="0" type="6" name="Automation track" >
+ <automationtrack/>
+ <automationpattern name="Tempo" pos="0" >
+ <time value="140" pos="0" />
+ <object id="7840741" />
+ </automationpattern>
+ <automationpattern name="Master-Lautstärke" pos="0" >
+ <time value="100" pos="0" />
+ <object id="2331772" />
+ </automationpattern>
+ <automationpattern name="Master-Tonhöhe" pos="0" >
+ <time value="0" pos="0" />
+ <object id="948063" />
+ </automationpattern>
+ </track>
+ <fxmixer width="865" x="5" y="310" maximized="0" height="278" visible="1" minimized="0" >
+ <fxchannel num="0" muted="0" volume="1" name="Master" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="1" muted="0" volume="1" name="FX 1" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="2" muted="0" volume="1" name="FX 2" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="3" muted="0" volume="1" name="FX 3" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="4" muted="0" volume="1" name="FX 4" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="5" muted="0" volume="1" name="FX 5" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="6" muted="0" volume="1" name="FX 6" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="7" muted="0" volume="1" name="FX 7" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="8" muted="0" volume="1" name="FX 8" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="9" muted="0" volume="1" name="FX 9" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="10" muted="0" volume="1" name="FX 10" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="11" muted="0" volume="1" name="FX 11" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="12" muted="0" volume="1" name="FX 12" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="13" muted="0" volume="1" name="FX 13" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="14" muted="0" volume="1" name="FX 14" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="15" muted="0" volume="1" name="FX 15" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="16" muted="0" volume="1" name="FX 16" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="17" muted="0" volume="1" name="FX 17" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="18" muted="0" volume="1" name="FX 18" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="19" muted="0" volume="1" name="FX 19" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="20" muted="0" volume="1" name="FX 20" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="21" muted="0" volume="1" name="FX 21" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="22" muted="0" volume="1" name="FX 22" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="23" muted="0" volume="1" name="FX 23" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="24" muted="0" volume="1" name="FX 24" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="25" muted="0" volume="1" name="FX 25" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="26" muted="0" volume="1" name="FX 26" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="27" muted="0" volume="1" name="FX 27" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="28" muted="0" volume="1" name="FX 28" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="29" muted="0" volume="1" name="FX 29" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="30" muted="0" volume="1" name="FX 30" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="31" muted="0" volume="1" name="FX 31" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="32" muted="0" volume="1" name="FX 32" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="33" muted="0" volume="1" name="FX 33" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="34" muted="0" volume="1" name="FX 34" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="35" muted="0" volume="1" name="FX 35" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="36" muted="0" volume="1" name="FX 36" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="37" muted="0" volume="1" name="FX 37" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="38" muted="0" volume="1" name="FX 38" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="39" muted="0" volume="1" name="FX 39" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="40" muted="0" volume="1" name="FX 40" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="41" muted="0" volume="1" name="FX 41" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="42" muted="0" volume="1" name="FX 42" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="43" muted="0" volume="1" name="FX 43" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="44" muted="0" volume="1" name="FX 44" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="45" muted="0" volume="1" name="FX 45" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="46" muted="0" volume="1" name="FX 46" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="47" muted="0" volume="1" name="FX 47" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="48" muted="0" volume="1" name="FX 48" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="49" muted="0" volume="1" name="FX 49" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="50" muted="0" volume="1" name="FX 50" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="51" muted="0" volume="1" name="FX 51" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="52" muted="0" volume="1" name="FX 52" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="53" muted="0" volume="1" name="FX 53" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="54" muted="0" volume="1" name="FX 54" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="55" muted="0" volume="1" name="FX 55" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="56" muted="0" volume="1" name="FX 56" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="57" muted="0" volume="1" name="FX 57" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="58" muted="0" volume="1" name="FX 58" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="59" muted="0" volume="1" name="FX 59" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="60" muted="0" volume="1" name="FX 60" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="61" muted="0" volume="1" name="FX 61" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="62" muted="0" volume="1" name="FX 62" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="63" muted="0" volume="1" name="FX 63" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ <fxchannel num="64" muted="0" volume="1" name="FX 64" >
+ <fxchain numofeffects="0" enabled="0" />
+ </fxchannel>
+ </fxmixer>
+ <controllerrackview width="258" x="880" y="310" maximized="0" height="278" visible="1" minimized="0" />
+ <pianoroll width="840" x="-11" y="0" maximized="0" height="480" visible="0" minimized="0" />
+ <automationeditor width="740" x="0" y="0" maximized="0" height="480" visible="0" minimized="0" />
+ <projectnotes width="400" x="700" y="10" maximized="0" height="300" visible="0" minimized="0" ><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#e0e0e0;">Schreiben Sie hier Ihre Projekt-Notizen auf.</span></p></body></html>]]></projectnotes>
+ <timeline lp1pos="192" lp0pos="0" lpstate="0" />
+ <controllers/>
+ </song>
+</multimedia-project>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-edu/pkg-team/lmms.git
More information about the debian-edu-commits
mailing list